@dsh-enhanced/assistant-dreaming 0.0.0-stage → 0.1.68

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/lib/runtime.js ADDED
@@ -0,0 +1,500 @@
1
+ import { createHash, randomUUID } from 'node:crypto';
2
+ import { Context, Service } from '@deepseek-ai/cordis';
3
+ import { acceptanceDigest } from '@dsh-enhanced/task-acceptance-contract';
4
+ import { Config, normalizeConfig } from './config.js';
5
+ import { DreamStore } from './store.js';
6
+ import { decideTrigger, localDayKey, assignTicket, rollLottery, matchTickets } from './trigger.js';
7
+ import { buildDreamMaterial } from './projection.js';
8
+ import { runDreamAgent } from './dream-agent.js';
9
+ import { enqueueDreamNotification } from './notify.js';
10
+ /** Bounds how many recorded ideas may hold recall tickets per wake. */
11
+ const DREAM_RECORDED_TICKET_LIMIT = 100;
12
+ const EXECUTOR = 'assistant-dreaming-v1';
13
+ const OWNER = 'assistant-dreaming';
14
+ const CATALOG = acceptanceDigest({ executor: EXECUTOR, version: 1 });
15
+ /**
16
+ * Terminal outcomes for the Automations Host-executor contract. Success may
17
+ * only carry the literal `none` tuple; a possible side effect must be
18
+ * retryability-unsafe and a pure no-op success must be retryability-safe.
19
+ * Budget reservation/settlement belongs to Automations, never to this
20
+ * executor, so no result here reports a budget settlement.
21
+ */
22
+ const NO_EFFECT = Object.freeze({
23
+ outcome: 'succeeded', failureClass: 'none', failurePhase: 'none', failureCode: 'none',
24
+ sideEffectState: 'none', retryability: 'safe',
25
+ });
26
+ const EFFECT_OK = Object.freeze({
27
+ outcome: 'succeeded', failureClass: 'none', failurePhase: 'none', failureCode: 'none',
28
+ sideEffectState: 'possible', retryability: 'unsafe',
29
+ });
30
+ function failed(failureClass, failurePhase, failureCode, sideEffectState) {
31
+ const retryability = sideEffectState !== 'none' ? 'unsafe'
32
+ : failureClass === 'configuration' || failureClass === 'policy' || failureClass === 'budget'
33
+ ? 'after-intervention' : 'safe';
34
+ return Object.freeze({
35
+ outcome: failureClass === 'cancelled' || failureClass === 'unknown' ? 'unknown' : 'failed',
36
+ failureClass, failurePhase, failureCode, sideEffectState, retryability,
37
+ });
38
+ }
39
+ /**
40
+ * The owner-enabled dreaming runtime. It registers exactly one system-owned
41
+ * `every` automation and, per slot, re-derives the deterministic trigger, then
42
+ * runs one frozen single-tool agent that may only record private ideas. It
43
+ * never notifies unless L1 is explicitly enabled, never adopts, promotes, or
44
+ * writes goals/work-items; with `enabled: false` it opens no database and
45
+ * registers nothing.
46
+ *
47
+ * Scheduling and per-occurrence budget reservation/settlement belong to
48
+ * `assistant-automations`; this executor is a pure consumer of the Host
49
+ * executor contract and never reserves budget itself.
50
+ */
51
+ export class AssistantDreamingService extends Service {
52
+ static Config = Config;
53
+ static inject = ['assistantAutomations', 'assistantDelivery', 'assistantEvaluation',
54
+ 'assistantGoals', 'assistantSkills', 'agents', 'sessions', 'tools'];
55
+ #config;
56
+ #lane;
57
+ #ports;
58
+ #store;
59
+ #flight;
60
+ #active = true;
61
+ #scheduler;
62
+ #lastRunAt = null;
63
+ #lastRunOutcome = null;
64
+ #lastSkipReason = null;
65
+ #unregister;
66
+ /**
67
+ * Fresh per-load reconcile nonce for the active transition. Automations
68
+ * caches `automation_system_reconciles` by idempotency key and replays the
69
+ * old receipt without touching the row, so a deterministic key would silently
70
+ * skip reactivation after a retire/reload. A new key per load converges to
71
+ * one active row (the store CAS is idempotent) and appends one audit receipt.
72
+ */
73
+ #loadNonce = randomUUID();
74
+ constructor(ctx, input = {}) {
75
+ super(ctx, 'assistantDreaming');
76
+ const config = normalizeConfig(input);
77
+ this.#config = config;
78
+ this.#lane = config.scope === null ? 'inactive'
79
+ : acceptanceDigest({ scope: config.scope, databasePath: config.databasePath }).slice(0, 40);
80
+ if (!config.enabled) {
81
+ this.#scheduler = 'dormant';
82
+ return;
83
+ }
84
+ const ports = this.#portsFor(ctx);
85
+ this.#ports = ports;
86
+ this.#store = new DreamStore(config.databasePath, this.#lane);
87
+ try {
88
+ this.#store.interrupt();
89
+ this.#pruneStore(Date.now());
90
+ if (config.retired) {
91
+ // Owner pause: keep the ledger and definition, make sure the system
92
+ // automation is paused, and register no executor. This is the supported
93
+ // way to stop dreaming before disabling/uninstalling the bundle.
94
+ ports.automations.reconcileSystem(this.#reconcileInput('paused'));
95
+ this.#scheduler = 'dormant';
96
+ }
97
+ else {
98
+ this.#unregister = ports.automations.registerHostExecutor(this.#executor(ports));
99
+ ports.automations.reconcileSystem(this.#reconcileInput('active'));
100
+ this.#scheduler = 'active';
101
+ }
102
+ }
103
+ catch (error) {
104
+ // Construction must not leak a registered executor or an open ledger:
105
+ // the Loader keeps this process alive and a retry would otherwise fail
106
+ // with a duplicate executor descriptor. This also covers a failed paused
107
+ // reconcile while the owner is trying to retire.
108
+ this.#active = false;
109
+ this.#scheduler = 'unavailable';
110
+ try {
111
+ this.#unregister?.();
112
+ }
113
+ catch { /* best-effort unload */ }
114
+ this.#unregister = undefined;
115
+ try {
116
+ this.#store.interrupt();
117
+ }
118
+ catch { /* store may already be closed */ }
119
+ this.#store.close();
120
+ this.#store = undefined;
121
+ throw error;
122
+ }
123
+ ctx.effect(() => () => {
124
+ this.#active = false;
125
+ this.#unregister?.();
126
+ try {
127
+ this.#store?.interrupt();
128
+ }
129
+ catch { /* store may already be closed */ }
130
+ const closing = this.#flight;
131
+ this.#store?.close();
132
+ return closing;
133
+ }, 'assistant-dreaming.runtime');
134
+ }
135
+ /**
136
+ * Enforce the owner retention policy over the private idea ledger. Runs on
137
+ * plugin load and after every completed dream so a long-lived Host cannot
138
+ * keep expired ideas forever. Failure is observable but never fails a wake.
139
+ */
140
+ #pruneStore(now) {
141
+ try {
142
+ this.#store?.prune(now, this.#config.retentionDays);
143
+ }
144
+ catch (error) {
145
+ this.ctx.logger.warn(`assistant-dreaming: idea retention prune failed: ${error instanceof Error ? error.message : String(error)}`);
146
+ }
147
+ }
148
+ /**
149
+ * Register a stable ticket for every recallable subject derived from the
150
+ * current projected material and for this lane's unresolved recorded ideas.
151
+ * Pure registration: no randomness here, the ticket value comes from the
152
+ * HMAC seed in assignTicket.
153
+ */
154
+ #registerTickets(store, material, now, seedDigest) {
155
+ for (const item of material.items) {
156
+ const subject = { kind: item.kind, key: item.evidenceRef };
157
+ const ticket = assignTicket({ seedDigest, lane: this.#lane, subject });
158
+ store.upsertTicket({ subjectKind: subject.kind, subjectKey: subject.key,
159
+ value: ticket.value, digest: ticket.digest, now });
160
+ }
161
+ // Recorded-but-unresolved ideas are recall subjects too, so a past dream
162
+ // can be revisited; resolved ones (validated/rejected/withdrawn) stop
163
+ // holding a ticket by never being re-registered.
164
+ store.pruneResolvedIdeaTickets();
165
+ for (const idea of store.listIdeas(DREAM_RECORDED_TICKET_LIMIT)) {
166
+ if (idea.state !== 'recorded')
167
+ continue;
168
+ const subject = { kind: 'recorded-idea', key: idea.id };
169
+ const ticket = assignTicket({ seedDigest, lane: this.#lane, subject });
170
+ store.upsertTicket({ subjectKind: subject.kind, subjectKey: subject.key,
171
+ value: ticket.value, digest: ticket.digest, now });
172
+ }
173
+ }
174
+ /**
175
+ * The "无事找事" lottery: roll one code-generated number and return the
176
+ * tickets within the circular window. Runs without a model call; an empty
177
+ * result means no subject is recalled this slot.
178
+ */
179
+ #drawRecallHits(store, occurrence, seedDigest) {
180
+ const draw = rollLottery({ seedDigest, lane: this.#lane, occurrence });
181
+ const tickets = store.listTickets().map(row => ({
182
+ subject: { kind: row.subjectKind, key: row.subjectKey },
183
+ value: row.value, digest: row.digest,
184
+ }));
185
+ const hits = matchTickets({ draw, tickets, window: this.#config.lotteryWindow });
186
+ return { draw, hits };
187
+ }
188
+ #portsFor(ctx) {
189
+ const automations = ctx.get('assistantAutomations');
190
+ const delivery = ctx.get('assistantDelivery');
191
+ const evaluation = ctx.get('assistantEvaluation');
192
+ const goals = ctx.get('assistantGoals');
193
+ const skills = ctx.get('assistantSkills');
194
+ if (!automations || !delivery || !evaluation || !goals || !skills
195
+ || !ctx.get('agents') || !ctx.get('sessions') || !ctx.get('tools')) {
196
+ throw new Error('assistant-dreaming: enabled dreaming requires automations, delivery, evaluation, goals, skills, agents, sessions and tools');
197
+ }
198
+ return { automations, delivery, evaluation, goals, skills };
199
+ }
200
+ #automationId() {
201
+ return `dsh-enhanced-assistant-dreaming:${this.#lane}`;
202
+ }
203
+ #configDigest() {
204
+ return acceptanceDigest({ lane: this.#lane, config: this.#config }).slice(0, 40);
205
+ }
206
+ #reconcileInput(desiredStatus) {
207
+ // Both transitions are load-scoped. Automations replays a cached
208
+ // `automation_system_reconciles` receipt for a repeated idempotency key
209
+ // without touching the row, so a deterministic paused key would make a
210
+ // second retire (or retire after resume) silently leave the row active
211
+ // while this plugin is already dormant. Reconcile is a local CAS converge
212
+ // operation: a fresh key per load is safe, and a repeated retire() in the
213
+ // same load still just replays the same paused receipt.
214
+ const key = `${this.#automationId()}:${this.#configDigest()}:${desiredStatus}:${this.#loadNonce}`;
215
+ return {
216
+ owner: OWNER,
217
+ automationId: this.#automationId(),
218
+ idempotencyKey: key,
219
+ desiredStatus,
220
+ definition: this.#definition(),
221
+ };
222
+ }
223
+ #definition() {
224
+ const scope = this.#config.scope;
225
+ return {
226
+ name: 'Bounded dreaming review',
227
+ schedule: { kind: 'every', anchorAt: new Date(0).toISOString(), intervalMs: this.#config.baseIntervalMs },
228
+ workspace: scope.workspace,
229
+ agentPreset: scope.preset,
230
+ timeoutMs: this.#config.maxDurationMs,
231
+ // A missed slot is skipped, never replayed: dreaming must not catch up
232
+ // with a burst of paid model calls after downtime.
233
+ misfire: { kind: 'skip' },
234
+ overlap: 'skip',
235
+ retrySafety: 'never',
236
+ maxRetries: 0,
237
+ principal: scope.principalId,
238
+ budgetId: this.#config.budgetId,
239
+ budgetAmount: this.#config.budgetAmount,
240
+ execution: {
241
+ kind: 'host', executorId: EXECUTOR, executorContractVersion: 1, runbookId: 'dream', runbookVersion: 1,
242
+ catalogDigest: CATALOG,
243
+ targetScope: { workspace: scope.workspace, preset: scope.preset },
244
+ scopeDigest: acceptanceDigest([scope.workspace, scope.preset]),
245
+ ownerRouteId: scope.ownerRouteId,
246
+ activationNonce: this.#configDigest(),
247
+ },
248
+ };
249
+ }
250
+ #executor(ports) {
251
+ return {
252
+ descriptor: { executorId: EXECUTOR, contractVersion: 1, catalogDigest: CATALOG },
253
+ accepts: (spec) => spec.executorId === EXECUTOR && spec.executorContractVersion === 1 && spec.catalogDigest === CATALOG
254
+ && spec.runbookId === 'dream' && spec.runbookVersion === 1,
255
+ execute: (input) => {
256
+ const flight = this.#runSlot(ports, input);
257
+ this.#flight = flight;
258
+ void flight.finally(() => { if (this.#flight === flight)
259
+ this.#flight = undefined; }).catch(() => { });
260
+ return flight;
261
+ },
262
+ };
263
+ }
264
+ /** Latest trusted activity timestamp from Evaluation projections, or null. */
265
+ #latestActivity(ports, scope) {
266
+ const page = ports.evaluation.listTrustedTaskLearningProjections({ scope, limit: 1 });
267
+ const item = page.items[0];
268
+ const at = item?.receipt.objective?.occurredAt;
269
+ return typeof at === 'number' && Number.isFinite(at) ? at : null;
270
+ }
271
+ async #runSlot(ports, input) {
272
+ if (!this.#active || this.#store === undefined) {
273
+ return failed('cancelled', 'preflight', 'disposed', 'none');
274
+ }
275
+ const store = this.#store;
276
+ const config = this.#config;
277
+ const scopeConfig = config.scope;
278
+ if (input.executionMode !== 'production') {
279
+ // A dry-run/preview occurrence must never spend money or write ideas.
280
+ this.#lastSkipReason = 'preview';
281
+ return NO_EFFECT;
282
+ }
283
+ if (input.targetScope?.workspace !== scopeConfig.workspace
284
+ || input.targetScope?.preset !== scopeConfig.preset
285
+ || input.principal !== scopeConfig.principalId
286
+ || input.ownerRouteId !== scopeConfig.ownerRouteId) {
287
+ this.#lastRunOutcome = 'failed';
288
+ return failed('configuration', 'preflight', 'dream-scope-mismatch', 'none');
289
+ }
290
+ const now = Date.now();
291
+ const timezone = config.activeHours?.timezone ?? 'UTC';
292
+ const dayKey = localDayKey(now, timezone);
293
+ let latestActivityAt = null;
294
+ try {
295
+ latestActivityAt = this.#latestActivity(ports, ports.evaluation.canonicalHostScope({
296
+ workspace: scopeConfig.workspace, preset: scopeConfig.preset
297
+ }));
298
+ }
299
+ catch {
300
+ latestActivityAt = null;
301
+ }
302
+ const occurrence = Number.parseInt(createHash('sha256')
303
+ .update(`${input.definitionHash}\0${input.occurrenceId}`).digest('hex').slice(0, 12), 16);
304
+ const seedDigest = config.seedDigest ?? createHash('sha256').update(`assistant-dreaming\0${this.#lane}`).digest('hex');
305
+ const decision = decideTrigger({
306
+ now,
307
+ occurrence,
308
+ lane: this.#lane,
309
+ seedDigest,
310
+ probabilityPpm: config.runProbabilityPpm,
311
+ activeHours: config.activeHours,
312
+ latestActivityAt,
313
+ idleMinMs: config.idleMinMs,
314
+ dreamsToday: store.countDreams(dayKey),
315
+ maxDreamsPerDay: config.maxDreamsPerDay,
316
+ });
317
+ if (!decision.fire) {
318
+ this.#lastSkipReason = decision.reason;
319
+ return NO_EFFECT;
320
+ }
321
+ // Per-subject lottery ("无事找事"): build material and tickets, then roll
322
+ // one code-generated number. A miss is a normal no-thought slot and skips
323
+ // the model entirely; a hit focuses the wake on the recalled subject.
324
+ let seedMaterial;
325
+ try {
326
+ seedMaterial = buildDreamMaterial({
327
+ evaluation: ports.evaluation, delivery: ports.delivery, goals: ports.goals, skills: ports.skills,
328
+ scope: scopeConfig, maxInputBytes: config.maxInputBytes,
329
+ });
330
+ this.#registerTickets(store, seedMaterial, now, seedDigest);
331
+ }
332
+ catch (error) {
333
+ // A revoked/missing owner route or projection failure is an owner
334
+ // configuration problem, not a dreamed result: fail closed with no
335
+ // model spend and no ledger write.
336
+ this.#lastRunOutcome = 'failed';
337
+ this.ctx.logger.warn(`assistant-dreaming: material unavailable: ${error instanceof Error ? error.message : String(error)}`);
338
+ return failed('configuration', 'preflight', 'dream-material-unavailable', 'none');
339
+ }
340
+ const { draw, hits } = this.#drawRecallHits(store, occurrence, seedDigest);
341
+ if (hits.length === 0) {
342
+ this.#lastSkipReason = 'lottery-no-hit';
343
+ return NO_EFFECT;
344
+ }
345
+ for (const hit of hits) {
346
+ store.recordRecall({ occurrence, drawDigest: draw.drawDigest, drawValue: draw.value,
347
+ subjectKind: hit.subject.kind, subjectKey: hit.subject.key, ticketValue: hit.ticketValue,
348
+ distance: hit.distance, at: now });
349
+ }
350
+ this.#lastSkipReason = null;
351
+ const runId = `dream-${input.occurrenceId}`;
352
+ let submitted = false;
353
+ try {
354
+ const model = this.#resolveModel();
355
+ store.beginDream(runId, occurrence, decision.dayKey, now, decision.drawDigest);
356
+ submitted = true;
357
+ this.#lastRunAt = now;
358
+ const result = await runDreamAgent({
359
+ ctx: this.ctx,
360
+ wakeId: input.occurrenceId,
361
+ config,
362
+ model,
363
+ scope: scopeConfig,
364
+ material: seedMaterial,
365
+ recallHits: hits.map(hit => {
366
+ const focus = { kind: hit.subject.kind, key: hit.subject.key,
367
+ ticketValue: hit.ticketValue, distance: hit.distance };
368
+ // Recorded ideas live outside the projection material; carry their
369
+ // own summary so the recalled subject is not just an opaque id.
370
+ if (hit.subject.kind === 'recorded-idea') {
371
+ const idea = store.idea(hit.subject.key);
372
+ if (idea !== undefined)
373
+ return { ...focus, summary: idea.summary };
374
+ }
375
+ return focus;
376
+ }),
377
+ deadlineAt: Math.min(now + config.maxDurationMs, Date.now() + config.maxDurationMs),
378
+ signal: input.signal,
379
+ onSubmit: ideas => {
380
+ let recorded = 0;
381
+ for (const idea of ideas) {
382
+ store.recordIdea({
383
+ id: createHash('sha256').update(`${runId}\0${recorded}\0${idea.summary}`).digest('hex').slice(0, 32),
384
+ runId, createdAt: Date.now(), dayKey: decision.dayKey,
385
+ summary: idea.summary, detail: idea.detail, evidenceRefs: idea.evidenceRefs,
386
+ });
387
+ recorded += 1;
388
+ }
389
+ return recorded;
390
+ },
391
+ });
392
+ this.#lastRunOutcome = result.outcome;
393
+ if (result.outcome === 'succeeded') {
394
+ store.completeDream(runId, Date.now(), result.ideaCount);
395
+ this.#pruneStore(Date.now());
396
+ this.#notifyOwner(store, runId, decision.dayKey, result.ideaCount, now);
397
+ return EFFECT_OK;
398
+ }
399
+ store.markInterrupted(runId, Date.now());
400
+ return result.outcome === 'cancelled'
401
+ ? failed('cancelled', 'host-execution', 'dream-agent-cancelled', 'possible')
402
+ : failed('execution', 'host-execution', 'dream-agent-failed', 'possible');
403
+ }
404
+ catch (error) {
405
+ if (this.#store !== undefined) {
406
+ try {
407
+ store.markInterrupted(runId, Date.now());
408
+ }
409
+ catch { /* closed */ }
410
+ }
411
+ this.#lastRunOutcome = 'failed';
412
+ this.ctx.logger.warn(`assistant-dreaming: dream wake failed: ${error instanceof Error ? error.message : String(error)}`);
413
+ return submitted
414
+ ? failed('execution', 'host-execution', 'dream-execution-failed', 'possible')
415
+ : failed('configuration', 'preflight', 'dream-preflight-failed', 'none');
416
+ }
417
+ }
418
+ #resolveModel() {
419
+ const config = this.#config;
420
+ return { provider: config.provider, model: config.model,
421
+ ...(config.reasoningEffort === null ? {} : { reasoningEffort: config.reasoningEffort }) };
422
+ }
423
+ /**
424
+ * L1 owner summary notification. Fails closed at every gate: the
425
+ * notification flag, daily count and minimum interval must all allow it,
426
+ * and the live route is re-validated by the enqueue helper. A failed
427
+ * notification never changes the dream outcome.
428
+ */
429
+ #notifyOwner(store, runId, dayKey, ideaCount, now) {
430
+ const config = this.#config;
431
+ if (!config.notifyOwner || config.maxNotificationsPerDay === 0 || ideaCount === 0)
432
+ return;
433
+ if (store.countNotifications(dayKey) >= config.maxNotificationsPerDay)
434
+ return;
435
+ const lastAt = store.lastNotificationAt();
436
+ if (lastAt !== null && now - lastAt < config.notifyMinIntervalMs)
437
+ return;
438
+ const scope = config.scope;
439
+ const delivery = this.ctx.get('assistantDelivery', false);
440
+ if (delivery === undefined)
441
+ return;
442
+ const sent = enqueueDreamNotification({
443
+ validateOwnerRoute: input => delivery.validateOwnerRoute({ authorityId: scope.ownerRouteId, principalId: input.principalId,
444
+ workspace: input.workspace, agentPreset: input.preset }),
445
+ resolveOwnerRoute: ownerRouteId => delivery.resolveOwnerRoute(ownerRouteId),
446
+ enqueueOwnerNotification: input => delivery.enqueueOwnerNotification(input),
447
+ }, {
448
+ owner: { ownerRouteId: scope.ownerRouteId, principalId: scope.principalId, workspace: scope.workspace, preset: scope.preset },
449
+ runId,
450
+ summaries: store.listIdeas(ideaCount).map(idea => ({ summary: idea.summary, detail: idea.detail })),
451
+ dayKey, now, expiresAt: now + config.maxDurationMs,
452
+ });
453
+ if (sent)
454
+ store.incrementNotifications(dayKey, now);
455
+ }
456
+ // Public surfaces are bound arrow properties: Cordis serves services through
457
+ // a traceable proxy whose method calls would otherwise lose the private-field
458
+ // receiver (the Loader and owner surfaces always read through that proxy).
459
+ health = () => {
460
+ let counts = { runs: 0, ideas: 0, recorded: 0 };
461
+ if (this.#store !== undefined) {
462
+ try {
463
+ counts = this.#store.counts();
464
+ }
465
+ catch { /* read failure keeps zeros */ }
466
+ }
467
+ return Object.freeze({
468
+ enabled: this.#config.enabled,
469
+ scheduler: this.#scheduler,
470
+ lastRunAt: this.#lastRunAt,
471
+ lastRunOutcome: this.#lastRunOutcome,
472
+ lastSkipReason: this.#lastSkipReason,
473
+ counts,
474
+ });
475
+ };
476
+ /** Read-only access to recorded ideas for the owner-facing surfaces. */
477
+ inspectIdeas = (limit = 50) => {
478
+ if (this.#store === undefined)
479
+ return Object.freeze([]);
480
+ return Object.freeze([...this.#store.listIdeas(Math.min(Math.max(1, limit), 200))]);
481
+ };
482
+ /**
483
+ * Owner-visible retirement: pause the system automation and unregister the
484
+ * executor, keeping the private ledger (ideas are never deleted here).
485
+ */
486
+ retire = () => {
487
+ if (!this.#config.enabled || this.#store === undefined)
488
+ return;
489
+ this.#active = false;
490
+ this.#unregister?.();
491
+ this.#unregister = undefined;
492
+ try {
493
+ this.#ports?.automations.reconcileSystem(this.#reconcileInput('paused'));
494
+ }
495
+ catch { /* ledger stays readable */ }
496
+ this.#scheduler = 'dormant';
497
+ };
498
+ }
499
+ export { Config };
500
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
package/lib/store.d.ts ADDED
@@ -0,0 +1,113 @@
1
+ export type IdeaState = 'recorded' | 'withdrawn' | 'owner-acknowledged' | 'validated' | 'rejected';
2
+ export interface DreamIdea {
3
+ id: string;
4
+ lane: string;
5
+ runId: string;
6
+ createdAt: number;
7
+ dayKey: string;
8
+ state: IdeaState;
9
+ summary: string;
10
+ detail: string;
11
+ /** Digests of the Host projections this idea cites; never raw content. */
12
+ evidenceRefs: readonly string[];
13
+ }
14
+ export interface DreamRunRecord {
15
+ id: string;
16
+ lane: string;
17
+ occurrence: number;
18
+ dayKey: string;
19
+ startedAt: number;
20
+ endedAt: number | null;
21
+ outcome: 'running' | 'completed' | 'interrupted';
22
+ drawDigest: string;
23
+ ideaCount: number;
24
+ }
25
+ export interface IdeaEvent {
26
+ ideaId: string;
27
+ state: IdeaState;
28
+ actor: 'owner' | 'host';
29
+ at: number;
30
+ note?: string;
31
+ }
32
+ export declare function assertLedgerPath(path: string): void;
33
+ /** New idea data must be exact own data: no accessors, proxies or cycles. */
34
+ export declare function ownData<T>(input: T): T;
35
+ export declare class DreamStore {
36
+ private readonly db;
37
+ private readonly lane;
38
+ private closed;
39
+ constructor(databasePath: string, lane: string);
40
+ private migrate;
41
+ get isClosed(): boolean;
42
+ close(): void;
43
+ beginDream(id: string, occurrence: number, dayKey: string, startedAt: number, drawDigest: string): DreamRunRecord;
44
+ completeDream(id: string, endedAt: number, ideaCount: number): void;
45
+ markInterrupted(id: string, endedAt: number): void;
46
+ run(id: string): DreamRunRecord | undefined;
47
+ countDreams(dayKey: string): number;
48
+ /** L1 notification accounting over the existing per-day counters row. */
49
+ countNotifications(dayKey: string): number;
50
+ incrementNotifications(dayKey: string, at: number): number;
51
+ /** Timestamp of the most recent notification, or null when none was sent. */
52
+ lastNotificationAt(): number | null;
53
+ /**
54
+ * Register one subject's lottery ticket. The value is derived by the caller
55
+ * from the plugin seed, so the store never invents randomness; re-registering
56
+ * the same subject keeps its original ticket.
57
+ */
58
+ upsertTicket(ticket: {
59
+ subjectKind: string;
60
+ subjectKey: string;
61
+ value: number;
62
+ digest: string;
63
+ now: number;
64
+ }): void;
65
+ /** All unsolved lottery tickets for this lane, oldest first. */
66
+ listTickets(): readonly {
67
+ subjectKind: string;
68
+ subjectKey: string;
69
+ value: number;
70
+ digest: string;
71
+ }[];
72
+ /** Record one recall hit; the unique key makes a replayed slot a no-op. */
73
+ recordRecall(input: {
74
+ occurrence: number;
75
+ drawDigest: string;
76
+ drawValue: number;
77
+ subjectKind: string;
78
+ subjectKey: string;
79
+ ticketValue: number;
80
+ distance: number;
81
+ at: number;
82
+ }): boolean;
83
+ /**
84
+ * Drop tickets held by recorded ideas that left the `recorded` state
85
+ * (validated/rejected/withdrawn): a resolved idea must stop being recalled.
86
+ */
87
+ pruneResolvedIdeaTickets(): number;
88
+ lastRecall(): {
89
+ occurrence: number;
90
+ subjectKind: string;
91
+ subjectKey: string;
92
+ at: number;
93
+ } | undefined;
94
+ recordIdea(idea: Omit<DreamIdea, 'lane' | 'state'>): DreamIdea;
95
+ idea(id: string): DreamIdea | undefined;
96
+ transitionIdea(id: string, state: Exclude<IdeaState, 'recorded'>, actor: 'owner' | 'host', at: number, note?: string): void;
97
+ listIdeas(limit?: number): readonly DreamIdea[];
98
+ counts(): {
99
+ runs: number;
100
+ ideas: number;
101
+ recorded: number;
102
+ };
103
+ /**
104
+ * Hard-delete expired ideas per retention policy; runs keep audit digests
105
+ * only. Events are removed first in the same transaction because
106
+ * `dream_idea_events.idea_id` is a foreign key without ON DELETE CASCADE:
107
+ * a single event row would otherwise abort the whole prune with
108
+ * FOREIGN KEY constraint failed and silently disable retention.
109
+ */
110
+ prune(now: number, retentionDays: number): number;
111
+ interrupt(): void;
112
+ }
113
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}