gemi 0.84.1 → 0.85.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/dist/ai/Agent.d.ts +41 -3
- package/dist/ai/Agent.d.ts.map +1 -1
- package/dist/ai/AgentController.d.ts +238 -0
- package/dist/ai/AgentController.d.ts.map +1 -1
- package/dist/ai/AgentProvider.d.ts +15 -0
- package/dist/ai/AgentProvider.d.ts.map +1 -1
- package/dist/ai/client/index.d.ts +2 -2
- package/dist/ai/client/index.d.ts.map +1 -1
- package/dist/ai/client/index.js +138 -35
- package/dist/ai/client/index.js.map +1 -1
- package/dist/ai/client/reducer.d.ts +7 -1
- package/dist/ai/client/reducer.d.ts.map +1 -1
- package/dist/ai/generate.d.ts.map +1 -1
- package/dist/ai/index.d.ts +4 -2
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/index.js +12 -12
- package/dist/ai/index.js.map +19 -16
- package/dist/ai/providers/call.d.ts +4 -0
- package/dist/ai/providers/call.d.ts.map +1 -1
- package/dist/ai/providers/fileRejection.d.ts +84 -0
- package/dist/ai/providers/fileRejection.d.ts.map +1 -0
- package/dist/ai/providers/request.d.ts.map +1 -1
- package/dist/ai/redact.d.ts +70 -0
- package/dist/ai/redact.d.ts.map +1 -0
- package/dist/ai/signing.d.ts +33 -4
- package/dist/ai/signing.d.ts.map +1 -1
- package/dist/ai/store/Attachments.d.ts +5 -3
- package/dist/ai/store/Attachments.d.ts.map +1 -1
- package/dist/ai/store/FileOwners.d.ts +59 -0
- package/dist/ai/store/FileOwners.d.ts.map +1 -0
- package/dist/ai/store/LiveRuns.d.ts +25 -0
- package/dist/ai/store/LiveRuns.d.ts.map +1 -1
- package/dist/ai/store/MemoryAgentStore.d.ts +1 -0
- package/dist/ai/store/MemoryAgentStore.d.ts.map +1 -1
- package/dist/ai/store/Nonces.d.ts +109 -0
- package/dist/ai/store/Nonces.d.ts.map +1 -0
- package/dist/ai/store/index.d.ts +2 -0
- package/dist/ai/store/index.d.ts.map +1 -1
- package/dist/ai/types.d.ts +30 -1
- package/dist/ai/types.d.ts.map +1 -1
- package/dist/ai/useChat.d.ts +62 -3
- package/dist/ai/useChat.d.ts.map +1 -1
- package/dist/app/index.js +1 -1
- package/dist/bun/plugin.js +1 -1
- package/dist/bun/preload.js +1 -1
- package/dist/{chunk-82nn71zs.js → chunk-09sr33ff.js} +2 -2
- package/dist/{chunk-82nn71zs.js.map → chunk-09sr33ff.js.map} +1 -1
- package/dist/chunk-174jkg6d.js +7 -0
- package/dist/{chunk-302mkqeq.js.map → chunk-174jkg6d.js.map} +9 -8
- package/dist/{chunk-87x692j7.js → chunk-1b5s4w5f.js} +2 -2
- package/dist/{chunk-87x692j7.js.map → chunk-1b5s4w5f.js.map} +1 -1
- package/dist/{chunk-rmv1jp9p.js → chunk-1jcp8m8h.js} +2 -2
- package/dist/{chunk-rmv1jp9p.js.map → chunk-1jcp8m8h.js.map} +1 -1
- package/dist/{chunk-g6qe6wyb.js → chunk-1w5a11cd.js} +2 -2
- package/dist/{chunk-g6qe6wyb.js.map → chunk-1w5a11cd.js.map} +1 -1
- package/dist/chunk-1wby1sr2.js +5 -0
- package/dist/{chunk-e43drft2.js.map → chunk-1wby1sr2.js.map} +3 -3
- package/dist/{chunk-vmpzg4z5.js → chunk-1yq1e6sb.js} +3 -3
- package/dist/{chunk-vmpzg4z5.js.map → chunk-1yq1e6sb.js.map} +1 -1
- package/dist/chunk-1yzdxv2a.js +5 -0
- package/dist/{chunk-tmwsvf02.js.map → chunk-1yzdxv2a.js.map} +1 -1
- package/dist/{chunk-ah9ajys0.js → chunk-2gdhcswa.js} +1 -1
- package/dist/chunk-2k5kyk0h.js +24 -0
- package/dist/chunk-2k5kyk0h.js.map +17 -0
- package/dist/{chunk-1evk2pma.js → chunk-2yw23zhn.js} +4 -4
- package/dist/{chunk-1evk2pma.js.map → chunk-2yw23zhn.js.map} +1 -1
- package/dist/{chunk-3z6wkvwj.js → chunk-4ysar3ev.js} +2 -2
- package/dist/{chunk-3z6wkvwj.js.map → chunk-4ysar3ev.js.map} +1 -1
- package/dist/{chunk-z409rk5j.js → chunk-4zj05vry.js} +2 -2
- package/dist/{chunk-z409rk5j.js.map → chunk-4zj05vry.js.map} +1 -1
- package/dist/{chunk-1cebv3h8.js → chunk-55x9kkdt.js} +2 -2
- package/dist/{chunk-1cebv3h8.js.map → chunk-55x9kkdt.js.map} +1 -1
- package/dist/{chunk-0agfx93f.js → chunk-5ktfpty1.js} +2 -2
- package/dist/{chunk-0agfx93f.js.map → chunk-5ktfpty1.js.map} +1 -1
- package/dist/chunk-6k2czkkh.js +55 -0
- package/dist/{chunk-rp5j1mgk.js.map → chunk-6k2czkkh.js.map} +3 -3
- package/dist/{chunk-3zb2ycxj.js → chunk-7c33ngqs.js} +2 -2
- package/dist/{chunk-3zb2ycxj.js.map → chunk-7c33ngqs.js.map} +1 -1
- package/dist/{chunk-en3mtnsg.js → chunk-7n5775qx.js} +2 -2
- package/dist/{chunk-en3mtnsg.js.map → chunk-7n5775qx.js.map} +1 -1
- package/dist/{chunk-bn9pzgww.js → chunk-7nj2t2gm.js} +2 -2
- package/dist/{chunk-bn9pzgww.js.map → chunk-7nj2t2gm.js.map} +1 -1
- package/dist/{chunk-kfavcgv2.js → chunk-81k26w39.js} +2 -2
- package/dist/{chunk-kfavcgv2.js.map → chunk-81k26w39.js.map} +1 -1
- package/dist/{chunk-cg4k40zy.js → chunk-81v4c4b1.js} +2 -2
- package/dist/{chunk-cg4k40zy.js.map → chunk-81v4c4b1.js.map} +1 -1
- package/dist/{chunk-wh728wd6.js → chunk-8gexb1gt.js} +2 -2
- package/dist/{chunk-wh728wd6.js.map → chunk-8gexb1gt.js.map} +1 -1
- package/dist/{chunk-zfch4da5.js → chunk-9tsw1bmt.js} +2 -2
- package/dist/{chunk-8mmfpqgs.js.map → chunk-9tsw1bmt.js.map} +1 -1
- package/dist/{chunk-m0zba09s.js → chunk-9tv5j3b2.js} +3 -3
- package/dist/{chunk-m0zba09s.js.map → chunk-9tv5j3b2.js.map} +1 -1
- package/dist/{chunk-jg9eqd3r.js → chunk-c3gzpjba.js} +1 -1
- package/dist/{chunk-r5e4vpa1.js → chunk-cbycz5z3.js} +2 -2
- package/dist/{chunk-r5e4vpa1.js.map → chunk-cbycz5z3.js.map} +1 -1
- package/dist/{chunk-cfvq30n4.js → chunk-cfykfnqx.js} +2 -2
- package/dist/{chunk-cfvq30n4.js.map → chunk-cfykfnqx.js.map} +1 -1
- package/dist/{chunk-eysexnqb.js → chunk-ct7wxm98.js} +2 -2
- package/dist/{chunk-eysexnqb.js.map → chunk-ct7wxm98.js.map} +1 -1
- package/dist/{chunk-v27a4se1.js → chunk-d3jkypc7.js} +3 -3
- package/dist/{chunk-v27a4se1.js.map → chunk-d3jkypc7.js.map} +1 -1
- package/dist/{chunk-vfrrzr10.js → chunk-dadygfkf.js} +2 -2
- package/dist/{chunk-vfrrzr10.js.map → chunk-dadygfkf.js.map} +1 -1
- package/dist/{chunk-m4xw99vm.js → chunk-dwqh79e5.js} +2 -2
- package/dist/{chunk-m4xw99vm.js.map → chunk-dwqh79e5.js.map} +1 -1
- package/dist/{chunk-ng8pp9k2.js → chunk-fbwe0agk.js} +2 -2
- package/dist/{chunk-ng8pp9k2.js.map → chunk-fbwe0agk.js.map} +1 -1
- package/dist/{chunk-495qwteq.js → chunk-fc2je244.js} +3 -3
- package/dist/{chunk-495qwteq.js.map → chunk-fc2je244.js.map} +1 -1
- package/dist/{chunk-gr61ymse.js → chunk-gx0x772p.js} +2 -2
- package/dist/{chunk-gr61ymse.js.map → chunk-gx0x772p.js.map} +1 -1
- package/dist/{chunk-tdnfhe7x.js → chunk-ha705bcz.js} +3 -3
- package/dist/{chunk-tdnfhe7x.js.map → chunk-ha705bcz.js.map} +1 -1
- package/dist/chunk-jhe0t7yj.js +5 -0
- package/dist/chunk-jhe0t7yj.js.map +11 -0
- package/dist/{chunk-d0qwdeza.js → chunk-k5j65f2c.js} +2 -2
- package/dist/{chunk-d0qwdeza.js.map → chunk-k5j65f2c.js.map} +1 -1
- package/dist/{chunk-pt59xjfc.js → chunk-kmsrzbx1.js} +2 -2
- package/dist/{chunk-pt59xjfc.js.map → chunk-kmsrzbx1.js.map} +1 -1
- package/dist/{chunk-v1nm4tcq.js → chunk-m7y8d3k7.js} +2 -2
- package/dist/{chunk-v1nm4tcq.js.map → chunk-m7y8d3k7.js.map} +1 -1
- package/dist/{chunk-k2qh3hvd.js → chunk-mk8m3ffx.js} +2 -2
- package/dist/{chunk-k2qh3hvd.js.map → chunk-mk8m3ffx.js.map} +1 -1
- package/dist/{chunk-z7442w3q.js → chunk-mszy6cfw.js} +2 -2
- package/dist/{chunk-z7442w3q.js.map → chunk-mszy6cfw.js.map} +1 -1
- package/dist/{chunk-kb3xk9r8.js → chunk-ndat0nf0.js} +2 -2
- package/dist/{chunk-kb3xk9r8.js.map → chunk-ndat0nf0.js.map} +1 -1
- package/dist/{chunk-j9wqzemf.js → chunk-p0m3qgs5.js} +2 -2
- package/dist/{chunk-j9wqzemf.js.map → chunk-p0m3qgs5.js.map} +1 -1
- package/dist/{chunk-8mmfpqgs.js → chunk-p7r3ecpk.js} +2 -2
- package/dist/{chunk-zfch4da5.js.map → chunk-p7r3ecpk.js.map} +1 -1
- package/dist/{chunk-zp971jp2.js → chunk-pmmrhak1.js} +3 -3
- package/dist/{chunk-zp971jp2.js.map → chunk-pmmrhak1.js.map} +1 -1
- package/dist/{chunk-nvj1z2rs.js → chunk-pzwyg474.js} +2 -2
- package/dist/{chunk-nvj1z2rs.js.map → chunk-pzwyg474.js.map} +1 -1
- package/dist/{chunk-73dk6k4p.js → chunk-qje4kdff.js} +3 -3
- package/dist/{chunk-73dk6k4p.js.map → chunk-qje4kdff.js.map} +1 -1
- package/dist/{chunk-yk8s5egf.js → chunk-rdnm6rem.js} +2 -2
- package/dist/{chunk-yk8s5egf.js.map → chunk-rdnm6rem.js.map} +1 -1
- package/dist/{chunk-enf9mdac.js → chunk-s046a984.js} +2 -2
- package/dist/{chunk-enf9mdac.js.map → chunk-s046a984.js.map} +1 -1
- package/dist/{chunk-1s914cdj.js → chunk-saqfc6vp.js} +3 -3
- package/dist/{chunk-1s914cdj.js.map → chunk-saqfc6vp.js.map} +1 -1
- package/dist/{chunk-pgpqsgzx.js → chunk-sejnmn1q.js} +1 -1
- package/dist/{chunk-xhha1gb3.js → chunk-sjckrbr2.js} +2 -2
- package/dist/{chunk-xhha1gb3.js.map → chunk-sjckrbr2.js.map} +1 -1
- package/dist/{chunk-r8nhndzb.js → chunk-swhyp0yw.js} +2 -2
- package/dist/{chunk-r8nhndzb.js.map → chunk-swhyp0yw.js.map} +1 -1
- package/dist/{chunk-wkdzz0rx.js → chunk-trdwxm5x.js} +3 -3
- package/dist/{chunk-wkdzz0rx.js.map → chunk-trdwxm5x.js.map} +1 -1
- package/dist/{chunk-aztkrzvf.js → chunk-v2hvnxsf.js} +2 -2
- package/dist/{chunk-aztkrzvf.js.map → chunk-v2hvnxsf.js.map} +1 -1
- package/dist/{chunk-57ryyhh3.js → chunk-v4ngf77f.js} +2 -2
- package/dist/{chunk-57ryyhh3.js.map → chunk-v4ngf77f.js.map} +1 -1
- package/dist/{chunk-159hyeng.js → chunk-v8nf45gt.js} +2 -2
- package/dist/{chunk-159hyeng.js.map → chunk-v8nf45gt.js.map} +1 -1
- package/dist/{chunk-ys4fejmx.js → chunk-vwp1g8wh.js} +2 -2
- package/dist/{chunk-ys4fejmx.js.map → chunk-vwp1g8wh.js.map} +1 -1
- package/dist/chunk-w312e9nx.js +5 -0
- package/dist/{chunk-ash9e6fn.js.map → chunk-w312e9nx.js.map} +4 -3
- package/dist/{chunk-wwdaswxh.js → chunk-wwzg4dmy.js} +3 -3
- package/dist/{chunk-wwdaswxh.js.map → chunk-wwzg4dmy.js.map} +1 -1
- package/dist/{chunk-wsx3j5ws.js → chunk-xckeyg3v.js} +2 -2
- package/dist/{chunk-wsx3j5ws.js.map → chunk-xckeyg3v.js.map} +1 -1
- package/dist/chunk-xx2zg6sk.js +17 -0
- package/dist/{chunk-49akdtfe.js.map → chunk-xx2zg6sk.js.map} +11 -12
- package/dist/{chunk-rqh2wdhb.js → chunk-y7qnx8vm.js} +2 -2
- package/dist/{chunk-rqh2wdhb.js.map → chunk-y7qnx8vm.js.map} +1 -1
- package/dist/{chunk-rv7da58g.js → chunk-z4k18gnp.js} +2 -2
- package/dist/{chunk-rv7da58g.js.map → chunk-z4k18gnp.js.map} +1 -1
- package/dist/{chunk-w099t7zj.js → chunk-zf4r4kat.js} +2 -2
- package/dist/{chunk-w099t7zj.js.map → chunk-zf4r4kat.js.map} +1 -1
- package/dist/{chunk-dvpxkzms.js → chunk-zs90w6ke.js} +2 -2
- package/dist/{chunk-dvpxkzms.js.map → chunk-zs90w6ke.js.map} +1 -1
- package/dist/chunks/{ThemeProvider-Dn3UREDn.js → ThemeProvider-D1kDfCwY.js} +59 -2
- package/dist/chunks/ThemeProvider-D1kDfCwY.js.map +1 -0
- package/dist/client/Link.d.ts.map +1 -1
- package/dist/client/MutationError.d.ts +60 -50
- package/dist/client/MutationError.d.ts.map +1 -1
- package/dist/client/ProgressManager.d.ts +1 -1
- package/dist/client/QueryResource.d.ts +20 -0
- package/dist/client/QueryResource.d.ts.map +1 -1
- package/dist/client/index.d.ts +2 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +109 -35
- package/dist/client/index.js.map +1 -1
- package/dist/client/useMutation.d.ts.map +1 -1
- package/dist/client/useQuery.d.ts.map +1 -1
- package/dist/config/index.js +1 -1
- package/dist/console/run.js +2 -2
- package/dist/console/run.js.map +1 -1
- package/dist/container/index.js +2 -2
- package/dist/container/index.js.map +1 -1
- package/dist/database/index.js +2 -2
- package/dist/database/index.js.map +1 -1
- package/dist/email/Email.d.ts.map +1 -1
- package/dist/email/debugEmail.d.ts +40 -0
- package/dist/email/debugEmail.d.ts.map +1 -0
- package/dist/email/index.js +4 -3
- package/dist/email/index.js.map +6 -5
- package/dist/facades/index.js +2 -2
- package/dist/facades/index.js.map +1 -1
- package/dist/foundation/index.js +2 -2
- package/dist/foundation/index.js.map +1 -1
- package/dist/http/ApiRouter.d.ts +12 -0
- package/dist/http/ApiRouter.d.ts.map +1 -1
- package/dist/http/CSRFMiddleware.d.ts +1 -1
- package/dist/http/CSRFMiddleware.d.ts.map +1 -1
- package/dist/http/Error.d.ts +50 -0
- package/dist/http/Error.d.ts.map +1 -1
- package/dist/http/HttpRequest.d.ts +26 -0
- package/dist/http/HttpRequest.d.ts.map +1 -1
- package/dist/http/RateLimitMiddleware.d.ts +6 -3
- package/dist/http/RateLimitMiddleware.d.ts.map +1 -1
- package/dist/http/Router.d.ts.map +1 -1
- package/dist/http/errors.d.ts.map +1 -1
- package/dist/http/index.d.ts +2 -1
- package/dist/http/index.d.ts.map +1 -1
- package/dist/http/index.js +2 -2
- package/dist/http/index.js.map +1 -1
- package/dist/http/mediaType.d.ts +16 -0
- package/dist/http/mediaType.d.ts.map +1 -0
- package/dist/http/refusal.d.ts +52 -0
- package/dist/http/refusal.d.ts.map +1 -0
- package/dist/i18n/dictionaryRuntime.js +2 -2
- package/dist/i18n/dictionaryRuntime.js.map +1 -1
- package/dist/i18n/index.js +2 -2
- package/dist/i18n/index.js.map +2 -2
- package/dist/kernel/index.js +2 -2
- package/dist/kernel/index.js.map +2 -2
- package/dist/orm/index.js +2 -2
- package/dist/orm/index.js.map +1 -1
- package/dist/server/devFetch.d.ts.map +1 -1
- package/dist/server/forwardedFor.d.ts +42 -0
- package/dist/server/forwardedFor.d.ts.map +1 -0
- package/dist/server/httpProd.d.ts.map +1 -1
- package/dist/server/index.js +2 -2
- package/dist/server/index.js.map +1 -1
- package/dist/server/staticFile.d.ts +33 -0
- package/dist/server/staticFile.d.ts.map +1 -0
- package/dist/server/unhandledError.d.ts.map +1 -1
- package/dist/services/index.js +2 -2
- package/dist/services/index.js.map +2 -2
- package/dist/services/mcp/McpRegistry.d.ts +2 -1
- package/dist/services/mcp/McpRegistry.d.ts.map +1 -1
- package/dist/services/mcp/toAgentTools.d.ts +1 -1
- package/dist/services/mcp/toAgentTools.d.ts.map +1 -1
- package/dist/services/queue/work.js +2 -2
- package/dist/services/queue/work.js.map +1 -1
- package/dist/services/router/notFound.d.ts.map +1 -1
- package/dist/services/router/policyDenied.d.ts.map +1 -1
- package/dist/services/router/serverQueryFetcher.d.ts.map +1 -1
- package/dist/support/index.js +2 -2
- package/dist/support/index.js.map +1 -1
- package/dist/testing/index.js +1 -1
- package/package.json +1 -1
- package/skills/gemi-react-best-practices/rules/controller-throw-framework-errors.md +5 -0
- package/dist/chunk-302mkqeq.js +0 -7
- package/dist/chunk-49akdtfe.js +0 -17
- package/dist/chunk-ash9e6fn.js +0 -5
- package/dist/chunk-e43drft2.js +0 -5
- package/dist/chunk-j5xcfeqx.js +0 -24
- package/dist/chunk-j5xcfeqx.js.map +0 -16
- package/dist/chunk-rp5j1mgk.js +0 -55
- package/dist/chunk-tmwsvf02.js +0 -5
- package/dist/chunks/ThemeProvider-Dn3UREDn.js.map +0 -1
- /package/dist/{chunk-ah9ajys0.js.map → chunk-2gdhcswa.js.map} +0 -0
- /package/dist/{chunk-jg9eqd3r.js.map → chunk-c3gzpjba.js.map} +0 -0
- /package/dist/{chunk-pgpqsgzx.js.map → chunk-sejnmn1q.js.map} +0 -0
package/dist/ai/client/index.js
CHANGED
|
@@ -37,7 +37,8 @@ function reduce(state, event, now) {
|
|
|
37
37
|
threadId: event.threadId ?? state.threadId,
|
|
38
38
|
runMessageIds: [],
|
|
39
39
|
loadedTools: [],
|
|
40
|
-
finishReason: void 0
|
|
40
|
+
finishReason: void 0,
|
|
41
|
+
usage: void 0
|
|
41
42
|
};
|
|
42
43
|
case "message-start": return withMessage(state, event.messageId, now, (message) => ({
|
|
43
44
|
...message,
|
|
@@ -143,24 +144,16 @@ function reduce(state, event, now) {
|
|
|
143
144
|
...message,
|
|
144
145
|
finishReason: event.finishReason,
|
|
145
146
|
...event.outputTruncated ? { outputTruncated: true } : {},
|
|
147
|
+
...event.usage ? { usage: event.usage } : {},
|
|
146
148
|
content: event.outputTruncated || event.finishReason === "length" ? message.content.filter((part) => !(part.type === "output" && part.partial)) : message.content.map((part) => part.type === "output" && part.partial ? {
|
|
147
149
|
...part,
|
|
148
150
|
partial: false
|
|
149
151
|
} : part)
|
|
150
152
|
}));
|
|
151
|
-
case "usage": {
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
messages[index] = {
|
|
156
|
-
...messages[index],
|
|
157
|
-
usage: event.usage
|
|
158
|
-
};
|
|
159
|
-
return {
|
|
160
|
-
...state,
|
|
161
|
-
messages
|
|
162
|
-
};
|
|
163
|
-
}
|
|
153
|
+
case "usage": return {
|
|
154
|
+
...state,
|
|
155
|
+
usage: event.usage
|
|
156
|
+
};
|
|
164
157
|
case "error": return {
|
|
165
158
|
...state,
|
|
166
159
|
error: event.error,
|
|
@@ -337,7 +330,7 @@ function applyNested(run, event, now) {
|
|
|
337
330
|
...event.label !== void 0 ? { label: event.label } : {},
|
|
338
331
|
messages: next.messages,
|
|
339
332
|
...next.finishReason !== void 0 ? { finishReason: next.finishReason } : {},
|
|
340
|
-
...
|
|
333
|
+
...next.usage !== void 0 ? { usage: next.usage } : {}
|
|
341
334
|
};
|
|
342
335
|
}
|
|
343
336
|
/**
|
|
@@ -361,10 +354,6 @@ function isFinished(state, messageId) {
|
|
|
361
354
|
const message = state.messages.find((candidate) => candidate.id === messageId);
|
|
362
355
|
return message !== void 0 && message.finishReason !== void 0;
|
|
363
356
|
}
|
|
364
|
-
function lastIndexWhere(items, match) {
|
|
365
|
-
for (let i = items.length - 1; i >= 0; i--) if (match(items[i])) return i;
|
|
366
|
-
return -1;
|
|
367
|
-
}
|
|
368
357
|
function withMessage(state, messageId, now, update) {
|
|
369
358
|
const index = state.messages.findIndex((message) => message.id === messageId);
|
|
370
359
|
const runMessageIds = state.runMessageIds.includes(messageId) ? state.runMessageIds : [...state.runMessageIds, messageId];
|
|
@@ -564,6 +553,27 @@ async function* decodeSSE(stream) {
|
|
|
564
553
|
}
|
|
565
554
|
//#endregion
|
|
566
555
|
//#region ai/useChat.tsx
|
|
556
|
+
/**
|
|
557
|
+
* Why `attach()` rejected, for that file alone.
|
|
558
|
+
*
|
|
559
|
+
* `code` is the server's when it sent one — `unsupported_file_type`,
|
|
560
|
+
* `file_too_large`, `file_rejected` and `invalid_request` from
|
|
561
|
+
* `AgentController.upload`, or a framework refusal's `kind` such as
|
|
562
|
+
* `authentication` — and otherwise `upload_failed` (an answer that was
|
|
563
|
+
* not JSON, `status` says which) or `network_error` (no answer at all). A
|
|
564
|
+
* string rather than a union, because an app's own `attachmentDestination`
|
|
565
|
+
* can throw an error with a code of its own and that has to arrive intact.
|
|
566
|
+
*/
|
|
567
|
+
var AttachError = class extends Error {
|
|
568
|
+
code;
|
|
569
|
+
status;
|
|
570
|
+
constructor(code, message, status) {
|
|
571
|
+
super(message);
|
|
572
|
+
this.name = "AttachError";
|
|
573
|
+
this.code = code;
|
|
574
|
+
if (status !== void 0) this.status = status;
|
|
575
|
+
}
|
|
576
|
+
};
|
|
567
577
|
var localIdCounter = 0;
|
|
568
578
|
/** Ids the client mints: messages it authored, and the correlation id it names a
|
|
569
579
|
* run by before the server has. Server-assigned ids are what keep a reattached
|
|
@@ -596,6 +606,95 @@ async function httpError(response) {
|
|
|
596
606
|
retryable: response.status === 429 || response.status >= 500
|
|
597
607
|
};
|
|
598
608
|
}
|
|
609
|
+
function abortError() {
|
|
610
|
+
return new DOMException("The upload was aborted.", "AbortError");
|
|
611
|
+
}
|
|
612
|
+
/** No progress wanted: `fetch`, which aborts on the signal by itself. */
|
|
613
|
+
async function fetchUpload(url, form, headers, signal) {
|
|
614
|
+
let response;
|
|
615
|
+
try {
|
|
616
|
+
response = await fetch(url, {
|
|
617
|
+
method: "POST",
|
|
618
|
+
headers,
|
|
619
|
+
body: form,
|
|
620
|
+
signal
|
|
621
|
+
});
|
|
622
|
+
} catch (error) {
|
|
623
|
+
if (isAbort(error) || signal?.aborted) throw abortError();
|
|
624
|
+
throw new AttachError("network_error", error instanceof Error && error.message ? error.message : "The upload could not be sent.");
|
|
625
|
+
}
|
|
626
|
+
try {
|
|
627
|
+
return {
|
|
628
|
+
status: response.status,
|
|
629
|
+
statusText: response.statusText,
|
|
630
|
+
body: await response.text()
|
|
631
|
+
};
|
|
632
|
+
} catch (error) {
|
|
633
|
+
if (isAbort(error) || signal?.aborted) throw abortError();
|
|
634
|
+
throw new AttachError("network_error", "The upload's answer could not be read.");
|
|
635
|
+
}
|
|
636
|
+
}
|
|
637
|
+
/**
|
|
638
|
+
* Progress wanted: `XMLHttpRequest`, the one browser API that reports bytes
|
|
639
|
+
* sent. Settled on `load`/`error`/`timeout`/`abort`, never on `readyState` 4,
|
|
640
|
+
* which an abort reaches too with status 0 (#671 is that bug in `useUpload`).
|
|
641
|
+
*/
|
|
642
|
+
function xhrUpload(url, form, headers, signal, onProgress) {
|
|
643
|
+
return new Promise((resolve, reject) => {
|
|
644
|
+
const xhr = new XMLHttpRequest();
|
|
645
|
+
const onAbort = () => xhr.abort();
|
|
646
|
+
const done = () => signal?.removeEventListener("abort", onAbort);
|
|
647
|
+
xhr.addEventListener("load", () => {
|
|
648
|
+
done();
|
|
649
|
+
resolve({
|
|
650
|
+
status: xhr.status,
|
|
651
|
+
statusText: xhr.statusText,
|
|
652
|
+
body: xhr.responseText
|
|
653
|
+
});
|
|
654
|
+
});
|
|
655
|
+
xhr.addEventListener("abort", () => {
|
|
656
|
+
done();
|
|
657
|
+
reject(abortError());
|
|
658
|
+
});
|
|
659
|
+
const failed = () => {
|
|
660
|
+
done();
|
|
661
|
+
reject(new AttachError("network_error", "The upload could not be sent."));
|
|
662
|
+
};
|
|
663
|
+
xhr.addEventListener("error", failed);
|
|
664
|
+
xhr.addEventListener("timeout", failed);
|
|
665
|
+
xhr.upload.addEventListener("progress", (event) => {
|
|
666
|
+
try {
|
|
667
|
+
onProgress({
|
|
668
|
+
loaded: event.loaded,
|
|
669
|
+
total: event.lengthComputable ? event.total : 0
|
|
670
|
+
});
|
|
671
|
+
} catch {}
|
|
672
|
+
});
|
|
673
|
+
xhr.open("POST", url, true);
|
|
674
|
+
for (const [name, value] of Object.entries(headers)) xhr.setRequestHeader(name, value);
|
|
675
|
+
signal?.addEventListener("abort", onAbort, { once: true });
|
|
676
|
+
xhr.send(form);
|
|
677
|
+
});
|
|
678
|
+
}
|
|
679
|
+
/** A non-2xx answer as the file's error: the server's code and sentence when
|
|
680
|
+
* it sent `{ error: { code, message } }`, the status line when it did not. */
|
|
681
|
+
function attachErrorFrom(answer) {
|
|
682
|
+
let code = "upload_failed";
|
|
683
|
+
let message = answer.statusText || `The upload failed with status ${answer.status}.`;
|
|
684
|
+
try {
|
|
685
|
+
const data = JSON.parse(answer.body);
|
|
686
|
+
const error = data?.error;
|
|
687
|
+
if (typeof error === "string") {
|
|
688
|
+
if (error) message = error;
|
|
689
|
+
} else {
|
|
690
|
+
const named = error?.code ?? error?.kind;
|
|
691
|
+
if (typeof named === "string" && named) code = named;
|
|
692
|
+
const text = error?.message ?? data?.message;
|
|
693
|
+
if (typeof text === "string" && text) message = text;
|
|
694
|
+
}
|
|
695
|
+
} catch {}
|
|
696
|
+
return new AttachError(code, message, answer.status);
|
|
697
|
+
}
|
|
599
698
|
function turnFrom(message) {
|
|
600
699
|
let text = "";
|
|
601
700
|
const files = [];
|
|
@@ -827,7 +926,7 @@ function useChat(path, params = {}) {
|
|
|
827
926
|
else if (event.type === "error") handlers.current.onError?.(event.error);
|
|
828
927
|
}
|
|
829
928
|
}, [commit, setPhaseSafe]);
|
|
830
|
-
const send = useCallback(async (turn) => {
|
|
929
|
+
const send = useCallback(async (turn, options = {}) => {
|
|
831
930
|
const { base: url, extraBody: body } = requestRef.current;
|
|
832
931
|
const superseded = abortRef.current;
|
|
833
932
|
superseded?.controller.abort();
|
|
@@ -872,7 +971,8 @@ function useChat(path, params = {}) {
|
|
|
872
971
|
turn,
|
|
873
972
|
clientRunId,
|
|
874
973
|
threadId: stateRef.current.threadId,
|
|
875
|
-
messages: stateRef.current.threadId ? void 0 : forWire(history)
|
|
974
|
+
messages: stateRef.current.threadId ? void 0 : forWire(history),
|
|
975
|
+
...options.regenerate && stateRef.current.threadId ? { regenerate: true } : {}
|
|
876
976
|
};
|
|
877
977
|
const response = await post(url, payload, controller.signal);
|
|
878
978
|
if (!response.ok) {
|
|
@@ -1022,7 +1122,7 @@ function useChat(path, params = {}) {
|
|
|
1022
1122
|
pending: [],
|
|
1023
1123
|
error: null
|
|
1024
1124
|
});
|
|
1025
|
-
await send(turn);
|
|
1125
|
+
await send(turn, { regenerate: true });
|
|
1026
1126
|
}, [commit, send]);
|
|
1027
1127
|
const setMessages = useCallback((messages) => {
|
|
1028
1128
|
commit({
|
|
@@ -1030,22 +1130,24 @@ function useChat(path, params = {}) {
|
|
|
1030
1130
|
messages
|
|
1031
1131
|
});
|
|
1032
1132
|
}, [commit]);
|
|
1033
|
-
const uploadFile = useCallback(async (file) => {
|
|
1133
|
+
const uploadFile = useCallback(async (file, options = {}) => {
|
|
1034
1134
|
const { base: url, headers: extraHeaders, extraBody: body } = requestRef.current;
|
|
1135
|
+
const { signal, onProgress } = options;
|
|
1136
|
+
if (signal?.aborted) throw abortError();
|
|
1035
1137
|
const form = new FormData();
|
|
1036
1138
|
form.append("file", file);
|
|
1037
1139
|
if (body !== void 0) form.append("body", JSON.stringify(body));
|
|
1038
|
-
const
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
throw new
|
|
1140
|
+
const threadId = stateRef.current.threadId;
|
|
1141
|
+
if (threadId) form.append("threadId", threadId);
|
|
1142
|
+
const answer = onProgress ? await xhrUpload(`${url}/files`, form, { ...extraHeaders }, signal, onProgress) : await fetchUpload(`${url}/files`, form, { ...extraHeaders }, signal);
|
|
1143
|
+
if (answer.status < 200 || answer.status > 299) throw attachErrorFrom(answer);
|
|
1144
|
+
let parsed;
|
|
1145
|
+
try {
|
|
1146
|
+
parsed = JSON.parse(answer.body);
|
|
1147
|
+
} catch {
|
|
1148
|
+
throw new AttachError("upload_failed", "The upload answered with something that is not JSON.", answer.status);
|
|
1047
1149
|
}
|
|
1048
|
-
const data =
|
|
1150
|
+
const data = parsed;
|
|
1049
1151
|
return {
|
|
1050
1152
|
fileId: data.fileId,
|
|
1051
1153
|
attachmentId: data.attachmentId,
|
|
@@ -1053,7 +1155,7 @@ function useChat(path, params = {}) {
|
|
|
1053
1155
|
mimeType: data.mimeType ?? file.type,
|
|
1054
1156
|
downgraded: data.downgraded
|
|
1055
1157
|
};
|
|
1056
|
-
}, [
|
|
1158
|
+
}, []);
|
|
1057
1159
|
useEffect(() => {
|
|
1058
1160
|
if (attachOnMount === false || !initialThreadId) return;
|
|
1059
1161
|
const controller = new AbortController();
|
|
@@ -1097,12 +1199,13 @@ function useChat(path, params = {}) {
|
|
|
1097
1199
|
setMessages,
|
|
1098
1200
|
pending: state.pending,
|
|
1099
1201
|
loadedTools: state.loadedTools,
|
|
1202
|
+
usage: state.usage,
|
|
1100
1203
|
approve,
|
|
1101
1204
|
answer,
|
|
1102
1205
|
attach: uploadFile
|
|
1103
1206
|
};
|
|
1104
1207
|
}
|
|
1105
1208
|
//#endregion
|
|
1106
|
-
export { useChat };
|
|
1209
|
+
export { AttachError, useChat };
|
|
1107
1210
|
|
|
1108
1211
|
//# sourceMappingURL=index.js.map
|