@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.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA2HH,gFAAgF;AAChF,2CAA2C;AAC3C,gFAAgF;AAEhF,OAAO;AACL,OAAO;AACP,iBAAiB;AAEjB,YAAY;AACZ,gBAAgB,EAChB,gBAAgB;AAEhB,SAAS;AACT,mBAAmB,EACnB,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB;AAEnB,OAAO;AACP,iBAAiB;AAEjB,UAAU;AACV,uBAAuB;AAEvB,SAAS;AACT,yBAAyB,EACzB,wBAAwB;AAExB,SAAS;AACT,mBAAmB;AAEnB,eAAe;AACf,mBAAmB,EACnB,kBAAkB,EAClB,4BAA4B,EAC5B,sBAAsB;AAEtB,QAAQ;AACR,sBAAsB,EACtB,wBAAwB,EACxB,kBAAkB,EAClB,eAAe;AAEf,oBAAoB;AACpB,2BAA2B,EAC3B,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAE/B,gFAAgF;AAChF,cAAc;AACd,gFAAgF;AAEhF,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAE3D,gFAAgF;AAChF,eAAe;AACf,gFAAgF;AAEhF,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,gFAAgF;AAChF,oDAAoD;AACpD,gFAAgF;AAEhF,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAE5D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"sources":["../src/create-manifesto.ts","../src/errors.ts","../src/dispatch-async.ts","../src/typed-ops.ts","../src/index.ts"],"sourcesContent":["/**\n * createManifesto() Factory\n *\n * The sole SDK-owned concept. Creates a ManifestoInstance that composes\n * the four protocol axes (Core, Host, World, Compiler) into a single handle.\n *\n * @see SDK SPEC v1.0.0 §5\n * @see ADR-010\n * @module\n */\n\nimport {\n createHost,\n type ManifestoHost,\n type EffectHandler as HostEffectHandler,\n type EffectContext as HostEffectContext,\n} from \"@manifesto-ai/host\";\nimport {\n type DomainSchema,\n type Patch,\n type Snapshot as CoreSnapshot,\n type Intent,\n semanticPathToPatchPath,\n extractDefaults,\n} from \"@manifesto-ai/core\";\nimport { compileMelDomain } from \"@manifesto-ai/compiler\";\n\nimport type {\n Snapshot,\n ManifestoConfig,\n ManifestoInstance,\n ManifestoEvent,\n ManifestoEventMap,\n EffectHandler,\n Selector,\n Unsubscribe,\n} from \"./types.js\";\nimport { ReservedEffectError, DisposedError, ManifestoError, CompileError } from \"./errors.js\";\n\n// =============================================================================\n// Constants\n// =============================================================================\n\n/** Reserved effect type used by the compiler for $system.* references. */\nconst RESERVED_EFFECT_TYPE = \"system.get\";\n\n/** Reserved namespace prefix for system actions. */\nconst RESERVED_NAMESPACE_PREFIX = \"system.\";\n\n// =============================================================================\n// createManifesto() — SDK SPEC v1.0.0 §5\n// =============================================================================\n\n/**\n * Create a ManifestoInstance.\n *\n * This is the sole entry point for SDK consumers. It composes the protocol\n * axes (Core via Host, Host, World, Compiler) into a single handle with\n * 5 methods: dispatch, subscribe, on, getSnapshot, dispose.\n *\n * @see SDK-FACTORY-1 through SDK-FACTORY-5\n * @see SDK-INV-1 through SDK-INV-6\n */\nexport function createManifesto<T = unknown>(\n config: ManifestoConfig<T>,\n): ManifestoInstance<T> {\n // ─── INV-3: Schema resolution ──────────────────────────────────────────\n const schema = resolveSchema(config.schema);\n\n // ─── INV-4: Reserved effect protection ─────────────────────────────────\n if (RESERVED_EFFECT_TYPE in config.effects) {\n throw new ReservedEffectError(RESERVED_EFFECT_TYPE);\n }\n\n // Validate no user actions use reserved namespace\n validateReservedNamespaces(schema);\n\n // ─── INV-5: Host creation + effect registration ────────────────────────\n const host = createInternalHost(schema, config.effects, config.snapshot);\n\n // ─── State holder (closure-captured) ───────────────────────────────────\n // Host always initializes with a snapshot (initialData defaults to {})\n let currentSnapshot: CoreSnapshot = host.getSnapshot()!;\n\n // ─── Subscription store ────────────────────────────────────────────────\n const subscribers = new Set<Subscriber<unknown>>();\n\n // ─── Event channel (telemetry) ─────────────────────────────────────────\n const eventListeners = new Map<ManifestoEvent, Set<(payload: ManifestoEventMap<T>[ManifestoEvent]) => void>>();\n\n // ─── Serial dispatch queue (SDK-INV-5) ─────────────────────────────────\n let dispatchQueue: Promise<void> = Promise.resolve();\n\n // ─── Disposed flag ─────────────────────────────────────────────────────\n let disposed = false;\n\n // ─── Guard function ────────────────────────────────────────────────────\n const guard = config.guard ?? null;\n\n // =========================================================================\n // dispatch() — SDK-DISPATCH-1~4\n // =========================================================================\n\n function dispatch(intent: Intent): void {\n // SDK-DISPATCH-4\n if (disposed) {\n throw new DisposedError();\n }\n\n // SDK-DISPATCH-2: Enrich with intentId if not provided\n const enrichedIntent: Intent = intent.intentId\n ? intent\n : { ...intent, intentId: generateIntentId() };\n\n // SDK-DISPATCH-1, SDK-DISPATCH-3: Enqueue for serial processing\n const prev = dispatchQueue;\n dispatchQueue = prev\n .catch(() => {}) // Previous failure doesn't block queue\n .then(() => processIntent(enrichedIntent));\n // Tail always resolves\n dispatchQueue = dispatchQueue.catch(() => {});\n }\n\n /**\n * Process a single intent through the Host dispatch cycle.\n */\n async function processIntent(intent: Intent): Promise<void> {\n // SDK-DISPOSE-1: Do not process queued intents after dispose\n if (disposed) return;\n\n // SDK-INV-5: Guard evaluates against current snapshot at dequeue time\n if (guard) {\n try {\n // SDK-SNAP-IMMUTABLE: Prevent guard from mutating internal state\n const allowed = guard(intent, Object.freeze(structuredClone(currentSnapshot)) as Snapshot<T>);\n if (!allowed) {\n emitEvent(\"dispatch:rejected\", {\n intentId: intent.intentId,\n intent,\n reason: \"Guard rejected the intent\",\n });\n return;\n }\n } catch (error) {\n emitEvent(\"dispatch:failed\", {\n intentId: intent.intentId,\n intent,\n error: error instanceof Error ? error : new Error(String(error)),\n });\n return;\n }\n }\n\n try {\n const result = await host.dispatch(intent);\n\n if (result.status === \"error\") {\n currentSnapshot = result.snapshot;\n notifySubscribers();\n emitEvent(\"dispatch:failed\", {\n intentId: intent.intentId,\n intent,\n error: result.error ?? new ManifestoError(\"HOST_ERROR\", \"Host dispatch failed\"),\n });\n return;\n }\n\n // Update state\n currentSnapshot = result.snapshot;\n\n // SDK-INV-1: notify subscribers at terminal snapshot only\n notifySubscribers();\n\n emitEvent(\"dispatch:completed\", {\n intentId: intent.intentId,\n intent,\n snapshot: result.snapshot as Snapshot<T>,\n });\n } catch (error) {\n emitEvent(\"dispatch:failed\", {\n intentId: intent.intentId,\n intent,\n error: error instanceof Error ? error : new Error(String(error)),\n });\n }\n }\n\n // =========================================================================\n // subscribe() — SDK-SUB-1~4\n // =========================================================================\n\n function subscribe<R>(\n selector: Selector<T, R>,\n listener: (value: R) => void,\n ): Unsubscribe {\n if (disposed) return () => {};\n\n const sub: Subscriber<R> = {\n selector: selector as Selector<unknown, R>,\n listener,\n lastValue: selector(currentSnapshot as Snapshot<T>),\n initialized: true,\n };\n\n subscribers.add(sub as Subscriber<unknown>);\n\n return () => {\n subscribers.delete(sub as Subscriber<unknown>);\n };\n }\n\n // =========================================================================\n // on() — SDK-EVENT-1~3, SDK-INV-2\n // =========================================================================\n\n function on<K extends ManifestoEvent>(\n event: K,\n handler: (payload: ManifestoEventMap<T>[K]) => void,\n ): Unsubscribe {\n if (disposed) return () => {};\n\n let listeners = eventListeners.get(event);\n if (!listeners) {\n listeners = new Set();\n eventListeners.set(event, listeners as Set<(payload: ManifestoEventMap<T>[ManifestoEvent]) => void>);\n }\n listeners.add(handler as (payload: ManifestoEventMap<T>[ManifestoEvent]) => void);\n\n return () => {\n listeners!.delete(handler as (payload: ManifestoEventMap<T>[ManifestoEvent]) => void);\n };\n }\n\n // =========================================================================\n // getSnapshot() — SDK-SNAP-1\n // =========================================================================\n\n function getSnapshot(): Snapshot<T> {\n // SDK-SNAP-IMMUTABLE: Return a frozen copy to prevent external mutation\n // that would bypass the patch/apply pipeline.\n return Object.freeze(structuredClone(currentSnapshot)) as Snapshot<T>;\n }\n\n // =========================================================================\n // dispose() — SDK-DISPOSE-1~3\n // =========================================================================\n\n function dispose(): void {\n if (disposed) return;\n disposed = true;\n\n // Release all resources\n subscribers.clear();\n eventListeners.clear();\n }\n\n // =========================================================================\n // Internal helpers\n // =========================================================================\n\n /** Notify all subscribers with current snapshot (SDK-INV-1). */\n function notifySubscribers(): void {\n // SDK-SNAP-IMMUTABLE: Pass a frozen clone to selectors so that neither\n // selector nor listener can mutate internal state.\n const frozenSnap = Object.freeze(structuredClone(currentSnapshot)) as Snapshot<T>;\n for (const sub of subscribers) {\n const selected = (sub.selector as Selector<T, unknown>)(frozenSnap);\n\n // Selector-based change detection (SDK-SUB-4)\n if (sub.initialized && Object.is(sub.lastValue, selected)) {\n continue;\n }\n\n sub.lastValue = selected;\n sub.initialized = true;\n sub.listener(selected);\n }\n }\n\n /** Emit an event to the telemetry channel. */\n function emitEvent<K extends ManifestoEvent>(\n event: K,\n payload: ManifestoEventMap<T>[K],\n ): void {\n const listeners = eventListeners.get(event);\n if (!listeners) return;\n for (const handler of listeners) {\n try {\n handler(payload);\n } catch {\n // Event handlers must not break the dispatch loop\n }\n }\n }\n\n // =========================================================================\n // Return ManifestoInstance\n // =========================================================================\n\n return { dispatch, subscribe, on, getSnapshot, dispose };\n}\n\n// =============================================================================\n// Schema Resolution (INV-3)\n// =============================================================================\n\n/**\n * Resolve schema from DomainSchema or MEL text string.\n * Injects platform namespaces ($host, $mel).\n */\nfunction resolveSchema(schema: DomainSchema | string): DomainSchema {\n let domainSchema: DomainSchema;\n\n if (typeof schema === \"string\") {\n const result = compileMelDomain(schema, { mode: \"domain\" });\n\n if (result.errors.length > 0) {\n const formatted = result.errors.map((d) => {\n const loc = d.location;\n const header = loc && (loc.start.line > 0 || loc.start.column > 0)\n ? `[${d.code}] ${d.message} (${loc.start.line}:${loc.start.column})`\n : `[${d.code}] ${d.message}`;\n\n if (!loc || loc.start.line === 0) return header;\n\n const sourceLines = schema.split(\"\\n\");\n const lineContent = sourceLines[loc.start.line - 1];\n if (!lineContent) return header;\n\n const lineNumStr = String(loc.start.line).padStart(4, \" \");\n const underlineLen = Math.max(1,\n loc.end.line === loc.start.line\n ? Math.min(loc.end.column - loc.start.column, lineContent.length - loc.start.column + 1)\n : 1);\n const padding = \" \".repeat(lineNumStr.length + 3 + loc.start.column - 1);\n return `${header}\\n${lineNumStr} | ${lineContent}\\n${padding}${\"^\".repeat(underlineLen)}`;\n }).join(\"\\n\\n\");\n\n throw new CompileError(\n result.errors,\n `MEL compilation failed:\\n${formatted}`,\n );\n }\n\n if (!result.schema) {\n throw new ManifestoError(\n \"COMPILE_ERROR\",\n \"MEL compilation produced no schema\",\n );\n }\n\n domainSchema = result.schema as DomainSchema;\n } else {\n domainSchema = schema;\n }\n\n return withPlatformNamespaces(domainSchema);\n}\n\n// =============================================================================\n// Platform Namespace Injection (INV-3)\n// =============================================================================\n\n/**\n * Inject $host and $mel platform namespaces into schema.\n * Absorbed from runtime/src/schema/schema-manager.ts.\n */\nfunction withPlatformNamespaces(schema: DomainSchema): DomainSchema {\n const fields = { ...schema.state.fields };\n let changed = false;\n\n // $host namespace\n if (!fields.$host) {\n fields.$host = {\n type: \"object\",\n required: false,\n default: {},\n };\n changed = true;\n } else if (fields.$host.type !== \"object\") {\n throw new ManifestoError(\n \"SCHEMA_ERROR\",\n \"Reserved namespace '$host' must be an object field\",\n );\n } else if (fields.$host.default === undefined) {\n fields.$host = { ...fields.$host, default: {} };\n changed = true;\n }\n\n // $mel namespace with guards.intent structure\n if (!fields.$mel) {\n fields.$mel = {\n type: \"object\",\n required: false,\n default: { guards: { intent: {} } },\n fields: {\n guards: {\n type: \"object\",\n required: false,\n default: { intent: {} },\n fields: {\n intent: {\n type: \"object\",\n required: false,\n default: {},\n },\n },\n },\n },\n };\n changed = true;\n } else if (fields.$mel.type !== \"object\") {\n throw new ManifestoError(\n \"SCHEMA_ERROR\",\n \"Reserved namespace '$mel' must be an object field\",\n );\n } else {\n let nextMel = fields.$mel;\n if (nextMel.default === undefined) {\n nextMel = { ...nextMel, default: { guards: { intent: {} } } };\n changed = true;\n }\n\n const melFields = nextMel.fields ?? {};\n const guardsField = melFields.guards;\n\n if (!guardsField) {\n nextMel = {\n ...nextMel,\n fields: {\n ...melFields,\n guards: {\n type: \"object\",\n required: false,\n default: { intent: {} },\n fields: {\n intent: {\n type: \"object\",\n required: false,\n default: {},\n },\n },\n },\n },\n };\n changed = true;\n } else if (guardsField.type !== \"object\") {\n throw new ManifestoError(\n \"SCHEMA_ERROR\",\n \"Reserved namespace '$mel.guards' must be an object field\",\n );\n } else {\n let nextGuards = guardsField;\n if (guardsField.default === undefined) {\n nextGuards = { ...nextGuards, default: { intent: {} } };\n changed = true;\n }\n\n const guardFields = nextGuards.fields ?? {};\n const intentField = guardFields.intent;\n\n if (!intentField) {\n nextGuards = {\n ...nextGuards,\n fields: {\n ...guardFields,\n intent: {\n type: \"object\",\n required: false,\n default: {},\n },\n },\n };\n changed = true;\n } else if (intentField.type !== \"object\") {\n throw new ManifestoError(\n \"SCHEMA_ERROR\",\n \"Reserved namespace '$mel.guards.intent' must be an object field\",\n );\n } else if (intentField.default === undefined) {\n nextGuards = {\n ...nextGuards,\n fields: {\n ...guardFields,\n intent: { ...intentField, default: {} },\n },\n };\n changed = true;\n }\n\n if (nextGuards !== guardsField) {\n nextMel = {\n ...nextMel,\n fields: {\n ...melFields,\n guards: nextGuards,\n },\n };\n }\n }\n\n if (nextMel !== fields.$mel) {\n fields.$mel = nextMel;\n changed = true;\n }\n }\n\n if (!changed) return schema;\n\n return {\n ...schema,\n state: {\n ...schema.state,\n fields,\n },\n };\n}\n\n// =============================================================================\n// Reserved Namespace Validation\n// =============================================================================\n\nfunction validateReservedNamespaces(schema: DomainSchema): void {\n const actions = schema.actions || {};\n for (const actionType of Object.keys(actions)) {\n if (actionType.startsWith(RESERVED_NAMESPACE_PREFIX)) {\n throw new ManifestoError(\n \"RESERVED_NAMESPACE\",\n `Action type \"${actionType}\" uses reserved namespace prefix \"${RESERVED_NAMESPACE_PREFIX}\"`,\n );\n }\n }\n}\n\n// =============================================================================\n// Internal Host Creation (INV-5)\n// Absorbed from runtime/src/execution/internal-host.ts\n// =============================================================================\n\nfunction createInternalHost(\n schema: DomainSchema,\n effects: Record<string, EffectHandler>,\n initialSnapshot?: Snapshot,\n): ManifestoHost {\n const host = createHost(schema, {\n initialData: initialSnapshot?.data ?? extractDefaults(schema.state),\n });\n\n // P1-1: When restoring from a persisted snapshot, use host.reset() to\n // hydrate the full canonical Snapshot (meta, system, input) rather than\n // only forwarding data via initialData which resets meta.version to 0.\n if (initialSnapshot) {\n host.reset(initialSnapshot);\n }\n\n // Register reserved system.get handler (compiler-internal, CRITICAL)\n host.registerEffect(RESERVED_EFFECT_TYPE, async (\n _type: string,\n params: Record<string, unknown>,\n ctx: HostEffectContext,\n ): Promise<Patch[]> => {\n const { patches } = executeSystemGet(params, ctx.snapshot);\n return patches;\n });\n\n // Register user effects, adapting 2-param → 3-param signature\n for (const [effectType, appHandler] of Object.entries(effects)) {\n const hostHandler: HostEffectHandler = async (\n _type: string,\n params: Record<string, unknown>,\n ctx: HostEffectContext,\n ): Promise<Patch[]> => {\n const appCtx = { snapshot: ctx.snapshot };\n const patches = await appHandler(params, appCtx);\n return patches as Patch[];\n };\n\n host.registerEffect(effectType, hostHandler);\n }\n\n return host;\n}\n\n// =============================================================================\n// system.get Effect Implementation\n// Absorbed from runtime/src/execution/system-get.ts\n// =============================================================================\n\ninterface SystemGetReadParams {\n path: string;\n target?: string;\n}\n\ninterface SystemGetGenerateParams {\n key: string;\n into: string;\n}\n\ntype SystemGetParams = SystemGetReadParams | SystemGetGenerateParams;\n\nfunction isGenerateParams(params: unknown): params is SystemGetGenerateParams {\n return (\n typeof params === \"object\" &&\n params !== null &&\n \"key\" in params &&\n \"into\" in params\n );\n}\n\nfunction generateSystemValue(key: string): unknown {\n switch (key) {\n case \"uuid\":\n return generateUUID();\n case \"timestamp\":\n case \"time.now\":\n return Date.now();\n case \"isoTimestamp\":\n return new Date().toISOString();\n default:\n return null;\n }\n}\n\nfunction generateUUID(): string {\n if (typeof crypto !== \"undefined\" && crypto.randomUUID) {\n return crypto.randomUUID();\n }\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === \"x\" ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n\nfunction executeSystemGet(\n params: unknown,\n snapshot: Snapshot,\n): { patches: Patch[] } {\n if (isGenerateParams(params)) {\n const value = generateSystemValue(params.key);\n const patches: Patch[] = [{\n op: \"set\",\n path: normalizeTargetPath(params.into),\n value,\n }];\n return { patches };\n }\n\n // Read mode\n const { path, target } = params as SystemGetReadParams;\n const result = resolvePathValue(path, snapshot);\n\n const patches: Patch[] = [];\n if (target) {\n patches.push({\n op: \"set\",\n path: normalizeTargetPath(target),\n value: result.value,\n });\n }\n\n return { patches };\n}\n\nfunction normalizePath(path: string): string {\n if (path.startsWith(\"/\")) {\n return path.slice(1).replace(/\\//g, \".\");\n }\n return path;\n}\n\nfunction normalizeTargetPath(path: string): Patch[\"path\"] {\n const normalized = normalizePath(path);\n const withoutDataRoot = normalized.startsWith(\"data.\")\n ? normalized.slice(\"data.\".length)\n : normalized;\n return semanticPathToPatchPath(withoutDataRoot);\n}\n\nfunction resolvePathValue(\n path: string,\n snapshot: Snapshot,\n): { value: unknown; found: boolean } {\n const normalized = normalizePath(path);\n const parts = normalized.split(\".\");\n\n if (parts.length === 0) {\n return { value: undefined, found: false };\n }\n\n const root = parts[0];\n const rest = parts.slice(1);\n\n let current: unknown;\n\n switch (root) {\n case \"data\":\n current = snapshot.data;\n break;\n case \"computed\":\n current = snapshot.computed;\n break;\n case \"system\":\n current = snapshot.system;\n break;\n case \"meta\":\n current = snapshot.meta;\n break;\n default:\n current = snapshot.data;\n rest.unshift(root);\n }\n\n for (const part of rest) {\n if (current === null || current === undefined) {\n return { value: undefined, found: false };\n }\n if (typeof current !== \"object\") {\n return { value: undefined, found: false };\n }\n current = (current as Record<string, unknown>)[part];\n }\n\n return { value: current, found: current !== undefined };\n}\n\n// =============================================================================\n// Subscriber Type (internal)\n// =============================================================================\n\ninterface Subscriber<R> {\n selector: Selector<unknown, R>;\n listener: (value: R) => void;\n lastValue: R | undefined;\n initialized: boolean;\n}\n\n// =============================================================================\n// Intent ID Generation (SDK-DISPATCH-2, SDK-INV-6)\n// =============================================================================\n\nfunction generateIntentId(): string {\n return generateUUID();\n}\n","/**\n * SDK v1.0.0 Error Types\n *\n * @see SDK SPEC v1.0.0 §12\n * @see SDK-ERR-1, SDK-ERR-2, SDK-ERR-3\n * @module\n */\n\n// =============================================================================\n// Base Error\n// =============================================================================\n\n/**\n * Base error for all SDK errors.\n *\n * @see SDK-ERR-1\n */\nexport class ManifestoError extends Error {\n readonly code: string;\n\n constructor(code: string, message: string, options?: ErrorOptions) {\n super(message, options);\n this.name = \"ManifestoError\";\n this.code = code;\n }\n}\n\n// =============================================================================\n// Reserved Effect Error\n// =============================================================================\n\n/**\n * Thrown when user effects attempt to override reserved effect types (e.g. system.get).\n *\n * @see SDK-ERR-2, SDK-INV-4\n */\nexport class ReservedEffectError extends ManifestoError {\n readonly effectType: string;\n\n constructor(effectType: string) {\n super(\n \"RESERVED_EFFECT\",\n `Effect type \"${effectType}\" is reserved and cannot be overridden`,\n );\n this.name = \"ReservedEffectError\";\n this.effectType = effectType;\n }\n}\n\n// =============================================================================\n// Disposed Error\n// =============================================================================\n\n// =============================================================================\n// Compile Error\n// =============================================================================\n\n/**\n * Thrown when MEL compilation fails. Exposes full diagnostic info.\n *\n * @see SDK-ERR-4\n */\nexport class CompileError extends ManifestoError {\n readonly diagnostics: readonly CompileDiagnostic[];\n\n constructor(diagnostics: readonly CompileDiagnostic[], formattedMessage: string) {\n super(\"COMPILE_ERROR\", formattedMessage);\n this.name = \"CompileError\";\n this.diagnostics = diagnostics;\n }\n}\n\n/**\n * Minimal diagnostic shape exposed by SDK.\n * Matches @manifesto-ai/compiler Diagnostic but avoids hard dependency.\n */\nexport interface CompileDiagnostic {\n readonly severity: \"error\" | \"warning\" | \"info\";\n readonly code: string;\n readonly message: string;\n readonly location: {\n readonly start: { readonly line: number; readonly column: number; readonly offset: number };\n readonly end: { readonly line: number; readonly column: number; readonly offset: number };\n };\n readonly source?: string;\n readonly suggestion?: string;\n}\n\n// =============================================================================\n// Disposed Error\n// =============================================================================\n\n/**\n * Thrown when dispatch is called on a disposed instance.\n *\n * @see SDK-ERR-3, SDK-DISPATCH-4\n */\nexport class DisposedError extends ManifestoError {\n constructor() {\n super(\"DISPOSED\", \"Cannot dispatch on a disposed ManifestoInstance\");\n this.name = \"DisposedError\";\n }\n}\n","/**\n * dispatchAsync() — Non-normative convenience utility\n *\n * Promise-based wrapper around dispatch() + on().\n * Resolves when the intent reaches a terminal state.\n *\n * @see SDK SPEC v1.0.0 §14.3\n * @module\n */\n\nimport type { Intent } from \"@manifesto-ai/core\";\nimport type { Snapshot, ManifestoInstance } from \"./types.js\";\n\n/**\n * Error thrown when an intent is rejected by a guard.\n */\nexport class DispatchRejectedError extends Error {\n readonly code = \"DISPATCH_REJECTED\";\n readonly intentId: string;\n\n constructor(intentId: string, reason?: string) {\n super(reason ?? \"Intent was rejected by guard\");\n this.name = \"DispatchRejectedError\";\n this.intentId = intentId;\n }\n}\n\n/**\n * Dispatch an intent and wait for it to complete.\n *\n * - Resolves with the terminal Snapshot on `dispatch:completed`\n * - Rejects with the error on `dispatch:failed`\n * - Rejects with DispatchRejectedError on `dispatch:rejected`\n *\n * This is a convenience utility derived entirely from `dispatch` + `on`.\n * It does NOT violate the \"one owned concept\" rule.\n *\n * @see SDK SPEC v1.0.0 §14.3\n */\nexport function dispatchAsync<T = unknown>(\n instance: ManifestoInstance<T>,\n intent: Intent,\n): Promise<Snapshot<T>> {\n const intentId = intent.intentId ?? generateId();\n const enriched: Intent = intent.intentId ? intent : { ...intent, intentId };\n\n return new Promise((resolve, reject) => {\n const cleanup = () => {\n unsubCompleted();\n unsubFailed();\n unsubRejected();\n };\n\n const unsubCompleted = instance.on(\"dispatch:completed\", (e) => {\n if (e.intentId === intentId) {\n cleanup();\n resolve(e.snapshot);\n }\n });\n\n const unsubFailed = instance.on(\"dispatch:failed\", (e) => {\n if (e.intentId === intentId) {\n cleanup();\n reject(e.error ?? new Error(\"Dispatch failed\"));\n }\n });\n\n const unsubRejected = instance.on(\"dispatch:rejected\", (e) => {\n if (e.intentId === intentId) {\n cleanup();\n reject(new DispatchRejectedError(intentId, e.reason));\n }\n });\n\n instance.dispatch(enriched);\n });\n}\n\nfunction generateId(): string {\n if (typeof crypto !== \"undefined\" && crypto.randomUUID) {\n return crypto.randomUUID();\n }\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === \"x\" ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n","import { semanticPathToPatchPath } from \"@manifesto-ai/core\";\nimport type { SetPatch, UnsetPatch, MergePatch } from \"@manifesto-ai/core\";\n\n// ============================================================================\n// Type-Level Path Utilities\n// ============================================================================\n\n/**\n * Depth counter for recursive type operations.\n * Prevents infinite recursion in TypeScript's type system.\n *\n * Usage: Prev[4] = 3, Prev[3] = 2, ... Prev[0] = never\n */\ntype Prev = [never, 0, 1, 2, 3, 4];\n\n/**\n * Extract all valid dot-separated paths from a data type.\n *\n * - Object keys become path segments\n * - Nested objects generate dot-separated paths (e.g. \"user.name\")\n * - Arrays, primitives, and Record<string, T> are leaf nodes\n * (Record sub-paths are not supported by Core's path resolution)\n * - Limited to 3 levels of nesting to avoid TS recursion limits\n * (root key + 3 nested levels = max 4 path segments)\n *\n * @example\n * type State = { user: { name: string; age: number }; count: number };\n * type P = DataPaths<State>;\n * // \"user\" | \"user.name\" | \"user.age\" | \"count\"\n */\nexport type DataPaths<T, D extends number = 3> = [D] extends [never]\n ? never\n : T extends Record<string, unknown>\n ? T extends unknown[]\n ? never\n : {\n [K in keyof T & string]:\n | K\n | (NonNullable<T[K]> extends Record<string, unknown>\n ? NonNullable<T[K]> extends unknown[]\n ? never\n : string extends keyof NonNullable<T[K]>\n ? never // Record<string, T> — dynamic keys not resolved by Core\n : `${K}.${DataPaths<NonNullable<T[K]>, Prev[D]>}`\n : never);\n }[keyof T & string]\n : never;\n\n/**\n * Resolve the value type at a dot-separated path.\n *\n * @example\n * type State = { user: { name: string } };\n * type V = ValueAt<State, \"user.name\">; // string\n * type U = ValueAt<State, \"user\">; // { name: string }\n */\nexport type ValueAt<T, P extends string> = P extends `${infer K}.${infer Rest}`\n ? K extends keyof T\n ? ValueAt<NonNullable<T[K]>, Rest>\n : never\n : P extends keyof T\n ? T[P]\n : never;\n\n/**\n * Paths that resolve to plain object types (valid targets for merge).\n * Arrays and primitives are excluded since merge performs shallow object merge.\n *\n * @example\n * type State = { user: { name: string }; tags: string[]; count: number };\n * type M = ObjectPaths<State>;\n * // \"user\" (tags and count excluded - not plain objects)\n */\nexport type ObjectPaths<T, D extends number = 3> = [D] extends [never]\n ? never\n : T extends Record<string, unknown>\n ? T extends unknown[]\n ? never\n : {\n [K in keyof T & string]:\n | (NonNullable<T[K]> extends Record<string, unknown>\n ? NonNullable<T[K]> extends unknown[]\n ? never\n : K\n : never)\n | (NonNullable<T[K]> extends Record<string, unknown>\n ? NonNullable<T[K]> extends unknown[]\n ? never\n : string extends keyof NonNullable<T[K]>\n ? never // Record<string, T> — don't recurse into dynamic keys\n : `${K}.${ObjectPaths<NonNullable<T[K]>, Prev[D]>}`\n : never);\n }[keyof T & string]\n : never;\n\n// ============================================================================\n// TypedOps Interface\n// ============================================================================\n\n/**\n * Type-safe patch operations builder.\n *\n * Provides IDE autocomplete for state paths and compile-time type checking\n * for patch values. All methods return standard Patch objects compatible\n * with Core's apply() function.\n * System mutation convenience APIs are intentionally excluded.\n *\n * @typeParam TData - The shape of domain state (snapshot.data)\n */\nexport interface TypedOps<TData extends Record<string, unknown>> {\n /**\n * Create a set patch — replace value at path (create if missing).\n *\n * @example\n * ops.set('count', 5);\n * ops.set('user.name', 'Alice');\n */\n set<P extends DataPaths<TData>>(path: P, value: Exclude<ValueAt<TData, P>, undefined>): SetPatch;\n\n /**\n * Create an unset patch — remove property at path.\n *\n * @example\n * ops.unset('temporaryField');\n */\n unset<P extends DataPaths<TData>>(path: P): UnsetPatch;\n\n /**\n * Create a merge patch — shallow merge at object path.\n * Only valid for paths that resolve to plain object types.\n *\n * @example\n * ops.merge('user', { name: 'Bob' });\n */\n merge<P extends ObjectPaths<TData>>(\n path: P,\n value: { [K in keyof ValueAt<TData, P>]?: Exclude<ValueAt<TData, P>[K], undefined> },\n ): MergePatch;\n\n /**\n * Raw (untyped) patch creation — escape hatch for dynamic paths\n * or platform namespace ($*) targets.\n */\n raw: {\n set(path: string, value: unknown): SetPatch;\n unset(path: string): UnsetPatch;\n merge(path: string, value: Record<string, unknown>): MergePatch;\n };\n}\n\n// ============================================================================\n// Factory\n// ============================================================================\n\n/**\n * Create a type-safe patch operations builder.\n *\n * Injects the domain state type to enable:\n * - IDE autocomplete on all valid state paths\n * - Compile-time type checking of patch values\n * - Merge restricted to object-typed paths\n *\n * @typeParam TData - The shape of domain state (snapshot.data)\n *\n * @example\n * type State = {\n * count: number;\n * user: { name: string; age: number };\n * tags: string[];\n * };\n *\n * const ops = defineOps<State>();\n *\n * ops.set('count', 5); // OK — value: number\n * ops.set('user.name', 'Alice'); // OK — value: string\n * ops.set('count', 'hello'); // TS error — expected number\n * ops.merge('user', { name: 'B' }); // OK — partial object merge\n * ops.unset('tags'); // OK\n *\n * // Escape hatch for dynamic / platform paths\n * ops.raw.set('$host.custom', { key: 'value' });\n */\nexport function defineOps<\n TData extends Record<string, unknown>,\n>(): TypedOps<TData> {\n const toPatchPath = (path: string) => semanticPathToPatchPath(path);\n\n return {\n set(path: string, value: unknown): SetPatch {\n return { op: \"set\", path: toPatchPath(path), value };\n },\n unset(path: string): UnsetPatch {\n return { op: \"unset\", path: toPatchPath(path) };\n },\n merge(path: string, value: unknown): MergePatch {\n return { op: \"merge\", path: toPatchPath(path), value: value as Record<string, unknown> };\n },\n raw: {\n set(path: string, value: unknown): SetPatch {\n return { op: \"set\", path: toPatchPath(path), value };\n },\n unset(path: string): UnsetPatch {\n return { op: \"unset\", path: toPatchPath(path) };\n },\n merge(path: string, value: Record<string, unknown>): MergePatch {\n return { op: \"merge\", path: toPatchPath(path), value };\n },\n },\n };\n}\n","/**\n * @manifesto-ai/sdk v1.0.0\n *\n * Protocol-first SDK — thin composition layer over the Manifesto protocol stack.\n * The SDK owns one concept: createManifesto().\n *\n * @see sdk-SPEC-v1.0.0.md\n * @see ADR-010\n * @packageDocumentation\n */\n\nexport type { SdkManifest } from \"./manifest.js\";\n\n// =============================================================================\n// SDK-Owned Exports\n// =============================================================================\n\nexport { createManifesto } from \"./create-manifesto.js\";\nexport { dispatchAsync, DispatchRejectedError } from \"./dispatch-async.js\";\n\nexport type {\n Snapshot,\n ManifestoInstance,\n ManifestoConfig,\n ManifestoEvent,\n ManifestoEventMap,\n ManifestoEventPayload,\n EffectContext,\n EffectHandler,\n Selector,\n Unsubscribe,\n} from \"./types.js\";\n\nexport {\n ManifestoError,\n ReservedEffectError,\n DisposedError,\n CompileError,\n} from \"./errors.js\";\n\nexport type { CompileDiagnostic } from \"./errors.js\";\n\n// =============================================================================\n// Typed Patch Operations (SDK-owned utility)\n// =============================================================================\n\nexport { defineOps } from \"./typed-ops.js\";\nexport type { TypedOps, DataPaths, ValueAt, ObjectPaths } from \"./typed-ops.js\";\n\n// =============================================================================\n// Protocol Re-exports — @manifesto-ai/core (SDK-REEXPORT-1)\n// =============================================================================\n\nexport type {\n DomainSchema,\n Snapshot as CoreSnapshot,\n Patch,\n SetPatch,\n UnsetPatch,\n MergePatch,\n Intent,\n ComputeResult,\n Requirement,\n ErrorValue,\n TraceGraph,\n} from \"@manifesto-ai/core\";\n\nexport { createIntent, createSnapshot, createCore } from \"@manifesto-ai/core\";\n\n// =============================================================================\n// Protocol Re-exports — @manifesto-ai/host (SDK-REEXPORT-1)\n// =============================================================================\n\nexport type { HostResult, HostOptions } from \"@manifesto-ai/host\";\n\n// =============================================================================\n// Protocol Re-exports — @manifesto-ai/world (SDK-REEXPORT-1)\n// =============================================================================\n\nexport type { WorldStore } from \"@manifesto-ai/world\";\nexport { createMemoryWorldStore } from \"@manifesto-ai/world\";\n"],"mappings":"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","names":["patches","semanticPathToPatchPath"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@manifesto-ai/sdk",
3
- "version": "1.2.0",
4
- "description": "Manifesto SDK - Public developer API layer",
3
+ "version": "2.0.0",
4
+ "description": "Manifesto SDK - Public API for the semantic layer",
5
5
  "author": "eggplantiny <eggplantiny@gmail.com>",
6
6
  "license": "MIT",
7
7
  "repository": {
@@ -16,11 +16,11 @@
16
16
  "keywords": [
17
17
  "manifesto",
18
18
  "sdk",
19
- "state-management",
19
+ "semantic-layer",
20
20
  "deterministic",
21
- "semantic",
21
+ "domain-state",
22
22
  "traceable",
23
- "ai"
23
+ "snapshot"
24
24
  ],
25
25
  "type": "module",
26
26
  "main": "./dist/index.js",
@@ -35,15 +35,16 @@
35
35
  "dist"
36
36
  ],
37
37
  "dependencies": {
38
- "@manifesto-ai/core": "2.4.0",
39
- "@manifesto-ai/runtime": "0.1.2",
40
- "@manifesto-ai/world": "2.4.0"
38
+ "@manifesto-ai/core": "2.6.1",
39
+ "@manifesto-ai/compiler": "1.7.0",
40
+ "@manifesto-ai/world": "2.4.2",
41
+ "@manifesto-ai/host": "2.3.4"
41
42
  },
42
43
  "devDependencies": {
43
44
  "typescript": "^5.9.3"
44
45
  },
45
46
  "scripts": {
46
- "build": "tsc",
47
+ "build": "tsup",
47
48
  "dev": "tsc --watch",
48
49
  "clean": "rm -rf dist",
49
50
  "test": "vitest run"
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=bootstrap.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bootstrap.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/bootstrap.test.ts"],"names":[],"mappings":""}
@@ -1,33 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import * as sdk from '../index.js';
3
- describe('@manifesto-ai/sdk bootstrap', () => {
4
- it('SdkManifest type is importable and structurally correct', () => {
5
- // Type-level verification: the manifest type constrains to expected shape
6
- const manifest = {
7
- name: '@manifesto-ai/sdk',
8
- specVersion: '0.1.0',
9
- phase: 'bootstrap',
10
- };
11
- expect(manifest.name).toBe('@manifesto-ai/sdk');
12
- expect(manifest.specVersion).toBe('0.1.0');
13
- expect(manifest.phase).toBe('bootstrap');
14
- });
15
- it('package entry point resolves without error', () => {
16
- expect(sdk).toBeDefined();
17
- });
18
- it('exports SDK components', () => {
19
- // App Factory
20
- expect(sdk.createApp).toBeDefined();
21
- expect(sdk.createTestApp).toBeDefined();
22
- // ManifestoApp
23
- expect(sdk.ManifestoApp).toBeDefined();
24
- // Hooks
25
- expect(sdk.AppRefImpl).toBeDefined();
26
- expect(sdk.createAppRef).toBeDefined();
27
- expect(sdk.HookableImpl).toBeDefined();
28
- expect(sdk.JobQueue).toBeDefined();
29
- expect(sdk.HookContextImpl).toBeDefined();
30
- expect(sdk.createHookContext).toBeDefined();
31
- });
32
- });
33
- //# sourceMappingURL=bootstrap.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bootstrap.test.js","sourceRoot":"","sources":["../../src/__tests__/bootstrap.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,KAAK,GAAG,MAAM,aAAa,CAAC;AAGnC,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAC3C,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,0EAA0E;QAC1E,MAAM,QAAQ,GAAgB;YAC5B,IAAI,EAAE,mBAAmB;YACzB,WAAW,EAAE,OAAO;YACpB,KAAK,EAAE,WAAW;SACnB,CAAC;QAEF,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAChD,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;QAChC,cAAc;QACd,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;QACpC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,WAAW,EAAE,CAAC;QAExC,eAAe;QACf,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;QAEvC,QAAQ;QACR,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QACnC,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,WAAW,EAAE,CAAC;QAC1C,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,WAAW,EAAE,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=public-exports.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"public-exports.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/public-exports.test.ts"],"names":[],"mappings":""}
@@ -1,58 +0,0 @@
1
- import { describe, expect, it } from 'vitest';
2
- import * as sdk from '../index.js';
3
- describe('sdk public exports contract', () => {
4
- it('exposes the expected runtime value exports only', () => {
5
- const exportedKeys = Object.keys(sdk).sort();
6
- const expectedKeys = [
7
- 'ActionFailedError',
8
- 'ActionNotFoundError',
9
- 'ActionPreparationError',
10
- 'ActionRejectedError',
11
- 'ActionTimeoutError',
12
- 'AppDisposedError',
13
- 'AppNotReadyError',
14
- 'AppRefImpl',
15
- 'BranchHeadNotFoundError',
16
- 'BranchNotFoundError',
17
- 'DomainCompileError',
18
- 'HandleDetachedError',
19
- 'HookContextImpl',
20
- 'HookMutationError',
21
- 'HookableImpl',
22
- 'JobQueue',
23
- 'ManifestoApp',
24
- 'ManifestoAppError',
25
- 'MemoryDisabledError',
26
- 'MissingDefaultActorError',
27
- 'PluginInitError',
28
- 'ReservedEffectTypeError',
29
- 'ReservedNamespaceError',
30
- 'SchemaMismatchOnResumeError',
31
- 'SystemActionDisabledError',
32
- 'SystemActionRoutingError',
33
- 'WorldNotFoundError',
34
- 'WorldNotInLineageError',
35
- 'WorldSchemaHashMismatchError',
36
- 'createApp',
37
- 'createAppRef',
38
- 'createHookContext',
39
- 'createTestApp',
40
- ].sort();
41
- expect(exportedKeys).toEqual(expectedKeys);
42
- });
43
- it('does not expose non-contract helpers from former app facade', () => {
44
- const forbidden = [
45
- 'createSilentPolicyService',
46
- 'createStrictPolicyService',
47
- 'createDefaultPolicyService',
48
- 'createInMemoryWorldStore',
49
- 'withDxAliases',
50
- 'validateSchemaCompatibility',
51
- 'withPlatformNamespaces',
52
- ];
53
- for (const key of forbidden) {
54
- expect(sdk[key]).toBeUndefined();
55
- }
56
- });
57
- });
58
- //# sourceMappingURL=public-exports.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"public-exports.test.js","sourceRoot":"","sources":["../../src/__tests__/public-exports.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,KAAK,GAAG,MAAM,aAAa,CAAC;AAEnC,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAC3C,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAE7C,MAAM,YAAY,GAAG;YACnB,mBAAmB;YACnB,qBAAqB;YACrB,wBAAwB;YACxB,qBAAqB;YACrB,oBAAoB;YACpB,kBAAkB;YAClB,kBAAkB;YAClB,YAAY;YACZ,yBAAyB;YACzB,qBAAqB;YACrB,oBAAoB;YACpB,qBAAqB;YACrB,iBAAiB;YACjB,mBAAmB;YACnB,cAAc;YACd,UAAU;YACV,cAAc;YACd,mBAAmB;YACnB,qBAAqB;YACrB,0BAA0B;YAC1B,iBAAiB;YACjB,yBAAyB;YACzB,wBAAwB;YACxB,6BAA6B;YAC7B,2BAA2B;YAC3B,0BAA0B;YAC1B,oBAAoB;YACpB,wBAAwB;YACxB,8BAA8B;YAC9B,WAAW;YACX,cAAc;YACd,mBAAmB;YACnB,eAAe;SAChB,CAAC,IAAI,EAAE,CAAC;QAET,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,SAAS,GAAG;YAChB,2BAA2B;YAC3B,2BAA2B;YAC3B,4BAA4B;YAC5B,0BAA0B;YAC1B,eAAe;YACf,6BAA6B;YAC7B,wBAAwB;SACzB,CAAC;QAEF,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;YAC5B,MAAM,CAAE,GAA+B,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QAChE,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
package/dist/app.d.ts DELETED
@@ -1,51 +0,0 @@
1
- /**
2
- * Manifesto App Implementation (Thin Facade)
3
- *
4
- * Delegates all operations to AppBootstrap (assembly) and AppRuntime (operations).
5
- *
6
- * @see ADR-004 Phase 4 — FACADE-1~5
7
- * @see SPEC §5-6
8
- * @module
9
- */
10
- import type { DomainSchema, Snapshot } from "@manifesto-ai/core";
11
- import type { App, ActionHandle, ActOptions, AppConfig, AppHooks, AppState, AppStatus, Branch, DisposeOptions, ForkOptions, Hookable, MemoryFacade, MigrationLink, Proposal, ProposalResult, Session, SessionOptions, SubscribeOptions, SystemFacade, Unsubscribe, World, WorldStore } from "@manifesto-ai/runtime";
12
- import type { WorldId, WorldHead } from "@manifesto-ai/world";
13
- /**
14
- * Manifesto App — Thin Facade (FACADE-1~5)
15
- *
16
- * Only contains lifecycle management and delegation to AppRuntime.
17
- *
18
- * @see ADR-004 Phase 4
19
- */
20
- export declare class ManifestoApp implements App {
21
- private _lifecycleManager;
22
- private _bootstrap;
23
- private _runtime;
24
- constructor(config: AppConfig, worldStore: WorldStore);
25
- get status(): AppStatus;
26
- get hooks(): Hookable<AppHooks>;
27
- ready(): Promise<void>;
28
- dispose(opts?: DisposeOptions): Promise<void>;
29
- getDomainSchema(): DomainSchema;
30
- currentBranch(): Branch;
31
- listBranches(): readonly Branch[];
32
- switchBranch(branchId: string): Promise<Branch>;
33
- fork(opts?: ForkOptions): Promise<Branch>;
34
- act(type: string, input?: unknown, opts?: ActOptions): ActionHandle;
35
- getActionHandle(proposalId: string): ActionHandle;
36
- session(actorId: string, opts?: SessionOptions): Session;
37
- getState<T = unknown>(): AppState<T>;
38
- subscribe<TSelected>(selector: (state: AppState<unknown>) => TSelected, listener: (selected: TSelected) => void, opts?: SubscribeOptions<TSelected>): Unsubscribe;
39
- get system(): SystemFacade;
40
- get memory(): MemoryFacade;
41
- getMigrationLinks(): readonly MigrationLink[];
42
- getCurrentHead(): WorldId;
43
- getSnapshot<T = unknown>(): AppState<T>;
44
- getSnapshot(worldId: WorldId): Promise<Snapshot>;
45
- getWorld(worldId: WorldId): Promise<World>;
46
- getHeads(): Promise<WorldHead[]>;
47
- getLatestHead(): Promise<WorldHead | null>;
48
- submitProposal(proposal: Proposal): Promise<ProposalResult>;
49
- private _getRuntime;
50
- }
51
- //# sourceMappingURL=app.d.ts.map
package/dist/app.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,KAAK,EACV,GAAG,EACH,YAAY,EACZ,UAAU,EACV,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,MAAM,EACN,cAAc,EACd,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,aAAa,EAEb,QAAQ,EACR,cAAc,EACd,OAAO,EACP,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,KAAK,EACL,UAAU,EACX,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAqB9D;;;;;;GAMG;AACH,qBAAa,YAAa,YAAW,GAAG;IACtC,OAAO,CAAC,iBAAiB,CAAmB;IAC5C,OAAO,CAAC,UAAU,CAAe;IACjC,OAAO,CAAC,QAAQ,CAA2B;gBAE/B,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU;IAmCrD,IAAI,MAAM,IAAI,SAAS,CAEtB;IAED,IAAI,KAAK,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAE9B;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAyBtB,OAAO,CAAC,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BnD,eAAe,IAAI,YAAY;IAa/B,aAAa,IAAI,MAAM;IAIvB,YAAY,IAAI,SAAS,MAAM,EAAE;IAI3B,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI/C,IAAI,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAI/C,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,YAAY;IAInE,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,YAAY;IAIjD,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO;IAIxD,QAAQ,CAAC,CAAC,GAAG,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC;IAIpC,SAAS,CAAC,SAAS,EACjB,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,SAAS,EACjD,QAAQ,EAAE,CAAC,QAAQ,EAAE,SAAS,KAAK,IAAI,EACvC,IAAI,CAAC,EAAE,gBAAgB,CAAC,SAAS,CAAC,GACjC,WAAW;IAId,IAAI,MAAM,IAAI,YAAY,CAEzB;IAED,IAAI,MAAM,IAAI,YAAY,CAEzB;IAED,iBAAiB,IAAI,SAAS,aAAa,EAAE;IAI7C,cAAc,IAAI,OAAO;IAIzB,WAAW,CAAC,CAAC,GAAG,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC;IACvC,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;IAQ1C,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC;IAI1C,QAAQ,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAIhC,aAAa,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAI1C,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC;IAQjE,OAAO,CAAC,WAAW;CAIpB"}
package/dist/app.js DELETED
@@ -1,170 +0,0 @@
1
- /**
2
- * Manifesto App Implementation (Thin Facade)
3
- *
4
- * Delegates all operations to AppBootstrap (assembly) and AppRuntime (operations).
5
- *
6
- * @see ADR-004 Phase 4 — FACADE-1~5
7
- * @see SPEC §5-6
8
- * @module
9
- */
10
- import { AppDisposedError, AppBootstrap, createActionQueue, createLivenessGuard, createProposalManager, createLifecycleManager, createSchemaManager, createWorldHeadTracker, SubscriptionStore, createDefaultPolicyService, createSilentPolicyService, } from "@manifesto-ai/runtime";
11
- // =============================================================================
12
- // ManifestoApp Implementation (Thin Facade)
13
- // =============================================================================
14
- /**
15
- * Manifesto App — Thin Facade (FACADE-1~5)
16
- *
17
- * Only contains lifecycle management and delegation to AppRuntime.
18
- *
19
- * @see ADR-004 Phase 4
20
- */
21
- export class ManifestoApp {
22
- _lifecycleManager;
23
- _bootstrap;
24
- _runtime = null;
25
- constructor(config, worldStore) {
26
- this._lifecycleManager = createLifecycleManager();
27
- // PolicyService: use provided or create default
28
- let policyService;
29
- if (config.policyService) {
30
- policyService = config.policyService;
31
- }
32
- else {
33
- const isTest = typeof globalThis !== "undefined" &&
34
- globalThis.process?.env?.NODE_ENV === "test";
35
- policyService = isTest
36
- ? createSilentPolicyService(config.executionKeyPolicy)
37
- : createDefaultPolicyService({ executionKeyPolicy: config.executionKeyPolicy });
38
- }
39
- this._bootstrap = new AppBootstrap({
40
- config,
41
- worldStore,
42
- policyService,
43
- lifecycleManager: this._lifecycleManager,
44
- schemaManager: createSchemaManager(config.schema),
45
- proposalManager: createProposalManager(),
46
- actionQueue: createActionQueue(),
47
- livenessGuard: createLivenessGuard(),
48
- worldHeadTracker: createWorldHeadTracker(),
49
- subscriptionStore: new SubscriptionStore(),
50
- effects: config.effects,
51
- });
52
- }
53
- // ===========================================================================
54
- // Lifecycle
55
- // ===========================================================================
56
- get status() {
57
- return this._lifecycleManager.status;
58
- }
59
- get hooks() {
60
- return this._lifecycleManager.hooks;
61
- }
62
- async ready() {
63
- if (this._lifecycleManager.status === "ready") {
64
- return;
65
- }
66
- if (this._lifecycleManager.isDisposed()) {
67
- throw new AppDisposedError("ready");
68
- }
69
- // Bootstrap assembles all components (steps 1-10)
70
- this._runtime = await this._bootstrap.assemble(this);
71
- // Initialize plugins (after _runtime is set so plugins can access app APIs)
72
- await this._bootstrap.initializePlugins(this);
73
- // Mark as ready
74
- this._lifecycleManager.transitionTo("ready");
75
- // Emit app:ready
76
- await this._lifecycleManager.emitHook("app:ready", this._lifecycleManager.createHookContext());
77
- }
78
- async dispose(opts) {
79
- if (this._lifecycleManager.status === "disposed") {
80
- return;
81
- }
82
- if (this._lifecycleManager.status === "disposing") {
83
- return;
84
- }
85
- this._lifecycleManager.transitionTo("disposing");
86
- await this._lifecycleManager.emitHook("app:dispose:before", this._lifecycleManager.createHookContext());
87
- this._lifecycleManager.transitionTo("disposed");
88
- await this._lifecycleManager.emitHook("app:dispose", this._lifecycleManager.createHookContext());
89
- }
90
- // ===========================================================================
91
- // Public API — all delegation to _getRuntime()
92
- // ===========================================================================
93
- getDomainSchema() {
94
- if (this._lifecycleManager.isDisposed()) {
95
- throw new AppDisposedError("getDomainSchema");
96
- }
97
- // Special case: getDomainSchema is accessible during plugin initialization
98
- // (status is "created" but _runtime is already assembled).
99
- // Original code checked schemaManager.isResolved instead of ensureReady().
100
- if (this._runtime) {
101
- return this._runtime.getDomainSchema();
102
- }
103
- return this._getRuntime("getDomainSchema").getDomainSchema();
104
- }
105
- currentBranch() {
106
- return this._getRuntime("currentBranch").currentBranch();
107
- }
108
- listBranches() {
109
- return this._getRuntime("listBranches").listBranches();
110
- }
111
- async switchBranch(branchId) {
112
- return this._getRuntime("switchBranch").switchBranch(branchId);
113
- }
114
- async fork(opts) {
115
- return this._getRuntime("fork").fork(opts);
116
- }
117
- act(type, input, opts) {
118
- return this._getRuntime("act").act(type, input, opts);
119
- }
120
- getActionHandle(proposalId) {
121
- return this._getRuntime("getActionHandle").getActionHandle(proposalId);
122
- }
123
- session(actorId, opts) {
124
- return this._getRuntime("session").session(actorId, opts);
125
- }
126
- getState() {
127
- return this._getRuntime("getState").getState();
128
- }
129
- subscribe(selector, listener, opts) {
130
- return this._getRuntime("subscribe").subscribe(selector, listener, opts);
131
- }
132
- get system() {
133
- return this._getRuntime("system").system;
134
- }
135
- get memory() {
136
- return this._getRuntime("memory").memory;
137
- }
138
- getMigrationLinks() {
139
- return this._getRuntime("getMigrationLinks").getMigrationLinks();
140
- }
141
- getCurrentHead() {
142
- return this._getRuntime("getCurrentHead").getCurrentHead();
143
- }
144
- getSnapshot(worldId) {
145
- if (worldId !== undefined) {
146
- return this._getRuntime("getSnapshot").getSnapshot(worldId);
147
- }
148
- return this._getRuntime("getSnapshot").getState();
149
- }
150
- async getWorld(worldId) {
151
- return this._getRuntime("getWorld").getWorld(worldId);
152
- }
153
- async getHeads() {
154
- return this._getRuntime("getHeads").getHeads();
155
- }
156
- async getLatestHead() {
157
- return this._getRuntime("getLatestHead").getLatestHead();
158
- }
159
- async submitProposal(proposal) {
160
- return this._getRuntime("submitProposal").submitProposal(proposal);
161
- }
162
- // ===========================================================================
163
- // Private: Runtime Guard (FACADE-5)
164
- // ===========================================================================
165
- _getRuntime(apiName) {
166
- this._lifecycleManager.ensureReady(apiName);
167
- return this._runtime;
168
- }
169
- }
170
- //# sourceMappingURL=app.js.map
package/dist/app.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
@@ -1,52 +0,0 @@
1
- /**
2
- * App Factory
3
- *
4
- * @see SPEC v2.3.0 §6
5
- * @module
6
- */
7
- import type { DomainSchema } from "@manifesto-ai/core";
8
- import type { App, AppConfig, Effects, MelText } from "@manifesto-ai/runtime";
9
- /**
10
- * Create a new Manifesto App instance (v2.3.0).
11
- *
12
- * The `createApp()` function:
13
- * 1. Returns synchronously with an App instance
14
- * 2. Does NOT perform runtime initialization during this call
15
- * 3. Creates Host internally (users provide effects, not Host)
16
- * 4. Creates World internally if not provided (per ADR-003)
17
- *
18
- * ## v2.3.0 API (Recommended)
19
- *
20
- * Uses AppConfig with effects-first design. Host and World are created internally.
21
- *
22
- * ```typescript
23
- * const app = createApp({
24
- * schema: domainSchema,
25
- * effects: {
26
- * 'api.fetch': async (params, ctx) => [...],
27
- * 'api.save': async (params, ctx) => [...],
28
- * },
29
- * // world is optional (defaults to internal World with InMemoryWorldStore)
30
- * });
31
- *
32
- * await app.ready();
33
- * ```
34
- *
35
- * @see SPEC v2.3.0 §6.1
36
- * @see ADR-APP-002
37
- * @see ADR-003
38
- */
39
- export declare function createApp(config: AppConfig): App;
40
- /**
41
- * Create a minimal App for testing.
42
- *
43
- * Uses in-memory implementations for WorldStore and empty effects.
44
- * For v2.3.0, this creates an effects-first app.
45
- *
46
- * @param domain - Domain schema or MEL text
47
- * @param opts - Additional options
48
- */
49
- export declare function createTestApp(domain: MelText | DomainSchema, opts?: Partial<Omit<AppConfig, "schema" | "effects">> & {
50
- effects?: Effects;
51
- }): App;
52
- //# sourceMappingURL=create-app.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"create-app.d.ts","sourceRoot":"","sources":["../src/create-app.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAQ9E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,wBAAgB,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,GAAG,CAEhD;AA2BD;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,OAAO,GAAG,YAAY,EAC9B,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,GAAG,SAAS,CAAC,CAAC,GAAG;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAC5E,GAAG,CAmBL"}