@aigne/afs-history 1.3.0-beta → 1.74.0-beta

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 (109) hide show
  1. package/dist/index.cjs +285 -0
  2. package/dist/index.d.cts +48 -0
  3. package/dist/index.d.cts.map +1 -0
  4. package/dist/index.d.mts +48 -0
  5. package/dist/index.d.mts.map +1 -0
  6. package/dist/index.mjs +284 -0
  7. package/dist/index.mjs.map +1 -0
  8. package/dist/storage/index.cjs +64 -0
  9. package/dist/storage/index.d.cts +25 -0
  10. package/dist/storage/index.d.cts.map +1 -0
  11. package/dist/storage/index.d.mts +25 -0
  12. package/dist/storage/index.d.mts.map +1 -0
  13. package/dist/storage/index.mjs +64 -0
  14. package/dist/storage/index.mjs.map +1 -0
  15. package/dist/storage/migrate.cjs +34 -0
  16. package/dist/storage/migrate.mjs +35 -0
  17. package/dist/storage/migrate.mjs.map +1 -0
  18. package/dist/storage/migrations/001-init.cjs +25 -0
  19. package/{lib/esm/storage/migrations/001-init.js → dist/storage/migrations/001-init.mjs} +11 -7
  20. package/dist/storage/migrations/001-init.mjs.map +1 -0
  21. package/dist/storage/migrations/002-add-agent-id.cjs +13 -0
  22. package/dist/storage/migrations/002-add-agent-id.mjs +14 -0
  23. package/dist/storage/migrations/002-add-agent-id.mjs.map +1 -0
  24. package/dist/storage/migrations/003-add-compact-table.cjs +23 -0
  25. package/{lib/esm/storage/migrations/003-add-compact-table.js → dist/storage/migrations/003-add-compact-table.mjs} +11 -7
  26. package/dist/storage/migrations/003-add-compact-table.mjs.map +1 -0
  27. package/dist/storage/migrations/004-add-memory-table.cjs +23 -0
  28. package/{lib/esm/storage/migrations/004-add-memory-table.js → dist/storage/migrations/004-add-memory-table.mjs} +11 -7
  29. package/dist/storage/migrations/004-add-memory-table.mjs.map +1 -0
  30. package/dist/storage/migrations/005-add-indexes.cjs +30 -0
  31. package/dist/storage/migrations/005-add-indexes.mjs +31 -0
  32. package/dist/storage/migrations/005-add-indexes.mjs.map +1 -0
  33. package/dist/storage/models/compact.cjs +20 -0
  34. package/dist/storage/models/compact.mjs +20 -0
  35. package/dist/storage/models/compact.mjs.map +1 -0
  36. package/dist/storage/models/entries.cjs +22 -0
  37. package/dist/storage/models/entries.mjs +22 -0
  38. package/dist/storage/models/entries.mjs.map +1 -0
  39. package/dist/storage/models/memory.cjs +20 -0
  40. package/dist/storage/models/memory.mjs +20 -0
  41. package/dist/storage/models/memory.mjs.map +1 -0
  42. package/dist/storage/type.cjs +8 -0
  43. package/dist/storage/type.d.cts +55 -0
  44. package/dist/storage/type.d.cts.map +1 -0
  45. package/dist/storage/type.d.mts +55 -0
  46. package/dist/storage/type.d.mts.map +1 -0
  47. package/dist/storage/type.mjs +8 -0
  48. package/dist/storage/type.mjs.map +1 -0
  49. package/package.json +32 -41
  50. package/CHANGELOG.md +0 -390
  51. package/lib/cjs/index.d.ts +0 -41
  52. package/lib/cjs/index.js +0 -274
  53. package/lib/cjs/package.json +0 -3
  54. package/lib/cjs/storage/index.d.ts +0 -21
  55. package/lib/cjs/storage/index.js +0 -118
  56. package/lib/cjs/storage/migrate.d.ts +0 -3
  57. package/lib/cjs/storage/migrate.js +0 -41
  58. package/lib/cjs/storage/migrations/001-init.d.ts +0 -2
  59. package/lib/cjs/storage/migrations/001-init.js +0 -25
  60. package/lib/cjs/storage/migrations/002-add-agent-id.d.ts +0 -2
  61. package/lib/cjs/storage/migrations/002-add-agent-id.js +0 -13
  62. package/lib/cjs/storage/migrations/003-add-compact-table.d.ts +0 -2
  63. package/lib/cjs/storage/migrations/003-add-compact-table.js +0 -23
  64. package/lib/cjs/storage/migrations/004-add-memory-table.d.ts +0 -2
  65. package/lib/cjs/storage/migrations/004-add-memory-table.js +0 -23
  66. package/lib/cjs/storage/migrations/005-add-indexes.d.ts +0 -2
  67. package/lib/cjs/storage/migrations/005-add-indexes.js +0 -31
  68. package/lib/cjs/storage/models/compact.d.ts +0 -183
  69. package/lib/cjs/storage/models/compact.js +0 -27
  70. package/lib/cjs/storage/models/entries.d.ts +0 -218
  71. package/lib/cjs/storage/models/entries.js +0 -29
  72. package/lib/cjs/storage/models/memory.d.ts +0 -182
  73. package/lib/cjs/storage/models/memory.js +0 -27
  74. package/lib/cjs/storage/type.d.ts +0 -52
  75. package/lib/cjs/storage/type.js +0 -11
  76. package/lib/dts/index.d.ts +0 -41
  77. package/lib/dts/storage/index.d.ts +0 -21
  78. package/lib/dts/storage/migrate.d.ts +0 -3
  79. package/lib/dts/storage/migrations/001-init.d.ts +0 -2
  80. package/lib/dts/storage/migrations/002-add-agent-id.d.ts +0 -2
  81. package/lib/dts/storage/migrations/003-add-compact-table.d.ts +0 -2
  82. package/lib/dts/storage/migrations/004-add-memory-table.d.ts +0 -2
  83. package/lib/dts/storage/migrations/005-add-indexes.d.ts +0 -2
  84. package/lib/dts/storage/models/compact.d.ts +0 -183
  85. package/lib/dts/storage/models/entries.d.ts +0 -218
  86. package/lib/dts/storage/models/memory.d.ts +0 -182
  87. package/lib/dts/storage/type.d.ts +0 -52
  88. package/lib/esm/index.d.ts +0 -41
  89. package/lib/esm/index.js +0 -256
  90. package/lib/esm/package.json +0 -3
  91. package/lib/esm/storage/index.d.ts +0 -21
  92. package/lib/esm/storage/index.js +0 -100
  93. package/lib/esm/storage/migrate.d.ts +0 -3
  94. package/lib/esm/storage/migrate.js +0 -38
  95. package/lib/esm/storage/migrations/001-init.d.ts +0 -2
  96. package/lib/esm/storage/migrations/002-add-agent-id.d.ts +0 -2
  97. package/lib/esm/storage/migrations/002-add-agent-id.js +0 -10
  98. package/lib/esm/storage/migrations/003-add-compact-table.d.ts +0 -2
  99. package/lib/esm/storage/migrations/004-add-memory-table.d.ts +0 -2
  100. package/lib/esm/storage/migrations/005-add-indexes.d.ts +0 -2
  101. package/lib/esm/storage/migrations/005-add-indexes.js +0 -28
  102. package/lib/esm/storage/models/compact.d.ts +0 -183
  103. package/lib/esm/storage/models/compact.js +0 -22
  104. package/lib/esm/storage/models/entries.d.ts +0 -218
  105. package/lib/esm/storage/models/entries.js +0 -24
  106. package/lib/esm/storage/models/memory.d.ts +0 -182
  107. package/lib/esm/storage/models/memory.js +0 -22
  108. package/lib/esm/storage/type.d.ts +0 -52
  109. package/lib/esm/storage/type.js +0 -8
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../src/index.ts"],"sourcesContent":["import {\n type AFSAccessMode,\n type AFSDeleteOptions,\n type AFSDeleteResult,\n type AFSEntry,\n type AFSListOptions,\n type AFSListResult,\n type AFSModule,\n type AFSModuleClass,\n type AFSModuleLoadParams,\n type AFSReadOptions,\n type AFSReadResult,\n type AFSRoot,\n type AFSWriteEntryPayload,\n type AFSWriteOptions,\n type AFSWriteResult,\n accessModeSchema,\n} from \"@aigne/afs\";\nimport { camelize, optionalize, zodParse } from \"@aigne/afs/utils/zod\";\nimport { v7 } from \"@aigne/uuid\";\nimport { createRouter } from \"radix3\";\nimport { joinURL } from \"ufo\";\nimport { z } from \"zod\";\nimport {\n type AFSStorage,\n AFSStorageSQLite,\n type AFSStorageSQLiteOptions,\n type EntryType,\n isAFSStorage,\n type Scope,\n} from \"./storage/index.js\";\n\nexport * from \"./storage/index.js\";\n\nexport interface AFSHistoryOptions {\n storage?: AFSStorage | AFSStorageSQLiteOptions;\n /**\n * Access mode for this module.\n * @default \"readwrite\"\n */\n accessMode?: AFSAccessMode;\n}\n\nconst afsStorageOptionsSchema = camelize(\n z.object({\n url: optionalize(z.string().describe(\"Database URL for storage\")),\n }),\n);\n\nconst afsHistoryOptionsSchema = camelize(\n z.object({\n storage: optionalize(z.union([z.custom((v) => isAFSStorage(v)), afsStorageOptionsSchema])),\n accessMode: accessModeSchema,\n }),\n);\n\nexport class AFSHistory implements AFSModule {\n static schema() {\n return afsHistoryOptionsSchema;\n }\n\n static async load({ parsed }: AFSModuleLoadParams) {\n const valid = await AFSHistory.schema().parseAsync(parsed);\n return new AFSHistory(valid);\n }\n\n constructor(options?: AFSHistoryOptions) {\n zodParse(optionalize(afsHistoryOptionsSchema), options);\n\n this.storage = isAFSStorage(options?.storage)\n ? options.storage\n : new AFSStorageSQLite(this, options?.storage);\n this.accessMode = options?.accessMode ?? \"readwrite\";\n }\n\n readonly name: string = \"history\";\n\n readonly accessMode: AFSAccessMode;\n\n private storage: AFSStorage;\n\n private afs?: AFSRoot;\n\n private router = createRouter<{\n action: \"list\" | \"read\" | \"create\" | \"delete\";\n type: EntryType;\n scope: Scope;\n }>({\n routes: {\n \"/by-session\": { action: \"list\", type: \"history\", scope: \"session\" },\n \"/by-session/:sessionId\": { action: \"list\", type: \"history\", scope: \"session\" },\n \"/by-session/:sessionId/new\": { action: \"create\", type: \"history\", scope: \"session\" },\n \"/by-session/:sessionId/@metadata/compact\": {\n action: \"list\",\n type: \"compact\",\n scope: \"session\",\n },\n \"/by-session/:sessionId/@metadata/compact/new\": {\n action: \"create\",\n type: \"compact\",\n scope: \"session\",\n },\n \"/by-session/:sessionId/@metadata/compact/:compactId\": {\n action: \"read\",\n type: \"compact\",\n scope: \"session\",\n },\n \"/by-session/:sessionId/@metadata/memory\": {\n action: \"list\",\n type: \"memory\",\n scope: \"session\",\n },\n \"/by-session/:sessionId/@metadata/memory/new\": {\n action: \"create\",\n type: \"memory\",\n scope: \"session\",\n },\n \"/by-session/:sessionId/@metadata/memory/:memoryId\": {\n action: \"read\",\n type: \"memory\",\n scope: \"session\",\n },\n \"/by-session/:sessionId/:entryId\": { action: \"read\", type: \"history\", scope: \"session\" },\n \"/by-user\": { action: \"list\", type: \"history\", scope: \"user\" },\n \"/by-user/:userId\": { action: \"list\", type: \"history\", scope: \"user\" },\n \"/by-user/:userId/new\": { action: \"create\", type: \"history\", scope: \"user\" },\n \"/by-user/:userId/@metadata/compact\": { action: \"list\", type: \"compact\", scope: \"user\" },\n \"/by-user/:userId/@metadata/compact/new\": {\n action: \"create\",\n type: \"compact\",\n scope: \"user\",\n },\n \"/by-user/:userId/@metadata/compact/:compactId\": {\n action: \"read\",\n type: \"compact\",\n scope: \"user\",\n },\n \"/by-user/:userId/@metadata/memory\": { action: \"list\", type: \"memory\", scope: \"user\" },\n \"/by-user/:userId/@metadata/memory/new\": { action: \"create\", type: \"memory\", scope: \"user\" },\n \"/by-user/:userId/@metadata/memory/:memoryId\": {\n action: \"read\",\n type: \"memory\",\n scope: \"user\",\n },\n \"/by-user/:userId/:entryId\": { action: \"read\", type: \"history\", scope: \"user\" },\n \"/by-agent\": { action: \"list\", type: \"history\", scope: \"agent\" },\n \"/by-agent/:agentId\": { action: \"list\", type: \"history\", scope: \"agent\" },\n \"/by-agent/:agentId/new\": { action: \"create\", type: \"history\", scope: \"agent\" },\n \"/by-agent/:agentId/@metadata/compact\": { action: \"list\", type: \"compact\", scope: \"agent\" },\n \"/by-agent/:agentId/@metadata/compact/new\": {\n action: \"create\",\n type: \"compact\",\n scope: \"agent\",\n },\n \"/by-agent/:agentId/@metadata/compact/:compactId\": {\n action: \"read\",\n type: \"compact\",\n scope: \"agent\",\n },\n \"/by-agent/:agentId/:entryId\": { action: \"read\", type: \"history\", scope: \"agent\" },\n },\n });\n\n private rootEntries: AFSEntry[] = [\n {\n id: \"by-session\",\n path: \"/by-session\",\n description: \"Retrieve history entries by session ID.\",\n },\n {\n id: \"by-user\",\n path: \"/by-user\",\n description: \"Retrieve history entries by user ID.\",\n },\n {\n id: \"by-agent\",\n path: \"/by-agent\",\n description: \"Retrieve history entries by agent ID.\",\n },\n ];\n\n onMount(afs: AFSRoot): void {\n this.afs = afs;\n }\n\n async list(path: string, options?: AFSListOptions): Promise<AFSListResult> {\n if (path === \"/\") return { data: this.rootEntries };\n\n const match = this.router.lookup(path);\n if (!match || match.action !== \"list\") {\n return { data: [] };\n }\n\n const { type, scope } = match;\n const mergedFilter = {\n ...options?.filter,\n ...match.params,\n };\n\n const result = await this.storage.list({\n ...options,\n type,\n scope,\n filter: mergedFilter,\n });\n\n return {\n ...result,\n data: result.data.map((entry) => ({\n ...entry,\n path: this.normalizePath(entry, scope, type),\n })),\n };\n }\n\n async read(path: string, options?: AFSReadOptions): Promise<AFSReadResult> {\n const match = this.router.lookup(path);\n if (!match || match.action !== \"read\") return {};\n\n const { type, scope } = match;\n\n const entryId = match.params?.entryId ?? match.params?.compactId ?? match.params?.memoryId;\n if (!entryId) throw new Error(`Entry ID is required in the path to read ${type}.`);\n\n const mergedFilter = {\n ...options?.filter,\n ...match.params,\n };\n\n const data = await this.storage.read(entryId, {\n type,\n scope,\n filter: mergedFilter,\n });\n\n // Add virtual path prefix for entries\n return {\n data: data && {\n ...data,\n path: this.normalizePath(data, scope, type),\n },\n };\n }\n\n async write(\n path: string,\n content: AFSWriteEntryPayload,\n options: AFSWriteOptions,\n ): Promise<AFSWriteResult> {\n const id = v7();\n const match = this.router.lookup(path);\n\n if (!match || match.action !== \"create\") {\n throw new Error(\n \"Can only write to paths with 'new' suffix: /by-{scope}/{scopeId}/new or /by-{scope}/{scopeId}/@metadata/{type}/new\",\n );\n }\n\n const { type, scope } = match;\n\n // Validate that scope ID is provided in path params\n const scopeIdField = `${scope}Id`;\n const scopeIdValue = match.params?.[scopeIdField];\n if (!scopeIdValue) {\n throw new Error(`${scopeIdField} is required in the path to create ${type} entry.`);\n }\n\n const entry = await this.storage.create(\n {\n ...match.params,\n ...content,\n id,\n path: joinURL(\"/\", type, id),\n },\n { type, scope },\n );\n\n // Emit event for history entries\n if (type === \"history\") {\n this.afs?.emit(\"historyCreated\", { entry }, options);\n }\n\n return {\n data: {\n ...entry,\n path: this.normalizePath(entry, scope, type),\n },\n };\n }\n\n async delete(path: string, _options?: AFSDeleteOptions): Promise<AFSDeleteResult> {\n const match = this.router.lookup(path);\n if (!match || match.action !== \"read\") {\n throw new Error(`Cannot delete: path not found or not a valid entry path`);\n }\n\n const { type, scope } = match;\n\n const entryId = match.params?.entryId ?? match.params?.compactId ?? match.params?.memoryId;\n if (!entryId) throw new Error(`Entry ID is required in the path to delete ${type}.`);\n\n const result = await this.storage.delete(entryId, {\n type,\n scope,\n filter: match.params,\n });\n\n if (result.deletedCount === 0) {\n return {\n message: `No ${type} entry found with id ${entryId}`,\n };\n }\n\n return {\n message: `Deleted ${result.deletedCount} ${type} entry`,\n };\n }\n\n private normalizePath(entry: AFSEntry, scope: Scope, entryType?: EntryType): string {\n const scopeIdMap = {\n session: entry.sessionId,\n user: entry.userId,\n agent: entry.agentId,\n };\n\n const scopeId = scopeIdMap[scope];\n if (!scopeId) {\n throw new Error(`Cannot reset path for entry without ${scope} info.`);\n }\n\n const prefix = `by-${scope}`;\n\n // Build path based on entry type\n if (entryType === \"compact\") {\n return joinURL(\"/\", prefix, scopeId, \"@metadata/compact\", entry.id);\n }\n if (entryType === \"memory\") {\n return joinURL(\"/\", prefix, scopeId, \"@metadata/memory\", entry.id);\n }\n\n // Default: history entry\n return joinURL(\"/\", prefix, scopeId, entry.id);\n }\n}\n\nconst _typeCheck: AFSModuleClass<AFSHistory, AFSHistoryOptions> = AFSHistory;\n"],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ const require_entries = require('./models/entries.cjs');
2
+ const require_compact = require('./models/compact.cjs');
3
+ const require_memory = require('./models/memory.cjs');
4
+ const require_migrate = require('./migrate.cjs');
5
+ const require_type = require('./type.cjs');
6
+ let _aigne_sqlite = require("@aigne/sqlite");
7
+
8
+ //#region src/storage/index.ts
9
+ const DEFAULT_AFS_STORAGE_LIST_LIMIT = 10;
10
+ var AFSStorageSQLite = class {
11
+ constructor(module, options) {
12
+ this.module = module;
13
+ this.options = options;
14
+ }
15
+ _tables;
16
+ get tables() {
17
+ if (!this._tables) this._tables = (0, _aigne_sqlite.initDatabase)({ url: this.options?.url }).then((db) => require_migrate.migrate(db, this.module).then(() => ({
18
+ db,
19
+ entries: require_entries.entriesTable(this.module),
20
+ compact: require_compact.compactTable(this.module),
21
+ memory: require_memory.memoryTable(this.module)
22
+ })));
23
+ return this._tables;
24
+ }
25
+ async list(options = {}) {
26
+ const { type = "history", scope, filter, limit = DEFAULT_AFS_STORAGE_LIST_LIMIT } = options;
27
+ const { db, entries, compact, memory } = await this.tables;
28
+ const table = type === "compact" ? compact : type === "memory" ? memory : entries;
29
+ return { data: await db.select().from(table).where((0, _aigne_sqlite.and)(scope && type !== "history" ? (0, _aigne_sqlite.eq)(_aigne_sqlite.sql`json_extract(${table.metadata}, '$.scope')`, scope) : void 0, filter?.agentId ? (0, _aigne_sqlite.eq)(table.agentId, filter.agentId) : void 0, filter?.userId ? (0, _aigne_sqlite.eq)(table.userId, filter.userId) : void 0, filter?.sessionId ? (0, _aigne_sqlite.eq)(table.sessionId, filter.sessionId) : void 0, filter?.before ? (0, _aigne_sqlite.lt)(table.createdAt, new Date(filter.before)) : void 0, filter?.after ? (0, _aigne_sqlite.gt)(table.createdAt, new Date(filter.after)) : void 0)).orderBy(...(options.orderBy ?? [["createdAt", "desc"]]).map((item) => (item[1] === "asc" ? _aigne_sqlite.asc : _aigne_sqlite.desc)(_aigne_sqlite.sql.identifier(item[0])))).limit(limit).execute() };
30
+ }
31
+ async read(id, options) {
32
+ const { type = "history", scope, filter } = options ?? {};
33
+ const { db, entries, compact, memory } = await this.tables;
34
+ const table = type === "compact" ? compact : type === "memory" ? memory : entries;
35
+ return db.select().from(table).where((0, _aigne_sqlite.and)((0, _aigne_sqlite.eq)(table.id, id), scope && type !== "history" ? (0, _aigne_sqlite.eq)(_aigne_sqlite.sql`json_extract(${table.metadata}, '$.scope')`, scope) : void 0, filter?.agentId ? (0, _aigne_sqlite.eq)(table.agentId, filter.agentId) : void 0, filter?.userId ? (0, _aigne_sqlite.eq)(table.userId, filter.userId) : void 0, filter?.sessionId ? (0, _aigne_sqlite.eq)(table.sessionId, filter.sessionId) : void 0)).limit(1).execute().then((rows) => rows.at(0));
36
+ }
37
+ async create(entry, options) {
38
+ const { type = "history", scope } = options ?? {};
39
+ const { db, entries, compact, memory } = await this.tables;
40
+ const table = type === "compact" ? compact : type === "memory" ? memory : entries;
41
+ const entryData = {
42
+ ...entry,
43
+ metadata: {
44
+ ...entry.metadata,
45
+ scope
46
+ }
47
+ };
48
+ let result = await db.update(table).set(entryData).where((0, _aigne_sqlite.eq)(table.id, entry.id)).returning().execute();
49
+ if (!result.length) result = await db.insert(table).values(entryData).returning().execute();
50
+ const [res] = result;
51
+ if (!res) throw new Error(`Failed to create ${type} entry, no result`);
52
+ return res;
53
+ }
54
+ async delete(id, options) {
55
+ const { type = "history", scope, filter } = options ?? {};
56
+ const { db, entries, compact, memory } = await this.tables;
57
+ const table = type === "compact" ? compact : type === "memory" ? memory : entries;
58
+ return { deletedCount: (await db.delete(table).where((0, _aigne_sqlite.and)((0, _aigne_sqlite.eq)(table.id, id), scope && type !== "history" ? (0, _aigne_sqlite.eq)(_aigne_sqlite.sql`json_extract(${table.metadata}, '$.scope')`, scope) : void 0, filter?.agentId ? (0, _aigne_sqlite.eq)(table.agentId, filter.agentId) : void 0, filter?.userId ? (0, _aigne_sqlite.eq)(table.userId, filter.userId) : void 0, filter?.sessionId ? (0, _aigne_sqlite.eq)(table.sessionId, filter.sessionId) : void 0)).returning().execute()).length };
59
+ }
60
+ };
61
+
62
+ //#endregion
63
+ exports.AFSStorageSQLite = AFSStorageSQLite;
64
+ exports.isAFSStorage = require_type.isAFSStorage;
@@ -0,0 +1,25 @@
1
+ import { AFSStorage, AFSStorageCreateOptions, AFSStorageCreatePayload, AFSStorageDeleteOptions, AFSStorageListOptions, AFSStorageMigrations, AFSStorageReadOptions, AFSStorageTypeOptions, EntryType, Scope, isAFSStorage } from "./type.cjs";
2
+ import { AFSEntry, AFSModule } from "@aigne/afs";
3
+
4
+ //#region src/storage/index.d.ts
5
+ interface AFSStorageSQLiteOptions {
6
+ url?: string;
7
+ }
8
+ declare class AFSStorageSQLite implements AFSStorage {
9
+ module: AFSModule;
10
+ options?: AFSStorageSQLiteOptions | undefined;
11
+ constructor(module: AFSModule, options?: AFSStorageSQLiteOptions | undefined);
12
+ private _tables?;
13
+ private get tables();
14
+ list(options?: AFSStorageListOptions): Promise<{
15
+ data: AFSEntry[];
16
+ }>;
17
+ read(id: string, options?: AFSStorageReadOptions): Promise<AFSEntry | undefined>;
18
+ create(entry: AFSStorageCreatePayload, options?: AFSStorageCreateOptions): Promise<AFSEntry>;
19
+ delete(id: string, options?: AFSStorageDeleteOptions): Promise<{
20
+ deletedCount: number;
21
+ }>;
22
+ }
23
+ //#endregion
24
+ export { AFSStorage, AFSStorageCreateOptions, AFSStorageCreatePayload, AFSStorageDeleteOptions, AFSStorageListOptions, AFSStorageMigrations, AFSStorageReadOptions, AFSStorageSQLite, AFSStorageSQLiteOptions, AFSStorageTypeOptions, EntryType, Scope, isAFSStorage };
25
+ //# sourceMappingURL=index.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../../src/storage/index.ts"],"mappings":";;;;UAmBiB,uBAAA;EAAA,GAAA;AAAA;AAAA,cAIJ,gBAAA,YAA4B,UAAA;EAAA,MAAA,EAEtB,SAAA;EAAA,OAAA,GACE,uBAAA;EAAA,YAAA,MAAA,EADF,SAAA,EAAA,OAAA,GACE,uBAAA;EAAA,QAAA,OAAA;EAAA,YAAA,OAAA;EAAA,KAAA,OAAA,GAwBC,qBAAA,GAA6B,OAAA;IAAA,IAAA,EAAgB,QAAA;EAAA;EAAA,KAAA,EAAA,UAAA,OAAA,GAmChC,qBAAA,GAAwB,OAAA,CAAQ,QAAA;EAAA,OAAA,KAAA,EA6BxD,uBAAA,EAAA,OAAA,GACG,uBAAA,GACT,OAAA,CAAQ,QAAA;EAAA,OAAA,EAAA,UAAA,OAAA,GA8BwB,uBAAA,GAA0B,OAAA;IAAA,YAAA;EAAA;AAAA"}
@@ -0,0 +1,25 @@
1
+ import { AFSStorage, AFSStorageCreateOptions, AFSStorageCreatePayload, AFSStorageDeleteOptions, AFSStorageListOptions, AFSStorageMigrations, AFSStorageReadOptions, AFSStorageTypeOptions, EntryType, Scope, isAFSStorage } from "./type.mjs";
2
+ import { AFSEntry, AFSModule } from "@aigne/afs";
3
+
4
+ //#region src/storage/index.d.ts
5
+ interface AFSStorageSQLiteOptions {
6
+ url?: string;
7
+ }
8
+ declare class AFSStorageSQLite implements AFSStorage {
9
+ module: AFSModule;
10
+ options?: AFSStorageSQLiteOptions | undefined;
11
+ constructor(module: AFSModule, options?: AFSStorageSQLiteOptions | undefined);
12
+ private _tables?;
13
+ private get tables();
14
+ list(options?: AFSStorageListOptions): Promise<{
15
+ data: AFSEntry[];
16
+ }>;
17
+ read(id: string, options?: AFSStorageReadOptions): Promise<AFSEntry | undefined>;
18
+ create(entry: AFSStorageCreatePayload, options?: AFSStorageCreateOptions): Promise<AFSEntry>;
19
+ delete(id: string, options?: AFSStorageDeleteOptions): Promise<{
20
+ deletedCount: number;
21
+ }>;
22
+ }
23
+ //#endregion
24
+ export { AFSStorage, AFSStorageCreateOptions, AFSStorageCreatePayload, AFSStorageDeleteOptions, AFSStorageListOptions, AFSStorageMigrations, AFSStorageReadOptions, AFSStorageSQLite, AFSStorageSQLiteOptions, AFSStorageTypeOptions, EntryType, Scope, isAFSStorage };
25
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/storage/index.ts"],"mappings":";;;;UAmBiB,uBAAA;EAAA,GAAA;AAAA;AAAA,cAIJ,gBAAA,YAA4B,UAAA;EAAA,MAAA,EAEtB,SAAA;EAAA,OAAA,GACE,uBAAA;EAAA,YAAA,MAAA,EADF,SAAA,EAAA,OAAA,GACE,uBAAA;EAAA,QAAA,OAAA;EAAA,YAAA,OAAA;EAAA,KAAA,OAAA,GAwBC,qBAAA,GAA6B,OAAA;IAAA,IAAA,EAAgB,QAAA;EAAA;EAAA,KAAA,EAAA,UAAA,OAAA,GAmChC,qBAAA,GAAwB,OAAA,CAAQ,QAAA;EAAA,OAAA,KAAA,EA6BxD,uBAAA,EAAA,OAAA,GACG,uBAAA,GACT,OAAA,CAAQ,QAAA;EAAA,OAAA,EAAA,UAAA,OAAA,GA8BwB,uBAAA,GAA0B,OAAA;IAAA,YAAA;EAAA;AAAA"}
@@ -0,0 +1,64 @@
1
+ import { entriesTable } from "./models/entries.mjs";
2
+ import { compactTable } from "./models/compact.mjs";
3
+ import { memoryTable } from "./models/memory.mjs";
4
+ import { migrate } from "./migrate.mjs";
5
+ import { isAFSStorage } from "./type.mjs";
6
+ import { and, asc, desc, eq, gt, initDatabase, lt, sql } from "@aigne/sqlite";
7
+
8
+ //#region src/storage/index.ts
9
+ const DEFAULT_AFS_STORAGE_LIST_LIMIT = 10;
10
+ var AFSStorageSQLite = class {
11
+ constructor(module, options) {
12
+ this.module = module;
13
+ this.options = options;
14
+ }
15
+ _tables;
16
+ get tables() {
17
+ if (!this._tables) this._tables = initDatabase({ url: this.options?.url }).then((db) => migrate(db, this.module).then(() => ({
18
+ db,
19
+ entries: entriesTable(this.module),
20
+ compact: compactTable(this.module),
21
+ memory: memoryTable(this.module)
22
+ })));
23
+ return this._tables;
24
+ }
25
+ async list(options = {}) {
26
+ const { type = "history", scope, filter, limit = DEFAULT_AFS_STORAGE_LIST_LIMIT } = options;
27
+ const { db, entries, compact, memory } = await this.tables;
28
+ const table = type === "compact" ? compact : type === "memory" ? memory : entries;
29
+ return { data: await db.select().from(table).where(and(scope && type !== "history" ? eq(sql`json_extract(${table.metadata}, '$.scope')`, scope) : void 0, filter?.agentId ? eq(table.agentId, filter.agentId) : void 0, filter?.userId ? eq(table.userId, filter.userId) : void 0, filter?.sessionId ? eq(table.sessionId, filter.sessionId) : void 0, filter?.before ? lt(table.createdAt, new Date(filter.before)) : void 0, filter?.after ? gt(table.createdAt, new Date(filter.after)) : void 0)).orderBy(...(options.orderBy ?? [["createdAt", "desc"]]).map((item) => (item[1] === "asc" ? asc : desc)(sql.identifier(item[0])))).limit(limit).execute() };
30
+ }
31
+ async read(id, options) {
32
+ const { type = "history", scope, filter } = options ?? {};
33
+ const { db, entries, compact, memory } = await this.tables;
34
+ const table = type === "compact" ? compact : type === "memory" ? memory : entries;
35
+ return db.select().from(table).where(and(eq(table.id, id), scope && type !== "history" ? eq(sql`json_extract(${table.metadata}, '$.scope')`, scope) : void 0, filter?.agentId ? eq(table.agentId, filter.agentId) : void 0, filter?.userId ? eq(table.userId, filter.userId) : void 0, filter?.sessionId ? eq(table.sessionId, filter.sessionId) : void 0)).limit(1).execute().then((rows) => rows.at(0));
36
+ }
37
+ async create(entry, options) {
38
+ const { type = "history", scope } = options ?? {};
39
+ const { db, entries, compact, memory } = await this.tables;
40
+ const table = type === "compact" ? compact : type === "memory" ? memory : entries;
41
+ const entryData = {
42
+ ...entry,
43
+ metadata: {
44
+ ...entry.metadata,
45
+ scope
46
+ }
47
+ };
48
+ let result = await db.update(table).set(entryData).where(eq(table.id, entry.id)).returning().execute();
49
+ if (!result.length) result = await db.insert(table).values(entryData).returning().execute();
50
+ const [res] = result;
51
+ if (!res) throw new Error(`Failed to create ${type} entry, no result`);
52
+ return res;
53
+ }
54
+ async delete(id, options) {
55
+ const { type = "history", scope, filter } = options ?? {};
56
+ const { db, entries, compact, memory } = await this.tables;
57
+ const table = type === "compact" ? compact : type === "memory" ? memory : entries;
58
+ return { deletedCount: (await db.delete(table).where(and(eq(table.id, id), scope && type !== "history" ? eq(sql`json_extract(${table.metadata}, '$.scope')`, scope) : void 0, filter?.agentId ? eq(table.agentId, filter.agentId) : void 0, filter?.userId ? eq(table.userId, filter.userId) : void 0, filter?.sessionId ? eq(table.sessionId, filter.sessionId) : void 0)).returning().execute()).length };
59
+ }
60
+ };
61
+
62
+ //#endregion
63
+ export { AFSStorageSQLite, isAFSStorage };
64
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../src/storage/index.ts"],"sourcesContent":["import type { AFSEntry, AFSModule } from \"@aigne/afs\";\nimport { and, asc, desc, eq, gt, initDatabase, lt, sql } from \"@aigne/sqlite\";\nimport { migrate } from \"./migrate.js\";\nimport { compactTable } from \"./models/compact.js\";\nimport { entriesTable } from \"./models/entries.js\";\nimport { memoryTable } from \"./models/memory.js\";\nimport type {\n AFSStorage,\n AFSStorageCreateOptions,\n AFSStorageCreatePayload,\n AFSStorageDeleteOptions,\n AFSStorageListOptions,\n AFSStorageReadOptions,\n} from \"./type.js\";\n\nexport * from \"./type.js\";\n\nconst DEFAULT_AFS_STORAGE_LIST_LIMIT = 10;\n\nexport interface AFSStorageSQLiteOptions {\n url?: string;\n}\n\nexport class AFSStorageSQLite implements AFSStorage {\n constructor(\n public module: AFSModule,\n public options?: AFSStorageSQLiteOptions,\n ) {}\n\n private _tables?: Promise<{\n db: Awaited<ReturnType<typeof initDatabase>>;\n entries: ReturnType<typeof entriesTable>;\n compact: ReturnType<typeof compactTable>;\n memory: ReturnType<typeof memoryTable>;\n }>;\n\n private get tables() {\n if (!this._tables) {\n this._tables = initDatabase({ url: this.options?.url }).then((db) =>\n migrate(db, this.module).then(() => ({\n db,\n entries: entriesTable(this.module),\n compact: compactTable(this.module),\n memory: memoryTable(this.module),\n })),\n );\n }\n return this._tables;\n }\n\n async list(options: AFSStorageListOptions = {}): Promise<{ data: AFSEntry[] }> {\n const { type = \"history\", scope, filter, limit = DEFAULT_AFS_STORAGE_LIST_LIMIT } = options;\n\n const { db, entries, compact, memory } = await this.tables;\n\n // Select table based on type\n const table = type === \"compact\" ? compact : type === \"memory\" ? memory : entries;\n\n const data = await db\n .select()\n .from(table)\n .where(\n and(\n // Add scope filter for compact/memory tables\n scope && type !== \"history\"\n ? eq(sql`json_extract(${table.metadata}, '$.scope')`, scope)\n : undefined,\n filter?.agentId ? eq(table.agentId, filter.agentId) : undefined,\n filter?.userId ? eq(table.userId, filter.userId) : undefined,\n filter?.sessionId ? eq(table.sessionId, filter.sessionId) : undefined,\n filter?.before ? lt(table.createdAt, new Date(filter.before)) : undefined,\n filter?.after ? gt(table.createdAt, new Date(filter.after)) : undefined,\n ),\n )\n .orderBy(\n ...(options.orderBy ?? [[\"createdAt\", \"desc\"]]).map((item) =>\n (item[1] === \"asc\" ? asc : desc)(sql.identifier(item[0])),\n ),\n )\n .limit(limit)\n .execute();\n\n return { data };\n }\n\n async read(id: string, options?: AFSStorageReadOptions): Promise<AFSEntry | undefined> {\n const { type = \"history\", scope, filter } = options ?? {};\n\n const { db, entries, compact, memory } = await this.tables;\n\n // Select table based on type\n const table = type === \"compact\" ? compact : type === \"memory\" ? memory : entries;\n\n return db\n .select()\n .from(table)\n .where(\n and(\n eq(table.id, id),\n // Add scope filter for compact/memory tables\n scope && type !== \"history\"\n ? eq(sql`json_extract(${table.metadata}, '$.scope')`, scope)\n : undefined,\n filter?.agentId ? eq(table.agentId, filter.agentId) : undefined,\n filter?.userId ? eq(table.userId, filter.userId) : undefined,\n filter?.sessionId ? eq(table.sessionId, filter.sessionId) : undefined,\n ),\n )\n .limit(1)\n .execute()\n .then((rows) => rows.at(0));\n }\n\n async create(\n entry: AFSStorageCreatePayload,\n options?: AFSStorageCreateOptions,\n ): Promise<AFSEntry> {\n const { type = \"history\", scope } = options ?? {};\n\n const { db, entries, compact, memory } = await this.tables;\n\n // Select table based on type\n const table = type === \"compact\" ? compact : type === \"memory\" ? memory : entries;\n\n // Prepare entry data - only add scope to metadata for compact/memory types\n const entryData = { ...entry, metadata: { ...entry.metadata, scope } };\n\n // Try update first, then insert if not found (upsert)\n let result = await db\n .update(table)\n .set(entryData)\n .where(eq(table.id, entry.id))\n .returning()\n .execute();\n\n if (!result.length) {\n result = await db.insert(table).values(entryData).returning().execute();\n }\n\n const [res] = result;\n\n if (!res) throw new Error(`Failed to create ${type} entry, no result`);\n\n return res;\n }\n\n async delete(id: string, options?: AFSStorageDeleteOptions): Promise<{ deletedCount: number }> {\n const { type = \"history\", scope, filter } = options ?? {};\n\n const { db, entries, compact, memory } = await this.tables;\n\n // Select table based on type\n const table = type === \"compact\" ? compact : type === \"memory\" ? memory : entries;\n\n const result = await db\n .delete(table)\n .where(\n and(\n eq(table.id, id),\n // Add scope filter for compact/memory tables\n scope && type !== \"history\"\n ? eq(sql`json_extract(${table.metadata}, '$.scope')`, scope)\n : undefined,\n filter?.agentId ? eq(table.agentId, filter.agentId) : undefined,\n filter?.userId ? eq(table.userId, filter.userId) : undefined,\n filter?.sessionId ? eq(table.sessionId, filter.sessionId) : undefined,\n ),\n )\n .returning()\n .execute();\n\n return { deletedCount: result.length };\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ const require_001_init = require('./migrations/001-init.cjs');
2
+ const require_002_add_agent_id = require('./migrations/002-add-agent-id.cjs');
3
+ const require_003_add_compact_table = require('./migrations/003-add-compact-table.cjs');
4
+ const require_004_add_memory_table = require('./migrations/004-add-memory-table.cjs');
5
+ const require_005_add_indexes = require('./migrations/005-add-indexes.cjs');
6
+ let _aigne_uuid = require("@aigne/uuid");
7
+ let _aigne_sqlite = require("@aigne/sqlite");
8
+
9
+ //#region src/storage/migrate.ts
10
+ async function migrate(db, module) {
11
+ const migrations = [
12
+ require_001_init.init,
13
+ require_002_add_agent_id.addAgentId,
14
+ require_003_add_compact_table.addCompactTable,
15
+ require_004_add_memory_table.addMemoryTable,
16
+ require_005_add_indexes.addIndexes
17
+ ];
18
+ const migrationsTable = "__drizzle_migrations";
19
+ const migrationTableCreate = _aigne_sqlite.sql`
20
+ CREATE TABLE IF NOT EXISTS ${_aigne_sqlite.sql.identifier(migrationsTable)} (
21
+ "id" SERIAL PRIMARY KEY,
22
+ "moduleId" TEXT NOT NULL,
23
+ "hash" TEXT NOT NULL
24
+ )
25
+ `;
26
+ await db.run(migrationTableCreate).execute();
27
+ const lastDbMigration = (await db.values(_aigne_sqlite.sql`SELECT "id", "moduleId", "hash" FROM ${_aigne_sqlite.sql.identifier(migrationsTable)} WHERE "moduleId" = ${_aigne_sqlite.sql.param(module.name)} ORDER BY id DESC LIMIT 1`).execute())[0];
28
+ const queriesToRun = [];
29
+ for (const migration of migrations) if (!lastDbMigration || lastDbMigration[2] < migration.hash) queriesToRun.push(...migration.sql(module), _aigne_sqlite.sql`INSERT INTO ${_aigne_sqlite.sql.identifier(migrationsTable)} ("id", "moduleId", "hash") VALUES(${_aigne_sqlite.sql.param((0, _aigne_uuid.v7)())}, ${_aigne_sqlite.sql.param(module.name)}, ${_aigne_sqlite.sql.param(migration.hash)})`);
30
+ for (const query of queriesToRun) await db.run(query).execute();
31
+ }
32
+
33
+ //#endregion
34
+ exports.migrate = migrate;
@@ -0,0 +1,35 @@
1
+ import { init } from "./migrations/001-init.mjs";
2
+ import { addAgentId } from "./migrations/002-add-agent-id.mjs";
3
+ import { addCompactTable } from "./migrations/003-add-compact-table.mjs";
4
+ import { addMemoryTable } from "./migrations/004-add-memory-table.mjs";
5
+ import { addIndexes } from "./migrations/005-add-indexes.mjs";
6
+ import { v7 } from "@aigne/uuid";
7
+ import { sql } from "@aigne/sqlite";
8
+
9
+ //#region src/storage/migrate.ts
10
+ async function migrate(db, module) {
11
+ const migrations = [
12
+ init,
13
+ addAgentId,
14
+ addCompactTable,
15
+ addMemoryTable,
16
+ addIndexes
17
+ ];
18
+ const migrationsTable = "__drizzle_migrations";
19
+ const migrationTableCreate = sql`
20
+ CREATE TABLE IF NOT EXISTS ${sql.identifier(migrationsTable)} (
21
+ "id" SERIAL PRIMARY KEY,
22
+ "moduleId" TEXT NOT NULL,
23
+ "hash" TEXT NOT NULL
24
+ )
25
+ `;
26
+ await db.run(migrationTableCreate).execute();
27
+ const lastDbMigration = (await db.values(sql`SELECT "id", "moduleId", "hash" FROM ${sql.identifier(migrationsTable)} WHERE "moduleId" = ${sql.param(module.name)} ORDER BY id DESC LIMIT 1`).execute())[0];
28
+ const queriesToRun = [];
29
+ for (const migration of migrations) if (!lastDbMigration || lastDbMigration[2] < migration.hash) queriesToRun.push(...migration.sql(module), sql`INSERT INTO ${sql.identifier(migrationsTable)} ("id", "moduleId", "hash") VALUES(${sql.param(v7())}, ${sql.param(module.name)}, ${sql.param(migration.hash)})`);
30
+ for (const query of queriesToRun) await db.run(query).execute();
31
+ }
32
+
33
+ //#endregion
34
+ export { migrate };
35
+ //# sourceMappingURL=migrate.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.mjs","names":[],"sources":["../../src/storage/migrate.ts"],"sourcesContent":["import type { AFSModule } from \"@aigne/afs\";\nimport { type initDatabase, type SQL, sql } from \"@aigne/sqlite\";\nimport { v7 } from \"@aigne/uuid\";\nimport { init } from \"./migrations/001-init.js\";\nimport { addAgentId } from \"./migrations/002-add-agent-id.js\";\nimport { addCompactTable } from \"./migrations/003-add-compact-table.js\";\nimport { addMemoryTable } from \"./migrations/004-add-memory-table.js\";\nimport { addIndexes } from \"./migrations/005-add-indexes.js\";\nimport type { AFSStorageMigrations } from \"./type.js\";\n\nexport async function migrate(db: Awaited<ReturnType<typeof initDatabase>>, module: AFSModule) {\n const migrations: AFSStorageMigrations[] = [\n init,\n addAgentId,\n addCompactTable,\n addMemoryTable,\n addIndexes,\n ];\n\n const migrationsTable = \"__drizzle_migrations\";\n const migrationTableCreate = sql`\n CREATE TABLE IF NOT EXISTS ${sql.identifier(migrationsTable)} (\n \"id\" SERIAL PRIMARY KEY,\n \"moduleId\" TEXT NOT NULL,\n \"hash\" TEXT NOT NULL\n )\n `;\n\n await db.run(migrationTableCreate).execute();\n\n const dbMigrations = await db\n .values<[number, string, string]>(\n sql`SELECT \"id\", \"moduleId\", \"hash\" FROM ${sql.identifier(migrationsTable)} WHERE \"moduleId\" = ${sql.param(module.name)} ORDER BY id DESC LIMIT 1`,\n )\n .execute();\n\n const lastDbMigration = dbMigrations[0];\n\n const queriesToRun: SQL[] = [];\n\n for (const migration of migrations) {\n if (!lastDbMigration || lastDbMigration[2] < migration.hash) {\n queriesToRun.push(\n ...migration.sql(module),\n sql`INSERT INTO ${sql.identifier(migrationsTable)} (\"id\", \"moduleId\", \"hash\") VALUES(${sql.param(v7())}, ${sql.param(module.name)}, ${sql.param(migration.hash)})`,\n );\n }\n }\n\n for (const query of queriesToRun) {\n await db.run(query).execute();\n }\n}\n"],"mappings":";;;;;;;;;AAUA,eAAsB,QAAQ,IAA8C,QAAmB;CAC7F,MAAM,aAAqC;EACzC;EACA;EACA;EACA;EACA;EACD;CAED,MAAM,kBAAkB;CACxB,MAAM,uBAAuB,GAAG;iCACD,IAAI,WAAW,gBAAgB,CAAC;;;;;;AAO/D,OAAM,GAAG,IAAI,qBAAqB,CAAC,SAAS;CAQ5C,MAAM,mBANe,MAAM,GACxB,OACC,GAAG,wCAAwC,IAAI,WAAW,gBAAgB,CAAC,sBAAsB,IAAI,MAAM,OAAO,KAAK,CAAC,2BACzH,CACA,SAAS,EAEyB;CAErC,MAAM,eAAsB,EAAE;AAE9B,MAAK,MAAM,aAAa,WACtB,KAAI,CAAC,mBAAmB,gBAAgB,KAAK,UAAU,KACrD,cAAa,KACX,GAAG,UAAU,IAAI,OAAO,EACxB,GAAG,eAAe,IAAI,WAAW,gBAAgB,CAAC,qCAAqC,IAAI,MAAM,IAAI,CAAC,CAAC,IAAI,IAAI,MAAM,OAAO,KAAK,CAAC,IAAI,IAAI,MAAM,UAAU,KAAK,CAAC,GACjK;AAIL,MAAK,MAAM,SAAS,aAClB,OAAM,GAAG,IAAI,MAAM,CAAC,SAAS"}
@@ -0,0 +1,25 @@
1
+ const require_entries = require('../models/entries.cjs');
2
+ let _aigne_sqlite = require("@aigne/sqlite");
3
+
4
+ //#region src/storage/migrations/001-init.ts
5
+ const init = {
6
+ hash: "001-init",
7
+ sql: (module) => [_aigne_sqlite.sql`\
8
+ CREATE TABLE ${_aigne_sqlite.sql.identifier(require_entries.entriesTableName(module))} (
9
+ "id" TEXT NOT NULL PRIMARY KEY,
10
+ "createdAt" DATETIME NOT NULL,
11
+ "updatedAt" DATETIME NOT NULL,
12
+ "path" TEXT NOT NULL,
13
+ "userId" TEXT,
14
+ "sessionId" TEXT,
15
+ "summary" TEXT,
16
+ "metadata" JSON,
17
+ "linkTo" TEXT,
18
+ "content" JSON,
19
+ UNIQUE (path)
20
+ )
21
+ `]
22
+ };
23
+
24
+ //#endregion
25
+ exports.init = init;
@@ -1,9 +1,10 @@
1
+ import { entriesTableName } from "../models/entries.mjs";
1
2
  import { sql } from "@aigne/sqlite";
2
- import { entriesTableName } from "../models/entries.js";
3
- export const init = {
4
- hash: "001-init",
5
- sql: (module) => [
6
- sql `\
3
+
4
+ //#region src/storage/migrations/001-init.ts
5
+ const init = {
6
+ hash: "001-init",
7
+ sql: (module) => [sql`\
7
8
  CREATE TABLE ${sql.identifier(entriesTableName(module))} (
8
9
  "id" TEXT NOT NULL PRIMARY KEY,
9
10
  "createdAt" DATETIME NOT NULL,
@@ -17,6 +18,9 @@ CREATE TABLE ${sql.identifier(entriesTableName(module))} (
17
18
  "content" JSON,
18
19
  UNIQUE (path)
19
20
  )
20
- `,
21
- ],
21
+ `]
22
22
  };
23
+
24
+ //#endregion
25
+ export { init };
26
+ //# sourceMappingURL=001-init.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"001-init.mjs","names":[],"sources":["../../../src/storage/migrations/001-init.ts"],"sourcesContent":["import type { AFSModule } from \"@aigne/afs\";\nimport { sql } from \"@aigne/sqlite\";\nimport { entriesTableName } from \"../models/entries.js\";\nimport type { AFSStorageMigrations } from \"../type.js\";\n\nexport const init: AFSStorageMigrations = {\n hash: \"001-init\",\n sql: (module: AFSModule) => [\n sql`\\\nCREATE TABLE ${sql.identifier(entriesTableName(module))} (\n \"id\" TEXT NOT NULL PRIMARY KEY,\n \"createdAt\" DATETIME NOT NULL,\n \"updatedAt\" DATETIME NOT NULL,\n \"path\" TEXT NOT NULL,\n \"userId\" TEXT,\n \"sessionId\" TEXT,\n \"summary\" TEXT,\n \"metadata\" JSON,\n \"linkTo\" TEXT,\n \"content\" JSON,\n UNIQUE (path)\n)\n`,\n ],\n};\n"],"mappings":";;;;AAKA,MAAa,OAA6B;CACxC,MAAM;CACN,MAAM,WAAsB,CAC1B,GAAG;eACQ,IAAI,WAAW,iBAAiB,OAAO,CAAC,CAAC;;;;;;;;;;;;;EAcrD;CACF"}
@@ -0,0 +1,13 @@
1
+ const require_entries = require('../models/entries.cjs');
2
+ let _aigne_sqlite = require("@aigne/sqlite");
3
+
4
+ //#region src/storage/migrations/002-add-agent-id.ts
5
+ const addAgentId = {
6
+ hash: "002-add-agent-id",
7
+ sql: (module) => [_aigne_sqlite.sql`\
8
+ ALTER TABLE ${_aigne_sqlite.sql.identifier(require_entries.entriesTableName(module))} ADD COLUMN "agentId" TEXT;
9
+ `]
10
+ };
11
+
12
+ //#endregion
13
+ exports.addAgentId = addAgentId;
@@ -0,0 +1,14 @@
1
+ import { entriesTableName } from "../models/entries.mjs";
2
+ import { sql } from "@aigne/sqlite";
3
+
4
+ //#region src/storage/migrations/002-add-agent-id.ts
5
+ const addAgentId = {
6
+ hash: "002-add-agent-id",
7
+ sql: (module) => [sql`\
8
+ ALTER TABLE ${sql.identifier(entriesTableName(module))} ADD COLUMN "agentId" TEXT;
9
+ `]
10
+ };
11
+
12
+ //#endregion
13
+ export { addAgentId };
14
+ //# sourceMappingURL=002-add-agent-id.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"002-add-agent-id.mjs","names":[],"sources":["../../../src/storage/migrations/002-add-agent-id.ts"],"sourcesContent":["import type { AFSModule } from \"@aigne/afs\";\nimport { sql } from \"@aigne/sqlite\";\nimport { entriesTableName } from \"../models/entries.js\";\nimport type { AFSStorageMigrations } from \"../type.js\";\n\nexport const addAgentId: AFSStorageMigrations = {\n hash: \"002-add-agent-id\",\n sql: (module: AFSModule) => [\n sql`\\\nALTER TABLE ${sql.identifier(entriesTableName(module))} ADD COLUMN \"agentId\" TEXT;\n`,\n ],\n};\n"],"mappings":";;;;AAKA,MAAa,aAAmC;CAC9C,MAAM;CACN,MAAM,WAAsB,CAC1B,GAAG;cACO,IAAI,WAAW,iBAAiB,OAAO,CAAC,CAAC;EAEpD;CACF"}
@@ -0,0 +1,23 @@
1
+ const require_compact = require('../models/compact.cjs');
2
+ let _aigne_sqlite = require("@aigne/sqlite");
3
+
4
+ //#region src/storage/migrations/003-add-compact-table.ts
5
+ const addCompactTable = {
6
+ hash: "003-add-compact-table",
7
+ sql: (module) => [_aigne_sqlite.sql`\
8
+ CREATE TABLE IF NOT EXISTS ${_aigne_sqlite.sql.identifier(require_compact.compactTableName(module))} (
9
+ "id" TEXT NOT NULL PRIMARY KEY,
10
+ "createdAt" DATETIME NOT NULL,
11
+ "updatedAt" DATETIME NOT NULL,
12
+ "path" TEXT NOT NULL,
13
+ "sessionId" TEXT,
14
+ "userId" TEXT,
15
+ "agentId" TEXT,
16
+ "metadata" JSON,
17
+ "content" JSON
18
+ )
19
+ `]
20
+ };
21
+
22
+ //#endregion
23
+ exports.addCompactTable = addCompactTable;
@@ -1,9 +1,10 @@
1
+ import { compactTableName } from "../models/compact.mjs";
1
2
  import { sql } from "@aigne/sqlite";
2
- import { compactTableName } from "../models/compact.js";
3
- export const addCompactTable = {
4
- hash: "003-add-compact-table",
5
- sql: (module) => [
6
- sql `\
3
+
4
+ //#region src/storage/migrations/003-add-compact-table.ts
5
+ const addCompactTable = {
6
+ hash: "003-add-compact-table",
7
+ sql: (module) => [sql`\
7
8
  CREATE TABLE IF NOT EXISTS ${sql.identifier(compactTableName(module))} (
8
9
  "id" TEXT NOT NULL PRIMARY KEY,
9
10
  "createdAt" DATETIME NOT NULL,
@@ -15,6 +16,9 @@ CREATE TABLE IF NOT EXISTS ${sql.identifier(compactTableName(module))} (
15
16
  "metadata" JSON,
16
17
  "content" JSON
17
18
  )
18
- `,
19
- ],
19
+ `]
20
20
  };
21
+
22
+ //#endregion
23
+ export { addCompactTable };
24
+ //# sourceMappingURL=003-add-compact-table.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"003-add-compact-table.mjs","names":[],"sources":["../../../src/storage/migrations/003-add-compact-table.ts"],"sourcesContent":["import type { AFSModule } from \"@aigne/afs\";\nimport { sql } from \"@aigne/sqlite\";\nimport { compactTableName } from \"../models/compact.js\";\nimport type { AFSStorageMigrations } from \"../type.js\";\n\nexport const addCompactTable: AFSStorageMigrations = {\n hash: \"003-add-compact-table\",\n sql: (module: AFSModule) => [\n sql`\\\nCREATE TABLE IF NOT EXISTS ${sql.identifier(compactTableName(module))} (\n \"id\" TEXT NOT NULL PRIMARY KEY,\n \"createdAt\" DATETIME NOT NULL,\n \"updatedAt\" DATETIME NOT NULL,\n \"path\" TEXT NOT NULL,\n \"sessionId\" TEXT,\n \"userId\" TEXT,\n \"agentId\" TEXT,\n \"metadata\" JSON,\n \"content\" JSON\n)\n`,\n ],\n};\n"],"mappings":";;;;AAKA,MAAa,kBAAwC;CACnD,MAAM;CACN,MAAM,WAAsB,CAC1B,GAAG;6BACsB,IAAI,WAAW,iBAAiB,OAAO,CAAC,CAAC;;;;;;;;;;;EAYnE;CACF"}
@@ -0,0 +1,23 @@
1
+ const require_memory = require('../models/memory.cjs');
2
+ let _aigne_sqlite = require("@aigne/sqlite");
3
+
4
+ //#region src/storage/migrations/004-add-memory-table.ts
5
+ const addMemoryTable = {
6
+ hash: "004-add-memory-table",
7
+ sql: (module) => [_aigne_sqlite.sql`\
8
+ CREATE TABLE IF NOT EXISTS ${_aigne_sqlite.sql.identifier(require_memory.memoryTableName(module))} (
9
+ "id" TEXT NOT NULL PRIMARY KEY,
10
+ "createdAt" DATETIME NOT NULL,
11
+ "updatedAt" DATETIME NOT NULL,
12
+ "path" TEXT NOT NULL,
13
+ "sessionId" TEXT,
14
+ "userId" TEXT,
15
+ "agentId" TEXT,
16
+ "metadata" JSON,
17
+ "content" JSON
18
+ )
19
+ `]
20
+ };
21
+
22
+ //#endregion
23
+ exports.addMemoryTable = addMemoryTable;
@@ -1,9 +1,10 @@
1
+ import { memoryTableName } from "../models/memory.mjs";
1
2
  import { sql } from "@aigne/sqlite";
2
- import { memoryTableName } from "../models/memory.js";
3
- export const addMemoryTable = {
4
- hash: "004-add-memory-table",
5
- sql: (module) => [
6
- sql `\
3
+
4
+ //#region src/storage/migrations/004-add-memory-table.ts
5
+ const addMemoryTable = {
6
+ hash: "004-add-memory-table",
7
+ sql: (module) => [sql`\
7
8
  CREATE TABLE IF NOT EXISTS ${sql.identifier(memoryTableName(module))} (
8
9
  "id" TEXT NOT NULL PRIMARY KEY,
9
10
  "createdAt" DATETIME NOT NULL,
@@ -15,6 +16,9 @@ CREATE TABLE IF NOT EXISTS ${sql.identifier(memoryTableName(module))} (
15
16
  "metadata" JSON,
16
17
  "content" JSON
17
18
  )
18
- `,
19
- ],
19
+ `]
20
20
  };
21
+
22
+ //#endregion
23
+ export { addMemoryTable };
24
+ //# sourceMappingURL=004-add-memory-table.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"004-add-memory-table.mjs","names":[],"sources":["../../../src/storage/migrations/004-add-memory-table.ts"],"sourcesContent":["import type { AFSModule } from \"@aigne/afs\";\nimport { sql } from \"@aigne/sqlite\";\nimport { memoryTableName } from \"../models/memory.js\";\nimport type { AFSStorageMigrations } from \"../type.js\";\n\nexport const addMemoryTable: AFSStorageMigrations = {\n hash: \"004-add-memory-table\",\n sql: (module: AFSModule) => [\n sql`\\\nCREATE TABLE IF NOT EXISTS ${sql.identifier(memoryTableName(module))} (\n \"id\" TEXT NOT NULL PRIMARY KEY,\n \"createdAt\" DATETIME NOT NULL,\n \"updatedAt\" DATETIME NOT NULL,\n \"path\" TEXT NOT NULL,\n \"sessionId\" TEXT,\n \"userId\" TEXT,\n \"agentId\" TEXT,\n \"metadata\" JSON,\n \"content\" JSON\n)\n`,\n ],\n};\n"],"mappings":";;;;AAKA,MAAa,iBAAuC;CAClD,MAAM;CACN,MAAM,WAAsB,CAC1B,GAAG;6BACsB,IAAI,WAAW,gBAAgB,OAAO,CAAC,CAAC;;;;;;;;;;;EAYlE;CACF"}
@@ -0,0 +1,30 @@
1
+ const require_entries = require('../models/entries.cjs');
2
+ const require_compact = require('../models/compact.cjs');
3
+ const require_memory = require('../models/memory.cjs');
4
+ let _aigne_sqlite = require("@aigne/sqlite");
5
+
6
+ //#region src/storage/migrations/005-add-indexes.ts
7
+ const addIndexes = {
8
+ hash: "005-add-indexes",
9
+ sql: (module) => {
10
+ const entriesTable = require_entries.entriesTableName(module);
11
+ const memoryTable = require_memory.memoryTableName(module);
12
+ const compactTable = require_compact.compactTableName(module);
13
+ return [
14
+ _aigne_sqlite.sql`CREATE INDEX IF NOT EXISTS "idx_entries_session_created" ON ${_aigne_sqlite.sql.identifier(entriesTable)} ("sessionId", "createdAt" DESC)`,
15
+ _aigne_sqlite.sql`CREATE INDEX IF NOT EXISTS "idx_entries_user_created" ON ${_aigne_sqlite.sql.identifier(entriesTable)} ("userId", "createdAt" DESC)`,
16
+ _aigne_sqlite.sql`CREATE INDEX IF NOT EXISTS "idx_entries_agent_created" ON ${_aigne_sqlite.sql.identifier(entriesTable)} ("agentId", "createdAt" DESC)`,
17
+ _aigne_sqlite.sql`CREATE INDEX IF NOT EXISTS "idx_memory_session_created" ON ${_aigne_sqlite.sql.identifier(memoryTable)} ("sessionId", "createdAt" DESC)`,
18
+ _aigne_sqlite.sql`CREATE INDEX IF NOT EXISTS "idx_memory_user_created" ON ${_aigne_sqlite.sql.identifier(memoryTable)} ("userId", "createdAt" DESC)`,
19
+ _aigne_sqlite.sql`CREATE INDEX IF NOT EXISTS "idx_memory_agent_created" ON ${_aigne_sqlite.sql.identifier(memoryTable)} ("agentId", "createdAt" DESC)`,
20
+ _aigne_sqlite.sql`CREATE INDEX IF NOT EXISTS "idx_memory_scope" ON ${_aigne_sqlite.sql.identifier(memoryTable)} (json_extract("metadata", '$.scope'))`,
21
+ _aigne_sqlite.sql`CREATE INDEX IF NOT EXISTS "idx_compact_session_created" ON ${_aigne_sqlite.sql.identifier(compactTable)} ("sessionId", "createdAt" DESC)`,
22
+ _aigne_sqlite.sql`CREATE INDEX IF NOT EXISTS "idx_compact_user_created" ON ${_aigne_sqlite.sql.identifier(compactTable)} ("userId", "createdAt" DESC)`,
23
+ _aigne_sqlite.sql`CREATE INDEX IF NOT EXISTS "idx_compact_agent_created" ON ${_aigne_sqlite.sql.identifier(compactTable)} ("agentId", "createdAt" DESC)`,
24
+ _aigne_sqlite.sql`CREATE INDEX IF NOT EXISTS "idx_compact_scope" ON ${_aigne_sqlite.sql.identifier(compactTable)} (json_extract("metadata", '$.scope'))`
25
+ ];
26
+ }
27
+ };
28
+
29
+ //#endregion
30
+ exports.addIndexes = addIndexes;
@@ -0,0 +1,31 @@
1
+ import { entriesTableName } from "../models/entries.mjs";
2
+ import { compactTableName } from "../models/compact.mjs";
3
+ import { memoryTableName } from "../models/memory.mjs";
4
+ import { sql } from "@aigne/sqlite";
5
+
6
+ //#region src/storage/migrations/005-add-indexes.ts
7
+ const addIndexes = {
8
+ hash: "005-add-indexes",
9
+ sql: (module) => {
10
+ const entriesTable = entriesTableName(module);
11
+ const memoryTable = memoryTableName(module);
12
+ const compactTable = compactTableName(module);
13
+ return [
14
+ sql`CREATE INDEX IF NOT EXISTS "idx_entries_session_created" ON ${sql.identifier(entriesTable)} ("sessionId", "createdAt" DESC)`,
15
+ sql`CREATE INDEX IF NOT EXISTS "idx_entries_user_created" ON ${sql.identifier(entriesTable)} ("userId", "createdAt" DESC)`,
16
+ sql`CREATE INDEX IF NOT EXISTS "idx_entries_agent_created" ON ${sql.identifier(entriesTable)} ("agentId", "createdAt" DESC)`,
17
+ sql`CREATE INDEX IF NOT EXISTS "idx_memory_session_created" ON ${sql.identifier(memoryTable)} ("sessionId", "createdAt" DESC)`,
18
+ sql`CREATE INDEX IF NOT EXISTS "idx_memory_user_created" ON ${sql.identifier(memoryTable)} ("userId", "createdAt" DESC)`,
19
+ sql`CREATE INDEX IF NOT EXISTS "idx_memory_agent_created" ON ${sql.identifier(memoryTable)} ("agentId", "createdAt" DESC)`,
20
+ sql`CREATE INDEX IF NOT EXISTS "idx_memory_scope" ON ${sql.identifier(memoryTable)} (json_extract("metadata", '$.scope'))`,
21
+ sql`CREATE INDEX IF NOT EXISTS "idx_compact_session_created" ON ${sql.identifier(compactTable)} ("sessionId", "createdAt" DESC)`,
22
+ sql`CREATE INDEX IF NOT EXISTS "idx_compact_user_created" ON ${sql.identifier(compactTable)} ("userId", "createdAt" DESC)`,
23
+ sql`CREATE INDEX IF NOT EXISTS "idx_compact_agent_created" ON ${sql.identifier(compactTable)} ("agentId", "createdAt" DESC)`,
24
+ sql`CREATE INDEX IF NOT EXISTS "idx_compact_scope" ON ${sql.identifier(compactTable)} (json_extract("metadata", '$.scope'))`
25
+ ];
26
+ }
27
+ };
28
+
29
+ //#endregion
30
+ export { addIndexes };
31
+ //# sourceMappingURL=005-add-indexes.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"005-add-indexes.mjs","names":[],"sources":["../../../src/storage/migrations/005-add-indexes.ts"],"sourcesContent":["import type { AFSModule } from \"@aigne/afs\";\nimport { sql } from \"@aigne/sqlite\";\nimport { compactTableName } from \"../models/compact.js\";\nimport { entriesTableName } from \"../models/entries.js\";\nimport { memoryTableName } from \"../models/memory.js\";\nimport type { AFSStorageMigrations } from \"../type.js\";\n\nexport const addIndexes: AFSStorageMigrations = {\n hash: \"005-add-indexes\",\n sql: (module: AFSModule) => {\n const entriesTable = entriesTableName(module);\n const memoryTable = memoryTableName(module);\n const compactTable = compactTableName(module);\n\n return [\n // Entries table indexes\n sql`CREATE INDEX IF NOT EXISTS \"idx_entries_session_created\" ON ${sql.identifier(entriesTable)} (\"sessionId\", \"createdAt\" DESC)`,\n sql`CREATE INDEX IF NOT EXISTS \"idx_entries_user_created\" ON ${sql.identifier(entriesTable)} (\"userId\", \"createdAt\" DESC)`,\n sql`CREATE INDEX IF NOT EXISTS \"idx_entries_agent_created\" ON ${sql.identifier(entriesTable)} (\"agentId\", \"createdAt\" DESC)`,\n\n // Memory table indexes\n sql`CREATE INDEX IF NOT EXISTS \"idx_memory_session_created\" ON ${sql.identifier(memoryTable)} (\"sessionId\", \"createdAt\" DESC)`,\n sql`CREATE INDEX IF NOT EXISTS \"idx_memory_user_created\" ON ${sql.identifier(memoryTable)} (\"userId\", \"createdAt\" DESC)`,\n sql`CREATE INDEX IF NOT EXISTS \"idx_memory_agent_created\" ON ${sql.identifier(memoryTable)} (\"agentId\", \"createdAt\" DESC)`,\n sql`CREATE INDEX IF NOT EXISTS \"idx_memory_scope\" ON ${sql.identifier(memoryTable)} (json_extract(\"metadata\", '$.scope'))`,\n\n // Compact table indexes\n sql`CREATE INDEX IF NOT EXISTS \"idx_compact_session_created\" ON ${sql.identifier(compactTable)} (\"sessionId\", \"createdAt\" DESC)`,\n sql`CREATE INDEX IF NOT EXISTS \"idx_compact_user_created\" ON ${sql.identifier(compactTable)} (\"userId\", \"createdAt\" DESC)`,\n sql`CREATE INDEX IF NOT EXISTS \"idx_compact_agent_created\" ON ${sql.identifier(compactTable)} (\"agentId\", \"createdAt\" DESC)`,\n sql`CREATE INDEX IF NOT EXISTS \"idx_compact_scope\" ON ${sql.identifier(compactTable)} (json_extract(\"metadata\", '$.scope'))`,\n ];\n },\n};\n"],"mappings":";;;;;;AAOA,MAAa,aAAmC;CAC9C,MAAM;CACN,MAAM,WAAsB;EAC1B,MAAM,eAAe,iBAAiB,OAAO;EAC7C,MAAM,cAAc,gBAAgB,OAAO;EAC3C,MAAM,eAAe,iBAAiB,OAAO;AAE7C,SAAO;GAEL,GAAG,+DAA+D,IAAI,WAAW,aAAa,CAAC;GAC/F,GAAG,4DAA4D,IAAI,WAAW,aAAa,CAAC;GAC5F,GAAG,6DAA6D,IAAI,WAAW,aAAa,CAAC;GAG7F,GAAG,8DAA8D,IAAI,WAAW,YAAY,CAAC;GAC7F,GAAG,2DAA2D,IAAI,WAAW,YAAY,CAAC;GAC1F,GAAG,4DAA4D,IAAI,WAAW,YAAY,CAAC;GAC3F,GAAG,oDAAoD,IAAI,WAAW,YAAY,CAAC;GAGnF,GAAG,+DAA+D,IAAI,WAAW,aAAa,CAAC;GAC/F,GAAG,4DAA4D,IAAI,WAAW,aAAa,CAAC;GAC5F,GAAG,6DAA6D,IAAI,WAAW,aAAa,CAAC;GAC7F,GAAG,qDAAqD,IAAI,WAAW,aAAa,CAAC;GACtF;;CAEJ"}