@oharness/engine 0.12.0 → 0.14.0

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 (52) hide show
  1. package/dist/agent/agent.d.ts +3 -0
  2. package/dist/agent/agent.js +32 -12
  3. package/dist/agent/agent.js.map +1 -1
  4. package/dist/agent/background-usage.d.ts +34 -0
  5. package/dist/agent/background-usage.js +53 -0
  6. package/dist/agent/background-usage.js.map +1 -0
  7. package/dist/agent/background.d.ts +2 -0
  8. package/dist/agent/background.js +11 -0
  9. package/dist/agent/background.js.map +1 -1
  10. package/dist/agent/memory-backup.d.ts +1 -1
  11. package/dist/agent/memory-backup.js +1 -1
  12. package/dist/agent/memory-backup.js.map +1 -1
  13. package/dist/agent/memory-digest.d.ts +107 -0
  14. package/dist/agent/memory-digest.js +208 -0
  15. package/dist/agent/memory-digest.js.map +1 -0
  16. package/dist/agent/memory-dream.d.ts +106 -0
  17. package/dist/agent/memory-dream.js +237 -0
  18. package/dist/agent/memory-dream.js.map +1 -0
  19. package/dist/agent/memory-ledger.d.ts +154 -0
  20. package/dist/agent/memory-ledger.js +179 -0
  21. package/dist/agent/memory-ledger.js.map +1 -0
  22. package/dist/agent/memory-provider.d.ts +12 -0
  23. package/dist/agent/memory-recall.d.ts +2 -0
  24. package/dist/agent/memory-recall.js +5 -2
  25. package/dist/agent/memory-recall.js.map +1 -1
  26. package/dist/agent/memory-usage.d.ts +20 -0
  27. package/dist/agent/memory-usage.js +16 -1
  28. package/dist/agent/memory-usage.js.map +1 -1
  29. package/dist/agent/memory.d.ts +3 -0
  30. package/dist/agent/memory.js +24 -4
  31. package/dist/agent/memory.js.map +1 -1
  32. package/dist/agent/store.d.ts +7 -0
  33. package/dist/agent/store.js +14 -1
  34. package/dist/agent/store.js.map +1 -1
  35. package/dist/config-files.d.ts +6 -1
  36. package/dist/config-files.js +7 -2
  37. package/dist/config-files.js.map +1 -1
  38. package/dist/harness.d.ts +20 -0
  39. package/dist/harness.js +58 -8
  40. package/dist/harness.js.map +1 -1
  41. package/dist/runtime-plugins/builtin/dreaming-coordinator.d.ts +244 -0
  42. package/dist/runtime-plugins/builtin/dreaming-coordinator.js +548 -0
  43. package/dist/runtime-plugins/builtin/dreaming-coordinator.js.map +1 -0
  44. package/dist/runtime-plugins/builtin/dreaming.d.ts +30 -0
  45. package/dist/runtime-plugins/builtin/dreaming.js +231 -0
  46. package/dist/runtime-plugins/builtin/dreaming.js.map +1 -0
  47. package/dist/runtime-plugins/builtin/memory.d.ts +89 -2
  48. package/dist/runtime-plugins/builtin/memory.js +186 -5
  49. package/dist/runtime-plugins/builtin/memory.js.map +1 -1
  50. package/dist/runtime-plugins/host.js +2 -0
  51. package/dist/runtime-plugins/host.js.map +1 -1
  52. package/package.json +1 -1
@@ -0,0 +1,548 @@
1
+ import { digestEntries, digestSession, isUserTurn } from "../../agent/memory-digest.js";
2
+ import { dreamScope } from "../../agent/memory-dream.js";
3
+ import { DreamStore } from "../../agent/memory-ledger.js";
4
+ import { randomUUID } from "node:crypto";
5
+ import { RoutineLock } from "../../schedule/lock.js";
6
+ import { userPath } from "../../paths.js";
7
+ export const DEFAULT_DREAMING = {
8
+ auto: "subscribers", idleHours: 6, minUserTurns: 3, startDelayMinutes: 5,
9
+ minClaims: 5, maxWaitHours: 72, maxClaims: 40, dailyTokens: 200_000,
10
+ };
11
+ const newMeter = () => ({ calls: 0, input: 0, output: 0, costUsd: 0 });
12
+ const MINUTE = 60_000, HOUR = 3_600_000;
13
+ const TICK_MS = 15 * MINUTE;
14
+ /** A run seen this recently means the person is working: background work waits. */
15
+ const BUSY_MS = 2 * MINUTE;
16
+ /** For estimating a prompt before it is sent; spending is counted from what the provider reports. */
17
+ const CHARS_PER_TOKEN = 4;
18
+ /**
19
+ * How far back a pass looks, and how many conversations it reads at most.
20
+ * Turning dreaming on must not mean one pass over a year of history; older
21
+ * conversations are left alone, and a long backlog drains over several runs.
22
+ */
23
+ const LOOKBACK_MS = 30 * 24 * HOUR;
24
+ const MAX_DIGESTS_PER_RUN = 10;
25
+ export const projectLedgerKey = (projectId) => `project:${projectId}`;
26
+ export const USER_LEDGER_KEY = "user";
27
+ export class DreamCoordinator {
28
+ /** The process's coordinator. Tests construct their own. */
29
+ static shared = new DreamCoordinator();
30
+ store;
31
+ targets = new Set();
32
+ fixedLock;
33
+ homeLock;
34
+ now;
35
+ logger;
36
+ startedAt = 0;
37
+ lastActivity = 0;
38
+ timer;
39
+ running;
40
+ runs = new WeakMap();
41
+ constructor(options = {}) {
42
+ this.store = options.store ?? new DreamStore();
43
+ if (options.lock)
44
+ this.fixedLock = options.lock;
45
+ this.now = options.now ?? Date.now;
46
+ }
47
+ /** Resolved on use, like the store, so a changed `OHARNESS_HOME` is honoured. */
48
+ get lock() {
49
+ if (this.fixedLock)
50
+ return this.fixedLock;
51
+ const file = userPath("dreams", "dreamer.lock");
52
+ if (this.homeLock?.file !== file)
53
+ this.homeLock = { file, lock: new RoutineLock(file) };
54
+ return this.homeLock.lock;
55
+ }
56
+ register(target, logger) {
57
+ this.targets.add(target);
58
+ this.logger ??= logger;
59
+ if (!this.startedAt)
60
+ this.startedAt = this.now();
61
+ this.schedule();
62
+ return () => {
63
+ this.targets.delete(target);
64
+ if (this.targets.size)
65
+ return;
66
+ if (this.timer)
67
+ clearTimeout(this.timer);
68
+ this.timer = undefined;
69
+ this.startedAt = 0;
70
+ void this.lock.release().catch(() => { });
71
+ };
72
+ }
73
+ /** Someone is sending a message or a run just ended: background work waits. */
74
+ activity() { this.lastActivity = this.now(); }
75
+ lastRun(target) { return this.runs.get(target); }
76
+ isRunning() { return !!this.running; }
77
+ schedule() {
78
+ if (this.timer || !this.targets.size)
79
+ return;
80
+ const delay = Math.max(...[...this.targets].map((target) => target.settings().startDelayMinutes)) * MINUTE;
81
+ const first = Math.max(0, this.startedAt + delay - this.now());
82
+ const fire = () => {
83
+ this.timer = undefined;
84
+ void this.tick().catch((error) => this.logger?.warn("dreaming tick failed", { error: error instanceof Error ? error.message : String(error) }))
85
+ .finally(() => {
86
+ if (!this.targets.size || this.timer)
87
+ return;
88
+ this.timer = setTimeout(fire, TICK_MS);
89
+ this.timer.unref?.();
90
+ });
91
+ };
92
+ this.timer = setTimeout(fire, first);
93
+ this.timer.unref?.();
94
+ }
95
+ /** One work item at a time, whether a tick or a person's request. */
96
+ exclusive(work) {
97
+ const previous = this.running ?? Promise.resolve();
98
+ const next = previous.catch(() => { }).then(work);
99
+ // The caller handles the failure; the queue only needs to know it ended.
100
+ const tracked = next.then(() => { }, () => { }).finally(() => { if (this.running === tracked)
101
+ this.running = undefined; });
102
+ this.running = tracked;
103
+ return next;
104
+ }
105
+ /**
106
+ * The background pass: digest every due session of every project whose
107
+ * automatic passes are on. Waits while a run is in progress or another
108
+ * process holds the lock.
109
+ */
110
+ async tick(signal) {
111
+ const auto = [...this.targets].filter((target) => target.autoOn());
112
+ if (!auto.length)
113
+ return { digested: 0, dreamed: 0 };
114
+ if (this.now() - this.lastActivity < BUSY_MS)
115
+ return { digested: 0, dreamed: 0, skipped: "busy" };
116
+ if (!(await this.lock.claim(Math.floor(this.now() / MINUTE))))
117
+ return { digested: 0, dreamed: 0, skipped: "locked" };
118
+ return this.exclusive(async () => {
119
+ let digested = 0, dreamed = 0, budgetStopped = false;
120
+ const runs = new Map(auto.map((target) => [target, this.newRun()]));
121
+ // Step 1, every project first: a dream never reads half the evidence.
122
+ const drained = new Set();
123
+ for (const target of auto) {
124
+ const run = runs.get(target);
125
+ const result = await this.digestTarget(target, { force: false, meter: run.meter, ...(signal ? { signal } : {}) });
126
+ run.digested += result.digested;
127
+ digested += result.digested;
128
+ if (result.budgetStopped) {
129
+ run.budgetStopped = budgetStopped = true;
130
+ break;
131
+ }
132
+ if (!result.more)
133
+ drained.add(target);
134
+ }
135
+ // Step 3: each scope that is due. (Step 2, the freshness scan, has no model call and is not built yet.)
136
+ for (const target of auto) {
137
+ if (budgetStopped || !drained.has(target) || signal?.aborted)
138
+ continue;
139
+ const run = runs.get(target);
140
+ for (const scope of ["project", "user"]) {
141
+ if (!(await this.due(target, scope)))
142
+ continue;
143
+ const result = await this.dreamScope(target, scope, run, signal);
144
+ if (!result)
145
+ continue;
146
+ dreamed++;
147
+ if (result.error === "budget") {
148
+ run.budgetStopped = budgetStopped = true;
149
+ break;
150
+ }
151
+ run.scopes.push(result);
152
+ }
153
+ }
154
+ // A tick that did nothing is not history; one that read or dreamed is.
155
+ for (const [target, run] of runs)
156
+ if (run.digested || run.scopes.length || run.budgetStopped)
157
+ await this.finish(target, run, "auto");
158
+ return { digested, dreamed };
159
+ });
160
+ }
161
+ key(target, scope) {
162
+ return scope === "user" ? USER_LEDGER_KEY : projectLedgerKey(target.projectId);
163
+ }
164
+ claimsOf(target, scope) {
165
+ return this.store.claims(scope === "user" ? { scope } : { scope, project: target.projectId }, this.key(target, scope));
166
+ }
167
+ /**
168
+ * Whether a scope dreams this tick: not yet today (a local calendar day, not
169
+ * a rolling 24 hours, which would drift into the working morning), and
170
+ * enough claims gathered, or the oldest waiting long enough.
171
+ */
172
+ async due(target, scope) {
173
+ if (!(await target.notes(scope)))
174
+ return false;
175
+ if (await this.store.dreamedToday(this.key(target, scope), this.now()))
176
+ return false;
177
+ const claims = await this.claimsOf(target, scope);
178
+ if (!claims.length)
179
+ return false;
180
+ const settings = target.settings();
181
+ return claims.length >= settings.minClaims || this.now() - claims[0].at >= settings.maxWaitHours * HOUR;
182
+ }
183
+ /** Whether a prompt of `chars` characters may still be sent today. */
184
+ async affordable(target, chars) {
185
+ return (await this.store.spentToday(this.now())) + Math.ceil(chars / CHARS_PER_TOKEN) <= target.settings().dailyTokens;
186
+ }
187
+ /**
188
+ * The model, as a dream or a digest calls it: the reply's text, with what it
189
+ * cost added to the run and to the day's budget, in the tokens the provider
190
+ * reported.
191
+ */
192
+ metered(target, meter) {
193
+ return async (system, prompt, signal) => {
194
+ const reply = await target.generate(system, prompt, signal);
195
+ const u = reply.usage;
196
+ const tokens = u.inputTokens + u.outputTokens + (u.cacheReadTokens ?? 0) + (u.cacheWriteTokens ?? 0);
197
+ meter.calls++;
198
+ meter.input += u.inputTokens + (u.cacheReadTokens ?? 0) + (u.cacheWriteTokens ?? 0);
199
+ meter.output += u.outputTokens;
200
+ meter.costUsd += reply.costUsd;
201
+ meter.model = reply.model;
202
+ await this.store.spend(tokens, this.now());
203
+ return reply.text;
204
+ };
205
+ }
206
+ newRun() {
207
+ return { id: `r${randomUUID().slice(0, 12)}`, at: this.now(), digested: 0, scopes: [], meter: newMeter() };
208
+ }
209
+ /** Write a run to the project's history. */
210
+ async finish(target, run, trigger) {
211
+ const applied = run.scopes.flatMap((scope) => scope.applied);
212
+ const proposals = run.scopes.reduce((sum, scope) => sum + scope.proposals, 0);
213
+ const errors = run.scopes.flatMap((scope) => scope.error ? [scope.error] : []);
214
+ const outcome = run.budgetStopped ? "budget"
215
+ : errors.length ? (run.scopes.some((scope) => scope.refused) ? "refused" : "failed")
216
+ : !run.meter.calls ? "no-call"
217
+ : applied.length ? "changed" : proposals ? "suggested" : "nothing";
218
+ await this.store.recordRun(target.projectId, {
219
+ id: run.id, at: run.at, trigger, seconds: Math.round((this.now() - run.at) / 1000),
220
+ digested: run.digested, applied: applied.length, proposals, changes: applied.map((change) => change.id),
221
+ tokens: { input: run.meter.input, output: run.meter.output }, costUsd: run.meter.costUsd,
222
+ ...(run.meter.model ? { model: run.meter.model } : {}), outcome, errors,
223
+ });
224
+ }
225
+ /**
226
+ * Digest a project's sessions. Unforced, only sessions quiet for
227
+ * `idleHours` with `minUserTurns` new user messages; forced (Dream now),
228
+ * every session with anything new the user typed.
229
+ */
230
+ async digestTarget(target, options) {
231
+ const settings = target.settings();
232
+ const device = await target.sessions.device();
233
+ const generate = this.metered(target, options.meter ?? newMeter());
234
+ let digested = 0;
235
+ // Read once, when the first conversation needs it.
236
+ let known;
237
+ const shownNotes = async () => {
238
+ if (!known) {
239
+ known = new Map();
240
+ for (const scope of ["user", "project"])
241
+ for (const note of (await target.notes(scope)) ?? [])
242
+ known.set(note.id, { id: note.id, scope, summary: note.summary });
243
+ }
244
+ const map = known;
245
+ return (ids) => ids.map((id) => map.get(id)).filter((note) => !!note);
246
+ };
247
+ for (const meta of await target.sessions.list()) {
248
+ if (options.signal?.aborted)
249
+ break;
250
+ // Ten a pass; whatever is left is still due, and the dream waits for it.
251
+ if (digested >= MAX_DIGESTS_PER_RUN)
252
+ return { digested, more: true };
253
+ // A routine's prompt was written earlier, not said now: not evidence.
254
+ if (meta.routine || this.now() - meta.updatedAt > LOOKBACK_MS)
255
+ continue;
256
+ const [records, archive, read] = await Promise.all([
257
+ target.sessions.records(meta.id), target.sessions.archive(meta.id), this.store.digested(meta.id),
258
+ ]);
259
+ const all = digestEntries(records, archive, device);
260
+ const pending = all.filter((entry) => !read.has(entry.key));
261
+ if (!pending.length)
262
+ continue;
263
+ const turns = pending.filter((entry) => isUserTurn(entry.message)).length;
264
+ const lastAt = all[all.length - 1].at;
265
+ if (!options.force && (turns < settings.minUserTurns || this.now() - lastAt < settings.idleHours * HOUR))
266
+ continue;
267
+ if (!turns) {
268
+ // Nothing the user typed: nothing to read, but nothing to read again either.
269
+ await this.store.recordDigest(meta.id, target.projectId, [], pending.map((entry) => entry.key));
270
+ continue;
271
+ }
272
+ // The estimate is the prompt's size; the reply is counted once it exists.
273
+ if (!(await this.affordable(target, estimate(pending))))
274
+ return { digested, budgetStopped: true };
275
+ const result = await digestSession({
276
+ session: meta.id, pending, all, generate, shownNotes: await shownNotes(),
277
+ ...(options.signal ? { signal: options.signal } : {}),
278
+ });
279
+ await this.store.recordDigest(meta.id, target.projectId, result.claims, pending.map((entry) => entry.key));
280
+ digested++;
281
+ }
282
+ return { digested };
283
+ }
284
+ /**
285
+ * Dream now: read everything new, however recently said, then dream both
286
+ * scopes regardless of the day or the batch threshold.
287
+ */
288
+ dreamNow(target, signal) {
289
+ return this.exclusive(async () => {
290
+ const run = this.newRun();
291
+ const digest = await this.digestTarget(target, { force: true, meter: run.meter, ...(signal ? { signal } : {}) });
292
+ run.digested = digest.digested;
293
+ if (digest.budgetStopped)
294
+ run.budgetStopped = true;
295
+ for (const scope of ["project", "user"]) {
296
+ if (run.budgetStopped || signal?.aborted)
297
+ break;
298
+ const result = await this.dreamScope(target, scope, run, signal);
299
+ if (!result)
300
+ continue;
301
+ if (result.error === "budget") {
302
+ run.budgetStopped = true;
303
+ break;
304
+ }
305
+ run.scopes.push(result);
306
+ }
307
+ this.runs.set(target, run);
308
+ await this.finish(target, run, "manual");
309
+ return run;
310
+ });
311
+ }
312
+ /** Hashes dreams last left notes at, from the ledger, for the hand-edit rule. */
313
+ async dreamWrote(key) {
314
+ const events = await this.store.ledger(key);
315
+ const undone = new Set(events.flatMap((event) => event.type === "undone" ? [event.change] : []));
316
+ const wrote = new Map();
317
+ for (const event of events) {
318
+ if (event.type !== "applied")
319
+ continue;
320
+ for (const change of event.changes) {
321
+ if (undone.has(change.id))
322
+ continue;
323
+ for (const after of change.after)
324
+ if (after.hash)
325
+ wrote.set(after.id, after.hash);
326
+ else
327
+ wrote.delete(after.id);
328
+ }
329
+ }
330
+ return wrote;
331
+ }
332
+ /**
333
+ * One dream of one scope: claims in, changes out. What may be applied is
334
+ * committed as one batch; the rest becomes suggestions. The day is marked
335
+ * whether or not the batch lands, so a refused batch is not retried every
336
+ * tick at the price of a model call; the claims behind it stay for the next
337
+ * dream instead of being consumed.
338
+ */
339
+ async dreamScope(target, scope, owner, signal) {
340
+ const notes = await target.notes(scope);
341
+ if (!notes)
342
+ return undefined;
343
+ const key = this.key(target, scope);
344
+ const claims = (await this.claimsOf(target, scope)).slice(0, target.settings().maxClaims);
345
+ if (!claims.length)
346
+ return { scope, claims: 0, applied: [], proposals: 0 };
347
+ if (!(await this.affordable(target, claimChars(claims) + 24_000)))
348
+ return { scope, claims: claims.length, applied: [], proposals: 0, error: "budget" };
349
+ const at = this.now();
350
+ let result;
351
+ try {
352
+ result = await dreamScope({
353
+ claims, notes, generate: this.metered(target, owner.meter), now: at,
354
+ dreamWrote: await this.dreamWrote(key), ...(signal ? { signal } : {}),
355
+ });
356
+ }
357
+ catch (failure) {
358
+ const error = failure instanceof Error ? failure.message : String(failure);
359
+ await this.store.record(key, { type: "failed", at, scope, error });
360
+ return { scope, claims: claims.length, applied: [], proposals: 0, error };
361
+ }
362
+ const evidence = evidenceOf(claims);
363
+ const run = { scope, claims: claims.length, applied: [], proposals: 0 };
364
+ const apply = result.ops.filter((one) => one.disposition === "apply" && committable(one.op));
365
+ if (apply.length) {
366
+ try {
367
+ run.applied = await this.commitOps(target, scope, apply.map((one) => one.op), evidence, undefined, owner.id);
368
+ }
369
+ catch (failure) {
370
+ run.error = failure instanceof Error ? failure.message : String(failure);
371
+ run.refused = true;
372
+ await this.store.record(key, { type: "failed", at, scope, error: run.error });
373
+ }
374
+ }
375
+ for (const one of result.ops.filter((op) => !apply.includes(op))) {
376
+ await this.store.record(key, {
377
+ type: "proposal", at, scope, id: `p${randomUUID().slice(0, 12)}`, op: one.op,
378
+ ...(one.why ? { why: one.why } : {}), evidence: one.op.claims.map((id) => evidence.get(id)).filter((claim) => !!claim),
379
+ });
380
+ run.proposals++;
381
+ }
382
+ // Claims behind a refused batch wait for the next dream, unless a suggestion carries them.
383
+ const kept = new Set(run.refused ? apply.flatMap((one) => one.op.claims) : []);
384
+ for (const one of result.ops)
385
+ if (!apply.includes(one))
386
+ for (const id of one.op.claims)
387
+ kept.delete(id);
388
+ await this.store.record(key, { type: "consumed", at, claims: claims.map((claim) => claim.id).filter((id) => !kept.has(id)) });
389
+ await this.store.markDreamed(key, at);
390
+ return run;
391
+ }
392
+ /** Commit operations as one batch, record them, and tell the next run. */
393
+ async commitOps(target, scope, ops, evidence, fromProposal, run) {
394
+ const committed = await target.commit(scope, ops.map(toChange));
395
+ const at = this.now();
396
+ const changes = committed.map((done, i) => {
397
+ const op = ops[i];
398
+ return {
399
+ id: `d${randomUUID().slice(0, 12)}`, op: op.op, summary: "summary" in op ? op.summary : "",
400
+ before: done.before, after: done.after,
401
+ evidence: op.claims.map((id) => evidence.get(id)).filter((claim) => !!claim),
402
+ ...(fromProposal ? { fromProposal } : {}),
403
+ ...(run ? { run } : {}),
404
+ };
405
+ });
406
+ await this.store.record(this.key(target, scope), { type: "applied", at, scope, changes });
407
+ target.announce(changes.map((change) => ({
408
+ id: change.after.find((one) => one.hash)?.id ?? change.after[0].id, summary: change.summary, scope,
409
+ action: change.op === "create" ? "created" : "updated",
410
+ })));
411
+ return changes;
412
+ }
413
+ /** Open suggestions and recent changes, both scopes, newest first. */
414
+ async state(target) {
415
+ const out = { proposals: [], log: [] };
416
+ for (const scope of ["project", "user"]) {
417
+ if (!(await target.notes(scope)))
418
+ continue;
419
+ const events = await this.store.ledger(this.key(target, scope));
420
+ const closed = new Set(events.flatMap((event) => event.type === "proposal-state" ? [event.id] : []));
421
+ const undone = new Set(events.flatMap((event) => event.type === "undone" ? [event.change] : []));
422
+ for (const event of events) {
423
+ if (event.type === "proposal" && !closed.has(event.id)) {
424
+ out.proposals.push({ id: event.id, scope, at: event.at, op: event.op, ...(event.why ? { why: event.why } : {}), evidence: event.evidence });
425
+ }
426
+ else if (event.type === "applied") {
427
+ for (const change of event.changes)
428
+ out.log.push({ scope, at: event.at, change, undone: undone.has(change.id) });
429
+ }
430
+ }
431
+ }
432
+ out.proposals.sort((a, b) => b.at - a.at);
433
+ out.log.sort((a, b) => b.at - a.at);
434
+ out.log.splice(30);
435
+ return out;
436
+ }
437
+ async proposal(target, scope, id) {
438
+ const events = await this.store.ledger(this.key(target, scope));
439
+ if (events.some((event) => event.type === "proposal-state" && event.id === id))
440
+ throw new Error("This suggestion was already handled");
441
+ const found = events.find((event) => event.type === "proposal" && event.id === id);
442
+ if (!found)
443
+ throw new Error("Unknown suggestion");
444
+ return found;
445
+ }
446
+ /** A person applies a suggestion; refused, and closed as stale, if its notes changed since. */
447
+ applyProposal(target, scope, id) {
448
+ return this.exclusive(async () => {
449
+ const proposal = await this.proposal(target, scope, id);
450
+ const op = proposal.op;
451
+ if (!committable(op))
452
+ throw new Error("This suggestion has nothing to apply");
453
+ const evidence = new Map(proposal.evidence.map((claim) => [claim.id, claim]));
454
+ try {
455
+ const changes = await this.commitOps(target, scope, [op], evidence, id);
456
+ await this.store.record(this.key(target, scope), { type: "proposal-state", at: this.now(), id, state: "applied" });
457
+ return changes;
458
+ }
459
+ catch (failure) {
460
+ await this.store.record(this.key(target, scope), { type: "proposal-state", at: this.now(), id, state: "stale" });
461
+ throw failure;
462
+ }
463
+ });
464
+ }
465
+ dismissProposal(target, scope, id) {
466
+ return this.exclusive(async () => {
467
+ await this.proposal(target, scope, id);
468
+ await this.store.record(this.key(target, scope), { type: "proposal-state", at: this.now(), id, state: "dismissed" });
469
+ });
470
+ }
471
+ /**
472
+ * Put back what a change replaced. Refused if any of its notes changed
473
+ * since, rather than overwriting someone's newer edit; the page then points
474
+ * at the backups.
475
+ */
476
+ undo(target, scope, changeId) {
477
+ return this.exclusive(async () => {
478
+ const key = this.key(target, scope);
479
+ const events = await this.store.ledger(key);
480
+ if (events.some((event) => event.type === "undone" && event.change === changeId))
481
+ throw new Error("Already undone");
482
+ const change = events.flatMap((event) => event.type === "applied" ? event.changes : []).find((one) => one.id === changeId);
483
+ if (!change)
484
+ throw new Error("Unknown change");
485
+ const after = new Map(change.after.map((one) => [one.id, one.hash]));
486
+ await target.commit(scope, change.before.map((before) => ({
487
+ kind: "restore", id: before.id, expectedHash: after.get(before.id) ?? null, note: before.note,
488
+ })));
489
+ await this.store.record(key, { type: "undone", at: this.now(), change: changeId });
490
+ });
491
+ }
492
+ /**
493
+ * What decides the next automatic dream, per scope, for the page: whether it
494
+ * already dreamed today, and how many claims wait and since when.
495
+ */
496
+ async nextDream(target) {
497
+ const scopes = [];
498
+ for (const scope of ["project", "user"]) {
499
+ if (!(await target.notes(scope)))
500
+ continue;
501
+ const claims = await this.claimsOf(target, scope);
502
+ scopes.push({
503
+ scope, dreamedToday: await this.store.dreamedToday(this.key(target, scope), this.now()), waiting: claims.length,
504
+ ...(claims[0] ? { oldestAt: claims[0].at } : {}),
505
+ });
506
+ }
507
+ return { spentToday: await this.store.spentToday(this.now()), scopes };
508
+ }
509
+ /** Claims waiting, per scope, for the page. */
510
+ async pending(target) {
511
+ const [project, user] = await Promise.all([
512
+ this.store.claims({ scope: "project", project: target.projectId }, projectLedgerKey(target.projectId)),
513
+ this.store.claims({ scope: "user" }, USER_LEDGER_KEY),
514
+ ]);
515
+ return { project: project.length, user: user.length };
516
+ }
517
+ }
518
+ function estimate(entries) {
519
+ let chars = 4_000;
520
+ for (const entry of entries)
521
+ for (const block of entry.message.content)
522
+ if (block.type === "text")
523
+ chars += block.text.length;
524
+ return Math.min(chars, 64_000);
525
+ }
526
+ function evidenceOf(claims) {
527
+ return new Map(claims.map((claim) => [claim.id, {
528
+ id: claim.id, kind: claim.kind, text: claim.text, at: claim.at, ...(claim.quote ? { quote: claim.quote } : {}),
529
+ }]));
530
+ }
531
+ /** Operations that change a note; stale and conflict only ask a person to look. */
532
+ function committable(op) {
533
+ return op.op === "create" || op.op === "update" || op.op === "merge";
534
+ }
535
+ function toChange(op) {
536
+ if (!committable(op))
537
+ throw new Error("Not a change");
538
+ const draft = { summary: op.summary, body: op.body, tags: op.tags, ...(op.type ? { type: op.type } : {}) };
539
+ if (op.op === "create")
540
+ return { kind: "create", draft };
541
+ if (op.op === "update")
542
+ return { kind: "update", id: op.id, expectedHash: op.expectedHash, draft };
543
+ return { kind: "merge", ids: op.ids, expectedHashes: op.expectedHashes, draft };
544
+ }
545
+ function claimChars(claims) {
546
+ return claims.reduce((sum, claim) => sum + claim.text.length + (claim.quote?.length ?? 0) + 120, 6_000);
547
+ }
548
+ //# sourceMappingURL=dreaming-coordinator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dreaming-coordinator.js","sourceRoot":"","sources":["../../../src/runtime-plugins/builtin/dreaming-coordinator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import type { RuntimePlugin } from "../types.ts";
2
+ import { DreamCoordinator } from "./dreaming-coordinator.ts";
3
+ import type { DreamSessions, DreamingSettings, GenerateReply } from "./dreaming-coordinator.ts";
4
+ import type { MemoryBridge, MemoryService } from "./memory.ts";
5
+ /**
6
+ * Dreaming, as a runtime plugin of its own.
7
+ *
8
+ * Built on `memory` and never part of it: switching this plugin off in
9
+ * `runtimePlugins` leaves memory exactly as it was, and with `memory` off this
10
+ * one sets up as nothing at all. It never registers a memory provider (the
11
+ * host allows one) and never writes a note file: every change goes through
12
+ * memory's commit path, which the harness hands over in a `MemoryBridge`.
13
+ */
14
+ export interface DreamingPluginOptions {
15
+ projectId: string;
16
+ sessions: DreamSessions;
17
+ /** Memory's services, once memory has set up; absent when memory is off. */
18
+ memory(): {
19
+ project?: MemoryService;
20
+ user?: MemoryService;
21
+ };
22
+ /** One reply from the small model, with what it cost. Without it nothing is read or dreamed. */
23
+ generate?(system: string, prompt: string, signal?: AbortSignal): Promise<GenerateReply>;
24
+ bridge?: MemoryBridge;
25
+ coordinator?: DreamCoordinator;
26
+ }
27
+ export declare function parseDreamingConfig(raw: unknown): DreamingSettings;
28
+ /** Set the choice, for every project open in this process, and keep it. */
29
+ export declare function chooseAuto(auto: boolean | undefined, persist?: boolean): Promise<void>;
30
+ export declare function createDreamingPlugin(options: DreamingPluginOptions): RuntimePlugin<DreamingSettings>;