@sadhaka/loom-engine 0.13.0 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/director/ai/ai-plugin-registry.d.ts +20 -0
- package/dist/director/ai/ai-plugin-registry.d.ts.map +1 -0
- package/dist/director/ai/ai-plugin-registry.js +232 -0
- package/dist/director/ai/ai-plugin-registry.js.map +1 -0
- package/dist/director/ai/mock-ai-plugin.d.ts +24 -0
- package/dist/director/ai/mock-ai-plugin.d.ts.map +1 -0
- package/dist/director/ai/mock-ai-plugin.js +83 -0
- package/dist/director/ai/mock-ai-plugin.js.map +1 -0
- package/dist/director/ai/plugin-context.d.ts +27 -0
- package/dist/director/ai/plugin-context.d.ts.map +1 -0
- package/dist/director/ai/plugin-context.js +152 -0
- package/dist/director/ai/plugin-context.js.map +1 -0
- package/dist/director/ai/plugin.d.ts +57 -0
- package/dist/director/ai/plugin.d.ts.map +1 -0
- package/dist/director/ai/plugin.js +32 -0
- package/dist/director/ai/plugin.js.map +1 -0
- package/dist/director/index.d.ts +27 -0
- package/dist/director/index.d.ts.map +1 -0
- package/dist/director/index.js +26 -0
- package/dist/director/index.js.map +1 -0
- package/dist/director/zone/mock-zone-bridge.d.ts +22 -0
- package/dist/director/zone/mock-zone-bridge.d.ts.map +1 -0
- package/dist/director/zone/mock-zone-bridge.js +107 -0
- package/dist/director/zone/mock-zone-bridge.js.map +1 -0
- package/dist/director/zone/sse-zone-bridge.d.ts +40 -0
- package/dist/director/zone/sse-zone-bridge.d.ts.map +1 -0
- package/dist/director/zone/sse-zone-bridge.js +164 -0
- package/dist/director/zone/sse-zone-bridge.js.map +1 -0
- package/dist/director/zone/zone-event-bridge.d.ts +21 -0
- package/dist/director/zone/zone-event-bridge.d.ts.map +1 -0
- package/dist/director/zone/zone-event-bridge.js +24 -0
- package/dist/director/zone/zone-event-bridge.js.map +1 -0
- package/dist/director/zone/zone-event-envelope.d.ts +90 -0
- package/dist/director/zone/zone-event-envelope.d.ts.map +1 -0
- package/dist/director/zone/zone-event-envelope.js +104 -0
- package/dist/director/zone/zone-event-envelope.js.map +1 -0
- package/dist/director/zone/zone-event-log.d.ts +17 -0
- package/dist/director/zone/zone-event-log.d.ts.map +1 -0
- package/dist/director/zone/zone-event-log.js +46 -0
- package/dist/director/zone/zone-event-log.js.map +1 -0
- package/dist/director/zone/zone-event-system.d.ts +14 -0
- package/dist/director/zone/zone-event-system.d.ts.map +1 -0
- package/dist/director/zone/zone-event-system.js +179 -0
- package/dist/director/zone/zone-event-system.js.map +1 -0
- package/dist/director/zone/zone-state-resource.d.ts +15 -0
- package/dist/director/zone/zone-state-resource.d.ts.map +1 -0
- package/dist/director/zone/zone-state-resource.js +60 -0
- package/dist/director/zone/zone-state-resource.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/server/index.d.ts +7 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +33 -0
- package/dist/server/index.js.map +1 -0
- package/package.json +6 -2
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
// Zone-event envelope + typed payloads (Phase 16, LOOM-DIRECTOR-PROTOCOL-V2 §3).
|
|
2
|
+
//
|
|
3
|
+
// v2 introduces a parallel event surface scoped per zone instead of per
|
|
4
|
+
// character. The Director emits a zone event, the server fans it out to
|
|
5
|
+
// every peer currently in that zone. v1's character-scoped EventEnvelope
|
|
6
|
+
// in ../event-envelope.ts remains the source of truth for v1 events and
|
|
7
|
+
// is NOT touched by this file.
|
|
8
|
+
//
|
|
9
|
+
// Spec invariants preserved:
|
|
10
|
+
// - id is monotonic per zone (NOT global). Each zone is its own
|
|
11
|
+
// append-only log starting at 1.
|
|
12
|
+
// - emitter_id is the character_id that triggered the event, or null
|
|
13
|
+
// when the Loom emitted spontaneously (timer, autonomous Director).
|
|
14
|
+
// - encounter_id is GONE - zone events are zone-scoped, not encounter-
|
|
15
|
+
// scoped.
|
|
16
|
+
// - priority field carries v1 §7.2 semantics: P0 always delivered,
|
|
17
|
+
// P1 dropped first under load, P2 next.
|
|
18
|
+
// - Reuses v1's DropSpec, NarratorVoice, KnotPaletteHex, KnotMood so
|
|
19
|
+
// consumer code that already understands v1 needs zero changes for
|
|
20
|
+
// the overlapping shapes.
|
|
21
|
+
// ----- Priority classes (spec §3.1) -----
|
|
22
|
+
const ZONE_PRIORITY_BY_TYPE = {
|
|
23
|
+
'zone.boss.spawn': 'P0',
|
|
24
|
+
'zone.boss.end': 'P0',
|
|
25
|
+
'zone.snapshot': 'P0',
|
|
26
|
+
'zone.state': 'P0',
|
|
27
|
+
'zone.narrator': 'P1',
|
|
28
|
+
'zone.knot': 'P1',
|
|
29
|
+
'zone.boss.tick': 'P2',
|
|
30
|
+
};
|
|
31
|
+
export function priorityFor(type) {
|
|
32
|
+
return ZONE_PRIORITY_BY_TYPE[type];
|
|
33
|
+
}
|
|
34
|
+
// ----- Parsers -----
|
|
35
|
+
export class ZoneEventEnvelopeParseError extends Error {
|
|
36
|
+
raw;
|
|
37
|
+
constructor(message, raw) {
|
|
38
|
+
super('ZoneEventEnvelopeParseError: ' + message);
|
|
39
|
+
this.raw = raw;
|
|
40
|
+
this.name = 'ZoneEventEnvelopeParseError';
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
const KNOWN_ZONE_EVENT_TYPES = new Set([
|
|
44
|
+
'zone.boss.spawn',
|
|
45
|
+
'zone.boss.tick',
|
|
46
|
+
'zone.boss.end',
|
|
47
|
+
'zone.narrator',
|
|
48
|
+
'zone.knot',
|
|
49
|
+
'zone.state',
|
|
50
|
+
'zone.snapshot',
|
|
51
|
+
]);
|
|
52
|
+
// Validate envelope shape only - data payload validation is the caller's
|
|
53
|
+
// responsibility (downstream type narrowing on `event.type` gives full
|
|
54
|
+
// payload typing). Throws on shape errors so the bridge can decide to
|
|
55
|
+
// drop / log / reconnect. Mirrors parseEnvelope() in v1.
|
|
56
|
+
export function parseZoneEnvelope(raw) {
|
|
57
|
+
if (!raw || typeof raw !== 'object') {
|
|
58
|
+
throw new ZoneEventEnvelopeParseError('envelope is not an object', raw);
|
|
59
|
+
}
|
|
60
|
+
const e = raw;
|
|
61
|
+
if (typeof e['id'] !== 'number' || e['id'] < 0 || !Number.isFinite(e['id'])) {
|
|
62
|
+
throw new ZoneEventEnvelopeParseError('id must be a non-negative number', raw);
|
|
63
|
+
}
|
|
64
|
+
if (typeof e['ts'] !== 'number') {
|
|
65
|
+
throw new ZoneEventEnvelopeParseError('ts must be a number', raw);
|
|
66
|
+
}
|
|
67
|
+
if (typeof e['type'] !== 'string' || !KNOWN_ZONE_EVENT_TYPES.has(e['type'])) {
|
|
68
|
+
throw new ZoneEventEnvelopeParseError('unknown zone event type: ' + String(e['type']), raw);
|
|
69
|
+
}
|
|
70
|
+
if (typeof e['zone_id'] !== 'string' || e['zone_id'].length === 0) {
|
|
71
|
+
throw new ZoneEventEnvelopeParseError('zone_id must be a non-empty string', raw);
|
|
72
|
+
}
|
|
73
|
+
if (e['emitter_id'] !== null && typeof e['emitter_id'] !== 'string') {
|
|
74
|
+
throw new ZoneEventEnvelopeParseError('emitter_id must be string or null', raw);
|
|
75
|
+
}
|
|
76
|
+
if (e['priority'] !== undefined) {
|
|
77
|
+
if (e['priority'] !== 'P0' && e['priority'] !== 'P1' && e['priority'] !== 'P2') {
|
|
78
|
+
throw new ZoneEventEnvelopeParseError('priority must be P0 / P1 / P2 when present, got: ' + String(e['priority']), raw);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
if (!e['data'] || typeof e['data'] !== 'object') {
|
|
82
|
+
throw new ZoneEventEnvelopeParseError('data must be an object', raw);
|
|
83
|
+
}
|
|
84
|
+
return e;
|
|
85
|
+
}
|
|
86
|
+
// Convenience: parse a string (typically an SSE 'data:' line) into an
|
|
87
|
+
// envelope. Returns null on JSON parse error or shape error so the
|
|
88
|
+
// caller can decide whether to log or re-throw.
|
|
89
|
+
export function parseZoneEnvelopeJson(json) {
|
|
90
|
+
let parsed;
|
|
91
|
+
try {
|
|
92
|
+
parsed = JSON.parse(json);
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
try {
|
|
98
|
+
return parseZoneEnvelope(parsed);
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=zone-event-envelope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zone-event-envelope.js","sourceRoot":"","sources":["../../../src/director/zone/zone-event-envelope.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ZoneEvent } from './zone-event-envelope.js';
|
|
2
|
+
export interface ZoneEventLogEntry {
|
|
3
|
+
recent: ZoneEvent[];
|
|
4
|
+
activeBossId: string | null;
|
|
5
|
+
lastNarratorLine: string | null;
|
|
6
|
+
lastNarratorTtlMs: number;
|
|
7
|
+
eventsApplied: number;
|
|
8
|
+
}
|
|
9
|
+
export interface ZoneEventLog {
|
|
10
|
+
byZone: Map<string, ZoneEventLogEntry>;
|
|
11
|
+
}
|
|
12
|
+
export declare const RESOURCE_ZONE_EVENT_LOG = "zone_event_log";
|
|
13
|
+
export declare const ZONE_RING_SIZE = 32;
|
|
14
|
+
export declare function createZoneEventLog(): ZoneEventLog;
|
|
15
|
+
export declare function getOrCreateZoneEntry(log: ZoneEventLog, zoneId: string): ZoneEventLogEntry;
|
|
16
|
+
export declare function pushZoneEvent(entry: ZoneEventLogEntry, ev: ZoneEvent): void;
|
|
17
|
+
//# sourceMappingURL=zone-event-log.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zone-event-log.d.ts","sourceRoot":"","sources":["../../../src/director/zone/zone-event-log.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAE1D,MAAM,WAAW,iBAAiB;IAEhC,MAAM,EAAE,SAAS,EAAE,CAAC;IAGpB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAG5B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,iBAAiB,EAAE,MAAM,CAAC;IAG1B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;CACxC;AAED,eAAO,MAAM,uBAAuB,mBAAmB,CAAC;AAExD,eAAO,MAAM,cAAc,KAAK,CAAC;AAEjC,wBAAgB,kBAAkB,IAAI,YAAY,CAEjD;AAKD,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,YAAY,EACjB,MAAM,EAAE,MAAM,GACb,iBAAiB,CAYnB;AAKD,wBAAgB,aAAa,CAAC,KAAK,EAAE,iBAAiB,EAAE,EAAE,EAAE,SAAS,GAAG,IAAI,CAM3E"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// ZoneEventLog - per-zone ring buffer parallel to v1's
|
|
2
|
+
// DirectorEventLog (LOOM-DIRECTOR-PROTOCOL-V2 §4.4).
|
|
3
|
+
//
|
|
4
|
+
// Renderer reads from this for UI surfaces (boss HP bar, recent loot
|
|
5
|
+
// toast, narrator banner). Per-zone slots so a player who briefly
|
|
6
|
+
// stepped through another zone keeps a separate diagnostic trail per
|
|
7
|
+
// zone they have observed.
|
|
8
|
+
//
|
|
9
|
+
// The map is dense by-zone; a zone's slot is created lazily on the
|
|
10
|
+
// first event for that zone (avoids preallocating slots for zones the
|
|
11
|
+
// player will never enter). The ring buffer per zone caps at
|
|
12
|
+
// ZONE_RING_SIZE = 32 entries, newest first - matches v1's
|
|
13
|
+
// DirectorEventLog.recent semantics.
|
|
14
|
+
export const RESOURCE_ZONE_EVENT_LOG = 'zone_event_log';
|
|
15
|
+
export const ZONE_RING_SIZE = 32;
|
|
16
|
+
export function createZoneEventLog() {
|
|
17
|
+
return { byZone: new Map() };
|
|
18
|
+
}
|
|
19
|
+
// Get or lazily create the slot for a zone. Used by ZoneEventSystem
|
|
20
|
+
// when the first event for a zone arrives. Exported for tests +
|
|
21
|
+
// bench.
|
|
22
|
+
export function getOrCreateZoneEntry(log, zoneId) {
|
|
23
|
+
const existing = log.byZone.get(zoneId);
|
|
24
|
+
if (existing)
|
|
25
|
+
return existing;
|
|
26
|
+
const fresh = {
|
|
27
|
+
recent: [],
|
|
28
|
+
activeBossId: null,
|
|
29
|
+
lastNarratorLine: null,
|
|
30
|
+
lastNarratorTtlMs: 0,
|
|
31
|
+
eventsApplied: 0,
|
|
32
|
+
};
|
|
33
|
+
log.byZone.set(zoneId, fresh);
|
|
34
|
+
return fresh;
|
|
35
|
+
}
|
|
36
|
+
// Push an event into the per-zone ring buffer (newest first) and
|
|
37
|
+
// bump eventsApplied. Pure; does not touch activeBossId / narrator
|
|
38
|
+
// state - those are the system's job to set per event type.
|
|
39
|
+
export function pushZoneEvent(entry, ev) {
|
|
40
|
+
entry.recent.unshift(ev);
|
|
41
|
+
if (entry.recent.length > ZONE_RING_SIZE) {
|
|
42
|
+
entry.recent.length = ZONE_RING_SIZE;
|
|
43
|
+
}
|
|
44
|
+
entry.eventsApplied++;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=zone-event-log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zone-event-log.js","sourceRoot":"","sources":["../../../src/director/zone/zone-event-log.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,qDAAqD;AACrD,EAAE;AACF,qEAAqE;AACrE,kEAAkE;AAClE,qEAAqE;AACrE,2BAA2B;AAC3B,EAAE;AACF,mEAAmE;AACnE,sEAAsE;AACtE,6DAA6D;AAC7D,2DAA2D;AAC3D,qCAAqC;AAuBrC,MAAM,CAAC,MAAM,uBAAuB,GAAG,gBAAgB,CAAC;AAExD,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AAEjC,MAAM,UAAU,kBAAkB;IAChC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;AAC/B,CAAC;AAED,oEAAoE;AACpE,gEAAgE;AAChE,SAAS;AACT,MAAM,UAAU,oBAAoB,CAClC,GAAiB,EACjB,MAAc;IAEd,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACxC,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,MAAM,KAAK,GAAsB;QAC/B,MAAM,EAAE,EAAE;QACV,YAAY,EAAE,IAAI;QAClB,gBAAgB,EAAE,IAAI;QACtB,iBAAiB,EAAE,CAAC;QACpB,aAAa,EAAE,CAAC;KACjB,CAAC;IACF,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC9B,OAAO,KAAK,CAAC;AACf,CAAC;AAED,iEAAiE;AACjE,mEAAmE;AACnE,4DAA4D;AAC5D,MAAM,UAAU,aAAa,CAAC,KAAwB,EAAE,EAAa;IACnE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACzB,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,cAAc,EAAE,CAAC;QACzC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,cAAc,CAAC;IACvC,CAAC;IACD,KAAK,CAAC,aAAa,EAAE,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { System } from '../../system.js';
|
|
2
|
+
import type { World } from '../../world.js';
|
|
3
|
+
export interface ZoneEventSystemOptions {
|
|
4
|
+
currentZone?: () => string | null;
|
|
5
|
+
applyKnotToSharedContext?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare class ZoneEventSystem implements System {
|
|
8
|
+
readonly name: string;
|
|
9
|
+
private readonly currentZone;
|
|
10
|
+
private readonly applyKnotToSharedContext;
|
|
11
|
+
constructor(opts?: ZoneEventSystemOptions);
|
|
12
|
+
update(world: World, _dt: number): void;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=zone-event-system.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zone-event-system.d.ts","sourceRoot":"","sources":["../../../src/director/zone/zone-event-system.ts"],"names":[],"mappings":"AAuCA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AA6B5C,MAAM,WAAW,sBAAsB;IAKrC,WAAW,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IAIlC,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC;AAED,qBAAa,eAAgB,YAAW,MAAM;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAiB;IAEtC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA+B;IAC3D,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAU;gBAEvC,IAAI,GAAE,sBAA2B;IAK7C,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;CAkCxC"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
// ZoneEventSystem - drains the IZoneEventBridge each tick, applies
|
|
2
|
+
// each event to the world's zone-scoped resources, and tracks per-zone
|
|
3
|
+
// recent state for the renderer (LOOM-DIRECTOR-PROTOCOL-V2 §4.3).
|
|
4
|
+
//
|
|
5
|
+
// Runs in PHASE_INPUT, AFTER DirectorSystem (v1) and PeerPresenceSystem
|
|
6
|
+
// (15.x). Order rationale:
|
|
7
|
+
// 1. DirectorSystem runs first so v1 character-scoped events have
|
|
8
|
+
// already mutated VeilBudget + KnotContext for THIS frame.
|
|
9
|
+
// 2. PeerPresenceSystem advances peer interpolation so the local
|
|
10
|
+
// player's current zone is fresh.
|
|
11
|
+
// 3. ZoneEventSystem THEN overlays zone-scoped events on top -
|
|
12
|
+
// knot pulses can stack on top of v1 knot.context, narrator
|
|
13
|
+
// lines can override v1 narrator.line for the same frame, etc.
|
|
14
|
+
//
|
|
15
|
+
// Local-zone filter (spec §4.3): events are applied ONLY for the
|
|
16
|
+
// local character's current zone. Events for other zones are still
|
|
17
|
+
// pushed into the per-zone ZoneEventLog so debug HUDs can see the
|
|
18
|
+
// fanout, but they do not mutate KnotContextResource or
|
|
19
|
+
// DirectorZoneStateResource.
|
|
20
|
+
//
|
|
21
|
+
// Dispatch table per event type:
|
|
22
|
+
//
|
|
23
|
+
// zone.boss.spawn -> ZoneEventLog.activeBossId = ev.data.boss.boss_id
|
|
24
|
+
// narrator_line -> log.lastNarratorLine
|
|
25
|
+
// zone.boss.tick -> log only (renderer reads ev for HP / pos)
|
|
26
|
+
// zone.boss.end -> ZoneEventLog.activeBossId = null
|
|
27
|
+
// zone.narrator -> log.lastNarratorLine + ttl
|
|
28
|
+
// zone.knot -> KnotContextResource.beginFade (parallel to v1)
|
|
29
|
+
// zone.state -> applyZoneStateChanges into
|
|
30
|
+
// DirectorZoneStateResource
|
|
31
|
+
// zone.snapshot -> replaceZoneStateFromSnapshot wholesale +
|
|
32
|
+
// reset activeBossId from snapshot's
|
|
33
|
+
// active_boss + apply knot if non-null
|
|
34
|
+
//
|
|
35
|
+
// Lightweight-by-design: most events are just logged + appended to
|
|
36
|
+
// the per-zone ring buffer that gameplay code can read. Heavy state
|
|
37
|
+
// mutation (combat boss entity spawn / despawn, loot pickup) lives
|
|
38
|
+
// in higher-level systems that read from ZoneEventLog.
|
|
39
|
+
import { RESOURCE_ZONE_EVENT_BRIDGE, } from './zone-event-bridge.js';
|
|
40
|
+
import { RESOURCE_ZONE_EVENT_LOG, getOrCreateZoneEntry, pushZoneEvent, } from './zone-event-log.js';
|
|
41
|
+
import { RESOURCE_DIRECTOR_ZONE_STATE, applyZoneStateChanges, replaceZoneStateFromSnapshot, } from './zone-state-resource.js';
|
|
42
|
+
import { RESOURCE_KNOT_CONTEXT, } from '../director-bridge.js';
|
|
43
|
+
import { RESOURCE_TIME, } from '../../resources.js';
|
|
44
|
+
export class ZoneEventSystem {
|
|
45
|
+
name = 'zone-events';
|
|
46
|
+
currentZone;
|
|
47
|
+
applyKnotToSharedContext;
|
|
48
|
+
constructor(opts = {}) {
|
|
49
|
+
this.currentZone = opts.currentZone ?? null;
|
|
50
|
+
this.applyKnotToSharedContext = opts.applyKnotToSharedContext ?? true;
|
|
51
|
+
}
|
|
52
|
+
update(world, _dt) {
|
|
53
|
+
const bridge = world.resources.get(RESOURCE_ZONE_EVENT_BRIDGE);
|
|
54
|
+
const log = world.resources.get(RESOURCE_ZONE_EVENT_LOG);
|
|
55
|
+
const stateRes = world.resources.get(RESOURCE_DIRECTOR_ZONE_STATE);
|
|
56
|
+
if (!bridge || !log)
|
|
57
|
+
return;
|
|
58
|
+
const knotCtx = this.applyKnotToSharedContext
|
|
59
|
+
? world.resources.get(RESOURCE_KNOT_CONTEXT)
|
|
60
|
+
: undefined;
|
|
61
|
+
const time = world.resources.get(RESOURCE_TIME);
|
|
62
|
+
const nowMs = (time ? time.elapsed * 1000 : 0)
|
|
63
|
+
+ (typeof performance !== 'undefined' ? performance.now() : 0);
|
|
64
|
+
const events = bridge.pollEvents();
|
|
65
|
+
if (events.length === 0)
|
|
66
|
+
return;
|
|
67
|
+
const localZone = safeCurrentZone(this.currentZone);
|
|
68
|
+
for (let i = 0; i < events.length; i++) {
|
|
69
|
+
const ev = events[i];
|
|
70
|
+
if (!ev)
|
|
71
|
+
continue;
|
|
72
|
+
// Always push into the per-zone log (so debug HUDs can see all
|
|
73
|
+
// observed zones) - the local-zone filter only gates state
|
|
74
|
+
// mutation, not logging.
|
|
75
|
+
const entry = getOrCreateZoneEntry(log, ev.zone_id);
|
|
76
|
+
pushZoneEvent(entry, ev);
|
|
77
|
+
const isLocal = localZone === null
|
|
78
|
+
? true // no filter set: apply everything (single-zone consumer)
|
|
79
|
+
: ev.zone_id === localZone;
|
|
80
|
+
applyEvent(ev, entry, isLocal, knotCtx, stateRes, nowMs);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
function applyEvent(ev, entry, isLocal, knotCtx, stateRes, nowMs) {
|
|
85
|
+
switch (ev.type) {
|
|
86
|
+
case 'zone.boss.spawn': {
|
|
87
|
+
const e = ev;
|
|
88
|
+
const d = e.data;
|
|
89
|
+
// activeBossId is per-zone, so always update the per-zone log
|
|
90
|
+
// entry regardless of local filter.
|
|
91
|
+
entry.activeBossId = d.boss.boss_id;
|
|
92
|
+
if (isLocal && d.narrator_line) {
|
|
93
|
+
entry.lastNarratorLine = d.narrator_line;
|
|
94
|
+
entry.lastNarratorTtlMs = 0;
|
|
95
|
+
}
|
|
96
|
+
break;
|
|
97
|
+
}
|
|
98
|
+
case 'zone.boss.tick': {
|
|
99
|
+
// Log only. Renderer reads the most recent zone.boss.tick from
|
|
100
|
+
// entry.recent for HP / position.
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
case 'zone.boss.end': {
|
|
104
|
+
const e = ev;
|
|
105
|
+
// Clear active boss for this zone if the ended boss matches.
|
|
106
|
+
// (Defensive: a stale zone.boss.end for a different boss should
|
|
107
|
+
// not nuke the current one.)
|
|
108
|
+
if (entry.activeBossId === e.data.boss_id) {
|
|
109
|
+
entry.activeBossId = null;
|
|
110
|
+
}
|
|
111
|
+
break;
|
|
112
|
+
}
|
|
113
|
+
case 'zone.narrator': {
|
|
114
|
+
if (!isLocal)
|
|
115
|
+
break;
|
|
116
|
+
const e = ev;
|
|
117
|
+
entry.lastNarratorLine = e.data.line;
|
|
118
|
+
entry.lastNarratorTtlMs = e.data.ttl_ms;
|
|
119
|
+
break;
|
|
120
|
+
}
|
|
121
|
+
case 'zone.knot': {
|
|
122
|
+
if (!isLocal || !knotCtx)
|
|
123
|
+
break;
|
|
124
|
+
const e = ev;
|
|
125
|
+
const d = e.data;
|
|
126
|
+
knotCtx.knot = d.knot;
|
|
127
|
+
knotCtx.mood = d.mood;
|
|
128
|
+
knotCtx.beginFade(d.palette, d.fade_ms, nowMs);
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
131
|
+
case 'zone.state': {
|
|
132
|
+
if (!stateRes)
|
|
133
|
+
break;
|
|
134
|
+
const e = ev;
|
|
135
|
+
// State changes are applied to ALL zones we observe so a
|
|
136
|
+
// debug HUD that flips back to a foreign zone sees the right
|
|
137
|
+
// state. Per spec §4.3 the LOCAL filter is for "applies the
|
|
138
|
+
// gameplay effect"; the state map is observation-grade.
|
|
139
|
+
applyZoneStateChanges(stateRes, e.zone_id, e.data.changes);
|
|
140
|
+
break;
|
|
141
|
+
}
|
|
142
|
+
case 'zone.snapshot': {
|
|
143
|
+
const e = ev;
|
|
144
|
+
const d = e.data;
|
|
145
|
+
// Snapshot replaces local state wholesale.
|
|
146
|
+
if (stateRes) {
|
|
147
|
+
replaceZoneStateFromSnapshot(stateRes, e.zone_id, d.state);
|
|
148
|
+
}
|
|
149
|
+
// Reset active boss from snapshot.
|
|
150
|
+
entry.activeBossId = d.active_boss ? d.active_boss.boss_id : null;
|
|
151
|
+
// Apply snapshot's knot if present and we are the local zone.
|
|
152
|
+
if (isLocal && knotCtx && d.knot) {
|
|
153
|
+
knotCtx.knot = d.knot.knot;
|
|
154
|
+
knotCtx.mood = d.knot.mood;
|
|
155
|
+
knotCtx.beginFade(d.knot.palette, d.knot.fade_ms, nowMs);
|
|
156
|
+
}
|
|
157
|
+
break;
|
|
158
|
+
}
|
|
159
|
+
default: {
|
|
160
|
+
// Exhaustiveness check - if a new ZoneEventType is added without
|
|
161
|
+
// a case, TS will complain at compile time on `_unreachable`.
|
|
162
|
+
const _unreachable = ev;
|
|
163
|
+
void _unreachable;
|
|
164
|
+
break;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
function safeCurrentZone(fn) {
|
|
169
|
+
if (!fn)
|
|
170
|
+
return null;
|
|
171
|
+
try {
|
|
172
|
+
const z = fn();
|
|
173
|
+
return typeof z === 'string' && z.length > 0 ? z : null;
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
return null;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=zone-event-system.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zone-event-system.js","sourceRoot":"","sources":["../../../src/director/zone/zone-event-system.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface DirectorZoneStateResource {
|
|
2
|
+
byZone: Map<string, Map<string, unknown>>;
|
|
3
|
+
}
|
|
4
|
+
export declare const RESOURCE_DIRECTOR_ZONE_STATE = "director_zone_state";
|
|
5
|
+
export declare function createDirectorZoneStateResource(): DirectorZoneStateResource;
|
|
6
|
+
export declare function getOrCreateZoneStateMap(res: DirectorZoneStateResource, zoneId: string): Map<string, unknown>;
|
|
7
|
+
export declare function applyZoneStateChanges(res: DirectorZoneStateResource, zoneId: string, changes: ReadonlyArray<{
|
|
8
|
+
key: string;
|
|
9
|
+
value: unknown;
|
|
10
|
+
}>): void;
|
|
11
|
+
export declare function replaceZoneStateFromSnapshot(res: DirectorZoneStateResource, zoneId: string, state: ReadonlyArray<{
|
|
12
|
+
key: string;
|
|
13
|
+
value: unknown;
|
|
14
|
+
}>): void;
|
|
15
|
+
//# sourceMappingURL=zone-state-resource.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zone-state-resource.d.ts","sourceRoot":"","sources":["../../../src/director/zone/zone-state-resource.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,yBAAyB;IAGxC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC3C;AAED,eAAO,MAAM,4BAA4B,wBAAwB,CAAC;AAElE,wBAAgB,+BAA+B,IAAI,yBAAyB,CAE3E;AAID,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,yBAAyB,EAC9B,MAAM,EAAE,MAAM,GACb,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAMtB;AAKD,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,yBAAyB,EAC9B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,aAAa,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC,GACtD,IAAI,CAQN;AAMD,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,yBAAyB,EAC9B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,aAAa,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC,GACpD,IAAI,CAQN"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
// DirectorZoneStateResource - generic key-value store per zone
|
|
2
|
+
// mutated by zone.state events and replaced wholesale by
|
|
3
|
+
// zone.snapshot (LOOM-DIRECTOR-PROTOCOL-V2 §4.5).
|
|
4
|
+
//
|
|
5
|
+
// Naming note: the existing Phase 8 ZoneStateResource in
|
|
6
|
+
// src/zone/zone-state.ts tracks the LOCAL player's active zone +
|
|
7
|
+
// transition state. This is a distinct concern: the Director-driven
|
|
8
|
+
// per-zone key/value bag (door open, fire lit, knot pulse counter,
|
|
9
|
+
// etc.). To avoid a name collision we expose this as
|
|
10
|
+
// DirectorZoneStateResource at the symbol level. The spec's
|
|
11
|
+
// ZoneStateResource interface name from §4.5 is satisfied by the
|
|
12
|
+
// type alias `ZoneDirectorState` we re-export below; the engine's
|
|
13
|
+
// public surface uses the disambiguated name.
|
|
14
|
+
//
|
|
15
|
+
// The Director and the consumer agree on key naming offline. The
|
|
16
|
+
// engine treats values as `unknown` and never inspects them - it just
|
|
17
|
+
// ferries deltas + snapshots between event stream and the resource.
|
|
18
|
+
export const RESOURCE_DIRECTOR_ZONE_STATE = 'director_zone_state';
|
|
19
|
+
export function createDirectorZoneStateResource() {
|
|
20
|
+
return { byZone: new Map() };
|
|
21
|
+
}
|
|
22
|
+
// Get or lazily create the per-zone Map. Used by ZoneEventSystem on
|
|
23
|
+
// the first state event for a zone.
|
|
24
|
+
export function getOrCreateZoneStateMap(res, zoneId) {
|
|
25
|
+
const existing = res.byZone.get(zoneId);
|
|
26
|
+
if (existing)
|
|
27
|
+
return existing;
|
|
28
|
+
const fresh = new Map();
|
|
29
|
+
res.byZone.set(zoneId, fresh);
|
|
30
|
+
return fresh;
|
|
31
|
+
}
|
|
32
|
+
// Apply a delta of (key, value) changes into the zone's map.
|
|
33
|
+
// Handler for zone.state. Iterates without allocations on the hot
|
|
34
|
+
// path beyond the underlying Map.set.
|
|
35
|
+
export function applyZoneStateChanges(res, zoneId, changes) {
|
|
36
|
+
if (changes.length === 0)
|
|
37
|
+
return;
|
|
38
|
+
const map = getOrCreateZoneStateMap(res, zoneId);
|
|
39
|
+
for (let i = 0; i < changes.length; i++) {
|
|
40
|
+
const c = changes[i];
|
|
41
|
+
if (!c)
|
|
42
|
+
continue;
|
|
43
|
+
map.set(c.key, c.value);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// Replace the zone's map wholesale with the snapshot's contents.
|
|
47
|
+
// Handler for zone.snapshot. Drops any local key not present in the
|
|
48
|
+
// snapshot (per spec §4.3 "Replace local ZoneStateResource for this
|
|
49
|
+
// zone wholesale").
|
|
50
|
+
export function replaceZoneStateFromSnapshot(res, zoneId, state) {
|
|
51
|
+
const fresh = new Map();
|
|
52
|
+
for (let i = 0; i < state.length; i++) {
|
|
53
|
+
const c = state[i];
|
|
54
|
+
if (!c)
|
|
55
|
+
continue;
|
|
56
|
+
fresh.set(c.key, c.value);
|
|
57
|
+
}
|
|
58
|
+
res.byZone.set(zoneId, fresh);
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=zone-state-resource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zone-state-resource.js","sourceRoot":"","sources":["../../../src/director/zone/zone-state-resource.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,yDAAyD;AACzD,kDAAkD;AAClD,EAAE;AACF,yDAAyD;AACzD,iEAAiE;AACjE,oEAAoE;AACpE,mEAAmE;AACnE,qDAAqD;AACrD,4DAA4D;AAC5D,iEAAiE;AACjE,kEAAkE;AAClE,8CAA8C;AAC9C,EAAE;AACF,iEAAiE;AACjE,sEAAsE;AACtE,oEAAoE;AAQpE,MAAM,CAAC,MAAM,4BAA4B,GAAG,qBAAqB,CAAC;AAElE,MAAM,UAAU,+BAA+B;IAC7C,OAAO,EAAE,MAAM,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;AAC/B,CAAC;AAED,oEAAoE;AACpE,oCAAoC;AACpC,MAAM,UAAU,uBAAuB,CACrC,GAA8B,EAC9B,MAAc;IAEd,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACxC,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,MAAM,KAAK,GAAyB,IAAI,GAAG,EAAE,CAAC;IAC9C,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC9B,OAAO,KAAK,CAAC;AACf,CAAC;AAED,6DAA6D;AAC7D,kEAAkE;AAClE,sCAAsC;AACtC,MAAM,UAAU,qBAAqB,CACnC,GAA8B,EAC9B,MAAc,EACd,OAAuD;IAEvD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACjC,MAAM,GAAG,GAAG,uBAAuB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,CAAC;YAAE,SAAS;QACjB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,iEAAiE;AACjE,oEAAoE;AACpE,oEAAoE;AACpE,oBAAoB;AACpB,MAAM,UAAU,4BAA4B,CAC1C,GAA8B,EAC9B,MAAc,EACd,KAAqD;IAErD,MAAM,KAAK,GAAyB,IAAI,GAAG,EAAE,CAAC;IAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,CAAC,CAAC;YAAE,SAAS;QACjB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IACD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAChC,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -63,6 +63,19 @@ export type { DirectorEventLog } from './director/director-system.js';
|
|
|
63
63
|
export { DirectorSystem, RESOURCE_DIRECTOR_LOG, createDirectorEventLog, } from './director/director-system.js';
|
|
64
64
|
export type { DirectorEncounterSystemOptions } from './director/director-encounter-system.js';
|
|
65
65
|
export { DirectorEncounterSystem } from './director/director-encounter-system.js';
|
|
66
|
+
export type { ZoneEventEnvelope, ZoneEvent, ZoneEventType, ZoneEventDataMap, ZoneBossSpec, ZoneBossSpawnData, ZoneBossTickData, ZoneBossEndData, ZoneBossOutcome, ZoneBossHit, ZoneNarratorData, ZoneKnotData, ZoneStateData, ZoneSnapshotData, ZoneStateChange, } from './director/zone/zone-event-envelope.js';
|
|
67
|
+
export { parseZoneEnvelope, parseZoneEnvelopeJson, priorityFor as zonePriorityFor, ZoneEventEnvelopeParseError, } from './director/zone/zone-event-envelope.js';
|
|
68
|
+
export type { IZoneEventBridge, ZoneEventBridgeStatus, ZoneEventBridgeStats, } from './director/zone/zone-event-bridge.js';
|
|
69
|
+
export { RESOURCE_ZONE_EVENT_BRIDGE } from './director/zone/zone-event-bridge.js';
|
|
70
|
+
export { MockZoneBridge } from './director/zone/mock-zone-bridge.js';
|
|
71
|
+
export type { SSEZoneBridgeOptions, SSEZoneBridgeEventSource, } from './director/zone/sse-zone-bridge.js';
|
|
72
|
+
export { SSEZoneBridge } from './director/zone/sse-zone-bridge.js';
|
|
73
|
+
export type { ZoneEventLog, ZoneEventLogEntry, } from './director/zone/zone-event-log.js';
|
|
74
|
+
export { RESOURCE_ZONE_EVENT_LOG, ZONE_RING_SIZE, createZoneEventLog, getOrCreateZoneEntry, pushZoneEvent, } from './director/zone/zone-event-log.js';
|
|
75
|
+
export type { DirectorZoneStateResource } from './director/zone/zone-state-resource.js';
|
|
76
|
+
export { RESOURCE_DIRECTOR_ZONE_STATE, createDirectorZoneStateResource, getOrCreateZoneStateMap, applyZoneStateChanges, replaceZoneStateFromSnapshot, } from './director/zone/zone-state-resource.js';
|
|
77
|
+
export type { ZoneEventSystemOptions } from './director/zone/zone-event-system.js';
|
|
78
|
+
export { ZoneEventSystem } from './director/zone/zone-event-system.js';
|
|
66
79
|
export { HealthPool, POOL_HEALTH, HEALTH_FLAG_ACTIVE, HEALTH_FLAG_DEAD, HEALTH_FLAG_INVULNERABLE, } from './components/health.js';
|
|
67
80
|
export { PursuePool, POOL_PURSUE, PURSUE_FLAG_ACTIVE, } from './components/pursue.js';
|
|
68
81
|
export type { KillEvent } from './systems/damage-system.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -57,6 +57,13 @@ export { SnapshotRecoveryHelper, SnapshotFetchError, } from './director/snapshot
|
|
|
57
57
|
export { KnotContextResource } from './director/knot-context-resource.js';
|
|
58
58
|
export { DirectorSystem, RESOURCE_DIRECTOR_LOG, createDirectorEventLog, } from './director/director-system.js';
|
|
59
59
|
export { DirectorEncounterSystem } from './director/director-encounter-system.js';
|
|
60
|
+
export { parseZoneEnvelope, parseZoneEnvelopeJson, priorityFor as zonePriorityFor, ZoneEventEnvelopeParseError, } from './director/zone/zone-event-envelope.js';
|
|
61
|
+
export { RESOURCE_ZONE_EVENT_BRIDGE } from './director/zone/zone-event-bridge.js';
|
|
62
|
+
export { MockZoneBridge } from './director/zone/mock-zone-bridge.js';
|
|
63
|
+
export { SSEZoneBridge } from './director/zone/sse-zone-bridge.js';
|
|
64
|
+
export { RESOURCE_ZONE_EVENT_LOG, ZONE_RING_SIZE, createZoneEventLog, getOrCreateZoneEntry, pushZoneEvent, } from './director/zone/zone-event-log.js';
|
|
65
|
+
export { RESOURCE_DIRECTOR_ZONE_STATE, createDirectorZoneStateResource, getOrCreateZoneStateMap, applyZoneStateChanges, replaceZoneStateFromSnapshot, } from './director/zone/zone-state-resource.js';
|
|
66
|
+
export { ZoneEventSystem } from './director/zone/zone-event-system.js';
|
|
60
67
|
// Combat (Phase 7): health, damage, simple AI, attack. Engine-side
|
|
61
68
|
// primitives that the actual Survivor port will use. The full
|
|
62
69
|
// Survivor wave engine sits on top of these in subsequent sessions.
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,qDAAqD;AAErD,qEAAqE;AACrE,kEAAkE;AAClE,kEAAkE;AAClE,gDAAgD;AAChD,gDAAgD;AAChD,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAQ,CAAC;AAI5C,OAAO,EACL,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,aAAa,GACd,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,IAAI,EACJ,SAAS,EACT,eAAe,EACf,eAAe,EACf,SAAS,EACT,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,cAAc,EACd,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAIzB,OAAO,EACL,eAAe,EACf,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,UAAU,GACX,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAEhC,WAAW;AACX,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEhE,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,EACnB,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,wBAAwB,EACxB,aAAa,EACb,eAAe,EACf,eAAe,EACf,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AAExB,kBAAkB;AAClB,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAEvE,gBAAgB;AAChB,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAc3E,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,aAAa,GACd,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,cAAc,GACf,MAAM,+BAA+B,CAAC;AAEvC,kEAAkE;AAClE,iEAAiE;AACjE,oEAAoE;AACpE,mEAAmE;AACnE,sCAAsC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EACL,YAAY,EACZ,qBAAqB,GACtB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,aAAa,EACb,mBAAmB,GACpB,MAAM,8BAA8B,CAAC;AAKtC,OAAO,EACL,eAAe,EACf,eAAe,EACf,kBAAkB,GACnB,MAAM,4CAA4C,CAAC;AAEpD,OAAO,EACL,cAAc,EACd,eAAe,EACf,UAAU,EACV,UAAU,EACV,WAAW,EACX,SAAS,EACT,UAAU,EACV,SAAS,EACT,WAAW,GACZ,MAAM,8BAA8B,CAAC;AAWtC,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,gCAAgC,CAAC;AAOxC,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,aAAa,EACb,kBAAkB,GACnB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAOhF,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,wBAAwB,EACxB,aAAa,GACd,MAAM,yCAAyC,CAAC;AACjD,OAAO,EACL,qBAAqB,EACrB,YAAY,GACb,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAI3E,OAAO,EACL,QAAQ,EACR,kBAAkB,EAClB,0BAA0B,EAC1B,4BAA4B,GAC7B,MAAM,sBAAsB,CAAC;AAS9B,OAAO,EACL,YAAY,EACZ,sBAAsB,EACtB,cAAc,GACf,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAQnE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAKtD,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,wBAAwB,CAAC;AAiChC,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,WAAW,EACX,uBAAuB,GACxB,MAAM,8BAA8B,CAAC;AAMtC,OAAO,EACL,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAExE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAKtE,OAAO,EACL,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAE1E,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type { IAIPlugin, EmittedEvents, PluginContext, PeerInfo, PlayerAction, CharacterState, PluginStorage, PluginLogger, ZoneEvent, } from '../director/ai/plugin.js';
|
|
2
|
+
export { AIPluginRegistry, AIPluginDuplicateError, } from '../director/ai/ai-plugin-registry.js';
|
|
3
|
+
export { MapPluginStorage, ConsolePluginLogger, buildPluginContext, } from '../director/ai/plugin-context.js';
|
|
4
|
+
export type { BuildPluginContextOptions } from '../director/ai/plugin-context.js';
|
|
5
|
+
export { MockAIPlugin, } from '../director/ai/mock-ai-plugin.js';
|
|
6
|
+
export type { MockAIPluginOptions, MockAIPluginScriptEntry, } from '../director/ai/mock-ai-plugin.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AA6BA,YAAY,EACV,SAAS,EACT,aAAa,EACb,aAAa,EACb,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,aAAa,EACb,YAAY,EACZ,SAAS,GACV,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,sCAAsC,CAAC;AAG9C,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,kCAAkC,CAAC;AAC1C,YAAY,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAElF,OAAO,EACL,YAAY,GACb,MAAM,kCAAkC,CAAC;AAC1C,YAAY,EACV,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,kCAAkC,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// Loom Engine - server-side entry point.
|
|
2
|
+
//
|
|
3
|
+
// NOT imported by the browser bundle. The default browser export
|
|
4
|
+
// (`@sadhaka/loom-engine`) deliberately excludes everything in this
|
|
5
|
+
// module so LLM-backed plugins, server-side storage adapters, and
|
|
6
|
+
// other Node-only code never ship to the client.
|
|
7
|
+
//
|
|
8
|
+
// Consumers wire LLM-backed plugins by implementing IAIPlugin and
|
|
9
|
+
// registering with AIPluginRegistry. A typical server bootstrap:
|
|
10
|
+
//
|
|
11
|
+
// import {
|
|
12
|
+
// AIPluginRegistry,
|
|
13
|
+
// MapPluginStorage,
|
|
14
|
+
// ConsolePluginLogger,
|
|
15
|
+
// } from '@sadhaka/loom-engine/server';
|
|
16
|
+
//
|
|
17
|
+
// const registry = new AIPluginRegistry();
|
|
18
|
+
// const storage = new MapPluginStorage();
|
|
19
|
+
// registry.register(new MyAnthropicPlugin({...}));
|
|
20
|
+
// // per-tick / per-event:
|
|
21
|
+
// const ctx = buildPluginContext({ pluginName: 'my-plugin', storage });
|
|
22
|
+
// const emitted = await registry.dispatchTick(ctx);
|
|
23
|
+
// // emitted.characterEvents -> v1 stream
|
|
24
|
+
// // emitted.zoneEvents -> v2 zone log + presence fanout
|
|
25
|
+
//
|
|
26
|
+
// This entry corresponds to the "./server" exports field added in
|
|
27
|
+
// package.json (LOOM-DIRECTOR-PROTOCOL-V2 §5.5).
|
|
28
|
+
// ----- Registry -----
|
|
29
|
+
export { AIPluginRegistry, AIPluginDuplicateError, } from '../director/ai/ai-plugin-registry.js';
|
|
30
|
+
// ----- Reference impls -----
|
|
31
|
+
export { MapPluginStorage, ConsolePluginLogger, buildPluginContext, } from '../director/ai/plugin-context.js';
|
|
32
|
+
export { MockAIPlugin, } from '../director/ai/mock-ai-plugin.js';
|
|
33
|
+
//# sourceMappingURL=index.js.map
|