@vibes.diy/api-svc 14.3.28 → 14.3.30
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/intern/agent-build-tools.d.ts +1 -0
- package/intern/agent-build-tools.js +1 -1
- package/intern/agent-build-tools.js.map +1 -1
- package/intern/agent-dispatcher.js +82 -22
- package/intern/agent-dispatcher.js.map +1 -1
- package/intern/attach-draft-handle.d.ts +1 -0
- package/intern/attach-draft-handle.js +56 -2
- package/intern/attach-draft-handle.js.map +1 -1
- package/intern/draft-continuation.js +6 -1
- package/intern/draft-continuation.js.map +1 -1
- package/intern/draft-lane-config.d.ts +6 -0
- package/intern/draft-lane-config.js +10 -1
- package/intern/draft-lane-config.js.map +1 -1
- package/intern/draft-lane-look.d.ts +20 -0
- package/intern/draft-lane-look.js +78 -0
- package/intern/draft-lane-look.js.map +1 -0
- package/intern/draft-lane-opens.js +42 -0
- package/intern/draft-lane-opens.js.map +1 -1
- package/intern/draft-lane-persist.d.ts +13 -3
- package/intern/draft-lane-persist.js +59 -17
- package/intern/draft-lane-persist.js.map +1 -1
- package/intern/draft-lane-store.d.ts +1 -0
- package/intern/draft-lane-store.js.map +1 -1
- package/intern/draft-lane-worker.d.ts +32 -3
- package/intern/draft-lane-worker.js +163 -30
- package/intern/draft-lane-worker.js.map +1 -1
- package/intern/draft-lane.d.ts +2 -1
- package/intern/draft-lane.js +31 -1
- package/intern/draft-lane.js.map +1 -1
- package/intern/ensure-chat-id.d.ts +1 -0
- package/intern/ensure-chat-id.js +21 -16
- package/intern/ensure-chat-id.js.map +1 -1
- package/intern/guest-build-store.d.ts +9 -0
- package/intern/guest-build-store.js +100 -1
- package/intern/guest-build-store.js.map +1 -1
- package/intern/guest-draft-start.d.ts +25 -0
- package/intern/guest-draft-start.js +66 -0
- package/intern/guest-draft-start.js.map +1 -0
- package/intern/mint-job-store.d.ts +7 -0
- package/intern/mint-job-store.js +22 -0
- package/intern/mint-job-store.js.map +1 -1
- package/package.json +12 -12
- package/public/open-chat.d.ts +2 -1
- package/public/open-chat.js +30 -7
- package/public/open-chat.js.map +1 -1
- package/public/shared-mint.js +13 -3
- package/public/shared-mint.js.map +1 -1
|
@@ -2,17 +2,23 @@ export declare const DEFAULT_DRAFT_CLASSIFIER_MODEL = "google/gemini-3.5-flash-l
|
|
|
2
2
|
export declare const DEFAULT_DRAFT_BUILDER_MODEL = "inception/mercury-2.5";
|
|
3
3
|
export declare const DEFAULT_DRAFT_LEASE_MS = 90000;
|
|
4
4
|
export declare const DEFAULT_DRAFT_CLASSIFIER_TIMEOUT_MS = 4000;
|
|
5
|
+
export declare const DEFAULT_DRAFT_BUILDER_TIMEOUT_MS = 40000;
|
|
6
|
+
export declare const DRAFT_LEASE_HEADROOM_MS = 10000;
|
|
5
7
|
export declare const DRAFT_MAX_RETRIES = 2;
|
|
6
8
|
export type DraftReasoningEffort = "none" | "minimal";
|
|
7
9
|
export declare function draftReasoningEffortFor(model: string): DraftReasoningEffort | undefined;
|
|
8
10
|
export interface DraftLaneConfig {
|
|
9
11
|
readonly enabled: boolean;
|
|
12
|
+
readonly guestEnabled: boolean;
|
|
10
13
|
readonly classifierModel: string;
|
|
11
14
|
readonly builderModel: string;
|
|
12
15
|
readonly leaseMs: number;
|
|
13
16
|
readonly classifierTimeoutMs: number;
|
|
17
|
+
readonly builderTimeoutMs: number;
|
|
14
18
|
readonly maxRetries: number;
|
|
19
|
+
readonly maxOutputTokens?: number;
|
|
15
20
|
}
|
|
16
21
|
export declare function readDraftLaneConfig(env: {
|
|
17
22
|
get(key: string): string | undefined;
|
|
18
23
|
}): DraftLaneConfig;
|
|
24
|
+
export declare function guestDraftLaneConfig(config: DraftLaneConfig): DraftLaneConfig;
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
import { GUEST_INITIAL_OUTPUT_TOKEN_LIMIT } from "@vibes.diy/vibe-types/runtime-ai-limits.js";
|
|
1
2
|
export const DEFAULT_DRAFT_CLASSIFIER_MODEL = "google/gemini-3.5-flash-lite";
|
|
2
3
|
export const DEFAULT_DRAFT_BUILDER_MODEL = "inception/mercury-2.5";
|
|
3
4
|
export const DEFAULT_DRAFT_LEASE_MS = 90_000;
|
|
4
5
|
export const DEFAULT_DRAFT_CLASSIFIER_TIMEOUT_MS = 4_000;
|
|
6
|
+
export const DEFAULT_DRAFT_BUILDER_TIMEOUT_MS = 40_000;
|
|
7
|
+
export const DRAFT_LEASE_HEADROOM_MS = 10_000;
|
|
5
8
|
export const DRAFT_MAX_RETRIES = 2;
|
|
6
9
|
export function draftReasoningEffortFor(model) {
|
|
7
10
|
switch (true) {
|
|
@@ -23,13 +26,19 @@ function nonEmpty(raw, fallback) {
|
|
|
23
26
|
return raw === undefined || raw.trim() === "" ? fallback : raw.trim();
|
|
24
27
|
}
|
|
25
28
|
export function readDraftLaneConfig(env) {
|
|
29
|
+
const leaseMs = positiveInt(env.get("DRAFT_LEASE_MS"), DEFAULT_DRAFT_LEASE_MS);
|
|
26
30
|
return {
|
|
27
31
|
enabled: env.get("DRAFT_LANE") === "on",
|
|
32
|
+
guestEnabled: env.get("DRAFT_LANE_GUEST") === "on",
|
|
28
33
|
classifierModel: nonEmpty(env.get("DRAFT_CLASSIFIER_MODEL"), DEFAULT_DRAFT_CLASSIFIER_MODEL),
|
|
29
34
|
builderModel: nonEmpty(env.get("DRAFT_BUILDER_MODEL"), DEFAULT_DRAFT_BUILDER_MODEL),
|
|
30
|
-
leaseMs
|
|
35
|
+
leaseMs,
|
|
31
36
|
classifierTimeoutMs: positiveInt(env.get("DRAFT_CLASSIFIER_TIMEOUT_MS"), DEFAULT_DRAFT_CLASSIFIER_TIMEOUT_MS),
|
|
37
|
+
builderTimeoutMs: Math.min(positiveInt(env.get("DRAFT_BUILDER_TIMEOUT_MS"), DEFAULT_DRAFT_BUILDER_TIMEOUT_MS), Math.max(1, leaseMs - DRAFT_LEASE_HEADROOM_MS)),
|
|
32
38
|
maxRetries: DRAFT_MAX_RETRIES,
|
|
33
39
|
};
|
|
34
40
|
}
|
|
41
|
+
export function guestDraftLaneConfig(config) {
|
|
42
|
+
return { ...config, maxRetries: 0, maxOutputTokens: GUEST_INITIAL_OUTPUT_TOKEN_LIMIT };
|
|
43
|
+
}
|
|
35
44
|
//# sourceMappingURL=draft-lane-config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"draft-lane-config.js","sourceRoot":"","sources":["../../jsr/intern/draft-lane-config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"draft-lane-config.js","sourceRoot":"","sources":["../../jsr/intern/draft-lane-config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gCAAgC,EAAE,MAAM,4CAA4C,CAAC;AAE9F,MAAM,CAAC,MAAM,8BAA8B,GAAG,8BAA8B,CAAC;AAC7E,MAAM,CAAC,MAAM,2BAA2B,GAAG,uBAAuB,CAAC;AACnE,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC;AAG7C,MAAM,CAAC,MAAM,mCAAmC,GAAG,KAAK,CAAC;AAMzD,MAAM,CAAC,MAAM,gCAAgC,GAAG,MAAM,CAAC;AAIvD,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC;AAG9C,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAYnC,MAAM,UAAU,uBAAuB,CAAC,KAAa;IACnD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC;YACjC,OAAO,MAAM,CAAC;QAChB,KAAK,KAAK,CAAC,UAAU,CAAC,8BAA8B,CAAC;YACnD,OAAO,SAAS,CAAC;QACnB;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAyBD,SAAS,WAAW,CAAC,GAAuB,EAAE,QAAgB;IAC5D,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,QAAQ,CAAC;IAC5D,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACtB,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AACrD,CAAC;AAED,SAAS,QAAQ,CAAC,GAAuB,EAAE,QAAgB;IACzD,OAAO,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;AACxE,CAAC;AAGD,MAAM,UAAU,mBAAmB,CAAC,GAA6C;IAC/E,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,sBAAsB,CAAC,CAAC;IAC/E,OAAO;QACL,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,IAAI;QACvC,YAAY,EAAE,GAAG,CAAC,GAAG,CAAC,kBAAkB,CAAC,KAAK,IAAI;QAClD,eAAe,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,wBAAwB,CAAC,EAAE,8BAA8B,CAAC;QAC5F,YAAY,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE,2BAA2B,CAAC;QACnF,OAAO;QACP,mBAAmB,EAAE,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,6BAA6B,CAAC,EAAE,mCAAmC,CAAC;QAG7G,gBAAgB,EAAE,IAAI,CAAC,GAAG,CACxB,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,0BAA0B,CAAC,EAAE,gCAAgC,CAAC,EAClF,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,uBAAuB,CAAC,CAC/C;QACD,UAAU,EAAE,iBAAiB;KAC9B,CAAC;AACJ,CAAC;AASD,MAAM,UAAU,oBAAoB,CAAC,MAAuB;IAC1D,OAAO,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,CAAC,EAAE,eAAe,EAAE,gCAAgC,EAAE,CAAC;AACzF,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Result } from "@adviser/cement";
|
|
2
|
+
import { type AppScopedActiveEntry, type Style } from "@vibes.diy/api-types";
|
|
3
|
+
import type { VibesApiSQLCtx } from "../types.js";
|
|
4
|
+
export interface DraftLook {
|
|
5
|
+
readonly theme: string;
|
|
6
|
+
readonly colorTheme?: string;
|
|
7
|
+
readonly style?: Style;
|
|
8
|
+
}
|
|
9
|
+
export declare function drawDraftLook(rnd: () => number, theme?: string): DraftLook;
|
|
10
|
+
export declare function draftLookEntries(look: DraftLook): AppScopedActiveEntry[];
|
|
11
|
+
export declare function preDrawDraftLook(vctx: VibesApiSQLCtx, key: {
|
|
12
|
+
readonly userId: string;
|
|
13
|
+
readonly ownerHandle: string;
|
|
14
|
+
readonly appSlug: string;
|
|
15
|
+
}, rnd?: () => number): Promise<Result<DraftLook>>;
|
|
16
|
+
export declare function bufferDraftLook(vctx: VibesApiSQLCtx, key: {
|
|
17
|
+
readonly chatId: string;
|
|
18
|
+
readonly userId: string;
|
|
19
|
+
}, rnd?: () => number): Promise<Result<DraftLook>>;
|
|
20
|
+
export declare function readStoredDraftLook(vctx: VibesApiSQLCtx, ownerHandle: string, appSlug: string): Promise<Result<DraftLook | undefined>>;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { Result, exception2Result } from "@adviser/cement";
|
|
2
|
+
import { isActiveColorTheme, isActiveStyle, isActiveTheme, } from "@vibes.diy/api-types";
|
|
3
|
+
import { drawLookColorway } from "@vibes.diy/prompts";
|
|
4
|
+
import { and, eq } from "drizzle-orm/sql/expressions";
|
|
5
|
+
import { parseDraftPreAlloc } from "./draft-chat-store.js";
|
|
6
|
+
import { readComposedSettingsForApp, writeAppSettingItems } from "../public/app-setting-items.js";
|
|
7
|
+
import { MINT_FALLBACK_THEME, stampableStyleForTheme, styleForLookColorway } from "./mint-style.js";
|
|
8
|
+
export function drawDraftLook(rnd, theme = MINT_FALLBACK_THEME) {
|
|
9
|
+
const colorway = drawLookColorway(rnd, theme);
|
|
10
|
+
if (colorway === undefined) {
|
|
11
|
+
const style = stampableStyleForTheme(theme);
|
|
12
|
+
return { theme, ...(style === undefined ? {} : { style }) };
|
|
13
|
+
}
|
|
14
|
+
const style = styleForLookColorway(theme, colorway);
|
|
15
|
+
return { theme, colorTheme: colorway, ...(style === undefined ? {} : { style }) };
|
|
16
|
+
}
|
|
17
|
+
export function draftLookEntries(look) {
|
|
18
|
+
const entries = [{ type: "active.theme", theme: look.theme }];
|
|
19
|
+
if (look.colorTheme !== undefined)
|
|
20
|
+
entries.push({ type: "active.colorTheme", colorTheme: look.colorTheme });
|
|
21
|
+
if (look.style !== undefined)
|
|
22
|
+
entries.push({ type: "active.style", ...look.style });
|
|
23
|
+
return entries;
|
|
24
|
+
}
|
|
25
|
+
export async function preDrawDraftLook(vctx, key, rnd = Math.random) {
|
|
26
|
+
const look = drawDraftLook(rnd);
|
|
27
|
+
const written = await exception2Result(() => writeAppSettingItems(vctx, key, { upserts: draftLookEntries(look) }));
|
|
28
|
+
if (written.isErr())
|
|
29
|
+
return Result.Err(written.Err());
|
|
30
|
+
return Result.Ok(look);
|
|
31
|
+
}
|
|
32
|
+
export async function bufferDraftLook(vctx, key, rnd = Math.random) {
|
|
33
|
+
const look = drawDraftLook(rnd);
|
|
34
|
+
const t = vctx.sql.tables.chatContexts;
|
|
35
|
+
const where = and(eq(t.chatId, key.chatId), eq(t.userId, key.userId));
|
|
36
|
+
const rRow = await exception2Result(() => vctx.sql.db
|
|
37
|
+
.select({ draftPreAlloc: t.draftPreAlloc })
|
|
38
|
+
.from(t)
|
|
39
|
+
.where(where)
|
|
40
|
+
.limit(1)
|
|
41
|
+
.then((rows) => rows[0]));
|
|
42
|
+
if (rRow.isErr())
|
|
43
|
+
return Result.Err(rRow.Err());
|
|
44
|
+
const row = rRow.Ok();
|
|
45
|
+
if (row === undefined)
|
|
46
|
+
return Result.Err(`draft chat ${key.chatId} not found`);
|
|
47
|
+
const prior = parseDraftPreAlloc(row.draftPreAlloc) ?? {};
|
|
48
|
+
const next = {
|
|
49
|
+
...prior,
|
|
50
|
+
theme: look.theme,
|
|
51
|
+
...(look.colorTheme === undefined ? {} : { colorTheme: look.colorTheme }),
|
|
52
|
+
...(look.style === undefined ? {} : { style: look.style }),
|
|
53
|
+
};
|
|
54
|
+
const written = await exception2Result(() => vctx.sql.db.update(t).set({ draftPreAlloc: next }).where(where));
|
|
55
|
+
if (written.isErr())
|
|
56
|
+
return Result.Err(written.Err());
|
|
57
|
+
return Result.Ok(look);
|
|
58
|
+
}
|
|
59
|
+
export async function readStoredDraftLook(vctx, ownerHandle, appSlug) {
|
|
60
|
+
const rEntries = await exception2Result(() => readComposedSettingsForApp(vctx, ownerHandle, appSlug));
|
|
61
|
+
if (rEntries.isErr())
|
|
62
|
+
return Result.Err(rEntries.Err());
|
|
63
|
+
const entries = rEntries.Ok();
|
|
64
|
+
const theme = entries.filter(isActiveTheme).at(-1)?.theme;
|
|
65
|
+
if (theme === undefined)
|
|
66
|
+
return Result.Ok(undefined);
|
|
67
|
+
const colorTheme = entries.filter(isActiveColorTheme).at(-1)?.colorTheme;
|
|
68
|
+
const stored = entries.filter(isActiveStyle).at(-1);
|
|
69
|
+
const style = stored === undefined
|
|
70
|
+
? undefined
|
|
71
|
+
: {
|
|
72
|
+
...(stored.palette === undefined ? {} : { palette: stored.palette }),
|
|
73
|
+
...(stored.font === undefined ? {} : { font: stored.font }),
|
|
74
|
+
...(stored.ornament === undefined ? {} : { ornament: stored.ornament }),
|
|
75
|
+
};
|
|
76
|
+
return Result.Ok({ theme, ...(colorTheme === undefined ? {} : { colorTheme }), ...(style === undefined ? {} : { style }) });
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=draft-lane-look.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"draft-lane-look.js","sourceRoot":"","sources":["../../jsr/intern/draft-lane-look.ts"],"names":[],"mappings":"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"}
|
|
@@ -83,6 +83,45 @@ function isHookCall(node) {
|
|
|
83
83
|
const callee = identifierName(node.callee);
|
|
84
84
|
return callee !== undefined && /^use[A-Z]/.test(callee);
|
|
85
85
|
}
|
|
86
|
+
const SELECT_PARTS = new Set(["SelectValue", "SelectTrigger", "SelectContent", "SelectItem"]);
|
|
87
|
+
const FUNCTION_TYPES = new Set(["FunctionDeclaration", "FunctionExpression", "ArrowFunctionExpression"]);
|
|
88
|
+
function selectPartsOutsideSelect(program) {
|
|
89
|
+
const selectFunctions = new Set();
|
|
90
|
+
const unenclosed = [];
|
|
91
|
+
function visit(node, insideSelect, fn) {
|
|
92
|
+
if (Array.isArray(node)) {
|
|
93
|
+
for (const item of node)
|
|
94
|
+
visit(item, insideSelect, fn);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
if (isNode(node) === false)
|
|
98
|
+
return;
|
|
99
|
+
let inside = insideSelect;
|
|
100
|
+
const ownFn = FUNCTION_TYPES.has(node.type) ? node : fn;
|
|
101
|
+
if (node.type === "JSXElement" && isNode(node.openingElement)) {
|
|
102
|
+
const name = jsxElementName(node.openingElement);
|
|
103
|
+
if (name === "Select") {
|
|
104
|
+
inside = true;
|
|
105
|
+
selectFunctions.add(ownFn);
|
|
106
|
+
}
|
|
107
|
+
else if (name !== undefined && SELECT_PARTS.has(name) && inside === false)
|
|
108
|
+
unenclosed.push({ name, fn: ownFn });
|
|
109
|
+
}
|
|
110
|
+
for (const [key, value] of Object.entries(node)) {
|
|
111
|
+
if (key === "type" || key === "start" || key === "end" || key === "loc" || key === "range")
|
|
112
|
+
continue;
|
|
113
|
+
if (typeof value === "object" && value !== null)
|
|
114
|
+
visit(value, inside, ownFn);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
visit(program, false, undefined);
|
|
118
|
+
const outside = new Set();
|
|
119
|
+
for (const part of unenclosed) {
|
|
120
|
+
if (selectFunctions.size === 0 || selectFunctions.has(part.fn))
|
|
121
|
+
outside.add(part.name);
|
|
122
|
+
}
|
|
123
|
+
return outside;
|
|
124
|
+
}
|
|
86
125
|
function checkFile(args) {
|
|
87
126
|
const { path, source, vfs } = args;
|
|
88
127
|
const file = path.replace(/^\/+/, "");
|
|
@@ -142,6 +181,9 @@ function checkFile(args) {
|
|
|
142
181
|
});
|
|
143
182
|
for (const name of missing)
|
|
144
183
|
findings.push(`${file}: <${name}> is used but never imported or defined`);
|
|
184
|
+
for (const name of selectPartsOutsideSelect(program)) {
|
|
185
|
+
findings.push(`${file}: <${name}> renders outside a <Select>; every Select part goes inside its own <Select>`);
|
|
186
|
+
}
|
|
145
187
|
return findings;
|
|
146
188
|
}
|
|
147
189
|
function resolveFrom(fromPath, spec) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"draft-lane-opens.js","sourceRoot":"","sources":["../../jsr/intern/draft-lane-opens.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"draft-lane-opens.js","sourceRoot":"","sources":["../../jsr/intern/draft-lane-opens.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,24 @@
|
|
|
1
1
|
import { Result } from "@adviser/cement";
|
|
2
|
-
import type
|
|
2
|
+
import { type PromptAndBlockMsgs, type VerifiedGuestBuildAuth } from "@vibes.diy/api-types";
|
|
3
3
|
import type { DashAuthType, VerifiedAuthResult } from "@vibes.diy/identity";
|
|
4
4
|
import type { VibesApiSQLCtx } from "../types.js";
|
|
5
5
|
import type { DraftToPersist } from "./draft-lane.js";
|
|
6
|
-
|
|
6
|
+
interface PersistDraftBase {
|
|
7
7
|
readonly chatId: string;
|
|
8
8
|
readonly ownerHandle: string;
|
|
9
9
|
readonly appSlug: string;
|
|
10
|
+
readonly draft: DraftToPersist;
|
|
11
|
+
readonly promptId?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface PersistAccountDraftArgs extends PersistDraftBase {
|
|
10
14
|
readonly auth: DashAuthType;
|
|
11
15
|
readonly verified: VerifiedAuthResult;
|
|
12
|
-
readonly draft: DraftToPersist;
|
|
13
16
|
}
|
|
17
|
+
export interface PersistGuestDraftArgs extends PersistDraftBase {
|
|
18
|
+
readonly guest: VerifiedGuestBuildAuth;
|
|
19
|
+
}
|
|
20
|
+
export type PersistDraftArgs = PersistAccountDraftArgs | PersistGuestDraftArgs;
|
|
21
|
+
export declare function frontendDraftVfs(vfs: ReadonlyMap<string, string>): ReadonlyMap<string, string>;
|
|
14
22
|
export declare function insertSection(vctx: VibesApiSQLCtx, row: {
|
|
15
23
|
readonly chatId: string;
|
|
16
24
|
readonly promptId: string;
|
|
@@ -23,4 +31,6 @@ export interface PersistDraftSeams {
|
|
|
23
31
|
export declare function persistDraftBuild(vctx: VibesApiSQLCtx, args: PersistDraftArgs, seams?: PersistDraftSeams): Promise<Result<{
|
|
24
32
|
readonly appSlug: string;
|
|
25
33
|
readonly buildId: string;
|
|
34
|
+
readonly proposedSlug?: string;
|
|
26
35
|
}>>;
|
|
36
|
+
export {};
|
|
@@ -1,6 +1,36 @@
|
|
|
1
1
|
import { Result, exception2Result } from "@adviser/cement";
|
|
2
|
+
import { isDraftOwnerHandle, isServerOnlyVibeFile, } from "@vibes.diy/api-types";
|
|
2
3
|
import { handlePromptContext } from "../public/handle-prompt-context.js";
|
|
3
|
-
import { blockEndOf, draftTextToBlocks } from "./draft-lane-parse.js";
|
|
4
|
+
import { blockEndOf, draftTextToBlocks, parseDraftText, renderDraftText } from "./draft-lane-parse.js";
|
|
5
|
+
function isGuestDraft(args) {
|
|
6
|
+
return "guest" in args;
|
|
7
|
+
}
|
|
8
|
+
export function frontendDraftVfs(vfs) {
|
|
9
|
+
return new Map([...vfs].filter(([path]) => isServerOnlyVibeFile(path) === false));
|
|
10
|
+
}
|
|
11
|
+
async function frontendDraftText(draft) {
|
|
12
|
+
if ([...draft.vfs.keys()].some((path) => isServerOnlyVibeFile(path)) === false)
|
|
13
|
+
return Result.Ok(draft.text);
|
|
14
|
+
const parsed = await parseDraftText(draft.text);
|
|
15
|
+
if (parsed.isErr())
|
|
16
|
+
return Result.Err(parsed.Err());
|
|
17
|
+
const { vfs, intro, tail } = parsed.Ok();
|
|
18
|
+
return Result.Ok(renderDraftText({ vfs: frontendDraftVfs(vfs), intro, tail }));
|
|
19
|
+
}
|
|
20
|
+
function draftTurnRequest(args, request) {
|
|
21
|
+
const base = {
|
|
22
|
+
type: "vibes.diy.req-prompt-chat-section",
|
|
23
|
+
mode: "codegen",
|
|
24
|
+
chatId: args.chatId,
|
|
25
|
+
outerTid: `draft-lane-${args.chatId}`,
|
|
26
|
+
prompt: request,
|
|
27
|
+
};
|
|
28
|
+
if (isGuestDraft(args)) {
|
|
29
|
+
const guest = args.guest.inGuestAuth;
|
|
30
|
+
return { ...base, guest, _auth: args.guest };
|
|
31
|
+
}
|
|
32
|
+
return { ...base, auth: args.auth, _auth: args.verified };
|
|
33
|
+
}
|
|
4
34
|
export async function insertSection(vctx, row) {
|
|
5
35
|
const inserted = await exception2Result(() => vctx.sql.db.insert(vctx.sql.tables.chatSections).values({
|
|
6
36
|
chatId: row.chatId,
|
|
@@ -13,20 +43,17 @@ export async function insertSection(vctx, row) {
|
|
|
13
43
|
}
|
|
14
44
|
export async function persistDraftBuild(vctx, args, seams) {
|
|
15
45
|
const { chatId, draft } = args;
|
|
16
|
-
const
|
|
46
|
+
const guest = isGuestDraft(args);
|
|
47
|
+
const parkable = guest || isDraftOwnerHandle(args.ownerHandle);
|
|
48
|
+
const promptId = args.promptId ?? vctx.sthis.nextId(12).str;
|
|
17
49
|
const request = {
|
|
18
50
|
model: draft.model,
|
|
19
51
|
messages: [{ role: "user", content: [{ type: "text", text: draft.sentence }] }],
|
|
20
52
|
};
|
|
21
|
-
const req =
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
chatId,
|
|
26
|
-
outerTid: `draft-lane-${chatId}`,
|
|
27
|
-
prompt: request,
|
|
28
|
-
_auth: args.verified,
|
|
29
|
-
};
|
|
53
|
+
const req = draftTurnRequest(args, request);
|
|
54
|
+
const text = parkable ? await frontendDraftText(draft) : Result.Ok(draft.text);
|
|
55
|
+
if (text.isErr())
|
|
56
|
+
return Result.Err(text.Err());
|
|
30
57
|
const begin = await insertSection(vctx, {
|
|
31
58
|
chatId,
|
|
32
59
|
promptId,
|
|
@@ -39,13 +66,15 @@ export async function persistDraftBuild(vctx, args, seams) {
|
|
|
39
66
|
chatId,
|
|
40
67
|
promptId,
|
|
41
68
|
blockSeq: 1,
|
|
42
|
-
evt:
|
|
69
|
+
evt: parkable
|
|
70
|
+
? { type: "prompt.req", request, streamId: promptId, chatId, seq: 1, timestamp: new Date() }
|
|
71
|
+
: { type: "prompt.req", request, streamId: promptId, chatId, seq: 1, timestamp: new Date(), firstDraft: true },
|
|
43
72
|
});
|
|
44
73
|
if (echo.isErr())
|
|
45
74
|
return Result.Err(echo.Err());
|
|
46
75
|
let id = 0;
|
|
47
76
|
const blocks = await draftTextToBlocks({
|
|
48
|
-
text:
|
|
77
|
+
text: text.Ok(),
|
|
49
78
|
streamId: promptId,
|
|
50
79
|
createId: () => `${promptId}-${++id}`,
|
|
51
80
|
usage: draft.usage.map((usage) => ({
|
|
@@ -77,9 +106,22 @@ export async function persistDraftBuild(vctx, args, seams) {
|
|
|
77
106
|
if (persisted.isErr())
|
|
78
107
|
return Result.Err(persisted.Err());
|
|
79
108
|
const { blockSeq, fsRef, deferredPersist } = persisted.Ok();
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
109
|
+
let committed;
|
|
110
|
+
if (guest) {
|
|
111
|
+
if (deferredPersist !== "awaiting-handle")
|
|
112
|
+
return Result.Err("guest draft turn did not park");
|
|
113
|
+
const proposedSlug = draft.classification.slug;
|
|
114
|
+
committed = { appSlug: args.appSlug, buildId: promptId, ...(proposedSlug.length > 0 ? { proposedSlug } : {}) };
|
|
115
|
+
}
|
|
116
|
+
else if (parkable && deferredPersist === "awaiting-handle") {
|
|
117
|
+
committed = { appSlug: args.appSlug, buildId: promptId };
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
if (deferredPersist !== undefined || fsRef.IsNone())
|
|
121
|
+
return Result.Err("draft turn committed no filesystem");
|
|
122
|
+
const ref = fsRef.unwrap();
|
|
123
|
+
committed = { appSlug: ref.appSlug, buildId: ref.fsId };
|
|
124
|
+
}
|
|
83
125
|
const closed = await (seams?.insertClosingSection ?? insertSection)(vctx, {
|
|
84
126
|
chatId,
|
|
85
127
|
promptId,
|
|
@@ -89,6 +131,6 @@ export async function persistDraftBuild(vctx, args, seams) {
|
|
|
89
131
|
if (closed.isErr()) {
|
|
90
132
|
vctx.logger.Warn().Err(closed.Err()).Str("chatId", chatId).Str("promptId", promptId).Msg("draft-lane-block-end-failed");
|
|
91
133
|
}
|
|
92
|
-
return Result.Ok(
|
|
134
|
+
return Result.Ok(committed);
|
|
93
135
|
}
|
|
94
136
|
//# sourceMappingURL=draft-lane-persist.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"draft-lane-persist.js","sourceRoot":"","sources":["../../jsr/intern/draft-lane-persist.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"draft-lane-persist.js","sourceRoot":"","sources":["../../jsr/intern/draft-lane-persist.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,6 +20,7 @@ export interface DraftCompletion {
|
|
|
20
20
|
readonly draftNote: string;
|
|
21
21
|
readonly opensVerdict?: DraftRowVerdict;
|
|
22
22
|
readonly aliasesUsed?: readonly string[];
|
|
23
|
+
readonly proposedSlug?: string;
|
|
23
24
|
}
|
|
24
25
|
export interface DraftJobSql {
|
|
25
26
|
readonly db: VibesApiSQLCtx["sql"]["db"];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"draft-lane-store.js","sourceRoot":"","sources":["../../jsr/intern/draft-lane-store.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"draft-lane-store.js","sourceRoot":"","sources":["../../jsr/intern/draft-lane-store.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAqE1F,MAAM,UAAU,gBAAgB;IAC9B,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC;AACjE,CAAC"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { Result } from "@adviser/cement";
|
|
2
|
+
import { type GuestCredential } from "@vibes.diy/api-types";
|
|
2
3
|
import type { DashAuthType } from "@vibes.diy/identity";
|
|
3
4
|
import type { VibesApiSQLCtx } from "../types.js";
|
|
5
|
+
import { type DraftModelCall } from "./draft-lane-classify.js";
|
|
6
|
+
import { type DraftLaneDeps } from "./draft-lane.js";
|
|
4
7
|
import type { DraftJobStore } from "./draft-lane-store.js";
|
|
5
8
|
export declare const DRAFT_LANE_PATH = "/internal/draft-lane";
|
|
6
9
|
export declare const DRAFT_LANE_AUTH_HEADER = "x-vibes-draft-lane-auth";
|
|
@@ -8,10 +11,14 @@ export declare const draftLaneJob: import("arktype/internal/variants/object.ts")
|
|
|
8
11
|
chatId: string;
|
|
9
12
|
leaseToken: string;
|
|
10
13
|
sentence: string;
|
|
11
|
-
auth
|
|
14
|
+
auth?: {
|
|
12
15
|
type: "clerk" | "device-id" | "ucan";
|
|
13
16
|
token: string;
|
|
14
|
-
};
|
|
17
|
+
} | undefined;
|
|
18
|
+
guest?: {
|
|
19
|
+
type: "guest-build";
|
|
20
|
+
token: string;
|
|
21
|
+
} | undefined;
|
|
15
22
|
submittedAt?: number | undefined;
|
|
16
23
|
analyticsCountry?: string | undefined;
|
|
17
24
|
}, {}>;
|
|
@@ -22,20 +29,42 @@ export declare function draftLaneDispatcher(args: {
|
|
|
22
29
|
readonly internalSecret: string | undefined;
|
|
23
30
|
readonly fetch: (request: Request) => Promise<Response>;
|
|
24
31
|
}): DispatchDraftLane | undefined;
|
|
32
|
+
export declare const DRAFT_LANE_NOT_ADMISSIBLE = "draft-lane-route-status-409";
|
|
25
33
|
export declare function isDraftLaneCallAuthorized(secret: string | undefined, provided: string | null): boolean;
|
|
34
|
+
export type DraftLanePrincipal = {
|
|
35
|
+
readonly kind: "account";
|
|
36
|
+
readonly auth: DashAuthType;
|
|
37
|
+
} | {
|
|
38
|
+
readonly kind: "guest";
|
|
39
|
+
readonly guest: GuestCredential;
|
|
40
|
+
};
|
|
26
41
|
export type DraftLaneSkipReason = "disabled" | "no-dispatcher" | "no-build-intent" | "job-order-error" | "claim-miss" | "claim-error";
|
|
42
|
+
export declare function unownedDraftLaneArmed(vctx: VibesApiSQLCtx, args: {
|
|
43
|
+
readonly prompt: string;
|
|
44
|
+
readonly dispatch: DispatchDraftLane | undefined;
|
|
45
|
+
}): boolean;
|
|
27
46
|
export declare function startDraftLane(vctx: VibesApiSQLCtx, args: {
|
|
28
47
|
readonly chatId: string;
|
|
29
48
|
readonly prompt: string;
|
|
30
|
-
readonly
|
|
49
|
+
readonly principal: DraftLanePrincipal;
|
|
31
50
|
readonly jobOrder?: Promise<unknown>;
|
|
32
51
|
readonly store: DraftJobStore;
|
|
33
52
|
readonly dispatch: DispatchDraftLane | undefined;
|
|
34
53
|
readonly submittedAt?: number;
|
|
54
|
+
readonly look?: {
|
|
55
|
+
readonly userId: string;
|
|
56
|
+
readonly ownerHandle: string;
|
|
57
|
+
readonly appSlug: string;
|
|
58
|
+
};
|
|
59
|
+
readonly rnd?: () => number;
|
|
35
60
|
}): Promise<boolean>;
|
|
36
61
|
export declare function handleDraftLaneRequest(args: {
|
|
37
62
|
readonly request: Request;
|
|
38
63
|
readonly vctx: VibesApiSQLCtx;
|
|
39
64
|
readonly internalSecret: string | undefined;
|
|
40
65
|
readonly store: DraftJobStore;
|
|
66
|
+
readonly seams?: {
|
|
67
|
+
readonly callModel?: DraftModelCall;
|
|
68
|
+
readonly systemPrompt?: DraftLaneDeps["systemPrompt"];
|
|
69
|
+
};
|
|
41
70
|
}): Promise<Response>;
|