@vibes.diy/api-svc 14.3.68 → 14.3.70

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