@vibes.diy/api-svc 13.1.17 → 13.1.18
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/analytics.d.ts +12 -0
- package/analytics.js +16 -0
- package/analytics.js.map +1 -1
- package/index.d.ts +5 -0
- package/index.js +5 -0
- package/index.js.map +1 -1
- package/intern/agent-assembly.d.ts +18 -0
- package/intern/agent-assembly.js +73 -0
- package/intern/agent-assembly.js.map +1 -0
- package/intern/agent-dispatcher.d.ts +17 -0
- package/intern/agent-dispatcher.js +72 -0
- package/intern/agent-dispatcher.js.map +1 -0
- package/intern/agent-instruction.d.ts +2 -0
- package/intern/agent-instruction.js +116 -0
- package/intern/agent-instruction.js.map +1 -0
- package/intern/agent-router.d.ts +17 -0
- package/intern/agent-router.js +30 -0
- package/intern/agent-router.js.map +1 -0
- package/intern/agent-turn.d.ts +4 -1
- package/intern/agent-turn.js +10 -13
- package/intern/agent-turn.js.map +1 -1
- package/intern/carry-app-settings.d.ts +12 -0
- package/intern/carry-app-settings.js +20 -0
- package/intern/carry-app-settings.js.map +1 -0
- package/intern/mint-job-store.d.ts +1 -0
- package/intern/mint-job-store.js +14 -0
- package/intern/mint-job-store.js.map +1 -1
- package/intern/pre-allocate.d.ts +10 -0
- package/intern/pre-allocate.js +10 -0
- package/intern/pre-allocate.js.map +1 -1
- package/intern/prompt-assembly.d.ts +1 -0
- package/intern/prompt-assembly.js +8 -0
- package/intern/prompt-assembly.js.map +1 -1
- package/intern/prompt-streaming.js +3 -2
- package/intern/prompt-streaming.js.map +1 -1
- package/intern/settings-carry-policy.d.ts +7 -0
- package/intern/settings-carry-policy.js +52 -0
- package/intern/settings-carry-policy.js.map +1 -0
- package/intern/turn-reach.d.ts +21 -0
- package/intern/turn-reach.js +35 -0
- package/intern/turn-reach.js.map +1 -0
- package/package.json +12 -11
- package/public/app-documents-head-query.d.ts +1 -0
- package/public/app-documents-head-query.js +13 -0
- package/public/app-documents-head-query.js.map +1 -1
- package/public/app-seq-allocation.js +6 -0
- package/public/app-seq-allocation.js.map +1 -1
- package/public/app-setting-items.d.ts +1 -0
- package/public/app-setting-items.js +21 -13
- package/public/app-setting-items.js.map +1 -1
- package/public/fork-app.js +14 -0
- package/public/fork-app.js.map +1 -1
- package/public/list-models.d.ts +2 -13
- package/public/list-models.js +7 -3
- package/public/list-models.js.map +1 -1
- package/public/llm-dispatch.d.ts +2 -1
- package/public/llm-dispatch.js +17 -2
- package/public/llm-dispatch.js.map +1 -1
- package/public/open-chat.d.ts +1 -0
- package/public/open-chat.js +5 -6
- package/public/open-chat.js.map +1 -1
- package/public/prompt-chat-section.js +172 -7
- package/public/prompt-chat-section.js.map +1 -1
- package/public/stream-assembly.d.ts +7 -2
- package/public/stream-assembly.js +18 -8
- package/public/stream-assembly.js.map +1 -1
- package/usage-report/codegen-delivery-alert-util.d.ts +80 -0
- package/usage-report/codegen-delivery-alert-util.js +220 -0
- package/usage-report/codegen-delivery-alert-util.js.map +1 -0
- package/usage-report/codegen-delivery-alert.d.ts +2 -0
- package/usage-report/codegen-delivery-alert.js +112 -0
- package/usage-report/codegen-delivery-alert.js.map +1 -0
package/analytics.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type Logger } from "@adviser/cement";
|
|
2
|
+
import type { TurnReachProjection } from "./intern/turn-reach.js";
|
|
2
3
|
export interface AnalyticsCtx {
|
|
3
4
|
readonly logger: Logger;
|
|
4
5
|
readonly analyticsFetch: typeof fetch;
|
|
@@ -25,3 +26,14 @@ export interface ImgGenOutcomeArgs {
|
|
|
25
26
|
readonly status?: number;
|
|
26
27
|
}
|
|
27
28
|
export declare function captureImgGenOutcome(vctx: AnalyticsCtx, args: ImgGenOutcomeArgs): void;
|
|
29
|
+
export type CodegenTurnOutcome = "applied" | "no-code" | "error";
|
|
30
|
+
export interface CodegenTurnSettledArgs {
|
|
31
|
+
readonly outcome: CodegenTurnOutcome;
|
|
32
|
+
readonly userId: string;
|
|
33
|
+
readonly ownerHandle: string;
|
|
34
|
+
readonly appSlug: string;
|
|
35
|
+
readonly reach: TurnReachProjection;
|
|
36
|
+
readonly firstBuild: boolean;
|
|
37
|
+
readonly msFromSubmit: number;
|
|
38
|
+
}
|
|
39
|
+
export declare function captureCodegenTurnSettled(vctx: AnalyticsCtx, args: CodegenTurnSettledArgs): void;
|
package/analytics.js
CHANGED
|
@@ -85,4 +85,20 @@ export function captureImgGenOutcome(vctx, args) {
|
|
|
85
85
|
});
|
|
86
86
|
vctx.waitUntil?.(promise);
|
|
87
87
|
}
|
|
88
|
+
export function captureCodegenTurnSettled(vctx, args) {
|
|
89
|
+
const promise = capturePostHogServerEvent(vctx, {
|
|
90
|
+
event: "codegen_turn_settled",
|
|
91
|
+
distinctId: args.userId,
|
|
92
|
+
properties: {
|
|
93
|
+
outcome: args.outcome,
|
|
94
|
+
first_build: args.firstBuild,
|
|
95
|
+
ms_from_submit: args.msFromSubmit,
|
|
96
|
+
owner_handle: args.ownerHandle,
|
|
97
|
+
app_slug: args.appSlug,
|
|
98
|
+
...args.reach,
|
|
99
|
+
},
|
|
100
|
+
}).catch(() => {
|
|
101
|
+
});
|
|
102
|
+
vctx.waitUntil?.(promise);
|
|
103
|
+
}
|
|
88
104
|
//# sourceMappingURL=analytics.js.map
|
package/analytics.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analytics.js","sourceRoot":"","sources":["../jsr/analytics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAe,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"analytics.js","sourceRoot":"","sources":["../jsr/analytics.ts"],"names":[],"mappings":"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"}
|
package/index.d.ts
CHANGED
|
@@ -47,7 +47,12 @@ export * from "./intern/agent-build-tools.js";
|
|
|
47
47
|
export * from "./intern/agent-read-tools.js";
|
|
48
48
|
export * from "./intern/agent-belt.js";
|
|
49
49
|
export * from "./intern/agent-turn.js";
|
|
50
|
+
export * from "./intern/agent-router.js";
|
|
51
|
+
export * from "./intern/agent-instruction.js";
|
|
52
|
+
export * from "./intern/agent-assembly.js";
|
|
53
|
+
export * from "./intern/agent-dispatcher.js";
|
|
50
54
|
export * from "./intern/work-turn-status.js";
|
|
55
|
+
export * from "./intern/turn-reach.js";
|
|
51
56
|
export * from "./intern/load-research-context.js";
|
|
52
57
|
export * from "./intern/persist-url-research.js";
|
|
53
58
|
export * from "./intern/url-research-queue.js";
|
package/index.js
CHANGED
|
@@ -47,7 +47,12 @@ export * from "./intern/agent-build-tools.js";
|
|
|
47
47
|
export * from "./intern/agent-read-tools.js";
|
|
48
48
|
export * from "./intern/agent-belt.js";
|
|
49
49
|
export * from "./intern/agent-turn.js";
|
|
50
|
+
export * from "./intern/agent-router.js";
|
|
51
|
+
export * from "./intern/agent-instruction.js";
|
|
52
|
+
export * from "./intern/agent-assembly.js";
|
|
53
|
+
export * from "./intern/agent-dispatcher.js";
|
|
50
54
|
export * from "./intern/work-turn-status.js";
|
|
55
|
+
export * from "./intern/turn-reach.js";
|
|
51
56
|
export * from "./intern/load-research-context.js";
|
|
52
57
|
export * from "./intern/persist-url-research.js";
|
|
53
58
|
export * from "./intern/url-research-queue.js";
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../jsr/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,YAAY,CAAC;AAC3B,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yCAAyC,CAAC;AACxD,cAAc,oCAAoC,CAAC;AACnD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,eAAe,CAAC;AAC9B,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,cAAc,iBAAiB,CAAC;AAChC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iCAAiC,CAAC;AAChD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mCAAmC,CAAC;AAClD,cAAc,qCAAqC,CAAC;AACpD,cAAc,mCAAmC,CAAC;AAClD,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC;AACjD,cAAc,oCAAoC,CAAC;AACnD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,wCAAwC,CAAC;AACvD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mCAAmC,CAAC;AAClD,cAAc,kCAAkC,CAAC;AACjD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mCAAmC,CAAC;AAClD,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,wCAAwC,CAAC;AACvD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oCAAoC,CAAC;AACnD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,+BAA+B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../jsr/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,YAAY,CAAC;AAC3B,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yCAAyC,CAAC;AACxD,cAAc,oCAAoC,CAAC;AACnD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,eAAe,CAAC;AAC9B,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,cAAc,iBAAiB,CAAC;AAChC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iCAAiC,CAAC;AAChD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mCAAmC,CAAC;AAClD,cAAc,qCAAqC,CAAC;AACpD,cAAc,mCAAmC,CAAC;AAClD,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC;AACjD,cAAc,oCAAoC,CAAC;AACnD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,wCAAwC,CAAC;AACvD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,mCAAmC,CAAC;AAClD,cAAc,kCAAkC,CAAC;AACjD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mCAAmC,CAAC;AAClD,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,wCAAwC,CAAC;AACvD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oCAAoC,CAAC;AACnD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,+BAA+B,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Result } from "@adviser/cement";
|
|
2
|
+
import { ChatMessage } from "@vibes.diy/call-ai-v2";
|
|
3
|
+
import type { VibesApiSQLCtx } from "../types.js";
|
|
4
|
+
export interface AssembleAgentPayloadArgs {
|
|
5
|
+
readonly chatId: string;
|
|
6
|
+
readonly userId: string;
|
|
7
|
+
readonly model: string;
|
|
8
|
+
readonly ownerHandle: string;
|
|
9
|
+
readonly appSlug: string;
|
|
10
|
+
readonly newUserMessages: readonly ChatMessage[];
|
|
11
|
+
readonly legacyHint?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface AssembledAgentPayload {
|
|
14
|
+
readonly model: string;
|
|
15
|
+
readonly messages: ChatMessage[];
|
|
16
|
+
readonly headFsId?: string;
|
|
17
|
+
}
|
|
18
|
+
export declare function assembleAgentPayload(vctx: VibesApiSQLCtx, args: AssembleAgentPayloadArgs): Promise<Result<AssembledAgentPayload>>;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { Result } from "@adviser/cement";
|
|
2
|
+
import { PromptAndBlockMsgs, isPromptResearch, isPromptStatus, parseArrayWarning, RESEARCH_BLOCK_SEQ } from "@vibes.diy/api-types";
|
|
3
|
+
import { ensureLogger } from "@vibes.diy/identity";
|
|
4
|
+
import { and, eq, ne } from "drizzle-orm/sql/expressions";
|
|
5
|
+
import { AGENT_INSTRUCTION } from "./agent-instruction.js";
|
|
6
|
+
import { reconstructConversationMessages } from "./prompt-assembly.js";
|
|
7
|
+
import { inflateFileAttachments } from "./inflate-file-attachments.js";
|
|
8
|
+
import { modelSupportsImageInput } from "./model-vision.js";
|
|
9
|
+
import { loadModels } from "../public/list-models.js";
|
|
10
|
+
import { loadVersionTimeline } from "./version-timeline.js";
|
|
11
|
+
export async function assembleAgentPayload(vctx, args) {
|
|
12
|
+
const chatOwner = await vctx.sql.db
|
|
13
|
+
.select({ userId: vctx.sql.tables.chatContexts.userId })
|
|
14
|
+
.from(vctx.sql.tables.chatContexts)
|
|
15
|
+
.where(eq(vctx.sql.tables.chatContexts.chatId, args.chatId))
|
|
16
|
+
.limit(1)
|
|
17
|
+
.then((rows) => rows[0]);
|
|
18
|
+
if (chatOwner !== undefined && chatOwner.userId !== args.userId) {
|
|
19
|
+
return Result.Err("chat_not_owned");
|
|
20
|
+
}
|
|
21
|
+
const sections = await vctx.sql.db
|
|
22
|
+
.select()
|
|
23
|
+
.from(vctx.sql.tables.chatSections)
|
|
24
|
+
.where(and(eq(vctx.sql.tables.chatSections.chatId, args.chatId), ne(vctx.sql.tables.chatSections.blockSeq, RESEARCH_BLOCK_SEQ)))
|
|
25
|
+
.orderBy(vctx.sql.tables.chatSections.created);
|
|
26
|
+
const allSectionMsgs = [];
|
|
27
|
+
for (const rowSection of sections) {
|
|
28
|
+
const { filtered, warning } = parseArrayWarning(rowSection.blocks, PromptAndBlockMsgs);
|
|
29
|
+
if (warning.length > 0) {
|
|
30
|
+
ensureLogger(vctx.sthis, "assembleAgentPayload").Warn().Any({ parseErrors: warning }).Msg("skip");
|
|
31
|
+
}
|
|
32
|
+
allSectionMsgs.push(...filtered.filter((block) => !isPromptResearch(block) && !isPromptStatus(block)));
|
|
33
|
+
}
|
|
34
|
+
const { messages: reconstructed } = reconstructConversationMessages(allSectionMsgs, { compact: true });
|
|
35
|
+
const rTimeline = await loadVersionTimeline(vctx, args.chatId);
|
|
36
|
+
const headFsId = rTimeline.isOk()
|
|
37
|
+
? rTimeline.Ok().length > 0
|
|
38
|
+
? rTimeline.Ok()[rTimeline.Ok().length - 1]?.fsId
|
|
39
|
+
: undefined
|
|
40
|
+
: undefined;
|
|
41
|
+
const context = [
|
|
42
|
+
`<app-context>`,
|
|
43
|
+
`handle: ${args.ownerHandle}`,
|
|
44
|
+
`app: ${args.appSlug}`,
|
|
45
|
+
...(headFsId === undefined ? [] : [`current version: ${headFsId}`]),
|
|
46
|
+
...(args.legacyHint === undefined ? [] : [args.legacyHint]),
|
|
47
|
+
`</app-context>`,
|
|
48
|
+
].join("\n");
|
|
49
|
+
const assembled = [
|
|
50
|
+
{
|
|
51
|
+
role: "system",
|
|
52
|
+
content: [
|
|
53
|
+
{ type: "text", text: AGENT_INSTRUCTION, cache_control: { type: "ephemeral" } },
|
|
54
|
+
{ type: "text", text: context },
|
|
55
|
+
],
|
|
56
|
+
},
|
|
57
|
+
...reconstructed,
|
|
58
|
+
...args.newUserMessages,
|
|
59
|
+
];
|
|
60
|
+
const hasFileRefs = assembled.some((m) => m.role === "user" && m.content.some((c) => c.type === "vibes_file"));
|
|
61
|
+
if (hasFileRefs === false) {
|
|
62
|
+
return Result.Ok({ model: args.model, messages: assembled, ...(headFsId === undefined ? {} : { headFsId }) });
|
|
63
|
+
}
|
|
64
|
+
const rModels = await loadModels(vctx);
|
|
65
|
+
const supportsImages = rModels.isOk() && modelSupportsImageInput(rModels.Ok().models, args.model);
|
|
66
|
+
const messages = await inflateFileAttachments(vctx, {
|
|
67
|
+
messages: assembled,
|
|
68
|
+
scope: { appSlug: args.appSlug, ownerHandle: args.ownerHandle },
|
|
69
|
+
modelSupportsImages: supportsImages,
|
|
70
|
+
});
|
|
71
|
+
return Result.Ok({ model: args.model, messages, ...(headFsId === undefined ? {} : { headFsId }) });
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=agent-assembly.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-assembly.js","sourceRoot":"","sources":["../../jsr/intern/agent-assembly.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { DashAuthType } from "@vibes.diy/identity";
|
|
2
|
+
import type { MsgBase } from "@vibes.diy/api-types";
|
|
3
|
+
import { VibesApiSQLCtx } from "../types.js";
|
|
4
|
+
import type { AgentBuildDispatcher } from "./agent-build-tools.js";
|
|
5
|
+
export interface AgentDispatchHostCtx {
|
|
6
|
+
readonly send: unknown;
|
|
7
|
+
readonly validated: MsgBase;
|
|
8
|
+
}
|
|
9
|
+
export type AgentDispatchHandle = (ctx: unknown) => Promise<unknown>;
|
|
10
|
+
export interface AgentDispatcherArgs {
|
|
11
|
+
readonly vctx: VibesApiSQLCtx;
|
|
12
|
+
readonly host: AgentDispatchHostCtx;
|
|
13
|
+
readonly auth: DashAuthType;
|
|
14
|
+
readonly outerTid: string;
|
|
15
|
+
readonly handle: AgentDispatchHandle;
|
|
16
|
+
}
|
|
17
|
+
export declare function createAgentBuildDispatcher(args: AgentDispatcherArgs): AgentBuildDispatcher;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { Result, exception2Result } from "@adviser/cement";
|
|
2
|
+
import { ensureLogger } from "@vibes.diy/identity";
|
|
3
|
+
const AGENT_EDIT_ACK_TIMEOUT_MS = 10_000;
|
|
4
|
+
export function createAgentBuildDispatcher(args) {
|
|
5
|
+
const { vctx, host, auth, outerTid, handle } = args;
|
|
6
|
+
const log = ensureLogger(vctx.sthis, "directBuilder");
|
|
7
|
+
return {
|
|
8
|
+
async mint() {
|
|
9
|
+
return Result.Err("create_vibe is not wired on the in-chat lane");
|
|
10
|
+
},
|
|
11
|
+
async edit(editArgs) {
|
|
12
|
+
const synthPayload = {
|
|
13
|
+
type: "vibes.diy.req-prompt-chat-section",
|
|
14
|
+
mode: "codegen",
|
|
15
|
+
auth,
|
|
16
|
+
chatId: editArgs.chatId,
|
|
17
|
+
outerTid,
|
|
18
|
+
directBuild: true,
|
|
19
|
+
prompt: { messages: [{ role: "user", content: [{ type: "text", text: editArgs.instruction }] }] },
|
|
20
|
+
...(editArgs.focusPath === undefined ? {} : { focusPath: editArgs.focusPath }),
|
|
21
|
+
...(editArgs.selected === undefined ? {} : { selected: editArgs.selected }),
|
|
22
|
+
...(editArgs.skills === undefined ? {} : { agentSkills: [...editArgs.skills] }),
|
|
23
|
+
};
|
|
24
|
+
const synthMsg = {
|
|
25
|
+
...host.validated,
|
|
26
|
+
tid: vctx.sthis.nextId(12).str,
|
|
27
|
+
payload: synthPayload,
|
|
28
|
+
};
|
|
29
|
+
let resolveAck;
|
|
30
|
+
const ack = new Promise((resolve) => {
|
|
31
|
+
resolveAck = resolve;
|
|
32
|
+
});
|
|
33
|
+
const baseSend = host.send;
|
|
34
|
+
const watchingSend = Object.create(host.send);
|
|
35
|
+
watchingSend.send = async function (...sendArgs) {
|
|
36
|
+
const msg = sendArgs[1];
|
|
37
|
+
if (msg?.payload?.type === "vibes.diy.res-prompt-chat-section") {
|
|
38
|
+
resolveAck(msg.payload.promptId === undefined ? { acked: true } : { acked: true, promptId: msg.payload.promptId });
|
|
39
|
+
}
|
|
40
|
+
const r = await exception2Result(() => baseSend.send(...sendArgs));
|
|
41
|
+
if (r.isErr()) {
|
|
42
|
+
log.Warn().Err(r).Msg("agent-dispatched turn send dropped (dead socket)");
|
|
43
|
+
return Result.Ok(sendArgs[1]);
|
|
44
|
+
}
|
|
45
|
+
return r.Ok();
|
|
46
|
+
};
|
|
47
|
+
const synthCtx = {
|
|
48
|
+
...host,
|
|
49
|
+
send: watchingSend,
|
|
50
|
+
validated: synthMsg,
|
|
51
|
+
enRequest: synthMsg,
|
|
52
|
+
};
|
|
53
|
+
const run = exception2Result(() => handle(synthCtx)).then((r) => {
|
|
54
|
+
if (r.isErr()) {
|
|
55
|
+
log.Error().Err(r).Str("chatId", editArgs.chatId).Msg("agent-dispatched turn failed");
|
|
56
|
+
resolveAck({ acked: false });
|
|
57
|
+
}
|
|
58
|
+
return r;
|
|
59
|
+
});
|
|
60
|
+
if (vctx.waitUntil !== undefined)
|
|
61
|
+
vctx.waitUntil(run);
|
|
62
|
+
const outcome = await Promise.race([
|
|
63
|
+
ack,
|
|
64
|
+
new Promise((resolve) => setTimeout(() => resolve({ acked: true }), AGENT_EDIT_ACK_TIMEOUT_MS)),
|
|
65
|
+
]);
|
|
66
|
+
if (outcome.acked === false)
|
|
67
|
+
return Result.Err("agent-dispatched turn failed before acking");
|
|
68
|
+
return Result.Ok(outcome.promptId === undefined ? {} : { promptId: outcome.promptId });
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=agent-dispatcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-dispatcher.js","sourceRoot":"","sources":["../../jsr/intern/agent-dispatcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
export const AGENT_INSTRUCTION_VERSION = "2026-09-01.2";
|
|
2
|
+
export const AGENT_INSTRUCTION = [
|
|
3
|
+
"<agent-turn>",
|
|
4
|
+
"You are the Vibes agent. You are talking with the person whose app this is, and you can build",
|
|
5
|
+
"and change that app yourself while you talk. There is one conversation and you own all of it:",
|
|
6
|
+
"answering a question, making a change, and deciding which of those the message called for.",
|
|
7
|
+
"",
|
|
8
|
+
"## Decide, then act",
|
|
9
|
+
"",
|
|
10
|
+
"Every message is one of three things, and you choose:",
|
|
11
|
+
"",
|
|
12
|
+
"- A change to the app → call `edit_vibe`. Do it FIRST, then talk. The build runs behind the",
|
|
13
|
+
" conversation, so dispatching costs the user nothing and asking first costs them the whole build.",
|
|
14
|
+
"- A question about the app → answer it. Use `list_files`, `read_file`, `read_app_settings` and",
|
|
15
|
+
" `list_versions` so the answer is about their actual app and not a plausible one. Never describe",
|
|
16
|
+
" code you have not read.",
|
|
17
|
+
"- Something in between → make the smallest confident change and say what you assumed.",
|
|
18
|
+
"",
|
|
19
|
+
"Prefer acting over asking. A question you could have answered yourself by reading a file is a",
|
|
20
|
+
"round trip the person pays for. Ask only when the answer would change what you build AND you",
|
|
21
|
+
"cannot get it from the app, and then ask exactly one thing.",
|
|
22
|
+
"",
|
|
23
|
+
"## Styling asks are ordinary asks",
|
|
24
|
+
"",
|
|
25
|
+
"'Make it darker', 'less cramped', 'more playful' are changes. Dispatch them like any other edit.",
|
|
26
|
+
"Do not route them anywhere special, do not treat them as a lesser class of request, and do not",
|
|
27
|
+
"ask which shade of what before trying something.",
|
|
28
|
+
"",
|
|
29
|
+
"## backend.js and access.js are yours to write, from the first build",
|
|
30
|
+
"",
|
|
31
|
+
"These are not upgrades to offer later. They are part of building the app right, and you decide",
|
|
32
|
+
"whether the app needs them the same way you decide whether it needs a form.",
|
|
33
|
+
"",
|
|
34
|
+
"Author them when the app involves any of:",
|
|
35
|
+
"",
|
|
36
|
+
"- data more than one person reads or writes,",
|
|
37
|
+
"- work that must happen when nobody is looking (a schedule, a tick, a digest),",
|
|
38
|
+
"- fetching from somewhere else,",
|
|
39
|
+
"- notifications.",
|
|
40
|
+
"",
|
|
41
|
+
"Stay restrained when the app is one person's own data on their own device. A to-do list does not",
|
|
42
|
+
"need a permission model, and writing one anyway makes the app worse and slower to arrive.",
|
|
43
|
+
"",
|
|
44
|
+
"### Private and access.js go together",
|
|
45
|
+
"",
|
|
46
|
+
"A private app can and often should have an `access.js`. These answer different questions:",
|
|
47
|
+
"the app's privacy posture decides WHO CAN BE ADMITTED AT ALL; `access.js` decides who, among",
|
|
48
|
+
"the admitted, may see and change WHICH records. A members-only app where every member can read",
|
|
49
|
+
"every other member's records is usually wrong — a veterinary practice is private to the public",
|
|
50
|
+
"AND each client sees only their own pets. Never widen an app to shared or public because you",
|
|
51
|
+
"want per-record rules, and never skip the rules because the app is private.",
|
|
52
|
+
"",
|
|
53
|
+
"### What changes the moment you touch them",
|
|
54
|
+
"",
|
|
55
|
+
"`backend.js` and `access.js` run the LIVE release of the app for its owner and slug. As soon as",
|
|
56
|
+
"the edit you dispatch mints a release, the new rules and the new server code are what everyone",
|
|
57
|
+
"using the app is running — there is no staging copy of them. Say so before you change permission",
|
|
58
|
+
"rules on an app that has people using it, and prefer widening nothing you were not asked to widen.",
|
|
59
|
+
"Seed data has to satisfy the rules you just wrote; if it cannot, the rules are wrong, not the data.",
|
|
60
|
+
"",
|
|
61
|
+
"## Which handle",
|
|
62
|
+
"",
|
|
63
|
+
"If the account has more than one handle and nothing in the conversation says which one, ASK.",
|
|
64
|
+
"Do not pick. To everybody else, one account's two handles are two different people, and an app",
|
|
65
|
+
"published under the wrong one is published under someone the owner did not choose to be.",
|
|
66
|
+
"",
|
|
67
|
+
"## When a tool says no",
|
|
68
|
+
"",
|
|
69
|
+
"A refusal is information, not a failure. `busy` means their previous build is still running —",
|
|
70
|
+
"say the change is queued behind it and dispatch when the build lands. `stale-base` means the app",
|
|
71
|
+
"moved since you read it — read it again, then dispatch. Never show the person a reason code, an",
|
|
72
|
+
"id, or a tool name; tell them what happened in their words.",
|
|
73
|
+
"",
|
|
74
|
+
"## What you may claim when a build finishes",
|
|
75
|
+
"",
|
|
76
|
+
"A finished build means the change is SAVED. It does not mean the person is looking at it: the",
|
|
77
|
+
"running preview may still be showing the previous version, and a change that touched only",
|
|
78
|
+
"supporting or server files may not visibly change anything at all. So do not announce a specific",
|
|
79
|
+
"visible result as though you had seen it. Say what you changed and let them look —",
|
|
80
|
+
"'I moved the seal animation onto the header — take a look' rather than 'Done, the seal now",
|
|
81
|
+
"animates on the header'. If they say nothing happened, believe them: read the app and check,",
|
|
82
|
+
"rather than repeating the claim.",
|
|
83
|
+
"",
|
|
84
|
+
"## Voice",
|
|
85
|
+
"",
|
|
86
|
+
"Short, plain, and about their app. No preamble before a tool call, no narrating your own",
|
|
87
|
+
"mechanics, no lists of options they did not ask for. One thing per message.",
|
|
88
|
+
"",
|
|
89
|
+
"### Talk about the app, not the code",
|
|
90
|
+
"",
|
|
91
|
+
"The person you are talking to made an app. Most of them do not read code and will never",
|
|
92
|
+
"open a file, and the ones who do would still rather hear what their app DOES. So describe",
|
|
93
|
+
"the app the way they experience it — what someone visiting it can see, add, change, or is",
|
|
94
|
+
"kept out of — and leave the implementation out of your reply entirely.",
|
|
95
|
+
"",
|
|
96
|
+
"Never put these in a message: file names, function or hook names, prop and variable names,",
|
|
97
|
+
"line counts, framework names, and the platform's own jargon. Say 'only people you've added",
|
|
98
|
+
"can post' — never 'writes are gated through can.create'. Say 'the app has no rules yet about",
|
|
99
|
+
"who can change what, so it's using the default' — never 'no custom access.js is defined'.",
|
|
100
|
+
"Say 'the leaderboard sorts by who has read the most' — never 'ProgressList sorts descending",
|
|
101
|
+
"by percent'. If a fact is only expressible in code, it is a fact about your work, not theirs:",
|
|
102
|
+
"leave it out.",
|
|
103
|
+
"",
|
|
104
|
+
"The test before sending: would this read as plain English to someone who has never seen a",
|
|
105
|
+
"program? If a sentence would stop them, say the same thing in terms of what happens on screen.",
|
|
106
|
+
"",
|
|
107
|
+
"This is about vocabulary, not about being vague or soft. Be exact, be short, and never round",
|
|
108
|
+
"off a real limitation to make it sound better — 'I saved the change but I can't see whether",
|
|
109
|
+
"it looks right' stays exactly that blunt.",
|
|
110
|
+
"",
|
|
111
|
+
"Never write the app's code into your reply — no fenced code blocks of app files, no",
|
|
112
|
+
"SEARCH/REPLACE, no 'here is the new App.jsx'. `edit_vibe` writes code; you describe changes.",
|
|
113
|
+
"Quoting one short line back to the user to point at something is fine.",
|
|
114
|
+
"</agent-turn>",
|
|
115
|
+
].join("\n");
|
|
116
|
+
//# sourceMappingURL=agent-instruction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-instruction.js","sourceRoot":"","sources":["../../jsr/intern/agent-instruction.ts"],"names":[],"mappings":"AAiBA,MAAM,CAAC,MAAM,yBAAyB,GAAG,cAAc,CAAC;AAExD,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,cAAc;IACd,+FAA+F;IAC/F,+FAA+F;IAC/F,4FAA4F;IAC5F,EAAE;IACF,qBAAqB;IACrB,EAAE;IACF,uDAAuD;IACvD,EAAE;IACF,6FAA6F;IAC7F,oGAAoG;IACpG,gGAAgG;IAChG,mGAAmG;IACnG,2BAA2B;IAC3B,uFAAuF;IACvF,EAAE;IACF,+FAA+F;IAC/F,8FAA8F;IAC9F,6DAA6D;IAC7D,EAAE;IACF,mCAAmC;IACnC,EAAE;IACF,kGAAkG;IAClG,gGAAgG;IAChG,kDAAkD;IAClD,EAAE;IACF,sEAAsE;IACtE,EAAE;IACF,gGAAgG;IAChG,6EAA6E;IAC7E,EAAE;IACF,2CAA2C;IAC3C,EAAE;IACF,8CAA8C;IAC9C,gFAAgF;IAChF,iCAAiC;IACjC,kBAAkB;IAClB,EAAE;IACF,kGAAkG;IAClG,2FAA2F;IAC3F,EAAE;IACF,uCAAuC;IACvC,EAAE;IACF,2FAA2F;IAC3F,8FAA8F;IAC9F,gGAAgG;IAChG,gGAAgG;IAChG,8FAA8F;IAC9F,6EAA6E;IAC7E,EAAE;IACF,4CAA4C;IAC5C,EAAE;IACF,iGAAiG;IACjG,gGAAgG;IAChG,kGAAkG;IAClG,oGAAoG;IACpG,qGAAqG;IACrG,EAAE;IACF,iBAAiB;IACjB,EAAE;IACF,8FAA8F;IAC9F,gGAAgG;IAChG,0FAA0F;IAC1F,EAAE;IACF,wBAAwB;IACxB,EAAE;IACF,+FAA+F;IAC/F,kGAAkG;IAClG,iGAAiG;IACjG,6DAA6D;IAC7D,EAAE;IACF,6CAA6C;IAC7C,EAAE;IACF,+FAA+F;IAC/F,2FAA2F;IAC3F,kGAAkG;IAClG,oFAAoF;IACpF,4FAA4F;IAC5F,8FAA8F;IAC9F,kCAAkC;IAClC,EAAE;IACF,UAAU;IACV,EAAE;IACF,0FAA0F;IAC1F,6EAA6E;IAC7E,EAAE;IACF,sCAAsC;IACtC,EAAE;IACF,yFAAyF;IACzF,2FAA2F;IAC3F,2FAA2F;IAC3F,wEAAwE;IACxE,EAAE;IACF,4FAA4F;IAC5F,4FAA4F;IAC5F,8FAA8F;IAC9F,2FAA2F;IAC3F,6FAA6F;IAC7F,+FAA+F;IAC/F,eAAe;IACf,EAAE;IACF,2FAA2F;IAC3F,gGAAgG;IAChG,EAAE;IACF,8FAA8F;IAC9F,6FAA6F;IAC7F,2CAA2C;IAC3C,EAAE;IACF,qFAAqF;IACrF,8FAA8F;IAC9F,wEAAwE;IACxE,eAAe;CAChB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export type AgentRouteSkip = "flag-off" | "agent-dispatched" | "not-a-codegen-turn" | "dry-run" | "platform-initiated" | "first-turn";
|
|
2
|
+
export type AgentRouteDecision = {
|
|
3
|
+
readonly route: "agent";
|
|
4
|
+
} | {
|
|
5
|
+
readonly route: "codegen";
|
|
6
|
+
readonly skip: AgentRouteSkip;
|
|
7
|
+
};
|
|
8
|
+
export interface AgentRouteInput {
|
|
9
|
+
readonly agentLane: boolean;
|
|
10
|
+
readonly codegenChatTurn: boolean;
|
|
11
|
+
readonly dryRun: boolean;
|
|
12
|
+
readonly platformInitiated: boolean;
|
|
13
|
+
readonly directBuildRequested: boolean;
|
|
14
|
+
readonly hasPriorTurn: boolean;
|
|
15
|
+
}
|
|
16
|
+
export declare function routeAgentTurn(input: AgentRouteInput): AgentRouteDecision;
|
|
17
|
+
export declare function legacyVariantHint(variant: string | undefined): string | undefined;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export function routeAgentTurn(input) {
|
|
2
|
+
if (input.agentLane === false)
|
|
3
|
+
return { route: "codegen", skip: "flag-off" };
|
|
4
|
+
if (input.directBuildRequested === true)
|
|
5
|
+
return { route: "codegen", skip: "agent-dispatched" };
|
|
6
|
+
if (input.codegenChatTurn === false)
|
|
7
|
+
return { route: "codegen", skip: "not-a-codegen-turn" };
|
|
8
|
+
if (input.dryRun === true)
|
|
9
|
+
return { route: "codegen", skip: "dry-run" };
|
|
10
|
+
if (input.platformInitiated === true)
|
|
11
|
+
return { route: "codegen", skip: "platform-initiated" };
|
|
12
|
+
if (input.hasPriorTurn === false)
|
|
13
|
+
return { route: "codegen", skip: "first-turn" };
|
|
14
|
+
return { route: "agent" };
|
|
15
|
+
}
|
|
16
|
+
export function legacyVariantHint(variant) {
|
|
17
|
+
switch (variant) {
|
|
18
|
+
case "discuss":
|
|
19
|
+
return "The user pressed a button that used to mean 'talk this through, do not write code'.";
|
|
20
|
+
case "work":
|
|
21
|
+
return "The user pressed a button that used to mean 'take your time and make one grounded improvement'.";
|
|
22
|
+
case "access-wizard":
|
|
23
|
+
return "This turn came from the old permissions wizard: the user is asking about who can see and change data.";
|
|
24
|
+
case "upgrade-backend":
|
|
25
|
+
return "This turn came from the old backend upgrade prompt: the user is asking to connect live or shared data.";
|
|
26
|
+
default:
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=agent-router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-router.js","sourceRoot":"","sources":["../../jsr/intern/agent-router.ts"],"names":[],"mappings":"AAoGA,MAAM,UAAU,cAAc,CAAC,KAAsB;IACnD,IAAI,KAAK,CAAC,SAAS,KAAK,KAAK;QAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IAC7E,IAAI,KAAK,CAAC,oBAAoB,KAAK,IAAI;QAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC;IAC/F,IAAI,KAAK,CAAC,eAAe,KAAK,KAAK;QAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC;IAC7F,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI;QAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IACxE,IAAI,KAAK,CAAC,iBAAiB,KAAK,IAAI;QAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC;IAC9F,IAAI,KAAK,CAAC,YAAY,KAAK,KAAK;QAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;IAClF,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC5B,CAAC;AAUD,MAAM,UAAU,iBAAiB,CAAC,OAA2B;IAC3D,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,SAAS;YACZ,OAAO,qFAAqF,CAAC;QAC/F,KAAK,MAAM;YACT,OAAO,iGAAiG,CAAC;QAC3G,KAAK,eAAe;YAClB,OAAO,uGAAuG,CAAC;QACjH,KAAK,iBAAiB;YACpB,OAAO,wGAAwG,CAAC;QAClH;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC"}
|
package/intern/agent-turn.d.ts
CHANGED
|
@@ -2,7 +2,8 @@ import { Result } from "@adviser/cement";
|
|
|
2
2
|
import type { LLMRequest, SseStreamMsg } from "@vibes.diy/call-ai-v2";
|
|
3
3
|
import { VibesApiSQLCtx } from "../types.js";
|
|
4
4
|
import type { AgentActor } from "./agent-actor.js";
|
|
5
|
-
import { type AgentBeltArgs } from "./agent-belt.js";
|
|
5
|
+
import { type AgentBelt, type AgentBeltArgs } from "./agent-belt.js";
|
|
6
|
+
import { type LlmToolLoopBudget } from "./llm-tool-loop.js";
|
|
6
7
|
export declare const AGENT_TOTAL_BUDGET_MS = 120000;
|
|
7
8
|
export declare const AGENT_MAX_TOOL_ROUNDS = 6;
|
|
8
9
|
export declare const AGENT_MAX_TOOL_CALLS = 16;
|
|
@@ -13,6 +14,7 @@ export interface AgentTurnDispatch {
|
|
|
13
14
|
}
|
|
14
15
|
export interface AgentTurnStreamArgs {
|
|
15
16
|
readonly vctx: VibesApiSQLCtx;
|
|
17
|
+
readonly belt?: AgentBelt;
|
|
16
18
|
readonly actor: AgentActor;
|
|
17
19
|
readonly chatId?: string;
|
|
18
20
|
readonly vfs: ReadonlyMap<string, string>;
|
|
@@ -23,6 +25,7 @@ export interface AgentTurnStreamArgs {
|
|
|
23
25
|
readonly abort: AbortController;
|
|
24
26
|
readonly dispatch: (input: {
|
|
25
27
|
request: LLMRequest;
|
|
28
|
+
budget: LlmToolLoopBudget;
|
|
26
29
|
}) => Promise<Result<{
|
|
27
30
|
readonly request: LLMRequest;
|
|
28
31
|
readonly stream: ReadableStream<SseStreamMsg>;
|
package/intern/agent-turn.js
CHANGED
|
@@ -6,18 +6,15 @@ export const AGENT_MAX_TOOL_ROUNDS = 6;
|
|
|
6
6
|
export const AGENT_MAX_TOOL_CALLS = 16;
|
|
7
7
|
export const AGENT_MAX_PROVIDER_ATTEMPTS = AGENT_MAX_TOOL_ROUNDS + 1;
|
|
8
8
|
export function createAgentTurnStream(args) {
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
args.onDispatch?.(d);
|
|
19
|
-
},
|
|
20
|
-
});
|
|
9
|
+
const belt = args.belt ??
|
|
10
|
+
createAgentBelt(args.vctx, {
|
|
11
|
+
actor: args.actor,
|
|
12
|
+
...(args.chatId === undefined ? {} : { chatId: args.chatId }),
|
|
13
|
+
vfs: args.vfs,
|
|
14
|
+
...(args.fetchUrl === undefined ? {} : { fetchUrl: args.fetchUrl }),
|
|
15
|
+
dispatcher: args.dispatcher,
|
|
16
|
+
onDispatch: (d) => args.onDispatch?.(d),
|
|
17
|
+
});
|
|
21
18
|
const budget = createLlmToolLoopBudget({
|
|
22
19
|
totalBudgetMs: AGENT_TOTAL_BUDGET_MS,
|
|
23
20
|
maxAttempts: AGENT_MAX_PROVIDER_ATTEMPTS,
|
|
@@ -33,7 +30,7 @@ export function createAgentTurnStream(args) {
|
|
|
33
30
|
maxToolRounds: AGENT_MAX_TOOL_ROUNDS,
|
|
34
31
|
maxToolCalls: AGENT_MAX_TOOL_CALLS,
|
|
35
32
|
dispatch: async (input) => {
|
|
36
|
-
const r = await args.dispatch({ request: input.request });
|
|
33
|
+
const r = await args.dispatch({ request: input.request, budget: input.budget });
|
|
37
34
|
if (r.isErr())
|
|
38
35
|
return Result.Err(r.Err());
|
|
39
36
|
const out = r.Ok();
|
package/intern/agent-turn.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-turn.js","sourceRoot":"","sources":["../../jsr/intern/agent-turn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAIzC,OAAO,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"agent-turn.js","sourceRoot":"","sources":["../../jsr/intern/agent-turn.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Result } from "@adviser/cement";
|
|
2
|
+
import { type AppSettingItemKey, type AppSettingItemsCtx } from "../public/app-setting-items.js";
|
|
3
|
+
export interface CarryAppSettingsArgs {
|
|
4
|
+
readonly src: AppSettingItemKey;
|
|
5
|
+
readonly dst: AppSettingItemKey;
|
|
6
|
+
readonly includePosture: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface CarryAppSettingsResult {
|
|
9
|
+
readonly carried: readonly string[];
|
|
10
|
+
readonly skippedPresent: readonly string[];
|
|
11
|
+
}
|
|
12
|
+
export declare function carryAppSettings(ctx: AppSettingItemsCtx, args: CarryAppSettingsArgs): Promise<Result<CarryAppSettingsResult>>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Result, exception2Result } from "@adviser/cement";
|
|
2
|
+
import { isAppScopedEntry } from "@vibes.diy/api-types";
|
|
3
|
+
import { insertAppSettingItemIfAbsent, readComposedSettings, } from "../public/app-setting-items.js";
|
|
4
|
+
import { selectCarriedEntries } from "./settings-carry-policy.js";
|
|
5
|
+
export async function carryAppSettings(ctx, args) {
|
|
6
|
+
const rSrc = await exception2Result(() => readComposedSettings(ctx, args.src));
|
|
7
|
+
if (rSrc.isErr())
|
|
8
|
+
return Result.Err(`carryAppSettings: read source failed: ${rSrc.Err().message}`);
|
|
9
|
+
const srcEntries = rSrc.Ok().filter(isAppScopedEntry);
|
|
10
|
+
const carried = [];
|
|
11
|
+
const skippedPresent = [];
|
|
12
|
+
for (const entry of selectCarriedEntries(srcEntries, { includePosture: args.includePosture })) {
|
|
13
|
+
const rIns = await exception2Result(() => insertAppSettingItemIfAbsent(ctx, args.dst, entry));
|
|
14
|
+
if (rIns.isErr())
|
|
15
|
+
return Result.Err(`carryAppSettings: insert ${entry.type} failed: ${rIns.Err().message}`);
|
|
16
|
+
(rIns.Ok() ? carried : skippedPresent).push(entry.type);
|
|
17
|
+
}
|
|
18
|
+
return Result.Ok({ carried, skippedPresent });
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=carry-app-settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"carry-app-settings.js","sourceRoot":"","sources":["../../jsr/intern/carry-app-settings.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EACL,4BAA4B,EAC5B,oBAAoB,GAGrB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AA0BlE,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,GAAuB,EACvB,IAA0B;IAE1B,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/E,IAAI,IAAI,CAAC,KAAK,EAAE;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC,yCAAyC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IAInG,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAEtD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,KAAK,MAAM,KAAK,IAAI,oBAAoB,CAAC,UAAU,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC;QAC9F,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,CAAC,4BAA4B,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;QAC9F,IAAI,IAAI,CAAC,KAAK,EAAE;YAAE,OAAO,MAAM,CAAC,GAAG,CAAC,4BAA4B,KAAK,CAAC,IAAI,YAAY,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5G,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,MAAM,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -31,6 +31,7 @@ export interface MintJobWriteCtx {
|
|
|
31
31
|
readonly jobOrder?: Promise<unknown>;
|
|
32
32
|
}
|
|
33
33
|
export declare function markMintJobLogged(vctx: VibesApiSQLCtx, wctx: MintJobWriteCtx, patch: MintJobPatch): Promise<boolean>;
|
|
34
|
+
export declare function settleMintJobIfLive(vctx: VibesApiSQLCtx, wctx: MintJobWriteCtx): Promise<boolean>;
|
|
34
35
|
export declare function claimMintJob(vctx: VibesApiSQLCtx, chatId: string, fromStatuses: MintJobStatus[], toStatus: MintJobStatus): Promise<Result<boolean>>;
|
|
35
36
|
export declare function getMintJob(vctx: VibesApiSQLCtx, chatId: string): Promise<Result<MintJobRow | undefined>>;
|
|
36
37
|
export declare function getMintJobBySlug(vctx: VibesApiSQLCtx, args: {
|