@vibes.diy/api-svc 14.3.83 → 14.3.85

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 (131) hide show
  1. package/analytics.d.ts +1 -0
  2. package/analytics.js +1 -0
  3. package/analytics.js.map +1 -1
  4. package/index.d.ts +1 -0
  5. package/index.js +1 -0
  6. package/index.js.map +1 -1
  7. package/intern/account-vibe-activity.js +2 -1
  8. package/intern/account-vibe-activity.js.map +1 -1
  9. package/intern/agent-account-tools.js +2 -1
  10. package/intern/agent-account-tools.js.map +1 -1
  11. package/intern/agent-assembly.d.ts +5 -0
  12. package/intern/agent-assembly.js +21 -3
  13. package/intern/agent-assembly.js.map +1 -1
  14. package/intern/agent-belt.d.ts +5 -1
  15. package/intern/agent-belt.js +29 -14
  16. package/intern/agent-belt.js.map +1 -1
  17. package/intern/agent-build-tools.d.ts +3 -0
  18. package/intern/agent-build-tools.js +0 -17
  19. package/intern/agent-build-tools.js.map +1 -1
  20. package/intern/agent-discussions.js +2 -1
  21. package/intern/agent-discussions.js.map +1 -1
  22. package/intern/agent-evidence.js +5 -4
  23. package/intern/agent-evidence.js.map +1 -1
  24. package/intern/agent-file-tools.js +5 -4
  25. package/intern/agent-file-tools.js.map +1 -1
  26. package/intern/agent-options-tool.js +46 -46
  27. package/intern/agent-options-tool.js.map +1 -1
  28. package/intern/agent-read-tools.js +43 -25
  29. package/intern/agent-read-tools.js.map +1 -1
  30. package/intern/agent-request-frame.d.ts +2 -0
  31. package/intern/agent-request-frame.js +2 -2
  32. package/intern/agent-request-frame.js.map +1 -1
  33. package/intern/agent-session-instruction.d.ts +6 -2
  34. package/intern/agent-session-instruction.js +7 -3
  35. package/intern/agent-session-instruction.js.map +1 -1
  36. package/intern/agent-session-runtime.js +2 -1
  37. package/intern/agent-session-runtime.js.map +1 -1
  38. package/intern/agent-session.js +8 -7
  39. package/intern/agent-session.js.map +1 -1
  40. package/intern/agent-wake.d.ts +1 -1
  41. package/intern/agent-wake.js +1 -1
  42. package/intern/agent-wake.js.map +1 -1
  43. package/intern/agent-with-vibe.d.ts +1 -0
  44. package/intern/agent-with-vibe.js +19 -18
  45. package/intern/agent-with-vibe.js.map +1 -1
  46. package/intern/autumn-recent-usage.js +11 -10
  47. package/intern/autumn-recent-usage.js.map +1 -1
  48. package/intern/backend-db-callback.js +3 -2
  49. package/intern/backend-db-callback.js.map +1 -1
  50. package/intern/draft-chat-store.js +3 -2
  51. package/intern/draft-chat-store.js.map +1 -1
  52. package/intern/first-brief.d.ts +58 -0
  53. package/intern/first-brief.js +169 -0
  54. package/intern/first-brief.js.map +1 -0
  55. package/intern/first-build-classifier.d.ts +88 -0
  56. package/intern/first-build-classifier.js +242 -0
  57. package/intern/first-build-classifier.js.map +1 -0
  58. package/intern/guest-credit-meter.js +3 -2
  59. package/intern/guest-credit-meter.js.map +1 -1
  60. package/intern/image-survey.js +6 -5
  61. package/intern/image-survey.js.map +1 -1
  62. package/intern/instruction-variant.d.ts +31 -1
  63. package/intern/instruction-variant.js +137 -1
  64. package/intern/instruction-variant.js.map +1 -1
  65. package/intern/llm-tool-loop.d.ts +1 -0
  66. package/intern/llm-tool-loop.js +13 -0
  67. package/intern/llm-tool-loop.js.map +1 -1
  68. package/intern/manifest-assets-line.d.ts +2 -0
  69. package/intern/manifest-assets-line.js +14 -1
  70. package/intern/manifest-assets-line.js.map +1 -1
  71. package/intern/mercury-first-build-seam.d.ts +42 -0
  72. package/intern/mercury-first-build-seam.js +129 -0
  73. package/intern/mercury-first-build-seam.js.map +1 -0
  74. package/intern/mercury-first-build.d.ts +121 -0
  75. package/intern/mercury-first-build.js +808 -0
  76. package/intern/mercury-first-build.js.map +1 -0
  77. package/intern/pinned-app-slug.js +2 -1
  78. package/intern/pinned-app-slug.js.map +1 -1
  79. package/intern/prompt-step.d.ts +1 -1
  80. package/intern/prompt-step.js.map +1 -1
  81. package/intern/prompt-usage.js +5 -4
  82. package/intern/prompt-usage.js.map +1 -1
  83. package/intern/save-repair-io.js +3 -2
  84. package/intern/save-repair-io.js.map +1 -1
  85. package/intern/server-first-build.d.ts +25 -0
  86. package/intern/server-first-build.js +46 -0
  87. package/intern/server-first-build.js.map +1 -0
  88. package/intern/swr-wrapper-html-cache.js +1 -0
  89. package/intern/swr-wrapper-html-cache.js.map +1 -1
  90. package/intern/turn-latency.d.ts +3 -0
  91. package/intern/turn-latency.js +11 -0
  92. package/intern/turn-latency.js.map +1 -1
  93. package/intern/url-research.js +3 -2
  94. package/intern/url-research.js.map +1 -1
  95. package/intern/work-tools.js +8 -5
  96. package/intern/work-tools.js.map +1 -1
  97. package/not-implemented-message.js +2 -1
  98. package/not-implemented-message.js.map +1 -1
  99. package/package.json +13 -13
  100. package/public/access-output-decoder.js +4 -3
  101. package/public/access-output-decoder.js.map +1 -1
  102. package/public/agent-turn-action.d.ts +3 -2
  103. package/public/agent-turn-action.js +210 -36
  104. package/public/agent-turn-action.js.map +1 -1
  105. package/public/agent-turn-assembly.d.ts +3 -1
  106. package/public/agent-turn-assembly.js +18 -3
  107. package/public/agent-turn-assembly.js.map +1 -1
  108. package/public/draft-runtime.js +9 -5
  109. package/public/draft-runtime.js.map +1 -1
  110. package/public/list-memberships.js +3 -2
  111. package/public/list-memberships.js.map +1 -1
  112. package/public/list-notifications.js +2 -1
  113. package/public/list-notifications.js.map +1 -1
  114. package/public/list-recent-vibes.js +4 -3
  115. package/public/list-recent-vibes.js.map +1 -1
  116. package/public/prompt-chat-section.js +11 -1
  117. package/public/prompt-chat-section.js.map +1 -1
  118. package/public/prompt-section-actions.d.ts +2 -1
  119. package/public/prompt-section-actions.js +1 -0
  120. package/public/prompt-section-actions.js.map +1 -1
  121. package/public/prompt-turn-settled.js +3 -1
  122. package/public/prompt-turn-settled.js.map +1 -1
  123. package/public/prompt-turn-types.d.ts +2 -0
  124. package/public/provider-errors.js +3 -2
  125. package/public/provider-errors.js.map +1 -1
  126. package/public/report-cache.js +2 -1
  127. package/public/report-cache.js.map +1 -1
  128. package/public/serv-entry-point.js +2 -1
  129. package/public/serv-entry-point.js.map +1 -1
  130. package/types.js +7 -6
  131. package/types.js.map +1 -1
@@ -2,7 +2,8 @@ import { exception2Result, Result } from "@adviser/cement";
2
2
  import { type } from "arktype";
3
3
  import { and, eq, inArray, isNotNull } from "drizzle-orm/sql/expressions";
4
4
  import { AppNature, DRAFT_OWNER_HANDLE, Style } from "@vibes.diy/api-types";
5
- const draftPreAlloc = type({
5
+ import { lazyType } from "@vibes.diy/api-types/lazy-type";
6
+ const draftPreAlloc = lazyType(() => type({
6
7
  "pairs?": type({ title: "string", slug: "string" }).array(),
7
8
  "skills?": "string[]",
8
9
  "iconDescription?": "string",
@@ -16,7 +17,7 @@ const draftPreAlloc = type({
16
17
  "style?": Style,
17
18
  "colorTheme?": "string",
18
19
  "stylePinned?": "boolean",
19
- });
20
+ }));
20
21
  export function parseDraftPreAlloc(raw) {
21
22
  if (raw === null || raw === undefined)
22
23
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"draft-chat-store.js","sourceRoot":"","sources":["../../jsr/intern/draft-chat-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"draft-chat-store.js","sourceRoot":"","sources":["../../jsr/intern/draft-chat-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import { type Result } from "@adviser/cement";
2
+ import { type LLMMessage, type SseStreamMsg, type ToolDefinition } from "@vibes.diy/call-ai-v2";
3
+ import type { AgentEvidence } from "@vibes.diy/api-types";
4
+ import type { VibesApiSQLCtx } from "../types.js";
5
+ export type FirstBriefSkip = "no-create-call" | "create-refused";
6
+ export declare function firstBriefTurnEligible(t: {
7
+ readonly wakeTurn: boolean;
8
+ readonly topLevel: boolean;
9
+ readonly personWords: string;
10
+ readonly linkedUrls: number;
11
+ }): boolean;
12
+ export declare function firstBriefTools(definitions: readonly ToolDefinition[]): ToolDefinition[];
13
+ export declare function withFirstBriefLine(messages: readonly LLMMessage[], words: readonly string[]): LLMMessage[];
14
+ export declare function withSeededAddressWordsLine(messages: readonly LLMMessage[], words: readonly string[]): LLMMessage[];
15
+ export declare function withoutFirstBriefLine(messages: readonly LLMMessage[]): LLMMessage[];
16
+ export declare const FIRST_BRIEF_CONTINUE_NOTE = "[platform] Your reply above has reached the person, and every tool is yours again for the rest of this turn. Carry on from it as you would in any turn: finish with offer_options when options fit, and keep what you already said as said.";
17
+ export declare function withFirstBriefContinueNote(messages: readonly LLMMessage[]): LLMMessage[];
18
+ export interface FirstBriefUsage {
19
+ readonly prompt_tokens: number;
20
+ readonly completion_tokens: number;
21
+ readonly total_tokens: number;
22
+ readonly cost?: number;
23
+ }
24
+ export interface FirstBriefRound {
25
+ readonly servedModel?: string;
26
+ readonly called: boolean;
27
+ readonly elapsedMs: number;
28
+ readonly usage: readonly FirstBriefUsage[];
29
+ }
30
+ export declare function observeFirstBriefRound(stream: ReadableStream<SseStreamMsg>, o: {
31
+ readonly startedAt: number;
32
+ readonly now: () => number;
33
+ readonly onEnd: (round: FirstBriefRound) => Promise<void>;
34
+ }): ReadableStream<SseStreamMsg>;
35
+ export declare function recordFirstBriefRow(vctx: VibesApiSQLCtx, o: {
36
+ readonly chatId: string;
37
+ readonly userId: string;
38
+ readonly model: string;
39
+ readonly round: FirstBriefRound;
40
+ }): Promise<void>;
41
+ export type FirstBriefOutcome = {
42
+ readonly dispatched: true;
43
+ readonly appSlug: string;
44
+ readonly addressRetried?: true;
45
+ } | {
46
+ readonly dispatched: false;
47
+ readonly reason: FirstBriefSkip;
48
+ readonly refusal?: string;
49
+ readonly addressRetried?: true;
50
+ };
51
+ export declare function recordFirstBriefOutcome(vctx: VibesApiSQLCtx, o: {
52
+ readonly chatId: string;
53
+ readonly model: string;
54
+ readonly round: FirstBriefRound | undefined;
55
+ readonly outcome: FirstBriefOutcome;
56
+ readonly evidence: (e: AgentEvidence) => Promise<Result<void>>;
57
+ }): Promise<void>;
58
+ export declare function firstBriefOutcomeFromReceipt(text: string): FirstBriefOutcome;
@@ -0,0 +1,169 @@
1
+ import { exception2Result } from "@adviser/cement";
2
+ import { type } from "arktype";
3
+ import { isSseEnd, isSseLine, } from "@vibes.diy/call-ai-v2";
4
+ import { FIRST_BRIEF_ROUND_TAG, firstBriefRoundInstruction, SEEDED_ADDRESS_WORDS_TAG, seededAddressWordsInstruction, } from "./instruction-variant.js";
5
+ import { SERVER_FIRST_BUILD_EVIDENCE_NAME } from "./server-first-build.js";
6
+ import { lazyType } from "@vibes.diy/api-types/lazy-type";
7
+ const CREATE_VIBE = "create_vibe";
8
+ export function firstBriefTurnEligible(t) {
9
+ return t.wakeTurn === false && t.topLevel === false && t.personWords.length > 0 && t.linkedUrls === 0;
10
+ }
11
+ export function firstBriefTools(definitions) {
12
+ return definitions.filter((d) => d.function.name === CREATE_VIBE);
13
+ }
14
+ const ROUND_ONE_LINE_TAGS = [FIRST_BRIEF_ROUND_TAG, SEEDED_ADDRESS_WORDS_TAG];
15
+ function isRoundOneLine(part) {
16
+ return (typeof part === "object" &&
17
+ part !== null &&
18
+ part.type === "text" &&
19
+ typeof part.text === "string" &&
20
+ ROUND_ONE_LINE_TAGS.some((tag) => part.text.startsWith(tag)));
21
+ }
22
+ function withRoundOneLine(messages, text) {
23
+ let at = -1;
24
+ messages.forEach((m, i) => {
25
+ if (m.role === "system")
26
+ at = i;
27
+ });
28
+ if (at < 0)
29
+ return [...messages];
30
+ return messages.map((m, i) => {
31
+ if (i !== at || m.role !== "system" || Array.isArray(m.content) === false)
32
+ return m;
33
+ return { ...m, content: [...m.content, { type: "text", text }] };
34
+ });
35
+ }
36
+ export function withFirstBriefLine(messages, words) {
37
+ return withRoundOneLine(messages, firstBriefRoundInstruction(words));
38
+ }
39
+ export function withSeededAddressWordsLine(messages, words) {
40
+ return withRoundOneLine(messages, seededAddressWordsInstruction(words));
41
+ }
42
+ export function withoutFirstBriefLine(messages) {
43
+ return messages.map((m) => {
44
+ if (m.role !== "system" || Array.isArray(m.content) === false || m.content.some(isRoundOneLine) === false)
45
+ return m;
46
+ return { ...m, content: m.content.filter((part) => isRoundOneLine(part) === false) };
47
+ });
48
+ }
49
+ export const FIRST_BRIEF_CONTINUE_NOTE = "[platform] Your reply above has reached the person, and every tool is yours again for the rest of this turn. Carry on from it as you would in any turn: finish with offer_options when options fit, and keep what you already said as said.";
50
+ export function withFirstBriefContinueNote(messages) {
51
+ return [...messages, { role: "user", content: [{ type: "text", text: FIRST_BRIEF_CONTINUE_NOTE }] }];
52
+ }
53
+ const usageShape = lazyType(() => type({ prompt_tokens: "number", completion_tokens: "number", total_tokens: "number", "cost?": "number" }));
54
+ function readUsage(raw) {
55
+ const u = usageShape(raw);
56
+ if (u instanceof type.errors)
57
+ return undefined;
58
+ return {
59
+ prompt_tokens: u.prompt_tokens,
60
+ completion_tokens: u.completion_tokens,
61
+ total_tokens: u.total_tokens,
62
+ ...(u.cost === undefined ? {} : { cost: u.cost }),
63
+ };
64
+ }
65
+ export function observeFirstBriefRound(stream, o) {
66
+ let servedModel;
67
+ let ended = false;
68
+ const names = new Map();
69
+ return stream.pipeThrough(new TransformStream({
70
+ async transform(msg, controller) {
71
+ if (isSseLine(msg)) {
72
+ if (msg.chunk.model.length > 0)
73
+ servedModel = msg.chunk.model;
74
+ for (const choice of msg.chunk.choices) {
75
+ for (const delta of choice.delta.tool_calls ?? []) {
76
+ const name = delta.function?.name;
77
+ if (name !== undefined)
78
+ names.set(delta.index, (names.get(delta.index) ?? "") + name);
79
+ }
80
+ }
81
+ }
82
+ else if (isSseEnd(msg) && ended === false) {
83
+ ended = true;
84
+ await o.onEnd({
85
+ ...(servedModel === undefined ? {} : { servedModel }),
86
+ called: [...names.values()].includes(CREATE_VIBE),
87
+ elapsedMs: o.now() - o.startedAt,
88
+ usage: msg.usages.flatMap((u) => {
89
+ const read = readUsage(u);
90
+ return read === undefined ? [] : [read];
91
+ }),
92
+ });
93
+ }
94
+ controller.enqueue(msg);
95
+ },
96
+ }));
97
+ }
98
+ export async function recordFirstBriefRow(vctx, o) {
99
+ const zero = { prompt_tokens: 0, completion_tokens: 0, total_tokens: 0 };
100
+ const rInsert = await exception2Result(() => vctx.sql.db.insert(vctx.sql.tables.promptContexts).values({
101
+ userId: o.userId,
102
+ chatId: o.chatId,
103
+ promptId: vctx.sthis.nextId(12).str,
104
+ nethash: vctx.netHash(),
105
+ promptTokens: 0,
106
+ completionTokens: 0,
107
+ totalTokens: 0,
108
+ ref: {
109
+ type: "prompt.usage.sql",
110
+ usage: { given: [], calculated: zero },
111
+ model: o.model,
112
+ step: "first-brief",
113
+ firstBrief: {
114
+ ...(o.round.servedModel === undefined ? {} : { servedModel: o.round.servedModel }),
115
+ called: o.round.called,
116
+ elapsedMs: o.round.elapsedMs,
117
+ usage: o.round.usage.map((u) => ({ ...u })),
118
+ },
119
+ },
120
+ created: new Date().toISOString(),
121
+ }));
122
+ if (rInsert.isErr()) {
123
+ vctx.logger.Warn().Err(rInsert).Str("chatId", o.chatId).Msg("first-brief-row-failed");
124
+ }
125
+ }
126
+ export async function recordFirstBriefOutcome(vctx, o) {
127
+ const brief = {
128
+ model: o.model,
129
+ ...(o.round?.servedModel === undefined ? {} : { servedModel: o.round.servedModel }),
130
+ ...(o.round === undefined ? {} : { called: o.round.called, elapsedMs: o.round.elapsedMs }),
131
+ };
132
+ const written = await o.evidence({
133
+ kind: "receipt",
134
+ name: SERVER_FIRST_BUILD_EVIDENCE_NAME,
135
+ text: JSON.stringify({ ...o.outcome, brief }),
136
+ });
137
+ if (written.isErr())
138
+ vctx.logger.Warn().Err(written).Str("chatId", o.chatId).Msg("first-brief-evidence-failed");
139
+ if (o.outcome.dispatched) {
140
+ vctx.logger
141
+ .Info()
142
+ .Any("event", {
143
+ chatId: o.chatId,
144
+ appSlug: o.outcome.appSlug,
145
+ ...(o.outcome.addressRetried === true ? { addressRetried: true } : {}),
146
+ briefMs: o.round?.elapsedMs,
147
+ servedModel: o.round?.servedModel,
148
+ })
149
+ .Msg("first-brief-dispatched");
150
+ }
151
+ else {
152
+ vctx.logger
153
+ .Warn()
154
+ .Any("event", { chatId: o.chatId, reason: o.outcome.reason, servedModel: o.round?.servedModel })
155
+ .Msg(o.outcome.reason === "no-create-call" ? "first-brief-no-create" : "first-brief-create-refused");
156
+ }
157
+ }
158
+ const createReceipt = lazyType(() => type({ "ok?": "boolean", "appSlug?": "string", "reason?": "string" }));
159
+ export function firstBriefOutcomeFromReceipt(text) {
160
+ const rJson = exception2Result(() => JSON.parse(text));
161
+ const body = rJson.isOk() ? createReceipt(rJson.Ok()) : undefined;
162
+ if (body === undefined || body instanceof type.errors)
163
+ return { dispatched: false, reason: "create-refused" };
164
+ if (body.ok === false || body.appSlug === undefined) {
165
+ return { dispatched: false, reason: "create-refused", ...(body.reason === undefined ? {} : { refusal: body.reason }) };
166
+ }
167
+ return { dispatched: true, appSlug: body.appSlug };
168
+ }
169
+ //# sourceMappingURL=first-brief.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"first-brief.js","sourceRoot":"","sources":["../../jsr/intern/first-brief.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ import { Result } from "@adviser/cement";
2
+ import { AppNature, type CreateVibeToolInput } from "@vibes.diy/api-types";
3
+ import type { VibesApiSQLCtx } from "../types.js";
4
+ export declare const FIRST_BUILD_CLASSIFIER_MODEL = "google/gemini-3.5-flash-lite";
5
+ export declare const FIRST_BUILD_CLASSIFIER_REASONING: {
6
+ readonly effort: "minimal";
7
+ };
8
+ export declare const FIRST_BUILD_CLASSIFIER_TIMEOUT_MS = 3000;
9
+ export declare const SERVER_FIRST_BUILD_ACCESS_SKILL = "access";
10
+ export declare function firstBuildSkillMenu(opts: {
11
+ readonly poufBlocks: boolean;
12
+ }): Promise<string>;
13
+ export declare function firstBuildClassifierMessage(personWords: string, skillMenu: string): string;
14
+ export declare const firstBuildClassifierSchema: {
15
+ readonly name: "first_build";
16
+ readonly required: readonly ["build", "skills", "pairs", "iconDescription", "nature", "noAccessControl"];
17
+ readonly properties: {
18
+ readonly build: {
19
+ readonly type: "boolean";
20
+ };
21
+ readonly skills: {
22
+ readonly type: "array";
23
+ readonly items: {
24
+ readonly type: "string";
25
+ };
26
+ };
27
+ readonly pairs: {
28
+ readonly type: "array";
29
+ readonly items: {
30
+ readonly type: "object";
31
+ readonly properties: {
32
+ readonly title: {
33
+ readonly type: "string";
34
+ };
35
+ readonly slug: {
36
+ readonly type: "string";
37
+ };
38
+ };
39
+ };
40
+ };
41
+ readonly iconDescription: {
42
+ readonly type: "string";
43
+ };
44
+ readonly nature: {
45
+ readonly type: "string";
46
+ readonly enum: readonly ["sensitive", "collaborative", "open"];
47
+ };
48
+ readonly noAccessControl: {
49
+ readonly type: "boolean";
50
+ };
51
+ };
52
+ };
53
+ export interface FirstBuildUsage {
54
+ readonly prompt_tokens: number;
55
+ readonly completion_tokens: number;
56
+ readonly total_tokens: number;
57
+ readonly cost?: number;
58
+ }
59
+ export interface FirstBuildVerdict {
60
+ readonly build: boolean;
61
+ readonly skills: readonly string[];
62
+ readonly pairs: readonly {
63
+ readonly title: string;
64
+ readonly slug: string;
65
+ }[];
66
+ readonly iconDescription?: string;
67
+ readonly nature?: AppNature;
68
+ readonly noAccessControl: boolean;
69
+ readonly model: string;
70
+ readonly usage?: FirstBuildUsage;
71
+ readonly elapsedMs: number;
72
+ }
73
+ export declare function parseFirstBuildVerdict(raw: unknown, meta: {
74
+ readonly model: string;
75
+ readonly usage?: FirstBuildUsage;
76
+ readonly elapsedMs: number;
77
+ }): Result<FirstBuildVerdict>;
78
+ export declare function serverFirstBuildBrief(personWords: string, o: {
79
+ readonly noAccessControl: boolean;
80
+ }): string;
81
+ export declare function createVibeInputFromVerdict(personWords: string, verdict: FirstBuildVerdict): CreateVibeToolInput;
82
+ export interface ClassifyFirstBuildArgs {
83
+ readonly chatId: string;
84
+ readonly userId: string;
85
+ readonly personWords: string;
86
+ readonly timeoutMs?: number;
87
+ }
88
+ export declare function classifyFirstBuild(vctx: VibesApiSQLCtx, args: ClassifyFirstBuildArgs): Promise<Result<FirstBuildVerdict>>;
@@ -0,0 +1,242 @@
1
+ import { Result, exception2Result } from "@adviser/cement";
2
+ import { callAI } from "call-ai";
3
+ import { type } from "arktype";
4
+ import { AppNature } from "@vibes.diy/api-types";
5
+ import { getLlmCatalog } from "@vibes.diy/prompts";
6
+ import { isPoufBlockSkill, poufLookFor } from "./pouf-look-flag.js";
7
+ import { GROUP_READY_SHAPE, INVITE_SCREEN_WHEN, KNOWN_VALUES_DIRECT_CONTROLS, SEED_DEMO_RULE, } from "./agent-session-instruction.js";
8
+ import { lazyType } from "@vibes.diy/api-types/lazy-type";
9
+ export const FIRST_BUILD_CLASSIFIER_MODEL = "google/gemini-3.5-flash-lite";
10
+ export const FIRST_BUILD_CLASSIFIER_REASONING = { effort: "minimal" };
11
+ export const FIRST_BUILD_CLASSIFIER_TIMEOUT_MS = 3_000;
12
+ const ALWAYS_PRESENT_SKILLS = new Set(["fireproof", "image-gen", "use-vibe", "use-viewer"]);
13
+ export const SERVER_FIRST_BUILD_ACCESS_SKILL = "access";
14
+ const SKILL_LINE_MAX_CHARS = 110;
15
+ function shortDescription(description) {
16
+ const flat = description.replace(/\s+/g, " ").trim();
17
+ if (flat.length <= SKILL_LINE_MAX_CHARS)
18
+ return flat;
19
+ const cut = flat.slice(0, SKILL_LINE_MAX_CHARS);
20
+ const space = cut.lastIndexOf(" ");
21
+ return `${space > 40 ? cut.slice(0, space) : cut}…`;
22
+ }
23
+ export async function firstBuildSkillMenu(opts) {
24
+ const catalog = await getLlmCatalog();
25
+ return catalog
26
+ .filter((c) => ALWAYS_PRESENT_SKILLS.has(c.name) === false && c.name !== SERVER_FIRST_BUILD_ACCESS_SKILL)
27
+ .filter((c) => opts.poufBlocks || isPoufBlockSkill(c.name) === false)
28
+ .map((c) => `- ${c.name}: ${shortDescription(c.description)}`)
29
+ .join("\n");
30
+ }
31
+ export function firstBuildClassifierMessage(personWords, skillMenu) {
32
+ return [
33
+ "Read one message a person sent to an app builder and fill the schema.",
34
+ "build: true when the message describes an app, tool, game, page, tracker or anything else to make — however short. " +
35
+ "build: false for a greeting, a question about the builder itself, or a message that names nothing to make.",
36
+ "skills: the names from the list below that the app needs, exactly as written; an empty list when none fit. " +
37
+ '"backend" for schedules, email, fetching, notifications and server work; ' +
38
+ '"callai" for record intake by sentence, a chat reply, a suggestion or any text the page asks the model for itself. ' +
39
+ "Access rules ride every build already.",
40
+ "noAccessControl: true only when the message itself asks for no access control, a single-user app or no sharing; false otherwise.",
41
+ "pairs: three title/slug pairs ranked by fit — a Title Case title of one to four words, and a kebab-case slug made from it.",
42
+ "iconDescription: one short line naming what the app's icon shows, such as 'a fox on a record player'.",
43
+ 'nature: "sensitive" for private record-keeping (a diary, health, money), "open" for a light toy anyone can play with, "collaborative" for everything else.',
44
+ "",
45
+ "Skills:",
46
+ skillMenu,
47
+ "",
48
+ "Message:",
49
+ personWords,
50
+ ].join("\n");
51
+ }
52
+ export const firstBuildClassifierSchema = {
53
+ name: "first_build",
54
+ required: ["build", "skills", "pairs", "iconDescription", "nature", "noAccessControl"],
55
+ properties: {
56
+ build: { type: "boolean" },
57
+ skills: { type: "array", items: { type: "string" } },
58
+ pairs: {
59
+ type: "array",
60
+ items: { type: "object", properties: { title: { type: "string" }, slug: { type: "string" } } },
61
+ },
62
+ iconDescription: { type: "string" },
63
+ nature: { type: "string", enum: ["sensitive", "collaborative", "open"] },
64
+ noAccessControl: { type: "boolean" },
65
+ },
66
+ };
67
+ const firstBuildParsed = lazyType(() => type({
68
+ build: "boolean",
69
+ "skills?": "string[]",
70
+ "pairs?": type({ "title?": "string", "slug?": "string" }).array(),
71
+ "iconDescription?": "string",
72
+ "nature?": "string",
73
+ "noAccessControl?": "boolean",
74
+ }));
75
+ export function parseFirstBuildVerdict(raw, meta) {
76
+ const parsed = firstBuildParsed(raw);
77
+ if (parsed instanceof type.errors)
78
+ return Result.Err(`first-build classifier: schema validation failed: ${parsed.summary}`);
79
+ const pairs = (parsed.pairs ?? []).flatMap((p) => {
80
+ const title = (p.title ?? "").trim();
81
+ const slug = (p.slug ?? "").trim();
82
+ return title.length > 0 && slug.length > 0 ? [{ title, slug }] : [];
83
+ });
84
+ const icon = (parsed.iconDescription ?? "").trim();
85
+ const nature = AppNature(parsed.nature);
86
+ return Result.Ok({
87
+ build: parsed.build,
88
+ skills: (parsed.skills ?? []).map((s) => s.trim()).filter((s) => s.length > 0),
89
+ pairs,
90
+ ...(icon.length === 0 ? {} : { iconDescription: icon }),
91
+ ...(nature instanceof type.errors ? {} : { nature }),
92
+ noAccessControl: parsed.noAccessControl === true,
93
+ model: meta.model,
94
+ ...(meta.usage === undefined ? {} : { usage: meta.usage }),
95
+ elapsedMs: meta.elapsedMs,
96
+ });
97
+ }
98
+ export function serverFirstBuildBrief(personWords, o) {
99
+ return [
100
+ ...(o.noAccessControl
101
+ ? []
102
+ : [
103
+ `This first build is group-ready: ${GROUP_READY_SHAPE}`,
104
+ `${INVITE_SCREEN_WHEN}; every other first build leaves it as an option for later.`,
105
+ ]),
106
+ `Sample content: ${SEED_DEMO_RULE}`,
107
+ KNOWN_VALUES_DIRECT_CONTROLS,
108
+ `The person asked: "${personWords}". Plan the app from their words.`,
109
+ ].join("\n");
110
+ }
111
+ function serverFirstBuildSkills(verdict) {
112
+ const picked = verdict.skills.filter((s) => s !== SERVER_FIRST_BUILD_ACCESS_SKILL);
113
+ if (verdict.noAccessControl)
114
+ return picked;
115
+ return verdict.skills.includes(SERVER_FIRST_BUILD_ACCESS_SKILL)
116
+ ? [...verdict.skills]
117
+ : [...picked, SERVER_FIRST_BUILD_ACCESS_SKILL];
118
+ }
119
+ export function createVibeInputFromVerdict(personWords, verdict) {
120
+ return {
121
+ prompt: personWords,
122
+ enrichedPrompt: serverFirstBuildBrief(personWords, { noAccessControl: verdict.noAccessControl }),
123
+ skills: serverFirstBuildSkills(verdict),
124
+ pairs: verdict.pairs.map((p) => ({ ...p })),
125
+ ...(verdict.iconDescription === undefined ? {} : { iconDescription: verdict.iconDescription }),
126
+ ...(verdict.nature === undefined ? {} : { nature: verdict.nature }),
127
+ };
128
+ }
129
+ function numberField(o, key) {
130
+ const v = o[key];
131
+ return typeof v === "number" && Number.isFinite(v) ? v : undefined;
132
+ }
133
+ function readEcho(json, echo) {
134
+ if (typeof json !== "object" || json === null)
135
+ return;
136
+ const body = json;
137
+ if (typeof body.model === "string")
138
+ echo.model = body.model;
139
+ const usage = body.usage;
140
+ if (typeof usage !== "object" || usage === null)
141
+ return;
142
+ const u = usage;
143
+ const prompt = numberField(u, "prompt_tokens");
144
+ const completion = numberField(u, "completion_tokens");
145
+ if (prompt === undefined || completion === undefined)
146
+ return;
147
+ const cost = numberField(u, "cost");
148
+ echo.usage = {
149
+ prompt_tokens: prompt,
150
+ completion_tokens: completion,
151
+ total_tokens: numberField(u, "total_tokens") ?? prompt + completion,
152
+ ...(cost === undefined ? {} : { cost }),
153
+ };
154
+ }
155
+ function classifierFetch(inner, signal, echo) {
156
+ return async (input, init) => {
157
+ const body = typeof init?.body === "string" ? init.body : undefined;
158
+ const rBody = body === undefined ? undefined : exception2Result(() => JSON.parse(body));
159
+ const patchedBody = rBody !== undefined && rBody.isOk()
160
+ ? JSON.stringify({ ...rBody.Ok(), reasoning: { ...FIRST_BUILD_CLASSIFIER_REASONING }, usage: { include: true } })
161
+ : body;
162
+ const res = await inner(input, { ...init, ...(patchedBody === undefined ? {} : { body: patchedBody }), signal });
163
+ const rJson = await exception2Result(() => res.clone().json());
164
+ if (rJson.isOk())
165
+ readEcho(rJson.Ok(), echo);
166
+ return res;
167
+ };
168
+ }
169
+ export async function classifyFirstBuild(vctx, args) {
170
+ return exception2Result(() => classify(vctx, args));
171
+ }
172
+ async function classify(vctx, args) {
173
+ if (args.personWords.trim().length === 0)
174
+ return Result.Err("first-build classifier: no words to classify");
175
+ if (vctx.billing.enforceEnabled) {
176
+ const rCheck = await vctx.billing.checkCredits({ userId: args.userId });
177
+ if (rCheck.isOk() && rCheck.Ok().allowed === false)
178
+ return Result.Err("first-build classifier: no credits remaining");
179
+ }
180
+ const message = firstBuildClassifierMessage(args.personWords, await firstBuildSkillMenu({ poufBlocks: poufLookFor(vctx, args.userId) }));
181
+ const timeoutMs = args.timeoutMs ?? FIRST_BUILD_CLASSIFIER_TIMEOUT_MS;
182
+ const controller = new AbortController();
183
+ const echo = {};
184
+ const startedAt = Date.now();
185
+ let timer;
186
+ const timeout = new Promise((_, reject) => {
187
+ timer = setTimeout(() => {
188
+ controller.abort();
189
+ reject(new Error(`first-build classifier timed out after ${timeoutMs}ms`));
190
+ }, timeoutMs);
191
+ });
192
+ const rCall = await exception2Result(() => Promise.race([
193
+ callAI(message, {
194
+ model: FIRST_BUILD_CLASSIFIER_MODEL,
195
+ endpoint: vctx.params.llm.url,
196
+ apiKey: vctx.params.llm.apiKey,
197
+ mock: { fetch: classifierFetch(vctx.inferenceFetch, controller.signal, echo) },
198
+ skipRetry: true,
199
+ schema: { ...firstBuildClassifierSchema, required: [...firstBuildClassifierSchema.required] },
200
+ }),
201
+ timeout,
202
+ ])).finally(() => clearTimeout(timer));
203
+ const elapsedMs = Date.now() - startedAt;
204
+ if (rCall.isErr())
205
+ return Result.Err(rCall);
206
+ const served = echo.model ?? FIRST_BUILD_CLASSIFIER_MODEL;
207
+ await recordFirstClassifyRow(vctx, { chatId: args.chatId, userId: args.userId, model: served, usage: echo.usage });
208
+ const raw = rCall.Ok();
209
+ if (typeof raw !== "string")
210
+ return Result.Err("first-build classifier: callAI returned non-string");
211
+ const rParsed = exception2Result(() => JSON.parse(raw));
212
+ if (rParsed.isErr())
213
+ return Result.Err(`first-build classifier: JSON parse failed: ${rParsed.Err().message}`);
214
+ return parseFirstBuildVerdict(rParsed.Ok(), {
215
+ model: served,
216
+ ...(echo.usage === undefined ? {} : { usage: echo.usage }),
217
+ elapsedMs,
218
+ });
219
+ }
220
+ async function recordFirstClassifyRow(vctx, o) {
221
+ const zero = { prompt_tokens: 0, completion_tokens: 0, total_tokens: 0 };
222
+ const rInsert = await exception2Result(() => vctx.sql.db.insert(vctx.sql.tables.promptContexts).values({
223
+ userId: o.userId,
224
+ chatId: o.chatId,
225
+ promptId: vctx.sthis.nextId(12).str,
226
+ nethash: vctx.netHash(),
227
+ promptTokens: 0,
228
+ completionTokens: 0,
229
+ totalTokens: 0,
230
+ ref: {
231
+ type: "prompt.usage.sql",
232
+ usage: { given: o.usage === undefined ? [] : [{ ...o.usage, model: o.model }], calculated: zero },
233
+ model: o.model,
234
+ step: "first-classify",
235
+ },
236
+ created: new Date().toISOString(),
237
+ }));
238
+ if (rInsert.isErr()) {
239
+ vctx.logger.Warn().Err(rInsert).Str("chatId", o.chatId).Msg("first-build-classify-row-failed");
240
+ }
241
+ }
242
+ //# sourceMappingURL=first-build-classifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"first-build-classifier.js","sourceRoot":"","sources":["../../jsr/intern/first-build-classifier.ts"],"names":[],"mappings":"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"}