@sharpee/plugin-state-machine 0.9.62-beta → 0.9.66-beta

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/package.json CHANGED
@@ -1,26 +1,21 @@
1
1
  {
2
2
  "name": "@sharpee/plugin-state-machine",
3
- "version": "0.9.62-beta",
3
+ "version": "0.9.66-beta",
4
4
  "description": "State machine plugin for Sharpee engine - declarative puzzle and narrative orchestration (ADR-119, ADR-120)",
5
- "main": "dist-npm/index.js",
5
+ "main": "./index.js",
6
6
  "module": "dist-npm/index.js",
7
- "types": "dist-npm/index.d.ts",
7
+ "types": "./index.d.ts",
8
8
  "exports": {
9
9
  ".": {
10
- "types": "./dist-npm/index.d.ts",
11
- "import": "./dist-npm/index.js",
12
- "require": "./dist-npm/index.js"
10
+ "types": "./index.d.ts",
11
+ "require": "./index.js",
12
+ "default": "./index.js"
13
13
  }
14
14
  },
15
- "dependencies": {
16
- "@sharpee/world-model": "0.9.62-beta",
17
- "@sharpee/plugins": "0.9.62-beta",
18
- "@sharpee/core": "0.9.62-beta"
19
- },
20
- "devDependencies": {
21
- "@types/node": "^20.11.19",
22
- "typescript": "^5.3.3",
23
- "rimraf": "^5.0.5"
15
+ "scripts": {
16
+ "build": "tsc",
17
+ "clean": "rimraf dist",
18
+ "build:npm": "tsc --outDir dist-npm"
24
19
  },
25
20
  "files": [
26
21
  "dist-npm"
@@ -49,10 +44,5 @@
49
44
  },
50
45
  "publishConfig": {
51
46
  "access": "public"
52
- },
53
- "scripts": {
54
- "build": "tsc",
55
- "clean": "rimraf dist",
56
- "build:npm": "tsc --outDir dist-npm"
57
47
  }
58
- }
48
+ }
package/LICENSE DELETED
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2025 David Cornelson
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
@@ -1,8 +0,0 @@
1
- /**
2
- * Effect Executor - applies state machine effects to the world model.
3
- */
4
- import { EntityId, ISemanticEvent } from '@sharpee/core';
5
- import { WorldModel } from '@sharpee/world-model';
6
- import { Effect, EntityBindings } from './types';
7
- export declare function executeEffects(effects: Effect[], world: WorldModel, bindings: EntityBindings, playerId: EntityId, machineId: string): ISemanticEvent[];
8
- //# sourceMappingURL=effect-executor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"effect-executor.d.ts","sourceRoot":"","sources":["../src/effect-executor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAKjD,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EAAE,EACjB,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,cAAc,EACxB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,MAAM,GAChB,cAAc,EAAE,CASlB"}
@@ -1,106 +0,0 @@
1
- "use strict";
2
- /**
3
- * Effect Executor - applies state machine effects to the world model.
4
- */
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.executeEffects = executeEffects;
7
- const guard_evaluator_1 = require("./guard-evaluator");
8
- let eventCounter = 0;
9
- function executeEffects(effects, world, bindings, playerId, machineId) {
10
- const events = [];
11
- for (const effect of effects) {
12
- const result = executeEffect(effect, world, bindings, playerId, machineId);
13
- events.push(...result);
14
- }
15
- return events;
16
- }
17
- function executeEffect(effect, world, bindings, playerId, machineId) {
18
- switch (effect.type) {
19
- case 'move': {
20
- const entityId = (0, guard_evaluator_1.resolveRef)(effect.entityRef, bindings);
21
- const destId = (0, guard_evaluator_1.resolveRef)(effect.destinationRef, bindings);
22
- world.moveEntity(entityId, destId);
23
- return [createEvent(`sm.entity_moved`, machineId, {
24
- entityId,
25
- destination: destId,
26
- })];
27
- }
28
- case 'remove': {
29
- const entityId = (0, guard_evaluator_1.resolveRef)(effect.entityRef, bindings);
30
- world.removeEntity(entityId);
31
- return [createEvent(`sm.entity_removed`, machineId, { entityId })];
32
- }
33
- case 'set_trait': {
34
- const entityId = (0, guard_evaluator_1.resolveRef)(effect.entityRef, bindings);
35
- const entity = world.getEntity(entityId);
36
- if (entity) {
37
- const trait = entity.getTrait(effect.trait);
38
- if (trait) {
39
- trait[effect.property] = effect.value;
40
- }
41
- }
42
- return [];
43
- }
44
- case 'set_state': {
45
- world.setStateValue(effect.key, effect.value);
46
- return [];
47
- }
48
- case 'message': {
49
- return [createEvent(effect.messageId, machineId, {
50
- ...(effect.params || {}),
51
- source: 'state-machine',
52
- })];
53
- }
54
- case 'emit_event': {
55
- const entities = {};
56
- if (effect.entities) {
57
- for (const [role, ref] of Object.entries(effect.entities)) {
58
- if (ref)
59
- entities[role] = (0, guard_evaluator_1.resolveRef)(ref, bindings);
60
- }
61
- }
62
- return [{
63
- id: `sm-event-${++eventCounter}`,
64
- type: effect.eventType,
65
- timestamp: Date.now(),
66
- entities,
67
- data: effect.data,
68
- }];
69
- }
70
- case 'custom': {
71
- const result = effect.execute(world, bindings, playerId);
72
- const events = [];
73
- if (result.events) {
74
- for (const e of result.events) {
75
- events.push({
76
- id: `sm-custom-${++eventCounter}`,
77
- type: e.type,
78
- timestamp: Date.now(),
79
- entities: (e.entities || {}),
80
- data: e.data,
81
- });
82
- }
83
- }
84
- if (result.messages) {
85
- for (const m of result.messages) {
86
- events.push(createEvent(m.messageId, machineId, {
87
- ...(m.params || {}),
88
- source: 'state-machine',
89
- }));
90
- }
91
- }
92
- return events;
93
- }
94
- }
95
- }
96
- function createEvent(type, machineId, data) {
97
- return {
98
- id: `sm-${++eventCounter}`,
99
- type,
100
- timestamp: Date.now(),
101
- entities: {},
102
- data,
103
- tags: ['state-machine', machineId],
104
- };
105
- }
106
- //# sourceMappingURL=effect-executor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"effect-executor.js","sourceRoot":"","sources":["../src/effect-executor.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- /**
2
- * Guard Evaluator - evaluates guard conditions against world state.
3
- */
4
- import { EntityId } from '@sharpee/core';
5
- import { WorldModel } from '@sharpee/world-model';
6
- import { GuardCondition, EntityBindings } from './types';
7
- export declare function evaluateGuard(guard: GuardCondition, world: WorldModel, bindings: EntityBindings, playerId: EntityId): boolean;
8
- export declare function resolveRef(ref: string, bindings: EntityBindings): EntityId;
9
- //# sourceMappingURL=guard-evaluator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"guard-evaluator.d.ts","sourceRoot":"","sources":["../src/guard-evaluator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EACL,cAAc,EACd,cAAc,EACf,MAAM,SAAS,CAAC;AAEjB,wBAAgB,aAAa,CAC3B,KAAK,EAAE,cAAc,EACrB,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,cAAc,EACxB,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAmBT;AAuCD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,QAAQ,CAS1E"}
@@ -1,58 +0,0 @@
1
- "use strict";
2
- /**
3
- * Guard Evaluator - evaluates guard conditions against world state.
4
- */
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.evaluateGuard = evaluateGuard;
7
- exports.resolveRef = resolveRef;
8
- function evaluateGuard(guard, world, bindings, playerId) {
9
- switch (guard.type) {
10
- case 'entity':
11
- return evaluateEntityGuard(guard, world, bindings);
12
- case 'state':
13
- return world.getStateValue(guard.key) === guard.value;
14
- case 'location':
15
- return evaluateLocationGuard(guard, world, bindings, playerId);
16
- case 'inventory':
17
- return evaluateInventoryGuard(guard, world, bindings, playerId);
18
- case 'and':
19
- return guard.conditions.every(c => evaluateGuard(c, world, bindings, playerId));
20
- case 'or':
21
- return guard.conditions.some(c => evaluateGuard(c, world, bindings, playerId));
22
- case 'not':
23
- return !guard.conditions.every(c => evaluateGuard(c, world, bindings, playerId));
24
- case 'custom':
25
- return guard.evaluate(world, bindings, playerId);
26
- }
27
- }
28
- function evaluateEntityGuard(guard, world, bindings) {
29
- const entityId = resolveRef(guard.entityRef, bindings);
30
- const entity = world.getEntity(entityId);
31
- if (!entity)
32
- return false;
33
- const trait = entity.getTrait(guard.trait);
34
- if (!trait)
35
- return false;
36
- return trait[guard.property] === guard.value;
37
- }
38
- function evaluateLocationGuard(guard, world, bindings, playerId) {
39
- const actorId = guard.actorRef ? resolveRef(guard.actorRef, bindings) : playerId;
40
- const roomId = resolveRef(guard.roomRef, bindings);
41
- return world.getLocation(actorId) === roomId;
42
- }
43
- function evaluateInventoryGuard(guard, world, bindings, playerId) {
44
- const actorId = guard.actorRef ? resolveRef(guard.actorRef, bindings) : playerId;
45
- const entityId = resolveRef(guard.entityRef, bindings);
46
- return world.getLocation(entityId) === actorId;
47
- }
48
- function resolveRef(ref, bindings) {
49
- if (ref.startsWith('$')) {
50
- const bound = bindings[ref];
51
- if (!bound) {
52
- throw new Error(`Unresolved binding: ${ref}`);
53
- }
54
- return bound;
55
- }
56
- return ref;
57
- }
58
- //# sourceMappingURL=guard-evaluator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"guard-evaluator.js","sourceRoot":"","sources":["../src/guard-evaluator.ts"],"names":[],"mappings":";AAAA;;GAEG;;AASH,sCAwBC;AAuCD,gCASC;AAxED,SAAgB,aAAa,CAC3B,KAAqB,EACrB,KAAiB,EACjB,QAAwB,EACxB,QAAkB;IAElB,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,QAAQ;YACX,OAAO,mBAAmB,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QACrD,KAAK,OAAO;YACV,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC;QACxD,KAAK,UAAU;YACb,OAAO,qBAAqB,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACjE,KAAK,WAAW;YACd,OAAO,sBAAsB,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAClE,KAAK,KAAK;YACR,OAAO,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;QAClF,KAAK,IAAI;YACP,OAAO,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;QACjF,KAAK,KAAK;YACR,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;QACnF,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACrD,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAC1B,KAA6E,EAC7E,KAAiB,EACjB,QAAwB;IAExB,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACzC,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAE1B,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IAEzB,OAAQ,KAA4C,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC;AACvF,CAAC;AAED,SAAS,qBAAqB,CAC5B,KAA6C,EAC7C,KAAiB,EACjB,QAAwB,EACxB,QAAkB;IAElB,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IACjF,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACnD,OAAO,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,MAAM,CAAC;AAC/C,CAAC;AAED,SAAS,sBAAsB,CAC7B,KAA+C,EAC/C,KAAiB,EACjB,QAAwB,EACxB,QAAkB;IAElB,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IACjF,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACvD,OAAO,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,OAAO,CAAC;AACjD,CAAC;AAED,SAAgB,UAAU,CAAC,GAAW,EAAE,QAAwB;IAC9D,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,EAAE,CAAC,CAAC;QAChD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -1,9 +0,0 @@
1
- /**
2
- * @sharpee/plugin-state-machine - Declarative state machine plugin (ADR-119, ADR-120)
3
- */
4
- export * from './types';
5
- export * from './state-machine-plugin';
6
- export * from './state-machine-runtime';
7
- export { evaluateGuard, resolveRef } from './guard-evaluator';
8
- export { executeEffects } from './effect-executor';
9
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,SAAS,CAAC;AACxB,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC"}
package/dist-npm/index.js DELETED
@@ -1,29 +0,0 @@
1
- "use strict";
2
- /**
3
- * @sharpee/plugin-state-machine - Declarative state machine plugin (ADR-119, ADR-120)
4
- */
5
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- var desc = Object.getOwnPropertyDescriptor(m, k);
8
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
- desc = { enumerable: true, get: function() { return m[k]; } };
10
- }
11
- Object.defineProperty(o, k2, desc);
12
- }) : (function(o, m, k, k2) {
13
- if (k2 === undefined) k2 = k;
14
- o[k2] = m[k];
15
- }));
16
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
17
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
18
- };
19
- Object.defineProperty(exports, "__esModule", { value: true });
20
- exports.executeEffects = exports.resolveRef = exports.evaluateGuard = void 0;
21
- __exportStar(require("./types"), exports);
22
- __exportStar(require("./state-machine-plugin"), exports);
23
- __exportStar(require("./state-machine-runtime"), exports);
24
- var guard_evaluator_1 = require("./guard-evaluator");
25
- Object.defineProperty(exports, "evaluateGuard", { enumerable: true, get: function () { return guard_evaluator_1.evaluateGuard; } });
26
- Object.defineProperty(exports, "resolveRef", { enumerable: true, get: function () { return guard_evaluator_1.resolveRef; } });
27
- var effect_executor_1 = require("./effect-executor");
28
- Object.defineProperty(exports, "executeEffects", { enumerable: true, get: function () { return effect_executor_1.executeEffects; } });
29
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;AAEH,0CAAwB;AACxB,yDAAuC;AACvC,0DAAwC;AACxC,qDAA8D;AAArD,gHAAA,aAAa,OAAA;AAAE,6GAAA,UAAU,OAAA;AAClC,qDAAmD;AAA1C,iHAAA,cAAc,OAAA"}
@@ -1,20 +0,0 @@
1
- /**
2
- * StateMachinePlugin - Wraps state machine registry as a TurnPlugin (ADR-119, ADR-120)
3
- *
4
- * Priority 75: Runs after NPCs (100) but before scheduler (50).
5
- * Evaluates state machine transitions after each successful player action.
6
- */
7
- import { ISemanticEvent } from '@sharpee/core';
8
- import { TurnPlugin, TurnPluginContext } from '@sharpee/plugins';
9
- import { StateMachineRegistry } from './state-machine-runtime';
10
- export declare class StateMachinePlugin implements TurnPlugin {
11
- id: string;
12
- priority: number;
13
- private registry;
14
- constructor();
15
- onAfterAction(ctx: TurnPluginContext): ISemanticEvent[];
16
- getState(): unknown;
17
- setState(state: unknown): void;
18
- getRegistry(): StateMachineRegistry;
19
- }
20
- //# sourceMappingURL=state-machine-plugin.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"state-machine-plugin.d.ts","sourceRoot":"","sources":["../src/state-machine-plugin.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAG/D,qBAAa,kBAAmB,YAAW,UAAU;IACnD,EAAE,SAAkC;IACpC,QAAQ,SAAM;IACd,OAAO,CAAC,QAAQ,CAAuB;;IAMvC,aAAa,CAAC,GAAG,EAAE,iBAAiB,GAAG,cAAc,EAAE;IAkBvD,QAAQ,IAAI,OAAO;IAInB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAI9B,WAAW,IAAI,oBAAoB;CAGpC"}
@@ -1,45 +0,0 @@
1
- "use strict";
2
- /**
3
- * StateMachinePlugin - Wraps state machine registry as a TurnPlugin (ADR-119, ADR-120)
4
- *
5
- * Priority 75: Runs after NPCs (100) but before scheduler (50).
6
- * Evaluates state machine transitions after each successful player action.
7
- */
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.StateMachinePlugin = void 0;
10
- const state_machine_runtime_1 = require("./state-machine-runtime");
11
- class StateMachinePlugin {
12
- id = 'sharpee.plugin.state-machine';
13
- priority = 75;
14
- registry;
15
- constructor() {
16
- this.registry = new state_machine_runtime_1.StateMachineRegistry();
17
- }
18
- onAfterAction(ctx) {
19
- const evalCtx = {
20
- world: ctx.world,
21
- playerId: ctx.playerId,
22
- playerLocation: ctx.playerLocation,
23
- turn: ctx.turn,
24
- actionId: ctx.actionResult?.actionId,
25
- actionTargetId: ctx.actionResult?.targetId,
26
- actionEvents: ctx.actionEvents?.map(e => ({
27
- type: e.type,
28
- data: e.data,
29
- entities: e.entities,
30
- })),
31
- };
32
- return this.registry.evaluate(evalCtx);
33
- }
34
- getState() {
35
- return this.registry.getState();
36
- }
37
- setState(state) {
38
- this.registry.setState(state);
39
- }
40
- getRegistry() {
41
- return this.registry;
42
- }
43
- }
44
- exports.StateMachinePlugin = StateMachinePlugin;
45
- //# sourceMappingURL=state-machine-plugin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"state-machine-plugin.js","sourceRoot":"","sources":["../src/state-machine-plugin.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAIH,mEAA+D;AAG/D,MAAa,kBAAkB;IAC7B,EAAE,GAAG,8BAA8B,CAAC;IACpC,QAAQ,GAAG,EAAE,CAAC;IACN,QAAQ,CAAuB;IAEvC;QACE,IAAI,CAAC,QAAQ,GAAG,IAAI,4CAAoB,EAAE,CAAC;IAC7C,CAAC;IAED,aAAa,CAAC,GAAsB;QAClC,MAAM,OAAO,GAAsB;YACjC,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,cAAc,EAAE,GAAG,CAAC,cAAc;YAClC,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,QAAQ,EAAE,GAAG,CAAC,YAAY,EAAE,QAAQ;YACpC,cAAc,EAAE,GAAG,CAAC,YAAY,EAAE,QAAQ;YAC1C,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACxC,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,QAAQ,EAAE,CAAC,CAAC,QAAkC;aAC/C,CAAC,CAAC;SACJ,CAAC;QAEF,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAClC,CAAC;IAED,QAAQ,CAAC,KAAc;QACrB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAkC,CAAC,CAAC;IAC7D,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;CACF;AAtCD,gDAsCC"}
@@ -1,21 +0,0 @@
1
- /**
2
- * State Machine Runtime (ADR-119)
3
- *
4
- * Manages registered state machines and evaluates transitions each turn.
5
- */
6
- import { ISemanticEvent } from '@sharpee/core';
7
- import { StateMachineDefinition, EntityBindings, EvaluationContext, StateMachineRegistryState } from './types';
8
- export declare class StateMachineRegistry {
9
- private machines;
10
- register(definition: StateMachineDefinition, bindings?: EntityBindings): void;
11
- unregister(id: string): void;
12
- getMachineState(id: string): string | undefined;
13
- getMachineHistory(id: string): string[] | undefined;
14
- evaluate(ctx: EvaluationContext): ISemanticEvent[];
15
- private findMatchingTransition;
16
- private triggerMatches;
17
- private executeTransition;
18
- getState(): StateMachineRegistryState;
19
- setState(state: StateMachineRegistryState): void;
20
- }
21
- //# sourceMappingURL=state-machine-runtime.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"state-machine-runtime.d.ts","sourceRoot":"","sources":["../src/state-machine-runtime.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EACL,sBAAsB,EACtB,cAAc,EACd,iBAAiB,EAIjB,yBAAyB,EAC1B,MAAM,SAAS,CAAC;AAWjB,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAwC;IAExD,QAAQ,CAAC,UAAU,EAAE,sBAAsB,EAAE,QAAQ,GAAE,cAAmB,GAAG,IAAI;IAgBjF,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI5B,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI/C,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS;IAInD,QAAQ,CAAC,GAAG,EAAE,iBAAiB,GAAG,cAAc,EAAE;IAsBlD,OAAO,CAAC,sBAAsB;IAmB9B,OAAO,CAAC,cAAc;IAyCtB,OAAO,CAAC,iBAAiB;IA2DzB,QAAQ,IAAI,yBAAyB;IAYrC,QAAQ,CAAC,KAAK,EAAE,yBAAyB,GAAG,IAAI;CASjD"}
@@ -1,162 +0,0 @@
1
- "use strict";
2
- /**
3
- * State Machine Runtime (ADR-119)
4
- *
5
- * Manages registered state machines and evaluates transitions each turn.
6
- */
7
- Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.StateMachineRegistry = void 0;
9
- const guard_evaluator_1 = require("./guard-evaluator");
10
- const effect_executor_1 = require("./effect-executor");
11
- class StateMachineRegistry {
12
- machines = new Map();
13
- register(definition, bindings = {}) {
14
- if (this.machines.has(definition.id)) {
15
- throw new Error(`State machine already registered: ${definition.id}`);
16
- }
17
- // Validate initial state exists
18
- if (!definition.states[definition.initialState]) {
19
- throw new Error(`Initial state '${definition.initialState}' not found in machine '${definition.id}'`);
20
- }
21
- this.machines.set(definition.id, {
22
- definition,
23
- bindings: { ...bindings },
24
- currentState: definition.initialState,
25
- history: [definition.initialState],
26
- });
27
- }
28
- unregister(id) {
29
- this.machines.delete(id);
30
- }
31
- getMachineState(id) {
32
- return this.machines.get(id)?.currentState;
33
- }
34
- getMachineHistory(id) {
35
- return this.machines.get(id)?.history;
36
- }
37
- evaluate(ctx) {
38
- const allEvents = [];
39
- for (const machine of this.machines.values()) {
40
- const stateDef = machine.definition.states[machine.currentState];
41
- if (!stateDef || stateDef.terminal || !stateDef.transitions?.length)
42
- continue;
43
- const transition = this.findMatchingTransition(stateDef.transitions, machine, ctx);
44
- if (transition) {
45
- const events = this.executeTransition(machine, transition, ctx);
46
- allEvents.push(...events);
47
- }
48
- }
49
- return allEvents;
50
- }
51
- findMatchingTransition(transitions, machine, ctx) {
52
- // Sort by priority (higher first), stable sort
53
- const sorted = [...transitions].sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));
54
- for (const transition of sorted) {
55
- if (!this.triggerMatches(transition.trigger, machine, ctx))
56
- continue;
57
- if (transition.guard && !(0, guard_evaluator_1.evaluateGuard)(transition.guard, ctx.world, machine.bindings, ctx.playerId))
58
- continue;
59
- return transition;
60
- }
61
- return undefined;
62
- }
63
- triggerMatches(trigger, machine, ctx) {
64
- switch (trigger.type) {
65
- case 'action': {
66
- if (ctx.actionId !== trigger.actionId)
67
- return false;
68
- if (trigger.targetEntity) {
69
- const expectedId = trigger.targetEntity.startsWith('$')
70
- ? machine.bindings[trigger.targetEntity]
71
- : trigger.targetEntity;
72
- if (ctx.actionTargetId !== expectedId)
73
- return false;
74
- }
75
- return true;
76
- }
77
- case 'event': {
78
- if (!ctx.actionEvents)
79
- return false;
80
- return ctx.actionEvents.some(event => {
81
- if (event.type !== trigger.eventId)
82
- return false;
83
- if (trigger.filter && event.data) {
84
- const data = event.data;
85
- for (const [key, value] of Object.entries(trigger.filter)) {
86
- // Resolve binding references in filter values
87
- const expected = typeof value === 'string' && value.startsWith('$')
88
- ? machine.bindings[value]
89
- : value;
90
- if (data[key] !== expected)
91
- return false;
92
- }
93
- }
94
- return true;
95
- });
96
- }
97
- case 'condition': {
98
- return (0, guard_evaluator_1.evaluateGuard)(trigger.condition, ctx.world, machine.bindings, ctx.playerId);
99
- }
100
- }
101
- }
102
- executeTransition(machine, transition, ctx) {
103
- const events = [];
104
- const currentStateDef = machine.definition.states[machine.currentState];
105
- const targetStateDef = machine.definition.states[transition.target];
106
- if (!targetStateDef) {
107
- throw new Error(`Target state '${transition.target}' not found in machine '${machine.definition.id}'`);
108
- }
109
- // 1. Execute onExit effects of current state
110
- if (currentStateDef?.onExit) {
111
- events.push(...(0, effect_executor_1.executeEffects)(currentStateDef.onExit, ctx.world, machine.bindings, ctx.playerId, machine.definition.id));
112
- }
113
- // 2. Execute transition effects
114
- if (transition.effects) {
115
- events.push(...(0, effect_executor_1.executeEffects)(transition.effects, ctx.world, machine.bindings, ctx.playerId, machine.definition.id));
116
- }
117
- // 3. Move to target state
118
- machine.currentState = transition.target;
119
- machine.history.push(transition.target);
120
- // 4. Execute onEnter effects of target state
121
- if (targetStateDef.onEnter) {
122
- events.push(...(0, effect_executor_1.executeEffects)(targetStateDef.onEnter, ctx.world, machine.bindings, ctx.playerId, machine.definition.id));
123
- }
124
- // 5. Emit transition event
125
- events.push({
126
- id: `sm-transition-${Date.now()}`,
127
- type: 'sm.transition',
128
- timestamp: Date.now(),
129
- entities: {},
130
- data: {
131
- machineId: machine.definition.id,
132
- from: machine.history[machine.history.length - 2],
133
- to: transition.target,
134
- },
135
- tags: ['state-machine', machine.definition.id],
136
- });
137
- return events;
138
- }
139
- // ─── Serialization ──────────────────────────────────────────────────────
140
- getState() {
141
- const instances = [];
142
- for (const machine of this.machines.values()) {
143
- instances.push({
144
- id: machine.definition.id,
145
- currentState: machine.currentState,
146
- history: [...machine.history],
147
- });
148
- }
149
- return { instances };
150
- }
151
- setState(state) {
152
- for (const instanceState of state.instances) {
153
- const machine = this.machines.get(instanceState.id);
154
- if (machine) {
155
- machine.currentState = instanceState.currentState;
156
- machine.history = [...instanceState.history];
157
- }
158
- }
159
- }
160
- }
161
- exports.StateMachineRegistry = StateMachineRegistry;
162
- //# sourceMappingURL=state-machine-runtime.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"state-machine-runtime.js","sourceRoot":"","sources":["../src/state-machine-runtime.ts"],"names":[],"mappings":"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"}
@@ -1,149 +0,0 @@
1
- /**
2
- * State Machine Types (ADR-119)
3
- *
4
- * Declarative state machine definitions for puzzle and narrative orchestration.
5
- */
6
- import { EntityId } from '@sharpee/core';
7
- import { WorldModel } from '@sharpee/world-model';
8
- export interface StateMachineDefinition {
9
- id: string;
10
- description?: string;
11
- initialState: string;
12
- states: Record<string, StateDefinition>;
13
- }
14
- export interface StateDefinition {
15
- description?: string;
16
- transitions?: TransitionDefinition[];
17
- onEnter?: Effect[];
18
- onExit?: Effect[];
19
- terminal?: boolean;
20
- }
21
- export interface TransitionDefinition {
22
- target: string;
23
- trigger: TransitionTrigger;
24
- guard?: GuardCondition;
25
- effects?: Effect[];
26
- priority?: number;
27
- }
28
- export type TransitionTrigger = ActionTrigger | EventTrigger | ConditionTrigger;
29
- export interface ActionTrigger {
30
- type: 'action';
31
- actionId: string;
32
- targetEntity?: string;
33
- }
34
- export interface EventTrigger {
35
- type: 'event';
36
- eventId: string;
37
- filter?: Record<string, unknown>;
38
- }
39
- export interface ConditionTrigger {
40
- type: 'condition';
41
- condition: GuardCondition;
42
- }
43
- export type GuardCondition = EntityGuard | StateGuard | LocationGuard | InventoryGuard | CompositeGuard | CustomGuard;
44
- export interface EntityGuard {
45
- type: 'entity';
46
- entityRef: string;
47
- trait: string;
48
- property: string;
49
- value: unknown;
50
- }
51
- export interface StateGuard {
52
- type: 'state';
53
- key: string;
54
- value: unknown;
55
- }
56
- export interface LocationGuard {
57
- type: 'location';
58
- actorRef?: string;
59
- roomRef: string;
60
- }
61
- export interface InventoryGuard {
62
- type: 'inventory';
63
- actorRef?: string;
64
- entityRef: string;
65
- }
66
- export interface CompositeGuard {
67
- type: 'and' | 'or' | 'not';
68
- conditions: GuardCondition[];
69
- }
70
- export interface CustomGuard {
71
- type: 'custom';
72
- evaluate: (world: WorldModel, bindings: EntityBindings, playerId: EntityId) => boolean;
73
- }
74
- export type Effect = MoveEntityEffect | RemoveEntityEffect | SetTraitEffect | SetStateEffect | MessageEffect | EmitEventEffect | CustomEffect;
75
- export interface MoveEntityEffect {
76
- type: 'move';
77
- entityRef: string;
78
- destinationRef: string;
79
- }
80
- export interface RemoveEntityEffect {
81
- type: 'remove';
82
- entityRef: string;
83
- }
84
- export interface SetTraitEffect {
85
- type: 'set_trait';
86
- entityRef: string;
87
- trait: string;
88
- property: string;
89
- value: unknown;
90
- }
91
- export interface SetStateEffect {
92
- type: 'set_state';
93
- key: string;
94
- value: unknown;
95
- }
96
- export interface MessageEffect {
97
- type: 'message';
98
- messageId: string;
99
- params?: Record<string, unknown>;
100
- }
101
- export interface EmitEventEffect {
102
- type: 'emit_event';
103
- eventType: string;
104
- entities?: {
105
- actor?: string;
106
- target?: string;
107
- instrument?: string;
108
- location?: string;
109
- };
110
- data?: unknown;
111
- }
112
- export interface CustomEffect {
113
- type: 'custom';
114
- execute: (world: WorldModel, bindings: EntityBindings, playerId: EntityId) => EffectResult;
115
- }
116
- export interface EffectResult {
117
- events?: Array<{
118
- type: string;
119
- entities?: Record<string, string>;
120
- data?: unknown;
121
- }>;
122
- messages?: Array<{
123
- messageId: string;
124
- params?: Record<string, unknown>;
125
- }>;
126
- }
127
- export type EntityBindings = Record<string, EntityId>;
128
- export interface StateMachineInstanceState {
129
- id: string;
130
- currentState: string;
131
- history: string[];
132
- }
133
- export interface StateMachineRegistryState {
134
- instances: StateMachineInstanceState[];
135
- }
136
- export interface EvaluationContext {
137
- world: WorldModel;
138
- playerId: EntityId;
139
- playerLocation: EntityId;
140
- turn: number;
141
- actionId?: string;
142
- actionTargetId?: EntityId;
143
- actionEvents?: Array<{
144
- type: string;
145
- data?: unknown;
146
- entities?: Record<string, string>;
147
- }>;
148
- }
149
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAIlD,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACrC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,iBAAiB,CAAC;IAC3B,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAID,MAAM,MAAM,iBAAiB,GAAG,aAAa,GAAG,YAAY,GAAG,gBAAgB,CAAC;AAEhF,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,EAAE,cAAc,CAAC;CAC3B;AAID,MAAM,MAAM,cAAc,GACtB,WAAW,GACX,UAAU,GACV,aAAa,GACb,cAAc,GACd,cAAc,GACd,WAAW,CAAC;AAEhB,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC;IAC3B,UAAU,EAAE,cAAc,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC;CACxF;AAID,MAAM,MAAM,MAAM,GACd,gBAAgB,GAChB,kBAAkB,GAClB,cAAc,GACd,cAAc,GACd,aAAa,GACb,eAAe,GACf,YAAY,CAAC;AAEjB,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,WAAW,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,SAAS,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE;QACT,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,KAAK,YAAY,CAAC;CAC5F;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACpF,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;CAC3E;AAID,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAEtD,MAAM,WAAW,yBAAyB;IACxC,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,yBAAyB;IACxC,SAAS,EAAE,yBAAyB,EAAE,CAAC;CACxC;AAID,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,UAAU,CAAC;IAClB,QAAQ,EAAE,QAAQ,CAAC;IACnB,cAAc,EAAE,QAAQ,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,QAAQ,CAAC;IAC1B,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC,CAAC;CAC3F"}
package/dist-npm/types.js DELETED
@@ -1,8 +0,0 @@
1
- "use strict";
2
- /**
3
- * State Machine Types (ADR-119)
4
- *
5
- * Declarative state machine definitions for puzzle and narrative orchestration.
6
- */
7
- Object.defineProperty(exports, "__esModule", { value: true });
8
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;;;GAIG"}