@vibes.diy/api-svc 14.3.29 → 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-dispatcher.js +30 -1
- 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 +3 -0
- package/intern/draft-lane-config.js +5 -0
- package/intern/draft-lane-config.js.map +1 -1
- package/intern/draft-lane-look.d.ts +4 -0
- package/intern/draft-lane-look.js +29 -0
- package/intern/draft-lane-look.js.map +1 -1
- 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 +26 -3
- package/intern/draft-lane-worker.js +157 -32
- package/intern/draft-lane-worker.js.map +1 -1
- package/intern/draft-lane.d.ts +1 -0
- package/intern/draft-lane.js +3 -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 +12 -3
- package/public/shared-mint.js.map +1 -1
|
@@ -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,12 +29,24 @@ 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;
|
|
@@ -44,4 +63,8 @@ export declare function handleDraftLaneRequest(args: {
|
|
|
44
63
|
readonly vctx: VibesApiSQLCtx;
|
|
45
64
|
readonly internalSecret: string | undefined;
|
|
46
65
|
readonly store: DraftJobStore;
|
|
66
|
+
readonly seams?: {
|
|
67
|
+
readonly callModel?: DraftModelCall;
|
|
68
|
+
readonly systemPrompt?: DraftLaneDeps["systemPrompt"];
|
|
69
|
+
};
|
|
47
70
|
}): Promise<Response>;
|
|
@@ -1,25 +1,30 @@
|
|
|
1
1
|
import { Result, exception2Result } from "@adviser/cement";
|
|
2
2
|
import { type } from "arktype";
|
|
3
3
|
import { and, eq } from "drizzle-orm/sql/expressions";
|
|
4
|
-
import { dashAuthType } from "@vibes.diy/api-types";
|
|
4
|
+
import { dashAuthType, guestCredential, isDraftOwnerHandle, } from "@vibes.diy/api-types";
|
|
5
5
|
import { verifyAuth } from "../check-auth.js";
|
|
6
|
-
import {
|
|
6
|
+
import { requireLiveGuestBuild } from "../public/guest-build.js";
|
|
7
|
+
import { guestDraftLaneConfig, readDraftLaneConfig } from "./draft-lane-config.js";
|
|
7
8
|
import { looksLikeBuildIntent } from "./draft-lane-classify.js";
|
|
8
9
|
import { autofixAndCheck } from "./draft-lane-autofix.js";
|
|
9
10
|
import { loadDraftSystemPrompt } from "./draft-lane-prompt.js";
|
|
10
11
|
import { draftModelCallFor } from "./draft-lane-transport.js";
|
|
11
|
-
import { persistDraftBuild } from "./draft-lane-persist.js";
|
|
12
|
+
import { frontendDraftVfs, persistDraftBuild } from "./draft-lane-persist.js";
|
|
12
13
|
import { validateAgentFiles } from "./agent-file-validation.js";
|
|
13
14
|
import { runDraftLane } from "./draft-lane.js";
|
|
15
|
+
import { admitGuestBuild, guestBuildIdentity, interruptGuestBuild, settleGuestBuild } from "./guest-build-store.js";
|
|
16
|
+
import { closeTurn } from "./open-turn-store.js";
|
|
17
|
+
import { reconcileParkedFirstDraft } from "./attach-draft-handle.js";
|
|
14
18
|
import { captureDraftTurnSettled, clampDraftSubmittedAt, draftTurnSettledArgs } from "./draft-lane-settled.js";
|
|
15
|
-
import { preDrawDraftLook } from "./draft-lane-look.js";
|
|
19
|
+
import { bufferDraftLook, preDrawDraftLook } from "./draft-lane-look.js";
|
|
16
20
|
export const DRAFT_LANE_PATH = "/internal/draft-lane";
|
|
17
21
|
export const DRAFT_LANE_AUTH_HEADER = "x-vibes-draft-lane-auth";
|
|
18
22
|
export const draftLaneJob = type({
|
|
19
23
|
chatId: "0 < string <= 128",
|
|
20
24
|
leaseToken: "0 < string <= 256",
|
|
21
25
|
sentence: "0 < string <= 16000",
|
|
22
|
-
auth: dashAuthType,
|
|
26
|
+
"auth?": dashAuthType,
|
|
27
|
+
"guest?": guestCredential,
|
|
23
28
|
"submittedAt?": "number",
|
|
24
29
|
"analyticsCountry?": "0 < string <= 8",
|
|
25
30
|
});
|
|
@@ -42,11 +47,17 @@ export function draftLaneDispatcher(args) {
|
|
|
42
47
|
return res.ok ? Result.Ok(undefined) : Result.Err(`draft-lane-route-status-${res.status}`);
|
|
43
48
|
};
|
|
44
49
|
}
|
|
50
|
+
export const DRAFT_LANE_NOT_ADMISSIBLE = "draft-lane-route-status-409";
|
|
45
51
|
export function isDraftLaneCallAuthorized(secret, provided) {
|
|
46
52
|
if (secret === undefined || secret.length === 0)
|
|
47
53
|
return false;
|
|
48
54
|
return provided !== null && provided === secret;
|
|
49
55
|
}
|
|
56
|
+
export function unownedDraftLaneArmed(vctx, args) {
|
|
57
|
+
const config = readDraftLaneConfig(vctx.sthis.env);
|
|
58
|
+
const automaticHandle = vctx.sthis.env.get("GUEST_FIRST_BUILD_ENABLED") === "true";
|
|
59
|
+
return (config.enabled && config.guestEnabled && automaticHandle && args.dispatch !== undefined && looksLikeBuildIntent(args.prompt));
|
|
60
|
+
}
|
|
50
61
|
export async function startDraftLane(vctx, args) {
|
|
51
62
|
const skipped = (reason, error) => {
|
|
52
63
|
const line = reason === "no-dispatcher" || reason === "job-order-error" || reason === "claim-error"
|
|
@@ -84,7 +95,7 @@ export async function startDraftLane(vctx, args) {
|
|
|
84
95
|
chatId: args.chatId,
|
|
85
96
|
leaseToken,
|
|
86
97
|
sentence: args.prompt,
|
|
87
|
-
auth: args.auth,
|
|
98
|
+
...(args.principal.kind === "guest" ? { guest: args.principal.guest } : { auth: args.principal.auth }),
|
|
88
99
|
...(args.submittedAt === undefined ? {} : { submittedAt: args.submittedAt }),
|
|
89
100
|
...(country === undefined || country.length === 0 ? {} : { analyticsCountry: country }),
|
|
90
101
|
};
|
|
@@ -93,11 +104,18 @@ export async function startDraftLane(vctx, args) {
|
|
|
93
104
|
if (failed === undefined)
|
|
94
105
|
return;
|
|
95
106
|
vctx.logger.Warn().Err(failed).Str("chatId", args.chatId).Msg("draft-lane-dispatch-failed");
|
|
107
|
+
if (failed.message === DRAFT_LANE_NOT_ADMISSIBLE)
|
|
108
|
+
return;
|
|
96
109
|
await args.store.abandonDraft(vctx.sql, args.chatId, leaseToken);
|
|
110
|
+
if (args.principal.kind === "guest")
|
|
111
|
+
await interruptPendingGuestBuild(vctx, args.chatId);
|
|
97
112
|
});
|
|
98
113
|
const lookWritten = args.look === undefined
|
|
99
114
|
? Promise.resolve(undefined)
|
|
100
|
-
:
|
|
115
|
+
: (isDraftOwnerHandle(args.look.ownerHandle)
|
|
116
|
+
?
|
|
117
|
+
bufferDraftLook(vctx, { chatId: args.chatId, userId: args.look.userId }, args.rnd)
|
|
118
|
+
: preDrawDraftLook(vctx, args.look, args.rnd)).then((drawn) => {
|
|
101
119
|
if (drawn.isErr())
|
|
102
120
|
vctx.logger.Warn().Err(drawn.Err()).Str("chatId", args.chatId).Msg("draft-lane-look-failed");
|
|
103
121
|
});
|
|
@@ -113,6 +131,66 @@ export async function startDraftLane(vctx, args) {
|
|
|
113
131
|
await lookWritten;
|
|
114
132
|
return true;
|
|
115
133
|
}
|
|
134
|
+
async function liveSentinelAddress(vctx, key) {
|
|
135
|
+
const t = vctx.sql.tables.chatContexts;
|
|
136
|
+
const live = await exception2Result(() => vctx.sql.db
|
|
137
|
+
.select({ ownerHandle: t.ownerHandle, appSlug: t.appSlug })
|
|
138
|
+
.from(t)
|
|
139
|
+
.where(and(eq(t.chatId, key.chatId), eq(t.userId, key.userId)))
|
|
140
|
+
.limit(1)
|
|
141
|
+
.then((rows) => rows[0]));
|
|
142
|
+
if (live.isErr())
|
|
143
|
+
return Result.Err(live.Err());
|
|
144
|
+
const row = live.Ok();
|
|
145
|
+
if (row === undefined)
|
|
146
|
+
return Result.Err(`draft chat ${key.chatId} is gone`);
|
|
147
|
+
return Result.Ok({ parks: isDraftOwnerHandle(row.ownerHandle), ownerHandle: row.ownerHandle, appSlug: row.appSlug });
|
|
148
|
+
}
|
|
149
|
+
async function verifyDraftPrincipal(vctx, job) {
|
|
150
|
+
if (job.auth !== undefined && job.guest === undefined) {
|
|
151
|
+
const verified = await verifyAuth(vctx, { auth: job.auth });
|
|
152
|
+
if (verified.isErr())
|
|
153
|
+
return Result.Err(verified.Err());
|
|
154
|
+
const identity = verified.Ok();
|
|
155
|
+
if (identity.type !== "VerifiedAuthResult")
|
|
156
|
+
return Result.Err("draft-lane-unverified");
|
|
157
|
+
return Result.Ok({ kind: "account", auth: job.auth, verified: identity });
|
|
158
|
+
}
|
|
159
|
+
if (job.guest === undefined || job.auth !== undefined)
|
|
160
|
+
return Result.Err("draft-lane-one-credential");
|
|
161
|
+
const signer = vctx.guestBuildSigner;
|
|
162
|
+
if (signer === undefined)
|
|
163
|
+
return Result.Err("guest-build-unavailable");
|
|
164
|
+
const claims = await signer.verify(job.guest.token);
|
|
165
|
+
if (claims.isErr())
|
|
166
|
+
return Result.Err(claims.Err());
|
|
167
|
+
if (claims.Ok().chatId !== job.chatId || claims.Ok().userId !== guestBuildIdentity(job.chatId).guestUserId)
|
|
168
|
+
return Result.Err("guest-chat-scope-mismatch");
|
|
169
|
+
const verified = {
|
|
170
|
+
type: "VerifiedGuestBuildAuth",
|
|
171
|
+
inGuestAuth: job.guest,
|
|
172
|
+
verifiedAuth: { type: "guest-build", claims: claims.Ok() },
|
|
173
|
+
};
|
|
174
|
+
const live = await requireLiveGuestBuild(vctx, verified);
|
|
175
|
+
if (live.isErr())
|
|
176
|
+
return Result.Err(live.Err());
|
|
177
|
+
return Result.Ok({ kind: "guest", verified });
|
|
178
|
+
}
|
|
179
|
+
async function interruptPendingGuestBuild(vctx, chatId) {
|
|
180
|
+
const moved = await interruptGuestBuild(vctx, { chatId });
|
|
181
|
+
if (moved.isErr())
|
|
182
|
+
vctx.logger.Warn().Err(moved.Err()).Str("chatId", chatId).Msg("draft-lane-guest-interrupt-failed");
|
|
183
|
+
}
|
|
184
|
+
async function settleGuestDraft(vctx, turn, outcome) {
|
|
185
|
+
const closed = await closeTurn(vctx.sql, turn);
|
|
186
|
+
if (closed.isErr())
|
|
187
|
+
vctx.logger.Warn().Err(closed.Err()).Str("chatId", turn.chatId).Msg("draft-lane-guest-close-failed");
|
|
188
|
+
const moved = outcome.kind === "drafted" ? await settleGuestBuild(vctx, turn) : await interruptGuestBuild(vctx, turn);
|
|
189
|
+
if (moved.isErr() || moved.Ok() === false) {
|
|
190
|
+
const line = vctx.logger.Warn().Str("chatId", turn.chatId).Str("outcome", outcome.kind);
|
|
191
|
+
(moved.isErr() ? line.Err(moved.Err()) : line).Msg("draft-lane-guest-settle-missed");
|
|
192
|
+
}
|
|
193
|
+
}
|
|
116
194
|
function json(status, body) {
|
|
117
195
|
return new Response(JSON.stringify(body), {
|
|
118
196
|
status,
|
|
@@ -136,13 +214,11 @@ export async function handleDraftLaneRequest(args) {
|
|
|
136
214
|
const job = draftLaneJob(body.Ok());
|
|
137
215
|
if (job instanceof type.errors)
|
|
138
216
|
return json(400, { error: "invalid job" });
|
|
139
|
-
const
|
|
140
|
-
if (
|
|
141
|
-
return json(401, { error: "unverified" });
|
|
142
|
-
const identity = verified.Ok();
|
|
143
|
-
if (identity.type !== "VerifiedAuthResult")
|
|
217
|
+
const principal = await verifyDraftPrincipal(vctx, job);
|
|
218
|
+
if (principal.isErr())
|
|
144
219
|
return json(401, { error: "unverified" });
|
|
145
|
-
const
|
|
220
|
+
const who = principal.Ok();
|
|
221
|
+
const userId = who.verified.verifiedAuth.claims.userId;
|
|
146
222
|
const t = vctx.sql.tables.chatContexts;
|
|
147
223
|
const chat = await exception2Result(() => vctx.sql.db
|
|
148
224
|
.select({ ownerHandle: t.ownerHandle, appSlug: t.appSlug })
|
|
@@ -150,45 +226,94 @@ export async function handleDraftLaneRequest(args) {
|
|
|
150
226
|
.where(and(eq(t.chatId, job.chatId), eq(t.userId, userId)))
|
|
151
227
|
.limit(1)
|
|
152
228
|
.then((rows) => rows[0]));
|
|
153
|
-
if (chat.isErr())
|
|
229
|
+
if (chat.isErr()) {
|
|
230
|
+
if (who.kind === "guest")
|
|
231
|
+
await interruptPendingGuestBuild(vctx, job.chatId);
|
|
154
232
|
return json(503, { error: "store unavailable" });
|
|
233
|
+
}
|
|
155
234
|
const row = chat.Ok();
|
|
156
235
|
if (row === undefined)
|
|
157
236
|
return json(404, { error: "chat not found" });
|
|
237
|
+
let guestTurn = undefined;
|
|
238
|
+
if (who.kind === "guest") {
|
|
239
|
+
const claims = who.verified.verifiedAuth.claims;
|
|
240
|
+
const promptId = vctx.sthis.nextId(12).str;
|
|
241
|
+
const admitted = await admitGuestBuild(vctx, {
|
|
242
|
+
chatId: claims.chatId,
|
|
243
|
+
guestUserId: claims.userId,
|
|
244
|
+
jti: claims.jti,
|
|
245
|
+
promptId,
|
|
246
|
+
});
|
|
247
|
+
if (admitted.isErr()) {
|
|
248
|
+
await args.store.abandonDraft(vctx.sql, job.chatId, job.leaseToken);
|
|
249
|
+
await interruptPendingGuestBuild(vctx, job.chatId);
|
|
250
|
+
return json(503, { error: "store unavailable" });
|
|
251
|
+
}
|
|
252
|
+
if (admitted.Ok() === false)
|
|
253
|
+
return json(409, { error: "guest build not admissible" });
|
|
254
|
+
guestTurn = { chatId: claims.chatId, promptId };
|
|
255
|
+
}
|
|
256
|
+
const laneConfig = who.kind === "guest" ? guestDraftLaneConfig(config) : config;
|
|
257
|
+
let persistAt;
|
|
258
|
+
const persistAddress = () => {
|
|
259
|
+
if (persistAt !== undefined)
|
|
260
|
+
return persistAt;
|
|
261
|
+
persistAt =
|
|
262
|
+
who.kind === "guest" || isDraftOwnerHandle(row.ownerHandle) === false
|
|
263
|
+
? Promise.resolve(Result.Ok({ parks: who.kind === "guest", ownerHandle: row.ownerHandle, appSlug: row.appSlug }))
|
|
264
|
+
: liveSentinelAddress(vctx, { chatId: job.chatId, userId });
|
|
265
|
+
return persistAt;
|
|
266
|
+
};
|
|
158
267
|
const outcome = await runDraftLane({
|
|
159
268
|
chatId: job.chatId,
|
|
160
269
|
leaseToken: job.leaseToken,
|
|
161
270
|
sentence: job.sentence,
|
|
162
271
|
userHandle: row.ownerHandle,
|
|
163
|
-
config,
|
|
272
|
+
config: laneConfig,
|
|
164
273
|
deps: {
|
|
165
274
|
store: args.store,
|
|
166
275
|
sql: vctx.sql,
|
|
167
|
-
callModel: draftModelCallFor(vctx),
|
|
168
|
-
systemPrompt:
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
276
|
+
callModel: args.seams?.callModel ?? draftModelCallFor(vctx),
|
|
277
|
+
systemPrompt: args.seams?.systemPrompt ??
|
|
278
|
+
((classification) => loadDraftSystemPrompt(vctx, {
|
|
279
|
+
chatId: job.chatId,
|
|
280
|
+
ownerHandle: row.ownerHandle,
|
|
281
|
+
model: config.builderModel,
|
|
282
|
+
classification,
|
|
283
|
+
})),
|
|
174
284
|
autofixAndCheck,
|
|
175
|
-
saveCheck: async (
|
|
285
|
+
saveCheck: async (draftVfs) => {
|
|
286
|
+
const at = await persistAddress();
|
|
287
|
+
if (at.isErr())
|
|
288
|
+
return Result.Err(at.Err());
|
|
289
|
+
const vfs = at.Ok().parks ? frontendDraftVfs(draftVfs) : draftVfs;
|
|
176
290
|
const changes = [...vfs].map(([path, contents]) => ({ path, contents }));
|
|
177
|
-
const checked = await validateAgentFiles(vctx, { vfs, changes, ownerHandle:
|
|
291
|
+
const checked = await validateAgentFiles(vctx, { vfs, changes, ownerHandle: at.Ok().ownerHandle });
|
|
178
292
|
return checked.isErr() ? Result.Err(checked.Err()) : Result.Ok(undefined);
|
|
179
293
|
},
|
|
180
|
-
persist: (draft) =>
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
294
|
+
persist: async (draft) => {
|
|
295
|
+
const at = await persistAddress();
|
|
296
|
+
if (at.isErr())
|
|
297
|
+
return Result.Err(at.Err());
|
|
298
|
+
const base = { chatId: job.chatId, ownerHandle: at.Ok().ownerHandle, appSlug: at.Ok().appSlug, draft };
|
|
299
|
+
const persistArgs = who.kind === "guest"
|
|
300
|
+
? { ...base, guest: who.verified, ...(guestTurn === undefined ? {} : { promptId: guestTurn.promptId }) }
|
|
301
|
+
: { ...base, auth: who.auth, verified: who.verified };
|
|
302
|
+
return persistDraftBuild(vctx, persistArgs);
|
|
303
|
+
},
|
|
188
304
|
now: () => Date.now(),
|
|
189
305
|
log: (event) => vctx.logger.Info().Any("draftLane", event).Msg(`draft-lane-${event.step}`),
|
|
190
306
|
},
|
|
191
307
|
});
|
|
308
|
+
if (outcome.kind === "drafted") {
|
|
309
|
+
const reconciled = await reconcileParkedFirstDraft(vctx, job.chatId);
|
|
310
|
+
if (reconciled.isErr())
|
|
311
|
+
vctx.logger.Warn().Err(reconciled.Err()).Str("chatId", job.chatId).Msg("draft-lane-first-draft-reconcile-failed");
|
|
312
|
+
}
|
|
313
|
+
if (guestTurn !== undefined)
|
|
314
|
+
await settleGuestDraft(vctx, guestTurn, outcome);
|
|
315
|
+
if (who.kind === "guest")
|
|
316
|
+
return json(200, { ...outcome });
|
|
192
317
|
const nowMs = Date.now();
|
|
193
318
|
captureDraftTurnSettled(vctx, {
|
|
194
319
|
chatId: job.chatId,
|