@vibes.diy/api-svc 13.1.15 → 13.1.17
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/index.d.ts +9 -0
- package/index.js +9 -0
- package/index.js.map +1 -1
- package/intern/agent-actor.d.ts +31 -0
- package/intern/agent-actor.js +120 -0
- package/intern/agent-actor.js.map +1 -0
- package/intern/agent-belt.d.ts +24 -0
- package/intern/agent-belt.js +157 -0
- package/intern/agent-belt.js.map +1 -0
- package/intern/agent-build-tools.d.ts +40 -0
- package/intern/agent-build-tools.js +96 -0
- package/intern/agent-build-tools.js.map +1 -0
- package/intern/agent-lane-flag.d.ts +7 -0
- package/intern/agent-lane-flag.js +4 -0
- package/intern/agent-lane-flag.js.map +1 -0
- package/intern/agent-read-tools.d.ts +16 -0
- package/intern/agent-read-tools.js +106 -0
- package/intern/agent-read-tools.js.map +1 -0
- package/intern/agent-turn.d.ts +35 -0
- package/intern/agent-turn.js +50 -0
- package/intern/agent-turn.js.map +1 -0
- package/intern/backend-ai-callback.js +3 -11
- package/intern/backend-ai-callback.js.map +1 -1
- package/intern/codegen-build-lock.d.ts +36 -0
- package/intern/codegen-build-lock.js +47 -0
- package/intern/codegen-build-lock.js.map +1 -0
- package/intern/ensure-chat-id.d.ts +5 -1
- package/intern/ensure-chat-id.js +34 -20
- package/intern/ensure-chat-id.js.map +1 -1
- package/intern/mint-decision.d.ts +28 -0
- package/intern/mint-decision.js +46 -0
- package/intern/mint-decision.js.map +1 -0
- package/intern/pre-allocate.d.ts +1 -0
- package/intern/pre-allocate.js +1 -1
- package/intern/pre-allocate.js.map +1 -1
- package/intern/signup-attribution-capture.d.ts +10 -0
- package/intern/signup-attribution-capture.js +46 -0
- package/intern/signup-attribution-capture.js.map +1 -0
- package/package.json +11 -11
- package/public/llm-dispatch.d.ts +7 -0
- package/public/llm-dispatch.js +19 -2
- package/public/llm-dispatch.js.map +1 -1
- package/public/prompt-chat-section.js +18 -3
- package/public/prompt-chat-section.js.map +1 -1
- package/public/who-am-i.d.ts +1 -0
- package/public/who-am-i.js +11 -1
- package/public/who-am-i.js.map +1 -1
package/index.d.ts
CHANGED
|
@@ -38,6 +38,15 @@ export * from "./intern/prune-vibe-logs.js";
|
|
|
38
38
|
export * from "./intern/recovery.js";
|
|
39
39
|
export * from "./intern/llm-tool-loop.js";
|
|
40
40
|
export * from "./intern/work-tools.js";
|
|
41
|
+
export * from "./intern/mint-decision.js";
|
|
42
|
+
export * from "./intern/codegen-build-lock.js";
|
|
43
|
+
export * from "./intern/agent-lane-flag.js";
|
|
44
|
+
export * from "./intern/agent-actor.js";
|
|
45
|
+
export * from "./intern/ensure-chat-id.js";
|
|
46
|
+
export * from "./intern/agent-build-tools.js";
|
|
47
|
+
export * from "./intern/agent-read-tools.js";
|
|
48
|
+
export * from "./intern/agent-belt.js";
|
|
49
|
+
export * from "./intern/agent-turn.js";
|
|
41
50
|
export * from "./intern/work-turn-status.js";
|
|
42
51
|
export * from "./intern/load-research-context.js";
|
|
43
52
|
export * from "./intern/persist-url-research.js";
|
package/index.js
CHANGED
|
@@ -38,6 +38,15 @@ export * from "./intern/prune-vibe-logs.js";
|
|
|
38
38
|
export * from "./intern/recovery.js";
|
|
39
39
|
export * from "./intern/llm-tool-loop.js";
|
|
40
40
|
export * from "./intern/work-tools.js";
|
|
41
|
+
export * from "./intern/mint-decision.js";
|
|
42
|
+
export * from "./intern/codegen-build-lock.js";
|
|
43
|
+
export * from "./intern/agent-lane-flag.js";
|
|
44
|
+
export * from "./intern/agent-actor.js";
|
|
45
|
+
export * from "./intern/ensure-chat-id.js";
|
|
46
|
+
export * from "./intern/agent-build-tools.js";
|
|
47
|
+
export * from "./intern/agent-read-tools.js";
|
|
48
|
+
export * from "./intern/agent-belt.js";
|
|
49
|
+
export * from "./intern/agent-turn.js";
|
|
41
50
|
export * from "./intern/work-turn-status.js";
|
|
42
51
|
export * from "./intern/load-research-context.js";
|
|
43
52
|
export * from "./intern/persist-url-research.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,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,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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Result } from "@adviser/cement";
|
|
2
|
+
import { type AgentToolRefusal } from "@vibes.diy/api-types";
|
|
3
|
+
import { VibesApiSQLCtx } from "../types.js";
|
|
4
|
+
export interface AgentScope {
|
|
5
|
+
readonly ownerHandle: string;
|
|
6
|
+
readonly appSlug?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface AgentActor {
|
|
9
|
+
readonly userId: string;
|
|
10
|
+
readonly ownerHandle: string;
|
|
11
|
+
readonly scope?: AgentScope;
|
|
12
|
+
}
|
|
13
|
+
export declare class AgentRefusalError extends Error {
|
|
14
|
+
readonly refusal: AgentToolRefusal;
|
|
15
|
+
constructor(refusal: AgentToolRefusal);
|
|
16
|
+
}
|
|
17
|
+
export interface ResolveAgentActorArgs {
|
|
18
|
+
readonly userId: string;
|
|
19
|
+
readonly requestedHandle?: string;
|
|
20
|
+
readonly scope?: AgentScope;
|
|
21
|
+
}
|
|
22
|
+
export declare function resolveAgentActor(vctx: VibesApiSQLCtx, args: ResolveAgentActorArgs): Promise<Result<AgentActor, AgentRefusalError>>;
|
|
23
|
+
export declare function assertInScope(actor: AgentActor, target: {
|
|
24
|
+
readonly ownerHandle: string;
|
|
25
|
+
readonly appSlug: string;
|
|
26
|
+
}): Result<void, AgentRefusalError>;
|
|
27
|
+
export interface ResolvedChatApp {
|
|
28
|
+
readonly ownerHandle: string;
|
|
29
|
+
readonly appSlug: string;
|
|
30
|
+
}
|
|
31
|
+
export declare function resolveChatApp(vctx: VibesApiSQLCtx, actor: AgentActor, chatId: string): Promise<Result<ResolvedChatApp, AgentRefusalError>>;
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { Result } from "@adviser/cement";
|
|
2
|
+
import { and, eq } from "drizzle-orm";
|
|
3
|
+
import { isUserSettingDefaultHandle, parseArrayWarning, userSettingItem } from "@vibes.diy/api-types";
|
|
4
|
+
export class AgentRefusalError extends Error {
|
|
5
|
+
refusal;
|
|
6
|
+
constructor(refusal) {
|
|
7
|
+
super(refusal.message ?? refusal.reason);
|
|
8
|
+
this.name = "AgentRefusalError";
|
|
9
|
+
this.refusal = refusal;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
function refuse(refusal) {
|
|
13
|
+
return Result.Err(new AgentRefusalError(refusal));
|
|
14
|
+
}
|
|
15
|
+
async function boundHandles(vctx, userId) {
|
|
16
|
+
const hb = vctx.sql.tables.handleBinding;
|
|
17
|
+
const rows = await vctx.sql.db.select({ handle: hb.handle }).from(hb).where(eq(hb.userId, userId));
|
|
18
|
+
return rows.map((r) => r.handle).sort();
|
|
19
|
+
}
|
|
20
|
+
async function ownsHandle(vctx, userId, handle) {
|
|
21
|
+
const hb = vctx.sql.tables.handleBinding;
|
|
22
|
+
const row = await vctx.sql.db
|
|
23
|
+
.select({ handle: hb.handle })
|
|
24
|
+
.from(hb)
|
|
25
|
+
.where(and(eq(hb.userId, userId), eq(hb.handle, handle)))
|
|
26
|
+
.limit(1)
|
|
27
|
+
.then((r) => r[0]);
|
|
28
|
+
return row !== undefined;
|
|
29
|
+
}
|
|
30
|
+
async function declaredDefaultHandle(vctx, userId) {
|
|
31
|
+
const row = await vctx.sql.db
|
|
32
|
+
.select({ settings: vctx.sql.tables.userSettings.settings })
|
|
33
|
+
.from(vctx.sql.tables.userSettings)
|
|
34
|
+
.where(eq(vctx.sql.tables.userSettings.userId, userId))
|
|
35
|
+
.limit(1)
|
|
36
|
+
.then((r) => r[0]);
|
|
37
|
+
const { filtered: items } = parseArrayWarning(row?.settings ?? [], userSettingItem);
|
|
38
|
+
for (const item of items) {
|
|
39
|
+
if (isUserSettingDefaultHandle(item)) {
|
|
40
|
+
return (await ownsHandle(vctx, userId, item.ownerHandle)) ? item.ownerHandle : undefined;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
export async function resolveAgentActor(vctx, args) {
|
|
46
|
+
const { userId, requestedHandle, scope } = args;
|
|
47
|
+
if (scope !== undefined) {
|
|
48
|
+
if (requestedHandle !== undefined && requestedHandle !== scope.ownerHandle) {
|
|
49
|
+
return refuse({
|
|
50
|
+
ok: false,
|
|
51
|
+
reason: "out-of-scope",
|
|
52
|
+
message: `This conversation is about ${scope.ownerHandle}'s work; it cannot act as ${requestedHandle}.`,
|
|
53
|
+
scope: { ownerHandle: scope.ownerHandle, ...(scope.appSlug === undefined ? {} : { appSlug: scope.appSlug }) },
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
if ((await ownsHandle(vctx, userId, scope.ownerHandle)) === false) {
|
|
57
|
+
return refuse({ ok: false, reason: "not-owner", message: `Not signed in as ${scope.ownerHandle}.` });
|
|
58
|
+
}
|
|
59
|
+
return Result.Ok({ userId, ownerHandle: scope.ownerHandle, scope });
|
|
60
|
+
}
|
|
61
|
+
if (requestedHandle !== undefined) {
|
|
62
|
+
if ((await ownsHandle(vctx, userId, requestedHandle)) === false) {
|
|
63
|
+
return refuse({ ok: false, reason: "not-owner", message: `Not signed in as ${requestedHandle}.` });
|
|
64
|
+
}
|
|
65
|
+
return Result.Ok({ userId, ownerHandle: requestedHandle });
|
|
66
|
+
}
|
|
67
|
+
const declared = await declaredDefaultHandle(vctx, userId);
|
|
68
|
+
if (declared !== undefined)
|
|
69
|
+
return Result.Ok({ userId, ownerHandle: declared });
|
|
70
|
+
const handles = await boundHandles(vctx, userId);
|
|
71
|
+
if (handles.length === 1)
|
|
72
|
+
return Result.Ok({ userId, ownerHandle: handles[0] });
|
|
73
|
+
return refuse({
|
|
74
|
+
ok: false,
|
|
75
|
+
reason: "ambiguous-handle",
|
|
76
|
+
message: handles.length === 0
|
|
77
|
+
? "This account has no handle yet."
|
|
78
|
+
: "Several handles are bound to this account — ask which one to act as.",
|
|
79
|
+
candidates: handles,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
export function assertInScope(actor, target) {
|
|
83
|
+
const scope = actor.scope;
|
|
84
|
+
if (scope === undefined)
|
|
85
|
+
return Result.Ok(undefined);
|
|
86
|
+
if (target.ownerHandle !== scope.ownerHandle || (scope.appSlug !== undefined && target.appSlug !== scope.appSlug)) {
|
|
87
|
+
return refuse({
|
|
88
|
+
ok: false,
|
|
89
|
+
reason: "out-of-scope",
|
|
90
|
+
message: `This conversation is about ${scope.ownerHandle}/${scope.appSlug ?? "*"}.`,
|
|
91
|
+
scope: { ownerHandle: scope.ownerHandle, ...(scope.appSlug === undefined ? {} : { appSlug: scope.appSlug }) },
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
return Result.Ok(undefined);
|
|
95
|
+
}
|
|
96
|
+
export async function resolveChatApp(vctx, actor, chatId) {
|
|
97
|
+
const cc = vctx.sql.tables.chatContexts;
|
|
98
|
+
const chat = await vctx.sql.db
|
|
99
|
+
.select({ appSlug: cc.appSlug, ownerHandle: cc.ownerHandle })
|
|
100
|
+
.from(cc)
|
|
101
|
+
.where(and(eq(cc.chatId, chatId), eq(cc.userId, actor.userId)))
|
|
102
|
+
.limit(1)
|
|
103
|
+
.then((r) => r[0]);
|
|
104
|
+
if (chat === undefined) {
|
|
105
|
+
return refuse({ ok: false, reason: "not-owner", message: "That app is not on this account." });
|
|
106
|
+
}
|
|
107
|
+
if (chat.ownerHandle !== actor.ownerHandle) {
|
|
108
|
+
return refuse({
|
|
109
|
+
ok: false,
|
|
110
|
+
reason: "ambiguous-handle",
|
|
111
|
+
message: `That app publishes under ${chat.ownerHandle}. Act as that handle to change it.`,
|
|
112
|
+
candidates: [chat.ownerHandle],
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
const rScope = assertInScope(actor, { ownerHandle: chat.ownerHandle, appSlug: chat.appSlug });
|
|
116
|
+
if (rScope.isErr())
|
|
117
|
+
return Result.Err(rScope.Err());
|
|
118
|
+
return Result.Ok({ ownerHandle: chat.ownerHandle, appSlug: chat.appSlug });
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=agent-actor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-actor.js","sourceRoot":"","sources":["../../jsr/intern/agent-actor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { ToolDefinition } from "@vibes.diy/call-ai-v2";
|
|
2
|
+
import { VibesApiSQLCtx } from "../types.js";
|
|
3
|
+
import type { LlmToolExecutor } from "./llm-tool-loop.js";
|
|
4
|
+
import type { AgentActor } from "./agent-actor.js";
|
|
5
|
+
import { type AgentBuildDispatcher } from "./agent-build-tools.js";
|
|
6
|
+
import { type FetchUrlToolContext } from "./fetch-url-tool.js";
|
|
7
|
+
export declare const CREATE_VIBE_TOOL_NAME = "create_vibe";
|
|
8
|
+
export declare const EDIT_VIBE_TOOL_NAME = "edit_vibe";
|
|
9
|
+
export interface AgentBelt {
|
|
10
|
+
readonly definitions: readonly ToolDefinition[];
|
|
11
|
+
readonly executor: LlmToolExecutor;
|
|
12
|
+
}
|
|
13
|
+
export interface AgentBeltArgs {
|
|
14
|
+
readonly actor: AgentActor;
|
|
15
|
+
readonly chatId?: string;
|
|
16
|
+
readonly vfs: ReadonlyMap<string, string>;
|
|
17
|
+
readonly fetchUrl?: FetchUrlToolContext;
|
|
18
|
+
readonly dispatcher: AgentBuildDispatcher;
|
|
19
|
+
readonly onDispatch: (dispatched: {
|
|
20
|
+
readonly chatId: string;
|
|
21
|
+
readonly appSlug: string;
|
|
22
|
+
}) => void;
|
|
23
|
+
}
|
|
24
|
+
export declare function createAgentBelt(vctx: VibesApiSQLCtx, args: AgentBeltArgs): AgentBelt;
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { Result, exception2Result } from "@adviser/cement";
|
|
2
|
+
import { createAgentReadTools } from "./agent-read-tools.js";
|
|
3
|
+
import { runCreateVibeTool, runEditVibeTool } from "./agent-build-tools.js";
|
|
4
|
+
import { createWorkToolBelt } from "./work-tools.js";
|
|
5
|
+
import { FETCH_URL_TOOL_NAME } from "./fetch-url-tool.js";
|
|
6
|
+
export const CREATE_VIBE_TOOL_NAME = "create_vibe";
|
|
7
|
+
export const EDIT_VIBE_TOOL_NAME = "edit_vibe";
|
|
8
|
+
export function createAgentBelt(vctx, args) {
|
|
9
|
+
const reads = createAgentReadTools(vctx, {
|
|
10
|
+
actor: args.actor,
|
|
11
|
+
...(args.chatId === undefined ? {} : { chatId: args.chatId }),
|
|
12
|
+
vfs: args.vfs,
|
|
13
|
+
});
|
|
14
|
+
const urlBelt = args.fetchUrl === undefined || args.fetchUrl.activatedUrls.length === 0
|
|
15
|
+
? undefined
|
|
16
|
+
: createWorkToolBelt(new Map(), { fetchUrl: args.fetchUrl });
|
|
17
|
+
const urlDefinitions = (urlBelt?.definitions ?? []).filter((d) => d.function.name === FETCH_URL_TOOL_NAME);
|
|
18
|
+
const definitions = [
|
|
19
|
+
...reads.definitions,
|
|
20
|
+
...urlDefinitions,
|
|
21
|
+
{
|
|
22
|
+
type: "function",
|
|
23
|
+
function: {
|
|
24
|
+
name: CREATE_VIBE_TOOL_NAME,
|
|
25
|
+
description: "Start building a new app for the user. Call this as your FIRST action on a fresh request — do not ask a " +
|
|
26
|
+
"question first. The build runs behind the conversation, so you can talk with the user while it happens and " +
|
|
27
|
+
"refine it on the next turn. Fill the fields from your own judgment about what they asked for.",
|
|
28
|
+
parameters: {
|
|
29
|
+
type: "object",
|
|
30
|
+
properties: {
|
|
31
|
+
prompt: { type: "string", description: "What the user asked for, in their own words." },
|
|
32
|
+
enrichedPrompt: { type: "string", description: "The build brief: what to make, in one or two sentences." },
|
|
33
|
+
skills: { type: "array", items: { type: "string" }, description: "Capability names from the catalog." },
|
|
34
|
+
pairs: {
|
|
35
|
+
type: "array",
|
|
36
|
+
description: "Up to three title/address candidates for the app.",
|
|
37
|
+
items: {
|
|
38
|
+
type: "object",
|
|
39
|
+
properties: { title: { type: "string" }, slug: { type: "string" } },
|
|
40
|
+
required: ["title", "slug"],
|
|
41
|
+
additionalProperties: false,
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
iconDescription: { type: "string", description: "One phrase describing an icon for the app." },
|
|
45
|
+
theme: { type: "string", description: "A theme name from the curated set." },
|
|
46
|
+
textureNote: { type: "string", description: "A short look-and-feel note." },
|
|
47
|
+
privacySensitive: {
|
|
48
|
+
type: "boolean",
|
|
49
|
+
description: "True when the app's central subject is inherently private — a diary, health, money.",
|
|
50
|
+
},
|
|
51
|
+
deferred: {
|
|
52
|
+
type: "object",
|
|
53
|
+
description: "Capabilities this app needs but that the first build deliberately leaves for later. Each `why` is one short " +
|
|
54
|
+
"phrase the owner will read when it is offered back to them.",
|
|
55
|
+
properties: {
|
|
56
|
+
access: {
|
|
57
|
+
type: "object",
|
|
58
|
+
properties: { needed: { type: "boolean" }, why: { type: "string" } },
|
|
59
|
+
required: ["needed", "why"],
|
|
60
|
+
additionalProperties: false,
|
|
61
|
+
},
|
|
62
|
+
backend: {
|
|
63
|
+
type: "object",
|
|
64
|
+
properties: { recommended: { type: "boolean" }, why: { type: "string" } },
|
|
65
|
+
required: ["recommended", "why"],
|
|
66
|
+
additionalProperties: false,
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
additionalProperties: false,
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
required: ["prompt"],
|
|
73
|
+
additionalProperties: false,
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
type: "function",
|
|
79
|
+
function: {
|
|
80
|
+
name: EDIT_VIBE_TOOL_NAME,
|
|
81
|
+
description: "Change the app this conversation is about. Pass the change as an instruction in plain language. If you have " +
|
|
82
|
+
"read the app, pass the version you read as baseFsId so your change cannot land on top of newer work.",
|
|
83
|
+
parameters: {
|
|
84
|
+
type: "object",
|
|
85
|
+
properties: {
|
|
86
|
+
instruction: { type: "string", description: "The change to make, in plain language." },
|
|
87
|
+
baseFsId: { type: "string", description: "The version you read, from list_versions." },
|
|
88
|
+
focusPath: { type: "string", description: "The file the change is mostly about, e.g. App.jsx." },
|
|
89
|
+
skills: {
|
|
90
|
+
type: "array",
|
|
91
|
+
items: { type: "string" },
|
|
92
|
+
description: "Capabilities this change needs that the app does not have yet.",
|
|
93
|
+
},
|
|
94
|
+
selected: {
|
|
95
|
+
type: "object",
|
|
96
|
+
description: "Base this edit on a specific earlier version instead of the current one.",
|
|
97
|
+
properties: {
|
|
98
|
+
kind: { type: "string", enum: ["version"] },
|
|
99
|
+
fsId: { type: "string", description: "The version to base the edit on, from list_versions." },
|
|
100
|
+
},
|
|
101
|
+
required: ["kind", "fsId"],
|
|
102
|
+
additionalProperties: false,
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
required: ["instruction"],
|
|
106
|
+
additionalProperties: false,
|
|
107
|
+
},
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
];
|
|
111
|
+
const executor = async (input) => {
|
|
112
|
+
if (input.call.name === CREATE_VIBE_TOOL_NAME) {
|
|
113
|
+
const rArgs = parseArgs(input.call.arguments);
|
|
114
|
+
if (rArgs.isErr())
|
|
115
|
+
return toolJson({ ok: false, reason: "invalid-input", message: rArgs.Err().message });
|
|
116
|
+
const r = await runCreateVibeTool(vctx, { actor: args.actor, input: rArgs.Ok(), dispatcher: args.dispatcher });
|
|
117
|
+
if (r.isErr())
|
|
118
|
+
return toolJson(r.Err().refusal);
|
|
119
|
+
args.onDispatch({ chatId: r.Ok().chatId, appSlug: r.Ok().appSlug });
|
|
120
|
+
return toolJson(r.Ok());
|
|
121
|
+
}
|
|
122
|
+
if (input.call.name === EDIT_VIBE_TOOL_NAME) {
|
|
123
|
+
if (args.chatId === undefined) {
|
|
124
|
+
return toolJson({
|
|
125
|
+
ok: false,
|
|
126
|
+
reason: "out-of-scope",
|
|
127
|
+
message: "There is no app in this conversation yet — create one first.",
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
const rArgs = parseArgs(input.call.arguments);
|
|
131
|
+
if (rArgs.isErr())
|
|
132
|
+
return toolJson({ ok: false, reason: "invalid-input", message: rArgs.Err().message });
|
|
133
|
+
const r = await runEditVibeTool(vctx, {
|
|
134
|
+
actor: args.actor,
|
|
135
|
+
chatId: args.chatId,
|
|
136
|
+
input: rArgs.Ok(),
|
|
137
|
+
dispatcher: args.dispatcher,
|
|
138
|
+
});
|
|
139
|
+
if (r.isErr())
|
|
140
|
+
return toolJson(r.Err().refusal);
|
|
141
|
+
args.onDispatch({ chatId: r.Ok().chatId, appSlug: r.Ok().appSlug });
|
|
142
|
+
return toolJson(r.Ok());
|
|
143
|
+
}
|
|
144
|
+
if (urlBelt !== undefined && input.call.name === FETCH_URL_TOOL_NAME) {
|
|
145
|
+
return urlBelt.executor(input);
|
|
146
|
+
}
|
|
147
|
+
return reads.executor(input);
|
|
148
|
+
};
|
|
149
|
+
return { definitions, executor };
|
|
150
|
+
}
|
|
151
|
+
function toolJson(payload) {
|
|
152
|
+
return Result.Ok(JSON.stringify(payload));
|
|
153
|
+
}
|
|
154
|
+
function parseArgs(raw) {
|
|
155
|
+
return exception2Result(() => JSON.parse(raw));
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=agent-belt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-belt.js","sourceRoot":"","sources":["../../jsr/intern/agent-belt.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Result } from "@adviser/cement";
|
|
2
|
+
import { type AgentBuildDispatched, type EditVibeToolInput } from "@vibes.diy/api-types";
|
|
3
|
+
import { VibesApiSQLCtx } from "../types.js";
|
|
4
|
+
import { AgentRefusalError, type AgentActor } from "./agent-actor.js";
|
|
5
|
+
import { mintDecisionFromToolInput } from "./mint-decision.js";
|
|
6
|
+
export interface AgentBuildDispatcher {
|
|
7
|
+
mint(args: {
|
|
8
|
+
readonly userId: string;
|
|
9
|
+
readonly ownerHandle: string;
|
|
10
|
+
readonly prompt: string;
|
|
11
|
+
readonly decision: ReturnType<typeof mintDecisionFromToolInput>;
|
|
12
|
+
}): Promise<Result<{
|
|
13
|
+
readonly chatId: string;
|
|
14
|
+
readonly appSlug: string;
|
|
15
|
+
readonly ownerHandle: string;
|
|
16
|
+
}>>;
|
|
17
|
+
edit(args: {
|
|
18
|
+
readonly userId: string;
|
|
19
|
+
readonly chatId: string;
|
|
20
|
+
readonly instruction: string;
|
|
21
|
+
readonly focusPath?: string;
|
|
22
|
+
readonly skills?: readonly string[];
|
|
23
|
+
readonly selected?: EditVibeToolInput["selected"];
|
|
24
|
+
}): Promise<Result<{
|
|
25
|
+
readonly promptId?: string;
|
|
26
|
+
}>>;
|
|
27
|
+
}
|
|
28
|
+
export interface RunCreateVibeArgs {
|
|
29
|
+
readonly actor: AgentActor;
|
|
30
|
+
readonly input: unknown;
|
|
31
|
+
readonly dispatcher: AgentBuildDispatcher;
|
|
32
|
+
}
|
|
33
|
+
export declare function runCreateVibeTool(vctx: VibesApiSQLCtx, args: RunCreateVibeArgs): Promise<Result<AgentBuildDispatched, AgentRefusalError>>;
|
|
34
|
+
export interface RunEditVibeArgs {
|
|
35
|
+
readonly actor: AgentActor;
|
|
36
|
+
readonly chatId: string;
|
|
37
|
+
readonly input: unknown;
|
|
38
|
+
readonly dispatcher: AgentBuildDispatcher;
|
|
39
|
+
}
|
|
40
|
+
export declare function runEditVibeTool(vctx: VibesApiSQLCtx, args: RunEditVibeArgs): Promise<Result<AgentBuildDispatched, AgentRefusalError>>;
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { Result } from "@adviser/cement";
|
|
2
|
+
import { type } from "arktype";
|
|
3
|
+
import { createVibeToolInput, editVibeToolInput } from "@vibes.diy/api-types";
|
|
4
|
+
import { curatedThemes, getLlmCatalogNames } from "@vibes.diy/prompts";
|
|
5
|
+
import { AgentRefusalError, resolveChatApp } from "./agent-actor.js";
|
|
6
|
+
import { mintDecisionFromToolInput } from "./mint-decision.js";
|
|
7
|
+
import { peekBuildLock } from "./codegen-build-lock.js";
|
|
8
|
+
import { loadVersionTimeline } from "./version-timeline.js";
|
|
9
|
+
function refuse(refusal) {
|
|
10
|
+
return Result.Err(new AgentRefusalError(refusal));
|
|
11
|
+
}
|
|
12
|
+
export async function runCreateVibeTool(vctx, args) {
|
|
13
|
+
const scope = args.actor.scope;
|
|
14
|
+
if (scope !== undefined) {
|
|
15
|
+
return refuse({
|
|
16
|
+
ok: false,
|
|
17
|
+
reason: "out-of-scope",
|
|
18
|
+
message: "This conversation is about an existing app; it cannot create a new one.",
|
|
19
|
+
scope: { ownerHandle: scope.ownerHandle, ...(scope.appSlug === undefined ? {} : { appSlug: scope.appSlug }) },
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
const parsed = createVibeToolInput(args.input);
|
|
23
|
+
if (parsed instanceof type.errors) {
|
|
24
|
+
return refuse({ ok: false, reason: "invalid-input", message: parsed.summary });
|
|
25
|
+
}
|
|
26
|
+
const decision = mintDecisionFromToolInput(parsed, {
|
|
27
|
+
catalogNames: await getLlmCatalogNames(),
|
|
28
|
+
curatedThemes: new Set(curatedThemes.map((t) => t.slug)),
|
|
29
|
+
});
|
|
30
|
+
const rMint = await args.dispatcher.mint({
|
|
31
|
+
userId: args.actor.userId,
|
|
32
|
+
ownerHandle: args.actor.ownerHandle,
|
|
33
|
+
prompt: parsed.prompt,
|
|
34
|
+
decision,
|
|
35
|
+
});
|
|
36
|
+
if (rMint.isErr()) {
|
|
37
|
+
return refuse({ ok: false, reason: "failed", message: "Could not start the build just now." });
|
|
38
|
+
}
|
|
39
|
+
const minted = rMint.Ok();
|
|
40
|
+
return Result.Ok({ ok: true, chatId: minted.chatId, ownerHandle: minted.ownerHandle, appSlug: minted.appSlug });
|
|
41
|
+
}
|
|
42
|
+
export async function runEditVibeTool(vctx, args) {
|
|
43
|
+
const parsed = editVibeToolInput(args.input);
|
|
44
|
+
if (parsed instanceof type.errors) {
|
|
45
|
+
return refuse({ ok: false, reason: "invalid-input", message: parsed.summary });
|
|
46
|
+
}
|
|
47
|
+
const rApp = await resolveChatApp(vctx, args.actor, args.chatId);
|
|
48
|
+
if (rApp.isErr())
|
|
49
|
+
return Result.Err(rApp.Err());
|
|
50
|
+
const chat = rApp.Ok();
|
|
51
|
+
const held = peekBuildLock(vctx.connections, args.chatId);
|
|
52
|
+
if (held !== undefined) {
|
|
53
|
+
return refuse({
|
|
54
|
+
ok: false,
|
|
55
|
+
reason: "busy",
|
|
56
|
+
inFlightPromptId: held,
|
|
57
|
+
message: "A build is already running for this app — this change can go next.",
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
if (parsed.baseFsId !== undefined) {
|
|
61
|
+
const rTimeline = await loadVersionTimeline(vctx, args.chatId);
|
|
62
|
+
if (rTimeline.isErr()) {
|
|
63
|
+
return refuse({ ok: false, reason: "failed", message: "Could not read this app's version history." });
|
|
64
|
+
}
|
|
65
|
+
const timeline = rTimeline.Ok();
|
|
66
|
+
const head = timeline.length > 0 ? timeline[timeline.length - 1] : undefined;
|
|
67
|
+
if (head !== undefined && head.fsId !== parsed.baseFsId) {
|
|
68
|
+
return refuse({
|
|
69
|
+
ok: false,
|
|
70
|
+
reason: "stale-base",
|
|
71
|
+
currentFsId: head.fsId,
|
|
72
|
+
message: "The app changed since you last read it — read it again before editing.",
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
const rDispatch = await args.dispatcher.edit({
|
|
77
|
+
userId: args.actor.userId,
|
|
78
|
+
chatId: args.chatId,
|
|
79
|
+
instruction: parsed.instruction,
|
|
80
|
+
...(parsed.focusPath === undefined ? {} : { focusPath: parsed.focusPath }),
|
|
81
|
+
...(parsed.skills === undefined ? {} : { skills: parsed.skills }),
|
|
82
|
+
...(parsed.selected === undefined ? {} : { selected: parsed.selected }),
|
|
83
|
+
});
|
|
84
|
+
if (rDispatch.isErr()) {
|
|
85
|
+
return refuse({ ok: false, reason: "failed", message: "Could not start the build just now." });
|
|
86
|
+
}
|
|
87
|
+
const promptId = rDispatch.Ok().promptId;
|
|
88
|
+
return Result.Ok({
|
|
89
|
+
ok: true,
|
|
90
|
+
chatId: args.chatId,
|
|
91
|
+
ownerHandle: chat.ownerHandle,
|
|
92
|
+
appSlug: chat.appSlug,
|
|
93
|
+
...(promptId === undefined ? {} : { promptId }),
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=agent-build-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-build-tools.js","sourceRoot":"","sources":["../../jsr/intern/agent-build-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-lane-flag.js","sourceRoot":"","sources":["../../jsr/intern/agent-lane-flag.ts"],"names":[],"mappings":"AAgBA,MAAM,UAAU,gBAAgB,CAAC,IAAoF;IACnH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,MAAM,CAAC;AACxD,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ToolDefinition } from "@vibes.diy/call-ai-v2";
|
|
2
|
+
import { VibesApiSQLCtx } from "../types.js";
|
|
3
|
+
import type { LlmToolExecutor } from "./llm-tool-loop.js";
|
|
4
|
+
import { type AgentActor } from "./agent-actor.js";
|
|
5
|
+
export declare const READ_SETTINGS_TOOL_NAME = "read_app_settings";
|
|
6
|
+
export declare const LIST_VERSIONS_TOOL_NAME = "list_versions";
|
|
7
|
+
export interface AgentReadTools {
|
|
8
|
+
readonly definitions: readonly ToolDefinition[];
|
|
9
|
+
readonly executor: LlmToolExecutor;
|
|
10
|
+
}
|
|
11
|
+
export interface AgentReadToolsArgs {
|
|
12
|
+
readonly actor: AgentActor;
|
|
13
|
+
readonly chatId?: string;
|
|
14
|
+
readonly vfs: ReadonlyMap<string, string>;
|
|
15
|
+
}
|
|
16
|
+
export declare function createAgentReadTools(vctx: VibesApiSQLCtx, args: AgentReadToolsArgs): AgentReadTools;
|