@ai-rpg-engine/modules 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/dist/belief-provenance.d.ts +41 -0
  2. package/dist/belief-provenance.d.ts.map +1 -0
  3. package/dist/belief-provenance.js +254 -0
  4. package/dist/belief-provenance.js.map +1 -0
  5. package/dist/belief-provenance.test.d.ts +2 -0
  6. package/dist/belief-provenance.test.d.ts.map +1 -0
  7. package/dist/belief-provenance.test.js +139 -0
  8. package/dist/belief-provenance.test.js.map +1 -0
  9. package/dist/cognition-core.d.ts +89 -0
  10. package/dist/cognition-core.d.ts.map +1 -0
  11. package/dist/cognition-core.js +370 -0
  12. package/dist/cognition-core.js.map +1 -0
  13. package/dist/cognition-core.test.d.ts +2 -0
  14. package/dist/cognition-core.test.d.ts.map +1 -0
  15. package/dist/cognition-core.test.js +215 -0
  16. package/dist/cognition-core.test.js.map +1 -0
  17. package/dist/combat-core.d.ts +11 -0
  18. package/dist/combat-core.d.ts.map +1 -0
  19. package/dist/combat-core.js +152 -0
  20. package/dist/combat-core.js.map +1 -0
  21. package/dist/dialogue-core.d.ts +10 -0
  22. package/dist/dialogue-core.d.ts.map +1 -0
  23. package/dist/dialogue-core.js +172 -0
  24. package/dist/dialogue-core.js.map +1 -0
  25. package/dist/district-core.d.ts +59 -0
  26. package/dist/district-core.d.ts.map +1 -0
  27. package/dist/district-core.js +224 -0
  28. package/dist/district-core.js.map +1 -0
  29. package/dist/district-core.test.d.ts +2 -0
  30. package/dist/district-core.test.d.ts.map +1 -0
  31. package/dist/district-core.test.js +157 -0
  32. package/dist/district-core.test.js.map +1 -0
  33. package/dist/environment-core.d.ts +78 -0
  34. package/dist/environment-core.d.ts.map +1 -0
  35. package/dist/environment-core.js +229 -0
  36. package/dist/environment-core.js.map +1 -0
  37. package/dist/environment-core.test.d.ts +2 -0
  38. package/dist/environment-core.test.d.ts.map +1 -0
  39. package/dist/environment-core.test.js +252 -0
  40. package/dist/environment-core.test.js.map +1 -0
  41. package/dist/faction-cognition.d.ts +39 -0
  42. package/dist/faction-cognition.d.ts.map +1 -0
  43. package/dist/faction-cognition.js +139 -0
  44. package/dist/faction-cognition.js.map +1 -0
  45. package/dist/faction-cognition.test.d.ts +2 -0
  46. package/dist/faction-cognition.test.d.ts.map +1 -0
  47. package/dist/faction-cognition.test.js +166 -0
  48. package/dist/faction-cognition.test.js.map +1 -0
  49. package/dist/index.d.ts +31 -0
  50. package/dist/index.d.ts.map +1 -0
  51. package/dist/index.js +18 -0
  52. package/dist/index.js.map +1 -0
  53. package/dist/inventory-core.d.ts +10 -0
  54. package/dist/inventory-core.d.ts.map +1 -0
  55. package/dist/inventory-core.js +69 -0
  56. package/dist/inventory-core.js.map +1 -0
  57. package/dist/knowledge-decay.test.d.ts +2 -0
  58. package/dist/knowledge-decay.test.d.ts.map +1 -0
  59. package/dist/knowledge-decay.test.js +143 -0
  60. package/dist/knowledge-decay.test.js.map +1 -0
  61. package/dist/narrative-authority.d.ts +40 -0
  62. package/dist/narrative-authority.d.ts.map +1 -0
  63. package/dist/narrative-authority.js +89 -0
  64. package/dist/narrative-authority.js.map +1 -0
  65. package/dist/narrative-authority.test.d.ts +2 -0
  66. package/dist/narrative-authority.test.d.ts.map +1 -0
  67. package/dist/narrative-authority.test.js +237 -0
  68. package/dist/narrative-authority.test.js.map +1 -0
  69. package/dist/observer-presentation.d.ts +74 -0
  70. package/dist/observer-presentation.d.ts.map +1 -0
  71. package/dist/observer-presentation.js +277 -0
  72. package/dist/observer-presentation.js.map +1 -0
  73. package/dist/observer-presentation.test.d.ts +2 -0
  74. package/dist/observer-presentation.test.d.ts.map +1 -0
  75. package/dist/observer-presentation.test.js +156 -0
  76. package/dist/observer-presentation.test.js.map +1 -0
  77. package/dist/perception-filter.d.ts +46 -0
  78. package/dist/perception-filter.d.ts.map +1 -0
  79. package/dist/perception-filter.js +281 -0
  80. package/dist/perception-filter.js.map +1 -0
  81. package/dist/perception-filter.test.d.ts +2 -0
  82. package/dist/perception-filter.test.d.ts.map +1 -0
  83. package/dist/perception-filter.test.js +308 -0
  84. package/dist/perception-filter.test.js.map +1 -0
  85. package/dist/progression-core.d.ts +63 -0
  86. package/dist/progression-core.d.ts.map +1 -0
  87. package/dist/progression-core.js +232 -0
  88. package/dist/progression-core.js.map +1 -0
  89. package/dist/progression-core.test.d.ts +2 -0
  90. package/dist/progression-core.test.d.ts.map +1 -0
  91. package/dist/progression-core.test.js +328 -0
  92. package/dist/progression-core.test.js.map +1 -0
  93. package/dist/rumor-propagation.d.ts +31 -0
  94. package/dist/rumor-propagation.d.ts.map +1 -0
  95. package/dist/rumor-propagation.js +180 -0
  96. package/dist/rumor-propagation.js.map +1 -0
  97. package/dist/rumor-propagation.test.d.ts +2 -0
  98. package/dist/rumor-propagation.test.d.ts.map +1 -0
  99. package/dist/rumor-propagation.test.js +176 -0
  100. package/dist/rumor-propagation.test.js.map +1 -0
  101. package/dist/simulation-inspector.d.ts +78 -0
  102. package/dist/simulation-inspector.d.ts.map +1 -0
  103. package/dist/simulation-inspector.js +263 -0
  104. package/dist/simulation-inspector.js.map +1 -0
  105. package/dist/simulation-inspector.test.d.ts +2 -0
  106. package/dist/simulation-inspector.test.d.ts.map +1 -0
  107. package/dist/simulation-inspector.test.js +152 -0
  108. package/dist/simulation-inspector.test.js.map +1 -0
  109. package/dist/status-core.d.ts +17 -0
  110. package/dist/status-core.d.ts.map +1 -0
  111. package/dist/status-core.js +106 -0
  112. package/dist/status-core.js.map +1 -0
  113. package/dist/traversal-core.d.ts +3 -0
  114. package/dist/traversal-core.d.ts.map +1 -0
  115. package/dist/traversal-core.js +93 -0
  116. package/dist/traversal-core.js.map +1 -0
  117. package/package.json +34 -0
@@ -0,0 +1,176 @@
1
+ import { describe, test, expect } from 'vitest';
2
+ import { createTestEngine } from '@ai-rpg-engine/core';
3
+ import { createCognitionCore, getCognition, setBelief } from './cognition-core.js';
4
+ import { createPerceptionFilter } from './perception-filter.js';
5
+ import { createEnvironmentCore } from './environment-core.js';
6
+ import { createFactionCognition, getFactionCognition, factionBelieves, getFactionBelief, } from './faction-cognition.js';
7
+ import { createRumorPropagation, getRumorLog, getRumorsFrom, getRumorsToFaction, } from './rumor-propagation.js';
8
+ function makeGuard(id, zone) {
9
+ return {
10
+ id,
11
+ blueprintId: id,
12
+ type: 'npc',
13
+ name: `Guard ${id}`,
14
+ tags: ['enemy'],
15
+ stats: { vigor: 5, instinct: 8, will: 4 },
16
+ resources: { hp: 20, stamina: 10 },
17
+ statuses: [],
18
+ zoneId: zone,
19
+ ai: { profileId: 'aggressive', goals: ['guard'], fears: [], alertLevel: 0, knowledge: {} },
20
+ };
21
+ }
22
+ const player = {
23
+ id: 'player',
24
+ blueprintId: 'player',
25
+ type: 'player',
26
+ name: 'Hero',
27
+ tags: ['player'],
28
+ stats: { vigor: 7, instinct: 5, will: 5 },
29
+ resources: { hp: 30, stamina: 15 },
30
+ statuses: [],
31
+ zoneId: 'courtyard',
32
+ };
33
+ const zones = [
34
+ { id: 'courtyard', roomId: 'castle', name: 'Courtyard', tags: [], neighbors: ['gatehouse'] },
35
+ { id: 'gatehouse', roomId: 'castle', name: 'Gatehouse', tags: [], neighbors: ['courtyard'] },
36
+ ];
37
+ describe('rumor-propagation', () => {
38
+ function createEngine(rumorConfig) {
39
+ return createTestEngine({
40
+ modules: [
41
+ createCognitionCore(),
42
+ createPerceptionFilter(),
43
+ createEnvironmentCore(),
44
+ createFactionCognition({
45
+ factions: [
46
+ { factionId: 'castle-guard', entityIds: ['guard_1', 'guard_2'], cohesion: 0.9 },
47
+ ],
48
+ }),
49
+ createRumorPropagation(rumorConfig),
50
+ ],
51
+ entities: [player, makeGuard('guard_1', 'courtyard'), makeGuard('guard_2', 'gatehouse')],
52
+ zones,
53
+ playerId: 'player',
54
+ startZone: 'courtyard',
55
+ });
56
+ }
57
+ test('combat event schedules rumor propagation', () => {
58
+ const engine = createEngine({ propagationDelay: 2 });
59
+ engine.drainEvents();
60
+ // Simulate combat — guard_1 is in the courtyard with the player
61
+ engine.store.emitEvent('combat.contact.hit', {
62
+ attackerId: 'player',
63
+ targetId: 'guard_1',
64
+ damage: 5,
65
+ }, { actorId: 'player', targetIds: ['guard_1'] });
66
+ // Guard_1 now believes player is hostile (direct experience via cognition-core)
67
+ const guard1Cog = getCognition(engine.world, 'guard_1');
68
+ expect(guard1Cog.beliefs.some(b => b.subject === 'player' && b.key === 'hostile')).toBe(true);
69
+ // Rumor should be logged
70
+ const rumors = getRumorLog(engine.world);
71
+ expect(rumors.length).toBeGreaterThan(0);
72
+ expect(rumors[0].sourceEntityId).toBe('guard_1');
73
+ expect(rumors[0].targetFactionId).toBe('castle-guard');
74
+ });
75
+ test('rumor arrives at faction after propagation delay', () => {
76
+ const engine = createEngine({ propagationDelay: 1 });
77
+ engine.drainEvents();
78
+ // Combat event at tick 0
79
+ engine.store.emitEvent('combat.contact.hit', {
80
+ attackerId: 'player',
81
+ targetId: 'guard_1',
82
+ damage: 5,
83
+ }, { actorId: 'player', targetIds: ['guard_1'] });
84
+ // Faction should NOT have the belief yet (pending, not delivered)
85
+ const factionCogBefore = getFactionCognition(engine.world, 'castle-guard');
86
+ expect(factionBelieves(factionCogBefore, 'player', 'hostile')).toBe(false);
87
+ // First action at tick 0: processPending finds nothing due (needs ≤0), advances to tick 1
88
+ engine.submitAction('faction-tick');
89
+ // Second action at tick 1: processPending finds pending at tick 1 → fires rumor
90
+ engine.submitAction('faction-tick');
91
+ // Now the faction should have received the rumor
92
+ const factionCogAfter = getFactionCognition(engine.world, 'castle-guard');
93
+ expect(factionBelieves(factionCogAfter, 'player', 'hostile', true)).toBe(true);
94
+ });
95
+ test('rumor confidence is reduced by distortion', () => {
96
+ const engine = createEngine({ propagationDelay: 1, distortionPerHop: 0.1 });
97
+ engine.drainEvents();
98
+ // Set a high-confidence belief on guard_1
99
+ const guard1Cog = getCognition(engine.world, 'guard_1');
100
+ setBelief(guard1Cog, 'player', 'hostile', true, 1.0, 'observed', 0);
101
+ engine.store.emitEvent('combat.contact.hit', {
102
+ attackerId: 'player',
103
+ targetId: 'guard_1',
104
+ damage: 5,
105
+ }, { actorId: 'player', targetIds: ['guard_1'] });
106
+ // Advance past delay to deliver the rumor
107
+ engine.submitAction('faction-tick');
108
+ engine.submitAction('faction-tick');
109
+ const factionCog = getFactionCognition(engine.world, 'castle-guard');
110
+ const belief = getFactionBelief(factionCog, 'player', 'hostile');
111
+ // Confidence should be less than original (distortion + cohesion scaling)
112
+ expect(belief).toBeDefined();
113
+ expect(belief.confidence).toBeLessThan(1.0);
114
+ });
115
+ test('getRumorsFrom filters by source entity', () => {
116
+ const engine = createEngine({ propagationDelay: 1 });
117
+ engine.drainEvents();
118
+ engine.store.emitEvent('combat.contact.hit', {
119
+ attackerId: 'player',
120
+ targetId: 'guard_1',
121
+ damage: 5,
122
+ }, { actorId: 'player', targetIds: ['guard_1'] });
123
+ const fromGuard1 = getRumorsFrom(engine.world, 'guard_1');
124
+ const fromGuard2 = getRumorsFrom(engine.world, 'guard_2');
125
+ expect(fromGuard1.length).toBeGreaterThan(0);
126
+ expect(fromGuard2.length).toBe(0);
127
+ });
128
+ test('getRumorsToFaction filters by faction', () => {
129
+ const engine = createEngine({ propagationDelay: 1 });
130
+ engine.drainEvents();
131
+ engine.store.emitEvent('combat.contact.hit', {
132
+ attackerId: 'player',
133
+ targetId: 'guard_1',
134
+ damage: 5,
135
+ }, { actorId: 'player', targetIds: ['guard_1'] });
136
+ const toCastleGuard = getRumorsToFaction(engine.world, 'castle-guard');
137
+ const toBandits = getRumorsToFaction(engine.world, 'bandits');
138
+ expect(toCastleGuard.length).toBeGreaterThan(0);
139
+ expect(toBandits.length).toBe(0);
140
+ });
141
+ test('low confidence beliefs are not propagated', () => {
142
+ const engine = createEngine({ propagationDelay: 1, confidenceThreshold: 0.5 });
143
+ engine.drainEvents();
144
+ // Give guard_1 a low-confidence belief
145
+ const guard1Cog = getCognition(engine.world, 'guard_1');
146
+ setBelief(guard1Cog, 'intruder', 'present', true, 0.2, 'assumed', 0);
147
+ // Fire an event that triggers rumor check — but the belief confidence is below threshold
148
+ engine.store.emitEvent('world.zone.entered', {
149
+ zoneId: 'courtyard',
150
+ }, { actorId: 'player' });
151
+ // The low-confidence belief about 'intruder' shouldn't propagate
152
+ const rumors = getRumorLog(engine.world);
153
+ const intruderRumors = rumors.filter(r => r.subject === 'intruder');
154
+ expect(intruderRumors.length).toBe(0);
155
+ });
156
+ test('dedup prevents redundant rumor propagation', () => {
157
+ const engine = createEngine({ propagationDelay: 2 });
158
+ engine.drainEvents();
159
+ // Two combat events in quick succession
160
+ engine.store.emitEvent('combat.contact.hit', {
161
+ attackerId: 'player',
162
+ targetId: 'guard_1',
163
+ damage: 5,
164
+ }, { actorId: 'player', targetIds: ['guard_1'] });
165
+ engine.store.emitEvent('combat.contact.hit', {
166
+ attackerId: 'player',
167
+ targetId: 'guard_1',
168
+ damage: 3,
169
+ }, { actorId: 'player', targetIds: ['guard_1'] });
170
+ // Should only have one rumor per entity per belief (dedup)
171
+ const rumors = getRumorsFrom(engine.world, 'guard_1');
172
+ const hostileRumors = rumors.filter(r => r.key === 'hostile');
173
+ expect(hostileRumors.length).toBe(1);
174
+ });
175
+ });
176
+ //# sourceMappingURL=rumor-propagation.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rumor-propagation.test.js","sourceRoot":"","sources":["../src/rumor-propagation.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ import type { EngineModule, WorldState } from '@ai-rpg-engine/core';
2
+ import type { Belief, Memory } from './cognition-core.js';
3
+ import type { PerceivedEvent } from './perception-filter.js';
4
+ import type { FactionBelief } from './faction-cognition.js';
5
+ import type { RumorRecord } from './rumor-propagation.js';
6
+ import type { DistrictMetrics } from './district-core.js';
7
+ export type EntityInspection = {
8
+ id: string;
9
+ name: string;
10
+ zone: string | undefined;
11
+ faction: string | undefined;
12
+ cognition: {
13
+ beliefs: Belief[];
14
+ recentMemories: Memory[];
15
+ morale: number;
16
+ suspicion: number;
17
+ currentIntent: string | null;
18
+ };
19
+ perceptions: PerceivedEvent[];
20
+ };
21
+ export type FactionInspection = {
22
+ id: string;
23
+ members: string[];
24
+ beliefs: FactionBelief[];
25
+ alertLevel: number;
26
+ cohesion: number;
27
+ recentRumors: RumorRecord[];
28
+ };
29
+ export type ZoneInspection = {
30
+ id: string;
31
+ name: string;
32
+ dynamicProperties: Record<string, number>;
33
+ entities: string[];
34
+ };
35
+ export type DistrictInspection = {
36
+ id: string;
37
+ name: string;
38
+ zoneIds: string[];
39
+ controllingFaction: string | undefined;
40
+ metrics: DistrictMetrics;
41
+ threatLevel: number;
42
+ eventCount: number;
43
+ };
44
+ export type SimulationSnapshot = {
45
+ tick: number;
46
+ entities: Record<string, EntityInspection>;
47
+ factions: Record<string, FactionInspection>;
48
+ zones: Record<string, ZoneInspection>;
49
+ districts: Record<string, DistrictInspection>;
50
+ rumorCount: number;
51
+ eventLogSize: number;
52
+ };
53
+ export declare function createSimulationInspector(): EngineModule;
54
+ /** Inspect a single entity's cognitive state */
55
+ export declare function inspectEntity(world: WorldState, entityId: string): EntityInspection | null;
56
+ /** Inspect all AI entities */
57
+ export declare function inspectAllEntities(world: WorldState): Record<string, EntityInspection>;
58
+ /** Inspect a single faction */
59
+ export declare function inspectFaction(world: WorldState, factionId: string): FactionInspection | null;
60
+ /** Inspect all factions */
61
+ export declare function inspectAllFactions(world: WorldState): Record<string, FactionInspection>;
62
+ /** Inspect a single zone's dynamic state */
63
+ export declare function inspectZone(world: WorldState, zoneId: string): ZoneInspection | null;
64
+ /** Inspect all zones */
65
+ export declare function inspectAllZones(world: WorldState): Record<string, ZoneInspection>;
66
+ /** Inspect a single district */
67
+ export declare function inspectDistrict(world: WorldState, districtId: string): DistrictInspection | null;
68
+ /** Inspect all districts */
69
+ export declare function inspectAllDistricts(world: WorldState): Record<string, DistrictInspection>;
70
+ /** Create a complete simulation snapshot */
71
+ export declare function createSnapshot(world: WorldState): SimulationSnapshot;
72
+ /** Format entity inspection as readable text */
73
+ export declare function formatEntityInspection(inspection: EntityInspection): string;
74
+ /** Format faction inspection as readable text */
75
+ export declare function formatFactionInspection(inspection: FactionInspection): string;
76
+ /** Format district inspection as readable text */
77
+ export declare function formatDistrictInspection(inspection: DistrictInspection): string;
78
+ //# sourceMappingURL=simulation-inspector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simulation-inspector.d.ts","sourceRoot":"","sources":["../src/simulation-inspector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,263 @@
1
+ // simulation-inspector — observability layer for the simulation
2
+ // Registers debug inspectors that expose entity cognition, faction beliefs,
3
+ // perception events, rumor traces, environmental state, and district memory.
4
+ import { getCognition } from './cognition-core.js';
5
+ import { getPerceptionLog } from './perception-filter.js';
6
+ import { getFactionCognition, getEntityFaction, getFactionMembers } from './faction-cognition.js';
7
+ import { getRumorLog, getRumorsToFaction } from './rumor-propagation.js';
8
+ import { getZoneProperty } from './environment-core.js';
9
+ import { getDistrictState, getDistrictDefinition, getAllDistrictIds, getDistrictThreatLevel } from './district-core.js';
10
+ // --- Module ---
11
+ export function createSimulationInspector() {
12
+ return {
13
+ id: 'simulation-inspector',
14
+ version: '0.1.0',
15
+ register(ctx) {
16
+ ctx.debug.registerInspector({
17
+ id: 'entity-cognition',
18
+ label: 'Entity Cognition',
19
+ inspect: (world) => inspectAllEntities(world),
20
+ });
21
+ ctx.debug.registerInspector({
22
+ id: 'faction-state',
23
+ label: 'Faction State',
24
+ inspect: (world) => inspectAllFactions(world),
25
+ });
26
+ ctx.debug.registerInspector({
27
+ id: 'environment-state',
28
+ label: 'Environment State',
29
+ inspect: (world) => inspectAllZones(world),
30
+ });
31
+ ctx.debug.registerInspector({
32
+ id: 'rumor-trace',
33
+ label: 'Rumor Trace',
34
+ inspect: (world) => getRumorLog(world),
35
+ });
36
+ ctx.debug.registerInspector({
37
+ id: 'district-state',
38
+ label: 'District State',
39
+ inspect: (world) => inspectAllDistricts(world),
40
+ });
41
+ ctx.debug.registerInspector({
42
+ id: 'simulation-snapshot',
43
+ label: 'Full Simulation Snapshot',
44
+ inspect: (world) => createSnapshot(world),
45
+ });
46
+ },
47
+ };
48
+ }
49
+ // --- Entity Inspection ---
50
+ /** Inspect a single entity's cognitive state */
51
+ export function inspectEntity(world, entityId) {
52
+ const entity = world.entities[entityId];
53
+ if (!entity)
54
+ return null;
55
+ const cog = getCognition(world, entityId);
56
+ const perceptions = world.modules['perception-filter']
57
+ ? getPerceptionLog(world, entityId)
58
+ : [];
59
+ return {
60
+ id: entity.id,
61
+ name: entity.name,
62
+ zone: entity.zoneId,
63
+ faction: getEntityFaction(world, entityId),
64
+ cognition: {
65
+ beliefs: cog.beliefs,
66
+ recentMemories: cog.memories.slice(-10),
67
+ morale: cog.morale,
68
+ suspicion: cog.suspicion,
69
+ currentIntent: cog.currentIntent,
70
+ },
71
+ perceptions: perceptions.slice(-20),
72
+ };
73
+ }
74
+ /** Inspect all AI entities */
75
+ export function inspectAllEntities(world) {
76
+ const result = {};
77
+ for (const entity of Object.values(world.entities)) {
78
+ if (!entity.ai)
79
+ continue;
80
+ const inspection = inspectEntity(world, entity.id);
81
+ if (inspection)
82
+ result[entity.id] = inspection;
83
+ }
84
+ return result;
85
+ }
86
+ // --- Faction Inspection ---
87
+ /** Inspect a single faction */
88
+ export function inspectFaction(world, factionId) {
89
+ if (!world.modules['faction-cognition'])
90
+ return null;
91
+ const factionCog = getFactionCognition(world, factionId);
92
+ const members = getFactionMembers(world, factionId);
93
+ const rumors = getRumorsToFaction(world, factionId);
94
+ return {
95
+ id: factionId,
96
+ members,
97
+ beliefs: factionCog.beliefs,
98
+ alertLevel: factionCog.alertLevel,
99
+ cohesion: factionCog.cohesion,
100
+ recentRumors: rumors.slice(-10),
101
+ };
102
+ }
103
+ /** Inspect all factions */
104
+ export function inspectAllFactions(world) {
105
+ if (!world.modules['faction-cognition'])
106
+ return {};
107
+ const modState = world.modules['faction-cognition'];
108
+ const result = {};
109
+ for (const factionId of Object.keys(modState.factionCognition)) {
110
+ const inspection = inspectFaction(world, factionId);
111
+ if (inspection)
112
+ result[factionId] = inspection;
113
+ }
114
+ return result;
115
+ }
116
+ // --- Zone Inspection ---
117
+ /** Inspect a single zone's dynamic state */
118
+ export function inspectZone(world, zoneId) {
119
+ const zone = world.zones[zoneId];
120
+ if (!zone)
121
+ return null;
122
+ const dynamicProperties = {};
123
+ const envState = world.modules['environment-core'];
124
+ if (envState?.dynamics?.[zoneId]) {
125
+ Object.assign(dynamicProperties, envState.dynamics[zoneId]);
126
+ }
127
+ // Add base properties
128
+ if (zone.noise !== undefined)
129
+ dynamicProperties.noise = getZoneProperty(world, zoneId, 'noise');
130
+ if (zone.light !== undefined)
131
+ dynamicProperties.light = getZoneProperty(world, zoneId, 'light');
132
+ if (zone.stability !== undefined)
133
+ dynamicProperties.stability = getZoneProperty(world, zoneId, 'stability');
134
+ const entities = Object.values(world.entities)
135
+ .filter((e) => e.zoneId === zoneId)
136
+ .map((e) => e.id);
137
+ return {
138
+ id: zoneId,
139
+ name: zone.name,
140
+ dynamicProperties,
141
+ entities,
142
+ };
143
+ }
144
+ /** Inspect all zones */
145
+ export function inspectAllZones(world) {
146
+ const result = {};
147
+ for (const zoneId of Object.keys(world.zones)) {
148
+ const inspection = inspectZone(world, zoneId);
149
+ if (inspection)
150
+ result[zoneId] = inspection;
151
+ }
152
+ return result;
153
+ }
154
+ // --- District Inspection ---
155
+ /** Inspect a single district */
156
+ export function inspectDistrict(world, districtId) {
157
+ if (!world.modules['district-core'])
158
+ return null;
159
+ const state = getDistrictState(world, districtId);
160
+ const def = getDistrictDefinition(world, districtId);
161
+ if (!state || !def)
162
+ return null;
163
+ return {
164
+ id: districtId,
165
+ name: def.name,
166
+ zoneIds: def.zoneIds,
167
+ controllingFaction: def.controllingFaction,
168
+ metrics: {
169
+ alertPressure: state.alertPressure,
170
+ rumorDensity: state.rumorDensity,
171
+ intruderLikelihood: state.intruderLikelihood,
172
+ surveillance: state.surveillance,
173
+ stability: state.stability,
174
+ },
175
+ threatLevel: getDistrictThreatLevel(world, districtId),
176
+ eventCount: state.eventCount,
177
+ };
178
+ }
179
+ /** Inspect all districts */
180
+ export function inspectAllDistricts(world) {
181
+ if (!world.modules['district-core'])
182
+ return {};
183
+ const result = {};
184
+ for (const districtId of getAllDistrictIds(world)) {
185
+ const inspection = inspectDistrict(world, districtId);
186
+ if (inspection)
187
+ result[districtId] = inspection;
188
+ }
189
+ return result;
190
+ }
191
+ // --- Full Snapshot ---
192
+ /** Create a complete simulation snapshot */
193
+ export function createSnapshot(world) {
194
+ return {
195
+ tick: world.meta.tick,
196
+ entities: inspectAllEntities(world),
197
+ factions: inspectAllFactions(world),
198
+ zones: inspectAllZones(world),
199
+ districts: inspectAllDistricts(world),
200
+ rumorCount: getRumorLog(world).length,
201
+ eventLogSize: world.eventLog.length,
202
+ };
203
+ }
204
+ // --- Text Formatters (for CLI output) ---
205
+ /** Format entity inspection as readable text */
206
+ export function formatEntityInspection(inspection) {
207
+ const lines = [];
208
+ lines.push(`Entity: ${inspection.name} (${inspection.id})`);
209
+ lines.push(` Zone: ${inspection.zone ?? 'none'}`);
210
+ lines.push(` Faction: ${inspection.faction ?? 'none'}`);
211
+ lines.push(` Morale: ${inspection.cognition.morale} Suspicion: ${inspection.cognition.suspicion}`);
212
+ lines.push(` Intent: ${inspection.cognition.currentIntent ?? 'none'}`);
213
+ if (inspection.cognition.beliefs.length > 0) {
214
+ lines.push(` Beliefs (${inspection.cognition.beliefs.length}):`);
215
+ for (const b of inspection.cognition.beliefs) {
216
+ lines.push(` ${b.subject}.${b.key} = ${b.value} (confidence: ${b.confidence.toFixed(2)}, source: ${b.source})`);
217
+ }
218
+ }
219
+ if (inspection.perceptions.length > 0) {
220
+ lines.push(` Recent Perceptions (${inspection.perceptions.length}):`);
221
+ for (const p of inspection.perceptions.slice(-5)) {
222
+ lines.push(` [tick ${p.tick}] ${p.detected ? 'detected' : 'missed'} via ${p.sense} (clarity: ${p.clarity.toFixed(2)})`);
223
+ }
224
+ }
225
+ return lines.join('\n');
226
+ }
227
+ /** Format faction inspection as readable text */
228
+ export function formatFactionInspection(inspection) {
229
+ const lines = [];
230
+ lines.push(`Faction: ${inspection.id}`);
231
+ lines.push(` Members: ${inspection.members.join(', ')}`);
232
+ lines.push(` Alert Level: ${inspection.alertLevel} Cohesion: ${inspection.cohesion.toFixed(2)}`);
233
+ if (inspection.beliefs.length > 0) {
234
+ lines.push(` Beliefs (${inspection.beliefs.length}):`);
235
+ for (const b of inspection.beliefs) {
236
+ lines.push(` ${b.subject}.${b.key} = ${b.value} (confidence: ${b.confidence.toFixed(2)}, sources: ${b.sourceEntities.join(', ')})`);
237
+ }
238
+ }
239
+ if (inspection.recentRumors.length > 0) {
240
+ lines.push(` Recent Rumors (${inspection.recentRumors.length}):`);
241
+ for (const r of inspection.recentRumors.slice(-5)) {
242
+ lines.push(` [tick ${r.originTick}] ${r.sourceEntityId} → ${r.subject}.${r.key} (distortion: ${r.distortion.toFixed(3)})`);
243
+ }
244
+ }
245
+ return lines.join('\n');
246
+ }
247
+ /** Format district inspection as readable text */
248
+ export function formatDistrictInspection(inspection) {
249
+ const lines = [];
250
+ lines.push(`District: ${inspection.name} (${inspection.id})`);
251
+ lines.push(` Zones: ${inspection.zoneIds.join(', ')}`);
252
+ lines.push(` Controlling Faction: ${inspection.controllingFaction ?? 'none'}`);
253
+ lines.push(` Threat Level: ${inspection.threatLevel}`);
254
+ lines.push(` Metrics:`);
255
+ lines.push(` Alert Pressure: ${inspection.metrics.alertPressure.toFixed(1)}`);
256
+ lines.push(` Rumor Density: ${inspection.metrics.rumorDensity.toFixed(1)}`);
257
+ lines.push(` Intruder Likelihood: ${inspection.metrics.intruderLikelihood.toFixed(1)}`);
258
+ lines.push(` Surveillance: ${inspection.metrics.surveillance.toFixed(1)}`);
259
+ lines.push(` Stability: ${inspection.metrics.stability.toFixed(1)}`);
260
+ lines.push(` Events Recorded: ${inspection.eventCount}`);
261
+ return lines.join('\n');
262
+ }
263
+ //# sourceMappingURL=simulation-inspector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simulation-inspector.js","sourceRoot":"","sources":["../src/simulation-inspector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=simulation-inspector.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simulation-inspector.test.d.ts","sourceRoot":"","sources":["../src/simulation-inspector.test.ts"],"names":[],"mappings":""}