@manifesto-ai/sdk 3.3.1 → 3.4.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.
- package/README.md +5 -0
- package/dist/chunk-2YBJP5JT.js +747 -0
- package/dist/chunk-2YBJP5JT.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +23 -11
- package/dist/index.js.map +1 -1
- package/dist/internal.d.ts +5 -2
- package/dist/provider.js +1 -1
- package/dist/snapshot-projection.d.ts +23 -0
- package/dist/types.d.ts +4 -5
- package/package.json +4 -4
- package/dist/chunk-ND4PXKJT.js +0 -407
- package/dist/chunk-ND4PXKJT.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/errors.ts","../src/internal.ts","../src/snapshot-projection.ts"],"sourcesContent":["export 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\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\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\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\nexport class DisposedError extends ManifestoError {\n constructor() {\n super(\"DISPOSED\", \"Cannot use a disposed Manifesto runtime\");\n this.name = \"DisposedError\";\n }\n}\n\nexport class AlreadyActivatedError extends ManifestoError {\n constructor() {\n super(\"ALREADY_ACTIVATED\", \"ComposableManifesto.activate() may only be called once\");\n this.name = \"AlreadyActivatedError\";\n }\n}\n","import {\n getAvailableActions as queryAvailableActions,\n isActionAvailable as queryActionAvailable,\n type DomainSchema,\n type Snapshot as CoreSnapshot,\n} from \"@manifesto-ai/core\";\nimport type { HostResult, ManifestoHost } from \"@manifesto-ai/host\";\n\nimport {\n AlreadyActivatedError,\n DisposedError,\n ManifestoError,\n} from \"./errors.js\";\nimport type {\n BaseLaws,\n CanonicalSnapshot,\n ComposableManifesto,\n ManifestoBaseInstance,\n ManifestoDomainShape,\n ManifestoEvent,\n ManifestoEventMap,\n Selector,\n Snapshot,\n TypedActionMetadata,\n TypedCreateIntent,\n TypedGetActionMetadata,\n TypedIntent,\n TypedMEL,\n TypedOn,\n TypedSubscribe,\n Unsubscribe,\n} from \"./types.js\";\nimport {\n cloneAndDeepFreeze,\n projectCanonicalSnapshot,\n projectedSnapshotsEqual,\n type SnapshotProjectionPlan,\n} from \"./snapshot-projection.js\";\n\nexport const ACTION_PARAM_NAMES = Symbol(\"manifesto-sdk.action-param-names\");\nexport const RUNTIME_KERNEL_FACTORY = Symbol(\"manifesto-sdk.runtime-kernel-factory\");\nexport const ACTIVATION_STATE = Symbol(\"manifesto-sdk.activation-state\");\n\ntype RuntimeActionParamMetadata = readonly string[] | null;\ntype RuntimeActionRef = {\n readonly name: PropertyKey;\n readonly [ACTION_PARAM_NAMES]?: RuntimeActionParamMetadata;\n};\n\nexport type ActivationState = {\n activated: boolean;\n};\n\nexport type HostDispatchOptions = NonNullable<Parameters<ManifestoHost[\"dispatch\"]>[1]>;\n\ninterface Subscriber<TState, R> {\n readonly selector: Selector<TState, R>;\n readonly listener: (value: R) => void;\n lastValue: R | undefined;\n initialized: boolean;\n}\n\nexport interface RuntimeKernel<T extends ManifestoDomainShape> {\n readonly schema: DomainSchema;\n readonly MEL: TypedMEL<T>;\n readonly createIntent: TypedCreateIntent<T>;\n readonly subscribe: TypedSubscribe<T>;\n readonly on: TypedOn<T>;\n readonly getSnapshot: () => Snapshot<T[\"state\"]>;\n readonly getCanonicalSnapshot: () => CanonicalSnapshot<T[\"state\"]>;\n readonly getAvailableActions: () => readonly (keyof T[\"actions\"])[];\n readonly getActionMetadata: TypedGetActionMetadata<T>;\n readonly isActionAvailable: (name: keyof T[\"actions\"]) => boolean;\n readonly dispose: () => void;\n readonly isDisposed: () => boolean;\n readonly getVisibleCoreSnapshot: () => CoreSnapshot;\n readonly setVisibleSnapshot: (\n snapshot: CoreSnapshot,\n options?: { readonly notify?: boolean },\n ) => Snapshot<T[\"state\"]>;\n readonly restoreVisibleSnapshot: () => void;\n readonly emitEvent: <K extends ManifestoEvent>(\n event: K,\n payload: ManifestoEventMap<T>[K],\n ) => void;\n readonly enqueue: <R>(task: () => Promise<R>) => Promise<R>;\n readonly ensureIntentId: (intent: TypedIntent<T>) => TypedIntent<T>;\n readonly executeHost: (\n intent: TypedIntent<T>,\n options?: HostDispatchOptions,\n ) => Promise<HostResult>;\n readonly rejectUnavailable: (intent: TypedIntent<T>) => never;\n}\n\nexport type RuntimeKernelFactory<T extends ManifestoDomainShape> = () => RuntimeKernel<T>;\n\nexport type InternalComposableManifesto<\n T extends ManifestoDomainShape,\n Laws extends BaseLaws,\n> = ComposableManifesto<T, Laws> & {\n readonly [RUNTIME_KERNEL_FACTORY]: RuntimeKernelFactory<T>;\n readonly [ACTIVATION_STATE]: ActivationState;\n};\n\ntype RuntimeKernelOptions<T extends ManifestoDomainShape> = {\n readonly schema: DomainSchema;\n readonly projectionPlan: SnapshotProjectionPlan;\n readonly host: ManifestoHost;\n readonly MEL: TypedMEL<T>;\n readonly createIntent: TypedCreateIntent<T>;\n};\n\nexport function attachRuntimeKernelFactory<\n T extends ManifestoDomainShape,\n Laws extends BaseLaws,\n>(\n manifesto: ComposableManifesto<T, Laws>,\n factory: RuntimeKernelFactory<T>,\n activationState?: ActivationState,\n): InternalComposableManifesto<T, Laws> {\n Object.defineProperty(manifesto, RUNTIME_KERNEL_FACTORY, {\n enumerable: false,\n configurable: false,\n writable: false,\n value: factory,\n });\n\n const state = activationState ?? getExistingActivationState(manifesto) ?? {\n activated: false,\n };\n\n if (!getExistingActivationState(manifesto)) {\n Object.defineProperty(manifesto, ACTIVATION_STATE, {\n enumerable: false,\n configurable: false,\n writable: false,\n value: state,\n });\n }\n\n return manifesto as InternalComposableManifesto<T, Laws>;\n}\n\nexport function getRuntimeKernelFactory<\n T extends ManifestoDomainShape,\n Laws extends BaseLaws,\n>(\n manifesto: ComposableManifesto<T, Laws>,\n): RuntimeKernelFactory<T> {\n const internal = manifesto as Partial<InternalComposableManifesto<T, Laws>>;\n const factory = internal[RUNTIME_KERNEL_FACTORY];\n\n if (typeof factory !== \"function\") {\n throw new ManifestoError(\n \"SCHEMA_ERROR\",\n \"ComposableManifesto is missing its runtime kernel factory\",\n );\n }\n\n return factory;\n}\n\nexport function getActivationState<\n T extends ManifestoDomainShape,\n Laws extends BaseLaws,\n>(\n manifesto: ComposableManifesto<T, Laws>,\n): ActivationState {\n const internal = manifesto as Partial<InternalComposableManifesto<T, Laws>>;\n const state = internal[ACTIVATION_STATE];\n\n if (!state) {\n throw new ManifestoError(\n \"SCHEMA_ERROR\",\n \"ComposableManifesto is missing its activation state\",\n );\n }\n\n return state;\n}\n\nexport function assertComposableNotActivated<\n T extends ManifestoDomainShape,\n Laws extends BaseLaws,\n>(\n manifesto: ComposableManifesto<T, Laws>,\n): void {\n if (getActivationState(manifesto).activated) {\n throw new AlreadyActivatedError();\n }\n}\n\nexport function activateComposable<\n T extends ManifestoDomainShape,\n Laws extends BaseLaws,\n>(\n manifesto: ComposableManifesto<T, Laws>,\n): void {\n const state = getActivationState(manifesto);\n if (state.activated) {\n throw new AlreadyActivatedError();\n }\n state.activated = true;\n}\n\nfunction getExistingActivationState<\n T extends ManifestoDomainShape,\n Laws extends BaseLaws,\n>(\n manifesto: ComposableManifesto<T, Laws>,\n): ActivationState | null {\n const internal = manifesto as Partial<InternalComposableManifesto<T, Laws>>;\n return internal[ACTIVATION_STATE] ?? null;\n}\n\nfunction getActionInputFieldNames(\n input: DomainSchema[\"actions\"][string][\"input\"],\n): readonly string[] {\n if (!input || input.type !== \"object\" || !input.fields) {\n return [];\n }\n\n return Object.keys(input.fields);\n}\n\nexport function createRuntimeKernel<T extends ManifestoDomainShape>({\n schema,\n projectionPlan,\n host,\n MEL,\n createIntent,\n}: RuntimeKernelOptions<T>): RuntimeKernel<T> {\n const initialCanonicalSnapshot = host.getSnapshot();\n if (!initialCanonicalSnapshot) {\n throw new ManifestoError(\"SCHEMA_ERROR\", \"Host failed to initialize its genesis snapshot\");\n }\n\n let visibleCanonicalSnapshot: CoreSnapshot = structuredClone(initialCanonicalSnapshot);\n let visibleProjectedSnapshot = cloneAndDeepFreeze(\n projectCanonicalSnapshot<T[\"state\"]>(\n visibleCanonicalSnapshot,\n projectionPlan,\n ),\n );\n let visibleCanonicalReadSnapshot = cloneAndDeepFreeze(\n visibleCanonicalSnapshot as CanonicalSnapshot<T[\"state\"]>,\n );\n let dispatchQueue: Promise<void> = Promise.resolve();\n let disposed = false;\n const actionNames = Object.keys(schema.actions) as Array<keyof T[\"actions\"] & string>;\n const actionMetadataByName = Object.freeze(\n Object.fromEntries(\n actionNames.map((name) => {\n const action = schema.actions[name];\n const actionRef = MEL.actions[name] as unknown as RuntimeActionRef | undefined;\n const rawParams = actionRef?.[ACTION_PARAM_NAMES];\n const params = Object.freeze(\n Array.isArray(rawParams) ? [...rawParams] : getActionInputFieldNames(action.input),\n );\n\n return [name, Object.freeze({\n name,\n params,\n input: action.input,\n description: action.description,\n })];\n }),\n ),\n ) as Readonly<Record<keyof T[\"actions\"] & string, TypedActionMetadata<T>>>;\n const actionMetadata = Object.freeze(\n actionNames.map((name) => actionMetadataByName[name]),\n ) as readonly TypedActionMetadata<T>[];\n\n const subscribers = new Set<Subscriber<T[\"state\"], unknown>>();\n const eventListeners = new Map<\n ManifestoEvent,\n Set<(payload: ManifestoEventMap<T>[ManifestoEvent]) => void>\n >();\n\n function subscribe<R>(\n selector: Selector<T[\"state\"], R>,\n listener: (value: R) => void,\n ): Unsubscribe {\n if (disposed) {\n return () => {};\n }\n\n let lastValue: R | undefined;\n let initialized = false;\n\n try {\n lastValue = selector(visibleProjectedSnapshot);\n initialized = true;\n } catch {\n lastValue = undefined;\n initialized = false;\n }\n\n const subscriber: Subscriber<T[\"state\"], R> = {\n selector,\n listener,\n lastValue,\n initialized,\n };\n\n subscribers.add(subscriber as Subscriber<T[\"state\"], unknown>);\n return () => {\n subscribers.delete(subscriber as Subscriber<T[\"state\"], unknown>);\n };\n }\n\n function on<K extends ManifestoEvent>(\n event: K,\n handler: (payload: ManifestoEventMap<T>[K]) => void,\n ): Unsubscribe {\n if (disposed) {\n return () => {};\n }\n\n let listeners = eventListeners.get(event);\n if (!listeners) {\n listeners = new Set();\n eventListeners.set(\n event,\n listeners as Set<(payload: ManifestoEventMap<T>[ManifestoEvent]) => void>,\n );\n }\n\n listeners.add(handler as (payload: ManifestoEventMap<T>[ManifestoEvent]) => void);\n return () => {\n listeners?.delete(handler as (payload: ManifestoEventMap<T>[ManifestoEvent]) => void);\n };\n }\n\n function getSnapshot(): Snapshot<T[\"state\"]> {\n return visibleProjectedSnapshot;\n }\n\n function getCanonicalSnapshot(): CanonicalSnapshot<T[\"state\"]> {\n return visibleCanonicalReadSnapshot;\n }\n\n function getAvailableActions(): readonly (keyof T[\"actions\"])[] {\n return queryAvailableActions(\n schema,\n visibleCanonicalSnapshot,\n ) as readonly (keyof T[\"actions\"])[];\n }\n\n const getActionMetadata: TypedGetActionMetadata<T> = ((name?: keyof T[\"actions\"]) => {\n if (name !== undefined) {\n return actionMetadataByName[String(name) as keyof T[\"actions\"] & string];\n }\n\n return actionMetadata;\n }) as TypedGetActionMetadata<T>;\n\n function isActionAvailable(name: keyof T[\"actions\"]): boolean {\n return queryActionAvailable(schema, visibleCanonicalSnapshot, String(name));\n }\n\n function dispose(): void {\n if (disposed) {\n return;\n }\n\n disposed = true;\n subscribers.clear();\n eventListeners.clear();\n }\n\n function setVisibleSnapshot(\n snapshot: CoreSnapshot,\n options?: { readonly notify?: boolean },\n ): Snapshot<T[\"state\"]> {\n visibleCanonicalSnapshot = structuredClone(snapshot);\n host.reset(structuredClone(visibleCanonicalSnapshot));\n visibleCanonicalReadSnapshot = cloneAndDeepFreeze(\n visibleCanonicalSnapshot as CanonicalSnapshot<T[\"state\"]>,\n );\n\n const nextProjectedSnapshot = projectCanonicalSnapshot<T[\"state\"]>(\n visibleCanonicalSnapshot,\n projectionPlan,\n );\n const projectedChanged = !projectedSnapshotsEqual(\n nextProjectedSnapshot,\n visibleProjectedSnapshot,\n );\n\n if (projectedChanged) {\n visibleProjectedSnapshot = cloneAndDeepFreeze(nextProjectedSnapshot);\n }\n\n if (options?.notify !== false && projectedChanged) {\n notifySubscribers(visibleProjectedSnapshot);\n }\n return visibleProjectedSnapshot;\n }\n\n function restoreVisibleSnapshot(): void {\n host.reset(structuredClone(visibleCanonicalSnapshot));\n }\n\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) {\n return;\n }\n\n for (const handler of listeners) {\n try {\n handler(payload);\n } catch {\n // Event handler failures are isolated from runtime semantics.\n }\n }\n }\n\n function enqueue<R>(task: () => Promise<R>): Promise<R> {\n const result = dispatchQueue\n .catch(() => {})\n .then(task);\n\n dispatchQueue = result.then(() => undefined, () => undefined);\n return result;\n }\n\n function ensureIntentId(intent: TypedIntent<T>): TypedIntent<T> {\n if (intent.intentId && intent.intentId.length > 0) {\n return intent;\n }\n\n return {\n ...intent,\n intentId: generateUUID(),\n } as TypedIntent<T>;\n }\n\n async function executeHost(\n intent: TypedIntent<T>,\n options?: HostDispatchOptions,\n ): Promise<HostResult> {\n return host.dispatch(intent, options);\n }\n\n function rejectUnavailable(intent: TypedIntent<T>): never {\n const error = new ManifestoError(\n \"ACTION_UNAVAILABLE\",\n `Action \"${intent.type}\" is unavailable against the current visible snapshot`,\n );\n emitEvent(\"dispatch:rejected\", {\n intentId: intent.intentId ?? \"\",\n intent,\n reason: error.message,\n });\n throw error;\n }\n\n function notifySubscribers(snapshot: Snapshot<T[\"state\"]>): void {\n for (const subscriber of subscribers) {\n let selected: unknown;\n try {\n selected = subscriber.selector(snapshot);\n } catch {\n continue;\n }\n\n if (subscriber.initialized && Object.is(subscriber.lastValue, selected)) {\n continue;\n }\n\n subscriber.lastValue = selected;\n subscriber.initialized = true;\n\n try {\n subscriber.listener(selected);\n } catch {\n // Listener failures are isolated from runtime semantics.\n }\n }\n }\n\n return {\n schema,\n MEL,\n createIntent,\n subscribe,\n on,\n getSnapshot,\n getAvailableActions,\n getActionMetadata,\n isActionAvailable,\n dispose,\n isDisposed: () => disposed,\n getCanonicalSnapshot,\n getVisibleCoreSnapshot: () => structuredClone(visibleCanonicalSnapshot),\n setVisibleSnapshot,\n restoreVisibleSnapshot,\n emitEvent,\n enqueue,\n ensureIntentId,\n executeHost,\n rejectUnavailable,\n };\n}\n\nexport function createBaseRuntimeInstance<T extends ManifestoDomainShape>(\n kernel: RuntimeKernel<T>,\n): ManifestoBaseInstance<T> {\n async function processIntent(intent: TypedIntent<T>): Promise<Snapshot<T[\"state\"]>> {\n if (kernel.isDisposed()) {\n throw new DisposedError();\n }\n\n if (!kernel.isActionAvailable(intent.type as keyof T[\"actions\"])) {\n return kernel.rejectUnavailable(intent);\n }\n\n let result: HostResult;\n try {\n result = await kernel.executeHost(intent);\n } catch (error) {\n const failure = toError(error);\n kernel.emitEvent(\"dispatch:failed\", {\n intentId: intent.intentId ?? \"\",\n intent,\n error: failure,\n });\n throw failure;\n }\n\n if (result.status === \"error\") {\n const publishedSnapshot = kernel.setVisibleSnapshot(result.snapshot);\n const failure = result.error ?? new ManifestoError(\"HOST_ERROR\", \"Host dispatch failed\");\n kernel.emitEvent(\"dispatch:failed\", {\n intentId: intent.intentId ?? \"\",\n intent,\n error: failure,\n snapshot: publishedSnapshot,\n });\n throw failure;\n }\n\n const publishedSnapshot = kernel.setVisibleSnapshot(result.snapshot);\n kernel.emitEvent(\"dispatch:completed\", {\n intentId: intent.intentId ?? \"\",\n intent,\n snapshot: publishedSnapshot,\n });\n return publishedSnapshot;\n }\n\n function dispatchAsync(intent: TypedIntent<T>): Promise<Snapshot<T[\"state\"]>> {\n if (kernel.isDisposed()) {\n return Promise.reject(new DisposedError());\n }\n\n const enrichedIntent = kernel.ensureIntentId(intent);\n return kernel.enqueue(() => processIntent(enrichedIntent));\n }\n\n return {\n createIntent: kernel.createIntent,\n dispatchAsync,\n subscribe: kernel.subscribe,\n on: kernel.on,\n getSnapshot: kernel.getSnapshot,\n getCanonicalSnapshot: kernel.getCanonicalSnapshot,\n getAvailableActions: kernel.getAvailableActions,\n getActionMetadata: kernel.getActionMetadata,\n isActionAvailable: kernel.isActionAvailable,\n MEL: kernel.MEL,\n schema: kernel.schema,\n dispose: kernel.dispose,\n };\n}\n\nfunction toError(error: unknown): Error {\n return error instanceof Error\n ? error\n : new Error(String(error));\n}\n\nfunction generateUUID(): string {\n if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\") {\n return crypto.randomUUID();\n }\n\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (char) => {\n const random = (Math.random() * 16) | 0;\n const value = char === \"x\" ? random : (random & 0x3) | 0x8;\n return value.toString(16);\n });\n}\n","import {\n type DomainSchema,\n type Snapshot as CoreSnapshot,\n} from \"@manifesto-ai/core\";\n\nexport type CanonicalPlatformNamespaces = {\n $host?: Record<string, unknown>;\n $mel?: Record<string, unknown>;\n [k: `$${string}`]: unknown;\n};\n\nexport type Snapshot<T = unknown> = {\n data: T;\n computed: Record<string, unknown>;\n system: Pick<CoreSnapshot[\"system\"], \"status\" | \"lastError\">;\n meta: Pick<CoreSnapshot[\"meta\"], \"schemaHash\">;\n};\n\nexport type CanonicalSnapshot<T = unknown> =\n Omit<CoreSnapshot, \"data\"> & {\n data: T & CanonicalPlatformNamespaces;\n };\n\nexport type SnapshotProjectionPlan = {\n visibleComputedKeys: readonly string[];\n};\n\nconst COLLECTION_CONTEXT_ROOTS = new Set([\"$item\", \"$index\", \"$array\"]);\n\nexport function buildSnapshotProjectionPlan(\n schema: DomainSchema,\n): SnapshotProjectionPlan {\n const computedFields = schema.computed.fields;\n const memo = new Map<string, boolean>();\n\n function isVisibleComputed(\n name: string,\n visiting: Set<string>,\n ): boolean {\n const cached = memo.get(name);\n if (cached !== undefined) {\n return cached;\n }\n\n if (visiting.has(name)) {\n return false;\n }\n\n visiting.add(name);\n\n const field = computedFields[name];\n if (!field) {\n visiting.delete(name);\n memo.set(name, true);\n return true;\n }\n\n for (const path of collectExprGetPaths(field.expr)) {\n if (isPlatformDependency(path)) {\n visiting.delete(name);\n memo.set(name, false);\n return false;\n }\n\n const computedDependency = resolveComputedDependency(path, computedFields);\n if (\n computedDependency !== null\n && !isVisibleComputed(computedDependency, visiting)\n ) {\n visiting.delete(name);\n memo.set(name, false);\n return false;\n }\n }\n\n visiting.delete(name);\n memo.set(name, true);\n return true;\n }\n\n const visibleComputedKeys = Object.keys(computedFields)\n .filter((name) => isVisibleComputed(name, new Set()));\n\n return {\n visibleComputedKeys,\n };\n}\n\nexport function projectCanonicalSnapshot<T = unknown>(\n snapshot: CoreSnapshot,\n plan: SnapshotProjectionPlan,\n): Snapshot<T> {\n return {\n data: projectData<T>(snapshot.data),\n computed: projectComputed(snapshot.computed, plan),\n system: {\n status: snapshot.system.status,\n lastError: snapshot.system.lastError,\n },\n meta: {\n schemaHash: snapshot.meta.schemaHash,\n },\n };\n}\n\nexport function projectEffectContextSnapshot<T = unknown>(\n snapshot: CoreSnapshot,\n plan: SnapshotProjectionPlan,\n): Snapshot<T> {\n return projectCanonicalSnapshot<T>(snapshot, plan);\n}\n\nexport function cloneAndDeepFreeze<T>(value: T): T {\n return deepFreeze(structuredClone(value));\n}\n\nexport function projectedSnapshotsEqual<T>(\n left: Snapshot<T>,\n right: Snapshot<T>,\n): boolean {\n return cycleSafeEqual(left, right);\n}\n\nfunction projectData<T>(data: unknown): T {\n if (data === null || data === undefined) {\n return data as T;\n }\n\n if (Array.isArray(data) || typeof data !== \"object\") {\n return structuredClone(data) as T;\n }\n\n const projected: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(data as Record<string, unknown>)) {\n if (!key.startsWith(\"$\")) {\n projected[key] = value;\n }\n }\n\n return structuredClone(projected) as T;\n}\n\nfunction projectComputed(\n computed: CoreSnapshot[\"computed\"],\n plan: SnapshotProjectionPlan,\n): Snapshot[\"computed\"] {\n const projected: Record<string, unknown> = {};\n\n for (const key of plan.visibleComputedKeys) {\n if (Object.prototype.hasOwnProperty.call(computed, key)) {\n projected[key] = computed[key];\n }\n }\n\n return structuredClone(projected);\n}\n\nfunction resolveComputedDependency(\n dep: string,\n computedFields: DomainSchema[\"computed\"][\"fields\"],\n): string | null {\n if (Object.prototype.hasOwnProperty.call(computedFields, dep)) {\n return dep;\n }\n\n if (!dep.startsWith(\"computed.\")) {\n return null;\n }\n\n const candidate = dep.slice(\"computed.\".length);\n return Object.prototype.hasOwnProperty.call(computedFields, candidate)\n ? candidate\n : null;\n}\n\nfunction isPlatformDependency(dep: string): boolean {\n const normalized = dep.startsWith(\"data.\")\n ? dep.slice(\"data.\".length)\n : dep;\n const root = normalized.split(\".\")[0] ?? \"\";\n if (!root.startsWith(\"$\")) {\n return false;\n }\n\n return !COLLECTION_CONTEXT_ROOTS.has(root);\n}\n\nfunction collectExprGetPaths(expr: unknown): string[] {\n const paths: string[] = [];\n const seen = new WeakSet<object>();\n\n const visit = (node: unknown): void => {\n if (node === null || node === undefined) {\n return;\n }\n\n if (Array.isArray(node)) {\n node.forEach(visit);\n return;\n }\n\n if (typeof node !== \"object\") {\n return;\n }\n\n const objectNode = node as Record<string, unknown>;\n if (seen.has(objectNode)) {\n return;\n }\n seen.add(objectNode);\n\n if (objectNode.kind === \"lit\") {\n return;\n }\n\n if (objectNode.kind === \"get\" && typeof objectNode.path === \"string\") {\n paths.push(objectNode.path);\n return;\n }\n\n for (const value of Object.values(objectNode)) {\n visit(value);\n }\n };\n\n visit(expr);\n return paths;\n}\n\nfunction cycleSafeEqual(left: unknown, right: unknown): boolean {\n return cycleSafeEqualInternal(left, right, new WeakMap<object, WeakSet<object>>());\n}\n\nfunction cycleSafeEqualInternal(\n left: unknown,\n right: unknown,\n seen: WeakMap<object, WeakSet<object>>,\n): boolean {\n if (Object.is(left, right)) {\n return true;\n }\n\n if (typeof left !== typeof right) {\n return false;\n }\n\n if (left === null || right === null) {\n return left === right;\n }\n\n if (typeof left !== \"object\" || typeof right !== \"object\") {\n return false;\n }\n\n const leftObject = left as object;\n const rightObject = right as object;\n const leftTag = Object.prototype.toString.call(leftObject);\n const rightTag = Object.prototype.toString.call(rightObject);\n\n if (leftTag !== rightTag) {\n return false;\n }\n\n let seenRight = seen.get(leftObject);\n if (seenRight?.has(rightObject)) {\n return true;\n }\n\n if (!seenRight) {\n seenRight = new WeakSet<object>();\n seen.set(leftObject, seenRight);\n }\n seenRight.add(rightObject);\n\n if (Array.isArray(leftObject) && Array.isArray(rightObject)) {\n if (leftObject.length !== rightObject.length) {\n return false;\n }\n\n for (let index = 0; index < leftObject.length; index += 1) {\n const leftHasValue = Object.prototype.hasOwnProperty.call(leftObject, index);\n const rightHasValue = Object.prototype.hasOwnProperty.call(rightObject, index);\n\n if (leftHasValue !== rightHasValue) {\n return false;\n }\n\n if (\n leftHasValue\n && !cycleSafeEqualInternal(leftObject[index], rightObject[index], seen)\n ) {\n return false;\n }\n }\n\n return true;\n }\n\n if (leftObject instanceof Date && rightObject instanceof Date) {\n return leftObject.getTime() === rightObject.getTime();\n }\n\n if (leftObject instanceof RegExp && rightObject instanceof RegExp) {\n return leftObject.source === rightObject.source\n && leftObject.flags === rightObject.flags;\n }\n\n if (ArrayBuffer.isView(leftObject) && ArrayBuffer.isView(rightObject)) {\n if (leftObject.constructor !== rightObject.constructor) {\n return false;\n }\n\n if (leftObject.byteLength !== rightObject.byteLength) {\n return false;\n }\n\n const leftBytes = new Uint8Array(\n leftObject.buffer,\n leftObject.byteOffset,\n leftObject.byteLength,\n );\n const rightBytes = new Uint8Array(\n rightObject.buffer,\n rightObject.byteOffset,\n rightObject.byteLength,\n );\n\n return leftBytes.every((value, index) => value === rightBytes[index]);\n }\n\n if (leftObject instanceof ArrayBuffer && rightObject instanceof ArrayBuffer) {\n if (leftObject.byteLength !== rightObject.byteLength) {\n return false;\n }\n\n const leftBytes = new Uint8Array(leftObject);\n const rightBytes = new Uint8Array(rightObject);\n return leftBytes.every((value, index) => value === rightBytes[index]);\n }\n\n if (leftObject instanceof Map && rightObject instanceof Map) {\n if (leftObject.size !== rightObject.size) {\n return false;\n }\n\n const leftEntries = Array.from(leftObject.entries());\n const rightEntries = Array.from(rightObject.entries());\n\n return leftEntries.every(([leftKey, leftValue], index) => {\n const rightEntry = rightEntries[index];\n if (!rightEntry) {\n return false;\n }\n\n const [rightKey, rightValue] = rightEntry;\n return cycleSafeEqualInternal(leftKey, rightKey, seen)\n && cycleSafeEqualInternal(leftValue, rightValue, seen);\n });\n }\n\n if (leftObject instanceof Set && rightObject instanceof Set) {\n if (leftObject.size !== rightObject.size) {\n return false;\n }\n\n const leftValues = Array.from(leftObject.values());\n const rightValues = Array.from(rightObject.values());\n\n return leftValues.every((value, index) =>\n cycleSafeEqualInternal(value, rightValues[index], seen));\n }\n\n const leftKeys = getComparableObjectKeys(leftObject);\n const rightKeys = getComparableObjectKeys(rightObject);\n\n if (leftKeys.length !== rightKeys.length) {\n return false;\n }\n\n for (let index = 0; index < leftKeys.length; index += 1) {\n const leftKey = leftKeys[index];\n const rightKey = rightKeys[index];\n if (leftKey !== rightKey) {\n return false;\n }\n\n const leftValue = (leftObject as Record<string, unknown>)[leftKey];\n const rightValue = (rightObject as Record<string, unknown>)[rightKey];\n if (!cycleSafeEqualInternal(leftValue, rightValue, seen)) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction getComparableObjectKeys(value: object): string[] {\n return Object.keys(value as Record<string, unknown>)\n .filter((key) => (value as Record<string, unknown>)[key] !== undefined)\n .sort();\n}\n\nfunction deepFreeze<T>(value: T, seen = new WeakSet<object>()): T {\n if (value === null || value === undefined || typeof value !== \"object\") {\n return value;\n }\n\n if (isBinaryValue(value)) {\n return cloneBinaryValue(value) as T;\n }\n\n const objectValue = value as Record<PropertyKey, unknown>;\n\n if (seen.has(objectValue)) {\n return value;\n }\n\n if (Object.isFrozen(value)) {\n return value;\n }\n\n seen.add(objectValue);\n\n for (const key of Reflect.ownKeys(objectValue)) {\n const child = objectValue[key];\n if (isBinaryValue(child)) {\n defineReadOnlyBinaryProperty(objectValue, key, child);\n continue;\n }\n deepFreeze(child, seen);\n }\n\n return Object.freeze(value);\n}\n\nfunction isBinaryValue(value: unknown): value is ArrayBuffer | ArrayBufferView {\n return value instanceof ArrayBuffer || ArrayBuffer.isView(value);\n}\n\nfunction cloneBinaryValue<T extends ArrayBuffer | ArrayBufferView>(value: T): T {\n return structuredClone(value);\n}\n\nfunction defineReadOnlyBinaryProperty(\n target: Record<PropertyKey, unknown>,\n key: PropertyKey,\n value: ArrayBuffer | ArrayBufferView,\n): void {\n const descriptor = Object.getOwnPropertyDescriptor(target, key);\n if (!descriptor || !(\"value\" in descriptor)) {\n return;\n }\n\n Object.defineProperty(target, key, {\n enumerable: descriptor.enumerable ?? true,\n configurable: false,\n get() {\n return cloneBinaryValue(value);\n },\n });\n}\n"],"mappings":"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","names":["publishedSnapshot"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
export type { SdkManifest } from "./manifest.js";
|
|
11
11
|
export { createManifesto } from "./create-manifesto.js";
|
|
12
|
-
export type { ActivatedInstance, ActionArgs, CreateIntentArgs, ActionObjectBindingArgs, TypedActionMetadata, TypedGetActionMetadata, BaseLaws, BaseComposableLaws, ComposableManifesto, ComputedRef, EffectContext, EffectHandler, FieldRef, GovernedComposableLaws, GovernanceLaws, LineageComposableLaws, LineageLaws, ManifestoBaseInstance, ManifestoDecoratedRuntimeByLaws, ManifestoDomainShape, ManifestoEvent, ManifestoEventMap, ManifestoEventPayload, ManifestoRuntimeByLaws, Selector, Snapshot, TypedActionRef, TypedCommitAsync, TypedCreateIntent, TypedDispatchAsync, TypedIntent, TypedMEL, TypedOn, TypedSubscribe, Unsubscribe, } from "./types.js";
|
|
12
|
+
export type { ActivatedInstance, ActionArgs, CreateIntentArgs, ActionObjectBindingArgs, TypedActionMetadata, TypedGetActionMetadata, BaseLaws, BaseComposableLaws, CanonicalPlatformNamespaces, CanonicalSnapshot, ComposableManifesto, ComputedRef, EffectContext, EffectHandler, FieldRef, GovernedComposableLaws, GovernanceLaws, LineageComposableLaws, LineageLaws, ManifestoBaseInstance, ManifestoDecoratedRuntimeByLaws, ManifestoDomainShape, ManifestoEvent, ManifestoEventMap, ManifestoEventPayload, ManifestoRuntimeByLaws, Selector, Snapshot, TypedActionRef, TypedCommitAsync, TypedCreateIntent, TypedDispatchAsync, TypedIntent, TypedMEL, TypedOn, TypedSubscribe, Unsubscribe, } from "./types.js";
|
|
13
13
|
export { AlreadyActivatedError, CompileError, DisposedError, ManifestoError, ReservedEffectError, } from "./errors.js";
|
|
14
14
|
export type { CompileDiagnostic } from "./errors.js";
|
|
15
15
|
export type { DomainSchema, Intent, Patch, Snapshot as CoreSnapshot, } from "@manifesto-ai/core";
|
package/dist/index.js
CHANGED
|
@@ -7,9 +7,12 @@ import {
|
|
|
7
7
|
ReservedEffectError,
|
|
8
8
|
activateComposable,
|
|
9
9
|
attachRuntimeKernelFactory,
|
|
10
|
+
buildSnapshotProjectionPlan,
|
|
11
|
+
cloneAndDeepFreeze,
|
|
10
12
|
createBaseRuntimeInstance,
|
|
11
|
-
createRuntimeKernel
|
|
12
|
-
|
|
13
|
+
createRuntimeKernel,
|
|
14
|
+
projectEffectContextSnapshot
|
|
15
|
+
} from "./chunk-2YBJP5JT.js";
|
|
13
16
|
|
|
14
17
|
// src/create-manifesto.ts
|
|
15
18
|
import {
|
|
@@ -43,7 +46,12 @@ function createManifesto(schemaInput, effects) {
|
|
|
43
46
|
return createBaseRuntimeInstance(
|
|
44
47
|
createRuntimeKernel({
|
|
45
48
|
schema: resolved.schema,
|
|
46
|
-
|
|
49
|
+
projectionPlan: resolved.projectionPlan,
|
|
50
|
+
host: createInternalHost(
|
|
51
|
+
resolved.schema,
|
|
52
|
+
resolved.projectionPlan,
|
|
53
|
+
effects
|
|
54
|
+
),
|
|
47
55
|
MEL: buildTypedMel(resolved.schema, resolved.actionParamMetadata),
|
|
48
56
|
createIntent: buildCreateIntent()
|
|
49
57
|
})
|
|
@@ -54,7 +62,8 @@ function createManifesto(schemaInput, effects) {
|
|
|
54
62
|
manifesto,
|
|
55
63
|
() => createRuntimeKernel({
|
|
56
64
|
schema: resolved.schema,
|
|
57
|
-
|
|
65
|
+
projectionPlan: resolved.projectionPlan,
|
|
66
|
+
host: createInternalHost(resolved.schema, resolved.projectionPlan, effects),
|
|
58
67
|
MEL: buildTypedMel(resolved.schema, resolved.actionParamMetadata),
|
|
59
68
|
createIntent: buildCreateIntent()
|
|
60
69
|
})
|
|
@@ -65,9 +74,11 @@ function resolveSchema(schema) {
|
|
|
65
74
|
schema,
|
|
66
75
|
actionParamMetadata: deriveActionParamMetadata(schema)
|
|
67
76
|
};
|
|
77
|
+
const normalizedSchema = withPlatformNamespaces(resolved.schema);
|
|
68
78
|
return {
|
|
69
|
-
schema:
|
|
70
|
-
actionParamMetadata: resolved.actionParamMetadata
|
|
79
|
+
schema: normalizedSchema,
|
|
80
|
+
actionParamMetadata: resolved.actionParamMetadata,
|
|
81
|
+
projectionPlan: buildSnapshotProjectionPlan(normalizedSchema)
|
|
71
82
|
};
|
|
72
83
|
}
|
|
73
84
|
function compileSchema(source) {
|
|
@@ -364,7 +375,7 @@ function packIntentInput(action, args) {
|
|
|
364
375
|
function isPlainObject(value) {
|
|
365
376
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
366
377
|
}
|
|
367
|
-
function createInternalHost(schema, effects) {
|
|
378
|
+
function createInternalHost(schema, projectionPlan, effects) {
|
|
368
379
|
const host = createHost(schema, {
|
|
369
380
|
initialData: extractDefaults(schema.state)
|
|
370
381
|
});
|
|
@@ -374,7 +385,11 @@ function createInternalHost(schema, effects) {
|
|
|
374
385
|
});
|
|
375
386
|
for (const [effectType, appHandler] of Object.entries(effects)) {
|
|
376
387
|
const hostHandler = async (_type, params, ctx) => {
|
|
377
|
-
const patches = await appHandler(params, {
|
|
388
|
+
const patches = await appHandler(params, {
|
|
389
|
+
snapshot: cloneAndDeepFreeze(
|
|
390
|
+
projectEffectContextSnapshot(ctx.snapshot, projectionPlan)
|
|
391
|
+
)
|
|
392
|
+
});
|
|
378
393
|
return patches;
|
|
379
394
|
};
|
|
380
395
|
host.registerEffect(effectType, hostHandler);
|
|
@@ -465,9 +480,6 @@ function resolvePathValue(path, snapshot) {
|
|
|
465
480
|
}
|
|
466
481
|
return { value: current, found: current !== void 0 };
|
|
467
482
|
}
|
|
468
|
-
function freezeSnapshot(snapshot) {
|
|
469
|
-
return Object.freeze(structuredClone(snapshot));
|
|
470
|
-
}
|
|
471
483
|
function generateUUID() {
|
|
472
484
|
if (typeof crypto !== "undefined" && typeof crypto.randomUUID === "function") {
|
|
473
485
|
return crypto.randomUUID();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/create-manifesto.ts","../src/index.ts"],"sourcesContent":["import {\n type EffectContext as HostEffectContext,\n type EffectHandler as HostEffectHandler,\n type ManifestoHost,\n createHost,\n} from \"@manifesto-ai/host\";\nimport {\n createIntent as createCoreIntent,\n extractDefaults,\n hashSchemaSync,\n semanticPathToPatchPath,\n type DomainSchema,\n type Intent,\n type Patch,\n} from \"@manifesto-ai/core\";\nimport {\n compileMelDomain,\n parse as parseMel,\n tokenize as tokenizeMel,\n} from \"@manifesto-ai/compiler\";\n\nimport {\n ACTION_PARAM_NAMES,\n activateComposable,\n attachRuntimeKernelFactory,\n createBaseRuntimeInstance,\n createRuntimeKernel,\n} from \"./internal.js\";\nimport {\n type CreateIntentArgs,\n type BaseComposableLaws,\n type ComposableManifesto,\n type EffectHandler,\n type ManifestoDomainShape,\n type Snapshot,\n type TypedActionRef,\n type TypedCreateIntent,\n type TypedIntent,\n type TypedMEL,\n} from \"./types.js\";\nimport {\n CompileError,\n ManifestoError,\n ReservedEffectError,\n} from \"./errors.js\";\n\nconst RESERVED_EFFECT_TYPE = \"system.get\";\nconst RESERVED_NAMESPACE_PREFIX = \"system.\";\nconst BASE_LAWS: BaseComposableLaws = Object.freeze({ __baseLaws: true });\n\ntype RuntimeActionRef = TypedActionRef<ManifestoDomainShape> & {\n readonly [ACTION_PARAM_NAMES]: readonly string[] | null;\n};\n\ntype ActionParamMetadata = readonly string[] | null;\n\ntype ResolvedSchema = {\n readonly schema: DomainSchema;\n readonly actionParamMetadata: Readonly<Record<string, ActionParamMetadata>>;\n};\n\nexport function createManifesto<T extends ManifestoDomainShape>(\n schemaInput: DomainSchema | string,\n effects: Record<string, EffectHandler>,\n): ComposableManifesto<T, BaseComposableLaws> {\n if (RESERVED_EFFECT_TYPE in effects) {\n throw new ReservedEffectError(RESERVED_EFFECT_TYPE);\n }\n\n const resolved = resolveSchema(schemaInput);\n validateReservedNamespaces(resolved.schema);\n\n const manifesto = {\n _laws: BASE_LAWS,\n schema: resolved.schema,\n activate() {\n activateComposable(manifesto);\n return createBaseRuntimeInstance(\n createRuntimeKernel<T>({\n schema: resolved.schema,\n host: createInternalHost(resolved.schema, effects),\n MEL: buildTypedMel<T>(resolved.schema, resolved.actionParamMetadata),\n createIntent: buildCreateIntent<T>(),\n }),\n );\n },\n };\n\n return attachRuntimeKernelFactory(manifesto, () =>\n createRuntimeKernel<T>({\n schema: resolved.schema,\n host: createInternalHost(resolved.schema, effects),\n MEL: buildTypedMel<T>(resolved.schema, resolved.actionParamMetadata),\n createIntent: buildCreateIntent<T>(),\n }),\n );\n}\n\nfunction resolveSchema(schema: DomainSchema | string): ResolvedSchema {\n const resolved = typeof schema === \"string\"\n ? compileSchema(schema)\n : {\n schema,\n actionParamMetadata: deriveActionParamMetadata(schema),\n };\n\n return {\n schema: withPlatformNamespaces(resolved.schema),\n actionParamMetadata: resolved.actionParamMetadata,\n };\n}\n\nfunction compileSchema(source: string): ResolvedSchema {\n const result = compileMelDomain(source, { mode: \"domain\" });\n\n if (result.errors.length > 0) {\n const formatted = result.errors.map((diagnostic) => {\n const loc = diagnostic.location;\n if (!loc || (loc.start.line === 0 && loc.start.column === 0)) {\n return `[${diagnostic.code}] ${diagnostic.message}`;\n }\n\n const header = `[${diagnostic.code}] ${diagnostic.message} (${loc.start.line}:${loc.start.column})`;\n const line = source.split(\"\\n\")[loc.start.line - 1];\n if (!line) {\n return header;\n }\n\n const lineNum = String(loc.start.line).padStart(4, \" \");\n const underlineLen = Math.max(\n 1,\n loc.end.line === loc.start.line\n ? Math.min(loc.end.column - loc.start.column, Math.max(1, line.length - loc.start.column + 1))\n : 1,\n );\n const padding = \" \".repeat(lineNum.length + 3 + loc.start.column - 1);\n return `${header}\\n${lineNum} | ${line}\\n${padding}${\"^\".repeat(underlineLen)}`;\n }).join(\"\\n\\n\");\n\n throw new CompileError(result.errors, `MEL compilation failed:\\n${formatted}`);\n }\n\n if (!result.schema) {\n throw new ManifestoError(\"COMPILE_ERROR\", \"MEL compilation produced no schema\");\n }\n\n const schema = result.schema as DomainSchema;\n return {\n schema,\n actionParamMetadata: deriveActionParamMetadata(\n schema,\n extractActionParamOrderFromMel(source),\n ),\n };\n}\n\nfunction withPlatformNamespaces(schema: DomainSchema): DomainSchema {\n const fields = { ...schema.state.fields };\n let changed = false;\n\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(\"SCHEMA_ERROR\", \"Reserved namespace '$host' must be an object field\");\n } else if (fields.$host.default === undefined) {\n fields.$host = { ...fields.$host, default: {} };\n changed = true;\n }\n\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(\"SCHEMA_ERROR\", \"Reserved namespace '$mel' must be an object field\");\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(\"SCHEMA_ERROR\", \"Reserved namespace '$mel.guards' must be an object field\");\n } else {\n let nextGuards = guardsField;\n if (nextGuards.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(\"SCHEMA_ERROR\", \"Reserved namespace '$mel.guards.intent' must be an object field\");\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 }\n }\n\n if (!changed) {\n return schema;\n }\n\n const nextSchema = {\n ...schema,\n state: {\n ...schema.state,\n fields,\n },\n };\n\n const { hash: _hash, ...schemaWithoutHash } = nextSchema;\n return {\n ...nextSchema,\n hash: hashSchemaSync(schemaWithoutHash),\n };\n}\n\nfunction validateReservedNamespaces(schema: DomainSchema): void {\n for (const actionType of Object.keys(schema.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\nfunction buildTypedMel<T extends ManifestoDomainShape>(\n schema: DomainSchema,\n actionParamMetadata: Readonly<Record<string, ActionParamMetadata>>,\n): TypedMEL<T> {\n const actions = Object.fromEntries(\n Object.keys(schema.actions).map((name) => {\n const ref: Record<PropertyKey, unknown> = {\n __kind: \"ActionRef\",\n name,\n };\n Object.defineProperty(ref, ACTION_PARAM_NAMES, {\n enumerable: false,\n configurable: false,\n writable: false,\n value: Object.hasOwn(actionParamMetadata, name)\n ? actionParamMetadata[name]\n : [],\n });\n return [name, Object.freeze(ref)];\n }),\n );\n\n const state = Object.fromEntries(\n Object.keys(schema.state.fields)\n .filter((name) => !name.startsWith(\"$\"))\n .map((name) => [name, Object.freeze({\n __kind: \"FieldRef\",\n path: name,\n })]),\n );\n\n const computed = Object.fromEntries(\n Object.keys(schema.computed.fields)\n .map((name) => [name, Object.freeze({\n __kind: \"ComputedRef\",\n path: name,\n })]),\n );\n\n return Object.freeze({\n actions: Object.freeze(actions),\n state: Object.freeze(state),\n computed: Object.freeze(computed),\n }) as unknown as TypedMEL<T>;\n}\n\nfunction buildCreateIntent<T extends ManifestoDomainShape>(): TypedCreateIntent<T> {\n return <K extends keyof T[\"actions\"]>(\n action: TypedActionRef<T, K>,\n ...args: CreateIntentArgs<T, K>\n ): TypedIntent<T, K> => {\n const actionRef = action as unknown as RuntimeActionRef;\n const intentId = generateUUID();\n const input = packIntentInput(actionRef, args);\n return createCoreIntent(\n String(action.name),\n input,\n intentId,\n ) as TypedIntent<T, K>;\n };\n}\n\nfunction getActionParamNames(input: DomainSchema[\"actions\"][string][\"input\"]): readonly string[] {\n if (!input || input.type !== \"object\" || !input.fields) {\n return [];\n }\n\n return Object.keys(input.fields);\n}\n\nfunction deriveActionParamMetadata(\n schema: DomainSchema,\n actionParamOrder?: Readonly<Record<string, readonly string[]>>,\n): Readonly<Record<string, ActionParamMetadata>> {\n return Object.freeze(Object.fromEntries(\n Object.entries(schema.actions).map(([name, action]) => {\n const preferredOrder = actionParamOrder?.[name];\n if (preferredOrder && preferredOrder.length > 0) {\n return [name, Object.freeze([...preferredOrder])];\n }\n\n if (!action.input || action.input.type !== \"object\" || !action.input.fields) {\n return [name, []];\n }\n\n const fieldNames = getActionParamNames(action.input);\n return [name, fieldNames.length <= 1 ? fieldNames : null];\n }),\n ));\n}\n\nfunction extractActionParamOrderFromMel(\n source: string,\n): Readonly<Record<string, readonly string[]>> | undefined {\n const lexed = tokenizeMel(source);\n if (lexed.diagnostics.some((diagnostic) => diagnostic.severity === \"error\")) {\n return undefined;\n }\n\n const parsed = parseMel(lexed.tokens);\n if (!parsed.program) {\n return undefined;\n }\n\n return Object.freeze(Object.fromEntries(\n parsed.program.domain.members\n .filter((member) => member.kind === \"action\")\n .map((action) => [action.name, Object.freeze(action.params.map((param) => param.name))]),\n ));\n}\n\nfunction packIntentInput(action: RuntimeActionRef, args: readonly unknown[]): unknown {\n const paramNames = Object.hasOwn(action, ACTION_PARAM_NAMES)\n ? action[ACTION_PARAM_NAMES]\n : [];\n if (args.length === 0) {\n return undefined;\n }\n\n if (paramNames === null) {\n if (args.length === 1 && isPlainObject(args[0])) {\n return args[0];\n }\n\n throw new ManifestoError(\n \"INVALID_INTENT_ARGS\",\n `Action \"${String(action.name)}\" requires a single object argument because positional parameter metadata is unavailable`,\n );\n }\n\n if (paramNames.length === 0) {\n if (args.length === 1) {\n return args[0];\n }\n\n throw new ManifestoError(\n \"INVALID_INTENT_ARGS\",\n `Action \"${String(action.name)}\" does not accept multiple positional arguments`,\n );\n }\n\n if (args.length === 1 && isPlainObject(args[0]) && paramNames.length > 1) {\n return args[0];\n }\n\n return Object.fromEntries(args.map((value, index) => [\n paramNames[index] ?? `arg${index}`,\n value,\n ]));\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction createInternalHost(\n schema: DomainSchema,\n effects: Record<string, EffectHandler>,\n): ManifestoHost {\n const host = createHost(schema, {\n initialData: extractDefaults(schema.state),\n });\n\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 as Snapshot);\n return patches;\n });\n\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 patches = await appHandler(params, { snapshot: freezeSnapshot(ctx.snapshot) });\n return patches as Patch[];\n };\n\n host.registerEffect(effectType, hostHandler);\n }\n\n return host;\n}\n\ninterface SystemGetReadParams {\n path: string;\n target?: string;\n}\n\ninterface SystemGetGenerateParams {\n key: string;\n into: string;\n}\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 executeSystemGet(\n params: unknown,\n snapshot: Snapshot,\n): { patches: Patch[] } {\n if (isGenerateParams(params)) {\n return {\n patches: [{\n op: \"set\",\n path: normalizeTargetPath(params.into),\n value: generateSystemValue(params.key),\n }],\n };\n }\n\n const { path, target } = params as SystemGetReadParams;\n const result = resolvePathValue(path, snapshot);\n if (!target) {\n return { patches: [] };\n }\n\n return {\n patches: [{\n op: \"set\",\n path: normalizeTargetPath(target),\n value: result.value,\n }],\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 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 normalizePath(path: string): string {\n if (path.startsWith(\"/\")) {\n return path.slice(1).replace(/\\//g, \".\");\n }\n return path;\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 if (parts.length === 0) {\n return { value: undefined, found: false };\n }\n\n const [root, ...rest] = parts;\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 break;\n }\n\n for (const part of rest) {\n if (current === null || current === undefined || 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\nfunction freezeSnapshot<TData = unknown>(snapshot: Snapshot<TData>): Snapshot<TData> {\n return Object.freeze(structuredClone(snapshot)) as Snapshot<TData>;\n}\n\nfunction generateUUID(): string {\n if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\") {\n return crypto.randomUUID();\n }\n\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (char) => {\n const random = (Math.random() * 16) | 0;\n const value = char === \"x\" ? random : (random & 0x3) | 0x8;\n return value.toString(16);\n });\n}\n","/**\n * @manifesto-ai/sdk v3.0.0\n *\n * SDK hard cut around the activation boundary.\n *\n * @see sdk-SPEC.md\n * @see ADR-017\n * @packageDocumentation\n */\n\nexport type { SdkManifest } from \"./manifest.js\";\n\nexport { createManifesto } from \"./create-manifesto.js\";\n\nexport type {\n ActivatedInstance,\n ActionArgs,\n CreateIntentArgs,\n ActionObjectBindingArgs,\n TypedActionMetadata,\n TypedGetActionMetadata,\n BaseLaws,\n BaseComposableLaws,\n ComposableManifesto,\n ComputedRef,\n EffectContext,\n EffectHandler,\n FieldRef,\n GovernedComposableLaws,\n GovernanceLaws,\n LineageComposableLaws,\n LineageLaws,\n ManifestoBaseInstance,\n ManifestoDecoratedRuntimeByLaws,\n ManifestoDomainShape,\n ManifestoEvent,\n ManifestoEventMap,\n ManifestoEventPayload,\n ManifestoRuntimeByLaws,\n Selector,\n Snapshot,\n TypedActionRef,\n TypedCommitAsync,\n TypedCreateIntent,\n TypedDispatchAsync,\n TypedIntent,\n TypedMEL,\n TypedOn,\n TypedSubscribe,\n Unsubscribe,\n} from \"./types.js\";\n\nexport {\n AlreadyActivatedError,\n CompileError,\n DisposedError,\n ManifestoError,\n ReservedEffectError,\n} from \"./errors.js\";\n\nexport type { CompileDiagnostic } from \"./errors.js\";\n\nexport type {\n DomainSchema,\n Intent,\n Patch,\n Snapshot as CoreSnapshot,\n} from \"@manifesto-ai/core\";\n\nexport { createSnapshot } from \"@manifesto-ai/core\";\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/create-manifesto.ts","../src/index.ts"],"sourcesContent":["import {\n type EffectContext as HostEffectContext,\n type EffectHandler as HostEffectHandler,\n type ManifestoHost,\n createHost,\n} from \"@manifesto-ai/host\";\nimport {\n createIntent as createCoreIntent,\n extractDefaults,\n hashSchemaSync,\n semanticPathToPatchPath,\n type DomainSchema,\n type Intent,\n type Patch,\n type Snapshot as CoreSnapshot,\n} from \"@manifesto-ai/core\";\nimport {\n compileMelDomain,\n parse as parseMel,\n tokenize as tokenizeMel,\n} from \"@manifesto-ai/compiler\";\n\nimport {\n ACTION_PARAM_NAMES,\n activateComposable,\n attachRuntimeKernelFactory,\n createBaseRuntimeInstance,\n createRuntimeKernel,\n} from \"./internal.js\";\nimport {\n type CreateIntentArgs,\n type BaseComposableLaws,\n type ComposableManifesto,\n type EffectHandler,\n type ManifestoDomainShape,\n type TypedActionRef,\n type TypedCreateIntent,\n type TypedIntent,\n type TypedMEL,\n} from \"./types.js\";\nimport {\n buildSnapshotProjectionPlan,\n cloneAndDeepFreeze,\n projectEffectContextSnapshot,\n type SnapshotProjectionPlan,\n} from \"./snapshot-projection.js\";\nimport {\n CompileError,\n ManifestoError,\n ReservedEffectError,\n} from \"./errors.js\";\n\nconst RESERVED_EFFECT_TYPE = \"system.get\";\nconst RESERVED_NAMESPACE_PREFIX = \"system.\";\nconst BASE_LAWS: BaseComposableLaws = Object.freeze({ __baseLaws: true });\n\ntype RuntimeActionRef = TypedActionRef<ManifestoDomainShape> & {\n readonly [ACTION_PARAM_NAMES]: readonly string[] | null;\n};\n\ntype ActionParamMetadata = readonly string[] | null;\n\ntype ResolvedSchema = {\n readonly schema: DomainSchema;\n readonly actionParamMetadata: Readonly<Record<string, ActionParamMetadata>>;\n readonly projectionPlan: SnapshotProjectionPlan;\n};\n\ntype CompiledSchema = Omit<ResolvedSchema, \"projectionPlan\">;\n\nexport function createManifesto<T extends ManifestoDomainShape>(\n schemaInput: DomainSchema | string,\n effects: Record<string, EffectHandler>,\n): ComposableManifesto<T, BaseComposableLaws> {\n if (RESERVED_EFFECT_TYPE in effects) {\n throw new ReservedEffectError(RESERVED_EFFECT_TYPE);\n }\n\n const resolved = resolveSchema(schemaInput);\n validateReservedNamespaces(resolved.schema);\n\n const manifesto = {\n _laws: BASE_LAWS,\n schema: resolved.schema,\n activate() {\n activateComposable(manifesto);\n return createBaseRuntimeInstance(\n createRuntimeKernel<T>({\n schema: resolved.schema,\n projectionPlan: resolved.projectionPlan,\n host: createInternalHost(\n resolved.schema,\n resolved.projectionPlan,\n effects,\n ),\n MEL: buildTypedMel<T>(resolved.schema, resolved.actionParamMetadata),\n createIntent: buildCreateIntent<T>(),\n }),\n );\n },\n };\n\n return attachRuntimeKernelFactory(manifesto, () =>\n createRuntimeKernel<T>({\n schema: resolved.schema,\n projectionPlan: resolved.projectionPlan,\n host: createInternalHost(resolved.schema, resolved.projectionPlan, effects),\n MEL: buildTypedMel<T>(resolved.schema, resolved.actionParamMetadata),\n createIntent: buildCreateIntent<T>(),\n }),\n );\n}\n\nfunction resolveSchema(schema: DomainSchema | string): ResolvedSchema {\n const resolved: CompiledSchema = typeof schema === \"string\"\n ? compileSchema(schema)\n : {\n schema,\n actionParamMetadata: deriveActionParamMetadata(schema),\n };\n\n const normalizedSchema = withPlatformNamespaces(resolved.schema);\n return {\n schema: normalizedSchema,\n actionParamMetadata: resolved.actionParamMetadata,\n projectionPlan: buildSnapshotProjectionPlan(normalizedSchema),\n };\n}\n\nfunction compileSchema(source: string): CompiledSchema {\n const result = compileMelDomain(source, { mode: \"domain\" });\n\n if (result.errors.length > 0) {\n const formatted = result.errors.map((diagnostic) => {\n const loc = diagnostic.location;\n if (!loc || (loc.start.line === 0 && loc.start.column === 0)) {\n return `[${diagnostic.code}] ${diagnostic.message}`;\n }\n\n const header = `[${diagnostic.code}] ${diagnostic.message} (${loc.start.line}:${loc.start.column})`;\n const line = source.split(\"\\n\")[loc.start.line - 1];\n if (!line) {\n return header;\n }\n\n const lineNum = String(loc.start.line).padStart(4, \" \");\n const underlineLen = Math.max(\n 1,\n loc.end.line === loc.start.line\n ? Math.min(loc.end.column - loc.start.column, Math.max(1, line.length - loc.start.column + 1))\n : 1,\n );\n const padding = \" \".repeat(lineNum.length + 3 + loc.start.column - 1);\n return `${header}\\n${lineNum} | ${line}\\n${padding}${\"^\".repeat(underlineLen)}`;\n }).join(\"\\n\\n\");\n\n throw new CompileError(result.errors, `MEL compilation failed:\\n${formatted}`);\n }\n\n if (!result.schema) {\n throw new ManifestoError(\"COMPILE_ERROR\", \"MEL compilation produced no schema\");\n }\n\n const schema = result.schema as DomainSchema;\n return {\n schema,\n actionParamMetadata: deriveActionParamMetadata(\n schema,\n extractActionParamOrderFromMel(source),\n ),\n };\n}\n\nfunction withPlatformNamespaces(schema: DomainSchema): DomainSchema {\n const fields = { ...schema.state.fields };\n let changed = false;\n\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(\"SCHEMA_ERROR\", \"Reserved namespace '$host' must be an object field\");\n } else if (fields.$host.default === undefined) {\n fields.$host = { ...fields.$host, default: {} };\n changed = true;\n }\n\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(\"SCHEMA_ERROR\", \"Reserved namespace '$mel' must be an object field\");\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(\"SCHEMA_ERROR\", \"Reserved namespace '$mel.guards' must be an object field\");\n } else {\n let nextGuards = guardsField;\n if (nextGuards.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(\"SCHEMA_ERROR\", \"Reserved namespace '$mel.guards.intent' must be an object field\");\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 }\n }\n\n if (!changed) {\n return schema;\n }\n\n const nextSchema = {\n ...schema,\n state: {\n ...schema.state,\n fields,\n },\n };\n\n const { hash: _hash, ...schemaWithoutHash } = nextSchema;\n return {\n ...nextSchema,\n hash: hashSchemaSync(schemaWithoutHash),\n };\n}\n\nfunction validateReservedNamespaces(schema: DomainSchema): void {\n for (const actionType of Object.keys(schema.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\nfunction buildTypedMel<T extends ManifestoDomainShape>(\n schema: DomainSchema,\n actionParamMetadata: Readonly<Record<string, ActionParamMetadata>>,\n): TypedMEL<T> {\n const actions = Object.fromEntries(\n Object.keys(schema.actions).map((name) => {\n const ref: Record<PropertyKey, unknown> = {\n __kind: \"ActionRef\",\n name,\n };\n Object.defineProperty(ref, ACTION_PARAM_NAMES, {\n enumerable: false,\n configurable: false,\n writable: false,\n value: Object.hasOwn(actionParamMetadata, name)\n ? actionParamMetadata[name]\n : [],\n });\n return [name, Object.freeze(ref)];\n }),\n );\n\n const state = Object.fromEntries(\n Object.keys(schema.state.fields)\n .filter((name) => !name.startsWith(\"$\"))\n .map((name) => [name, Object.freeze({\n __kind: \"FieldRef\",\n path: name,\n })]),\n );\n\n const computed = Object.fromEntries(\n Object.keys(schema.computed.fields)\n .map((name) => [name, Object.freeze({\n __kind: \"ComputedRef\",\n path: name,\n })]),\n );\n\n return Object.freeze({\n actions: Object.freeze(actions),\n state: Object.freeze(state),\n computed: Object.freeze(computed),\n }) as unknown as TypedMEL<T>;\n}\n\nfunction buildCreateIntent<T extends ManifestoDomainShape>(): TypedCreateIntent<T> {\n return <K extends keyof T[\"actions\"]>(\n action: TypedActionRef<T, K>,\n ...args: CreateIntentArgs<T, K>\n ): TypedIntent<T, K> => {\n const actionRef = action as unknown as RuntimeActionRef;\n const intentId = generateUUID();\n const input = packIntentInput(actionRef, args);\n return createCoreIntent(\n String(action.name),\n input,\n intentId,\n ) as TypedIntent<T, K>;\n };\n}\n\nfunction getActionParamNames(input: DomainSchema[\"actions\"][string][\"input\"]): readonly string[] {\n if (!input || input.type !== \"object\" || !input.fields) {\n return [];\n }\n\n return Object.keys(input.fields);\n}\n\nfunction deriveActionParamMetadata(\n schema: DomainSchema,\n actionParamOrder?: Readonly<Record<string, readonly string[]>>,\n): Readonly<Record<string, ActionParamMetadata>> {\n return Object.freeze(Object.fromEntries(\n Object.entries(schema.actions).map(([name, action]) => {\n const preferredOrder = actionParamOrder?.[name];\n if (preferredOrder && preferredOrder.length > 0) {\n return [name, Object.freeze([...preferredOrder])];\n }\n\n if (!action.input || action.input.type !== \"object\" || !action.input.fields) {\n return [name, []];\n }\n\n const fieldNames = getActionParamNames(action.input);\n return [name, fieldNames.length <= 1 ? fieldNames : null];\n }),\n ));\n}\n\nfunction extractActionParamOrderFromMel(\n source: string,\n): Readonly<Record<string, readonly string[]>> | undefined {\n const lexed = tokenizeMel(source);\n if (lexed.diagnostics.some((diagnostic) => diagnostic.severity === \"error\")) {\n return undefined;\n }\n\n const parsed = parseMel(lexed.tokens);\n if (!parsed.program) {\n return undefined;\n }\n\n return Object.freeze(Object.fromEntries(\n parsed.program.domain.members\n .filter((member) => member.kind === \"action\")\n .map((action) => [action.name, Object.freeze(action.params.map((param) => param.name))]),\n ));\n}\n\nfunction packIntentInput(action: RuntimeActionRef, args: readonly unknown[]): unknown {\n const paramNames = Object.hasOwn(action, ACTION_PARAM_NAMES)\n ? action[ACTION_PARAM_NAMES]\n : [];\n if (args.length === 0) {\n return undefined;\n }\n\n if (paramNames === null) {\n if (args.length === 1 && isPlainObject(args[0])) {\n return args[0];\n }\n\n throw new ManifestoError(\n \"INVALID_INTENT_ARGS\",\n `Action \"${String(action.name)}\" requires a single object argument because positional parameter metadata is unavailable`,\n );\n }\n\n if (paramNames.length === 0) {\n if (args.length === 1) {\n return args[0];\n }\n\n throw new ManifestoError(\n \"INVALID_INTENT_ARGS\",\n `Action \"${String(action.name)}\" does not accept multiple positional arguments`,\n );\n }\n\n if (args.length === 1 && isPlainObject(args[0]) && paramNames.length > 1) {\n return args[0];\n }\n\n return Object.fromEntries(args.map((value, index) => [\n paramNames[index] ?? `arg${index}`,\n value,\n ]));\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction createInternalHost(\n schema: DomainSchema,\n projectionPlan: SnapshotProjectionPlan,\n effects: Record<string, EffectHandler>,\n): ManifestoHost {\n const host = createHost(schema, {\n initialData: extractDefaults(schema.state),\n });\n\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 as CoreSnapshot);\n return patches;\n });\n\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 patches = await appHandler(params, {\n snapshot: cloneAndDeepFreeze(\n projectEffectContextSnapshot(ctx.snapshot, projectionPlan),\n ),\n });\n return patches as Patch[];\n };\n\n host.registerEffect(effectType, hostHandler);\n }\n\n return host;\n}\n\ninterface SystemGetReadParams {\n path: string;\n target?: string;\n}\n\ninterface SystemGetGenerateParams {\n key: string;\n into: string;\n}\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 executeSystemGet(\n params: unknown,\n snapshot: CoreSnapshot,\n): { patches: Patch[] } {\n if (isGenerateParams(params)) {\n return {\n patches: [{\n op: \"set\",\n path: normalizeTargetPath(params.into),\n value: generateSystemValue(params.key),\n }],\n };\n }\n\n const { path, target } = params as SystemGetReadParams;\n const result = resolvePathValue(path, snapshot);\n if (!target) {\n return { patches: [] };\n }\n\n return {\n patches: [{\n op: \"set\",\n path: normalizeTargetPath(target),\n value: result.value,\n }],\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 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 normalizePath(path: string): string {\n if (path.startsWith(\"/\")) {\n return path.slice(1).replace(/\\//g, \".\");\n }\n return path;\n}\n\nfunction resolvePathValue(\n path: string,\n snapshot: CoreSnapshot,\n): { value: unknown; found: boolean } {\n const normalized = normalizePath(path);\n const parts = normalized.split(\".\");\n if (parts.length === 0) {\n return { value: undefined, found: false };\n }\n\n const [root, ...rest] = parts;\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 break;\n }\n\n for (const part of rest) {\n if (current === null || current === undefined || 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}\nfunction generateUUID(): string {\n if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\") {\n return crypto.randomUUID();\n }\n\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (char) => {\n const random = (Math.random() * 16) | 0;\n const value = char === \"x\" ? random : (random & 0x3) | 0x8;\n return value.toString(16);\n });\n}\n","/**\n * @manifesto-ai/sdk v3.0.0\n *\n * SDK hard cut around the activation boundary.\n *\n * @see sdk-SPEC.md\n * @see ADR-017\n * @packageDocumentation\n */\n\nexport type { SdkManifest } from \"./manifest.js\";\n\nexport { createManifesto } from \"./create-manifesto.js\";\n\nexport type {\n ActivatedInstance,\n ActionArgs,\n CreateIntentArgs,\n ActionObjectBindingArgs,\n TypedActionMetadata,\n TypedGetActionMetadata,\n BaseLaws,\n BaseComposableLaws,\n CanonicalPlatformNamespaces,\n CanonicalSnapshot,\n ComposableManifesto,\n ComputedRef,\n EffectContext,\n EffectHandler,\n FieldRef,\n GovernedComposableLaws,\n GovernanceLaws,\n LineageComposableLaws,\n LineageLaws,\n ManifestoBaseInstance,\n ManifestoDecoratedRuntimeByLaws,\n ManifestoDomainShape,\n ManifestoEvent,\n ManifestoEventMap,\n ManifestoEventPayload,\n ManifestoRuntimeByLaws,\n Selector,\n Snapshot,\n TypedActionRef,\n TypedCommitAsync,\n TypedCreateIntent,\n TypedDispatchAsync,\n TypedIntent,\n TypedMEL,\n TypedOn,\n TypedSubscribe,\n Unsubscribe,\n} from \"./types.js\";\n\nexport {\n AlreadyActivatedError,\n CompileError,\n DisposedError,\n ManifestoError,\n ReservedEffectError,\n} from \"./errors.js\";\n\nexport type { CompileDiagnostic } from \"./errors.js\";\n\nexport type {\n DomainSchema,\n Intent,\n Patch,\n Snapshot as CoreSnapshot,\n} from \"@manifesto-ai/core\";\n\nexport { createSnapshot } from \"@manifesto-ai/core\";\n"],"mappings":"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","names":[]}
|
package/dist/internal.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type DomainSchema, type Snapshot as CoreSnapshot } from "@manifesto-ai/core";
|
|
2
2
|
import type { HostResult, ManifestoHost } from "@manifesto-ai/host";
|
|
3
|
-
import type { BaseLaws, ComposableManifesto, ManifestoBaseInstance, ManifestoDomainShape, ManifestoEvent, ManifestoEventMap, Snapshot, TypedCreateIntent, TypedGetActionMetadata, TypedIntent, TypedMEL, TypedOn, TypedSubscribe } from "./types.js";
|
|
3
|
+
import type { BaseLaws, CanonicalSnapshot, ComposableManifesto, ManifestoBaseInstance, ManifestoDomainShape, ManifestoEvent, ManifestoEventMap, Snapshot, TypedCreateIntent, TypedGetActionMetadata, TypedIntent, TypedMEL, TypedOn, TypedSubscribe } from "./types.js";
|
|
4
|
+
import { type SnapshotProjectionPlan } from "./snapshot-projection.js";
|
|
4
5
|
export declare const ACTION_PARAM_NAMES: unique symbol;
|
|
5
6
|
export declare const RUNTIME_KERNEL_FACTORY: unique symbol;
|
|
6
7
|
export declare const ACTIVATION_STATE: unique symbol;
|
|
@@ -15,6 +16,7 @@ export interface RuntimeKernel<T extends ManifestoDomainShape> {
|
|
|
15
16
|
readonly subscribe: TypedSubscribe<T>;
|
|
16
17
|
readonly on: TypedOn<T>;
|
|
17
18
|
readonly getSnapshot: () => Snapshot<T["state"]>;
|
|
19
|
+
readonly getCanonicalSnapshot: () => CanonicalSnapshot<T["state"]>;
|
|
18
20
|
readonly getAvailableActions: () => readonly (keyof T["actions"])[];
|
|
19
21
|
readonly getActionMetadata: TypedGetActionMetadata<T>;
|
|
20
22
|
readonly isActionAvailable: (name: keyof T["actions"]) => boolean;
|
|
@@ -38,6 +40,7 @@ export type InternalComposableManifesto<T extends ManifestoDomainShape, Laws ext
|
|
|
38
40
|
};
|
|
39
41
|
type RuntimeKernelOptions<T extends ManifestoDomainShape> = {
|
|
40
42
|
readonly schema: DomainSchema;
|
|
43
|
+
readonly projectionPlan: SnapshotProjectionPlan;
|
|
41
44
|
readonly host: ManifestoHost;
|
|
42
45
|
readonly MEL: TypedMEL<T>;
|
|
43
46
|
readonly createIntent: TypedCreateIntent<T>;
|
|
@@ -47,6 +50,6 @@ export declare function getRuntimeKernelFactory<T extends ManifestoDomainShape,
|
|
|
47
50
|
export declare function getActivationState<T extends ManifestoDomainShape, Laws extends BaseLaws>(manifesto: ComposableManifesto<T, Laws>): ActivationState;
|
|
48
51
|
export declare function assertComposableNotActivated<T extends ManifestoDomainShape, Laws extends BaseLaws>(manifesto: ComposableManifesto<T, Laws>): void;
|
|
49
52
|
export declare function activateComposable<T extends ManifestoDomainShape, Laws extends BaseLaws>(manifesto: ComposableManifesto<T, Laws>): void;
|
|
50
|
-
export declare function createRuntimeKernel<T extends ManifestoDomainShape>({ schema, host, MEL, createIntent, }: RuntimeKernelOptions<T>): RuntimeKernel<T>;
|
|
53
|
+
export declare function createRuntimeKernel<T extends ManifestoDomainShape>({ schema, projectionPlan, host, MEL, createIntent, }: RuntimeKernelOptions<T>): RuntimeKernel<T>;
|
|
51
54
|
export declare function createBaseRuntimeInstance<T extends ManifestoDomainShape>(kernel: RuntimeKernel<T>): ManifestoBaseInstance<T>;
|
|
52
55
|
export {};
|
package/dist/provider.js
CHANGED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type DomainSchema, type Snapshot as CoreSnapshot } from "@manifesto-ai/core";
|
|
2
|
+
export type CanonicalPlatformNamespaces = {
|
|
3
|
+
$host?: Record<string, unknown>;
|
|
4
|
+
$mel?: Record<string, unknown>;
|
|
5
|
+
[k: `$${string}`]: unknown;
|
|
6
|
+
};
|
|
7
|
+
export type Snapshot<T = unknown> = {
|
|
8
|
+
data: T;
|
|
9
|
+
computed: Record<string, unknown>;
|
|
10
|
+
system: Pick<CoreSnapshot["system"], "status" | "lastError">;
|
|
11
|
+
meta: Pick<CoreSnapshot["meta"], "schemaHash">;
|
|
12
|
+
};
|
|
13
|
+
export type CanonicalSnapshot<T = unknown> = Omit<CoreSnapshot, "data"> & {
|
|
14
|
+
data: T & CanonicalPlatformNamespaces;
|
|
15
|
+
};
|
|
16
|
+
export type SnapshotProjectionPlan = {
|
|
17
|
+
visibleComputedKeys: readonly string[];
|
|
18
|
+
};
|
|
19
|
+
export declare function buildSnapshotProjectionPlan(schema: DomainSchema): SnapshotProjectionPlan;
|
|
20
|
+
export declare function projectCanonicalSnapshot<T = unknown>(snapshot: CoreSnapshot, plan: SnapshotProjectionPlan): Snapshot<T>;
|
|
21
|
+
export declare function projectEffectContextSnapshot<T = unknown>(snapshot: CoreSnapshot, plan: SnapshotProjectionPlan): Snapshot<T>;
|
|
22
|
+
export declare function cloneAndDeepFreeze<T>(value: T): T;
|
|
23
|
+
export declare function projectedSnapshotsEqual<T>(left: Snapshot<T>, right: Snapshot<T>): boolean;
|
package/dist/types.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { DomainSchema, Intent, Patch
|
|
1
|
+
import type { DomainSchema, Intent, Patch } from "@manifesto-ai/core";
|
|
2
|
+
import type { CanonicalPlatformNamespaces, CanonicalSnapshot, Snapshot } from "./snapshot-projection.js";
|
|
2
3
|
type ActionFn = {
|
|
3
4
|
bivarianceHack(...args: unknown[]): unknown;
|
|
4
5
|
}["bivarianceHack"];
|
|
@@ -24,9 +25,6 @@ export type LineageComposableLaws = BaseLaws & LineageLaws & {
|
|
|
24
25
|
readonly __governanceLaws?: never;
|
|
25
26
|
};
|
|
26
27
|
export type GovernedComposableLaws = BaseLaws & LineageLaws & GovernanceLaws;
|
|
27
|
-
export type Snapshot<T = unknown> = Omit<CoreSnapshot, "data"> & {
|
|
28
|
-
data: T;
|
|
29
|
-
};
|
|
30
28
|
export type EffectContext<T = unknown> = {
|
|
31
29
|
readonly snapshot: Readonly<Snapshot<T>>;
|
|
32
30
|
};
|
|
@@ -107,6 +105,7 @@ export type ManifestoBaseInstance<T extends ManifestoDomainShape> = {
|
|
|
107
105
|
readonly subscribe: TypedSubscribe<T>;
|
|
108
106
|
readonly on: TypedOn<T>;
|
|
109
107
|
readonly getSnapshot: () => Snapshot<T["state"]>;
|
|
108
|
+
readonly getCanonicalSnapshot: () => CanonicalSnapshot<T["state"]>;
|
|
110
109
|
readonly getAvailableActions: () => readonly (keyof T["actions"])[];
|
|
111
110
|
readonly getActionMetadata: TypedGetActionMetadata<T>;
|
|
112
111
|
readonly isActionAvailable: (name: keyof T["actions"]) => boolean;
|
|
@@ -125,9 +124,9 @@ export type ActivatedInstance<T extends ManifestoDomainShape, Laws> = Laws exten
|
|
|
125
124
|
} ? Runtime : never : Laws extends LineageLaws ? ResolvedManifestoRuntimeByLaws<T> extends {
|
|
126
125
|
readonly lineage: infer Runtime;
|
|
127
126
|
} ? Runtime : never : ManifestoRuntimeByLaws<T>["base"];
|
|
127
|
+
export type { CanonicalPlatformNamespaces, CanonicalSnapshot, Snapshot, };
|
|
128
128
|
export type ComposableManifesto<T extends ManifestoDomainShape, Laws extends BaseLaws = BaseComposableLaws> = {
|
|
129
129
|
readonly _laws: Laws;
|
|
130
130
|
readonly schema: DomainSchema;
|
|
131
131
|
activate(): ActivatedInstance<T, Laws>;
|
|
132
132
|
};
|
|
133
|
-
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@manifesto-ai/sdk",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.4.0",
|
|
4
4
|
"description": "Manifesto SDK - Activation-first public API for the base runtime",
|
|
5
5
|
"author": "eggplantiny <eggplantiny@gmail.com>",
|
|
6
6
|
"license": "MIT",
|
|
@@ -39,9 +39,9 @@
|
|
|
39
39
|
"dist"
|
|
40
40
|
],
|
|
41
41
|
"dependencies": {
|
|
42
|
-
"@manifesto-ai/compiler": "3.
|
|
43
|
-
"@manifesto-ai/core": "2.
|
|
44
|
-
"@manifesto-ai/host": "2.
|
|
42
|
+
"@manifesto-ai/compiler": "3.1.1",
|
|
43
|
+
"@manifesto-ai/core": "2.9.0",
|
|
44
|
+
"@manifesto-ai/host": "2.6.0"
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
47
|
"typescript": "^5.9.3",
|