@manifesto-ai/sdk 1.2.0 → 2.0.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 (46) hide show
  1. package/README.md +60 -34
  2. package/dist/index.d.ts +413 -20
  3. package/dist/index.js +587 -48
  4. package/dist/index.js.map +1 -1
  5. package/package.json +10 -9
  6. package/dist/__tests__/bootstrap.test.d.ts +0 -2
  7. package/dist/__tests__/bootstrap.test.d.ts.map +0 -1
  8. package/dist/__tests__/bootstrap.test.js +0 -33
  9. package/dist/__tests__/bootstrap.test.js.map +0 -1
  10. package/dist/__tests__/public-exports.test.d.ts +0 -2
  11. package/dist/__tests__/public-exports.test.d.ts.map +0 -1
  12. package/dist/__tests__/public-exports.test.js +0 -58
  13. package/dist/__tests__/public-exports.test.js.map +0 -1
  14. package/dist/app.d.ts +0 -51
  15. package/dist/app.d.ts.map +0 -1
  16. package/dist/app.js +0 -170
  17. package/dist/app.js.map +0 -1
  18. package/dist/create-app.d.ts +0 -52
  19. package/dist/create-app.d.ts.map +0 -1
  20. package/dist/create-app.js +0 -94
  21. package/dist/create-app.js.map +0 -1
  22. package/dist/hooks/app-ref.d.ts +0 -71
  23. package/dist/hooks/app-ref.d.ts.map +0 -1
  24. package/dist/hooks/app-ref.js +0 -82
  25. package/dist/hooks/app-ref.js.map +0 -1
  26. package/dist/hooks/context.d.ts +0 -22
  27. package/dist/hooks/context.d.ts.map +0 -1
  28. package/dist/hooks/context.js +0 -26
  29. package/dist/hooks/context.js.map +0 -1
  30. package/dist/hooks/hookable.d.ts +0 -79
  31. package/dist/hooks/hookable.d.ts.map +0 -1
  32. package/dist/hooks/hookable.js +0 -137
  33. package/dist/hooks/hookable.js.map +0 -1
  34. package/dist/hooks/index.d.ts +0 -14
  35. package/dist/hooks/index.d.ts.map +0 -1
  36. package/dist/hooks/index.js +0 -13
  37. package/dist/hooks/index.js.map +0 -1
  38. package/dist/hooks/queue.d.ts +0 -57
  39. package/dist/hooks/queue.d.ts.map +0 -1
  40. package/dist/hooks/queue.js +0 -141
  41. package/dist/hooks/queue.js.map +0 -1
  42. package/dist/index.d.ts.map +0 -1
  43. package/dist/manifest.d.ts +0 -10
  44. package/dist/manifest.d.ts.map +0 -1
  45. package/dist/manifest.js +0 -2
  46. package/dist/manifest.js.map +0 -1
package/dist/index.js CHANGED
@@ -1,49 +1,588 @@
1
- /**
2
- * @manifesto-ai/sdk v1.0.0
3
- *
4
- * Public developer API layer for the Manifesto protocol stack.
5
- * Canonical entry point since Phase 2 (ADR-008).
6
- *
7
- * @see sdk-SPEC-v0.1.0.md
8
- * @packageDocumentation
9
- */
10
- // =============================================================================
11
- // Public Errors (re-exported from Runtime)
12
- // =============================================================================
13
- export {
14
- // Base
15
- ManifestoAppError,
16
- // Lifecycle
17
- AppNotReadyError, AppDisposedError,
18
- // Action
19
- ActionRejectedError, ActionFailedError, ActionPreparationError, ActionTimeoutError, ActionNotFoundError, HandleDetachedError,
20
- // Hook
21
- HookMutationError,
22
- // Effects
23
- ReservedEffectTypeError,
24
- // System
25
- SystemActionDisabledError, SystemActionRoutingError,
26
- // Memory
27
- MemoryDisabledError,
28
- // Branch/World
29
- BranchNotFoundError, WorldNotFoundError, WorldSchemaHashMismatchError, WorldNotInLineageError,
30
- // Other
31
- ReservedNamespaceError, MissingDefaultActorError, DomainCompileError, PluginInitError,
32
- // Resume & Recovery
33
- SchemaMismatchOnResumeError, BranchHeadNotFoundError, } from '@manifesto-ai/runtime';
34
- // =============================================================================
35
- // App Factory
36
- // =============================================================================
37
- export { createApp, createTestApp } from './create-app.js';
38
- // =============================================================================
39
- // ManifestoApp
40
- // =============================================================================
41
- export { ManifestoApp } from './app.js';
42
- // =============================================================================
43
- // Hook Internals (public for advanced integrations)
44
- // =============================================================================
45
- export { AppRefImpl, createAppRef } from './hooks/index.js';
46
- export { HookableImpl } from './hooks/index.js';
47
- export { JobQueue } from './hooks/index.js';
48
- export { HookContextImpl, createHookContext } from './hooks/index.js';
1
+ // src/create-manifesto.ts
2
+ import {
3
+ createHost
4
+ } from "@manifesto-ai/host";
5
+ import {
6
+ semanticPathToPatchPath,
7
+ extractDefaults
8
+ } from "@manifesto-ai/core";
9
+ import { compileMelDomain } from "@manifesto-ai/compiler";
10
+
11
+ // src/errors.ts
12
+ var ManifestoError = class extends Error {
13
+ code;
14
+ constructor(code, message, options) {
15
+ super(message, options);
16
+ this.name = "ManifestoError";
17
+ this.code = code;
18
+ }
19
+ };
20
+ var ReservedEffectError = class extends ManifestoError {
21
+ effectType;
22
+ constructor(effectType) {
23
+ super(
24
+ "RESERVED_EFFECT",
25
+ `Effect type "${effectType}" is reserved and cannot be overridden`
26
+ );
27
+ this.name = "ReservedEffectError";
28
+ this.effectType = effectType;
29
+ }
30
+ };
31
+ var CompileError = class extends ManifestoError {
32
+ diagnostics;
33
+ constructor(diagnostics, formattedMessage) {
34
+ super("COMPILE_ERROR", formattedMessage);
35
+ this.name = "CompileError";
36
+ this.diagnostics = diagnostics;
37
+ }
38
+ };
39
+ var DisposedError = class extends ManifestoError {
40
+ constructor() {
41
+ super("DISPOSED", "Cannot dispatch on a disposed ManifestoInstance");
42
+ this.name = "DisposedError";
43
+ }
44
+ };
45
+
46
+ // src/create-manifesto.ts
47
+ var RESERVED_EFFECT_TYPE = "system.get";
48
+ var RESERVED_NAMESPACE_PREFIX = "system.";
49
+ function createManifesto(config) {
50
+ const schema = resolveSchema(config.schema);
51
+ if (RESERVED_EFFECT_TYPE in config.effects) {
52
+ throw new ReservedEffectError(RESERVED_EFFECT_TYPE);
53
+ }
54
+ validateReservedNamespaces(schema);
55
+ const host = createInternalHost(schema, config.effects, config.snapshot);
56
+ let currentSnapshot = host.getSnapshot();
57
+ const subscribers = /* @__PURE__ */ new Set();
58
+ const eventListeners = /* @__PURE__ */ new Map();
59
+ let dispatchQueue = Promise.resolve();
60
+ let disposed = false;
61
+ const guard = config.guard ?? null;
62
+ function dispatch(intent) {
63
+ if (disposed) {
64
+ throw new DisposedError();
65
+ }
66
+ const enrichedIntent = intent.intentId ? intent : { ...intent, intentId: generateIntentId() };
67
+ const prev = dispatchQueue;
68
+ dispatchQueue = prev.catch(() => {
69
+ }).then(() => processIntent(enrichedIntent));
70
+ dispatchQueue = dispatchQueue.catch(() => {
71
+ });
72
+ }
73
+ async function processIntent(intent) {
74
+ if (disposed) return;
75
+ if (guard) {
76
+ try {
77
+ const allowed = guard(intent, Object.freeze(structuredClone(currentSnapshot)));
78
+ if (!allowed) {
79
+ emitEvent("dispatch:rejected", {
80
+ intentId: intent.intentId,
81
+ intent,
82
+ reason: "Guard rejected the intent"
83
+ });
84
+ return;
85
+ }
86
+ } catch (error) {
87
+ emitEvent("dispatch:failed", {
88
+ intentId: intent.intentId,
89
+ intent,
90
+ error: error instanceof Error ? error : new Error(String(error))
91
+ });
92
+ return;
93
+ }
94
+ }
95
+ try {
96
+ const result = await host.dispatch(intent);
97
+ if (result.status === "error") {
98
+ currentSnapshot = result.snapshot;
99
+ notifySubscribers();
100
+ emitEvent("dispatch:failed", {
101
+ intentId: intent.intentId,
102
+ intent,
103
+ error: result.error ?? new ManifestoError("HOST_ERROR", "Host dispatch failed")
104
+ });
105
+ return;
106
+ }
107
+ currentSnapshot = result.snapshot;
108
+ notifySubscribers();
109
+ emitEvent("dispatch:completed", {
110
+ intentId: intent.intentId,
111
+ intent,
112
+ snapshot: result.snapshot
113
+ });
114
+ } catch (error) {
115
+ emitEvent("dispatch:failed", {
116
+ intentId: intent.intentId,
117
+ intent,
118
+ error: error instanceof Error ? error : new Error(String(error))
119
+ });
120
+ }
121
+ }
122
+ function subscribe(selector, listener) {
123
+ if (disposed) return () => {
124
+ };
125
+ const sub = {
126
+ selector,
127
+ listener,
128
+ lastValue: selector(currentSnapshot),
129
+ initialized: true
130
+ };
131
+ subscribers.add(sub);
132
+ return () => {
133
+ subscribers.delete(sub);
134
+ };
135
+ }
136
+ function on(event, handler) {
137
+ if (disposed) return () => {
138
+ };
139
+ let listeners = eventListeners.get(event);
140
+ if (!listeners) {
141
+ listeners = /* @__PURE__ */ new Set();
142
+ eventListeners.set(event, listeners);
143
+ }
144
+ listeners.add(handler);
145
+ return () => {
146
+ listeners.delete(handler);
147
+ };
148
+ }
149
+ function getSnapshot() {
150
+ return Object.freeze(structuredClone(currentSnapshot));
151
+ }
152
+ function dispose() {
153
+ if (disposed) return;
154
+ disposed = true;
155
+ subscribers.clear();
156
+ eventListeners.clear();
157
+ }
158
+ function notifySubscribers() {
159
+ const frozenSnap = Object.freeze(structuredClone(currentSnapshot));
160
+ for (const sub of subscribers) {
161
+ const selected = sub.selector(frozenSnap);
162
+ if (sub.initialized && Object.is(sub.lastValue, selected)) {
163
+ continue;
164
+ }
165
+ sub.lastValue = selected;
166
+ sub.initialized = true;
167
+ sub.listener(selected);
168
+ }
169
+ }
170
+ function emitEvent(event, payload) {
171
+ const listeners = eventListeners.get(event);
172
+ if (!listeners) return;
173
+ for (const handler of listeners) {
174
+ try {
175
+ handler(payload);
176
+ } catch {
177
+ }
178
+ }
179
+ }
180
+ return { dispatch, subscribe, on, getSnapshot, dispose };
181
+ }
182
+ function resolveSchema(schema) {
183
+ let domainSchema;
184
+ if (typeof schema === "string") {
185
+ const result = compileMelDomain(schema, { mode: "domain" });
186
+ if (result.errors.length > 0) {
187
+ const formatted = result.errors.map((d) => {
188
+ const loc = d.location;
189
+ const header = loc && (loc.start.line > 0 || loc.start.column > 0) ? `[${d.code}] ${d.message} (${loc.start.line}:${loc.start.column})` : `[${d.code}] ${d.message}`;
190
+ if (!loc || loc.start.line === 0) return header;
191
+ const sourceLines = schema.split("\n");
192
+ const lineContent = sourceLines[loc.start.line - 1];
193
+ if (!lineContent) return header;
194
+ const lineNumStr = String(loc.start.line).padStart(4, " ");
195
+ const underlineLen = Math.max(
196
+ 1,
197
+ loc.end.line === loc.start.line ? Math.min(loc.end.column - loc.start.column, lineContent.length - loc.start.column + 1) : 1
198
+ );
199
+ const padding = " ".repeat(lineNumStr.length + 3 + loc.start.column - 1);
200
+ return `${header}
201
+ ${lineNumStr} | ${lineContent}
202
+ ${padding}${"^".repeat(underlineLen)}`;
203
+ }).join("\n\n");
204
+ throw new CompileError(
205
+ result.errors,
206
+ `MEL compilation failed:
207
+ ${formatted}`
208
+ );
209
+ }
210
+ if (!result.schema) {
211
+ throw new ManifestoError(
212
+ "COMPILE_ERROR",
213
+ "MEL compilation produced no schema"
214
+ );
215
+ }
216
+ domainSchema = result.schema;
217
+ } else {
218
+ domainSchema = schema;
219
+ }
220
+ return withPlatformNamespaces(domainSchema);
221
+ }
222
+ function withPlatformNamespaces(schema) {
223
+ const fields = { ...schema.state.fields };
224
+ let changed = false;
225
+ if (!fields.$host) {
226
+ fields.$host = {
227
+ type: "object",
228
+ required: false,
229
+ default: {}
230
+ };
231
+ changed = true;
232
+ } else if (fields.$host.type !== "object") {
233
+ throw new ManifestoError(
234
+ "SCHEMA_ERROR",
235
+ "Reserved namespace '$host' must be an object field"
236
+ );
237
+ } else if (fields.$host.default === void 0) {
238
+ fields.$host = { ...fields.$host, default: {} };
239
+ changed = true;
240
+ }
241
+ if (!fields.$mel) {
242
+ fields.$mel = {
243
+ type: "object",
244
+ required: false,
245
+ default: { guards: { intent: {} } },
246
+ fields: {
247
+ guards: {
248
+ type: "object",
249
+ required: false,
250
+ default: { intent: {} },
251
+ fields: {
252
+ intent: {
253
+ type: "object",
254
+ required: false,
255
+ default: {}
256
+ }
257
+ }
258
+ }
259
+ }
260
+ };
261
+ changed = true;
262
+ } else if (fields.$mel.type !== "object") {
263
+ throw new ManifestoError(
264
+ "SCHEMA_ERROR",
265
+ "Reserved namespace '$mel' must be an object field"
266
+ );
267
+ } else {
268
+ let nextMel = fields.$mel;
269
+ if (nextMel.default === void 0) {
270
+ nextMel = { ...nextMel, default: { guards: { intent: {} } } };
271
+ changed = true;
272
+ }
273
+ const melFields = nextMel.fields ?? {};
274
+ const guardsField = melFields.guards;
275
+ if (!guardsField) {
276
+ nextMel = {
277
+ ...nextMel,
278
+ fields: {
279
+ ...melFields,
280
+ guards: {
281
+ type: "object",
282
+ required: false,
283
+ default: { intent: {} },
284
+ fields: {
285
+ intent: {
286
+ type: "object",
287
+ required: false,
288
+ default: {}
289
+ }
290
+ }
291
+ }
292
+ }
293
+ };
294
+ changed = true;
295
+ } else if (guardsField.type !== "object") {
296
+ throw new ManifestoError(
297
+ "SCHEMA_ERROR",
298
+ "Reserved namespace '$mel.guards' must be an object field"
299
+ );
300
+ } else {
301
+ let nextGuards = guardsField;
302
+ if (guardsField.default === void 0) {
303
+ nextGuards = { ...nextGuards, default: { intent: {} } };
304
+ changed = true;
305
+ }
306
+ const guardFields = nextGuards.fields ?? {};
307
+ const intentField = guardFields.intent;
308
+ if (!intentField) {
309
+ nextGuards = {
310
+ ...nextGuards,
311
+ fields: {
312
+ ...guardFields,
313
+ intent: {
314
+ type: "object",
315
+ required: false,
316
+ default: {}
317
+ }
318
+ }
319
+ };
320
+ changed = true;
321
+ } else if (intentField.type !== "object") {
322
+ throw new ManifestoError(
323
+ "SCHEMA_ERROR",
324
+ "Reserved namespace '$mel.guards.intent' must be an object field"
325
+ );
326
+ } else if (intentField.default === void 0) {
327
+ nextGuards = {
328
+ ...nextGuards,
329
+ fields: {
330
+ ...guardFields,
331
+ intent: { ...intentField, default: {} }
332
+ }
333
+ };
334
+ changed = true;
335
+ }
336
+ if (nextGuards !== guardsField) {
337
+ nextMel = {
338
+ ...nextMel,
339
+ fields: {
340
+ ...melFields,
341
+ guards: nextGuards
342
+ }
343
+ };
344
+ }
345
+ }
346
+ if (nextMel !== fields.$mel) {
347
+ fields.$mel = nextMel;
348
+ changed = true;
349
+ }
350
+ }
351
+ if (!changed) return schema;
352
+ return {
353
+ ...schema,
354
+ state: {
355
+ ...schema.state,
356
+ fields
357
+ }
358
+ };
359
+ }
360
+ function validateReservedNamespaces(schema) {
361
+ const actions = schema.actions || {};
362
+ for (const actionType of Object.keys(actions)) {
363
+ if (actionType.startsWith(RESERVED_NAMESPACE_PREFIX)) {
364
+ throw new ManifestoError(
365
+ "RESERVED_NAMESPACE",
366
+ `Action type "${actionType}" uses reserved namespace prefix "${RESERVED_NAMESPACE_PREFIX}"`
367
+ );
368
+ }
369
+ }
370
+ }
371
+ function createInternalHost(schema, effects, initialSnapshot) {
372
+ const host = createHost(schema, {
373
+ initialData: initialSnapshot?.data ?? extractDefaults(schema.state)
374
+ });
375
+ if (initialSnapshot) {
376
+ host.reset(initialSnapshot);
377
+ }
378
+ host.registerEffect(RESERVED_EFFECT_TYPE, async (_type, params, ctx) => {
379
+ const { patches } = executeSystemGet(params, ctx.snapshot);
380
+ return patches;
381
+ });
382
+ for (const [effectType, appHandler] of Object.entries(effects)) {
383
+ const hostHandler = async (_type, params, ctx) => {
384
+ const appCtx = { snapshot: ctx.snapshot };
385
+ const patches = await appHandler(params, appCtx);
386
+ return patches;
387
+ };
388
+ host.registerEffect(effectType, hostHandler);
389
+ }
390
+ return host;
391
+ }
392
+ function isGenerateParams(params) {
393
+ return typeof params === "object" && params !== null && "key" in params && "into" in params;
394
+ }
395
+ function generateSystemValue(key) {
396
+ switch (key) {
397
+ case "uuid":
398
+ return generateUUID();
399
+ case "timestamp":
400
+ case "time.now":
401
+ return Date.now();
402
+ case "isoTimestamp":
403
+ return (/* @__PURE__ */ new Date()).toISOString();
404
+ default:
405
+ return null;
406
+ }
407
+ }
408
+ function generateUUID() {
409
+ if (typeof crypto !== "undefined" && crypto.randomUUID) {
410
+ return crypto.randomUUID();
411
+ }
412
+ return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
413
+ const r = Math.random() * 16 | 0;
414
+ const v = c === "x" ? r : r & 3 | 8;
415
+ return v.toString(16);
416
+ });
417
+ }
418
+ function executeSystemGet(params, snapshot) {
419
+ if (isGenerateParams(params)) {
420
+ const value = generateSystemValue(params.key);
421
+ const patches2 = [{
422
+ op: "set",
423
+ path: normalizeTargetPath(params.into),
424
+ value
425
+ }];
426
+ return { patches: patches2 };
427
+ }
428
+ const { path, target } = params;
429
+ const result = resolvePathValue(path, snapshot);
430
+ const patches = [];
431
+ if (target) {
432
+ patches.push({
433
+ op: "set",
434
+ path: normalizeTargetPath(target),
435
+ value: result.value
436
+ });
437
+ }
438
+ return { patches };
439
+ }
440
+ function normalizePath(path) {
441
+ if (path.startsWith("/")) {
442
+ return path.slice(1).replace(/\//g, ".");
443
+ }
444
+ return path;
445
+ }
446
+ function normalizeTargetPath(path) {
447
+ const normalized = normalizePath(path);
448
+ const withoutDataRoot = normalized.startsWith("data.") ? normalized.slice("data.".length) : normalized;
449
+ return semanticPathToPatchPath(withoutDataRoot);
450
+ }
451
+ function resolvePathValue(path, snapshot) {
452
+ const normalized = normalizePath(path);
453
+ const parts = normalized.split(".");
454
+ if (parts.length === 0) {
455
+ return { value: void 0, found: false };
456
+ }
457
+ const root = parts[0];
458
+ const rest = parts.slice(1);
459
+ let current;
460
+ switch (root) {
461
+ case "data":
462
+ current = snapshot.data;
463
+ break;
464
+ case "computed":
465
+ current = snapshot.computed;
466
+ break;
467
+ case "system":
468
+ current = snapshot.system;
469
+ break;
470
+ case "meta":
471
+ current = snapshot.meta;
472
+ break;
473
+ default:
474
+ current = snapshot.data;
475
+ rest.unshift(root);
476
+ }
477
+ for (const part of rest) {
478
+ if (current === null || current === void 0) {
479
+ return { value: void 0, found: false };
480
+ }
481
+ if (typeof current !== "object") {
482
+ return { value: void 0, found: false };
483
+ }
484
+ current = current[part];
485
+ }
486
+ return { value: current, found: current !== void 0 };
487
+ }
488
+ function generateIntentId() {
489
+ return generateUUID();
490
+ }
491
+
492
+ // src/dispatch-async.ts
493
+ var DispatchRejectedError = class extends Error {
494
+ code = "DISPATCH_REJECTED";
495
+ intentId;
496
+ constructor(intentId, reason) {
497
+ super(reason ?? "Intent was rejected by guard");
498
+ this.name = "DispatchRejectedError";
499
+ this.intentId = intentId;
500
+ }
501
+ };
502
+ function dispatchAsync(instance, intent) {
503
+ const intentId = intent.intentId ?? generateId();
504
+ const enriched = intent.intentId ? intent : { ...intent, intentId };
505
+ return new Promise((resolve, reject) => {
506
+ const cleanup = () => {
507
+ unsubCompleted();
508
+ unsubFailed();
509
+ unsubRejected();
510
+ };
511
+ const unsubCompleted = instance.on("dispatch:completed", (e) => {
512
+ if (e.intentId === intentId) {
513
+ cleanup();
514
+ resolve(e.snapshot);
515
+ }
516
+ });
517
+ const unsubFailed = instance.on("dispatch:failed", (e) => {
518
+ if (e.intentId === intentId) {
519
+ cleanup();
520
+ reject(e.error ?? new Error("Dispatch failed"));
521
+ }
522
+ });
523
+ const unsubRejected = instance.on("dispatch:rejected", (e) => {
524
+ if (e.intentId === intentId) {
525
+ cleanup();
526
+ reject(new DispatchRejectedError(intentId, e.reason));
527
+ }
528
+ });
529
+ instance.dispatch(enriched);
530
+ });
531
+ }
532
+ function generateId() {
533
+ if (typeof crypto !== "undefined" && crypto.randomUUID) {
534
+ return crypto.randomUUID();
535
+ }
536
+ return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
537
+ const r = Math.random() * 16 | 0;
538
+ const v = c === "x" ? r : r & 3 | 8;
539
+ return v.toString(16);
540
+ });
541
+ }
542
+
543
+ // src/typed-ops.ts
544
+ import { semanticPathToPatchPath as semanticPathToPatchPath2 } from "@manifesto-ai/core";
545
+ function defineOps() {
546
+ const toPatchPath = (path) => semanticPathToPatchPath2(path);
547
+ return {
548
+ set(path, value) {
549
+ return { op: "set", path: toPatchPath(path), value };
550
+ },
551
+ unset(path) {
552
+ return { op: "unset", path: toPatchPath(path) };
553
+ },
554
+ merge(path, value) {
555
+ return { op: "merge", path: toPatchPath(path), value };
556
+ },
557
+ raw: {
558
+ set(path, value) {
559
+ return { op: "set", path: toPatchPath(path), value };
560
+ },
561
+ unset(path) {
562
+ return { op: "unset", path: toPatchPath(path) };
563
+ },
564
+ merge(path, value) {
565
+ return { op: "merge", path: toPatchPath(path), value };
566
+ }
567
+ }
568
+ };
569
+ }
570
+
571
+ // src/index.ts
572
+ import { createIntent, createSnapshot, createCore } from "@manifesto-ai/core";
573
+ import { createMemoryWorldStore } from "@manifesto-ai/world";
574
+ export {
575
+ CompileError,
576
+ DispatchRejectedError,
577
+ DisposedError,
578
+ ManifestoError,
579
+ ReservedEffectError,
580
+ createCore,
581
+ createIntent,
582
+ createManifesto,
583
+ createMemoryWorldStore,
584
+ createSnapshot,
585
+ defineOps,
586
+ dispatchAsync
587
+ };
49
588
  //# sourceMappingURL=index.js.map