@vibes.diy/api-svc 14.0.21 → 14.0.23
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 +12 -0
- package/create-handler.js.map +1 -1
- package/evento-handler-manifest.js +2 -0
- package/evento-handler-manifest.js.map +1 -1
- package/intern/agent-assembly.d.ts +1 -0
- package/intern/agent-assembly.js +6 -1
- package/intern/agent-assembly.js.map +1 -1
- package/intern/agent-belt.d.ts +4 -1
- package/intern/agent-belt.js +12 -3
- package/intern/agent-belt.js.map +1 -1
- package/intern/agent-build-tools.d.ts +4 -0
- package/intern/agent-build-tools.js +6 -0
- package/intern/agent-build-tools.js.map +1 -1
- package/intern/agent-dispatcher.d.ts +1 -1
- package/intern/agent-dispatcher.js +4 -4
- package/intern/agent-dispatcher.js.map +1 -1
- package/intern/agent-evidence.d.ts +12 -0
- package/intern/agent-evidence.js +70 -0
- package/intern/agent-evidence.js.map +1 -0
- package/intern/agent-file-tools.d.ts +12 -0
- package/intern/agent-file-tools.js +162 -0
- package/intern/agent-file-tools.js.map +1 -0
- package/intern/agent-file-validation.d.ts +9 -0
- package/intern/agent-file-validation.js +81 -0
- package/intern/agent-file-validation.js.map +1 -0
- package/intern/agent-instruction.d.ts +1 -1
- package/intern/agent-instruction.js +1 -1
- package/intern/agent-lane-flag.d.ts +7 -0
- package/intern/agent-lane-flag.js +3 -0
- package/intern/agent-lane-flag.js.map +1 -1
- package/intern/agent-session-instruction.d.ts +1 -0
- package/intern/agent-session-instruction.js +43 -0
- package/intern/agent-session-instruction.js.map +1 -0
- package/intern/agent-session-runtime.d.ts +39 -0
- package/intern/agent-session-runtime.js +247 -0
- package/intern/agent-session-runtime.js.map +1 -0
- package/intern/agent-session-store.d.ts +6 -0
- package/intern/agent-session-store.js +52 -0
- package/intern/agent-session-store.js.map +1 -0
- package/intern/agent-session.d.ts +193 -0
- package/intern/agent-session.js +180 -0
- package/intern/agent-session.js.map +1 -0
- package/intern/agent-turn.d.ts +5 -1
- package/intern/agent-turn.js +7 -3
- package/intern/agent-turn.js.map +1 -1
- package/intern/agent-wake.d.ts +10 -6
- package/intern/agent-wake.js +3 -1
- package/intern/agent-wake.js.map +1 -1
- package/intern/llm-tool-loop.d.ts +11 -1
- package/intern/llm-tool-loop.js +79 -7
- package/intern/llm-tool-loop.js.map +1 -1
- package/intern/mint-fire-core.js +3 -3
- package/intern/mint-fire-core.js.map +1 -1
- package/intern/open-turn-store.js +2 -2
- package/intern/open-turn-store.js.map +1 -1
- package/intern/process-access-bindings.d.ts +1 -0
- package/intern/process-access-bindings.js +1 -1
- package/intern/process-access-bindings.js.map +1 -1
- package/intern/prompt-dispatch-context.d.ts +4 -0
- package/intern/prompt-dispatch-context.js +19 -0
- package/intern/prompt-dispatch-context.js.map +1 -0
- package/intern/work-tools.d.ts +1 -0
- package/intern/work-tools.js +1 -1
- package/intern/work-tools.js.map +1 -1
- package/package.json +12 -11
- package/public/fork-app.js +24 -26
- package/public/fork-app.js.map +1 -1
- package/public/fs-prompt.d.ts +2 -1
- package/public/fs-prompt.js +57 -2
- package/public/fs-prompt.js.map +1 -1
- package/public/llm-dispatch.d.ts +2 -2
- package/public/llm-dispatch.js +26 -1
- package/public/llm-dispatch.js.map +1 -1
- package/public/open-chat.d.ts +2 -2
- package/public/open-chat.js +25 -0
- package/public/open-chat.js.map +1 -1
- package/public/prompt-chat-section.js +302 -12
- package/public/prompt-chat-section.js.map +1 -1
- package/public/report-top-vibes-by-traffic.d.ts +5 -0
- package/public/report-top-vibes-by-traffic.js +69 -0
- package/public/report-top-vibes-by-traffic.js.map +1 -0
- package/public/vibe-traffic-source.d.ts +114 -0
- package/public/vibe-traffic-source.js +322 -0
- package/public/vibe-traffic-source.js.map +1 -0
- package/types.d.ts +5 -0
- package/types.js.map +1 -1
- package/usage-report/codegen-delivery-alert.js +2 -2
- package/usage-report/codegen-delivery-alert.js.map +1 -1
- package/usage-report/vibe-traffic-alert-util.d.ts +74 -0
- package/usage-report/vibe-traffic-alert-util.js +237 -0
- package/usage-report/vibe-traffic-alert-util.js.map +1 -0
- package/usage-report/vibe-traffic-alert.d.ts +2 -0
- package/usage-report/vibe-traffic-alert.js +99 -0
- package/usage-report/vibe-traffic-alert.js.map +1 -0
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
import { Result, exception2Result } from "@adviser/cement";
|
|
2
|
+
import { AGENT_SESSION_IDLE, createAgentSession } from "./agent-session.js";
|
|
3
|
+
import { readAgentSession, saveAgentSession } from "./agent-session-store.js";
|
|
4
|
+
import { registerTurnTerminalWaiter } from "./turn-terminal.js";
|
|
5
|
+
import { renderBuildSettledSentence } from "./agent-wake.js";
|
|
6
|
+
import { and, eq } from "drizzle-orm";
|
|
7
|
+
import { PromptAndBlockMsgs, parseArrayWarning, editVibeToolInput, agentFileCommit, } from "@vibes.diy/api-types";
|
|
8
|
+
import { type } from "arktype";
|
|
9
|
+
import { peekBuildLockEntry, BUILD_LOCK_DEADLINE_MS } from "./codegen-build-lock.js";
|
|
10
|
+
const sessions = new WeakMap();
|
|
11
|
+
async function readBuildTerminal(vctx, input) {
|
|
12
|
+
const table = vctx.sql.tables.chatSections;
|
|
13
|
+
const rows = await exception2Result(() => vctx.sql.db
|
|
14
|
+
.select({ blocks: table.blocks })
|
|
15
|
+
.from(table)
|
|
16
|
+
.where(and(eq(table.chatId, input.chatId), eq(table.promptId, input.promptId))));
|
|
17
|
+
if (rows.isErr())
|
|
18
|
+
return Result.Err(rows.Err());
|
|
19
|
+
return Result.Ok(rows.Ok().some((row) => parseArrayWarning(row.blocks, PromptAndBlockMsgs).filtered.some((block) => block.type === "block.end")));
|
|
20
|
+
}
|
|
21
|
+
export function hasLiveAgentSession(scope, chatId) {
|
|
22
|
+
return sessions.get(scope)?.has(chatId) === true;
|
|
23
|
+
}
|
|
24
|
+
export async function deliverAgentSession(vctx, input, event) {
|
|
25
|
+
for (;;) {
|
|
26
|
+
const acquired = await acquireAgentSession(vctx, input);
|
|
27
|
+
if (acquired.isErr())
|
|
28
|
+
return Result.Err(acquired.Err());
|
|
29
|
+
const { live, created } = acquired.Ok();
|
|
30
|
+
if (live.session.snapshot().acceptedIds.includes(event.id)) {
|
|
31
|
+
if (created)
|
|
32
|
+
live.close();
|
|
33
|
+
return Result.Ok({ live, created: false });
|
|
34
|
+
}
|
|
35
|
+
const accepted = await live.session.deliver(event);
|
|
36
|
+
if (accepted.isOk())
|
|
37
|
+
return acquired;
|
|
38
|
+
if (accepted.Err().message === AGENT_SESSION_IDLE) {
|
|
39
|
+
live.close();
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
if (created)
|
|
43
|
+
live.close();
|
|
44
|
+
return Result.Err(accepted.Err());
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
export async function acquireAgentSession(vctx, input, readTerminal = readBuildTerminal) {
|
|
48
|
+
let registry = sessions.get(vctx.connections);
|
|
49
|
+
if (registry === undefined) {
|
|
50
|
+
registry = new Map();
|
|
51
|
+
sessions.set(vctx.connections, registry);
|
|
52
|
+
}
|
|
53
|
+
const existing = registry.get(input.chatId);
|
|
54
|
+
if (existing !== undefined) {
|
|
55
|
+
const found = await existing;
|
|
56
|
+
if (registry.get(input.chatId) !== existing)
|
|
57
|
+
return acquireAgentSession(vctx, input, readTerminal);
|
|
58
|
+
if (found.isErr())
|
|
59
|
+
return Result.Err(found.Err());
|
|
60
|
+
if (found.Ok().session.snapshot().status !== "idle")
|
|
61
|
+
return Result.Ok({ live: found.Ok(), created: false });
|
|
62
|
+
found.Ok().close();
|
|
63
|
+
}
|
|
64
|
+
const owner = registry;
|
|
65
|
+
const started = start();
|
|
66
|
+
owner.set(input.chatId, started);
|
|
67
|
+
const result = await started;
|
|
68
|
+
if (result.isErr()) {
|
|
69
|
+
if (owner.get(input.chatId) === started)
|
|
70
|
+
owner.delete(input.chatId);
|
|
71
|
+
return Result.Err(result.Err());
|
|
72
|
+
}
|
|
73
|
+
return Result.Ok({ live: result.Ok(), created: true });
|
|
74
|
+
async function start() {
|
|
75
|
+
const stored = await readAgentSession(vctx.sql, input.chatId);
|
|
76
|
+
if (stored.isErr())
|
|
77
|
+
return Result.Err(stored.Err());
|
|
78
|
+
const snapshot = stored.Ok();
|
|
79
|
+
const promptId = vctx.sthis.nextId(12).str;
|
|
80
|
+
const session = createAgentSession({
|
|
81
|
+
snapshot: snapshot === undefined ? undefined : { ...snapshot, status: "running" },
|
|
82
|
+
idleMs: 1_000,
|
|
83
|
+
save: (snapshot) => saveAgentSession(vctx.sql, input, { ...snapshot, activePromptId: promptId }),
|
|
84
|
+
});
|
|
85
|
+
const waiters = new Map();
|
|
86
|
+
let execute;
|
|
87
|
+
let commitFiles;
|
|
88
|
+
let pumping = false;
|
|
89
|
+
let closed = false;
|
|
90
|
+
async function report(id, text, resultHandleId) {
|
|
91
|
+
const saved = await session.settle(id, text, resultHandleId);
|
|
92
|
+
if (saved.isErr())
|
|
93
|
+
vctx.logger.Error().Err(saved).Str("chatId", input.chatId).Msg("agent-session-result-save-failed");
|
|
94
|
+
else
|
|
95
|
+
vctx.logger.Info().Any("event", { chatId: input.chatId, handleId: id }).Msg("agent-session-result-recorded");
|
|
96
|
+
}
|
|
97
|
+
async function watch(promptId, id = promptId) {
|
|
98
|
+
if (waiters.has(id) || closed)
|
|
99
|
+
return;
|
|
100
|
+
const deadlineAt = session.snapshot().handles.find((handle) => handle.id === id)?.deadlineAt ?? Date.now() + BUILD_LOCK_DEADLINE_MS;
|
|
101
|
+
const waiter = registerTurnTerminalWaiter({
|
|
102
|
+
scope: vctx.connections,
|
|
103
|
+
chatId: input.chatId,
|
|
104
|
+
promptId,
|
|
105
|
+
deadlineMs: Math.max(0, deadlineAt - Date.now()),
|
|
106
|
+
});
|
|
107
|
+
waiters.set(id, waiter);
|
|
108
|
+
const saved = await session.register({ id, promptId, state: "running", deadlineAt });
|
|
109
|
+
if (saved.isErr()) {
|
|
110
|
+
waiter.cancel();
|
|
111
|
+
waiters.delete(id);
|
|
112
|
+
vctx.logger.Error().Err(saved).Msg("agent-session-handle-save-failed");
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
const terminal = await readTerminal(vctx, { chatId: input.chatId, promptId });
|
|
116
|
+
if (terminal.isErr()) {
|
|
117
|
+
vctx.logger.Error().Err(terminal).Str("promptId", promptId).Msg("agent-session-terminal-read-failed");
|
|
118
|
+
closed = true;
|
|
119
|
+
session.fail(terminal.Err());
|
|
120
|
+
for (const pending of waiters.values())
|
|
121
|
+
pending.cancel();
|
|
122
|
+
waiters.clear();
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
if (terminal.Ok()) {
|
|
126
|
+
waiter.cancel();
|
|
127
|
+
waiters.delete(id);
|
|
128
|
+
await report(id, "[build result] The previously dispatched build reached its terminal. Read the current app before making another change.");
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
void waiter.promise.then(async (landing) => {
|
|
132
|
+
waiters.delete(id);
|
|
133
|
+
if (closed)
|
|
134
|
+
return;
|
|
135
|
+
await report(id, landing.kind === "settled"
|
|
136
|
+
? `[build result] ${renderBuildSettledSentence(landing.outcome)}`
|
|
137
|
+
: "[build result] The build did not report a result before its deadline. Its outcome is unknown; inspect the app before retrying.");
|
|
138
|
+
await pump();
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
async function pump() {
|
|
142
|
+
const dispatchEdit = execute;
|
|
143
|
+
if (pumping || closed || dispatchEdit === undefined)
|
|
144
|
+
return;
|
|
145
|
+
if (session.snapshot().handles.some((handle) => handle.state === "running" || handle.state === "dispatching"))
|
|
146
|
+
return;
|
|
147
|
+
pumping = true;
|
|
148
|
+
const held = peekBuildLockEntry(vctx.connections, input.chatId);
|
|
149
|
+
if (held !== undefined) {
|
|
150
|
+
if (session.snapshot().handles.some((handle) => handle.promptId === held.promptId) === false)
|
|
151
|
+
await watch(held.promptId);
|
|
152
|
+
pumping = false;
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
const queued = session.snapshot().handles.find((handle) => handle.state === "queued");
|
|
156
|
+
if (queued === undefined) {
|
|
157
|
+
pumping = false;
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
const parsed = queued.kind === "commit" ? agentFileCommit(queued.input) : editVibeToolInput(queued.input);
|
|
161
|
+
if (parsed instanceof type.errors) {
|
|
162
|
+
await report(queued.id, `[build result] Queued edit is invalid: ${parsed.summary}`);
|
|
163
|
+
pumping = false;
|
|
164
|
+
await pump();
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
const saved = await session.register({ ...queued, state: "dispatching" });
|
|
168
|
+
if (saved.isErr()) {
|
|
169
|
+
vctx.logger.Error().Err(saved).Msg("agent-session-queue-save-failed");
|
|
170
|
+
pumping = false;
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
const result = await exception2Result(async () => {
|
|
174
|
+
if (queued.kind === "commit") {
|
|
175
|
+
const commit = agentFileCommit(queued.input);
|
|
176
|
+
if (commit instanceof type.errors)
|
|
177
|
+
return Result.Err(commit.summary);
|
|
178
|
+
if (commitFiles === undefined)
|
|
179
|
+
return Result.Err("Direct editing is unavailable on this invocation.");
|
|
180
|
+
return commitFiles(commit);
|
|
181
|
+
}
|
|
182
|
+
const edit = editVibeToolInput(queued.input);
|
|
183
|
+
if (edit instanceof type.errors)
|
|
184
|
+
return Result.Err(edit.summary);
|
|
185
|
+
return dispatchEdit(edit);
|
|
186
|
+
});
|
|
187
|
+
if (result.isErr())
|
|
188
|
+
await report(queued.id, queued.kind === "commit"
|
|
189
|
+
? `[commit result] ${JSON.stringify({ ok: false, message: result.Err().message })}`
|
|
190
|
+
: `[build result] The queued edit could not start: ${String(result.Err())}`);
|
|
191
|
+
else {
|
|
192
|
+
const receipt = type({ promptId: "string" });
|
|
193
|
+
const value = result.Ok();
|
|
194
|
+
await report(queued.id, queued.kind === "commit"
|
|
195
|
+
? `[commit result] ${JSON.stringify(result.Ok())}`
|
|
196
|
+
: `[queued edit] Dispatch receipt: ${JSON.stringify(value)}. Wait for its build result before claiming completion.`, queued.kind !== "commit" && receipt.allows(value) ? value.promptId : undefined);
|
|
197
|
+
}
|
|
198
|
+
pumping = false;
|
|
199
|
+
await pump();
|
|
200
|
+
}
|
|
201
|
+
const live = {
|
|
202
|
+
session,
|
|
203
|
+
promptId,
|
|
204
|
+
...(snapshot?.activePromptId !== undefined ? { supersedes: snapshot.activePromptId } : {}),
|
|
205
|
+
watch,
|
|
206
|
+
async queue(edit) {
|
|
207
|
+
const handleId = vctx.sthis.nextId(12).str;
|
|
208
|
+
const saved = await session.register({ id: handleId, state: "queued", input: edit });
|
|
209
|
+
if (saved.isErr())
|
|
210
|
+
return Result.Err(saved.Err());
|
|
211
|
+
void pump();
|
|
212
|
+
return Result.Ok({ handleId, queued: true });
|
|
213
|
+
},
|
|
214
|
+
async queueCommit() {
|
|
215
|
+
const handleId = vctx.sthis.nextId(12).str;
|
|
216
|
+
const saved = await session.queueDraft(handleId);
|
|
217
|
+
if (saved.isErr())
|
|
218
|
+
return Result.Err(saved.Err());
|
|
219
|
+
void pump();
|
|
220
|
+
return Result.Ok({ handleId, queued: true });
|
|
221
|
+
},
|
|
222
|
+
async bind(next, commit) {
|
|
223
|
+
execute = next;
|
|
224
|
+
commitFiles = commit;
|
|
225
|
+
for (const handle of session.snapshot().handles) {
|
|
226
|
+
if (handle.state === "running" && handle.promptId !== undefined)
|
|
227
|
+
await watch(handle.promptId, handle.id);
|
|
228
|
+
if (closed)
|
|
229
|
+
return;
|
|
230
|
+
if (handle.state === "dispatching")
|
|
231
|
+
await report(handle.id, "[build result] Session restarted during dispatch. The outcome is unknown; inspect the app before retrying this edit.");
|
|
232
|
+
}
|
|
233
|
+
await pump();
|
|
234
|
+
},
|
|
235
|
+
close() {
|
|
236
|
+
closed = true;
|
|
237
|
+
session.stop();
|
|
238
|
+
for (const waiter of waiters.values())
|
|
239
|
+
waiter.cancel();
|
|
240
|
+
if (owner.get(input.chatId) === started)
|
|
241
|
+
owner.delete(input.chatId);
|
|
242
|
+
},
|
|
243
|
+
};
|
|
244
|
+
return Result.Ok(live);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
//# sourceMappingURL=agent-session-runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-session-runtime.js","sourceRoot":"","sources":["../../jsr/intern/agent-session-runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Result } from "@adviser/cement";
|
|
2
|
+
import type { OpenTurnInput, OpenTurnSql } from "./open-turn-store.js";
|
|
3
|
+
import { type AgentSessionSnapshot } from "./agent-session.js";
|
|
4
|
+
export declare const AGENT_SESSION_RECORD_ID = "@agent-session";
|
|
5
|
+
export declare function readAgentSession(sql: OpenTurnSql, chatId: string): Promise<Result<AgentSessionSnapshot | undefined>>;
|
|
6
|
+
export declare function saveAgentSession(sql: OpenTurnSql, input: Omit<OpenTurnInput, "promptId" | "kind" | "variant">, snapshot: AgentSessionSnapshot): Promise<Result<void>>;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { Result, exception2Result } from "@adviser/cement";
|
|
2
|
+
import { and, eq } from "drizzle-orm";
|
|
3
|
+
import { type } from "arktype";
|
|
4
|
+
import { agentSessionSnapshot } from "./agent-session.js";
|
|
5
|
+
export const AGENT_SESSION_RECORD_ID = "@agent-session";
|
|
6
|
+
export async function readAgentSession(sql, chatId) {
|
|
7
|
+
const table = sql.tables.openTurns;
|
|
8
|
+
const rows = await exception2Result(() => sql.db
|
|
9
|
+
.select({ value: table.agentSession })
|
|
10
|
+
.from(table)
|
|
11
|
+
.where(and(eq(table.chatId, chatId), eq(table.promptId, AGENT_SESSION_RECORD_ID)))
|
|
12
|
+
.limit(1));
|
|
13
|
+
if (rows.isErr())
|
|
14
|
+
return Result.Err(rows.Err());
|
|
15
|
+
const value = rows.Ok()[0]?.value;
|
|
16
|
+
if (value === undefined || value === null)
|
|
17
|
+
return Result.Ok(undefined);
|
|
18
|
+
const json = exception2Result(() => JSON.parse(value));
|
|
19
|
+
if (json.isErr())
|
|
20
|
+
return Result.Err(json.Err());
|
|
21
|
+
const parsed = agentSessionSnapshot(json.Ok());
|
|
22
|
+
if (parsed instanceof type.errors)
|
|
23
|
+
return Result.Err(parsed.summary);
|
|
24
|
+
return Result.Ok(parsed);
|
|
25
|
+
}
|
|
26
|
+
export async function saveAgentSession(sql, input, snapshot) {
|
|
27
|
+
const table = sql.tables.openTurns;
|
|
28
|
+
const now = new Date().toISOString();
|
|
29
|
+
const value = JSON.stringify(snapshot);
|
|
30
|
+
const saved = await exception2Result(() => sql.db
|
|
31
|
+
.insert(table)
|
|
32
|
+
.values({
|
|
33
|
+
...input,
|
|
34
|
+
promptId: AGENT_SESSION_RECORD_ID,
|
|
35
|
+
kind: "codegen",
|
|
36
|
+
status: "closed",
|
|
37
|
+
startedAt: now,
|
|
38
|
+
deadlineAt: now,
|
|
39
|
+
closedAt: now,
|
|
40
|
+
created: now,
|
|
41
|
+
updated: now,
|
|
42
|
+
agentSession: value,
|
|
43
|
+
})
|
|
44
|
+
.onConflictDoUpdate({
|
|
45
|
+
target: [table.chatId, table.promptId],
|
|
46
|
+
set: { agentSession: value, updated: now },
|
|
47
|
+
}));
|
|
48
|
+
if (saved.isErr())
|
|
49
|
+
return Result.Err(saved.Err());
|
|
50
|
+
return Result.Ok();
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=agent-session-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-session-store.js","sourceRoot":"","sources":["../../jsr/intern/agent-session-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { Result } from "@adviser/cement";
|
|
2
|
+
import { LLMMessage } from "@vibes.diy/call-ai-v2";
|
|
3
|
+
import { type AgentFileChange } from "@vibes.diy/api-types";
|
|
4
|
+
declare const sessionInput: import("arktype/internal/variants/object.ts").ObjectType<{
|
|
5
|
+
id: string;
|
|
6
|
+
messages: ({
|
|
7
|
+
role: "assistant" | "system" | "user";
|
|
8
|
+
content: ({
|
|
9
|
+
type: "text";
|
|
10
|
+
text: string;
|
|
11
|
+
cache_control?: {
|
|
12
|
+
type: "ephemeral";
|
|
13
|
+
ttl?: "1h" | "5m" | undefined;
|
|
14
|
+
} | undefined;
|
|
15
|
+
} | {
|
|
16
|
+
type: "image_url";
|
|
17
|
+
image_url: {
|
|
18
|
+
url: string;
|
|
19
|
+
};
|
|
20
|
+
cache_control?: {
|
|
21
|
+
type: "ephemeral";
|
|
22
|
+
ttl?: "1h" | "5m" | undefined;
|
|
23
|
+
} | undefined;
|
|
24
|
+
} | {
|
|
25
|
+
type: "vibes_file";
|
|
26
|
+
uploadId: string;
|
|
27
|
+
name: string;
|
|
28
|
+
mimeType: string;
|
|
29
|
+
kind: "image" | "text";
|
|
30
|
+
originalUploadId?: string | undefined;
|
|
31
|
+
size?: number | undefined;
|
|
32
|
+
})[];
|
|
33
|
+
} | {
|
|
34
|
+
role: "assistant";
|
|
35
|
+
content: string | null;
|
|
36
|
+
tool_calls: {
|
|
37
|
+
id: string;
|
|
38
|
+
type: "function";
|
|
39
|
+
function: {
|
|
40
|
+
name: string;
|
|
41
|
+
arguments: string;
|
|
42
|
+
};
|
|
43
|
+
}[];
|
|
44
|
+
} | {
|
|
45
|
+
role: "tool";
|
|
46
|
+
content: string;
|
|
47
|
+
tool_call_id: string;
|
|
48
|
+
})[];
|
|
49
|
+
}, {}>;
|
|
50
|
+
declare const sessionHandle: import("arktype/internal/variants/object.ts").ObjectType<{
|
|
51
|
+
id: string;
|
|
52
|
+
state: "dispatching" | "queued" | "running" | "settled";
|
|
53
|
+
promptId?: string | undefined;
|
|
54
|
+
input?: unknown;
|
|
55
|
+
result?: string | undefined;
|
|
56
|
+
deadlineAt?: number | undefined;
|
|
57
|
+
kind?: "commit" | undefined;
|
|
58
|
+
resultHandleId?: string | undefined;
|
|
59
|
+
}, {}>;
|
|
60
|
+
export declare const agentSessionSnapshot: import("arktype/internal/variants/object.ts").ObjectType<{
|
|
61
|
+
version: 1;
|
|
62
|
+
status: "idle" | "running";
|
|
63
|
+
messages: ({
|
|
64
|
+
role: "assistant" | "system" | "user";
|
|
65
|
+
content: ({
|
|
66
|
+
type: "text";
|
|
67
|
+
text: string;
|
|
68
|
+
cache_control?: {
|
|
69
|
+
type: "ephemeral";
|
|
70
|
+
ttl?: "1h" | "5m" | undefined;
|
|
71
|
+
} | undefined;
|
|
72
|
+
} | {
|
|
73
|
+
type: "image_url";
|
|
74
|
+
image_url: {
|
|
75
|
+
url: string;
|
|
76
|
+
};
|
|
77
|
+
cache_control?: {
|
|
78
|
+
type: "ephemeral";
|
|
79
|
+
ttl?: "1h" | "5m" | undefined;
|
|
80
|
+
} | undefined;
|
|
81
|
+
} | {
|
|
82
|
+
type: "vibes_file";
|
|
83
|
+
uploadId: string;
|
|
84
|
+
name: string;
|
|
85
|
+
mimeType: string;
|
|
86
|
+
kind: "image" | "text";
|
|
87
|
+
originalUploadId?: string | undefined;
|
|
88
|
+
size?: number | undefined;
|
|
89
|
+
})[];
|
|
90
|
+
} | {
|
|
91
|
+
role: "assistant";
|
|
92
|
+
content: string | null;
|
|
93
|
+
tool_calls: {
|
|
94
|
+
id: string;
|
|
95
|
+
type: "function";
|
|
96
|
+
function: {
|
|
97
|
+
name: string;
|
|
98
|
+
arguments: string;
|
|
99
|
+
};
|
|
100
|
+
}[];
|
|
101
|
+
} | {
|
|
102
|
+
role: "tool";
|
|
103
|
+
content: string;
|
|
104
|
+
tool_call_id: string;
|
|
105
|
+
})[];
|
|
106
|
+
inbox: {
|
|
107
|
+
id: string;
|
|
108
|
+
messages: ({
|
|
109
|
+
role: "assistant" | "system" | "user";
|
|
110
|
+
content: ({
|
|
111
|
+
type: "text";
|
|
112
|
+
text: string;
|
|
113
|
+
cache_control?: {
|
|
114
|
+
type: "ephemeral";
|
|
115
|
+
ttl?: "1h" | "5m" | undefined;
|
|
116
|
+
} | undefined;
|
|
117
|
+
} | {
|
|
118
|
+
type: "image_url";
|
|
119
|
+
image_url: {
|
|
120
|
+
url: string;
|
|
121
|
+
};
|
|
122
|
+
cache_control?: {
|
|
123
|
+
type: "ephemeral";
|
|
124
|
+
ttl?: "1h" | "5m" | undefined;
|
|
125
|
+
} | undefined;
|
|
126
|
+
} | {
|
|
127
|
+
type: "vibes_file";
|
|
128
|
+
uploadId: string;
|
|
129
|
+
name: string;
|
|
130
|
+
mimeType: string;
|
|
131
|
+
kind: "image" | "text";
|
|
132
|
+
originalUploadId?: string | undefined;
|
|
133
|
+
size?: number | undefined;
|
|
134
|
+
})[];
|
|
135
|
+
} | {
|
|
136
|
+
role: "assistant";
|
|
137
|
+
content: string | null;
|
|
138
|
+
tool_calls: {
|
|
139
|
+
id: string;
|
|
140
|
+
type: "function";
|
|
141
|
+
function: {
|
|
142
|
+
name: string;
|
|
143
|
+
arguments: string;
|
|
144
|
+
};
|
|
145
|
+
}[];
|
|
146
|
+
} | {
|
|
147
|
+
role: "tool";
|
|
148
|
+
content: string;
|
|
149
|
+
tool_call_id: string;
|
|
150
|
+
})[];
|
|
151
|
+
}[];
|
|
152
|
+
handles: {
|
|
153
|
+
id: string;
|
|
154
|
+
state: "dispatching" | "queued" | "running" | "settled";
|
|
155
|
+
promptId?: string | undefined;
|
|
156
|
+
input?: unknown;
|
|
157
|
+
result?: string | undefined;
|
|
158
|
+
deadlineAt?: number | undefined;
|
|
159
|
+
kind?: "commit" | undefined;
|
|
160
|
+
resultHandleId?: string | undefined;
|
|
161
|
+
}[];
|
|
162
|
+
acceptedIds: string[];
|
|
163
|
+
draft?: {
|
|
164
|
+
path: string;
|
|
165
|
+
original?: string | undefined;
|
|
166
|
+
contents: string;
|
|
167
|
+
}[] | undefined;
|
|
168
|
+
activePromptId?: string | undefined;
|
|
169
|
+
}, {}>;
|
|
170
|
+
export type AgentSessionSnapshot = typeof agentSessionSnapshot.infer;
|
|
171
|
+
export type AgentSessionHandle = typeof sessionHandle.infer;
|
|
172
|
+
export type AgentSessionInput = typeof sessionInput.infer;
|
|
173
|
+
export declare const AGENT_SESSION_IDLE = "agent-session-idle";
|
|
174
|
+
export interface AgentSession {
|
|
175
|
+
messages(): LLMMessage[];
|
|
176
|
+
snapshot(): AgentSessionSnapshot;
|
|
177
|
+
takenResults(): AgentSessionHandle[];
|
|
178
|
+
deliver(input: AgentSessionInput): Promise<Result<void>>;
|
|
179
|
+
register(handle: AgentSessionHandle): Promise<Result<void>>;
|
|
180
|
+
settle(id: string, result: string, resultHandleId?: string): Promise<Result<void>>;
|
|
181
|
+
checkpoint(messages: readonly LLMMessage[]): Promise<Result<void>>;
|
|
182
|
+
next(): Promise<Result<LLMMessage[] | undefined>>;
|
|
183
|
+
fail(error: Error): void;
|
|
184
|
+
stage(change: AgentFileChange): Promise<Result<void>>;
|
|
185
|
+
queueDraft(id: string): Promise<Result<void>>;
|
|
186
|
+
stop(): void;
|
|
187
|
+
}
|
|
188
|
+
export declare function createAgentSession(args: {
|
|
189
|
+
readonly snapshot?: AgentSessionSnapshot;
|
|
190
|
+
readonly save: (snapshot: AgentSessionSnapshot) => Promise<Result<void>>;
|
|
191
|
+
readonly idleMs: number;
|
|
192
|
+
}): AgentSession;
|
|
193
|
+
export {};
|