@vibes.diy/api-svc 14.3.84 → 14.3.86
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/create-handler.js +2 -0
- package/create-handler.js.map +1 -1
- package/index.d.ts +3 -1
- package/index.js +3 -1
- package/index.js.map +1 -1
- package/intern/account-vibe-activity.js +2 -1
- package/intern/account-vibe-activity.js.map +1 -1
- package/intern/agent-account-tools.d.ts +1 -0
- package/intern/agent-account-tools.js +3 -1
- package/intern/agent-account-tools.js.map +1 -1
- package/intern/agent-assembly.js +8 -2
- package/intern/agent-assembly.js.map +1 -1
- package/intern/agent-belt.d.ts +1 -3
- package/intern/agent-belt.js +27 -27
- package/intern/agent-belt.js.map +1 -1
- package/intern/agent-build-tools.d.ts +7 -0
- package/intern/agent-build-tools.js +6 -19
- package/intern/agent-build-tools.js.map +1 -1
- package/intern/agent-closing-options.d.ts +26 -0
- package/intern/agent-closing-options.js +130 -0
- package/intern/agent-closing-options.js.map +1 -0
- package/intern/agent-discussions.js +2 -1
- package/intern/agent-discussions.js.map +1 -1
- package/intern/agent-dispatcher.d.ts +1 -0
- package/intern/agent-dispatcher.js +17 -3
- package/intern/agent-dispatcher.js.map +1 -1
- package/intern/agent-evidence.js +5 -4
- package/intern/agent-evidence.js.map +1 -1
- package/intern/agent-file-tools.js +5 -4
- package/intern/agent-file-tools.js.map +1 -1
- package/intern/agent-read-tools.js +43 -25
- package/intern/agent-read-tools.js.map +1 -1
- package/intern/agent-session-instruction.d.ts +3 -2
- package/intern/agent-session-instruction.js +10 -8
- package/intern/agent-session-instruction.js.map +1 -1
- package/intern/agent-session-runtime.js +2 -1
- package/intern/agent-session-runtime.js.map +1 -1
- package/intern/agent-session.js +8 -7
- package/intern/agent-session.js.map +1 -1
- package/intern/agent-turn.d.ts +1 -0
- package/intern/agent-turn.js +1 -0
- package/intern/agent-turn.js.map +1 -1
- package/intern/agent-wake.d.ts +1 -1
- package/intern/agent-wake.js +1 -1
- package/intern/agent-wake.js.map +1 -1
- package/intern/agent-with-vibe.d.ts +1 -0
- package/intern/agent-with-vibe.js +19 -18
- package/intern/agent-with-vibe.js.map +1 -1
- package/intern/alt-first-build.d.ts +36 -0
- package/intern/alt-first-build.js +137 -0
- package/intern/alt-first-build.js.map +1 -0
- package/intern/alt-landing.d.ts +7 -0
- package/intern/alt-landing.js +31 -0
- package/intern/alt-landing.js.map +1 -0
- package/intern/autumn-recent-usage.js +11 -10
- package/intern/autumn-recent-usage.js.map +1 -1
- package/intern/backend-db-callback.js +3 -2
- package/intern/backend-db-callback.js.map +1 -1
- package/intern/draft-chat-store.js +3 -2
- package/intern/draft-chat-store.js.map +1 -1
- package/intern/first-brief.d.ts +1 -1
- package/intern/first-brief.js +4 -3
- package/intern/first-brief.js.map +1 -1
- package/intern/first-build-classifier.d.ts +4 -4
- package/intern/first-build-classifier.js +18 -19
- package/intern/first-build-classifier.js.map +1 -1
- package/intern/first-build-race.d.ts +71 -0
- package/intern/first-build-race.js +257 -0
- package/intern/first-build-race.js.map +1 -0
- package/intern/guest-credit-meter.js +3 -2
- package/intern/guest-credit-meter.js.map +1 -1
- package/intern/image-survey.js +6 -5
- package/intern/image-survey.js.map +1 -1
- package/intern/instruction-variant.d.ts +25 -2
- package/intern/instruction-variant.js +189 -2
- package/intern/instruction-variant.js.map +1 -1
- package/intern/keeps-to-themselves.d.ts +1 -0
- package/intern/keeps-to-themselves.js +10 -0
- package/intern/keeps-to-themselves.js.map +1 -0
- package/intern/llm-tool-loop.d.ts +5 -1
- package/intern/llm-tool-loop.js +48 -15
- package/intern/llm-tool-loop.js.map +1 -1
- package/intern/manifest-assets-line.d.ts +2 -0
- package/intern/manifest-assets-line.js +14 -1
- package/intern/manifest-assets-line.js.map +1 -1
- package/intern/mercury-capability-triggers.d.ts +1 -0
- package/intern/mercury-capability-triggers.js +95 -0
- package/intern/mercury-capability-triggers.js.map +1 -0
- package/intern/mercury-first-build-seam.d.ts +77 -0
- package/intern/mercury-first-build-seam.js +316 -0
- package/intern/mercury-first-build-seam.js.map +1 -0
- package/intern/mercury-first-build.d.ts +691 -0
- package/intern/mercury-first-build.js +3519 -0
- package/intern/mercury-first-build.js.map +1 -0
- package/intern/mercury-resilience.d.ts +70 -0
- package/intern/mercury-resilience.js +122 -0
- package/intern/mercury-resilience.js.map +1 -0
- package/intern/mint-decision.d.ts +1 -0
- package/intern/mint-decision.js +3 -0
- package/intern/mint-decision.js.map +1 -1
- package/intern/option-line-hold.d.ts +5 -0
- package/intern/option-line-hold.js +39 -0
- package/intern/option-line-hold.js.map +1 -0
- package/intern/pinned-app-slug.js +2 -1
- package/intern/pinned-app-slug.js.map +1 -1
- package/intern/pouf-room-catalog.d.ts +2 -0
- package/intern/pouf-room-catalog.js +11 -0
- package/intern/pouf-room-catalog.js.map +1 -0
- package/intern/prompt-step.d.ts +1 -1
- package/intern/prompt-step.js.map +1 -1
- package/intern/prompt-usage.js +5 -4
- package/intern/prompt-usage.js.map +1 -1
- package/intern/retire-offer-options.d.ts +3 -0
- package/intern/retire-offer-options.js +91 -0
- package/intern/retire-offer-options.js.map +1 -0
- package/intern/save-repair-io.js +3 -2
- package/intern/save-repair-io.js.map +1 -1
- package/intern/seed-chat-section.d.ts +13 -0
- package/intern/seed-chat-section.js +62 -0
- package/intern/seed-chat-section.js.map +1 -1
- package/intern/server-first-build.js +1 -0
- package/intern/server-first-build.js.map +1 -1
- package/intern/url-research.js +3 -2
- package/intern/url-research.js.map +1 -1
- package/intern/vibe-font-catalog.d.ts +2 -0
- package/intern/vibe-font-catalog.js +8 -0
- package/intern/vibe-font-catalog.js.map +1 -0
- package/intern/work-tools.js +8 -5
- package/intern/work-tools.js.map +1 -1
- package/not-implemented-message.js +2 -1
- package/not-implemented-message.js.map +1 -1
- package/package.json +14 -14
- package/public/access-output-decoder.js +4 -3
- package/public/access-output-decoder.js.map +1 -1
- package/public/agent-turn-action.d.ts +1 -0
- package/public/agent-turn-action.js +312 -44
- package/public/agent-turn-action.js.map +1 -1
- package/public/agent-turn-assembly.js +5 -2
- package/public/agent-turn-assembly.js.map +1 -1
- package/public/draft-runtime.js +9 -5
- package/public/draft-runtime.js.map +1 -1
- package/public/list-memberships.js +3 -2
- package/public/list-memberships.js.map +1 -1
- package/public/list-notifications.js +2 -1
- package/public/list-notifications.js.map +1 -1
- package/public/list-recent-vibes.js +4 -3
- package/public/list-recent-vibes.js.map +1 -1
- package/public/prompt-chat-section.js +10 -1
- package/public/prompt-chat-section.js.map +1 -1
- package/public/prompt-turn-terminal.js +3 -1
- package/public/prompt-turn-terminal.js.map +1 -1
- package/public/provider-errors.js +3 -2
- package/public/provider-errors.js.map +1 -1
- package/public/report-activity.js +18 -2
- package/public/report-activity.js.map +1 -1
- package/public/report-cache.js +2 -1
- package/public/report-cache.js.map +1 -1
- package/public/serv-entry-point.js +2 -1
- package/public/serv-entry-point.js.map +1 -1
- package/public/vibe-traffic-source.js +1 -1
- package/public/vibe-traffic-source.js.map +1 -1
- package/types.d.ts +1 -0
- package/types.js +7 -6
- package/types.js.map +1 -1
- package/usage-report/new-user-alert-util.d.ts +6 -0
- package/usage-report/new-user-alert-util.js +30 -1
- package/usage-report/new-user-alert-util.js.map +1 -1
- package/intern/agent-options-tool.d.ts +0 -27
- package/intern/agent-options-tool.js +0 -213
- package/intern/agent-options-tool.js.map +0 -1
|
@@ -1,17 +1,25 @@
|
|
|
1
|
-
import { Result, exception2Result } from "@adviser/cement";
|
|
1
|
+
import { Future, Result, exception2Result } from "@adviser/cement";
|
|
2
2
|
import { isActiveTheme, isAgentChatAppSlug, } from "@vibes.diy/api-types";
|
|
3
|
-
import { isChatMessage } from "@vibes.diy/call-ai-v2";
|
|
3
|
+
import { isChatMessage, isSseEnd, isSseLine } from "@vibes.diy/call-ai-v2";
|
|
4
4
|
import { classifyTurnReach } from "../intern/turn-reach.js";
|
|
5
5
|
import { acquireTurnBuildLock, releaseTurnBuildLock } from "../intern/codegen-build-lock.js";
|
|
6
6
|
import { refuseCrossLaneBuild } from "../intern/cross-lane-build-guard.js";
|
|
7
7
|
import { userFileBlocks } from "../intern/agent-session-runtime.js";
|
|
8
|
+
import { alternativeReadyNote, startAlternativeFirstBuild, watchAlternativeLanding } from "../intern/alt-first-build.js";
|
|
9
|
+
import { fireAgentWakeTurn } from "../intern/agent-wake.js";
|
|
10
|
+
import { promptDispatchContext } from "../intern/prompt-dispatch-context.js";
|
|
8
11
|
import { isAgentSessionSuperseded } from "../intern/agent-session.js";
|
|
9
12
|
import { runEditVibeTool } from "../intern/agent-build-tools.js";
|
|
10
13
|
import { claimFirstTurnMint, claimMintJob, readClaimedChatApp } from "../intern/mint-job-store.js";
|
|
11
14
|
import { claimAgentAppContext } from "../intern/agent-request-frame.js";
|
|
12
15
|
import { inflateAgentFiles, serverFirstBuildAppContext } from "../intern/agent-assembly.js";
|
|
13
16
|
import { runServerFirstBuild } from "../intern/server-first-build.js";
|
|
17
|
+
import { recordMercuryRace, runMercuryFirstBuild, } from "../intern/mercury-first-build.js";
|
|
18
|
+
import { MERCURY_RATE_LIMITED_STAGE_MS } from "../intern/mercury-resilience.js";
|
|
19
|
+
import { runMercurySeam, withMercuryUsageRounds, withPreambleFirst, } from "../intern/mercury-first-build-seam.js";
|
|
20
|
+
import { createFirstBuildRace, createPreJoinRounds, deferredStream, joinedFirstBuildReceipt, withoutPreJoinText, } from "../intern/first-build-race.js";
|
|
14
21
|
import { createAgentBelt } from "../intern/agent-belt.js";
|
|
22
|
+
import { createAgentClosingOptions } from "../intern/agent-closing-options.js";
|
|
15
23
|
import { createAccountAgentBelt } from "../intern/agent-account-tools.js";
|
|
16
24
|
import { poufLookFor } from "../intern/pouf-look-flag.js";
|
|
17
25
|
import { readComposedSettingsForApp } from "./app-setting-items.js";
|
|
@@ -33,28 +41,77 @@ import { createAgentEvidenceWriter, nextAgentSessionMessages } from "../intern/a
|
|
|
33
41
|
import { observeEvidenceLine } from "../intern/turn-latency.js";
|
|
34
42
|
import { handleLlmResponse } from "./stream-assembly.js";
|
|
35
43
|
import { handleFSPrompt } from "./fs-prompt.js";
|
|
36
|
-
import { FIRST_BRIEF_WORD_COUNT, fastFirstTurnLevers, AGENT_FIRST_BRIEF_ENV, agentFirstBriefEnabled, firstBriefArmed, seededAddressWordsArmed, variantForTurn, } from "../intern/instruction-variant.js";
|
|
44
|
+
import { FIRST_BRIEF_WORD_COUNT, fastFirstTurnLevers, AGENT_FIRST_BRIEF_ENV, agentFirstBriefEnabled, firstBriefArmed, isMercuryVariant, mercuryRecutArmed, mercuryStyleFor, mercuryJuiceFor, mercuryDepthFor, mercuryReplyFor, mercuryDuoFor, mercuryOneCallFor, mercuryDuoPoolFor, mercuryRecordsRulesFor, mercuryVariantForTurn, mercuryPlannerFor, mercuryFormatFor, MERCURY_FIRST_BUILD_ENV, seededAddressWordsArmed, variantForTurn, } from "../intern/instruction-variant.js";
|
|
45
|
+
import { isEvalHandle } from "../intern/eval-handles.js";
|
|
37
46
|
import { slugWordBag } from "../intern/ensure-slug-binding.js";
|
|
38
47
|
import { firstBriefOutcomeFromReceipt, firstBriefTools, firstBriefTurnEligible, observeFirstBriefRound, recordFirstBriefOutcome, recordFirstBriefRow, withFirstBriefLine, withSeededAddressWordsLine, withoutFirstBriefLine, withFirstBriefContinueNote, } from "../intern/first-brief.js";
|
|
48
|
+
export const FIRST_BUILD_RACE_EVIDENCE_NAME = "first-build-race";
|
|
39
49
|
export function createAgentTurnAction(args) {
|
|
40
50
|
const { ctx, vctx, req, orig, resChat, agentPayload, liveSession, agentEvidence, agentFetchUrlContext, firstBuildVerdict, agentFirstTurnMint, submittedAt, agentWakeTurn, dispatchCarry, instructionVariant, turnLatency, terminal, facts, reenter, } = args;
|
|
41
51
|
const topLevel = isAgentChatAppSlug(resChat.appSlug);
|
|
42
52
|
const turnVariant = variantForTurn(instructionVariant, { firstTurn: agentFirstTurnMint });
|
|
43
53
|
const fastLevers = fastFirstTurnLevers(instructionVariant, agentFirstTurnMint);
|
|
44
54
|
const personWords = currentUserMessageText(orig.prompt.messages.filter(isChatMessage));
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
55
|
+
const briefEligible = firstBriefTurnEligible({
|
|
56
|
+
wakeTurn: agentWakeTurn,
|
|
57
|
+
topLevel,
|
|
58
|
+
personWords,
|
|
59
|
+
linkedUrls: agentFetchUrlContext?.activatedUrls.length ?? 0,
|
|
60
|
+
});
|
|
61
|
+
const briefDefaultOn = agentFirstBriefEnabled(vctx.sthis.env.get(AGENT_FIRST_BRIEF_ENV));
|
|
62
|
+
const mercuryVariant = mercuryVariantForTurn({
|
|
63
|
+
instructionVariant,
|
|
64
|
+
flag: vctx.sthis.env.get(MERCURY_FIRST_BUILD_ENV),
|
|
65
|
+
});
|
|
66
|
+
const mercurySwitched = mercuryVariant !== undefined && instructionVariant === undefined;
|
|
67
|
+
const mercuryKeepText = isEvalHandle(resChat.ownerHandle);
|
|
68
|
+
const mercuryFormat = mercuryFormatFor(mercuryVariant);
|
|
69
|
+
const mercuryPlanner = mercuryPlannerFor(mercuryVariant);
|
|
70
|
+
const mercuryPlannerNamed = mercuryPlanner === "mercury" ? undefined : mercuryPlanner;
|
|
71
|
+
const mercuryArmed = mercuryRecutArmed(mercuryVariant, agentFirstTurnMint) && briefEligible;
|
|
72
|
+
const briefArmed = mercuryArmed
|
|
73
|
+
? firstBriefArmed(undefined, agentFirstTurnMint, briefDefaultOn) && briefEligible
|
|
74
|
+
: firstBriefArmed(instructionVariant, agentFirstTurnMint, briefDefaultOn) && briefEligible;
|
|
52
75
|
const seededWordsArmed = seededAddressWordsArmed(instructionVariant, agentFirstTurnMint) &&
|
|
53
76
|
agentWakeTurn === false &&
|
|
54
77
|
topLevel === false &&
|
|
55
78
|
personWords.length > 0;
|
|
56
79
|
return async ({ scope, blockSeq, promptId }) => {
|
|
57
|
-
const briefWords = briefArmed || seededWordsArmed ? slugWordBag(FIRST_BRIEF_WORD_COUNT) : [];
|
|
80
|
+
const briefWords = briefArmed || seededWordsArmed || mercuryArmed ? slugWordBag(FIRST_BRIEF_WORD_COUNT) : [];
|
|
81
|
+
const mercuryRounds = [];
|
|
82
|
+
const mercuryCancel = new AbortController();
|
|
83
|
+
const race = mercuryArmed
|
|
84
|
+
? createFirstBuildRace({ onAgentWon: () => mercuryCancel.abort() })
|
|
85
|
+
: undefined;
|
|
86
|
+
let lastMercuryRow;
|
|
87
|
+
const mercuryPending = mercuryArmed
|
|
88
|
+
? runMercuryFirstBuild(vctx, {
|
|
89
|
+
chatId: req.chatId,
|
|
90
|
+
signal: mercuryCancel.signal,
|
|
91
|
+
onRowWritten: (rowId) => {
|
|
92
|
+
lastMercuryRow = rowId;
|
|
93
|
+
},
|
|
94
|
+
userId: req._auth.verifiedAuth.claims.userId,
|
|
95
|
+
onUsage: (rounds) => {
|
|
96
|
+
mercuryRounds.push(...rounds);
|
|
97
|
+
},
|
|
98
|
+
personWords,
|
|
99
|
+
words: briefWords,
|
|
100
|
+
style: mercuryStyleFor(mercuryVariant),
|
|
101
|
+
juice: mercuryJuiceFor(mercuryVariant),
|
|
102
|
+
depth: mercuryDepthFor(mercuryVariant),
|
|
103
|
+
reply: mercuryReplyFor(mercuryVariant),
|
|
104
|
+
duo: mercuryDuoFor(mercuryVariant),
|
|
105
|
+
...(mercuryDuoPoolFor(mercuryVariant) === undefined ? {} : { duoPool: mercuryDuoPoolFor(mercuryVariant) }),
|
|
106
|
+
oneCall: mercuryOneCallFor(mercuryVariant),
|
|
107
|
+
recordsRules: mercuryRecordsRulesFor(mercuryVariant),
|
|
108
|
+
...(mercuryPlannerNamed === undefined ? {} : { planner: mercuryPlannerNamed }),
|
|
109
|
+
...(mercuryFormat === "skeleton" ? {} : { format: mercuryFormat }),
|
|
110
|
+
rooms: poufLookFor(vctx, req._auth.verifiedAuth.claims.userId),
|
|
111
|
+
...(mercurySwitched ? { rateLimitedBudgetMs: MERCURY_RATE_LIMITED_STAGE_MS } : {}),
|
|
112
|
+
...(mercuryKeepText ? { keepText: true } : {}),
|
|
113
|
+
})
|
|
114
|
+
: undefined;
|
|
58
115
|
let briefCallPending = briefArmed;
|
|
59
116
|
let briefAddressRetried = false;
|
|
60
117
|
let briefContinueOwed = false;
|
|
@@ -74,8 +131,10 @@ export function createAgentTurnAction(args) {
|
|
|
74
131
|
? { ownerHandle: resChat.ownerHandle }
|
|
75
132
|
: { ownerHandle: resChat.ownerHandle, appSlug: resChat.appSlug },
|
|
76
133
|
});
|
|
77
|
-
if (rActor.isErr())
|
|
134
|
+
if (rActor.isErr()) {
|
|
135
|
+
mercuryCancel.abort();
|
|
78
136
|
return Result.Err(rActor.Err());
|
|
137
|
+
}
|
|
79
138
|
const surveyColorway = startFirstTurnImageSurvey(vctx, {
|
|
80
139
|
guard: liveSession,
|
|
81
140
|
firstTurn: agentFirstTurnMint,
|
|
@@ -96,8 +155,10 @@ export function createAgentTurnAction(args) {
|
|
|
96
155
|
let liveAppSlug = resChat.appSlug;
|
|
97
156
|
let firstTurnAppClaimed = agentFirstTurnMint === false;
|
|
98
157
|
const rVfs = await pVfs;
|
|
99
|
-
if (rVfs.isErr())
|
|
158
|
+
if (rVfs.isErr()) {
|
|
159
|
+
mercuryCancel.abort();
|
|
100
160
|
return Result.Err(rVfs.Err());
|
|
161
|
+
}
|
|
101
162
|
const vfs = new Map(rVfs.Ok());
|
|
102
163
|
function extendDeadlineForAwaitedBuild(awaiting) {
|
|
103
164
|
void extendOpenTurnDeadline(vctx.sql, {
|
|
@@ -115,6 +176,7 @@ export function createAgentTurnAction(args) {
|
|
|
115
176
|
});
|
|
116
177
|
}
|
|
117
178
|
const firstTurnFileBlocks = userFileBlocks(orig.prompt.messages);
|
|
179
|
+
const turnCarry = isMercuryVariant(instructionVariant) ? carryWithoutVariant(dispatchCarry) : dispatchCarry;
|
|
118
180
|
const dispatcherBase = {
|
|
119
181
|
vctx,
|
|
120
182
|
host: ctx,
|
|
@@ -128,10 +190,9 @@ export function createAgentTurnAction(args) {
|
|
|
128
190
|
extendDeadlineForAwaitedBuild(t.promptId);
|
|
129
191
|
return t.chatId === req.chatId ? liveSession.watch(t.promptId) : liveSession.watchBuild(t);
|
|
130
192
|
},
|
|
131
|
-
...(Object.keys(
|
|
193
|
+
...(Object.keys(turnCarry).length === 0 ? {} : { carry: turnCarry }),
|
|
132
194
|
};
|
|
133
|
-
const
|
|
134
|
-
...dispatcherBase,
|
|
195
|
+
const firstTurnDispatch = {
|
|
135
196
|
...(agentFirstTurnMint
|
|
136
197
|
? {
|
|
137
198
|
firstTurn: {
|
|
@@ -147,7 +208,16 @@ export function createAgentTurnAction(args) {
|
|
|
147
208
|
},
|
|
148
209
|
}
|
|
149
210
|
: {}),
|
|
150
|
-
}
|
|
211
|
+
};
|
|
212
|
+
const dispatcher = createAgentBuildDispatcher({ ...dispatcherBase, ...firstTurnDispatch });
|
|
213
|
+
const mercuryDispatcher = mercuryPending === undefined
|
|
214
|
+
? dispatcher
|
|
215
|
+
: createAgentBuildDispatcher({
|
|
216
|
+
...dispatcherBase,
|
|
217
|
+
...(Object.keys(dispatchCarry).length === 0 ? {} : { carry: dispatchCarry }),
|
|
218
|
+
...firstTurnDispatch,
|
|
219
|
+
...(mercurySwitched ? { mercuryFont: true } : {}),
|
|
220
|
+
});
|
|
151
221
|
const evidence = agentEvidence ??
|
|
152
222
|
observeEvidenceLine(createAgentEvidenceWriter({
|
|
153
223
|
chatId: req.chatId,
|
|
@@ -183,6 +253,163 @@ export function createAgentTurnAction(args) {
|
|
|
183
253
|
firstTurnAppClaimed = true;
|
|
184
254
|
}
|
|
185
255
|
}
|
|
256
|
+
const seamTask = mercuryPending !== undefined && race !== undefined && firstTurnMint !== undefined && topLevel === false
|
|
257
|
+
? runMercurySeam(vctx, {
|
|
258
|
+
pending: mercuryPending,
|
|
259
|
+
actor: rActor.Ok(),
|
|
260
|
+
dispatcher: mercuryDispatcher,
|
|
261
|
+
firstTurn: firstTurnMint,
|
|
262
|
+
...(surveyColorway?.colorway === undefined ? {} : { presetColorway: surveyColorway.colorway }),
|
|
263
|
+
style: mercuryStyleFor(mercuryVariant),
|
|
264
|
+
juice: mercuryJuiceFor(mercuryVariant),
|
|
265
|
+
depth: mercuryDepthFor(mercuryVariant),
|
|
266
|
+
reply: mercuryReplyFor(mercuryVariant),
|
|
267
|
+
duo: mercuryDuoFor(mercuryVariant),
|
|
268
|
+
oneCall: mercuryOneCallFor(mercuryVariant),
|
|
269
|
+
recordsRules: mercuryRecordsRulesFor(mercuryVariant),
|
|
270
|
+
...(mercuryPlannerNamed === undefined ? {} : { planner: mercuryPlannerNamed }),
|
|
271
|
+
...(mercuryFormat === "skeleton" ? {} : { format: mercuryFormat }),
|
|
272
|
+
...(mercurySwitched ? { productionSwitch: true } : {}),
|
|
273
|
+
...(mercuryKeepText ? { keepText: true } : {}),
|
|
274
|
+
race,
|
|
275
|
+
evidence,
|
|
276
|
+
})
|
|
277
|
+
.catch((e) => {
|
|
278
|
+
race.mercurySettled(false);
|
|
279
|
+
race.settleMercury({ dispatched: false });
|
|
280
|
+
vctx.logger.Warn().Err(e).Str("chatId", req.chatId).Msg("mercury-seam-threw");
|
|
281
|
+
return { dispatched: false, reason: "mercury-failed" };
|
|
282
|
+
})
|
|
283
|
+
.then(async (outcome) => {
|
|
284
|
+
if (outcome.dispatched) {
|
|
285
|
+
liveAppSlug = outcome.appSlug;
|
|
286
|
+
liveSession.claimAppAddress(outcome.appSlug);
|
|
287
|
+
firstTurnAppClaimed = true;
|
|
288
|
+
}
|
|
289
|
+
if (lastMercuryRow !== undefined)
|
|
290
|
+
await recordMercuryRace(vctx, { chatId: req.chatId, promptId: lastMercuryRow, race: race.receipt() });
|
|
291
|
+
return outcome;
|
|
292
|
+
})
|
|
293
|
+
: undefined;
|
|
294
|
+
const preJoin = createPreJoinRounds();
|
|
295
|
+
let roundText = "";
|
|
296
|
+
let alternativeRecorded = false;
|
|
297
|
+
function raceRound(stream) {
|
|
298
|
+
if (race === undefined || preJoin.open() === false)
|
|
299
|
+
return stream;
|
|
300
|
+
const tag = preJoin.startRound();
|
|
301
|
+
roundText = "";
|
|
302
|
+
let calledTool = false;
|
|
303
|
+
return stream.pipeThrough(new TransformStream({
|
|
304
|
+
transform(msg, controller) {
|
|
305
|
+
if (isSseLine(msg)) {
|
|
306
|
+
for (const choice of msg.chunk.choices) {
|
|
307
|
+
if (choice.delta.tool_calls !== undefined)
|
|
308
|
+
calledTool = true;
|
|
309
|
+
const content = choice.delta.content;
|
|
310
|
+
if (typeof content === "string")
|
|
311
|
+
roundText += content;
|
|
312
|
+
}
|
|
313
|
+
controller.enqueue({ ...msg, chunk: { ...msg.chunk, id: tag } });
|
|
314
|
+
return;
|
|
315
|
+
}
|
|
316
|
+
if (isSseEnd(msg) && calledTool === false) {
|
|
317
|
+
race.agentAnswered();
|
|
318
|
+
preJoin.answered(tag);
|
|
319
|
+
}
|
|
320
|
+
controller.enqueue(msg);
|
|
321
|
+
},
|
|
322
|
+
}));
|
|
323
|
+
}
|
|
324
|
+
const beltFirstTurn = firstTurnMint === undefined || race === undefined
|
|
325
|
+
? firstTurnMint
|
|
326
|
+
: {
|
|
327
|
+
...firstTurnMint,
|
|
328
|
+
joinRunning: async () => {
|
|
329
|
+
const decision = await race.agentCreate();
|
|
330
|
+
if (decision.kind !== "join")
|
|
331
|
+
return undefined;
|
|
332
|
+
preJoin.joined();
|
|
333
|
+
await evidence({
|
|
334
|
+
kind: "receipt",
|
|
335
|
+
name: FIRST_BUILD_RACE_EVIDENCE_NAME,
|
|
336
|
+
text: JSON.stringify({ race: race.receipt() }),
|
|
337
|
+
});
|
|
338
|
+
return joinedFirstBuildReceipt(decision);
|
|
339
|
+
},
|
|
340
|
+
startAlternative: async (input) => {
|
|
341
|
+
if (race.receipt().alternative !== undefined)
|
|
342
|
+
return { dispatched: false };
|
|
343
|
+
race.noteAlternative({ dispatched: false });
|
|
344
|
+
const originLabel = `${resChat.ownerHandle}/${liveAppSlug}`;
|
|
345
|
+
const alternativeLabel = new Future();
|
|
346
|
+
const started = await startAlternativeFirstBuild(vctx, {
|
|
347
|
+
actor: rActor.Ok(),
|
|
348
|
+
openAuth: { auth: req.auth, _auth: req._auth },
|
|
349
|
+
input,
|
|
350
|
+
prompt: personWords,
|
|
351
|
+
personWords,
|
|
352
|
+
...(roundText.trim().length === 0 ? {} : { opener: roundText }),
|
|
353
|
+
originLabel,
|
|
354
|
+
originChatId: req.chatId,
|
|
355
|
+
dispatcherFor: (altChatId) => createAgentBuildDispatcher({
|
|
356
|
+
...dispatcherBase,
|
|
357
|
+
firstTurn: {
|
|
358
|
+
chatId: altChatId,
|
|
359
|
+
...(submittedAt === undefined ? {} : { submittedAt }),
|
|
360
|
+
...(firstTurnFileBlocks.length === 0 ? {} : { fileBlocks: firstTurnFileBlocks }),
|
|
361
|
+
},
|
|
362
|
+
takeFileBlocks: () => [],
|
|
363
|
+
callerSlot: { tryTake: () => undefined },
|
|
364
|
+
onPendingBuild: (t) => {
|
|
365
|
+
watchAlternativeLanding(vctx, {
|
|
366
|
+
chatId: t.chatId,
|
|
367
|
+
promptId: t.promptId,
|
|
368
|
+
originChatId: req.chatId,
|
|
369
|
+
onLanded: async (landed) => {
|
|
370
|
+
race.noteAlternative({ landed });
|
|
371
|
+
if (alternativeRecorded && lastMercuryRow !== undefined)
|
|
372
|
+
await recordMercuryRace(vctx, { chatId: req.chatId, promptId: lastMercuryRow, race: race.receipt() });
|
|
373
|
+
const note = alternativeReadyNote(landed, await alternativeLabel.asPromise());
|
|
374
|
+
if (note === undefined)
|
|
375
|
+
return;
|
|
376
|
+
vctx.logger
|
|
377
|
+
.Info()
|
|
378
|
+
.Any("event", { chatId: req.chatId, alternativeChatId: t.chatId, promptId: t.promptId })
|
|
379
|
+
.Msg("alternative-first-build-wake-firing");
|
|
380
|
+
fireAgentWakeTurn({
|
|
381
|
+
vctx,
|
|
382
|
+
host: ctx,
|
|
383
|
+
auth: req.auth,
|
|
384
|
+
outerTid: req.outerTid,
|
|
385
|
+
chatId: req.chatId,
|
|
386
|
+
budget: 0,
|
|
387
|
+
note,
|
|
388
|
+
...(turnCarry.builderModel === undefined ? {} : { builderModel: turnCarry.builderModel }),
|
|
389
|
+
...(turnCarry.subagentModel === undefined ? {} : { subagentModel: turnCarry.subagentModel }),
|
|
390
|
+
...(turnCarry.agentModel === undefined ? {} : { agentModel: turnCarry.agentModel }),
|
|
391
|
+
...(turnCarry.timeZone === undefined ? {} : { timeZone: turnCarry.timeZone }),
|
|
392
|
+
handle: (wakeCtx) => reenter(promptDispatchContext(ctx, wakeCtx.validated)),
|
|
393
|
+
});
|
|
394
|
+
},
|
|
395
|
+
});
|
|
396
|
+
},
|
|
397
|
+
}),
|
|
398
|
+
});
|
|
399
|
+
alternativeLabel.resolve(started.dispatched ? started.label : undefined);
|
|
400
|
+
race.noteAlternative(started.dispatched
|
|
401
|
+
? { dispatched: true, chatId: started.chatId, appSlug: started.appSlug, landed: "pending" }
|
|
402
|
+
: {
|
|
403
|
+
dispatched: false,
|
|
404
|
+
...(started.chatId === undefined ? {} : { chatId: started.chatId }),
|
|
405
|
+
landed: started.skipped,
|
|
406
|
+
});
|
|
407
|
+
return { dispatched: started.dispatched };
|
|
408
|
+
},
|
|
409
|
+
};
|
|
410
|
+
function serverCreatedFrame(messages) {
|
|
411
|
+
return serverFirstBuildAppContext(messages, { ownerHandle: resChat.ownerHandle, appSlug: liveAppSlug });
|
|
412
|
+
}
|
|
186
413
|
const poufApp = agentFirstTurnMint === false && topLevel === false && poufLookFor(vctx, rActor.Ok().userId)
|
|
187
414
|
? await exception2Result(() => readComposedSettingsForApp(vctx, resChat.ownerHandle, resChat.appSlug)).then((r) => r.isOk() && r.Ok().find(isActiveTheme)?.theme === "pouf")
|
|
188
415
|
: false;
|
|
@@ -190,6 +417,7 @@ export function createAgentTurnAction(args) {
|
|
|
190
417
|
? createAccountAgentBelt(vctx, {
|
|
191
418
|
actor: rActor.Ok(),
|
|
192
419
|
chatId: req.chatId,
|
|
420
|
+
personWords,
|
|
193
421
|
openAuth: { auth: req.auth, _auth: req._auth },
|
|
194
422
|
dispatcher,
|
|
195
423
|
mintDispatcherFor: (mintChatId) => createAgentBuildDispatcher({
|
|
@@ -208,12 +436,12 @@ export function createAgentTurnAction(args) {
|
|
|
208
436
|
: createAgentBelt(vctx, {
|
|
209
437
|
actor: rActor.Ok(),
|
|
210
438
|
chatId: req.chatId,
|
|
439
|
+
personWords,
|
|
211
440
|
vfs,
|
|
212
|
-
onOptionsOffered: (offered) => evidence({ kind: "options", options: [...offered] }),
|
|
213
441
|
...(poufApp ? { poufApp } : {}),
|
|
214
|
-
...(
|
|
442
|
+
...(beltFirstTurn === undefined
|
|
215
443
|
? {}
|
|
216
|
-
: { firstTurn: serverCreated === undefined ?
|
|
444
|
+
: { firstTurn: serverCreated === undefined ? beltFirstTurn : { ...beltFirstTurn, preCreated: serverCreated } }),
|
|
217
445
|
...(agentFetchUrlContext === undefined ? {} : { fetchUrl: agentFetchUrlContext }),
|
|
218
446
|
dispatcher,
|
|
219
447
|
queueEdit: (input) => liveSession.queue(input),
|
|
@@ -254,6 +482,7 @@ export function createAgentTurnAction(args) {
|
|
|
254
482
|
});
|
|
255
483
|
},
|
|
256
484
|
onDispatch: (dispatched) => {
|
|
485
|
+
preJoin.joined();
|
|
257
486
|
liveAppSlug = dispatched.appSlug;
|
|
258
487
|
liveSession.claimAppAddress(dispatched.appSlug);
|
|
259
488
|
firstTurnAppClaimed = true;
|
|
@@ -294,7 +523,7 @@ export function createAgentTurnAction(args) {
|
|
|
294
523
|
: seededWordsArmed
|
|
295
524
|
? withSeededAddressWordsLine(agentPayload.messages, briefWords)
|
|
296
525
|
: agentPayload.messages
|
|
297
|
-
:
|
|
526
|
+
: serverCreatedFrame(agentPayload.messages),
|
|
298
527
|
model: agentPayload.model,
|
|
299
528
|
ownerHandle: resChat.ownerHandle,
|
|
300
529
|
appSlug: liveAppSlug,
|
|
@@ -320,9 +549,34 @@ export function createAgentTurnAction(args) {
|
|
|
320
549
|
const rSse = createProviderSseStream(res.res, promptId);
|
|
321
550
|
if (rSse.isErr()) {
|
|
322
551
|
vctx.logger.Warn().Err(rSse).Str("chatId", req.chatId).Msg("agent-turn-provider-stream-unavailable");
|
|
552
|
+
race?.agentFailed();
|
|
323
553
|
}
|
|
324
554
|
else {
|
|
325
|
-
|
|
555
|
+
const roundOne = briefArmed
|
|
556
|
+
? observeFirstBriefRound(rSse.Ok(), {
|
|
557
|
+
startedAt: briefStartedAt,
|
|
558
|
+
now: () => Date.now(),
|
|
559
|
+
onEnd: async (round) => {
|
|
560
|
+
briefRound = round;
|
|
561
|
+
if (race !== undefined && round.called && (await race.agentCreate()).kind === "join") {
|
|
562
|
+
briefRecorded = true;
|
|
563
|
+
return;
|
|
564
|
+
}
|
|
565
|
+
await recordFirstBriefRow(vctx, {
|
|
566
|
+
chatId: req.chatId,
|
|
567
|
+
userId: req._auth.verifiedAuth.claims.userId,
|
|
568
|
+
model: briefModel,
|
|
569
|
+
round,
|
|
570
|
+
});
|
|
571
|
+
if (round.called === false) {
|
|
572
|
+
briefCallPending = false;
|
|
573
|
+
briefContinueOwed = true;
|
|
574
|
+
await recordBrief({ dispatched: false, reason: "no-create-call" });
|
|
575
|
+
}
|
|
576
|
+
},
|
|
577
|
+
})
|
|
578
|
+
: rSse.Ok();
|
|
579
|
+
const turnStream = createAgentTurnStream({
|
|
326
580
|
vctx,
|
|
327
581
|
belt,
|
|
328
582
|
actor: rActor.Ok(),
|
|
@@ -330,27 +584,21 @@ export function createAgentTurnAction(args) {
|
|
|
330
584
|
vfs,
|
|
331
585
|
dispatcher,
|
|
332
586
|
request: res.llmReq,
|
|
333
|
-
stream:
|
|
334
|
-
? observeFirstBriefRound(rSse.Ok(), {
|
|
335
|
-
startedAt: briefStartedAt,
|
|
336
|
-
now: () => Date.now(),
|
|
337
|
-
onEnd: async (round) => {
|
|
338
|
-
briefRound = round;
|
|
339
|
-
await recordFirstBriefRow(vctx, {
|
|
340
|
-
chatId: req.chatId,
|
|
341
|
-
userId: req._auth.verifiedAuth.claims.userId,
|
|
342
|
-
model: briefModel,
|
|
343
|
-
round,
|
|
344
|
-
});
|
|
345
|
-
if (round.called === false) {
|
|
346
|
-
briefCallPending = false;
|
|
347
|
-
briefContinueOwed = true;
|
|
348
|
-
await recordBrief({ dispatched: false, reason: "no-create-call" });
|
|
349
|
-
}
|
|
350
|
-
},
|
|
351
|
-
})
|
|
352
|
-
: rSse.Ok(),
|
|
587
|
+
stream: raceRound(roundOne),
|
|
353
588
|
abort: res.abort,
|
|
589
|
+
settleOptionLines: createAgentClosingOptions(vctx, {
|
|
590
|
+
actor: rActor.Ok(),
|
|
591
|
+
chatId: req.chatId,
|
|
592
|
+
...(topLevel ? { noApp: true } : {}),
|
|
593
|
+
onOffered: (row) => {
|
|
594
|
+
race?.noteChips(row.options.length);
|
|
595
|
+
return evidence({
|
|
596
|
+
kind: "options",
|
|
597
|
+
options: [...row.options],
|
|
598
|
+
text: JSON.stringify({ asked: row.asked, dropped: row.dropped }),
|
|
599
|
+
});
|
|
600
|
+
},
|
|
601
|
+
}),
|
|
354
602
|
onToolEvidence: async ({ kind, call, text, round, epoch }) => {
|
|
355
603
|
const written = await evidence({ kind, callId: call.id, name: call.name, text, round, epoch });
|
|
356
604
|
if (briefRecorded === false && kind === "receipt" && call.name === "create_vibe" && round === 1 && epoch === 0) {
|
|
@@ -390,7 +638,7 @@ export function createAgentTurnAction(args) {
|
|
|
390
638
|
const framed = agentFirstTurnMint && firstTurnAppClaimed
|
|
391
639
|
? serverCreated === undefined
|
|
392
640
|
? claimAgentAppContext(request.messages, { ownerHandle: resChat.ownerHandle, appSlug: liveAppSlug })
|
|
393
|
-
:
|
|
641
|
+
: serverCreatedFrame(request.messages)
|
|
394
642
|
: request.messages;
|
|
395
643
|
const messages = await inflateAgentFiles(vctx, {
|
|
396
644
|
messages: briefArmed || seededWordsArmed ? withoutFirstBriefLine(framed) : framed,
|
|
@@ -441,14 +689,24 @@ export function createAgentTurnAction(args) {
|
|
|
441
689
|
return Result.Err(rRound);
|
|
442
690
|
return Result.Ok({
|
|
443
691
|
request: { ...loopReq, messages },
|
|
444
|
-
stream: rRound.Ok(),
|
|
692
|
+
stream: raceRound(rRound.Ok()),
|
|
445
693
|
abort: dispatch.abort,
|
|
446
694
|
});
|
|
447
695
|
},
|
|
448
696
|
onError: (error) => {
|
|
449
697
|
vctx.logger.Warn().Any("event", { chatId: req.chatId, promptId, error }).Msg("agent-turn-loop-failed");
|
|
698
|
+
race?.agentFailed();
|
|
699
|
+
preJoin.close();
|
|
450
700
|
},
|
|
451
701
|
});
|
|
702
|
+
providerStream =
|
|
703
|
+
race === undefined || mercuryPending === undefined
|
|
704
|
+
? turnStream
|
|
705
|
+
: deferredStream(race.decided.then((verdict) => {
|
|
706
|
+
const preamble = verdict === "mercury" ? race.mercuryPreamble() : undefined;
|
|
707
|
+
const shown = preamble !== undefined ? withPreambleFirst(withoutPreJoinText(turnStream, preJoin), preamble) : turnStream;
|
|
708
|
+
return withMercuryUsageRounds(shown, { settled: mercuryPending, rounds: () => mercuryRounds });
|
|
709
|
+
}));
|
|
452
710
|
}
|
|
453
711
|
const finalBlockSeq = await handleLlmResponse({
|
|
454
712
|
scope,
|
|
@@ -469,6 +727,12 @@ export function createAgentTurnAction(args) {
|
|
|
469
727
|
platformInitiated: agentWakeTurn,
|
|
470
728
|
step: agentWakeTurn ? "wake" : "agent",
|
|
471
729
|
});
|
|
730
|
+
if (seamTask !== undefined)
|
|
731
|
+
await seamTask;
|
|
732
|
+
if (race !== undefined && lastMercuryRow !== undefined) {
|
|
733
|
+
await recordMercuryRace(vctx, { chatId: req.chatId, promptId: lastMercuryRow, race: race.receipt() });
|
|
734
|
+
alternativeRecorded = true;
|
|
735
|
+
}
|
|
472
736
|
return Result.Ok(finalBlockSeq);
|
|
473
737
|
};
|
|
474
738
|
}
|
|
@@ -617,4 +881,8 @@ async function commitStagedFiles(args) {
|
|
|
617
881
|
...(designCheck === undefined ? {} : { designCheck }),
|
|
618
882
|
});
|
|
619
883
|
}
|
|
884
|
+
function carryWithoutVariant(carry) {
|
|
885
|
+
const { instructionVariant: _variant, ...rest } = carry;
|
|
886
|
+
return rest;
|
|
887
|
+
}
|
|
620
888
|
//# sourceMappingURL=agent-turn-action.js.map
|