@dsh-enhanced/assistant-goals 0.1.30

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 (100) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +274 -0
  3. package/cordis.patch.yml +3 -0
  4. package/lib/budget-store.d.ts +73 -0
  5. package/lib/budget-store.d.ts.map +1 -0
  6. package/lib/budget-store.js +345 -0
  7. package/lib/budget-store.js.map +1 -0
  8. package/lib/budget.d.ts +78 -0
  9. package/lib/budget.d.ts.map +1 -0
  10. package/lib/budget.js +344 -0
  11. package/lib/budget.js.map +1 -0
  12. package/lib/dependency.d.ts +11 -0
  13. package/lib/dependency.d.ts.map +1 -0
  14. package/lib/dependency.js +34 -0
  15. package/lib/dependency.js.map +1 -0
  16. package/lib/event-wait-store.d.ts +56 -0
  17. package/lib/event-wait-store.d.ts.map +1 -0
  18. package/lib/event-wait-store.js +189 -0
  19. package/lib/event-wait-store.js.map +1 -0
  20. package/lib/event-wait.d.ts +47 -0
  21. package/lib/event-wait.d.ts.map +1 -0
  22. package/lib/event-wait.js +372 -0
  23. package/lib/event-wait.js.map +1 -0
  24. package/lib/execution-store.d.ts +23 -0
  25. package/lib/execution-store.d.ts.map +1 -0
  26. package/lib/execution-store.js +207 -0
  27. package/lib/execution-store.js.map +1 -0
  28. package/lib/execution.d.ts +49 -0
  29. package/lib/execution.d.ts.map +1 -0
  30. package/lib/execution.js +438 -0
  31. package/lib/execution.js.map +1 -0
  32. package/lib/feedback.d.ts +63 -0
  33. package/lib/feedback.d.ts.map +1 -0
  34. package/lib/feedback.js +134 -0
  35. package/lib/feedback.js.map +1 -0
  36. package/lib/index.d.ts +27 -0
  37. package/lib/index.d.ts.map +1 -0
  38. package/lib/index.js +9 -0
  39. package/lib/index.js.map +1 -0
  40. package/lib/outcome-store.d.ts +47 -0
  41. package/lib/outcome-store.d.ts.map +1 -0
  42. package/lib/outcome-store.js +271 -0
  43. package/lib/outcome-store.js.map +1 -0
  44. package/lib/outcome.d.ts +77 -0
  45. package/lib/outcome.d.ts.map +1 -0
  46. package/lib/outcome.js +417 -0
  47. package/lib/outcome.js.map +1 -0
  48. package/lib/service.d.ts +363 -0
  49. package/lib/service.d.ts.map +1 -0
  50. package/lib/service.js +1839 -0
  51. package/lib/service.js.map +1 -0
  52. package/lib/store.d.ts +21 -0
  53. package/lib/store.d.ts.map +1 -0
  54. package/lib/store.js +577 -0
  55. package/lib/store.js.map +1 -0
  56. package/lib/strategy-feedback.d.ts +29 -0
  57. package/lib/strategy-feedback.d.ts.map +1 -0
  58. package/lib/strategy-feedback.js +53 -0
  59. package/lib/strategy-feedback.js.map +1 -0
  60. package/lib/strategy-identity.d.ts +11 -0
  61. package/lib/strategy-identity.d.ts.map +1 -0
  62. package/lib/strategy-identity.js +10 -0
  63. package/lib/strategy-identity.js.map +1 -0
  64. package/lib/strategy-store.d.ts +76 -0
  65. package/lib/strategy-store.d.ts.map +1 -0
  66. package/lib/strategy-store.js +277 -0
  67. package/lib/strategy-store.js.map +1 -0
  68. package/lib/strategy.d.ts +56 -0
  69. package/lib/strategy.d.ts.map +1 -0
  70. package/lib/strategy.js +478 -0
  71. package/lib/strategy.js.map +1 -0
  72. package/lib/tools.d.ts +4 -0
  73. package/lib/tools.d.ts.map +1 -0
  74. package/lib/tools.js +130 -0
  75. package/lib/tools.js.map +1 -0
  76. package/lib/types.d.ts +285 -0
  77. package/lib/types.d.ts.map +1 -0
  78. package/lib/types.js +10 -0
  79. package/lib/types.js.map +1 -0
  80. package/lib/verified-artifact.d.ts +72 -0
  81. package/lib/verified-artifact.d.ts.map +1 -0
  82. package/lib/verified-artifact.js +142 -0
  83. package/lib/verified-artifact.js.map +1 -0
  84. package/lib/verified-workflow.d.ts +120 -0
  85. package/lib/verified-workflow.d.ts.map +1 -0
  86. package/lib/verified-workflow.js +253 -0
  87. package/lib/verified-workflow.js.map +1 -0
  88. package/lib/version.d.ts +2 -0
  89. package/lib/version.d.ts.map +1 -0
  90. package/lib/version.js +2 -0
  91. package/lib/version.js.map +1 -0
  92. package/lib/wake-store.d.ts +38 -0
  93. package/lib/wake-store.d.ts.map +1 -0
  94. package/lib/wake-store.js +177 -0
  95. package/lib/wake-store.js.map +1 -0
  96. package/lib/wake.d.ts +45 -0
  97. package/lib/wake.d.ts.map +1 -0
  98. package/lib/wake.js +327 -0
  99. package/lib/wake.js.map +1 -0
  100. package/package.json +143 -0
@@ -0,0 +1,189 @@
1
+ import { DatabaseSync } from 'node:sqlite';
2
+ import { acceptanceCanonicalJson, acceptanceDigest } from '@dsh-enhanced/task-acceptance-contract';
3
+ import { canonicalExternalEventEnvelope, externalEventDigest, parseExternalEventEnvelope } from '@dsh-enhanced/assistant-automations/external-event';
4
+ import { GoalStoreError } from './types.js';
5
+ import { prepareGoalStoreDatabaseFile } from './store.js';
6
+ import { validateGoalWakeIntent } from './wake-store.js';
7
+ const id = /^[A-Za-z0-9][A-Za-z0-9._:-]{0,511}$/u;
8
+ const digest = /^[a-f0-9]{64}$/u;
9
+ function fail(code = 'invalid-input') { throw new GoalStoreError(code); }
10
+ const plain = (value) => value !== null && typeof value === 'object' && !Array.isArray(value) && Object.getPrototypeOf(value) === Object.prototype;
11
+ const exact = (value, keys) => plain(value) && Object.keys(value).length === keys.length && keys.every(key => Object.hasOwn(value, key));
12
+ const integer = (value, min = 0) => Number.isSafeInteger(value) && value >= min;
13
+ const text = (value, max = 512) => typeof value === 'string' && value.length > 0 && value.length <= max && id.test(value);
14
+ const same = (a, b) => acceptanceDigest(a) === acceptanceDigest(b);
15
+ const freeze = (value) => { if (value && typeof value === 'object' && !Object.isFrozen(value)) {
16
+ for (const child of Object.values(value))
17
+ freeze(child);
18
+ Object.freeze(value);
19
+ } ; return value; };
20
+ const parse = (value) => { try {
21
+ return JSON.parse(value);
22
+ }
23
+ catch {
24
+ return fail('schema');
25
+ } };
26
+ function source(value) {
27
+ if (!exact(value, ['protocol', 'sourceId', 'kind', 'version', 'configDigest', 'target', 'highWaterSequence']) || value.protocol !== 'dsh-event-source/v1'
28
+ || !text(value.sourceId) || !['file', 'http-json', 'webhook', 'github-repository', 'lark-calendar'].includes(value.kind) || !text(value.version, 200)
29
+ || typeof value.configDigest !== 'string' || !digest.test(value.configDigest) || !exact(value.target, ['automationId']) || !text(value.target.automationId)
30
+ || !integer(value.highWaterSequence))
31
+ fail();
32
+ const input = value;
33
+ const target = input.target;
34
+ return freeze({ protocol: input.protocol, sourceId: input.sourceId, kind: input.kind, version: input.version, configDigest: input.configDigest, target: { automationId: target.automationId }, highWaterSequence: input.highWaterSequence });
35
+ }
36
+ export function validateGoalEventWaitIntent(value) {
37
+ const keys = Object.hasOwn(value, 'opportunityProfile') ? ['id', 'wake', 'source', 'createdAt', 'expiresAt', 'runTimeoutMs', 'opportunityProfile'] : ['id', 'wake', 'source', 'createdAt', 'expiresAt', 'runTimeoutMs'];
38
+ if (!exact(value, keys) || !text(value.id) || !integer(value.createdAt) || !integer(value.expiresAt) || value.expiresAt <= value.createdAt || value.expiresAt - value.createdAt > 31 * 86_400_000 || !integer(value.runTimeoutMs) || value.runTimeoutMs < 1_000 || value.runTimeoutMs > 300_000 || (Object.hasOwn(value, 'opportunityProfile') && !text(value.opportunityProfile)))
39
+ fail();
40
+ const wake = value.wake;
41
+ // Use the wake ledger's authoritative validator, with temporary valid scheduling fields.
42
+ const validated = validateGoalWakeIntent({ ...wake, id: `event-validate:${value.id}`, at: value.createdAt, expiresAt: value.createdAt + value.runTimeoutMs });
43
+ const snapshot = source(value.source);
44
+ return freeze({ id: value.id, wake: (({ id: _id, at: _at, expiresAt: _expiresAt, ...rest }) => rest)(validated), source: snapshot, createdAt: value.createdAt, expiresAt: value.expiresAt, runTimeoutMs: value.runTimeoutMs, ...(value.opportunityProfile === undefined ? {} : { opportunityProfile: value.opportunityProfile }) });
45
+ }
46
+ function matchedInput(intent, sequence, envelopeInput, wakeInput, code) {
47
+ if (!integer(sequence, intent.source.highWaterSequence + 1))
48
+ fail(code);
49
+ let envelope;
50
+ let wake;
51
+ try {
52
+ envelope = parseExternalEventEnvelope(envelopeInput);
53
+ wake = validateGoalWakeIntent(wakeInput);
54
+ }
55
+ catch {
56
+ fail(code);
57
+ }
58
+ const { id: _id, at: _at, expiresAt: _expiresAt, ...base } = wake;
59
+ if (envelope.source.id !== intent.source.sourceId || envelope.source.kind !== intent.source.kind || envelope.source.version !== intent.source.version
60
+ || envelope.source.configDigest !== intent.source.configDigest || envelope.target.automationId !== intent.source.target.automationId
61
+ || envelope.event.receivedAt > intent.expiresAt
62
+ || !same(base, intent.wake) || wake.id !== `goal-event-wake-${intent.id}` || wake.at < intent.createdAt
63
+ || wake.expiresAt !== Math.min(intent.expiresAt, wake.at + intent.runTimeoutMs))
64
+ fail(code);
65
+ return { envelope, wake };
66
+ }
67
+ function wait(row) {
68
+ const intent = validateGoalEventWaitIntent(parse(row.intent_json));
69
+ if (row.id !== intent.id || row.scope_key !== acceptanceCanonicalJson(intent.wake.scope) || row.goal_id !== intent.wake.goalId || row.session_id !== intent.wake.native.sessionId || row.native_goal_id !== intent.wake.native.goalId || row.native_revision !== intent.wake.native.revision || !integer(row.source_cursor, intent.source.highWaterSequence))
70
+ fail('schema');
71
+ if (!['waiting', 'matched', 'materialized', 'terminal'].includes(row.state))
72
+ fail('schema');
73
+ const hasMatch = row.sequence !== null || row.envelope_canonical !== null || row.envelope_digest !== null || row.wake_json !== null;
74
+ const completeMatch = row.sequence !== null && row.envelope_canonical !== null && row.envelope_digest !== null && row.wake_json !== null;
75
+ if (hasMatch !== completeMatch || (row.state === 'waiting' && hasMatch) || ((row.state === 'matched' || row.state === 'materialized') && !completeMatch))
76
+ fail('schema');
77
+ if (row.state === 'terminal') {
78
+ if (!['denied', 'expired', 'source-changed', 'invalid-current', 'settled'].includes(row.reason ?? ''))
79
+ fail('schema');
80
+ }
81
+ else if (row.reason !== null)
82
+ fail('schema');
83
+ if (!completeMatch)
84
+ return freeze({ intent, state: row.state, ...(row.reason === null ? {} : { reason: row.reason }) });
85
+ if (!integer(row.sequence, 1) || !digest.test(row.envelope_digest))
86
+ fail('schema');
87
+ const envelope = parseExternalEventEnvelope(parse(row.envelope_canonical));
88
+ if (canonicalExternalEventEnvelope(envelope) !== row.envelope_canonical || externalEventDigest(envelope) !== row.envelope_digest)
89
+ fail('schema');
90
+ const matchedWake = validateGoalWakeIntent(parse(row.wake_json));
91
+ matchedInput(intent, row.sequence, envelope, matchedWake, 'schema');
92
+ return freeze({ intent, state: row.state, ...(row.reason === null ? {} : { reason: row.reason }), match: { sequence: row.sequence, envelope, digest: row.envelope_digest, wake: matchedWake } });
93
+ }
94
+ /** Private, immutable ledger for source observations which may authorize one wake. */
95
+ export class GoalEventWaitStore {
96
+ #database;
97
+ constructor(path) {
98
+ if (path !== ':memory:')
99
+ prepareGoalStoreDatabaseFile(path);
100
+ this.#database = new DatabaseSync(path, { enableForeignKeyConstraints: true });
101
+ try {
102
+ this.#database.exec('PRAGMA foreign_keys = ON; PRAGMA busy_timeout = 250; PRAGMA journal_mode = WAL; PRAGMA synchronous = FULL;');
103
+ const version = this.#database.prepare('PRAGMA user_version').get().user_version;
104
+ const tables = this.#database.prepare("SELECT name FROM sqlite_schema WHERE type = 'table' AND name NOT LIKE 'sqlite_%' ORDER BY name").all().map(row => row.name);
105
+ if (version === 0 && tables.length === 0)
106
+ this.#database.exec("BEGIN IMMEDIATE; CREATE TABLE goal_event_waits (id TEXT PRIMARY KEY, intent_json TEXT NOT NULL, state TEXT NOT NULL CHECK(state IN ('waiting','matched','materialized','terminal')), reason TEXT, sequence INTEGER, envelope_canonical TEXT, envelope_digest TEXT, wake_json TEXT, scope_key TEXT NOT NULL, goal_id TEXT NOT NULL, session_id TEXT NOT NULL, native_goal_id TEXT NOT NULL, native_revision INTEGER NOT NULL, source_cursor INTEGER NOT NULL) STRICT; CREATE UNIQUE INDEX goal_event_wait_native_once ON goal_event_waits(scope_key, session_id, native_goal_id, native_revision); CREATE INDEX goal_event_wait_pending ON goal_event_waits(state, id); PRAGMA user_version = 2; COMMIT;");
107
+ else if (version === 1 && same(tables, ['goal_event_waits']))
108
+ this.#database.exec('BEGIN IMMEDIATE; ALTER TABLE goal_event_waits ADD COLUMN source_cursor INTEGER NOT NULL DEFAULT 0; UPDATE goal_event_waits SET source_cursor = json_extract(intent_json, \'$.source.highWaterSequence\'); PRAGMA user_version = 2; COMMIT;');
109
+ else if (version !== 2 || !same(tables, ['goal_event_waits']))
110
+ fail('schema');
111
+ const columns = this.#database.prepare('PRAGMA table_info(goal_event_waits)').all().map(row => row.name);
112
+ if (!same(columns, ['id', 'intent_json', 'state', 'reason', 'sequence', 'envelope_canonical', 'envelope_digest', 'wake_json', 'scope_key', 'goal_id', 'session_id', 'native_goal_id', 'native_revision', 'source_cursor']))
113
+ fail('schema');
114
+ const table = this.#database.prepare('PRAGMA table_list').all().find(row => row.name === 'goal_event_waits');
115
+ const indexes = this.#database.prepare('PRAGMA index_list(goal_event_waits)').all();
116
+ if (table?.strict !== 1 || !indexes.some(row => row.name === 'goal_event_wait_native_once' && row.unique === 1 && row.partial === 0))
117
+ fail('schema');
118
+ const uniqueColumns = this.#database.prepare('PRAGMA index_info(goal_event_wait_native_once)').all().map(row => row.name);
119
+ if (!same(uniqueColumns, ['scope_key', 'session_id', 'native_goal_id', 'native_revision']))
120
+ fail('schema');
121
+ if (this.#database.prepare('PRAGMA quick_check').get().quick_check !== 'ok')
122
+ fail('schema');
123
+ for (const row of this.#allRows())
124
+ wait(row);
125
+ if (path !== ':memory:')
126
+ prepareGoalStoreDatabaseFile(path);
127
+ }
128
+ catch (error) {
129
+ this.#database.close();
130
+ throw error;
131
+ }
132
+ }
133
+ #allRows() { return this.#database.prepare('SELECT id, intent_json, state, reason, sequence, envelope_canonical, envelope_digest, wake_json, scope_key, goal_id, session_id, native_goal_id, native_revision, source_cursor FROM goal_event_waits').all(); }
134
+ #get(idValue) { const row = this.#database.prepare('SELECT id, intent_json, state, reason, sequence, envelope_canonical, envelope_digest, wake_json, scope_key, goal_id, session_id, native_goal_id, native_revision, source_cursor FROM goal_event_waits WHERE id = ?').get(idValue); return row === undefined ? undefined : wait(row); }
135
+ get(idValue) { return text(idValue) ? this.#get(idValue) : fail(); }
136
+ prepare(input) { const intent = validateGoalEventWaitIntent(input); return this.#tx(() => { const old = this.#get(intent.id); if (old) {
137
+ if (!same(old.intent, intent))
138
+ fail('conflict');
139
+ return old;
140
+ } ; try {
141
+ this.#database.prepare("INSERT INTO goal_event_waits(id, intent_json, state, scope_key, goal_id, session_id, native_goal_id, native_revision, source_cursor) VALUES (?, ?, 'waiting', ?, ?, ?, ?, ?, ?)").run(intent.id, JSON.stringify(intent), acceptanceCanonicalJson(intent.wake.scope), intent.wake.goalId, intent.wake.native.sessionId, intent.wake.native.goalId, intent.wake.native.revision, intent.source.highWaterSequence);
142
+ }
143
+ catch {
144
+ fail('conflict');
145
+ } ; return this.#get(intent.id); }); }
146
+ cursor(idValue) { const row = this.#get(idValue); if (!row)
147
+ fail('not-found'); const value = this.#database.prepare('SELECT source_cursor FROM goal_event_waits WHERE id = ?').get(idValue); return value.source_cursor; }
148
+ advanceCursor(idValue, sequence) { if (!text(idValue) || !integer(sequence, 1))
149
+ fail(); return this.#tx(() => { const old = this.#get(idValue); if (!old || old.state !== 'waiting' || sequence <= old.intent.source.highWaterSequence)
150
+ fail('conflict'); const current = this.cursor(idValue); if (sequence < current)
151
+ fail('conflict'); if (sequence > current && Number(this.#database.prepare("UPDATE goal_event_waits SET source_cursor = ? WHERE id = ? AND state = 'waiting' AND source_cursor = ?").run(sequence, idValue, current).changes) !== 1)
152
+ fail('conflict'); return this.#get(idValue); }); }
153
+ match(idValue, input) { if (!text(idValue) || !integer(input.sequence, 1))
154
+ fail(); return this.#tx(() => { const old = this.#get(idValue); if (!old)
155
+ fail('not-found'); const { envelope, wake } = matchedInput(old.intent, input.sequence, input.envelope, input.wake, 'invalid-input'); if (old.state === 'matched' || old.state === 'materialized') {
156
+ if (old.match.sequence !== input.sequence || !same(old.match.wake, wake) || old.match.digest !== externalEventDigest(envelope))
157
+ fail('conflict');
158
+ return old;
159
+ } ; if (old.state !== 'waiting')
160
+ fail('conflict'); if (Number(this.#database.prepare("UPDATE goal_event_waits SET state = 'matched', sequence = ?, envelope_canonical = ?, envelope_digest = ?, wake_json = ? WHERE id = ? AND state = 'waiting'").run(input.sequence, canonicalExternalEventEnvelope(envelope), externalEventDigest(envelope), JSON.stringify(wake), idValue).changes) !== 1)
161
+ fail('conflict'); return this.#get(idValue); }); }
162
+ materialized(idValue) { return this.#tx(() => { const old = this.#get(idValue); if (!old)
163
+ fail('not-found'); if (old.state === 'materialized')
164
+ return old; if (old.state !== 'matched' || Number(this.#database.prepare("UPDATE goal_event_waits SET state = 'materialized' WHERE id = ? AND state = 'matched'").run(idValue).changes) !== 1)
165
+ fail('conflict'); return this.#get(idValue); }); }
166
+ terminal(idValue, reason) { return this.#tx(() => { const old = this.#get(idValue); if (!old)
167
+ fail('not-found'); if (old.state === 'terminal') {
168
+ if (old.reason !== reason)
169
+ fail('conflict');
170
+ return old;
171
+ } ; if (!['denied', 'expired', 'source-changed', 'invalid-current', 'settled'].includes(reason))
172
+ fail('conflict'); if (Number(this.#database.prepare("UPDATE goal_event_waits SET state = 'terminal', reason = ? WHERE id = ? AND state IN ('waiting','matched','materialized')").run(reason, idValue).changes) !== 1)
173
+ fail('conflict'); return this.#get(idValue); }); }
174
+ pending(afterId = '', limit = 32) { if (typeof afterId !== 'string' || !integer(limit, 1) || limit > 100)
175
+ fail(); return freeze(this.#database.prepare("SELECT id FROM goal_event_waits WHERE state IN ('waiting','matched','materialized') AND id > ? ORDER BY id LIMIT ?").all(afterId, limit).map(row => this.#get(row.id))); }
176
+ list(scope, goalId, limit = 20) { if (!text(goalId) || !integer(limit, 1) || limit > 100)
177
+ fail(); return freeze(this.#database.prepare('SELECT id FROM goal_event_waits WHERE scope_key = ? AND goal_id = ? ORDER BY id DESC LIMIT ?').all(acceptanceCanonicalJson(scope), goalId, limit).map(row => this.#get(row.id))); }
178
+ #tx(operation) { this.#database.exec('BEGIN IMMEDIATE'); try {
179
+ const value = operation();
180
+ this.#database.exec('COMMIT');
181
+ return value;
182
+ }
183
+ catch (error) {
184
+ this.#database.exec('ROLLBACK');
185
+ throw error;
186
+ } }
187
+ close() { this.#database.close(); }
188
+ }
189
+ //# sourceMappingURL=event-wait-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-wait-store.js","sourceRoot":"","sources":["../src/event-wait-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import type { Context } from '@deepseek-ai/cordis';
2
+ import type { GoalRecord, GoalScope } from './types.js';
3
+ import type { GoalWakeIntent } from './wake-store.js';
4
+ import type { GoalWakeRuntime } from './wake.js';
5
+ import { type GoalEventSourceSnapshot, type GoalEventWait, type GoalEventWaitIntent } from './event-wait-store.js';
6
+ export interface PreparationAuthority {
7
+ waitId: string;
8
+ profileId: string;
9
+ scope: GoalScope;
10
+ goalId: string;
11
+ sessionId: string;
12
+ definitionDigest: string;
13
+ objective: string;
14
+ nativeGoalId: string;
15
+ nativeRevision: number;
16
+ ownerRouteId: string;
17
+ sourceDigest: string;
18
+ sourceId: string;
19
+ eventId: string;
20
+ eventSequence: number;
21
+ eventDigest: string;
22
+ expiresAt: number;
23
+ }
24
+ /** Converts one post-snapshot event observation into one owner-bound GoalWake. */
25
+ export declare class GoalEventWaitRuntime {
26
+ #private;
27
+ private readonly wake;
28
+ private readonly current;
29
+ private readonly proactive;
30
+ constructor(ctx: Context, path: string, wake: GoalWakeRuntime, current: (intent: GoalEventWaitIntent) => GoalRecord | undefined, proactive?: () => unknown);
31
+ snapshot(triggerId: string): GoalEventSourceSnapshot;
32
+ prepare(intent: GoalEventWaitIntent): GoalEventWait;
33
+ inspect(scope: GoalScope, goalId: string): readonly GoalEventWait[];
34
+ /** A fresh durable wait for this exact paused revision, still under source and owner authority. */
35
+ acceptsPausedRecord(record: GoalRecord): boolean;
36
+ health: () => {
37
+ enabled: boolean;
38
+ connected: boolean;
39
+ reconciliationFailures: number;
40
+ };
41
+ reconcile(): void;
42
+ /** Read-only authority for preparing an artifact while the original goal stays paused. */
43
+ assertPreparationCurrent(input: PreparationAuthority): void;
44
+ /** Called by GoalWakeRuntime before native resume. Scheduled wakes remain unaffected. */
45
+ assertWakeCurrent(wakeIntent: GoalWakeIntent, phase?: 'before-resume' | 'running' | 'terminal'): void;
46
+ }
47
+ //# sourceMappingURL=event-wait.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-wait.d.ts","sourceRoot":"","sources":["../src/event-wait.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAGlD,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAChD,OAAO,EAAsB,KAAK,uBAAuB,EAAE,KAAK,aAAa,EAAE,KAAK,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAEtI,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;IACtF,gBAAgB,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;IAC/G,YAAY,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CACvH;AAyDD,kFAAkF;AAClF,qBAAa,oBAAoB;;IAOS,OAAO,CAAC,QAAQ,CAAC,IAAI;IAC3D,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAFhB,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAmB,IAAI,EAAE,eAAe,EAC3D,OAAO,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,UAAU,GAAG,SAAS,EAChE,SAAS,GAAE,MAAM,OAAyB;IAmB7D,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,uBAAuB;IAKpD,OAAO,CAAC,MAAM,EAAE,mBAAmB,GAAG,aAAa;IAUnD,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,aAAa,EAAE;IACnE,mGAAmG;IACnG,mBAAmB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO;IAQhD,MAAM;;;;MAA2G;IACjH,SAAS,IAAI,IAAI;IAuJjB,0FAA0F;IAC1F,wBAAwB,CAAC,KAAK,EAAE,oBAAoB,GAAG,IAAI;IAiB3D,yFAAyF;IACzF,iBAAiB,CAAC,UAAU,EAAE,cAAc,EAAE,KAAK,GAAE,eAAe,GAAG,SAAS,GAAG,UAA4B,GAAG,IAAI;CAiBvH"}