@convex-dev/agent 0.1.6 → 0.1.7-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -12
- package/dist/commonjs/client/_generated/_ignore.d.ts +1 -0
- package/dist/commonjs/client/_generated/_ignore.d.ts.map +1 -0
- package/dist/commonjs/client/_generated/_ignore.js +3 -0
- package/dist/commonjs/client/_generated/_ignore.js.map +1 -0
- package/dist/commonjs/client/files.d.ts +57 -0
- package/dist/commonjs/client/files.d.ts.map +1 -0
- package/dist/commonjs/client/files.js +124 -0
- package/dist/commonjs/client/files.js.map +1 -0
- package/dist/commonjs/client/index.d.ts +487 -318
- package/dist/commonjs/client/index.d.ts.map +1 -1
- package/dist/commonjs/client/index.js +652 -550
- package/dist/commonjs/client/index.js.map +1 -1
- package/dist/commonjs/client/types.d.ts +35 -5
- package/dist/commonjs/client/types.d.ts.map +1 -1
- package/dist/commonjs/component/_generated/api.d.ts +47 -711
- package/dist/commonjs/component/files.d.ts +66 -21
- package/dist/commonjs/component/files.d.ts.map +1 -1
- package/dist/commonjs/component/files.js +71 -26
- package/dist/commonjs/component/files.js.map +1 -1
- package/dist/commonjs/component/messages.d.ts +31 -499
- package/dist/commonjs/component/messages.d.ts.map +1 -1
- package/dist/commonjs/component/messages.js +45 -125
- package/dist/commonjs/component/messages.js.map +1 -1
- package/dist/commonjs/component/schema.d.ts +949 -3785
- package/dist/commonjs/component/schema.d.ts.map +1 -1
- package/dist/commonjs/component/schema.js +9 -25
- package/dist/commonjs/component/schema.js.map +1 -1
- package/dist/commonjs/component/streams.d.ts +3 -3
- package/dist/commonjs/mapping.d.ts +28 -19
- package/dist/commonjs/mapping.d.ts.map +1 -1
- package/dist/commonjs/mapping.js +136 -81
- package/dist/commonjs/mapping.js.map +1 -1
- package/dist/commonjs/react/toUIMessages.d.ts.map +1 -1
- package/dist/commonjs/react/toUIMessages.js +12 -6
- package/dist/commonjs/react/toUIMessages.js.map +1 -1
- package/dist/commonjs/react/usePaginatedQuery.d.ts.map +1 -1
- package/dist/commonjs/react/usePaginatedQuery.js +0 -19
- package/dist/commonjs/react/usePaginatedQuery.js.map +1 -1
- package/dist/commonjs/validators.d.ts +851 -3388
- package/dist/commonjs/validators.d.ts.map +1 -1
- package/dist/commonjs/validators.js +11 -37
- package/dist/commonjs/validators.js.map +1 -1
- package/dist/commonjs.tsbuildinfo +1 -1
- package/dist/esm/client/_generated/_ignore.d.ts +1 -0
- package/dist/esm/client/_generated/_ignore.d.ts.map +1 -0
- package/dist/esm/client/_generated/_ignore.js +3 -0
- package/dist/esm/client/_generated/_ignore.js.map +1 -0
- package/dist/esm/client/files.d.ts +57 -0
- package/dist/esm/client/files.d.ts.map +1 -0
- package/dist/esm/client/files.js +124 -0
- package/dist/esm/client/files.js.map +1 -0
- package/dist/esm/client/index.d.ts +487 -318
- package/dist/esm/client/index.d.ts.map +1 -1
- package/dist/esm/client/index.js +652 -550
- package/dist/esm/client/index.js.map +1 -1
- package/dist/esm/client/types.d.ts +35 -5
- package/dist/esm/client/types.d.ts.map +1 -1
- package/dist/esm/component/_generated/api.d.ts +47 -711
- package/dist/esm/component/files.d.ts +66 -21
- package/dist/esm/component/files.d.ts.map +1 -1
- package/dist/esm/component/files.js +71 -26
- package/dist/esm/component/files.js.map +1 -1
- package/dist/esm/component/messages.d.ts +31 -499
- package/dist/esm/component/messages.d.ts.map +1 -1
- package/dist/esm/component/messages.js +45 -125
- package/dist/esm/component/messages.js.map +1 -1
- package/dist/esm/component/schema.d.ts +949 -3785
- package/dist/esm/component/schema.d.ts.map +1 -1
- package/dist/esm/component/schema.js +9 -25
- package/dist/esm/component/schema.js.map +1 -1
- package/dist/esm/component/streams.d.ts +3 -3
- package/dist/esm/mapping.d.ts +28 -19
- package/dist/esm/mapping.d.ts.map +1 -1
- package/dist/esm/mapping.js +136 -81
- package/dist/esm/mapping.js.map +1 -1
- package/dist/esm/react/toUIMessages.d.ts.map +1 -1
- package/dist/esm/react/toUIMessages.js +12 -6
- package/dist/esm/react/toUIMessages.js.map +1 -1
- package/dist/esm/react/usePaginatedQuery.d.ts.map +1 -1
- package/dist/esm/react/usePaginatedQuery.js +0 -19
- package/dist/esm/react/usePaginatedQuery.js.map +1 -1
- package/dist/esm/validators.d.ts +851 -3388
- package/dist/esm/validators.d.ts.map +1 -1
- package/dist/esm/validators.js +11 -37
- package/dist/esm/validators.js.map +1 -1
- package/dist/esm.tsbuildinfo +1 -1
- package/package.json +11 -9
- package/src/client/_generated/_ignore.ts +1 -0
- package/src/client/files.ts +167 -0
- package/src/client/index.test.ts +127 -1
- package/src/client/index.ts +970 -812
- package/src/client/setup.test.ts +29 -0
- package/src/client/types.ts +41 -3
- package/src/component/_generated/api.d.ts +47 -711
- package/src/component/files.test.ts +130 -0
- package/src/component/files.ts +83 -27
- package/src/component/messages.test.ts +2 -1
- package/src/component/messages.ts +47 -137
- package/src/component/schema.ts +8 -28
- package/src/mapping.test.ts +163 -0
- package/src/mapping.ts +173 -103
- package/src/react/deltas.test.ts +4 -1
- package/src/react/toUIMessages.ts +12 -6
- package/src/react/usePaginatedQuery.ts +0 -31
- package/src/validators.ts +33 -47
|
@@ -1,45 +1,90 @@
|
|
|
1
1
|
import type { Id } from "./_generated/dataModel.js";
|
|
2
2
|
import { type MutationCtx } from "./_generated/server.js";
|
|
3
|
+
import type { Infer } from "convex/values";
|
|
4
|
+
declare const addFileArgs: import("convex/values").VObject<{
|
|
5
|
+
filename?: string | undefined;
|
|
6
|
+
mimeType: string;
|
|
7
|
+
storageId: string;
|
|
8
|
+
hash: string;
|
|
9
|
+
}, {
|
|
10
|
+
storageId: import("convex/values").VString<string, "required">;
|
|
11
|
+
hash: import("convex/values").VString<string, "required">;
|
|
12
|
+
filename: import("convex/values").VString<string | undefined, "optional">;
|
|
13
|
+
mimeType: import("convex/values").VString<string, "required">;
|
|
14
|
+
}, "required", "mimeType" | "filename" | "storageId" | "hash">;
|
|
3
15
|
export declare const addFile: import("convex/server").RegisteredMutation<"public", {
|
|
16
|
+
filename?: string | undefined;
|
|
17
|
+
mimeType: string;
|
|
4
18
|
storageId: string;
|
|
5
19
|
hash: string;
|
|
6
20
|
}, Promise<{
|
|
7
21
|
fileId: import("convex/values").GenericId<"files">;
|
|
8
|
-
storageIdUnused: boolean;
|
|
9
|
-
}>>;
|
|
10
|
-
export declare function addFileHandler(ctx: MutationCtx, args: {
|
|
11
22
|
storageId: string;
|
|
12
|
-
|
|
13
|
-
|
|
23
|
+
}>>;
|
|
24
|
+
export declare function addFileHandler(ctx: MutationCtx, args: Infer<typeof addFileArgs>): Promise<{
|
|
14
25
|
fileId: import("convex/values").GenericId<"files">;
|
|
15
|
-
|
|
26
|
+
storageId: string;
|
|
16
27
|
}>;
|
|
28
|
+
export declare const get: import("convex/server").RegisteredQuery<"public", {
|
|
29
|
+
fileId: import("convex/values").GenericId<"files">;
|
|
30
|
+
}, Promise<{
|
|
31
|
+
_id: import("convex/values").GenericId<"files">;
|
|
32
|
+
_creationTime: number;
|
|
33
|
+
filename?: string | undefined;
|
|
34
|
+
mimeType: string;
|
|
35
|
+
storageId: string;
|
|
36
|
+
hash: string;
|
|
37
|
+
refcount: number;
|
|
38
|
+
lastTouchedAt: number;
|
|
39
|
+
} | null>>;
|
|
17
40
|
/**
|
|
18
41
|
* If you plan to have the same file added over and over without a reference to
|
|
19
42
|
* the fileId, you can use this query to get the fileId of the existing file.
|
|
20
|
-
*
|
|
43
|
+
* Note: this will not increment the refcount. only saving messages does that.
|
|
44
|
+
* It will only match if the filename is the same (or both are undefined).
|
|
21
45
|
*/
|
|
22
46
|
export declare const useExistingFile: import("convex/server").RegisteredMutation<"public", {
|
|
47
|
+
filename?: string | undefined;
|
|
23
48
|
hash: string;
|
|
24
|
-
}, Promise<
|
|
49
|
+
}, Promise<{
|
|
50
|
+
fileId: import("convex/values").GenericId<"files">;
|
|
51
|
+
storageId: string;
|
|
52
|
+
} | null>>;
|
|
25
53
|
export declare const copyFile: import("convex/server").RegisteredMutation<"public", {
|
|
26
54
|
fileId: Id<"files">;
|
|
27
55
|
}, Promise<void>>;
|
|
28
56
|
export declare function copyFileHandler(ctx: MutationCtx, args: {
|
|
29
57
|
fileId: Id<"files">;
|
|
30
58
|
}): Promise<void>;
|
|
59
|
+
/**
|
|
60
|
+
* Get files that are unused and can be deleted.
|
|
61
|
+
* This is useful for cleaning up files that are no longer needed.
|
|
62
|
+
* Note: recently added files that have not been saved yet will show up here.
|
|
63
|
+
* You can inspect the `lastTouchedAt` field to see how recently it was used.
|
|
64
|
+
* I'd recommend not deleting anything touched in the last 24 hours.
|
|
65
|
+
*/
|
|
31
66
|
export declare const getFilesToDelete: import("convex/server").RegisteredQuery<"public", {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
67
|
+
paginationOpts: {
|
|
68
|
+
id?: number | undefined;
|
|
69
|
+
endCursor?: string | null | undefined;
|
|
70
|
+
maximumRowsRead?: number | undefined;
|
|
71
|
+
maximumBytesRead?: number | undefined;
|
|
72
|
+
numItems: number;
|
|
73
|
+
cursor: string | null;
|
|
74
|
+
};
|
|
75
|
+
}, Promise<import("convex/server").PaginationResult<{
|
|
76
|
+
_id: import("convex/values").GenericId<"files">;
|
|
77
|
+
_creationTime: number;
|
|
78
|
+
filename?: string | undefined;
|
|
79
|
+
mimeType: string;
|
|
80
|
+
storageId: string;
|
|
81
|
+
hash: string;
|
|
82
|
+
refcount: number;
|
|
83
|
+
lastTouchedAt: number;
|
|
84
|
+
}>>>;
|
|
85
|
+
export declare const deleteFiles: import("convex/server").RegisteredMutation<"public", {
|
|
86
|
+
force?: boolean | undefined;
|
|
87
|
+
fileIds: import("convex/values").GenericId<"files">[];
|
|
88
|
+
}, Promise<void>>;
|
|
89
|
+
export {};
|
|
45
90
|
//# sourceMappingURL=files.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../../src/component/files.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAY,KAAK,WAAW,EAAS,MAAM,wBAAwB,CAAC;AAG3E,
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../../src/component/files.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAY,KAAK,WAAW,EAAS,MAAM,wBAAwB,CAAC;AAG3E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAE3C,QAAA,MAAM,WAAW;;;;;;;;;;8DAKf,CAAC;AAEH,eAAO,MAAM,OAAO;;;;;;;;GAOlB,CAAC;AAEH,wBAAsB,cAAc,CAClC,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE,KAAK,CAAC,OAAO,WAAW,CAAC;;;GA4BhC;AAED,eAAO,MAAM,GAAG;;;;;;;;;;;UAQd,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,eAAe;;;;;;UA0B1B,CAAC;AAEH,eAAO,MAAM,QAAQ;YAUH,EAAE,CAAC,OAAO,CAAC;iBAJ3B,CAAC;AAEH,wBAAsB,eAAe,CACnC,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE;IAAE,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,CAAA;CAAE,iBAU9B;AAED;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;IAgB3B,CAAC;AAEH,eAAO,MAAM,WAAW;;;iBA0BtB,CAAC"}
|
|
@@ -1,65 +1,87 @@
|
|
|
1
1
|
import { paginator } from "convex-helpers/server/pagination";
|
|
2
2
|
import { mutation, query } from "./_generated/server.js";
|
|
3
3
|
import { schema, v } from "./schema.js";
|
|
4
|
+
import { paginationOptsValidator } from "convex/server";
|
|
5
|
+
const addFileArgs = v.object({
|
|
6
|
+
storageId: v.string(),
|
|
7
|
+
hash: v.string(),
|
|
8
|
+
filename: v.optional(v.string()),
|
|
9
|
+
mimeType: v.string(),
|
|
10
|
+
});
|
|
4
11
|
export const addFile = mutation({
|
|
5
|
-
args:
|
|
6
|
-
storageId: v.string(),
|
|
7
|
-
hash: v.string(),
|
|
8
|
-
},
|
|
12
|
+
args: addFileArgs,
|
|
9
13
|
handler: addFileHandler,
|
|
10
14
|
returns: {
|
|
11
15
|
fileId: v.id("files"),
|
|
12
|
-
|
|
16
|
+
storageId: v.string(),
|
|
13
17
|
},
|
|
14
18
|
});
|
|
15
19
|
export async function addFileHandler(ctx, args) {
|
|
16
20
|
const existingFile = await ctx.db
|
|
17
21
|
.query("files")
|
|
18
22
|
.withIndex("hash", (q) => q.eq("hash", args.hash))
|
|
23
|
+
.filter((q) => q.eq(q.field("filename"), args.filename))
|
|
19
24
|
.first();
|
|
20
25
|
if (existingFile) {
|
|
21
26
|
// increment the refcount
|
|
22
27
|
await ctx.db.patch(existingFile._id, {
|
|
23
28
|
refcount: existingFile.refcount + 1,
|
|
29
|
+
lastTouchedAt: Date.now(),
|
|
24
30
|
});
|
|
25
31
|
return {
|
|
26
32
|
fileId: existingFile._id,
|
|
27
|
-
|
|
33
|
+
storageId: existingFile.storageId,
|
|
28
34
|
};
|
|
29
35
|
}
|
|
30
36
|
const fileId = await ctx.db.insert("files", {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
refcount:
|
|
37
|
+
...args,
|
|
38
|
+
// We start out with it unused - when it's saved in a message we increment.
|
|
39
|
+
refcount: 0,
|
|
40
|
+
lastTouchedAt: Date.now(),
|
|
34
41
|
});
|
|
35
42
|
return {
|
|
36
43
|
fileId,
|
|
37
|
-
|
|
44
|
+
storageId: args.storageId,
|
|
38
45
|
};
|
|
39
46
|
}
|
|
47
|
+
export const get = query({
|
|
48
|
+
args: {
|
|
49
|
+
fileId: v.id("files"),
|
|
50
|
+
},
|
|
51
|
+
returns: v.union(v.null(), v.doc("files")),
|
|
52
|
+
handler: async (ctx, args) => {
|
|
53
|
+
return ctx.db.get(args.fileId);
|
|
54
|
+
},
|
|
55
|
+
});
|
|
40
56
|
/**
|
|
41
57
|
* If you plan to have the same file added over and over without a reference to
|
|
42
58
|
* the fileId, you can use this query to get the fileId of the existing file.
|
|
43
|
-
*
|
|
59
|
+
* Note: this will not increment the refcount. only saving messages does that.
|
|
60
|
+
* It will only match if the filename is the same (or both are undefined).
|
|
44
61
|
*/
|
|
45
62
|
export const useExistingFile = mutation({
|
|
46
63
|
args: {
|
|
47
64
|
hash: v.string(),
|
|
65
|
+
filename: v.optional(v.string()),
|
|
48
66
|
},
|
|
49
67
|
handler: async (ctx, args) => {
|
|
50
68
|
const file = await ctx.db
|
|
51
69
|
.query("files")
|
|
52
70
|
.withIndex("hash", (q) => q.eq("hash", args.hash))
|
|
71
|
+
.filter((q) => q.eq(q.field("filename"), args.filename))
|
|
53
72
|
.first();
|
|
54
73
|
if (!file) {
|
|
55
74
|
return null;
|
|
56
75
|
}
|
|
57
76
|
await ctx.db.patch(file._id, {
|
|
58
|
-
|
|
77
|
+
lastTouchedAt: Date.now(),
|
|
59
78
|
});
|
|
60
|
-
return file._id;
|
|
79
|
+
return { fileId: file._id, storageId: file.storageId };
|
|
61
80
|
},
|
|
62
|
-
returns: v.union(v.
|
|
81
|
+
returns: v.union(v.null(), v.object({
|
|
82
|
+
fileId: v.id("files"),
|
|
83
|
+
storageId: v.string(),
|
|
84
|
+
})),
|
|
63
85
|
});
|
|
64
86
|
export const copyFile = mutation({
|
|
65
87
|
args: {
|
|
@@ -75,31 +97,54 @@ export async function copyFileHandler(ctx, args) {
|
|
|
75
97
|
}
|
|
76
98
|
await ctx.db.patch(args.fileId, {
|
|
77
99
|
refcount: file.refcount + 1,
|
|
100
|
+
lastTouchedAt: Date.now(),
|
|
78
101
|
});
|
|
79
102
|
}
|
|
103
|
+
/**
|
|
104
|
+
* Get files that are unused and can be deleted.
|
|
105
|
+
* This is useful for cleaning up files that are no longer needed.
|
|
106
|
+
* Note: recently added files that have not been saved yet will show up here.
|
|
107
|
+
* You can inspect the `lastTouchedAt` field to see how recently it was used.
|
|
108
|
+
* I'd recommend not deleting anything touched in the last 24 hours.
|
|
109
|
+
*/
|
|
80
110
|
export const getFilesToDelete = query({
|
|
81
111
|
args: {
|
|
82
|
-
|
|
83
|
-
limit: v.optional(v.number()),
|
|
112
|
+
paginationOpts: paginationOptsValidator,
|
|
84
113
|
},
|
|
85
114
|
handler: async (ctx, args) => {
|
|
86
115
|
const files = await paginator(ctx.db, schema)
|
|
87
116
|
.query("files")
|
|
88
117
|
.withIndex("refcount", (q) => q.eq("refcount", 0))
|
|
89
|
-
.paginate(
|
|
90
|
-
|
|
91
|
-
cursor: args.cursor ?? null,
|
|
92
|
-
});
|
|
93
|
-
return {
|
|
94
|
-
files: files.page,
|
|
95
|
-
continueCursor: files.continueCursor,
|
|
96
|
-
isDone: files.isDone,
|
|
97
|
-
};
|
|
118
|
+
.paginate(args.paginationOpts);
|
|
119
|
+
return files;
|
|
98
120
|
},
|
|
99
121
|
returns: v.object({
|
|
100
|
-
|
|
122
|
+
page: v.array(v.doc("files")),
|
|
101
123
|
continueCursor: v.string(),
|
|
102
124
|
isDone: v.boolean(),
|
|
103
125
|
}),
|
|
104
126
|
});
|
|
127
|
+
export const deleteFiles = mutation({
|
|
128
|
+
args: {
|
|
129
|
+
fileIds: v.array(v.id("files")),
|
|
130
|
+
force: v.optional(v.boolean()),
|
|
131
|
+
},
|
|
132
|
+
handler: async (ctx, args) => {
|
|
133
|
+
await Promise.all(args.fileIds.map(async (fileId) => {
|
|
134
|
+
const file = await ctx.db.get(fileId);
|
|
135
|
+
if (!file) {
|
|
136
|
+
console.error(`File ${fileId} not found when deleting, skipping...`);
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
if (file.refcount && file.refcount > 0) {
|
|
140
|
+
if (!args.force) {
|
|
141
|
+
console.error(`File ${fileId} has refcount ${file.refcount} > 0, skipping...`);
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
await ctx.db.delete(fileId);
|
|
146
|
+
}));
|
|
147
|
+
},
|
|
148
|
+
returns: v.null(),
|
|
149
|
+
});
|
|
105
150
|
//# sourceMappingURL=files.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../../src/component/files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAE7D,OAAO,EAAE,QAAQ,EAAoB,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../../src/component/files.ts"],"names":[],"mappings":"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"}
|