@vibes.diy/api-svc 14.3.68 → 14.3.69

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.
Files changed (57) hide show
  1. package/analytics.d.ts +12 -1
  2. package/analytics.js +27 -1
  3. package/analytics.js.map +1 -1
  4. package/intern/agent-session-runtime.d.ts +1 -0
  5. package/intern/agent-session-runtime.js +1 -1
  6. package/intern/agent-session-runtime.js.map +1 -1
  7. package/intern/agent-session.d.ts +24 -24
  8. package/intern/agent-wake.d.ts +10 -0
  9. package/intern/agent-wake.js +11 -0
  10. package/intern/agent-wake.js.map +1 -1
  11. package/intern/attach-draft-handle.js +5 -1
  12. package/intern/attach-draft-handle.js.map +1 -1
  13. package/intern/deliver-post-turn-version.d.ts +34 -0
  14. package/intern/deliver-post-turn-version.js +73 -0
  15. package/intern/deliver-post-turn-version.js.map +1 -0
  16. package/intern/design-repair.d.ts +55 -0
  17. package/intern/design-repair.js +459 -0
  18. package/intern/design-repair.js.map +1 -0
  19. package/intern/import-synth.d.ts +2 -1
  20. package/intern/import-synth.js +2 -6
  21. package/intern/import-synth.js.map +1 -1
  22. package/intern/inline-build-pass.d.ts +7 -0
  23. package/intern/inline-build-pass.js +21 -3
  24. package/intern/inline-build-pass.js.map +1 -1
  25. package/intern/look-lint-engine.d.ts +15 -2
  26. package/intern/look-lint-engine.js +49 -26
  27. package/intern/look-lint-engine.js.map +1 -1
  28. package/intern/look-lint.d.ts +37 -2
  29. package/intern/look-lint.js +39 -5
  30. package/intern/look-lint.js.map +1 -1
  31. package/intern/open-turn-store.d.ts +5 -0
  32. package/intern/open-turn-store.js +12 -0
  33. package/intern/open-turn-store.js.map +1 -1
  34. package/intern/prompt-assembly.d.ts +1 -0
  35. package/intern/prompt-assembly.js +1 -0
  36. package/intern/prompt-assembly.js.map +1 -1
  37. package/intern/save-build-pass.d.ts +5 -0
  38. package/intern/save-build-pass.js +33 -6
  39. package/intern/save-build-pass.js.map +1 -1
  40. package/intern/seed-chat-section.d.ts +1 -0
  41. package/intern/seed-chat-section.js +1 -0
  42. package/intern/seed-chat-section.js.map +1 -1
  43. package/intern/version-timeline.d.ts +6 -0
  44. package/intern/version-timeline.js +34 -0
  45. package/intern/version-timeline.js.map +1 -1
  46. package/package.json +14 -14
  47. package/public/handle-prompt-context.d.ts +5 -1
  48. package/public/handle-prompt-context.js +36 -5
  49. package/public/handle-prompt-context.js.map +1 -1
  50. package/public/prompt-section-actions.js +1 -0
  51. package/public/prompt-section-actions.js.map +1 -1
  52. package/public/prompt-turn-settled.js +44 -2
  53. package/public/prompt-turn-settled.js.map +1 -1
  54. package/public/prompt-turn-types.d.ts +1 -0
  55. package/public/stream-assembly.d.ts +7 -2
  56. package/public/stream-assembly.js +15 -4
  57. package/public/stream-assembly.js.map +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deliver-post-turn-version.js","sourceRoot":"","sources":["../../jsr/intern/deliver-post-turn-version.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import { type FileSystemItem, type MsgBase, type ReqPromptChatSection, type ReqWithVerifiedAuth, type VibeFile } from "@vibes.diy/api-types";
2
+ import { type SnapPalette } from "@vibes.diy/pouf/lint";
3
+ import type { VibesApiSQLCtx } from "../types.js";
4
+ import type { LookLintFileFinding } from "./look-lint-engine.js";
5
+ import { type LookLintResult } from "./look-lint.js";
6
+ import { type RepairModelCall, type RepairModelUsage } from "./save-repair-io.js";
7
+ export declare function designRepairEnabled(flag: string | undefined): boolean;
8
+ export declare const DESIGN_REPAIR_MAX_ATTEMPTS = 2;
9
+ export declare const DESIGN_REPAIR_CALL_MS = 30000;
10
+ export declare const DESIGN_REPAIR_JOB_MS = 75000;
11
+ export declare const DESIGN_REPAIR_MAX_OUTPUT_TOKENS = 16000;
12
+ export type DesignRepairOutcome = "adopted" | "failed" | "abandoned";
13
+ export type DesignRepairReason = "adopted" | "build-in-flight" | "head-moved" | "head-unreadable" | "turns-unreadable" | "deadline" | "timeout" | "model-error" | "unparseable-reply" | "no-change" | "save-check" | "opens" | "not-better" | "engine-unavailable" | "no-findings" | "inputs-unavailable" | "no-auth" | "persist-failed";
14
+ export interface DesignRepairTurn {
15
+ readonly chatId: string;
16
+ readonly appSlug: string;
17
+ readonly ownerHandle: string;
18
+ readonly promptId: string;
19
+ readonly fsId: string;
20
+ readonly req: Pick<ReqWithVerifiedAuth<ReqPromptChatSection>, "auth" | "_auth">;
21
+ readonly sendCtx: unknown;
22
+ readonly validated: MsgBase;
23
+ readonly callModel?: RepairModelCall;
24
+ readonly maxAttempts?: number;
25
+ readonly callMs?: number;
26
+ readonly jobMs?: number;
27
+ }
28
+ export interface DesignRepairInputs {
29
+ readonly files: readonly VibeFile[];
30
+ readonly carried: readonly FileSystemItem[];
31
+ readonly findings: readonly LookLintFileFinding[];
32
+ }
33
+ export interface DesignRepairArgs extends DesignRepairTurn, DesignRepairInputs {
34
+ readonly snap: SnapPalette;
35
+ }
36
+ export interface DesignRepairResult {
37
+ readonly outcome: DesignRepairOutcome;
38
+ readonly reason: DesignRepairReason;
39
+ readonly attempts: number;
40
+ readonly model: string;
41
+ readonly after?: LookLintResult;
42
+ readonly fsId?: string;
43
+ readonly usage: readonly RepairModelUsage[];
44
+ }
45
+ export declare function __setDesignRepairModelCallForTests(call: RepairModelCall | undefined): void;
46
+ export declare function __setDesignRepairPersistHookForTests(hook: (() => Promise<void>) | undefined): void;
47
+ export declare function loadDesignRepairInputs(vctx: VibesApiSQLCtx, args: {
48
+ readonly fsId: string;
49
+ readonly snap: SnapPalette;
50
+ }): Promise<DesignRepairInputs | undefined>;
51
+ export declare function runDesignRepair(vctx: VibesApiSQLCtx, args: DesignRepairArgs): Promise<DesignRepairResult>;
52
+ export interface DispatchDesignRepairArgs extends DesignRepairTurn {
53
+ readonly snap?: SnapPalette;
54
+ }
55
+ export declare function dispatchDesignRepair(vctx: VibesApiSQLCtx, args: DispatchDesignRepairArgs): void;
@@ -0,0 +1,459 @@
1
+ import { Result, exception2Result, stream2uint8array } from "@adviser/cement";
2
+ import { and, desc, eq, isNotNull } from "drizzle-orm";
3
+ import { DERIVED_MANIFEST_PREFIX, fileSystemItem, isFetchErrResult, isFetchNotFoundResult, isResError, parseArray, } from "@vibes.diy/api-types";
4
+ import { FileSystemRef } from "@vibes.diy/call-ai-v2";
5
+ import { snapPaletteFor } from "@vibes.diy/pouf/lint";
6
+ import { type } from "arktype";
7
+ import { captureCodegenDesignRepairSettled } from "../analytics.js";
8
+ import { autoPublishOnPersist } from "../public/auto-publish-on-persist.js";
9
+ import { ensureAppSlugItem } from "../public/ensure-app-slug-item.js";
10
+ import { readColorTheme } from "../public/handle-prompt-context.js";
11
+ import { validateAgentFiles } from "./agent-file-validation.js";
12
+ import { peekBuildLockEntry } from "./codegen-build-lock.js";
13
+ import { OPENS_ADVISORY_CLASSES, checkOpens } from "./opens-check.js";
14
+ import { fanOutPostTurnVersion, preparePostTurnVersion, storePostTurnVersion } from "./deliver-post-turn-version.js";
15
+ import { hasOpenTurnOnChat } from "./open-turn-store.js";
16
+ import { langForFilename } from "./ensure-push-seeded-chat.js";
17
+ import { loadLookLintEngine } from "./look-lint.js";
18
+ import { runSaveBuildPass } from "./save-build-pass.js";
19
+ import { callWithDeadline, composeRepairAsk, parseRepairText, renderRepairFiles, repairModelCallFor, } from "./save-repair-io.js";
20
+ import { SAVE_REPAIR_FALLBACK_MODEL } from "./save-repair.js";
21
+ import { carriedItems, isAssetItem } from "./version-timeline.js";
22
+ export function designRepairEnabled(flag) {
23
+ return flag !== "off";
24
+ }
25
+ export const DESIGN_REPAIR_MAX_ATTEMPTS = 2;
26
+ export const DESIGN_REPAIR_CALL_MS = 30_000;
27
+ export const DESIGN_REPAIR_JOB_MS = 75_000;
28
+ export const DESIGN_REPAIR_MAX_OUTPUT_TOKENS = 16_000;
29
+ const FINDINGS_ASKED_MAX = 20;
30
+ let modelCallOverride;
31
+ export function __setDesignRepairModelCallForTests(call) {
32
+ modelCallOverride = call;
33
+ }
34
+ let persistHook;
35
+ export function __setDesignRepairPersistHookForTests(hook) {
36
+ persistHook = hook;
37
+ }
38
+ const DESIGN_REPAIR_BRIEF = "You are tidying the design of a vibes.diy app after it was built. The app's screens are made from its design-system " +
39
+ "components, and a design check found places that are not yet. For each file named below, emit the whole file again " +
40
+ "under its `### `path`` heading in one fenced code block. Fix each finding the way its message says: where the message " +
41
+ "names a component, use that component (imported from the same design-system package the file already imports) in " +
42
+ "place of the hand-built element. Keep the app's behaviour, data, text and every other line exactly as they are. " +
43
+ "Emit only the files named below, each once, complete.";
44
+ const FILES_INTRO = "These files are the app as it was just saved. A design check reported the findings listed after them.";
45
+ function findingLine(f) {
46
+ return `${f.file.replace(/^\/+/, "")}:${f.line} [${f.ruleId}] ${f.message}`;
47
+ }
48
+ function findingsAsk(findings) {
49
+ const listed = findings.slice(0, FINDINGS_ASKED_MAX).map((f) => `- ${findingLine(f)}`);
50
+ return (`The design check reported:\n\n${listed.join("\n")}\n\n` +
51
+ "Write the corrected files in full, same format (each file under its `### `path`` heading, complete, once).");
52
+ }
53
+ function rollup(findings) {
54
+ const rules = {};
55
+ for (const f of findings)
56
+ rules[f.ruleId] = (rules[f.ruleId] ?? 0) + 1;
57
+ return { total: findings.length, rules };
58
+ }
59
+ function normalizePath(path) {
60
+ return `/${path.replace(/^\/+/, "")}`;
61
+ }
62
+ function nonEmpty(value) {
63
+ return value === undefined || value.trim().length === 0 ? undefined : value;
64
+ }
65
+ async function poufFindings(vctx, files, snap) {
66
+ const loaded = await loadLookLintEngine(vctx.logger);
67
+ if (loaded.ok === false)
68
+ return undefined;
69
+ const ran = await exception2Result(() => loaded.engine.lintAndFixLookSource(Object.fromEntries(files), { look: "pouf", snap }));
70
+ if (ran.isErr()) {
71
+ vctx.logger.Warn().Err(ran).Msg("design-repair-lint-threw");
72
+ return undefined;
73
+ }
74
+ return ran.Ok().findings;
75
+ }
76
+ async function resolveSourcesStrict(vctx, items) {
77
+ const sources = new Map();
78
+ for (const item of items) {
79
+ if (isAssetItem(item))
80
+ continue;
81
+ const key = item.fileName.startsWith("/") ? item.fileName : `/${item.fileName}`;
82
+ if (key.startsWith(DERIVED_MANIFEST_PREFIX))
83
+ continue;
84
+ const rFetch = await vctx.storage.fetch(item.assetURI);
85
+ if (isFetchErrResult(rFetch) || isFetchNotFoundResult(rFetch)) {
86
+ vctx.logger.Warn().Str("fileName", item.fileName).Msg("design-repair-source-unreadable");
87
+ return undefined;
88
+ }
89
+ sources.set(key, vctx.sthis.txt.decode(await stream2uint8array(rFetch.data)));
90
+ }
91
+ return sources;
92
+ }
93
+ export async function loadDesignRepairInputs(vctx, args) {
94
+ const rows = await vctx.sql.db
95
+ .select({ fileSystem: vctx.sql.tables.apps.fileSystem })
96
+ .from(vctx.sql.tables.apps)
97
+ .where(eq(vctx.sql.tables.apps.fsId, args.fsId))
98
+ .limit(1);
99
+ const row = rows[0];
100
+ if (row === undefined)
101
+ return undefined;
102
+ const items = parseArray(row.fileSystem, fileSystemItem);
103
+ const sources = await resolveSourcesStrict(vctx, items);
104
+ if (sources === undefined)
105
+ return undefined;
106
+ const findings = await poufFindings(vctx, sources, args.snap);
107
+ if (findings === undefined)
108
+ return undefined;
109
+ return {
110
+ files: [...sources].map(([filename, content]) => ({
111
+ type: "code-block",
112
+ filename,
113
+ lang: langForFilename(filename),
114
+ content,
115
+ })),
116
+ carried: carriedItems(items),
117
+ findings,
118
+ };
119
+ }
120
+ async function chatHeadFsId(vctx, chatId) {
121
+ const pc = vctx.sql.tables.promptContexts;
122
+ const apps = vctx.sql.tables.apps;
123
+ return exception2Result(async () => {
124
+ const rows = await vctx.sql.db
125
+ .select({ fsId: pc.fsId })
126
+ .from(pc)
127
+ .innerJoin(apps, eq(apps.fsId, pc.fsId))
128
+ .where(and(eq(pc.chatId, chatId), isNotNull(pc.fsId)))
129
+ .orderBy(desc(pc.created))
130
+ .limit(1);
131
+ return rows[0]?.fsId ?? undefined;
132
+ });
133
+ }
134
+ async function abandonReason(vctx, args, job) {
135
+ if (job.aborted)
136
+ return "deadline";
137
+ if (peekBuildLockEntry(vctx.connections, args.chatId) !== undefined)
138
+ return "build-in-flight";
139
+ const open = await hasOpenTurnOnChat(vctx.sql, { chatId: args.chatId, exceptPromptId: args.promptId, nowMs: Date.now() });
140
+ if (open.isErr())
141
+ return "turns-unreadable";
142
+ if (open.Ok())
143
+ return "build-in-flight";
144
+ const head = await chatHeadFsId(vctx, args.chatId);
145
+ if (job.aborted)
146
+ return "deadline";
147
+ if (peekBuildLockEntry(vctx.connections, args.chatId) !== undefined)
148
+ return "build-in-flight";
149
+ if (head.isErr())
150
+ return "head-unreadable";
151
+ if (head.Ok() !== args.fsId)
152
+ return "head-moved";
153
+ return undefined;
154
+ }
155
+ function callUnderJob(call, job) {
156
+ return (req) => {
157
+ const both = new AbortController();
158
+ const abort = () => both.abort();
159
+ if (job.aborted || req.signal?.aborted === true)
160
+ both.abort();
161
+ job.addEventListener("abort", abort);
162
+ req.signal?.addEventListener("abort", abort);
163
+ const stopped = new Promise((resolve) => {
164
+ const resolveAborted = () => resolve(Result.Err(new Error("design-repair-call-aborted")));
165
+ if (both.signal.aborted)
166
+ resolveAborted();
167
+ else
168
+ both.signal.addEventListener("abort", resolveAborted);
169
+ });
170
+ return Promise.race([call({ ...req, signal: both.signal }), stopped]).finally(() => {
171
+ job.removeEventListener("abort", abort);
172
+ req.signal?.removeEventListener("abort", abort);
173
+ });
174
+ };
175
+ }
176
+ export async function runDesignRepair(vctx, args) {
177
+ const model = nonEmpty(vctx.sthis.env.get("DESIGN_REPAIR_MODEL")) ?? SAVE_REPAIR_FALLBACK_MODEL;
178
+ const maxAttempts = args.maxAttempts ?? DESIGN_REPAIR_MAX_ATTEMPTS;
179
+ const callMs = args.callMs ?? DESIGN_REPAIR_CALL_MS;
180
+ const usage = [];
181
+ const job = new AbortController();
182
+ const jobTimer = setTimeout(function expireJob() {
183
+ job.abort();
184
+ }, args.jobMs ?? DESIGN_REPAIR_JOB_MS);
185
+ const call = callUnderJob(args.callModel ?? repairModelCallFor(vctx), job.signal);
186
+ let attempts = 0;
187
+ let after;
188
+ const end = (outcome, reason, fsId) => ({
189
+ outcome,
190
+ reason,
191
+ attempts,
192
+ model,
193
+ usage,
194
+ ...(after === undefined ? {} : { after }),
195
+ ...(fsId === undefined ? {} : { fsId }),
196
+ });
197
+ try {
198
+ if (args.findings.length === 0)
199
+ return end("failed", "no-findings");
200
+ const before = args.findings.length;
201
+ const offending = new Set(args.findings.map((f) => normalizePath(f.file)));
202
+ const sources = new Map(args.files.flatMap((f) => (f.type === "code-block" ? [[f.filename, f.content]] : [])));
203
+ const messages = [
204
+ { role: "system", content: DESIGN_REPAIR_BRIEF },
205
+ {
206
+ role: "user",
207
+ content: renderRepairFiles({ vfs: new Map([...sources].filter(([path]) => offending.has(path))), intro: FILES_INTRO }) +
208
+ "\n" +
209
+ findingsAsk(args.findings),
210
+ },
211
+ ];
212
+ for (let attempt = 1; attempt <= maxAttempts; attempt++) {
213
+ const stop = await abandonReason(vctx, args, job.signal);
214
+ if (stop !== undefined)
215
+ return end("abandoned", stop);
216
+ attempts = attempt;
217
+ const last = attempt === maxAttempts;
218
+ const answer = await callWithDeadline(call, { model, messages, maxTokens: DESIGN_REPAIR_MAX_OUTPUT_TOKENS }, callMs);
219
+ if (job.signal.aborted)
220
+ return end("abandoned", "deadline");
221
+ if (answer.timedOut)
222
+ return end("failed", "timeout");
223
+ if (answer.reply.isErr()) {
224
+ vctx.logger.Warn().Err(answer.reply).Str("promptId", args.promptId).Msg("design-repair-model-error");
225
+ return end("failed", "model-error");
226
+ }
227
+ const reply = answer.reply.Ok();
228
+ if (reply.usage !== undefined)
229
+ usage.push(reply.usage);
230
+ const askAgain = (findings) => messages.push({ role: "assistant", content: reply.text }, { role: "user", content: composeRepairAsk(findings) });
231
+ const parsed = await parseRepairText(reply.text);
232
+ if (parsed.isErr()) {
233
+ if (last)
234
+ return end("failed", "unparseable-reply");
235
+ askAgain([`the reply: ${parsed.Err().message}`]);
236
+ continue;
237
+ }
238
+ const emitted = new Map([...parsed.Ok().vfs].map(([path, content]) => [normalizePath(path), content]));
239
+ const candidate = new Map(sources);
240
+ const changed = new Set();
241
+ for (const path of offending) {
242
+ const content = emitted.get(path);
243
+ if (content === undefined || content === sources.get(path))
244
+ continue;
245
+ candidate.set(path, content);
246
+ changed.add(path);
247
+ }
248
+ if (changed.size === 0) {
249
+ if (last)
250
+ return end("failed", "no-change");
251
+ askAgain(["the reply changed none of the files named above"]);
252
+ continue;
253
+ }
254
+ const checked = await validateAgentFiles(vctx, {
255
+ vfs: candidate,
256
+ changes: [...changed].map((path) => ({ path, contents: candidate.get(path) ?? "" })),
257
+ ownerHandle: args.ownerHandle,
258
+ });
259
+ if (checked.isErr()) {
260
+ if (last)
261
+ return end("failed", "save-check");
262
+ askAgain([String(checked.Err().message)]);
263
+ continue;
264
+ }
265
+ const pass = await runSaveBuildPass(vctx, {
266
+ vfs: candidate,
267
+ stagedPaths: changed,
268
+ lintLook: true,
269
+ look: "pouf",
270
+ snap: args.snap,
271
+ ownerHandle: args.ownerHandle,
272
+ promptId: args.promptId,
273
+ });
274
+ const fixed = new Map([...candidate, ...(pass?.adopted ?? new Map())]);
275
+ const opens = pass?.verdict ?? checkOpens(fixed);
276
+ if (opens.opens === false) {
277
+ if (last)
278
+ return end("failed", "opens");
279
+ askAgain(opens.findings
280
+ .filter((f) => OPENS_ADVISORY_CLASSES.has(f.class) === false)
281
+ .slice(0, FINDINGS_ASKED_MAX)
282
+ .map((f) => `${f.file.replace(/^\/+/, "")}:${f.line} ${f.message}`));
283
+ continue;
284
+ }
285
+ const left = await poufFindings(vctx, fixed, args.snap);
286
+ if (left === undefined)
287
+ return end("failed", "engine-unavailable");
288
+ after = rollup(left);
289
+ if (after.total >= before) {
290
+ if (last)
291
+ return end("failed", "not-better");
292
+ askAgain(left.slice(0, FINDINGS_ASKED_MAX).map(findingLine));
293
+ continue;
294
+ }
295
+ return await persistRepair(vctx, args, { files: fixed, model, job: job.signal, end });
296
+ }
297
+ return end("failed", "not-better");
298
+ }
299
+ finally {
300
+ clearTimeout(jobTimer);
301
+ }
302
+ }
303
+ async function persistRepair(vctx, args, o) {
304
+ const { end } = o;
305
+ const auth = args.req.auth;
306
+ if (auth === undefined)
307
+ return end("failed", "no-auth");
308
+ const stop = await abandonReason(vctx, args, o.job);
309
+ if (stop !== undefined)
310
+ return end("abandoned", stop);
311
+ const repairPromptId = vctx.sthis.nextId(12).str;
312
+ const fileSystem = args.files.map((file) => {
313
+ if (file.type !== "code-block")
314
+ return file;
315
+ const content = o.files.get(file.filename);
316
+ return content === undefined ? file : { ...file, content };
317
+ });
318
+ const rFs = await ensureAppSlugItem(vctx, {
319
+ type: "vibes.diy.req-ensure-app-slug",
320
+ mode: "dev",
321
+ runId: repairPromptId,
322
+ appSlug: args.appSlug,
323
+ ownerHandle: args.ownerHandle,
324
+ fileSystem,
325
+ auth,
326
+ _auth: args.req._auth,
327
+ }, { carried: args.carried });
328
+ if (rFs.isErr()) {
329
+ vctx.logger.Warn().Err(rFs).Str("promptId", args.promptId).Msg("design-repair-persist-failed");
330
+ return end("failed", "persist-failed");
331
+ }
332
+ const ensured = rFs.Ok();
333
+ if (isResError(ensured)) {
334
+ vctx.logger.Warn().Str("promptId", args.promptId).Str("code", ensured.error.code).Msg("design-repair-persist-refused");
335
+ return end("failed", "persist-failed");
336
+ }
337
+ const fsRef = type(FileSystemRef).onDeepUndeclaredKey("delete")(ensured);
338
+ if (fsRef instanceof type.errors) {
339
+ vctx.logger.Warn().Str("promptId", args.promptId).Str("error", fsRef.summary).Msg("design-repair-persist-failed");
340
+ return end("failed", "persist-failed");
341
+ }
342
+ const version = preparePostTurnVersion(vctx, {
343
+ chatId: args.chatId,
344
+ appSlug: args.appSlug,
345
+ ownerHandle: args.ownerHandle,
346
+ files: fileSystem,
347
+ fsRef,
348
+ origin: "design-repair",
349
+ sendCtx: args.sendCtx,
350
+ validated: args.validated,
351
+ promptId: repairPromptId,
352
+ });
353
+ const takeBack = async (reason) => {
354
+ const a = vctx.sql.tables.apps;
355
+ const rDel = await exception2Result(() => vctx.sql.db
356
+ .delete(a)
357
+ .where(and(eq(a.appSlug, args.appSlug), eq(a.ownerHandle, args.ownerHandle), eq(a.runId, repairPromptId), eq(a.fsId, fsRef.fsId), eq(a.mode, "dev"))));
358
+ vctx.logger
359
+ .Info()
360
+ .Any("event", { chatId: args.chatId, promptId: args.promptId, fsId: fsRef.fsId, reason, versionRemoved: rDel.isOk() })
361
+ .Msg("design-repair-version-taken-back");
362
+ };
363
+ await persistHook?.();
364
+ const late = await abandonReason(vctx, args, o.job);
365
+ if (late !== undefined) {
366
+ await takeBack(late);
367
+ return end("abandoned", late);
368
+ }
369
+ const zero = { prompt_tokens: 0, completion_tokens: 0, total_tokens: 0 };
370
+ const rPublish = await exception2Result(() => vctx.sql.db.transaction(async (tx) => {
371
+ const rStore = await storePostTurnVersion(vctx, version, tx);
372
+ if (rStore.isErr())
373
+ throw rStore.Err();
374
+ await tx.insert(vctx.sql.tables.promptContexts).values({
375
+ userId: args.req._auth.verifiedAuth.claims.userId,
376
+ chatId: args.chatId,
377
+ promptId: repairPromptId,
378
+ fsId: fsRef.fsId,
379
+ nethash: vctx.netHash(),
380
+ promptTokens: 0,
381
+ completionTokens: 0,
382
+ totalTokens: 0,
383
+ ref: {
384
+ type: "prompt.usage.sql",
385
+ usage: { given: [], calculated: zero },
386
+ fsRef,
387
+ model: o.model,
388
+ seed: true,
389
+ automated: true,
390
+ designRepair: true,
391
+ },
392
+ created: new Date().toISOString(),
393
+ });
394
+ }));
395
+ if (rPublish.isErr()) {
396
+ vctx.logger.Warn().Err(rPublish).Str("promptId", args.promptId).Msg("design-repair-head-write-failed");
397
+ await takeBack("persist-failed");
398
+ return end("failed", "persist-failed");
399
+ }
400
+ await fanOutPostTurnVersion(vctx, version);
401
+ if (args.req._auth.type === "VerifiedAuthResult") {
402
+ await autoPublishOnPersist(vctx, {
403
+ ownerHandle: args.ownerHandle,
404
+ appSlug: args.appSlug,
405
+ fsId: fsRef.fsId,
406
+ callerUserId: args.req._auth.verifiedAuth.claims.userId,
407
+ auth,
408
+ promptId: repairPromptId,
409
+ }).catch((error) => {
410
+ vctx.logger
411
+ .Warn()
412
+ .Any("event", { chatId: args.chatId, promptId: repairPromptId, error: String(error) })
413
+ .Msg("auto-publish-mint-rejected");
414
+ });
415
+ }
416
+ vctx.logger.Info().Any("event", { chatId: args.chatId, promptId: args.promptId, fsId: fsRef.fsId }).Msg("design-repair-adopted");
417
+ return end("adopted", "adopted", fsRef.fsId);
418
+ }
419
+ export function dispatchDesignRepair(vctx, args) {
420
+ const startedAt = Date.now();
421
+ const job = (async () => {
422
+ const inputsUnavailable = {
423
+ outcome: "failed",
424
+ reason: "inputs-unavailable",
425
+ attempts: 0,
426
+ model: nonEmpty(vctx.sthis.env.get("DESIGN_REPAIR_MODEL")) ?? SAVE_REPAIR_FALLBACK_MODEL,
427
+ usage: [],
428
+ };
429
+ const rLoaded = await exception2Result(async () => {
430
+ const snap = args.snap ?? snapPaletteFor(await readColorTheme(vctx, args.ownerHandle, args.appSlug));
431
+ const inputs = await loadDesignRepairInputs(vctx, { fsId: args.fsId, snap });
432
+ return inputs === undefined ? undefined : { snap, inputs };
433
+ });
434
+ if (rLoaded.isErr())
435
+ vctx.logger.Warn().Err(rLoaded).Str("promptId", args.promptId).Msg("design-repair-inputs-threw");
436
+ const loaded = rLoaded.isErr() ? undefined : rLoaded.Ok();
437
+ const callModel = args.callModel ?? modelCallOverride;
438
+ const result = loaded === undefined
439
+ ? inputsUnavailable
440
+ : await runDesignRepair(vctx, {
441
+ ...args,
442
+ ...loaded.inputs,
443
+ snap: loaded.snap,
444
+ ...(callModel === undefined ? {} : { callModel }),
445
+ });
446
+ captureCodegenDesignRepairSettled(vctx, {
447
+ userId: args.req._auth.verifiedAuth.claims.userId,
448
+ ownerHandle: args.ownerHandle,
449
+ appSlug: args.appSlug,
450
+ promptId: args.promptId,
451
+ durationMs: Math.max(0, Date.now() - startedAt),
452
+ result,
453
+ });
454
+ })().catch((e) => {
455
+ vctx.logger.Warn().Err(e).Str("promptId", args.promptId).Msg("design-repair-failed");
456
+ });
457
+ vctx.waitUntil?.(job);
458
+ }
459
+ //# sourceMappingURL=design-repair.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"design-repair.js","sourceRoot":"","sources":["../../jsr/intern/design-repair.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,9 @@
1
1
  import type { VibeFile } from "@vibes.diy/api-types";
2
+ import { type PoufEntry } from "@vibes.diy/pouf/lint";
2
3
  export declare const LOOK_EXPORTS: readonly string[];
3
4
  export declare const LOOK_EXTRA_EXPORTS: readonly string[];
4
5
  export declare const OVERLAY_EXPORTS: readonly string[];
5
- export declare const POUF_HOMES: Readonly<Record<string, "@vibes.diy/pouf" | "@vibes.diy/pouf/interactive" | "@vibes.diy/pouf/charts">>;
6
+ export declare const POUF_HOMES: Readonly<Record<string, PoufEntry>>;
6
7
  type RuntimeModule = "use-fireproof" | "use-vibes" | "call-ai";
7
8
  export declare const RUNTIME_HOMES: Readonly<Record<string, RuntimeModule>>;
8
9
  export declare const FIREPROOF_MEMBERS: readonly string[];
@@ -4,7 +4,7 @@ import { transform } from "sucrase";
4
4
  import { normalizeModuleId, resolveModuleId } from "./bundle-vibe-source.js";
5
5
  import { lockedGroupsVersions } from "./grouped-vibe-import-map.js";
6
6
  import { codeView } from "./code-view.js";
7
- import { POUF_ENTRY_EXPORTS } from "@vibes.diy/pouf/exports";
7
+ import { poufHomes } from "@vibes.diy/pouf/lint";
8
8
  export const LOOK_EXPORTS = [
9
9
  "Button",
10
10
  "Card",
@@ -70,11 +70,7 @@ export const OVERLAY_EXPORTS = [
70
70
  "TooltipProvider",
71
71
  ];
72
72
  const POUF_CALLED_EXPORTS = ["toast", "dismissToast"];
73
- export const POUF_HOMES = Object.fromEntries([
74
- ...POUF_ENTRY_EXPORTS.index.map((name) => [name, "@vibes.diy/pouf"]),
75
- ...POUF_ENTRY_EXPORTS.interactive.map((name) => [name, "@vibes.diy/pouf/interactive"]),
76
- ...POUF_ENTRY_EXPORTS.charts.map((name) => [name, "@vibes.diy/pouf/charts"]),
77
- ]);
73
+ export const POUF_HOMES = poufHomes();
78
74
  export const RUNTIME_HOMES = {
79
75
  useFireproof: "use-fireproof",
80
76
  fireproof: "use-fireproof",