@manifesto-ai/sdk 3.1.0 → 3.1.1

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 CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  `@manifesto-ai/sdk` is the default package for applications that start with `createManifesto()`.
6
6
 
7
- > **Current Contract Note:** The truthful current SDK contract is the ADR-017 activation model documented in [docs/sdk-SPEC-v3.0.0-draft.md](docs/sdk-SPEC-v3.0.0-draft.md). The filename still says `draft` because the wider ADR-017 landing across Lineage, Governance, and World is still in progress.
7
+ > **Current Contract Note:** The truthful current SDK contract is the ADR-017 activation model documented in [docs/sdk-SPEC-v3.0.0-draft.md](docs/sdk-SPEC-v3.0.0-draft.md). The filename still says `draft`, but the activation-first decorator runtime is the current landed contract.
8
8
 
9
9
  ## What This Package Owns
10
10
 
@@ -48,13 +48,25 @@ var AlreadyActivatedError = class extends ManifestoError {
48
48
  // src/internal.ts
49
49
  var ACTION_PARAM_NAMES = /* @__PURE__ */ Symbol("manifesto-sdk.action-param-names");
50
50
  var RUNTIME_KERNEL_FACTORY = /* @__PURE__ */ Symbol("manifesto-sdk.runtime-kernel-factory");
51
- function attachRuntimeKernelFactory(manifesto, factory) {
51
+ var ACTIVATION_STATE = /* @__PURE__ */ Symbol("manifesto-sdk.activation-state");
52
+ function attachRuntimeKernelFactory(manifesto, factory, activationState) {
52
53
  Object.defineProperty(manifesto, RUNTIME_KERNEL_FACTORY, {
53
54
  enumerable: false,
54
55
  configurable: false,
55
56
  writable: false,
56
57
  value: factory
57
58
  });
59
+ const state = activationState ?? getExistingActivationState(manifesto) ?? {
60
+ activated: false
61
+ };
62
+ if (!getExistingActivationState(manifesto)) {
63
+ Object.defineProperty(manifesto, ACTIVATION_STATE, {
64
+ enumerable: false,
65
+ configurable: false,
66
+ writable: false,
67
+ value: state
68
+ });
69
+ }
58
70
  return manifesto;
59
71
  }
60
72
  function getRuntimeKernelFactory(manifesto) {
@@ -68,6 +80,33 @@ function getRuntimeKernelFactory(manifesto) {
68
80
  }
69
81
  return factory;
70
82
  }
83
+ function getActivationState(manifesto) {
84
+ const internal = manifesto;
85
+ const state = internal[ACTIVATION_STATE];
86
+ if (!state) {
87
+ throw new ManifestoError(
88
+ "SCHEMA_ERROR",
89
+ "ComposableManifesto is missing its activation state"
90
+ );
91
+ }
92
+ return state;
93
+ }
94
+ function assertComposableNotActivated(manifesto) {
95
+ if (getActivationState(manifesto).activated) {
96
+ throw new AlreadyActivatedError();
97
+ }
98
+ }
99
+ function activateComposable(manifesto) {
100
+ const state = getActivationState(manifesto);
101
+ if (state.activated) {
102
+ throw new AlreadyActivatedError();
103
+ }
104
+ state.activated = true;
105
+ }
106
+ function getExistingActivationState(manifesto) {
107
+ const internal = manifesto;
108
+ return internal[ACTIVATION_STATE] ?? null;
109
+ }
71
110
  function createRuntimeKernel({
72
111
  schema,
73
112
  host,
@@ -182,8 +221,8 @@ function createRuntimeKernel({
182
221
  intentId: generateUUID()
183
222
  };
184
223
  }
185
- async function executeHost(intent) {
186
- return host.dispatch(intent);
224
+ async function executeHost(intent, options) {
225
+ return host.dispatch(intent, options);
187
226
  }
188
227
  function rejectUnavailable(intent) {
189
228
  const error = new ManifestoError(
@@ -324,9 +363,13 @@ export {
324
363
  AlreadyActivatedError,
325
364
  ACTION_PARAM_NAMES,
326
365
  RUNTIME_KERNEL_FACTORY,
366
+ ACTIVATION_STATE,
327
367
  attachRuntimeKernelFactory,
328
368
  getRuntimeKernelFactory,
369
+ getActivationState,
370
+ assertComposableNotActivated,
371
+ activateComposable,
329
372
  createRuntimeKernel,
330
373
  createBaseRuntimeInstance
331
374
  };
332
- //# sourceMappingURL=chunk-CMZQTFX2.js.map
375
+ //# sourceMappingURL=chunk-NGW654NU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/internal.ts","../src/errors.ts"],"sourcesContent":["import {\n getAvailableActions as queryAvailableActions,\n isActionAvailable as queryActionAvailable,\n type DomainSchema,\n type Intent,\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 ComposableManifesto,\n ManifestoBaseInstance,\n ManifestoDomainShape,\n ManifestoEvent,\n ManifestoEventMap,\n Selector,\n Snapshot,\n TypedCreateIntent,\n TypedMEL,\n TypedOn,\n TypedSubscribe,\n Unsubscribe,\n} from \"./types.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\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 getAvailableActions: () => readonly (keyof T[\"actions\"])[];\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: Intent) => Intent;\n readonly executeHost: (\n intent: Intent,\n options?: HostDispatchOptions,\n ) => Promise<HostResult>;\n readonly rejectUnavailable: (intent: Intent) => 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 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\nexport function createRuntimeKernel<T extends ManifestoDomainShape>({\n schema,\n host,\n MEL,\n createIntent,\n}: RuntimeKernelOptions<T>): RuntimeKernel<T> {\n const initialSnapshot = host.getSnapshot();\n if (!initialSnapshot) {\n throw new ManifestoError(\"SCHEMA_ERROR\", \"Host failed to initialize its genesis snapshot\");\n }\n\n let visibleSnapshot: CoreSnapshot = initialSnapshot;\n let dispatchQueue: Promise<void> = Promise.resolve();\n let disposed = false;\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(snapshotForSelector<T[\"state\"]>(visibleSnapshot));\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 freezeSnapshot(visibleSnapshot) as Snapshot<T[\"state\"]>;\n }\n\n function getAvailableActions(): readonly (keyof T[\"actions\"])[] {\n return queryAvailableActions(schema, visibleSnapshot) as readonly (keyof T[\"actions\"])[];\n }\n\n function isActionAvailable(name: keyof T[\"actions\"]): boolean {\n return queryActionAvailable(schema, visibleSnapshot, 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 visibleSnapshot = structuredClone(snapshot);\n host.reset(visibleSnapshot);\n\n const publishedSnapshot = freezeSnapshot(visibleSnapshot) as Snapshot<T[\"state\"]>;\n if (options?.notify !== false) {\n notifySubscribers(publishedSnapshot);\n }\n return publishedSnapshot;\n }\n\n function restoreVisibleSnapshot(): void {\n host.reset(visibleSnapshot);\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: Intent): Intent {\n if (intent.intentId && intent.intentId.length > 0) {\n return intent;\n }\n\n return {\n ...intent,\n intentId: generateUUID(),\n };\n }\n\n async function executeHost(\n intent: Intent,\n options?: HostDispatchOptions,\n ): Promise<HostResult> {\n return host.dispatch(intent, options);\n }\n\n function rejectUnavailable(intent: Intent): 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 isActionAvailable,\n dispose,\n isDisposed: () => disposed,\n getVisibleCoreSnapshot: () => structuredClone(visibleSnapshot),\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: Intent): 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: Intent): 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 getAvailableActions: kernel.getAvailableActions,\n isActionAvailable: kernel.isActionAvailable,\n MEL: kernel.MEL,\n schema: kernel.schema,\n dispose: kernel.dispose,\n };\n}\n\nfunction snapshotForSelector<TState>(snapshot: CoreSnapshot): Snapshot<TState> {\n return freezeSnapshot(snapshot) as Snapshot<TState>;\n}\n\nfunction freezeSnapshot<TData = unknown>(snapshot: CoreSnapshot): Snapshot<TData> {\n return Object.freeze(structuredClone(snapshot)) as Snapshot<TData>;\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","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"],"mappings":"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","names":["publishedSnapshot"]}
@@ -0,0 +1,3 @@
1
+ import { type DomainSchema } from "@manifesto-ai/core";
2
+ import { type BaseComposableLaws, type ComposableManifesto, type EffectHandler, type ManifestoDomainShape } from "./types.js";
3
+ export declare function createManifesto<T extends ManifestoDomainShape>(schemaInput: DomainSchema | string, effects: Record<string, EffectHandler>): ComposableManifesto<T, BaseComposableLaws>;
@@ -0,0 +1,37 @@
1
+ export declare class ManifestoError extends Error {
2
+ readonly code: string;
3
+ constructor(code: string, message: string, options?: ErrorOptions);
4
+ }
5
+ export declare class ReservedEffectError extends ManifestoError {
6
+ readonly effectType: string;
7
+ constructor(effectType: string);
8
+ }
9
+ export interface CompileDiagnostic {
10
+ readonly severity: "error" | "warning" | "info";
11
+ readonly code: string;
12
+ readonly message: string;
13
+ readonly location: {
14
+ readonly start: {
15
+ readonly line: number;
16
+ readonly column: number;
17
+ readonly offset: number;
18
+ };
19
+ readonly end: {
20
+ readonly line: number;
21
+ readonly column: number;
22
+ readonly offset: number;
23
+ };
24
+ };
25
+ readonly source?: string;
26
+ readonly suggestion?: string;
27
+ }
28
+ export declare class CompileError extends ManifestoError {
29
+ readonly diagnostics: readonly CompileDiagnostic[];
30
+ constructor(diagnostics: readonly CompileDiagnostic[], formattedMessage: string);
31
+ }
32
+ export declare class DisposedError extends ManifestoError {
33
+ constructor();
34
+ }
35
+ export declare class AlreadyActivatedError extends ManifestoError {
36
+ constructor();
37
+ }
package/dist/index.d.ts CHANGED
@@ -1,55 +1,16 @@
1
- import { DomainSchema } from '@manifesto-ai/core';
2
- export { Snapshot as CoreSnapshot, DomainSchema, Intent, Patch, createSnapshot } from '@manifesto-ai/core';
3
- import { M as ManifestoDomainShape, E as EffectHandler, C as ComposableManifesto, B as BaseLaws } from './types-oXciBlAp.js';
4
- export { a as ActionArgs, A as ActivatedInstance, b as ComputedRef, c as EffectContext, F as FieldRef, G as GovernanceInstance, d as GovernanceLaws, L as LineageInstance, e as LineageLaws, f as ManifestoBaseInstance, g as ManifestoEvent, h as ManifestoEventMap, i as ManifestoEventPayload, S as Selector, j as Snapshot, T as TypedActionRef, k as TypedCreateIntent, l as TypedDispatchAsync, m as TypedMEL, n as TypedOn, o as TypedSubscribe, U as Unsubscribe } from './types-oXciBlAp.js';
5
-
6
1
  /**
7
- * SDK package identity and SPEC version metadata.
2
+ * @manifesto-ai/sdk v3.0.0
3
+ *
4
+ * SDK hard cut around the activation boundary.
5
+ *
6
+ * @see sdk-SPEC-v3.0.0-draft.md
7
+ * @see ADR-017
8
+ * @packageDocumentation
8
9
  */
9
- type SdkManifest = {
10
- readonly name: "@manifesto-ai/sdk";
11
- readonly specVersion: "3.0.0";
12
- readonly phase: "draft";
13
- };
14
-
15
- declare function createManifesto<T extends ManifestoDomainShape>(schemaInput: DomainSchema | string, effects: Record<string, EffectHandler>): ComposableManifesto<T, BaseLaws>;
16
-
17
- declare class ManifestoError extends Error {
18
- readonly code: string;
19
- constructor(code: string, message: string, options?: ErrorOptions);
20
- }
21
- declare class ReservedEffectError extends ManifestoError {
22
- readonly effectType: string;
23
- constructor(effectType: string);
24
- }
25
- interface CompileDiagnostic {
26
- readonly severity: "error" | "warning" | "info";
27
- readonly code: string;
28
- readonly message: string;
29
- readonly location: {
30
- readonly start: {
31
- readonly line: number;
32
- readonly column: number;
33
- readonly offset: number;
34
- };
35
- readonly end: {
36
- readonly line: number;
37
- readonly column: number;
38
- readonly offset: number;
39
- };
40
- };
41
- readonly source?: string;
42
- readonly suggestion?: string;
43
- }
44
- declare class CompileError extends ManifestoError {
45
- readonly diagnostics: readonly CompileDiagnostic[];
46
- constructor(diagnostics: readonly CompileDiagnostic[], formattedMessage: string);
47
- }
48
- declare class DisposedError extends ManifestoError {
49
- constructor();
50
- }
51
- declare class AlreadyActivatedError extends ManifestoError {
52
- constructor();
53
- }
54
-
55
- export { AlreadyActivatedError, BaseLaws, type CompileDiagnostic, CompileError, ComposableManifesto, DisposedError, EffectHandler, ManifestoDomainShape, ManifestoError, ReservedEffectError, type SdkManifest, createManifesto };
10
+ export type { SdkManifest } from "./manifest.js";
11
+ export { createManifesto } from "./create-manifesto.js";
12
+ export type { ActivatedInstance, ActionArgs, BaseLaws, BaseComposableLaws, ComposableManifesto, ComputedRef, EffectContext, EffectHandler, FieldRef, GovernedComposableLaws, GovernanceLaws, LineageComposableLaws, LineageLaws, ManifestoBaseInstance, ManifestoDecoratedRuntimeByLaws, ManifestoDomainShape, ManifestoEvent, ManifestoEventMap, ManifestoEventPayload, ManifestoRuntimeByLaws, Selector, Snapshot, TypedActionRef, TypedCommitAsync, TypedCreateIntent, TypedDispatchAsync, TypedMEL, TypedOn, TypedSubscribe, Unsubscribe, } from "./types.js";
13
+ export { AlreadyActivatedError, CompileError, DisposedError, ManifestoError, ReservedEffectError, } from "./errors.js";
14
+ export type { CompileDiagnostic } from "./errors.js";
15
+ export type { DomainSchema, Intent, Patch, Snapshot as CoreSnapshot, } from "@manifesto-ai/core";
16
+ export { createSnapshot } from "@manifesto-ai/core";
package/dist/index.js CHANGED
@@ -5,10 +5,11 @@ import {
5
5
  DisposedError,
6
6
  ManifestoError,
7
7
  ReservedEffectError,
8
+ activateComposable,
8
9
  attachRuntimeKernelFactory,
9
10
  createBaseRuntimeInstance,
10
11
  createRuntimeKernel
11
- } from "./chunk-CMZQTFX2.js";
12
+ } from "./chunk-NGW654NU.js";
12
13
 
13
14
  // src/create-manifesto.ts
14
15
  import {
@@ -34,15 +35,11 @@ function createManifesto(schemaInput, effects) {
34
35
  }
35
36
  const resolved = resolveSchema(schemaInput);
36
37
  validateReservedNamespaces(resolved.schema);
37
- let activated = false;
38
38
  const manifesto = {
39
39
  _laws: BASE_LAWS,
40
40
  schema: resolved.schema,
41
41
  activate() {
42
- if (activated) {
43
- throw new AlreadyActivatedError();
44
- }
45
- activated = true;
42
+ activateComposable(manifesto);
46
43
  return createBaseRuntimeInstance(
47
44
  createRuntimeKernel({
48
45
  schema: resolved.schema,
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 attachRuntimeKernelFactory,\n createBaseRuntimeInstance,\n createRuntimeKernel,\n} from \"./internal.js\";\nimport {\n type BaseLaws,\n type ComposableManifesto,\n type EffectHandler,\n type ManifestoDomainShape,\n type Snapshot,\n type TypedActionRef,\n type TypedMEL,\n} from \"./types.js\";\nimport {\n AlreadyActivatedError,\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: BaseLaws = 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, BaseLaws> {\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 let activated = false;\n const manifesto = {\n _laws: BASE_LAWS,\n schema: resolved.schema,\n activate() {\n if (activated) {\n throw new AlreadyActivatedError();\n }\n activated = true;\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>(): (\n action: TypedActionRef<T, keyof T[\"actions\"]>,\n ...args: unknown[]\n) => Intent {\n return (action, ...args) => {\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 );\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-v3.0.0-draft.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 BaseLaws,\n ComposableManifesto,\n ComputedRef,\n EffectContext,\n EffectHandler,\n FieldRef,\n GovernanceInstance,\n GovernanceLaws,\n LineageInstance,\n LineageLaws,\n ManifestoBaseInstance,\n ManifestoDomainShape,\n ManifestoEvent,\n ManifestoEventMap,\n ManifestoEventPayload,\n Selector,\n Snapshot,\n TypedActionRef,\n TypedCreateIntent,\n TypedDispatchAsync,\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} 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 BaseComposableLaws,\n type ComposableManifesto,\n type EffectHandler,\n type ManifestoDomainShape,\n type Snapshot,\n type TypedActionRef,\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>(): (\n action: TypedActionRef<T, keyof T[\"actions\"]>,\n ...args: unknown[]\n) => Intent {\n return (action, ...args) => {\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 );\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-v3.0.0-draft.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 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 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,10 +1,14 @@
1
- import { DomainSchema, Snapshot as Snapshot$1, Intent } from '@manifesto-ai/core';
2
- import { HostResult, ManifestoHost } from '@manifesto-ai/host';
3
- import { M as ManifestoDomainShape, m as TypedMEL, k as TypedCreateIntent, o as TypedSubscribe, n as TypedOn, j as Snapshot, g as ManifestoEvent, h as ManifestoEventMap, B as BaseLaws, C as ComposableManifesto, f as ManifestoBaseInstance } from './types-oXciBlAp.js';
4
-
5
- declare const ACTION_PARAM_NAMES: unique symbol;
6
- declare const RUNTIME_KERNEL_FACTORY: unique symbol;
7
- interface RuntimeKernel<T extends ManifestoDomainShape> {
1
+ import { type DomainSchema, type Intent, type Snapshot as CoreSnapshot } from "@manifesto-ai/core";
2
+ import type { HostResult, ManifestoHost } from "@manifesto-ai/host";
3
+ import type { BaseLaws, ComposableManifesto, ManifestoBaseInstance, ManifestoDomainShape, ManifestoEvent, ManifestoEventMap, Snapshot, TypedCreateIntent, TypedMEL, TypedOn, TypedSubscribe } from "./types.js";
4
+ export declare const ACTION_PARAM_NAMES: unique symbol;
5
+ export declare const RUNTIME_KERNEL_FACTORY: unique symbol;
6
+ export declare const ACTIVATION_STATE: unique symbol;
7
+ export type ActivationState = {
8
+ activated: boolean;
9
+ };
10
+ export type HostDispatchOptions = NonNullable<Parameters<ManifestoHost["dispatch"]>[1]>;
11
+ export interface RuntimeKernel<T extends ManifestoDomainShape> {
8
12
  readonly schema: DomainSchema;
9
13
  readonly MEL: TypedMEL<T>;
10
14
  readonly createIntent: TypedCreateIntent<T>;
@@ -15,20 +19,21 @@ interface RuntimeKernel<T extends ManifestoDomainShape> {
15
19
  readonly isActionAvailable: (name: keyof T["actions"]) => boolean;
16
20
  readonly dispose: () => void;
17
21
  readonly isDisposed: () => boolean;
18
- readonly getVisibleCoreSnapshot: () => Snapshot$1;
19
- readonly setVisibleSnapshot: (snapshot: Snapshot$1, options?: {
22
+ readonly getVisibleCoreSnapshot: () => CoreSnapshot;
23
+ readonly setVisibleSnapshot: (snapshot: CoreSnapshot, options?: {
20
24
  readonly notify?: boolean;
21
25
  }) => Snapshot<T["state"]>;
22
26
  readonly restoreVisibleSnapshot: () => void;
23
27
  readonly emitEvent: <K extends ManifestoEvent>(event: K, payload: ManifestoEventMap<T>[K]) => void;
24
28
  readonly enqueue: <R>(task: () => Promise<R>) => Promise<R>;
25
29
  readonly ensureIntentId: (intent: Intent) => Intent;
26
- readonly executeHost: (intent: Intent) => Promise<HostResult>;
30
+ readonly executeHost: (intent: Intent, options?: HostDispatchOptions) => Promise<HostResult>;
27
31
  readonly rejectUnavailable: (intent: Intent) => never;
28
32
  }
29
- type RuntimeKernelFactory<T extends ManifestoDomainShape> = () => RuntimeKernel<T>;
30
- type InternalComposableManifesto<T extends ManifestoDomainShape, Laws extends BaseLaws> = ComposableManifesto<T, Laws> & {
33
+ export type RuntimeKernelFactory<T extends ManifestoDomainShape> = () => RuntimeKernel<T>;
34
+ export type InternalComposableManifesto<T extends ManifestoDomainShape, Laws extends BaseLaws> = ComposableManifesto<T, Laws> & {
31
35
  readonly [RUNTIME_KERNEL_FACTORY]: RuntimeKernelFactory<T>;
36
+ readonly [ACTIVATION_STATE]: ActivationState;
32
37
  };
33
38
  type RuntimeKernelOptions<T extends ManifestoDomainShape> = {
34
39
  readonly schema: DomainSchema;
@@ -36,9 +41,11 @@ type RuntimeKernelOptions<T extends ManifestoDomainShape> = {
36
41
  readonly MEL: TypedMEL<T>;
37
42
  readonly createIntent: TypedCreateIntent<T>;
38
43
  };
39
- declare function attachRuntimeKernelFactory<T extends ManifestoDomainShape, Laws extends BaseLaws>(manifesto: ComposableManifesto<T, Laws>, factory: RuntimeKernelFactory<T>): InternalComposableManifesto<T, Laws>;
40
- declare function getRuntimeKernelFactory<T extends ManifestoDomainShape, Laws extends BaseLaws>(manifesto: ComposableManifesto<T, Laws>): RuntimeKernelFactory<T>;
41
- declare function createRuntimeKernel<T extends ManifestoDomainShape>({ schema, host, MEL, createIntent, }: RuntimeKernelOptions<T>): RuntimeKernel<T>;
42
- declare function createBaseRuntimeInstance<T extends ManifestoDomainShape>(kernel: RuntimeKernel<T>): ManifestoBaseInstance<T>;
43
-
44
- export { ACTION_PARAM_NAMES, type InternalComposableManifesto, RUNTIME_KERNEL_FACTORY, type RuntimeKernel, type RuntimeKernelFactory, attachRuntimeKernelFactory, createBaseRuntimeInstance, createRuntimeKernel, getRuntimeKernelFactory };
44
+ export declare function attachRuntimeKernelFactory<T extends ManifestoDomainShape, Laws extends BaseLaws>(manifesto: ComposableManifesto<T, Laws>, factory: RuntimeKernelFactory<T>, activationState?: ActivationState): InternalComposableManifesto<T, Laws>;
45
+ export declare function getRuntimeKernelFactory<T extends ManifestoDomainShape, Laws extends BaseLaws>(manifesto: ComposableManifesto<T, Laws>): RuntimeKernelFactory<T>;
46
+ export declare function getActivationState<T extends ManifestoDomainShape, Laws extends BaseLaws>(manifesto: ComposableManifesto<T, Laws>): ActivationState;
47
+ export declare function assertComposableNotActivated<T extends ManifestoDomainShape, Laws extends BaseLaws>(manifesto: ComposableManifesto<T, Laws>): void;
48
+ export declare function activateComposable<T extends ManifestoDomainShape, Laws extends BaseLaws>(manifesto: ComposableManifesto<T, Laws>): void;
49
+ export declare function createRuntimeKernel<T extends ManifestoDomainShape>({ schema, host, MEL, createIntent, }: RuntimeKernelOptions<T>): RuntimeKernel<T>;
50
+ export declare function createBaseRuntimeInstance<T extends ManifestoDomainShape>(kernel: RuntimeKernel<T>): ManifestoBaseInstance<T>;
51
+ export {};
package/dist/internal.js CHANGED
@@ -1,17 +1,25 @@
1
1
  import {
2
2
  ACTION_PARAM_NAMES,
3
+ ACTIVATION_STATE,
3
4
  RUNTIME_KERNEL_FACTORY,
5
+ activateComposable,
6
+ assertComposableNotActivated,
4
7
  attachRuntimeKernelFactory,
5
8
  createBaseRuntimeInstance,
6
9
  createRuntimeKernel,
10
+ getActivationState,
7
11
  getRuntimeKernelFactory
8
- } from "./chunk-CMZQTFX2.js";
12
+ } from "./chunk-NGW654NU.js";
9
13
  export {
10
14
  ACTION_PARAM_NAMES,
15
+ ACTIVATION_STATE,
11
16
  RUNTIME_KERNEL_FACTORY,
17
+ activateComposable,
18
+ assertComposableNotActivated,
12
19
  attachRuntimeKernelFactory,
13
20
  createBaseRuntimeInstance,
14
21
  createRuntimeKernel,
22
+ getActivationState,
15
23
  getRuntimeKernelFactory
16
24
  };
17
25
  //# sourceMappingURL=internal.js.map
@@ -0,0 +1,8 @@
1
+ /**
2
+ * SDK package identity and SPEC version metadata.
3
+ */
4
+ export type SdkManifest = {
5
+ readonly name: "@manifesto-ai/sdk";
6
+ readonly specVersion: "3.0.0";
7
+ readonly phase: "draft";
8
+ };
@@ -0,0 +1,113 @@
1
+ import type { DomainSchema, Intent, Patch, Snapshot as CoreSnapshot } from "@manifesto-ai/core";
2
+ type ActionFn = {
3
+ bivarianceHack(...args: unknown[]): unknown;
4
+ }["bivarianceHack"];
5
+ export type ManifestoDomainShape = {
6
+ readonly actions: Record<string, ActionFn>;
7
+ readonly state: Record<string, unknown>;
8
+ readonly computed: Record<string, unknown>;
9
+ };
10
+ export type BaseLaws = {
11
+ readonly __baseLaws: true;
12
+ };
13
+ export type LineageLaws = {
14
+ readonly __lineageLaws: true;
15
+ };
16
+ export type GovernanceLaws = {
17
+ readonly __governanceLaws: true;
18
+ };
19
+ export type BaseComposableLaws = BaseLaws & {
20
+ readonly __lineageLaws?: never;
21
+ readonly __governanceLaws?: never;
22
+ };
23
+ export type LineageComposableLaws = BaseLaws & LineageLaws & {
24
+ readonly __governanceLaws?: never;
25
+ };
26
+ export type GovernedComposableLaws = BaseLaws & LineageLaws & GovernanceLaws;
27
+ export type Snapshot<T = unknown> = Omit<CoreSnapshot, "data"> & {
28
+ data: T;
29
+ };
30
+ export type EffectContext<T = unknown> = {
31
+ readonly snapshot: Readonly<Snapshot<T>>;
32
+ };
33
+ export type EffectHandler = (params: unknown, ctx: EffectContext) => Promise<readonly Patch[]>;
34
+ export type TypedActionRef<T extends ManifestoDomainShape, K extends keyof T["actions"] = keyof T["actions"]> = {
35
+ readonly __kind: "ActionRef";
36
+ readonly name: K;
37
+ };
38
+ export type FieldRef<TValue> = {
39
+ readonly __kind: "FieldRef";
40
+ readonly _type?: TValue;
41
+ };
42
+ export type ComputedRef<TValue> = {
43
+ readonly __kind: "ComputedRef";
44
+ readonly _type?: TValue;
45
+ };
46
+ export type TypedMEL<T extends ManifestoDomainShape> = {
47
+ readonly actions: {
48
+ readonly [K in keyof T["actions"]]: TypedActionRef<T, K>;
49
+ };
50
+ readonly state: {
51
+ readonly [K in keyof T["state"]]: FieldRef<T["state"][K]>;
52
+ };
53
+ readonly computed: {
54
+ readonly [K in keyof T["computed"]]: ComputedRef<T["computed"][K]>;
55
+ };
56
+ };
57
+ export type ActionArgs<T extends ManifestoDomainShape, K extends keyof T["actions"]> = T["actions"][K] extends (...args: infer P) => unknown ? P : never;
58
+ export type Selector<T, R> = (snapshot: Snapshot<T>) => R;
59
+ export type Unsubscribe = () => void;
60
+ export type TypedCreateIntent<T extends ManifestoDomainShape> = <K extends keyof T["actions"]>(action: TypedActionRef<T, K>, ...args: ActionArgs<T, K>) => Intent;
61
+ export type TypedDispatchAsync<T extends ManifestoDomainShape> = (intent: Intent) => Promise<Snapshot<T["state"]>>;
62
+ export type TypedCommitAsync<T extends ManifestoDomainShape> = TypedDispatchAsync<T>;
63
+ export type TypedSubscribe<T extends ManifestoDomainShape> = <R>(selector: Selector<T["state"], R>, listener: (value: R) => void) => Unsubscribe;
64
+ export interface ManifestoEventMap<T extends ManifestoDomainShape> {
65
+ "dispatch:completed": {
66
+ readonly intentId: string;
67
+ readonly intent: Intent;
68
+ readonly snapshot: Snapshot<T["state"]>;
69
+ };
70
+ "dispatch:rejected": {
71
+ readonly intentId: string;
72
+ readonly intent: Intent;
73
+ readonly reason: string;
74
+ };
75
+ "dispatch:failed": {
76
+ readonly intentId: string;
77
+ readonly intent: Intent;
78
+ readonly error: Error;
79
+ readonly snapshot?: Snapshot<T["state"]>;
80
+ };
81
+ }
82
+ export type ManifestoEvent = "dispatch:completed" | "dispatch:rejected" | "dispatch:failed";
83
+ export type ManifestoEventPayload<T extends ManifestoDomainShape> = ManifestoEventMap<T>[ManifestoEvent];
84
+ export type TypedOn<T extends ManifestoDomainShape> = <K extends ManifestoEvent>(event: K, handler: (payload: ManifestoEventMap<T>[K]) => void) => Unsubscribe;
85
+ export type ManifestoBaseInstance<T extends ManifestoDomainShape> = {
86
+ readonly createIntent: TypedCreateIntent<T>;
87
+ readonly dispatchAsync: TypedDispatchAsync<T>;
88
+ readonly subscribe: TypedSubscribe<T>;
89
+ readonly on: TypedOn<T>;
90
+ readonly getSnapshot: () => Snapshot<T["state"]>;
91
+ readonly getAvailableActions: () => readonly (keyof T["actions"])[];
92
+ readonly isActionAvailable: (name: keyof T["actions"]) => boolean;
93
+ readonly MEL: TypedMEL<T>;
94
+ readonly schema: DomainSchema;
95
+ readonly dispose: () => void;
96
+ };
97
+ export interface ManifestoRuntimeByLaws<T extends ManifestoDomainShape> {
98
+ readonly base: ManifestoBaseInstance<T>;
99
+ }
100
+ export interface ManifestoDecoratedRuntimeByLaws<T extends ManifestoDomainShape> {
101
+ }
102
+ type ResolvedManifestoRuntimeByLaws<T extends ManifestoDomainShape> = ManifestoRuntimeByLaws<T> & ManifestoDecoratedRuntimeByLaws<T>;
103
+ export type ActivatedInstance<T extends ManifestoDomainShape, Laws> = Laws extends GovernanceLaws ? ResolvedManifestoRuntimeByLaws<T> extends {
104
+ readonly governance: infer Runtime;
105
+ } ? Runtime : never : Laws extends LineageLaws ? ResolvedManifestoRuntimeByLaws<T> extends {
106
+ readonly lineage: infer Runtime;
107
+ } ? Runtime : never : ManifestoRuntimeByLaws<T>["base"];
108
+ export type ComposableManifesto<T extends ManifestoDomainShape, Laws extends BaseLaws = BaseComposableLaws> = {
109
+ readonly _laws: Laws;
110
+ readonly schema: DomainSchema;
111
+ activate(): ActivatedInstance<T, Laws>;
112
+ };
113
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@manifesto-ai/sdk",
3
- "version": "3.1.0",
3
+ "version": "3.1.1",
4
4
  "description": "Manifesto SDK - Activation-first public API for the base runtime",
5
5
  "author": "eggplantiny <eggplantiny@gmail.com>",
6
6
  "license": "MIT",
@@ -40,8 +40,8 @@
40
40
  ],
41
41
  "dependencies": {
42
42
  "@manifesto-ai/compiler": "1.9.0",
43
- "@manifesto-ai/host": "2.5.0",
44
- "@manifesto-ai/core": "2.8.0"
43
+ "@manifesto-ai/core": "2.8.0",
44
+ "@manifesto-ai/host": "2.5.0"
45
45
  },
46
46
  "devDependencies": {
47
47
  "typescript": "^5.9.3",
@@ -49,7 +49,7 @@
49
49
  "vitest": "^4.1.2"
50
50
  },
51
51
  "scripts": {
52
- "build": "tsup",
52
+ "build": "rm -rf dist && tsup && tsc -p tsconfig.build.json --emitDeclarationOnly --declarationMap false --outDir dist",
53
53
  "dev": "tsc --watch",
54
54
  "clean": "rm -rf dist",
55
55
  "lint": "echo 'lint not configured'",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/internal.ts","../src/errors.ts"],"sourcesContent":["import {\n getAvailableActions as queryAvailableActions,\n isActionAvailable as queryActionAvailable,\n type DomainSchema,\n type Intent,\n type Snapshot as CoreSnapshot,\n} from \"@manifesto-ai/core\";\nimport type { HostResult, ManifestoHost } from \"@manifesto-ai/host\";\n\nimport {\n DisposedError,\n ManifestoError,\n} from \"./errors.js\";\nimport type {\n BaseLaws,\n ComposableManifesto,\n ManifestoBaseInstance,\n ManifestoDomainShape,\n ManifestoEvent,\n ManifestoEventMap,\n Selector,\n Snapshot,\n TypedCreateIntent,\n TypedMEL,\n TypedOn,\n TypedSubscribe,\n Unsubscribe,\n} from \"./types.js\";\n\nexport const ACTION_PARAM_NAMES = Symbol(\"manifesto-sdk.action-param-names\");\nexport const RUNTIME_KERNEL_FACTORY = Symbol(\"manifesto-sdk.runtime-kernel-factory\");\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 getAvailableActions: () => readonly (keyof T[\"actions\"])[];\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: Intent) => Intent;\n readonly executeHost: (intent: Intent) => Promise<HostResult>;\n readonly rejectUnavailable: (intent: Intent) => 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};\n\ntype RuntimeKernelOptions<T extends ManifestoDomainShape> = {\n readonly schema: DomainSchema;\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): 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 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 createRuntimeKernel<T extends ManifestoDomainShape>({\n schema,\n host,\n MEL,\n createIntent,\n}: RuntimeKernelOptions<T>): RuntimeKernel<T> {\n const initialSnapshot = host.getSnapshot();\n if (!initialSnapshot) {\n throw new ManifestoError(\"SCHEMA_ERROR\", \"Host failed to initialize its genesis snapshot\");\n }\n\n let visibleSnapshot: CoreSnapshot = initialSnapshot;\n let dispatchQueue: Promise<void> = Promise.resolve();\n let disposed = false;\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(snapshotForSelector<T[\"state\"]>(visibleSnapshot));\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 freezeSnapshot(visibleSnapshot) as Snapshot<T[\"state\"]>;\n }\n\n function getAvailableActions(): readonly (keyof T[\"actions\"])[] {\n return queryAvailableActions(schema, visibleSnapshot) as readonly (keyof T[\"actions\"])[];\n }\n\n function isActionAvailable(name: keyof T[\"actions\"]): boolean {\n return queryActionAvailable(schema, visibleSnapshot, 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 visibleSnapshot = structuredClone(snapshot);\n host.reset(visibleSnapshot);\n\n const publishedSnapshot = freezeSnapshot(visibleSnapshot) as Snapshot<T[\"state\"]>;\n if (options?.notify !== false) {\n notifySubscribers(publishedSnapshot);\n }\n return publishedSnapshot;\n }\n\n function restoreVisibleSnapshot(): void {\n host.reset(visibleSnapshot);\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: Intent): Intent {\n if (intent.intentId && intent.intentId.length > 0) {\n return intent;\n }\n\n return {\n ...intent,\n intentId: generateUUID(),\n };\n }\n\n async function executeHost(intent: Intent): Promise<HostResult> {\n return host.dispatch(intent);\n }\n\n function rejectUnavailable(intent: Intent): 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 isActionAvailable,\n dispose,\n isDisposed: () => disposed,\n getVisibleCoreSnapshot: () => structuredClone(visibleSnapshot),\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: Intent): 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: Intent): 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 getAvailableActions: kernel.getAvailableActions,\n isActionAvailable: kernel.isActionAvailable,\n MEL: kernel.MEL,\n schema: kernel.schema,\n dispose: kernel.dispose,\n };\n}\n\nfunction snapshotForSelector<TState>(snapshot: CoreSnapshot): Snapshot<TState> {\n return freezeSnapshot(snapshot) as Snapshot<TState>;\n}\n\nfunction freezeSnapshot<TData = unknown>(snapshot: CoreSnapshot): Snapshot<TData> {\n return Object.freeze(structuredClone(snapshot)) as Snapshot<TData>;\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","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"],"mappings":"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","names":["publishedSnapshot"]}
@@ -1,99 +0,0 @@
1
- import { Snapshot as Snapshot$1, Patch, DomainSchema, Intent } from '@manifesto-ai/core';
2
-
3
- type ManifestoDomainShape = {
4
- readonly actions: Record<string, (...args: unknown[]) => unknown>;
5
- readonly state: Record<string, unknown>;
6
- readonly computed: Record<string, unknown>;
7
- };
8
- type BaseLaws = {
9
- readonly __baseLaws: true;
10
- };
11
- type LineageLaws = {
12
- readonly __lineageLaws: true;
13
- };
14
- type GovernanceLaws = {
15
- readonly __governanceLaws: true;
16
- };
17
- type Snapshot<T = unknown> = Omit<Snapshot$1, "data"> & {
18
- data: T;
19
- };
20
- type EffectContext<T = unknown> = {
21
- readonly snapshot: Readonly<Snapshot<T>>;
22
- };
23
- type EffectHandler = (params: unknown, ctx: EffectContext) => Promise<readonly Patch[]>;
24
- type TypedActionRef<T extends ManifestoDomainShape, K extends keyof T["actions"] = keyof T["actions"]> = {
25
- readonly __kind: "ActionRef";
26
- readonly name: K;
27
- };
28
- type FieldRef<TValue> = {
29
- readonly __kind: "FieldRef";
30
- readonly _type?: TValue;
31
- };
32
- type ComputedRef<TValue> = {
33
- readonly __kind: "ComputedRef";
34
- readonly _type?: TValue;
35
- };
36
- type TypedMEL<T extends ManifestoDomainShape> = {
37
- readonly actions: {
38
- readonly [K in keyof T["actions"]]: TypedActionRef<T, K>;
39
- };
40
- readonly state: {
41
- readonly [K in keyof T["state"]]: FieldRef<T["state"][K]>;
42
- };
43
- readonly computed: {
44
- readonly [K in keyof T["computed"]]: ComputedRef<T["computed"][K]>;
45
- };
46
- };
47
- type ActionArgs<T extends ManifestoDomainShape, K extends keyof T["actions"]> = T["actions"][K] extends (...args: infer P) => unknown ? P : never;
48
- type Selector<T, R> = (snapshot: Snapshot<T>) => R;
49
- type Unsubscribe = () => void;
50
- type TypedCreateIntent<T extends ManifestoDomainShape> = <K extends keyof T["actions"]>(action: TypedActionRef<T, K>, ...args: ActionArgs<T, K>) => Intent;
51
- type TypedDispatchAsync<T extends ManifestoDomainShape> = (intent: Intent) => Promise<Snapshot<T["state"]>>;
52
- type TypedSubscribe<T extends ManifestoDomainShape> = <R>(selector: Selector<T["state"], R>, listener: (value: R) => void) => Unsubscribe;
53
- interface ManifestoEventMap<T extends ManifestoDomainShape> {
54
- "dispatch:completed": {
55
- readonly intentId: string;
56
- readonly intent: Intent;
57
- readonly snapshot: Snapshot<T["state"]>;
58
- };
59
- "dispatch:rejected": {
60
- readonly intentId: string;
61
- readonly intent: Intent;
62
- readonly reason: string;
63
- };
64
- "dispatch:failed": {
65
- readonly intentId: string;
66
- readonly intent: Intent;
67
- readonly error: Error;
68
- readonly snapshot?: Snapshot<T["state"]>;
69
- };
70
- }
71
- type ManifestoEvent = "dispatch:completed" | "dispatch:rejected" | "dispatch:failed";
72
- type ManifestoEventPayload<T extends ManifestoDomainShape> = ManifestoEventMap<T>[ManifestoEvent];
73
- type TypedOn<T extends ManifestoDomainShape> = <K extends ManifestoEvent>(event: K, handler: (payload: ManifestoEventMap<T>[K]) => void) => Unsubscribe;
74
- type ManifestoBaseInstance<T extends ManifestoDomainShape> = {
75
- readonly createIntent: TypedCreateIntent<T>;
76
- readonly dispatchAsync: TypedDispatchAsync<T>;
77
- readonly subscribe: TypedSubscribe<T>;
78
- readonly on: TypedOn<T>;
79
- readonly getSnapshot: () => Snapshot<T["state"]>;
80
- readonly getAvailableActions: () => readonly (keyof T["actions"])[];
81
- readonly isActionAvailable: (name: keyof T["actions"]) => boolean;
82
- readonly MEL: TypedMEL<T>;
83
- readonly schema: DomainSchema;
84
- readonly dispose: () => void;
85
- };
86
- type LineageInstance<T extends ManifestoDomainShape> = ManifestoBaseInstance<T> & {
87
- readonly __lineageBrand?: true;
88
- };
89
- type GovernanceInstance<T extends ManifestoDomainShape> = Omit<LineageInstance<T>, "dispatchAsync"> & {
90
- readonly __governanceBrand?: true;
91
- };
92
- type ActivatedInstance<T extends ManifestoDomainShape, Laws> = Laws extends GovernanceLaws ? GovernanceInstance<T> : Laws extends LineageLaws ? LineageInstance<T> : ManifestoBaseInstance<T>;
93
- type ComposableManifesto<T extends ManifestoDomainShape, Laws extends BaseLaws = BaseLaws> = {
94
- readonly _laws: Laws;
95
- readonly schema: DomainSchema;
96
- activate(): ActivatedInstance<T, Laws>;
97
- };
98
-
99
- export type { ActivatedInstance as A, BaseLaws as B, ComposableManifesto as C, EffectHandler as E, FieldRef as F, GovernanceInstance as G, LineageInstance as L, ManifestoDomainShape as M, Selector as S, TypedActionRef as T, Unsubscribe as U, ActionArgs as a, ComputedRef as b, EffectContext as c, GovernanceLaws as d, LineageLaws as e, ManifestoBaseInstance as f, ManifestoEvent as g, ManifestoEventMap as h, ManifestoEventPayload as i, Snapshot as j, TypedCreateIntent as k, TypedDispatchAsync as l, TypedMEL as m, TypedOn as n, TypedSubscribe as o };