@vibes.diy/api-svc 14.0.20 → 14.0.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/create-handler.js +12 -0
  2. package/create-handler.js.map +1 -1
  3. package/evento-handler-manifest.js +2 -0
  4. package/evento-handler-manifest.js.map +1 -1
  5. package/index.d.ts +1 -0
  6. package/index.js +1 -0
  7. package/index.js.map +1 -1
  8. package/intern/agent-assembly.d.ts +1 -0
  9. package/intern/agent-assembly.js +6 -1
  10. package/intern/agent-assembly.js.map +1 -1
  11. package/intern/agent-belt.d.ts +4 -1
  12. package/intern/agent-belt.js +13 -3
  13. package/intern/agent-belt.js.map +1 -1
  14. package/intern/agent-build-tools.d.ts +4 -0
  15. package/intern/agent-build-tools.js +6 -0
  16. package/intern/agent-build-tools.js.map +1 -1
  17. package/intern/agent-dispatcher.d.ts +4 -0
  18. package/intern/agent-dispatcher.js +13 -5
  19. package/intern/agent-dispatcher.js.map +1 -1
  20. package/intern/agent-evidence.d.ts +12 -0
  21. package/intern/agent-evidence.js +70 -0
  22. package/intern/agent-evidence.js.map +1 -0
  23. package/intern/agent-file-tools.d.ts +12 -0
  24. package/intern/agent-file-tools.js +162 -0
  25. package/intern/agent-file-tools.js.map +1 -0
  26. package/intern/agent-file-validation.d.ts +9 -0
  27. package/intern/agent-file-validation.js +81 -0
  28. package/intern/agent-file-validation.js.map +1 -0
  29. package/intern/agent-instruction.d.ts +1 -1
  30. package/intern/agent-instruction.js +6 -1
  31. package/intern/agent-instruction.js.map +1 -1
  32. package/intern/agent-lane-flag.d.ts +14 -0
  33. package/intern/agent-lane-flag.js +6 -0
  34. package/intern/agent-lane-flag.js.map +1 -1
  35. package/intern/agent-session-instruction.d.ts +1 -0
  36. package/intern/agent-session-instruction.js +43 -0
  37. package/intern/agent-session-instruction.js.map +1 -0
  38. package/intern/agent-session-runtime.d.ts +39 -0
  39. package/intern/agent-session-runtime.js +247 -0
  40. package/intern/agent-session-runtime.js.map +1 -0
  41. package/intern/agent-session-store.d.ts +6 -0
  42. package/intern/agent-session-store.js +52 -0
  43. package/intern/agent-session-store.js.map +1 -0
  44. package/intern/agent-session.d.ts +193 -0
  45. package/intern/agent-session.js +180 -0
  46. package/intern/agent-session.js.map +1 -0
  47. package/intern/agent-turn.d.ts +6 -1
  48. package/intern/agent-turn.js +9 -4
  49. package/intern/agent-turn.js.map +1 -1
  50. package/intern/agent-wake.d.ts +11 -6
  51. package/intern/agent-wake.js +11 -7
  52. package/intern/agent-wake.js.map +1 -1
  53. package/intern/llm-tool-loop.d.ts +22 -1
  54. package/intern/llm-tool-loop.js +130 -7
  55. package/intern/llm-tool-loop.js.map +1 -1
  56. package/intern/mint-fire-core.js +3 -3
  57. package/intern/mint-fire-core.js.map +1 -1
  58. package/intern/open-turn-store.d.ts +6 -0
  59. package/intern/open-turn-store.js +16 -3
  60. package/intern/open-turn-store.js.map +1 -1
  61. package/intern/process-access-bindings.d.ts +1 -0
  62. package/intern/process-access-bindings.js +1 -1
  63. package/intern/process-access-bindings.js.map +1 -1
  64. package/intern/prompt-dispatch-context.d.ts +4 -0
  65. package/intern/prompt-dispatch-context.js +19 -0
  66. package/intern/prompt-dispatch-context.js.map +1 -0
  67. package/intern/turn-terminal.d.ts +61 -0
  68. package/intern/turn-terminal.js +0 -0
  69. package/intern/turn-terminal.js.map +1 -0
  70. package/intern/work-tools.d.ts +1 -0
  71. package/intern/work-tools.js +1 -1
  72. package/intern/work-tools.js.map +1 -1
  73. package/package.json +12 -11
  74. package/public/fork-app.js +24 -26
  75. package/public/fork-app.js.map +1 -1
  76. package/public/fs-prompt.d.ts +2 -1
  77. package/public/fs-prompt.js +57 -2
  78. package/public/fs-prompt.js.map +1 -1
  79. package/public/llm-dispatch.d.ts +2 -2
  80. package/public/llm-dispatch.js +26 -1
  81. package/public/llm-dispatch.js.map +1 -1
  82. package/public/open-chat.d.ts +2 -2
  83. package/public/open-chat.js +25 -0
  84. package/public/open-chat.js.map +1 -1
  85. package/public/prompt-chat-section.js +371 -12
  86. package/public/prompt-chat-section.js.map +1 -1
  87. package/public/report-top-vibes-by-traffic.d.ts +5 -0
  88. package/public/report-top-vibes-by-traffic.js +69 -0
  89. package/public/report-top-vibes-by-traffic.js.map +1 -0
  90. package/public/vibe-traffic-source.d.ts +114 -0
  91. package/public/vibe-traffic-source.js +322 -0
  92. package/public/vibe-traffic-source.js.map +1 -0
  93. package/types.d.ts +5 -0
  94. package/types.js.map +1 -1
  95. package/usage-report/codegen-delivery-alert.js +2 -2
  96. package/usage-report/codegen-delivery-alert.js.map +1 -1
  97. package/usage-report/vibe-traffic-alert-util.d.ts +74 -0
  98. package/usage-report/vibe-traffic-alert-util.js +237 -0
  99. package/usage-report/vibe-traffic-alert-util.js.map +1 -0
  100. package/usage-report/vibe-traffic-alert.d.ts +2 -0
  101. package/usage-report/vibe-traffic-alert.js +99 -0
  102. 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":"AAAA,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAE3D,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAA6C,MAAM,oBAAoB,CAAC;AACvH,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,EAAE,0BAA0B,EAA2B,MAAM,oBAAoB,CAAC;AACzF,OAAO,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,GAGhB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAgBrF,MAAM,QAAQ,GAAG,IAAI,OAAO,EAA0D,CAAC;AAEvF,KAAK,UAAU,iBAAiB,CAAC,IAAoB,EAAE,KAA2C;IAChG,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC;IAC3C,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,CACvC,IAAI,CAAC,GAAG,CAAC,EAAE;SACR,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;SAChC,IAAI,CAAC,KAAK,CAAC;SACX,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAClF,CAAC;IACF,IAAI,IAAI,CAAC,KAAK,EAAE;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAChD,OAAO,MAAM,CAAC,EAAE,CACd,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAChI,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAa,EAAE,MAAc;IAC/D,OAAO,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;AACnD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,IAAoB,EACpB,KAAgD,EAChD,KAAwB;IAExB,SAAS,CAAC;QACR,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACxD,IAAI,QAAQ,CAAC,KAAK,EAAE;YAAE,OAAO,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;QACxD,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC,EAAE,EAAE,CAAC;QACxC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;YAC3D,IAAI,OAAO;gBAAE,IAAI,CAAC,KAAK,EAAE,CAAC;YAC1B,OAAO,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7C,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACnD,IAAI,QAAQ,CAAC,IAAI,EAAE;YAAE,OAAO,QAAQ,CAAC;QACrC,IAAI,QAAQ,CAAC,GAAG,EAAE,CAAC,OAAO,KAAK,kBAAkB,EAAE,CAAC;YAClD,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,SAAS;QACX,CAAC;QACD,IAAI,OAAO;YAAE,IAAI,CAAC,KAAK,EAAE,CAAC;QAC1B,OAAO,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;IACpC,CAAC;AACH,CAAC;AAGD,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,IAAoB,EACpB,KAKC,EACD,YAAY,GAA6B,iBAAiB;IAE1D,IAAI,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC9C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;QACrB,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAC3C,CAAC;IACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC;QAC7B,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,QAAQ;YAAE,OAAO,mBAAmB,CAAC,IAAI,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;QACnG,IAAI,KAAK,CAAC,KAAK,EAAE;YAAE,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;QAClD,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM,KAAK,MAAM;YAAE,OAAO,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5G,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IACD,MAAM,KAAK,GAAG,QAAQ,CAAC;IACvB,MAAM,OAAO,GAAG,KAAK,EAAE,CAAC;IACxB,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;IAC7B,IAAI,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;QACnB,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,OAAO;YAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACpE,OAAO,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAEvD,KAAK,UAAU,KAAK;QAClB,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAC9D,IAAI,MAAM,CAAC,KAAK,EAAE;YAAE,OAAO,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;QACpD,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC;QAC3C,MAAM,OAAO,GAAG,kBAAkB,CAAC;YACjC,QAAQ,EAAE,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE;YACjF,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC;SACjG,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,GAAG,EAA8B,CAAC;QACtD,IAAI,OAA6E,CAAC;QAClF,IAAI,WAA+E,CAAC;QACpF,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,MAAM,GAAG,KAAK,CAAC;QAEnB,KAAK,UAAU,MAAM,CAAC,EAAU,EAAE,IAAY,EAAE,cAAuB;YACrE,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;YAC7D,IAAI,KAAK,CAAC,KAAK,EAAE;gBAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;;gBACjH,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QACpH,CAAC;QAED,KAAK,UAAU,KAAK,CAAC,QAAgB,EAAE,EAAE,GAAG,QAAQ;YAClD,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,MAAM;gBAAE,OAAO;YAGtC,MAAM,UAAU,GACd,OAAO,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,sBAAsB,CAAC;YACnH,MAAM,MAAM,GAAG,0BAA0B,CAAC;gBACxC,KAAK,EAAE,IAAI,CAAC,WAAW;gBACvB,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,QAAQ;gBACR,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;aACjD,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YACxB,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;YACrF,IAAI,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;gBAClB,MAAM,CAAC,MAAM,EAAE,CAAC;gBAChB,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACnB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;gBACvE,OAAO;YACT,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC9E,IAAI,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC;gBACrB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;gBAGtG,MAAM,GAAG,IAAI,CAAC;gBACd,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;gBAC7B,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE;oBAAE,OAAO,CAAC,MAAM,EAAE,CAAC;gBACzD,OAAO,CAAC,KAAK,EAAE,CAAC;gBAChB,OAAO;YACT,CAAC;YACD,IAAI,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC;gBAClB,MAAM,CAAC,MAAM,EAAE,CAAC;gBAChB,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACnB,MAAM,MAAM,CACV,EAAE,EACF,yHAAyH,CAC1H,CAAC;gBACF,OAAO;YACT,CAAC;YACD,KAAK,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;gBACzC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACnB,IAAI,MAAM;oBAAE,OAAO;gBACnB,MAAM,MAAM,CACV,EAAE,EACF,OAAO,CAAC,IAAI,KAAK,SAAS;oBACxB,CAAC,CAAC,kBAAkB,0BAA0B,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;oBACjE,CAAC,CAAC,gIAAgI,CACrI,CAAC;gBACF,MAAM,IAAI,EAAE,CAAC;YACf,CAAC,CAAC,CAAC;QACL,CAAC;QAED,KAAK,UAAU,IAAI;YACjB,MAAM,YAAY,GAAG,OAAO,CAAC;YAC7B,IAAI,OAAO,IAAI,MAAM,IAAI,YAAY,KAAK,SAAS;gBAAE,OAAO;YAG5D,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,KAAK,aAAa,CAAC;gBAAE,OAAO;YACtH,OAAO,GAAG,IAAI,CAAC;YACf,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YAChE,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAK;oBAAE,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACzH,OAAO,GAAG,KAAK,CAAC;gBAChB,OAAO;YACT,CAAC;YACD,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC;YACtF,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,OAAO,GAAG,KAAK,CAAC;gBAChB,OAAO;YACT,CAAC;YAGD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC1G,IAAI,MAAM,YAAY,IAAI,CAAC,MAAM,EAAE,CAAC;gBAClC,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,0CAA0C,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;gBACpF,OAAO,GAAG,KAAK,CAAC;gBAChB,MAAM,IAAI,EAAE,CAAC;gBACb,OAAO;YACT,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;YAC1E,IAAI,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;gBAClB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;gBACtE,OAAO,GAAG,KAAK,CAAC;gBAChB,OAAO;YACT,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,KAAK,IAAI,EAAE;gBAC/C,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC7B,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBAC7C,IAAI,MAAM,YAAY,IAAI,CAAC,MAAM;wBAAE,OAAO,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;oBACrE,IAAI,WAAW,KAAK,SAAS;wBAAE,OAAO,MAAM,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;oBACtG,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC;gBAC7B,CAAC;gBACD,MAAM,IAAI,GAAG,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC7C,IAAI,IAAI,YAAY,IAAI,CAAC,MAAM;oBAAE,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACjE,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC,CAAC,CAAC;YACH,IAAI,MAAM,CAAC,KAAK,EAAE;gBAChB,MAAM,MAAM,CACV,MAAM,CAAC,EAAE,EACT,MAAM,CAAC,IAAI,KAAK,QAAQ;oBACtB,CAAC,CAAC,mBAAmB,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,EAAE;oBACnF,CAAC,CAAC,mDAAmD,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAC9E,CAAC;iBACC,CAAC;gBAGJ,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,EAAE,CAAC;gBAC1B,MAAM,MAAM,CACV,MAAM,CAAC,EAAE,EACT,MAAM,CAAC,IAAI,KAAK,QAAQ;oBACtB,CAAC,CAAC,mBAAmB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE;oBAClD,CAAC,CAAC,mCAAmC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,yDAAyD,EACrH,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAC/E,CAAC;YACJ,CAAC;YACD,OAAO,GAAG,KAAK,CAAC;YAChB,MAAM,IAAI,EAAE,CAAC;QACf,CAAC;QAED,MAAM,IAAI,GAAqB;YAC7B,OAAO;YACP,QAAQ;YACR,GAAG,CAAC,QAAQ,EAAE,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1F,KAAK;YACL,KAAK,CAAC,KAAK,CAAC,IAAI;gBACd,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC;gBAC3C,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBACrF,IAAI,KAAK,CAAC,KAAK,EAAE;oBAAE,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;gBAClD,KAAK,IAAI,EAAE,CAAC;gBACZ,OAAO,MAAM,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/C,CAAC;YACD,KAAK,CAAC,WAAW;gBACf,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC;gBAC3C,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;gBACjD,IAAI,KAAK,CAAC,KAAK,EAAE;oBAAE,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;gBAClD,KAAK,IAAI,EAAE,CAAC;gBACZ,OAAO,MAAM,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/C,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM;gBACrB,OAAO,GAAG,IAAI,CAAC;gBACf,WAAW,GAAG,MAAM,CAAC;gBACrB,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,CAAC;oBAChD,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS;wBAAE,MAAM,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;oBACzG,IAAI,MAAM;wBAAE,OAAO;oBACnB,IAAI,MAAM,CAAC,KAAK,KAAK,aAAa;wBAChC,MAAM,MAAM,CACV,MAAM,CAAC,EAAE,EACT,sHAAsH,CACvH,CAAC;gBACN,CAAC;gBACD,MAAM,IAAI,EAAE,CAAC;YACf,CAAC;YACD,KAAK;gBACH,MAAM,GAAG,IAAI,CAAC;gBACd,OAAO,CAAC,IAAI,EAAE,CAAC;gBACf,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE;oBAAE,MAAM,CAAC,MAAM,EAAE,CAAC;gBACvD,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,OAAO;oBAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACtE,CAAC;SACF,CAAC;QACF,OAAO,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;AACH,CAAC"}
@@ -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 {};