@vibes.diy/api-svc 14.1.13 → 14.1.14
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/asset-grant.js +3 -0
- package/asset-grant.js.map +1 -1
- package/billing.d.ts +1 -0
- package/billing.js +8 -1
- package/billing.js.map +1 -1
- package/create-handler.js +4 -1
- package/create-handler.js.map +1 -1
- package/intern/agent-assembly.js +6 -5
- package/intern/agent-assembly.js.map +1 -1
- package/intern/agent-dispatcher.js.map +1 -1
- package/intern/agent-lane-flag.d.ts +0 -7
- package/intern/agent-lane-flag.js +0 -3
- package/intern/agent-lane-flag.js.map +1 -1
- package/intern/agent-session-runtime.d.ts +1 -0
- package/intern/agent-session-runtime.js +16 -7
- package/intern/agent-session-runtime.js.map +1 -1
- package/intern/agent-session-store.d.ts +9 -0
- package/intern/agent-session-store.js +16 -1
- package/intern/agent-session-store.js.map +1 -1
- package/intern/agent-session.d.ts +2 -0
- package/intern/agent-session.js +20 -0
- package/intern/agent-session.js.map +1 -1
- package/intern/agent-turn.d.ts +1 -2
- package/intern/agent-turn.js +1 -2
- package/intern/agent-turn.js.map +1 -1
- package/intern/asset-sniff.d.ts +22 -0
- package/intern/asset-sniff.js +154 -0
- package/intern/asset-sniff.js.map +1 -0
- package/intern/autumn-plan.js.map +1 -1
- package/intern/kyc.d.ts +25 -0
- package/intern/kyc.js +97 -0
- package/intern/kyc.js.map +1 -0
- package/intern/llm-tool-loop.d.ts +0 -11
- package/intern/llm-tool-loop.js +1 -47
- package/intern/llm-tool-loop.js.map +1 -1
- package/intern/manifest-assets-line.d.ts +2 -0
- package/intern/manifest-assets-line.js +12 -0
- package/intern/manifest-assets-line.js.map +1 -0
- package/intern/open-turn-store.d.ts +9 -0
- package/intern/open-turn-store.js +30 -0
- package/intern/open-turn-store.js.map +1 -1
- package/intern/process-access-bindings.d.ts +3 -5
- package/intern/process-access-bindings.js.map +1 -1
- package/intern/process-backend-bindings.d.ts +3 -5
- package/intern/process-backend-bindings.js.map +1 -1
- package/intern/prompt-assembly.js +4 -0
- package/intern/prompt-assembly.js.map +1 -1
- package/intern/resolve-owned-asset-ref.d.ts +14 -0
- package/intern/resolve-owned-asset-ref.js +19 -0
- package/intern/resolve-owned-asset-ref.js.map +1 -0
- package/intern/resolve-servable-asset.d.ts +40 -0
- package/intern/resolve-servable-asset.js +108 -0
- package/intern/resolve-servable-asset.js.map +1 -0
- package/intern/turn-terminal.d.ts +0 -31
- package/intern/turn-terminal.js +0 -0
- package/intern/turn-terminal.js.map +1 -1
- package/intern/version-timeline.d.ts +9 -2
- package/intern/version-timeline.js +33 -10
- package/intern/version-timeline.js.map +1 -1
- package/intern/write-apps.d.ts +7 -4
- package/intern/write-apps.js +3 -0
- package/intern/write-apps.js.map +1 -1
- package/package.json +11 -11
- package/public/asset-original.d.ts +7 -0
- package/public/asset-original.js +140 -0
- package/public/asset-original.js.map +1 -0
- package/public/asset-session.d.ts +1 -0
- package/public/asset-session.js +15 -0
- package/public/asset-session.js.map +1 -1
- package/public/asset-upload-grant.js +13 -0
- package/public/asset-upload-grant.js.map +1 -1
- package/public/cid-asset.js +29 -5
- package/public/cid-asset.js.map +1 -1
- package/public/ensure-app-slug-item.d.ts +2 -1
- package/public/ensure-app-slug-item.js +59 -11
- package/public/ensure-app-slug-item.js.map +1 -1
- package/public/ensure-user-settings.js +1 -1
- package/public/ensure-user-settings.js.map +1 -1
- package/public/files-asset.js +33 -26
- package/public/files-asset.js.map +1 -1
- package/public/fork-app.js +1 -1
- package/public/fork-app.js.map +1 -1
- package/public/fs-prompt.js +7 -2
- package/public/fs-prompt.js.map +1 -1
- package/public/llm-dispatch.d.ts +3 -2
- package/public/llm-dispatch.js +8 -5
- package/public/llm-dispatch.js.map +1 -1
- package/public/open-chat.js +21 -12
- package/public/open-chat.js.map +1 -1
- package/public/prompt-chat-section.js +4 -43
- package/public/prompt-chat-section.js.map +1 -1
- package/public/put-asset.d.ts +1 -0
- package/public/put-asset.js +55 -4
- package/public/put-asset.js.map +1 -1
- package/public/report-prompt-cache.d.ts +19 -0
- package/public/report-prompt-cache.js +63 -4
- package/public/report-prompt-cache.js.map +1 -1
- package/public/serv-entry-point.js +41 -16
- package/public/serv-entry-point.js.map +1 -1
- package/public/stream-assembly.d.ts +3 -2
- package/public/stream-assembly.js +2 -1
- package/public/stream-assembly.js.map +1 -1
- package/public/viewer-capabilities.d.ts +3 -0
- package/public/viewer-capabilities.js.map +1 -1
- package/public/who-am-i.js +5 -4
- package/public/who-am-i.js.map +1 -1
- package/vibes-req-res-evento.js +2 -1
- package/vibes-req-res-evento.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-session-store.js","sourceRoot":"","sources":["../../jsr/intern/agent-session-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,OAAO,EAAE,wBAAwB,EAAE,oBAAoB,EAA6B,MAAM,oBAAoB,CAAC;AAK/
|
|
1
|
+
{"version":3,"file":"agent-session-store.js","sourceRoot":"","sources":["../../jsr/intern/agent-session-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,OAAO,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,cAAc,EAA6B,MAAM,oBAAoB,CAAC;AAK/H,MAAM,CAAC,MAAM,uBAAuB,GAAG,gBAAgB,CAAC;AAgCxD,MAAM,UAAU,oBAAoB,CAClC,QAA0C,EAE1C,OAA6E,EAC7E,KAAa;IAEb,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IAGxE,IAAI,QAAQ,CAAC,cAAc,KAAK,SAAS;QAAE,OAAO,WAAW,CAAC;IAC9D,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,WAAW,CAAC;IAC3E,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAIlD,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;QAAE,OAAO,MAAM,CAAC;IAC5C,OAAO,UAAU,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC;AACpD,CAAC;AAGD,MAAM,UAAU,wBAAwB,CACtC,QAA0C,EAC1C,OAA6E,EAC7E,KAAa;IAEb,OAAO,oBAAoB,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,KAAK,WAAW,IAAI,cAAc,CAAC,QAAQ,CAAC,CAAC;AACpG,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,GAAgB,EAAE,MAAc;IACrE,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC;IACnC,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,CACvC,GAAG,CAAC,EAAE;SACH,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,EAAE,QAAQ,EAAE,KAAK,CAAC,oBAAoB,EAAE,CAAC;SAC3E,IAAI,CAAC,KAAK,CAAC;SACX,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,uBAAuB,CAAC,CAAC,CAAC;SACjF,KAAK,CAAC,CAAC,CAAC,CACZ,CAAC;IACF,IAAI,IAAI,CAAC,KAAK,EAAE;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAGzB,MAAM,QAAQ,GAAG,GAAG,EAAE,QAAQ,IAAI,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,GAAG,EAAE,KAAK,CAAC;IACzB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC1E,MAAM,IAAI,GAAG,gBAAgB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACvD,IAAI,IAAI,CAAC,KAAK,EAAE;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/C,IAAI,MAAM,YAAY,IAAI,CAAC,MAAM;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACrE,OAAO,MAAM,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;AACnD,CAAC;AAUD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,GAAgB,EAChB,KAA2D,EAC3D,QAA8B,EAC9B,gBAAwB;IAExB,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC;IACnC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,gBAAgB,GAAG,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,CACxC,GAAG,CAAC,EAAE;SACH,MAAM,CAAC,KAAK,CAAC;SACb,MAAM,CAAC;QACN,GAAG,KAAK;QACR,QAAQ,EAAE,uBAAuB;QACjC,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,QAAQ;QAChB,SAAS,EAAE,GAAG;QACd,UAAU,EAAE,GAAG;QACf,QAAQ,EAAE,GAAG;QACb,OAAO,EAAE,GAAG;QACZ,OAAO,EAAE,GAAG;QACZ,YAAY,EAAE,KAAK;QACnB,oBAAoB,EAAE,QAAQ;KAC/B,CAAC;SACD,kBAAkB,CAAC;QAClB,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC;QACtC,GAAG,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,oBAAoB,EAAE,QAAQ,EAAE;QAC1E,QAAQ,EAAE,gBAAgB,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,oBAAoB,EAAE,gBAAgB,CAAC;KACzH,CAAC;SACD,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CACvC,CAAC;IACF,IAAI,KAAK,CAAC,KAAK,EAAE;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;IAClD,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACzE,OAAO,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;AAC7B,CAAC"}
|
|
@@ -172,6 +172,7 @@ export type AgentSessionHandle = typeof sessionHandle.infer;
|
|
|
172
172
|
export type AgentSessionInput = typeof sessionInput.infer;
|
|
173
173
|
export declare const AGENT_SESSION_IDLE = "agent-session-idle";
|
|
174
174
|
export declare const AGENT_SESSION_SUPERSEDED = "agent-session-superseded";
|
|
175
|
+
export declare function hasPendingWork(snapshot: AgentSessionSnapshot | undefined): boolean;
|
|
175
176
|
export interface AgentSession {
|
|
176
177
|
messages(): LLMMessage[];
|
|
177
178
|
snapshot(): AgentSessionSnapshot;
|
|
@@ -185,6 +186,7 @@ export interface AgentSession {
|
|
|
185
186
|
checkpoint(messages: readonly LLMMessage[]): Promise<Result<void>>;
|
|
186
187
|
next(): Promise<Result<LLMMessage[] | undefined>>;
|
|
187
188
|
fail(error: Error): void;
|
|
189
|
+
settleIdle(): Promise<Result<boolean>>;
|
|
188
190
|
stage(change: AgentFileChange): Promise<Result<void>>;
|
|
189
191
|
queueDraft(id: string): Promise<Result<void>>;
|
|
190
192
|
stop(): void;
|
package/intern/agent-session.js
CHANGED
|
@@ -26,6 +26,11 @@ export const agentSessionSnapshot = type({
|
|
|
26
26
|
});
|
|
27
27
|
export const AGENT_SESSION_IDLE = "agent-session-idle";
|
|
28
28
|
export const AGENT_SESSION_SUPERSEDED = "agent-session-superseded";
|
|
29
|
+
export function hasPendingWork(snapshot) {
|
|
30
|
+
if (snapshot === undefined)
|
|
31
|
+
return false;
|
|
32
|
+
return snapshot.inbox.length > 0 || snapshot.handles.some((handle) => handle.state !== "settled");
|
|
33
|
+
}
|
|
29
34
|
export function createAgentSession(args) {
|
|
30
35
|
let state = args.snapshot ?? {
|
|
31
36
|
version: 1,
|
|
@@ -182,6 +187,21 @@ export function createAgentSession(args) {
|
|
|
182
187
|
}
|
|
183
188
|
return failure === undefined ? Result.Ok(undefined) : Result.Err(failure);
|
|
184
189
|
},
|
|
190
|
+
async settleIdle() {
|
|
191
|
+
if (state.status === "idle" || hasPendingWork(state))
|
|
192
|
+
return Result.Ok(false);
|
|
193
|
+
let wrote = false;
|
|
194
|
+
const saved = await update((previous) => {
|
|
195
|
+
if (previous.status === "idle" || hasPendingWork(previous))
|
|
196
|
+
return previous;
|
|
197
|
+
accepting = false;
|
|
198
|
+
wrote = true;
|
|
199
|
+
return { ...previous, status: "idle" };
|
|
200
|
+
});
|
|
201
|
+
if (saved.isErr())
|
|
202
|
+
return Result.Err(saved.Err());
|
|
203
|
+
return Result.Ok(wrote);
|
|
204
|
+
},
|
|
185
205
|
fail(error) {
|
|
186
206
|
failure = error;
|
|
187
207
|
stopped = true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-session.js","sourceRoot":"","sources":["../../jsr/intern/agent-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAwB,MAAM,sBAAsB,CAAC;AAE7E,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAC1E,MAAM,aAAa,GAAG,IAAI,CAAC;IACzB,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,kDAAkD;IACzD,WAAW,EAAE,QAAQ;IACrB,QAAQ,EAAE,SAAS;IACnB,SAAS,EAAE,QAAQ;IACnB,aAAa,EAAE,QAAQ;IACvB,OAAO,EAAE,UAAU;IACnB,iBAAiB,EAAE,QAAQ;CAC5B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAC;IACvC,OAAO,EAAE,GAAG;IACZ,MAAM,EAAE,oBAAoB;IAC5B,QAAQ,EAAE,UAAU,CAAC,KAAK,EAAE;IAC5B,KAAK,EAAE,YAAY,CAAC,KAAK,EAAE;IAC3B,OAAO,EAAE,aAAa,CAAC,KAAK,EAAE;IAC9B,WAAW,EAAE,UAAU;IACvB,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE;IACjC,iBAAiB,EAAE,QAAQ;CAC5B,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,kBAAkB,GAAG,oBAAoB,CAAC;AAMvD,MAAM,CAAC,MAAM,wBAAwB,GAAG,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-session.js","sourceRoot":"","sources":["../../jsr/intern/agent-session.ts"],"names":[],"mappings":"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"}
|
package/intern/agent-turn.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import type { LLMRequest, SseStreamMsg } from "@vibes.diy/call-ai-v2";
|
|
|
3
3
|
import { VibesApiSQLCtx } from "../types.js";
|
|
4
4
|
import type { AgentActor } from "./agent-actor.js";
|
|
5
5
|
import { type AgentBelt, type AgentBeltArgs } from "./agent-belt.js";
|
|
6
|
-
import { createLlmToolLoopStream, type LlmToolLoopBudget
|
|
6
|
+
import { createLlmToolLoopStream, type LlmToolLoopBudget } from "./llm-tool-loop.js";
|
|
7
7
|
export declare const AGENT_TOTAL_BUDGET_MS = 900000;
|
|
8
8
|
export declare function agentTotalBudgetMs(vctx: VibesApiSQLCtx): number;
|
|
9
9
|
export declare const AGENT_MAX_TOOL_ROUNDS = 6;
|
|
@@ -35,7 +35,6 @@ export interface AgentTurnStreamArgs {
|
|
|
35
35
|
readonly abort?: AbortController;
|
|
36
36
|
}>>;
|
|
37
37
|
readonly onDispatch?: (dispatched: AgentTurnDispatch) => void;
|
|
38
|
-
readonly pending?: LlmToolLoopPending;
|
|
39
38
|
readonly session?: Parameters<typeof createLlmToolLoopStream>[0]["session"];
|
|
40
39
|
readonly onToolEvidence?: Parameters<typeof createLlmToolLoopStream>[0]["onToolEvidence"];
|
|
41
40
|
readonly onError?: (error: string) => void;
|
package/intern/agent-turn.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Result } from "@adviser/cement";
|
|
2
2
|
import { createAgentBelt } from "./agent-belt.js";
|
|
3
|
-
import { createLlmToolLoopBudget, createLlmToolLoopStream
|
|
3
|
+
import { createLlmToolLoopBudget, createLlmToolLoopStream } from "./llm-tool-loop.js";
|
|
4
4
|
import { AGENT_TURN_CEILING_MS } from "./codegen-build-lock.js";
|
|
5
5
|
export const AGENT_TOTAL_BUDGET_MS = AGENT_TURN_CEILING_MS;
|
|
6
6
|
export function agentTotalBudgetMs(vctx) {
|
|
@@ -42,7 +42,6 @@ export function createAgentTurnStream(args) {
|
|
|
42
42
|
...(args.onToolEvidence === undefined ? {} : { onToolEvidence: args.onToolEvidence }),
|
|
43
43
|
maxToolRounds: args.session === undefined ? AGENT_MAX_TOOL_ROUNDS : AGENT_SESSION_MAX_TOOL_ROUNDS,
|
|
44
44
|
maxToolCalls: args.session === undefined ? AGENT_MAX_TOOL_CALLS : AGENT_SESSION_MAX_TOOL_CALLS,
|
|
45
|
-
...(args.pending === undefined ? {} : { pending: args.pending }),
|
|
46
45
|
...(args.session === undefined ? {} : { session: args.session }),
|
|
47
46
|
dispatch: async (input) => {
|
|
48
47
|
const r = await args.dispatch({ request: input.request, budget: input.budget });
|
package/intern/agent-turn.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-turn.js","sourceRoot":"","sources":["../../jsr/intern/agent-turn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAIzC,OAAO,EAAE,eAAe,EAAsC,MAAM,iBAAiB,CAAC;AACtF,OAAO,
|
|
1
|
+
{"version":3,"file":"agent-turn.js","sourceRoot":"","sources":["../../jsr/intern/agent-turn.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Result } from "@adviser/cement";
|
|
2
|
+
export declare function isGatedMime(mimeType: string): boolean;
|
|
3
|
+
export interface AssetType {
|
|
4
|
+
readonly mime: string;
|
|
5
|
+
readonly magic: readonly (readonly [number, readonly number[]])[];
|
|
6
|
+
readonly gated: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare const ASSET_TYPES: readonly AssetType[];
|
|
9
|
+
export declare function sniffMime(head: Uint8Array): string | null;
|
|
10
|
+
export declare function isSniffableMime(mimeType: string | undefined): boolean;
|
|
11
|
+
export declare const IMAGE_CAP_BYTES: number;
|
|
12
|
+
export declare const OTHER_CAP_BYTES: number;
|
|
13
|
+
export declare function assetCapBytes(mimeType: string | undefined): number;
|
|
14
|
+
export declare function effectiveCapBytes(claimed: string | undefined, sniffed: string | null): number;
|
|
15
|
+
export declare const OVER_CAP_MARKER = "asset-over-cap";
|
|
16
|
+
export declare function countingStream(cap: number, onHead?: (head: Uint8Array) => void): TransformStream<Uint8Array, Uint8Array>;
|
|
17
|
+
export declare const HEAD_BYTES = 16;
|
|
18
|
+
export interface PeekedBody {
|
|
19
|
+
readonly head: Uint8Array;
|
|
20
|
+
readonly stream: ReadableStream<Uint8Array>;
|
|
21
|
+
}
|
|
22
|
+
export declare function peekHead(body: ReadableStream<Uint8Array>, n?: number): Promise<Result<PeekedBody>>;
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { Result, exception2Result } from "@adviser/cement";
|
|
2
|
+
export function isGatedMime(mimeType) {
|
|
3
|
+
const mime = normalizeMime(mimeType);
|
|
4
|
+
if (mime.startsWith("image/"))
|
|
5
|
+
return false;
|
|
6
|
+
if (mime.startsWith("text/"))
|
|
7
|
+
return false;
|
|
8
|
+
if (mime === "application/json")
|
|
9
|
+
return false;
|
|
10
|
+
return true;
|
|
11
|
+
}
|
|
12
|
+
function normalizeMime(mimeType) {
|
|
13
|
+
return mimeType.split(";")[0].trim().toLowerCase();
|
|
14
|
+
}
|
|
15
|
+
const MAGIC = [
|
|
16
|
+
["image/png", [[0, [0x89, 0x50, 0x4e, 0x47]]]],
|
|
17
|
+
["image/jpeg", [[0, [0xff, 0xd8, 0xff]]]],
|
|
18
|
+
["image/gif", [[0, [0x47, 0x49, 0x46, 0x38]]]],
|
|
19
|
+
[
|
|
20
|
+
"image/webp",
|
|
21
|
+
[
|
|
22
|
+
[0, [0x52, 0x49, 0x46, 0x46]],
|
|
23
|
+
[8, [0x57, 0x45, 0x42, 0x50]],
|
|
24
|
+
],
|
|
25
|
+
],
|
|
26
|
+
["application/pdf", [[0, [0x25, 0x50, 0x44, 0x46]]]],
|
|
27
|
+
["audio/mpeg", [[0, [0x49, 0x44, 0x33]]]],
|
|
28
|
+
[
|
|
29
|
+
"audio/wav",
|
|
30
|
+
[
|
|
31
|
+
[0, [0x52, 0x49, 0x46, 0x46]],
|
|
32
|
+
[8, [0x57, 0x41, 0x56, 0x45]],
|
|
33
|
+
],
|
|
34
|
+
],
|
|
35
|
+
["audio/ogg", [[0, [0x4f, 0x67, 0x67, 0x53]]]],
|
|
36
|
+
[
|
|
37
|
+
"audio/mp4",
|
|
38
|
+
[
|
|
39
|
+
[4, [0x66, 0x74, 0x79, 0x70]],
|
|
40
|
+
[8, [0x4d, 0x34, 0x41, 0x20]],
|
|
41
|
+
],
|
|
42
|
+
],
|
|
43
|
+
[
|
|
44
|
+
"image/avif",
|
|
45
|
+
[
|
|
46
|
+
[4, [0x66, 0x74, 0x79, 0x70]],
|
|
47
|
+
[8, [0x61, 0x76, 0x69, 0x66]],
|
|
48
|
+
],
|
|
49
|
+
],
|
|
50
|
+
["font/woff2", [[0, [0x77, 0x4f, 0x46, 0x32]]]],
|
|
51
|
+
["font/ttf", [[0, [0x00, 0x01, 0x00, 0x00]]]],
|
|
52
|
+
];
|
|
53
|
+
export const ASSET_TYPES = MAGIC.map(([mime, magic]) => ({
|
|
54
|
+
mime,
|
|
55
|
+
magic,
|
|
56
|
+
gated: isGatedMime(mime),
|
|
57
|
+
}));
|
|
58
|
+
export function sniffMime(head) {
|
|
59
|
+
for (const t of ASSET_TYPES) {
|
|
60
|
+
if (t.magic.every(([off, bytes]) => bytes.every((b, i) => head[off + i] === b)))
|
|
61
|
+
return t.mime;
|
|
62
|
+
}
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
export function isSniffableMime(mimeType) {
|
|
66
|
+
if (mimeType === undefined)
|
|
67
|
+
return false;
|
|
68
|
+
const mime = normalizeMime(mimeType);
|
|
69
|
+
return ASSET_TYPES.some((t) => t.mime === mime);
|
|
70
|
+
}
|
|
71
|
+
export const IMAGE_CAP_BYTES = 25 * 1024 * 1024;
|
|
72
|
+
export const OTHER_CAP_BYTES = 50 * 1024 * 1024;
|
|
73
|
+
export function assetCapBytes(mimeType) {
|
|
74
|
+
if (mimeType === undefined)
|
|
75
|
+
return OTHER_CAP_BYTES;
|
|
76
|
+
return normalizeMime(mimeType).startsWith("image/") ? IMAGE_CAP_BYTES : OTHER_CAP_BYTES;
|
|
77
|
+
}
|
|
78
|
+
export function effectiveCapBytes(claimed, sniffed) {
|
|
79
|
+
const fromClaim = assetCapBytes(claimed);
|
|
80
|
+
if (sniffed === null)
|
|
81
|
+
return fromClaim;
|
|
82
|
+
return Math.min(fromClaim, assetCapBytes(sniffed));
|
|
83
|
+
}
|
|
84
|
+
export const OVER_CAP_MARKER = "asset-over-cap";
|
|
85
|
+
export function countingStream(cap, onHead) {
|
|
86
|
+
let total = 0;
|
|
87
|
+
let sawHead = false;
|
|
88
|
+
return new TransformStream({
|
|
89
|
+
transform(chunk, controller) {
|
|
90
|
+
total += chunk.byteLength;
|
|
91
|
+
if (total > cap) {
|
|
92
|
+
controller.error(new Error(`${OVER_CAP_MARKER}: ${cap}`));
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
if (sawHead === false) {
|
|
96
|
+
sawHead = true;
|
|
97
|
+
onHead?.(chunk.slice(0, HEAD_BYTES));
|
|
98
|
+
}
|
|
99
|
+
controller.enqueue(chunk);
|
|
100
|
+
},
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
export const HEAD_BYTES = 16;
|
|
104
|
+
export async function peekHead(body, n = HEAD_BYTES) {
|
|
105
|
+
const reader = body.getReader();
|
|
106
|
+
const buffered = [];
|
|
107
|
+
const rRead = await exception2Result(async () => {
|
|
108
|
+
let got = 0;
|
|
109
|
+
while (got < n) {
|
|
110
|
+
const { done, value } = await reader.read();
|
|
111
|
+
if (done)
|
|
112
|
+
break;
|
|
113
|
+
if (value === undefined)
|
|
114
|
+
continue;
|
|
115
|
+
buffered.push(value);
|
|
116
|
+
got += value.byteLength;
|
|
117
|
+
}
|
|
118
|
+
return got;
|
|
119
|
+
});
|
|
120
|
+
if (rRead.isErr()) {
|
|
121
|
+
await exception2Result(() => reader.cancel(rRead.Err()));
|
|
122
|
+
return Result.Err(rRead.Err());
|
|
123
|
+
}
|
|
124
|
+
const head = new Uint8Array(Math.min(rRead.Ok(), n));
|
|
125
|
+
let off = 0;
|
|
126
|
+
for (const chunk of buffered) {
|
|
127
|
+
if (off >= head.length)
|
|
128
|
+
break;
|
|
129
|
+
const take = Math.min(chunk.byteLength, head.length - off);
|
|
130
|
+
head.set(chunk.subarray(0, take), off);
|
|
131
|
+
off += take;
|
|
132
|
+
}
|
|
133
|
+
const stream = new ReadableStream({
|
|
134
|
+
async pull(controller) {
|
|
135
|
+
const pending = buffered.shift();
|
|
136
|
+
if (pending !== undefined) {
|
|
137
|
+
controller.enqueue(pending);
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
const { done, value } = await reader.read();
|
|
141
|
+
if (done) {
|
|
142
|
+
controller.close();
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
if (value !== undefined)
|
|
146
|
+
controller.enqueue(value);
|
|
147
|
+
},
|
|
148
|
+
cancel(reason) {
|
|
149
|
+
return reader.cancel(reason);
|
|
150
|
+
},
|
|
151
|
+
});
|
|
152
|
+
return Result.Ok({ head, stream });
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=asset-sniff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asset-sniff.js","sourceRoot":"","sources":["../../jsr/intern/asset-sniff.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAE3D,MAAM,UAAU,WAAW,CAAC,QAAgB;IAC1C,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IACrC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3C,IAAI,IAAI,KAAK,kBAAkB;QAAE,OAAO,KAAK,CAAC;IAC9C,OAAO,IAAI,CAAC;AACd,CAAC;AAGD,SAAS,aAAa,CAAC,QAAgB;IACrC,OAAO,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACrD,CAAC;AAeD,MAAM,KAAK,GAAsF;IAC/F,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9C;QACE,YAAY;QACZ;YACE,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAC7B,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;SAC9B;KACF;IACD,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACzC;QACE,WAAW;QACX;YACE,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAC7B,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;SAC9B;KACF;IACD,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAK9C;QACE,WAAW;QACX;YACE,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAC7B,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;SAC9B;KACF;IACD;QACE,YAAY;QACZ;YACE,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAC7B,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;SAC9B;KACF;IACD,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;CAC9C,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAyB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;IAC7E,IAAI;IACJ,KAAK;IACL,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC;CACzB,CAAC,CAAC,CAAC;AAOJ,MAAM,UAAU,SAAS,CAAC,IAAgB;IACxC,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC;IACjG,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAID,MAAM,UAAU,eAAe,CAAC,QAA4B;IAC1D,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACzC,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IACrC,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAChD,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAEhD,MAAM,UAAU,aAAa,CAAC,QAA4B;IACxD,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,eAAe,CAAC;IACnD,OAAO,aAAa,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC;AAC1F,CAAC;AAQD,MAAM,UAAU,iBAAiB,CAAC,OAA2B,EAAE,OAAsB;IACnF,MAAM,SAAS,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IACvC,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;AACrD,CAAC;AAID,MAAM,CAAC,MAAM,eAAe,GAAG,gBAAgB,CAAC;AAWhD,MAAM,UAAU,cAAc,CAAC,GAAW,EAAE,MAAmC;IAC7E,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,OAAO,IAAI,eAAe,CAAyB;QACjD,SAAS,CAAC,KAAK,EAAE,UAAU;YACzB,KAAK,IAAI,KAAK,CAAC,UAAU,CAAC;YAC1B,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;gBAChB,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,eAAe,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC;gBAC1D,OAAO;YACT,CAAC;YACD,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;gBACtB,OAAO,GAAG,IAAI,CAAC;gBACf,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;YACvC,CAAC;YACD,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,EAAE,CAAC;AAgB7B,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAgC,EAAE,CAAC,GAAW,UAAU;IACrF,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAiB,EAAE,CAAC;IAClC,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,KAAK,IAAI,EAAE;QAC9C,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,OAAO,GAAG,GAAG,CAAC,EAAE,CAAC;YACf,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAC5C,IAAI,IAAI;gBAAE,MAAM;YAChB,IAAI,KAAK,KAAK,SAAS;gBAAE,SAAS;YAClC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,GAAG,IAAI,KAAK,CAAC,UAAU,CAAC;QAC1B,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC,CAAC;IACH,IAAI,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;QAClB,MAAM,gBAAgB,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACzD,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;IACjC,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACrD,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM;YAAE,MAAM;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;QAC3D,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QACvC,GAAG,IAAI,IAAI,CAAC;IACd,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,cAAc,CAAa;QAC5C,KAAK,CAAC,IAAI,CAAC,UAAU;YACnB,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;YACjC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAC5B,OAAO;YACT,CAAC;YACD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAC5C,IAAI,IAAI,EAAE,CAAC;gBACT,UAAU,CAAC,KAAK,EAAE,CAAC;gBACnB,OAAO;YACT,CAAC;YACD,IAAI,KAAK,KAAK,SAAS;gBAAE,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACrD,CAAC;QACD,MAAM,CAAC,MAAM;YACX,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;KACF,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;AACrC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autumn-plan.js","sourceRoot":"","sources":["../../jsr/intern/autumn-plan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAc9G,MAAM,UAAU,QAAQ,CAAC,KAA2B;IAClD,OAAO,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;AAClD,CAAC;
|
|
1
|
+
{"version":3,"file":"autumn-plan.js","sourceRoot":"","sources":["../../jsr/intern/autumn-plan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAc9G,MAAM,UAAU,QAAQ,CAAC,KAA2B;IAClD,OAAO,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;AAClD,CAAC;AA0BD,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAKpC;IAGC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,KAAwB,EAAE,IAAkB,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;IACtG,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,eAAe,CAAC;IAE/C,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,KAAK,IAAI,EAAE;QAC7C,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,GAAG,OAAO,iBAAiB,EAAE;YACrD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,GAAG,CAAC,SAAS,EAAE;gBACxC,eAAe,EAAE,OAAO;aACzB;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,qBAAqB,EAAE,CAAC;SACrF,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAA4B,CAAC;QAC7E,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;IACtC,CAAC,CAAC,CAAC;IACH,IAAI,IAAI,CAAC,KAAK,EAAE;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAEhD,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IACnC,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;QAClB,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,oBAAoB;YAAE,OAAO,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;QAC7E,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,6BAA6B,GAAG,CAAC,MAAM,YAAY,MAAM,EAAE,CAAC,CAAC,CAAC;IAC5F,CAAC;IAOD,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACtC,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,6BAA6B,GAAG,CAAC,MAAM,aAAa,MAAM,4BAA4B,CAAC,CAAC,CAAC;IACvH,CAAC;IACD,OAAO,MAAM,CAAC,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/C,CAAC"}
|
package/intern/kyc.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Result } from "@adviser/cement";
|
|
2
|
+
import type { Logger } from "@adviser/cement";
|
|
3
|
+
import { VibesApiSQLCtx } from "../types.js";
|
|
4
|
+
export type KycStamp = "card";
|
|
5
|
+
export interface KycStatus {
|
|
6
|
+
readonly card: boolean;
|
|
7
|
+
readonly cardAt?: string;
|
|
8
|
+
}
|
|
9
|
+
type KycCtx = Pick<VibesApiSQLCtx, "sql">;
|
|
10
|
+
export declare function kycFromSettingItems(items: readonly unknown[]): KycStatus;
|
|
11
|
+
export declare function readKycResult(vctx: KycCtx, userId: string): Promise<Result<KycStatus>>;
|
|
12
|
+
export declare function readKyc(vctx: KycCtx, userId: string): Promise<KycStatus>;
|
|
13
|
+
export declare const __kycTestHooks: {
|
|
14
|
+
afterReadSettings?: () => Promise<void>;
|
|
15
|
+
};
|
|
16
|
+
export declare function stampKycCard(vctx: KycCtx, userId: string, at?: string): Promise<"stamped" | "already">;
|
|
17
|
+
export declare function requireKyc(vctx: KycCtx, userId: string, stamp: KycStamp): Promise<Result<{
|
|
18
|
+
readonly stamp: KycStamp;
|
|
19
|
+
}>>;
|
|
20
|
+
export declare function stampKycCardOnSavedCard(opts: {
|
|
21
|
+
readonly vctx: KycCtx;
|
|
22
|
+
readonly logger: Logger;
|
|
23
|
+
readonly waitUntil?: ((promise: Promise<unknown>) => void) | undefined;
|
|
24
|
+
}): (userId: string) => void;
|
|
25
|
+
export {};
|
package/intern/kyc.js
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { Result, exception2Result } from "@adviser/cement";
|
|
2
|
+
import { eq } from "drizzle-orm/sql/expressions";
|
|
3
|
+
import { sql } from "drizzle-orm";
|
|
4
|
+
function isKycSettingItem(e) {
|
|
5
|
+
return typeof e === "object" && e !== null && e.type === "kyc";
|
|
6
|
+
}
|
|
7
|
+
export function kycFromSettingItems(items) {
|
|
8
|
+
for (const e of items) {
|
|
9
|
+
if (isKycSettingItem(e) && typeof e.cardAt === "string" && e.cardAt.length > 0) {
|
|
10
|
+
return { card: true, cardAt: e.cardAt };
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
return { card: false };
|
|
14
|
+
}
|
|
15
|
+
async function selectSettingItems(vctx, userId) {
|
|
16
|
+
const rRows = await exception2Result(() => vctx.sql.db
|
|
17
|
+
.select({ settings: vctx.sql.tables.userSettings.settings })
|
|
18
|
+
.from(vctx.sql.tables.userSettings)
|
|
19
|
+
.where(eq(vctx.sql.tables.userSettings.userId, userId))
|
|
20
|
+
.limit(1));
|
|
21
|
+
if (rRows.isErr()) {
|
|
22
|
+
return Result.Err(rRows.Err());
|
|
23
|
+
}
|
|
24
|
+
return Result.Ok(rRows.Ok()[0]?.settings ?? []);
|
|
25
|
+
}
|
|
26
|
+
export async function readKycResult(vctx, userId) {
|
|
27
|
+
const rItems = await selectSettingItems(vctx, userId);
|
|
28
|
+
if (rItems.isErr()) {
|
|
29
|
+
return Result.Err(`kyc lookup failed: ${rItems.Err().message}`);
|
|
30
|
+
}
|
|
31
|
+
return Result.Ok(kycFromSettingItems(rItems.Ok()));
|
|
32
|
+
}
|
|
33
|
+
export async function readKyc(vctx, userId) {
|
|
34
|
+
const r = await readKycResult(vctx, userId);
|
|
35
|
+
if (r.isErr())
|
|
36
|
+
throw r.Err();
|
|
37
|
+
return r.Ok();
|
|
38
|
+
}
|
|
39
|
+
function runKycSql(db, flavour, stmt) {
|
|
40
|
+
if (flavour === "pg") {
|
|
41
|
+
return db.execute(stmt);
|
|
42
|
+
}
|
|
43
|
+
return db.run(stmt);
|
|
44
|
+
}
|
|
45
|
+
export const __kycTestHooks = {};
|
|
46
|
+
export async function stampKycCard(vctx, userId, at = new Date().toISOString()) {
|
|
47
|
+
const now = new Date().toISOString();
|
|
48
|
+
const rItems = await selectSettingItems(vctx, userId);
|
|
49
|
+
if (rItems.isErr())
|
|
50
|
+
throw rItems.Err();
|
|
51
|
+
if (kycFromSettingItems(rItems.Ok()).card === true) {
|
|
52
|
+
return "already";
|
|
53
|
+
}
|
|
54
|
+
await __kycTestHooks.afterReadSettings?.();
|
|
55
|
+
const flavour = vctx.sql.flavour;
|
|
56
|
+
const stamp = { type: "kyc", cardAt: at };
|
|
57
|
+
const stampArray = sql `${JSON.stringify([stamp])}`;
|
|
58
|
+
const settingsSeed = flavour === "pg" ? sql `${stampArray}::jsonb` : stampArray;
|
|
59
|
+
const rInsert = await exception2Result(() => runKycSql(vctx.sql.db, flavour, sql `
|
|
60
|
+
INSERT INTO "UserSettings" ("userId","settings","updated","created")
|
|
61
|
+
VALUES (${userId}, ${settingsSeed}, ${now}, ${now})
|
|
62
|
+
ON CONFLICT ("userId") DO NOTHING`));
|
|
63
|
+
if (rInsert.isErr())
|
|
64
|
+
throw rInsert.Err();
|
|
65
|
+
const appended = flavour === "pg"
|
|
66
|
+
? sql `"settings" || ${stampArray}::jsonb`
|
|
67
|
+
: sql `json_insert("settings", '$[#]', json(${JSON.stringify(stamp)}))`;
|
|
68
|
+
const absent = flavour === "pg"
|
|
69
|
+
? sql `NOT EXISTS (SELECT 1 FROM jsonb_array_elements("UserSettings"."settings") e WHERE e->>'type' = 'kyc')`
|
|
70
|
+
: sql `NOT EXISTS (SELECT 1 FROM json_each("UserSettings"."settings") e WHERE json_extract(e.value, '$.type') = 'kyc')`;
|
|
71
|
+
const rUpdate = await exception2Result(() => runKycSql(vctx.sql.db, flavour, sql `
|
|
72
|
+
UPDATE "UserSettings"
|
|
73
|
+
SET "settings" = ${appended}, "updated" = ${now}
|
|
74
|
+
WHERE "userId" = ${userId} AND ${absent}`));
|
|
75
|
+
if (rUpdate.isErr())
|
|
76
|
+
throw rUpdate.Err();
|
|
77
|
+
return "stamped";
|
|
78
|
+
}
|
|
79
|
+
export async function requireKyc(vctx, userId, stamp) {
|
|
80
|
+
const rStatus = await readKycResult(vctx, userId);
|
|
81
|
+
if (rStatus.isErr()) {
|
|
82
|
+
return Result.Err(rStatus.Err());
|
|
83
|
+
}
|
|
84
|
+
if (stamp === "card" && rStatus.Ok().card === false) {
|
|
85
|
+
return Result.Err(`kyc-required: ${stamp}`);
|
|
86
|
+
}
|
|
87
|
+
return Result.Ok({ stamp });
|
|
88
|
+
}
|
|
89
|
+
export function stampKycCardOnSavedCard(opts) {
|
|
90
|
+
return (userId) => {
|
|
91
|
+
const stamping = stampKycCard(opts.vctx, userId).catch((e) => {
|
|
92
|
+
opts.logger.Warn().Err(e).Str("userId", userId).Msg("kyc-card-stamp-failed");
|
|
93
|
+
});
|
|
94
|
+
opts.waitUntil?.(stamping);
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=kyc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kyc.js","sourceRoot":"","sources":["../../jsr/intern/kyc.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAE3D,OAAO,EAAE,EAAE,EAAE,MAAM,6BAA6B,CAAC;AACjD,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAkBlC,SAAS,gBAAgB,CAAC,CAAU;IAClC,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAK,CAAwB,CAAC,IAAI,KAAK,KAAK,CAAC;AACzF,CAAC;AAOD,MAAM,UAAU,mBAAmB,CAAC,KAAyB;IAC3D,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,gBAAgB,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/E,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;QAC1C,CAAC;IACH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACzB,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,IAAY,EAAE,MAAc;IAC5D,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,CACxC,IAAI,CAAC,GAAG,CAAC,EAAE;SACR,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;SAC3D,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC;SAClC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;SACtD,KAAK,CAAC,CAAC,CAAC,CACZ,CAAC;IACF,IAAI,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;QAClB,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,MAAM,CAAC,EAAE,CAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,QAAkC,IAAI,EAAE,CAAC,CAAC;AAC7E,CAAC;AAGD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAY,EAAE,MAAc;IAC9D,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACtD,IAAI,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;QACnB,OAAO,MAAM,CAAC,GAAG,CAAC,sBAAsB,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,MAAM,CAAC,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AACrD,CAAC;AAOD,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAY,EAAE,MAAc;IACxD,MAAM,CAAC,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5C,IAAI,CAAC,CAAC,KAAK,EAAE;QAAE,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;IAC7B,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC;AAChB,CAAC;AAID,SAAS,SAAS,CAAC,EAAe,EAAE,OAA8B,EAAE,IAA4B;IAC9F,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,OAAQ,EAA+D,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACxF,CAAC;IACD,OAAQ,EAA2D,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAChF,CAAC;AAOD,MAAM,CAAC,MAAM,cAAc,GAAgD,EAAE,CAAC;AAiC9E,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,IAAY,EACZ,MAAc,EACd,EAAE,GAAW,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;IAErC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACtD,IAAI,MAAM,CAAC,KAAK,EAAE;QAAE,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC;IACvC,IAAI,mBAAmB,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QACnD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,cAAc,CAAC,iBAAiB,EAAE,EAAE,CAAC;IAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;IACjC,MAAM,KAAK,GAAmB,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAK1D,MAAM,UAAU,GAAG,GAAG,CAAA,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;IACnD,MAAM,YAAY,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAA,GAAG,UAAU,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;IAC/E,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,CAC1C,SAAS,CACP,IAAI,CAAC,GAAG,CAAC,EAAE,EACX,OAAO,EACP,GAAG,CAAA;;kBAES,MAAM,KAAK,YAAY,KAAK,GAAG,KAAK,GAAG;0CACf,CACrC,CACF,CAAC;IACF,IAAI,OAAO,CAAC,KAAK,EAAE;QAAE,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC;IACzC,MAAM,QAAQ,GACZ,OAAO,KAAK,IAAI;QACd,CAAC,CAAC,GAAG,CAAA,iBAAiB,UAAU,SAAS;QACzC,CAAC,CAAC,GAAG,CAAA,wCAAwC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;IAC3E,MAAM,MAAM,GACV,OAAO,KAAK,IAAI;QACd,CAAC,CAAC,GAAG,CAAA,uGAAuG;QAC5G,CAAC,CAAC,GAAG,CAAA,iHAAiH,CAAC;IAC3H,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,CAC1C,SAAS,CACP,IAAI,CAAC,GAAG,CAAC,EAAE,EACX,OAAO,EACP,GAAG,CAAA;;8BAEqB,QAAQ,iBAAiB,GAAG;4BAC9B,MAAM,QAAQ,MAAM,EAAE,CAC7C,CACF,CAAC;IACF,IAAI,OAAO,CAAC,KAAK,EAAE;QAAE,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC;IACzC,OAAO,SAAS,CAAC;AACnB,CAAC;AAID,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY,EAAE,MAAc,EAAE,KAAe;IAC5E,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAClD,IAAI,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;QACpB,OAAO,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACnC,CAAC;IACD,IAAI,KAAK,KAAK,MAAM,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QACpD,OAAO,MAAM,CAAC,GAAG,CAAC,iBAAiB,KAAK,EAAE,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,MAAM,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AAC9B,CAAC;AAcD,MAAM,UAAU,uBAAuB,CAAC,IAIvC;IACC,OAAO,CAAC,MAAc,EAAE,EAAE;QAGxB,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE;YACpE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QAC/E,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -5,7 +5,6 @@ export declare const MAX_TOOL_CALL_ID_CHARS = 256;
|
|
|
5
5
|
export declare const MAX_TOOL_CALL_NAME_CHARS = 256;
|
|
6
6
|
export declare const MAX_TOOL_CALL_ARGUMENT_CHARS: number;
|
|
7
7
|
export declare const MAX_PROVIDER_CHUNK_ERRORS = 3;
|
|
8
|
-
export declare const LANDING_ROUND_RESERVE_MS = 5000;
|
|
9
8
|
export type LlmToolCallField = "id" | "name" | "arguments";
|
|
10
9
|
export declare class LlmToolLoopError extends Error {
|
|
11
10
|
readonly field: LlmToolCallField;
|
|
@@ -82,20 +81,10 @@ export interface LlmToolLoopArgs {
|
|
|
82
81
|
readonly call: LlmToolCall;
|
|
83
82
|
readonly text: string;
|
|
84
83
|
}) => Promise<Result<void>>;
|
|
85
|
-
readonly pending?: LlmToolLoopPending;
|
|
86
84
|
readonly maxToolRounds?: number;
|
|
87
85
|
readonly maxToolCalls?: number;
|
|
88
86
|
readonly now?: () => number;
|
|
89
87
|
}
|
|
90
|
-
export interface LlmToolLoopPending {
|
|
91
|
-
hasPending(): boolean;
|
|
92
|
-
waitForAny(input: {
|
|
93
|
-
readonly remainingMs: number;
|
|
94
|
-
}): Promise<string | undefined>;
|
|
95
|
-
cancelAll(): void;
|
|
96
|
-
markDelivered(): void;
|
|
97
|
-
close(): void;
|
|
98
|
-
}
|
|
99
88
|
export interface LlmToolLoopResult {
|
|
100
89
|
readonly request: LLMRequest;
|
|
101
90
|
readonly rounds: number;
|
package/intern/llm-tool-loop.js
CHANGED
|
@@ -8,7 +8,6 @@ export const MAX_TOOL_CALL_ID_CHARS = 256;
|
|
|
8
8
|
export const MAX_TOOL_CALL_NAME_CHARS = 256;
|
|
9
9
|
export const MAX_TOOL_CALL_ARGUMENT_CHARS = 64 * 1024;
|
|
10
10
|
export const MAX_PROVIDER_CHUNK_ERRORS = 3;
|
|
11
|
-
export const LANDING_ROUND_RESERVE_MS = 5_000;
|
|
12
11
|
export class LlmToolLoopError extends Error {
|
|
13
12
|
field;
|
|
14
13
|
limit;
|
|
@@ -302,7 +301,7 @@ async function consumeProviderStream(args, stream, request, now, textState) {
|
|
|
302
301
|
}
|
|
303
302
|
if (isSseEnd(event, event.streamId)) {
|
|
304
303
|
if (sawToolCall === false) {
|
|
305
|
-
if (args.session !== undefined
|
|
304
|
+
if (args.session !== undefined) {
|
|
306
305
|
completedNormally = true;
|
|
307
306
|
return Result.Ok({ toolCalls: [], sawToolCall: false, assistantContent, withheldEnd: event });
|
|
308
307
|
}
|
|
@@ -403,49 +402,6 @@ export async function runLlmToolLoop(args) {
|
|
|
403
402
|
textState.separatorOwed = true;
|
|
404
403
|
continue;
|
|
405
404
|
}
|
|
406
|
-
const withheld = streamResult.withheldEnd;
|
|
407
|
-
if (withheld !== undefined) {
|
|
408
|
-
const pending = args.pending;
|
|
409
|
-
const waitMs = remainingBudget(args.budget, now) - LANDING_ROUND_RESERVE_MS;
|
|
410
|
-
if (rounds >= maxToolRounds || waitMs <= 0) {
|
|
411
|
-
pending?.close();
|
|
412
|
-
pending?.cancelAll();
|
|
413
|
-
const rVisible = await args.onVisible(withheld);
|
|
414
|
-
if (rVisible.isErr())
|
|
415
|
-
return Result.Err(String(rVisible.Err()));
|
|
416
|
-
return Result.Ok({ request: currentRequest, rounds, calls });
|
|
417
|
-
}
|
|
418
|
-
const landing = await pending?.waitForAny({ remainingMs: waitMs });
|
|
419
|
-
if (landing === undefined) {
|
|
420
|
-
const rVisible = await args.onVisible(withheld);
|
|
421
|
-
if (rVisible.isErr())
|
|
422
|
-
return Result.Err(String(rVisible.Err()));
|
|
423
|
-
return Result.Ok({ request: currentRequest, rounds, calls });
|
|
424
|
-
}
|
|
425
|
-
rounds++;
|
|
426
|
-
if (textState.lastChar !== "" && /\s/.test(textState.lastChar) === false)
|
|
427
|
-
textState.separatorOwed = true;
|
|
428
|
-
const spoken = streamResult.assistantContent === null || streamResult.assistantContent.length === 0
|
|
429
|
-
? []
|
|
430
|
-
: [{ role: "assistant", content: [{ type: "text", text: streamResult.assistantContent }] }];
|
|
431
|
-
const withLanding = {
|
|
432
|
-
...currentRequest,
|
|
433
|
-
messages: [...currentRequest.messages, ...spoken, { role: "user", content: [{ type: "text", text: landing }] }],
|
|
434
|
-
};
|
|
435
|
-
const rLanded = await args.dispatch({ request: withLanding, budget: args.budget, round: rounds });
|
|
436
|
-
if (rLanded.isErr()) {
|
|
437
|
-
const rVisible = await args.onVisible(withheld);
|
|
438
|
-
if (rVisible.isErr())
|
|
439
|
-
return Result.Err(String(rVisible.Err()));
|
|
440
|
-
return Result.Err(String(rLanded.Err()));
|
|
441
|
-
}
|
|
442
|
-
pending?.markDelivered();
|
|
443
|
-
const landed = rLanded.Ok();
|
|
444
|
-
currentRequest = landed.request;
|
|
445
|
-
currentStream = landed.stream;
|
|
446
|
-
currentAbort = landed.abort;
|
|
447
|
-
continue;
|
|
448
|
-
}
|
|
449
405
|
return Result.Ok({ request: currentRequest, rounds, calls });
|
|
450
406
|
}
|
|
451
407
|
if (rounds >= maxToolRounds)
|
|
@@ -519,8 +475,6 @@ export async function runLlmToolLoop(args) {
|
|
|
519
475
|
}
|
|
520
476
|
}
|
|
521
477
|
finally {
|
|
522
|
-
args.pending?.close();
|
|
523
|
-
args.pending?.cancelAll();
|
|
524
478
|
args.onSpend?.({ rounds, calls });
|
|
525
479
|
}
|
|
526
480
|
}
|