@sharpee/stdlib 0.9.105 → 0.9.107
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/actions/standard/closing/closing.d.ts.map +1 -1
- package/actions/standard/closing/closing.js +25 -12
- package/actions/standard/closing/closing.js.map +1 -1
- package/actions/standard/opening/opening.d.ts.map +1 -1
- package/actions/standard/opening/opening.js +28 -12
- package/actions/standard/opening/opening.js.map +1 -1
- package/npc/character-messages.d.ts +30 -0
- package/npc/character-messages.d.ts.map +1 -0
- package/npc/character-messages.js +35 -0
- package/npc/character-messages.js.map +1 -0
- package/npc/character-observer.d.ts +76 -0
- package/npc/character-observer.d.ts.map +1 -0
- package/npc/character-observer.js +207 -0
- package/npc/character-observer.js.map +1 -0
- package/npc/index.d.ts +4 -1
- package/npc/index.d.ts.map +1 -1
- package/npc/index.js +12 -1
- package/npc/index.js.map +1 -1
- package/npc/lucidity-decay.d.ts +45 -0
- package/npc/lucidity-decay.d.ts.map +1 -0
- package/npc/lucidity-decay.js +97 -0
- package/npc/lucidity-decay.js.map +1 -0
- package/npc/npc-service.d.ts +16 -0
- package/npc/npc-service.d.ts.map +1 -1
- package/npc/npc-service.js +22 -0
- package/npc/npc-service.js.map +1 -1
- package/package.json +6 -6
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @sharpee/stdlib
|
|
2
2
|
|
|
3
|
-
Standard library for the Sharpee IF Platform -
|
|
3
|
+
Standard library for the Sharpee IF Platform - 48 standard IF actions with four-phase pattern (validate/execute/report/blocked).
|
|
4
4
|
|
|
5
5
|
## Overview
|
|
6
6
|
|
|
@@ -100,9 +100,9 @@ interface Action {
|
|
|
100
100
|
}
|
|
101
101
|
```
|
|
102
102
|
|
|
103
|
-
### Available Actions (
|
|
103
|
+
### Available Actions (48 Total)
|
|
104
104
|
|
|
105
|
-
**Movement**: going, entering, exiting
|
|
105
|
+
**Movement**: going, entering, exiting, climbing
|
|
106
106
|
**Manipulation**: taking, dropping, putting, inserting, removing, giving, throwing
|
|
107
107
|
**Containers/Doors**: opening, closing, locking, unlocking
|
|
108
108
|
**Examination**: looking, examining, searching, reading
|
|
@@ -111,7 +111,7 @@ interface Action {
|
|
|
111
111
|
**Wearables**: wearing, taking off
|
|
112
112
|
**Consumables**: eating, drinking
|
|
113
113
|
**Senses**: touching, smelling, listening
|
|
114
|
-
**Meta**: inventory, score, help, save, restore, restart, quit, undo, wait, about, sleep
|
|
114
|
+
**Meta**: inventory, score, help, save, restore, restart, quit, undo, again, wait, about, version, sleep
|
|
115
115
|
|
|
116
116
|
## Language System
|
|
117
117
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"closing.d.ts","sourceRoot":"","sources":["../../../../../../../../repos/sharpee/packages/stdlib/src/actions/standard/closing/closing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,MAAM,EAAmC,MAAM,sBAAsB,CAAC;AAU/E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"closing.d.ts","sourceRoot":"","sources":["../../../../../../../../repos/sharpee/packages/stdlib/src/actions/standard/closing/closing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,MAAM,EAAmC,MAAM,sBAAsB,CAAC;AAU/E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAgBrD,eAAO,MAAM,aAAa,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,cAAc,CAAA;CA+O9D,CAAC"}
|
|
@@ -65,18 +65,21 @@ exports.closingAction = {
|
|
|
65
65
|
}
|
|
66
66
|
// Check for interceptor on the target entity (ADR-118)
|
|
67
67
|
const interceptorResult = (0, world_model_1.getInterceptorForAction)(noun, constants_1.IFActions.CLOSING);
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
68
|
+
const interceptor = interceptorResult?.interceptor;
|
|
69
|
+
const interceptorData = {};
|
|
70
|
+
// Store for later phases (blocked needs access to onBlocked)
|
|
71
|
+
const sharedData = getClosingSharedData(context);
|
|
72
|
+
sharedData.interceptor = interceptor;
|
|
73
|
+
sharedData.interceptorData = interceptorData;
|
|
74
|
+
// === PRE-VALIDATE HOOK ===
|
|
75
|
+
if (interceptor?.preValidate) {
|
|
76
|
+
const result = interceptor.preValidate(noun, context.world, context.player.id, interceptorData);
|
|
77
|
+
if (result !== null && !result.valid) {
|
|
78
|
+
return {
|
|
79
|
+
valid: false,
|
|
80
|
+
error: result.error,
|
|
81
|
+
params: result.params
|
|
82
|
+
};
|
|
80
83
|
}
|
|
81
84
|
}
|
|
82
85
|
// Check scope - must be able to reach the target
|
|
@@ -202,6 +205,16 @@ exports.closingAction = {
|
|
|
202
205
|
*/
|
|
203
206
|
blocked(context, result) {
|
|
204
207
|
const noun = context.command.directObject?.entity;
|
|
208
|
+
// === ON-BLOCKED HOOK ===
|
|
209
|
+
const sharedData = getClosingSharedData(context);
|
|
210
|
+
const interceptor = sharedData.interceptor;
|
|
211
|
+
const interceptorData = sharedData.interceptorData || {};
|
|
212
|
+
if (interceptor?.onBlocked && noun && result.error) {
|
|
213
|
+
const customEffects = interceptor.onBlocked(noun, context.world, context.player.id, result.error, interceptorData);
|
|
214
|
+
if (customEffects !== null) {
|
|
215
|
+
return customEffects.map(effect => context.event(effect.type, effect.payload));
|
|
216
|
+
}
|
|
217
|
+
}
|
|
205
218
|
const error = result.error || '';
|
|
206
219
|
// If error already contains dots (e.g., story interceptor ID), use as-is; otherwise prefix with action ID
|
|
207
220
|
const messageId = error.includes('.') ? error : `${context.action.id}.${error}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"closing.js","sourceRoot":"","sources":["../../../../../../../../../repos/sharpee/packages/stdlib/src/actions/standard/closing/closing.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;AAIH,
|
|
1
|
+
{"version":3,"file":"closing.js","sourceRoot":"","sources":["../../../../../../../../../repos/sharpee/packages/stdlib/src/actions/standard/closing/closing.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opening.d.ts","sourceRoot":"","sources":["../../../../../../../../repos/sharpee/packages/stdlib/src/actions/standard/opening/opening.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,MAAM,EAAmC,MAAM,sBAAsB,CAAC;AAM/E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"opening.d.ts","sourceRoot":"","sources":["../../../../../../../../repos/sharpee/packages/stdlib/src/actions/standard/opening/opening.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,MAAM,EAAmC,MAAM,sBAAsB,CAAC;AAM/E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAoBrD,eAAO,MAAM,aAAa,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,cAAc,CAAA;CA4M9D,CAAC"}
|
|
@@ -17,6 +17,9 @@ const world_model_1 = require("../../../../world-model/index.js");
|
|
|
17
17
|
const constants_1 = require("../../constants");
|
|
18
18
|
const types_1 = require("../../../scope/types");
|
|
19
19
|
const opening_messages_1 = require("./opening-messages");
|
|
20
|
+
function getOpeningSharedData(context) {
|
|
21
|
+
return context.sharedData;
|
|
22
|
+
}
|
|
20
23
|
exports.openingAction = {
|
|
21
24
|
id: constants_1.IFActions.OPENING,
|
|
22
25
|
// Default scope requirements for this action's slots
|
|
@@ -55,18 +58,21 @@ exports.openingAction = {
|
|
|
55
58
|
}
|
|
56
59
|
// Check for interceptor on the target entity (ADR-118)
|
|
57
60
|
const interceptorResult = (0, world_model_1.getInterceptorForAction)(noun, constants_1.IFActions.OPENING);
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
61
|
+
const interceptor = interceptorResult?.interceptor;
|
|
62
|
+
const interceptorData = {};
|
|
63
|
+
// Store for later phases (blocked needs access to onBlocked)
|
|
64
|
+
const sharedData = getOpeningSharedData(context);
|
|
65
|
+
sharedData.interceptor = interceptor;
|
|
66
|
+
sharedData.interceptorData = interceptorData;
|
|
67
|
+
// === PRE-VALIDATE HOOK ===
|
|
68
|
+
if (interceptor?.preValidate) {
|
|
69
|
+
const result = interceptor.preValidate(noun, context.world, context.player.id, interceptorData);
|
|
70
|
+
if (result !== null && !result.valid) {
|
|
71
|
+
return {
|
|
72
|
+
valid: false,
|
|
73
|
+
error: result.error,
|
|
74
|
+
params: result.params
|
|
75
|
+
};
|
|
70
76
|
}
|
|
71
77
|
}
|
|
72
78
|
// Check scope - must be able to reach the target
|
|
@@ -163,6 +169,16 @@ exports.openingAction = {
|
|
|
163
169
|
*/
|
|
164
170
|
blocked(context, result) {
|
|
165
171
|
const noun = context.command.directObject?.entity;
|
|
172
|
+
// === ON-BLOCKED HOOK ===
|
|
173
|
+
const sharedData = getOpeningSharedData(context);
|
|
174
|
+
const interceptor = sharedData.interceptor;
|
|
175
|
+
const interceptorData = sharedData.interceptorData || {};
|
|
176
|
+
if (interceptor?.onBlocked && noun && result.error) {
|
|
177
|
+
const customEffects = interceptor.onBlocked(noun, context.world, context.player.id, result.error, interceptorData);
|
|
178
|
+
if (customEffects !== null) {
|
|
179
|
+
return customEffects.map(effect => context.event(effect.type, effect.payload));
|
|
180
|
+
}
|
|
181
|
+
}
|
|
166
182
|
const error = result.error || '';
|
|
167
183
|
// If error already contains dots (e.g., story interceptor ID), use as-is; otherwise prefix with action ID
|
|
168
184
|
const messageId = error.includes('.') ? error : `${context.action.id}.${error}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opening.js","sourceRoot":"","sources":["../../../../../../../../../repos/sharpee/packages/stdlib/src/actions/standard/opening/opening.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;AAIH,
|
|
1
|
+
{"version":3,"file":"opening.js","sourceRoot":"","sources":["../../../../../../../../../repos/sharpee/packages/stdlib/src/actions/standard/opening/opening.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Character model message IDs (ADR-141)
|
|
3
|
+
*
|
|
4
|
+
* Semantic message IDs for character state change events.
|
|
5
|
+
* Actual text is provided by the language layer.
|
|
6
|
+
*
|
|
7
|
+
* Public interface: CharacterMessages const, CharacterMessageId type.
|
|
8
|
+
* Owner context: stdlib / npc
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Message IDs for character model state change events.
|
|
12
|
+
*
|
|
13
|
+
* These are emitted as observable behavior events when an NPC's
|
|
14
|
+
* cognitive or emotional state changes. Silent by default — authors
|
|
15
|
+
* opt in per NPC to surface them to the player.
|
|
16
|
+
*/
|
|
17
|
+
export declare const CharacterMessages: {
|
|
18
|
+
readonly LUCIDITY_SHIFT: "npc.character.lucidity_shift";
|
|
19
|
+
readonly LUCIDITY_BASELINE_RESTORED: "npc.character.lucidity_baseline_restored";
|
|
20
|
+
readonly HALLUCINATION_ONSET: "npc.character.hallucination_onset";
|
|
21
|
+
readonly MOOD_CHANGED: "npc.character.mood_changed";
|
|
22
|
+
readonly THREAT_CHANGED: "npc.character.threat_changed";
|
|
23
|
+
readonly DISPOSITION_CHANGED: "npc.character.disposition_changed";
|
|
24
|
+
readonly FACT_LEARNED: "npc.character.fact_learned";
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Type for character model message IDs.
|
|
28
|
+
*/
|
|
29
|
+
export type CharacterMessageId = (typeof CharacterMessages)[keyof typeof CharacterMessages];
|
|
30
|
+
//# sourceMappingURL=character-messages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"character-messages.d.ts","sourceRoot":"","sources":["../../../../../../repos/sharpee/packages/stdlib/src/npc/character-messages.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;CAmBpB,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,OAAO,iBAAiB,CAAC,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Character model message IDs (ADR-141)
|
|
4
|
+
*
|
|
5
|
+
* Semantic message IDs for character state change events.
|
|
6
|
+
* Actual text is provided by the language layer.
|
|
7
|
+
*
|
|
8
|
+
* Public interface: CharacterMessages const, CharacterMessageId type.
|
|
9
|
+
* Owner context: stdlib / npc
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.CharacterMessages = void 0;
|
|
13
|
+
/**
|
|
14
|
+
* Message IDs for character model state change events.
|
|
15
|
+
*
|
|
16
|
+
* These are emitted as observable behavior events when an NPC's
|
|
17
|
+
* cognitive or emotional state changes. Silent by default — authors
|
|
18
|
+
* opt in per NPC to surface them to the player.
|
|
19
|
+
*/
|
|
20
|
+
exports.CharacterMessages = {
|
|
21
|
+
// Lucidity transitions
|
|
22
|
+
LUCIDITY_SHIFT: 'npc.character.lucidity_shift',
|
|
23
|
+
LUCIDITY_BASELINE_RESTORED: 'npc.character.lucidity_baseline_restored',
|
|
24
|
+
// Cognitive events
|
|
25
|
+
HALLUCINATION_ONSET: 'npc.character.hallucination_onset',
|
|
26
|
+
// Mood changes
|
|
27
|
+
MOOD_CHANGED: 'npc.character.mood_changed',
|
|
28
|
+
// Threat changes
|
|
29
|
+
THREAT_CHANGED: 'npc.character.threat_changed',
|
|
30
|
+
// Disposition changes
|
|
31
|
+
DISPOSITION_CHANGED: 'npc.character.disposition_changed',
|
|
32
|
+
// Knowledge
|
|
33
|
+
FACT_LEARNED: 'npc.character.fact_learned',
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=character-messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"character-messages.js","sourceRoot":"","sources":["../../../../../../../repos/sharpee/packages/stdlib/src/npc/character-messages.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAEH;;;;;;GAMG;AACU,QAAA,iBAAiB,GAAG;IAC/B,uBAAuB;IACvB,cAAc,EAAE,8BAA8B;IAC9C,0BAA0B,EAAE,0CAA0C;IAEtE,mBAAmB;IACnB,mBAAmB,EAAE,mCAAmC;IAExD,eAAe;IACf,YAAY,EAAE,4BAA4B;IAE1C,iBAAiB;IACjB,cAAc,EAAE,8BAA8B;IAE9C,sBAAsB;IACtB,mBAAmB,EAAE,mCAAmC;IAExD,YAAY;IACZ,YAAY,EAAE,4BAA4B;CAClC,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Character observation handler (ADR-141)
|
|
3
|
+
*
|
|
4
|
+
* Processes events witnessed by NPCs through the cognitive profile filter
|
|
5
|
+
* and updates character model state accordingly.
|
|
6
|
+
*
|
|
7
|
+
* Public interface: observeEvent(), DefaultStateTransitions.
|
|
8
|
+
* Owner context: stdlib / npc
|
|
9
|
+
*/
|
|
10
|
+
import { ISemanticEvent, EntityId } from "../../core/index";
|
|
11
|
+
import { IFEntity, WorldModel, CharacterModelTrait } from "../../world-model/index";
|
|
12
|
+
/** A default state transition triggered by an event type. */
|
|
13
|
+
export interface StateTransitionRule {
|
|
14
|
+
/** Event type pattern to match (exact string match). */
|
|
15
|
+
eventType: string;
|
|
16
|
+
/** Threat delta when this event is observed. */
|
|
17
|
+
threatDelta?: number;
|
|
18
|
+
/** Mood valence delta. */
|
|
19
|
+
moodValenceDelta?: number;
|
|
20
|
+
/** Mood arousal delta. */
|
|
21
|
+
moodArousalDelta?: number;
|
|
22
|
+
/**
|
|
23
|
+
* Disposition delta toward the event's actor.
|
|
24
|
+
* Only applied when the event has an actor entity.
|
|
25
|
+
*/
|
|
26
|
+
dispositionDelta?: number;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Default state transition rules.
|
|
30
|
+
*
|
|
31
|
+
* Stories can override by providing their own rules array
|
|
32
|
+
* to observeEvent(). These are sensible defaults per ADR-141:
|
|
33
|
+
* violence increases threat, gifts improve disposition, etc.
|
|
34
|
+
*/
|
|
35
|
+
export declare const DefaultStateTransitions: StateTransitionRule[];
|
|
36
|
+
/**
|
|
37
|
+
* Filter an event through the NPC's cognitive profile.
|
|
38
|
+
*
|
|
39
|
+
* @param trait - The NPC's CharacterModelTrait
|
|
40
|
+
* @param event - The incoming event
|
|
41
|
+
* @returns 'pass' if the event should be processed, 'miss' if filtered out,
|
|
42
|
+
* 'amplify' if the event should be processed with heightened impact
|
|
43
|
+
*/
|
|
44
|
+
export declare function filterPerception(trait: CharacterModelTrait, event: ISemanticEvent): 'pass' | 'miss' | 'amplify';
|
|
45
|
+
/**
|
|
46
|
+
* Inject hallucinated facts for an NPC with augmented perception.
|
|
47
|
+
*
|
|
48
|
+
* Only injects when the NPC's current lucidity state matches
|
|
49
|
+
* the perceived event's `when` condition.
|
|
50
|
+
*
|
|
51
|
+
* @param trait - The NPC's CharacterModelTrait
|
|
52
|
+
* @param npcId - The NPC entity ID
|
|
53
|
+
* @param turn - Current turn number
|
|
54
|
+
* @returns Array of hallucination events (may be empty)
|
|
55
|
+
*/
|
|
56
|
+
export declare function injectHallucinations(trait: CharacterModelTrait, npcId: EntityId, turn: number): ISemanticEvent[];
|
|
57
|
+
/**
|
|
58
|
+
* Process an event observed by an NPC through the character model.
|
|
59
|
+
*
|
|
60
|
+
* 1. Checks for CharacterModelTrait (returns early if absent — opt-in).
|
|
61
|
+
* 2. Filters event through cognitive profile perception mode.
|
|
62
|
+
* 3. Adds witnessed fact to knowledge.
|
|
63
|
+
* 4. Applies default state transition rules.
|
|
64
|
+
* 5. Checks lucidity triggers.
|
|
65
|
+
* 6. Injects hallucinated facts (augmented perception).
|
|
66
|
+
* 7. Emits observable behavior events for state changes.
|
|
67
|
+
*
|
|
68
|
+
* @param npc - The NPC entity
|
|
69
|
+
* @param event - The observed event
|
|
70
|
+
* @param world - The world model
|
|
71
|
+
* @param turn - Current turn number
|
|
72
|
+
* @param rules - State transition rules (defaults to DefaultStateTransitions)
|
|
73
|
+
* @returns Array of observable behavior events emitted by state changes
|
|
74
|
+
*/
|
|
75
|
+
export declare function observeEvent(npc: IFEntity, event: ISemanticEvent, world: WorldModel, turn: number, rules?: StateTransitionRule[]): ISemanticEvent[];
|
|
76
|
+
//# sourceMappingURL=character-observer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"character-observer.d.ts","sourceRoot":"","sources":["../../../../../../repos/sharpee/packages/stdlib/src/npc/character-observer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EACL,QAAQ,EACR,UAAU,EAEV,mBAAmB,EAGpB,MAAM,sBAAsB,CAAC;AAO9B,6DAA6D;AAC7D,MAAM,WAAW,mBAAmB;IAClC,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0BAA0B;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,0BAA0B;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,EAAE,mBAAmB,EAcxD,CAAC;AA0BF;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,mBAAmB,EAC1B,KAAK,EAAE,cAAc,GACpB,MAAM,GAAG,MAAM,GAAG,SAAS,CA4B7B;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,mBAAmB,EAC1B,KAAK,EAAE,QAAQ,EACf,IAAI,EAAE,MAAM,GACX,cAAc,EAAE,CAoBlB;AAMD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,QAAQ,EACb,KAAK,EAAE,cAAc,EACrB,KAAK,EAAE,UAAU,EACjB,IAAI,EAAE,MAAM,EACZ,KAAK,GAAE,mBAAmB,EAA4B,GACrD,cAAc,EAAE,CA+FlB"}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Character observation handler (ADR-141)
|
|
4
|
+
*
|
|
5
|
+
* Processes events witnessed by NPCs through the cognitive profile filter
|
|
6
|
+
* and updates character model state accordingly.
|
|
7
|
+
*
|
|
8
|
+
* Public interface: observeEvent(), DefaultStateTransitions.
|
|
9
|
+
* Owner context: stdlib / npc
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.DefaultStateTransitions = void 0;
|
|
13
|
+
exports.filterPerception = filterPerception;
|
|
14
|
+
exports.injectHallucinations = injectHallucinations;
|
|
15
|
+
exports.observeEvent = observeEvent;
|
|
16
|
+
const world_model_1 = require("../../world-model/index.js");
|
|
17
|
+
const character_messages_1 = require("./character-messages");
|
|
18
|
+
/**
|
|
19
|
+
* Default state transition rules.
|
|
20
|
+
*
|
|
21
|
+
* Stories can override by providing their own rules array
|
|
22
|
+
* to observeEvent(). These are sensible defaults per ADR-141:
|
|
23
|
+
* violence increases threat, gifts improve disposition, etc.
|
|
24
|
+
*/
|
|
25
|
+
exports.DefaultStateTransitions = [
|
|
26
|
+
// Violence
|
|
27
|
+
{ eventType: 'npc.attacked', threatDelta: 30, moodValenceDelta: -0.3, moodArousalDelta: 0.3 },
|
|
28
|
+
{ eventType: 'if.action.attacking', threatDelta: 20, moodValenceDelta: -0.2, moodArousalDelta: 0.2 },
|
|
29
|
+
{ eventType: 'npc.killed', threatDelta: 40, moodValenceDelta: -0.5, moodArousalDelta: 0.4 },
|
|
30
|
+
// Kindness
|
|
31
|
+
{ eventType: 'if.action.giving', dispositionDelta: 10, moodValenceDelta: 0.1 },
|
|
32
|
+
// Theft
|
|
33
|
+
{ eventType: 'if.action.taking', dispositionDelta: -5 },
|
|
34
|
+
// Speech
|
|
35
|
+
{ eventType: 'npc.spoke', moodArousalDelta: 0.05 },
|
|
36
|
+
];
|
|
37
|
+
// ---------------------------------------------------------------------------
|
|
38
|
+
// Event creation helper
|
|
39
|
+
// ---------------------------------------------------------------------------
|
|
40
|
+
let eventCounter = 0;
|
|
41
|
+
function createCharacterEvent(type, npcId, data) {
|
|
42
|
+
return {
|
|
43
|
+
id: `char_${++eventCounter}_${Date.now()}`,
|
|
44
|
+
type,
|
|
45
|
+
timestamp: Date.now(),
|
|
46
|
+
entities: { actor: npcId },
|
|
47
|
+
data,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
// ---------------------------------------------------------------------------
|
|
51
|
+
// Perception filter
|
|
52
|
+
// ---------------------------------------------------------------------------
|
|
53
|
+
/**
|
|
54
|
+
* Filter an event through the NPC's cognitive profile.
|
|
55
|
+
*
|
|
56
|
+
* @param trait - The NPC's CharacterModelTrait
|
|
57
|
+
* @param event - The incoming event
|
|
58
|
+
* @returns 'pass' if the event should be processed, 'miss' if filtered out,
|
|
59
|
+
* 'amplify' if the event should be processed with heightened impact
|
|
60
|
+
*/
|
|
61
|
+
function filterPerception(trait, event) {
|
|
62
|
+
const mode = trait.cognitiveProfile.perception;
|
|
63
|
+
if (mode === 'accurate')
|
|
64
|
+
return 'pass';
|
|
65
|
+
if (mode === 'filtered') {
|
|
66
|
+
const filters = trait.perceptionFilters;
|
|
67
|
+
if (!filters)
|
|
68
|
+
return 'pass';
|
|
69
|
+
const eventType = event.type;
|
|
70
|
+
const eventTags = event.tags ?? [];
|
|
71
|
+
const allTokens = [eventType, ...eventTags];
|
|
72
|
+
// Check misses
|
|
73
|
+
for (const pattern of filters.misses) {
|
|
74
|
+
if (allTokens.some(t => t.includes(pattern)))
|
|
75
|
+
return 'miss';
|
|
76
|
+
}
|
|
77
|
+
// Check amplifies
|
|
78
|
+
for (const pattern of filters.amplifies) {
|
|
79
|
+
if (allTokens.some(t => t.includes(pattern)))
|
|
80
|
+
return 'amplify';
|
|
81
|
+
}
|
|
82
|
+
return 'pass';
|
|
83
|
+
}
|
|
84
|
+
// augmented — events pass through; hallucinations are injected separately
|
|
85
|
+
return 'pass';
|
|
86
|
+
}
|
|
87
|
+
// ---------------------------------------------------------------------------
|
|
88
|
+
// Hallucination injection
|
|
89
|
+
// ---------------------------------------------------------------------------
|
|
90
|
+
/**
|
|
91
|
+
* Inject hallucinated facts for an NPC with augmented perception.
|
|
92
|
+
*
|
|
93
|
+
* Only injects when the NPC's current lucidity state matches
|
|
94
|
+
* the perceived event's `when` condition.
|
|
95
|
+
*
|
|
96
|
+
* @param trait - The NPC's CharacterModelTrait
|
|
97
|
+
* @param npcId - The NPC entity ID
|
|
98
|
+
* @param turn - Current turn number
|
|
99
|
+
* @returns Array of hallucination events (may be empty)
|
|
100
|
+
*/
|
|
101
|
+
function injectHallucinations(trait, npcId, turn) {
|
|
102
|
+
if (trait.cognitiveProfile.perception !== 'augmented')
|
|
103
|
+
return [];
|
|
104
|
+
const events = [];
|
|
105
|
+
for (const [topic, perceived] of Object.entries(trait.perceivedEvents)) {
|
|
106
|
+
if (trait.currentLucidityState === perceived.when) {
|
|
107
|
+
// Only inject once — don't re-hallucinate known facts
|
|
108
|
+
if (!trait.knows(topic)) {
|
|
109
|
+
trait.addFact(topic, 'hallucinated', 'certain', turn);
|
|
110
|
+
events.push(createCharacterEvent(character_messages_1.CharacterMessages.HALLUCINATION_ONSET, npcId, { topic, content: perceived.content }));
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return events;
|
|
115
|
+
}
|
|
116
|
+
// ---------------------------------------------------------------------------
|
|
117
|
+
// Main observation handler
|
|
118
|
+
// ---------------------------------------------------------------------------
|
|
119
|
+
/**
|
|
120
|
+
* Process an event observed by an NPC through the character model.
|
|
121
|
+
*
|
|
122
|
+
* 1. Checks for CharacterModelTrait (returns early if absent — opt-in).
|
|
123
|
+
* 2. Filters event through cognitive profile perception mode.
|
|
124
|
+
* 3. Adds witnessed fact to knowledge.
|
|
125
|
+
* 4. Applies default state transition rules.
|
|
126
|
+
* 5. Checks lucidity triggers.
|
|
127
|
+
* 6. Injects hallucinated facts (augmented perception).
|
|
128
|
+
* 7. Emits observable behavior events for state changes.
|
|
129
|
+
*
|
|
130
|
+
* @param npc - The NPC entity
|
|
131
|
+
* @param event - The observed event
|
|
132
|
+
* @param world - The world model
|
|
133
|
+
* @param turn - Current turn number
|
|
134
|
+
* @param rules - State transition rules (defaults to DefaultStateTransitions)
|
|
135
|
+
* @returns Array of observable behavior events emitted by state changes
|
|
136
|
+
*/
|
|
137
|
+
function observeEvent(npc, event, world, turn, rules = exports.DefaultStateTransitions) {
|
|
138
|
+
const trait = npc.get(world_model_1.TraitType.CHARACTER_MODEL);
|
|
139
|
+
if (!trait)
|
|
140
|
+
return [];
|
|
141
|
+
const emittedEvents = [];
|
|
142
|
+
// 1. Perception filter
|
|
143
|
+
const perception = filterPerception(trait, event);
|
|
144
|
+
if (perception === 'miss')
|
|
145
|
+
return [];
|
|
146
|
+
const amplify = perception === 'amplify' ? 2.0 : 1.0;
|
|
147
|
+
// 2. Add witnessed fact
|
|
148
|
+
const factTopic = event.type;
|
|
149
|
+
if (!trait.knows(factTopic)) {
|
|
150
|
+
trait.addFact(factTopic, 'witnessed', 'certain', turn);
|
|
151
|
+
emittedEvents.push(createCharacterEvent(character_messages_1.CharacterMessages.FACT_LEARNED, npc.id, { topic: factTopic, source: 'witnessed' }));
|
|
152
|
+
}
|
|
153
|
+
// 3. Apply state transition rules
|
|
154
|
+
const previousMood = trait.getMood();
|
|
155
|
+
const previousThreat = trait.getThreat();
|
|
156
|
+
for (const rule of rules) {
|
|
157
|
+
if (rule.eventType !== event.type)
|
|
158
|
+
continue;
|
|
159
|
+
if (rule.threatDelta) {
|
|
160
|
+
trait.adjustThreat(rule.threatDelta * amplify);
|
|
161
|
+
}
|
|
162
|
+
if (rule.moodValenceDelta) {
|
|
163
|
+
trait.adjustMood(rule.moodValenceDelta * amplify, 0);
|
|
164
|
+
}
|
|
165
|
+
if (rule.moodArousalDelta) {
|
|
166
|
+
trait.adjustMood(0, rule.moodArousalDelta * amplify);
|
|
167
|
+
}
|
|
168
|
+
if (rule.dispositionDelta && event.entities.actor) {
|
|
169
|
+
trait.adjustDisposition(event.entities.actor, rule.dispositionDelta * amplify);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
// Emit mood change event if mood word changed
|
|
173
|
+
const newMood = trait.getMood();
|
|
174
|
+
if (newMood !== previousMood) {
|
|
175
|
+
emittedEvents.push(createCharacterEvent(character_messages_1.CharacterMessages.MOOD_CHANGED, npc.id, { from: previousMood, to: newMood }));
|
|
176
|
+
}
|
|
177
|
+
// Emit threat change event if threat word changed
|
|
178
|
+
const newThreat = trait.getThreat();
|
|
179
|
+
if (newThreat !== previousThreat) {
|
|
180
|
+
emittedEvents.push(createCharacterEvent(character_messages_1.CharacterMessages.THREAT_CHANGED, npc.id, { from: previousThreat, to: newThreat }));
|
|
181
|
+
}
|
|
182
|
+
// 4. Check lucidity triggers
|
|
183
|
+
if (trait.lucidityConfig) {
|
|
184
|
+
const previousState = trait.currentLucidityState;
|
|
185
|
+
for (const [triggerName, trigger] of Object.entries(trait.lucidityConfig.triggers)) {
|
|
186
|
+
// Trigger names can reference event types or predicate names
|
|
187
|
+
if (event.type === triggerName || (trait.hasPredicate(triggerName) && trait.evaluate(triggerName))) {
|
|
188
|
+
if (trigger.transition === 'immediate') {
|
|
189
|
+
trait.enterLucidityState(trigger.target);
|
|
190
|
+
}
|
|
191
|
+
// 'next turn' transitions are handled by lucidity decay / tick processing
|
|
192
|
+
// We store them as pending for the next tick cycle
|
|
193
|
+
if (trigger.transition === 'next turn' && trait.currentLucidityState !== trigger.target) {
|
|
194
|
+
trait.enterLucidityState(trigger.target);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
if (trait.currentLucidityState !== previousState) {
|
|
199
|
+
emittedEvents.push(createCharacterEvent(character_messages_1.CharacterMessages.LUCIDITY_SHIFT, npc.id, { from: previousState, to: trait.currentLucidityState }));
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
// 5. Inject hallucinations (augmented perception)
|
|
203
|
+
const hallucinationEvents = injectHallucinations(trait, npc.id, turn);
|
|
204
|
+
emittedEvents.push(...hallucinationEvents);
|
|
205
|
+
return emittedEvents;
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=character-observer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"character-observer.js","sourceRoot":"","sources":["../../../../../../../repos/sharpee/packages/stdlib/src/npc/character-observer.ts"],"names":[],"mappings":"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"}
|
package/npc/index.d.ts
CHANGED
|
@@ -5,6 +5,9 @@
|
|
|
5
5
|
*/
|
|
6
6
|
export * from './types';
|
|
7
7
|
export * from './npc-messages';
|
|
8
|
-
export
|
|
8
|
+
export * from './character-messages';
|
|
9
|
+
export { NpcService, createNpcService, registerNpcCombatResolver, clearNpcCombatResolver, type INpcService, type NpcCombatResolver, type NpcTickContext, type NpcTickPhase, } from './npc-service';
|
|
10
|
+
export { observeEvent, filterPerception, injectHallucinations, DefaultStateTransitions, type StateTransitionRule, } from './character-observer';
|
|
11
|
+
export { processLucidityDecay, enterLucidityWindow, DECAY_RATE_TURNS, } from './lucidity-decay';
|
|
9
12
|
export { guardBehavior, passiveBehavior, createWandererBehavior, createFollowerBehavior, createPatrolBehavior, } from './behaviors';
|
|
10
13
|
//# sourceMappingURL=index.d.ts.map
|
package/npc/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../repos/sharpee/packages/stdlib/src/npc/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,cAAc,SAAS,CAAC;AAGxB,cAAc,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../repos/sharpee/packages/stdlib/src/npc/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,cAAc,SAAS,CAAC;AAGxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AAGrC,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,yBAAyB,EACzB,sBAAsB,EACtB,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,YAAY,GAClB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,oBAAoB,EACpB,uBAAuB,EACvB,KAAK,mBAAmB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,aAAa,EACb,eAAe,EACf,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,aAAa,CAAC"}
|
package/npc/index.js
CHANGED
|
@@ -19,17 +19,28 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
19
19
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
20
20
|
};
|
|
21
21
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
-
exports.createPatrolBehavior = exports.createFollowerBehavior = exports.createWandererBehavior = exports.passiveBehavior = exports.guardBehavior = exports.clearNpcCombatResolver = exports.registerNpcCombatResolver = exports.createNpcService = exports.NpcService = void 0;
|
|
22
|
+
exports.createPatrolBehavior = exports.createFollowerBehavior = exports.createWandererBehavior = exports.passiveBehavior = exports.guardBehavior = exports.DECAY_RATE_TURNS = exports.enterLucidityWindow = exports.processLucidityDecay = exports.DefaultStateTransitions = exports.injectHallucinations = exports.filterPerception = exports.observeEvent = exports.clearNpcCombatResolver = exports.registerNpcCombatResolver = exports.createNpcService = exports.NpcService = void 0;
|
|
23
23
|
// Types
|
|
24
24
|
__exportStar(require("./types"), exports);
|
|
25
25
|
// Message IDs
|
|
26
26
|
__exportStar(require("./npc-messages"), exports);
|
|
27
|
+
__exportStar(require("./character-messages"), exports);
|
|
27
28
|
// Service
|
|
28
29
|
var npc_service_1 = require("./npc-service");
|
|
29
30
|
Object.defineProperty(exports, "NpcService", { enumerable: true, get: function () { return npc_service_1.NpcService; } });
|
|
30
31
|
Object.defineProperty(exports, "createNpcService", { enumerable: true, get: function () { return npc_service_1.createNpcService; } });
|
|
31
32
|
Object.defineProperty(exports, "registerNpcCombatResolver", { enumerable: true, get: function () { return npc_service_1.registerNpcCombatResolver; } });
|
|
32
33
|
Object.defineProperty(exports, "clearNpcCombatResolver", { enumerable: true, get: function () { return npc_service_1.clearNpcCombatResolver; } });
|
|
34
|
+
// Character model observation and lucidity (ADR-141)
|
|
35
|
+
var character_observer_1 = require("./character-observer");
|
|
36
|
+
Object.defineProperty(exports, "observeEvent", { enumerable: true, get: function () { return character_observer_1.observeEvent; } });
|
|
37
|
+
Object.defineProperty(exports, "filterPerception", { enumerable: true, get: function () { return character_observer_1.filterPerception; } });
|
|
38
|
+
Object.defineProperty(exports, "injectHallucinations", { enumerable: true, get: function () { return character_observer_1.injectHallucinations; } });
|
|
39
|
+
Object.defineProperty(exports, "DefaultStateTransitions", { enumerable: true, get: function () { return character_observer_1.DefaultStateTransitions; } });
|
|
40
|
+
var lucidity_decay_1 = require("./lucidity-decay");
|
|
41
|
+
Object.defineProperty(exports, "processLucidityDecay", { enumerable: true, get: function () { return lucidity_decay_1.processLucidityDecay; } });
|
|
42
|
+
Object.defineProperty(exports, "enterLucidityWindow", { enumerable: true, get: function () { return lucidity_decay_1.enterLucidityWindow; } });
|
|
43
|
+
Object.defineProperty(exports, "DECAY_RATE_TURNS", { enumerable: true, get: function () { return lucidity_decay_1.DECAY_RATE_TURNS; } });
|
|
33
44
|
// Standard behaviors
|
|
34
45
|
var behaviors_1 = require("./behaviors");
|
|
35
46
|
Object.defineProperty(exports, "guardBehavior", { enumerable: true, get: function () { return behaviors_1.guardBehavior; } });
|
package/npc/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../repos/sharpee/packages/stdlib/src/npc/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;AAEH,QAAQ;AACR,0CAAwB;AAExB,cAAc;AACd,iDAA+B;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../repos/sharpee/packages/stdlib/src/npc/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;AAEH,QAAQ;AACR,0CAAwB;AAExB,cAAc;AACd,iDAA+B;AAC/B,uDAAqC;AAErC,UAAU;AACV,6CASuB;AARrB,yGAAA,UAAU,OAAA;AACV,+GAAA,gBAAgB,OAAA;AAChB,wHAAA,yBAAyB,OAAA;AACzB,qHAAA,sBAAsB,OAAA;AAOxB,qDAAqD;AACrD,2DAM8B;AAL5B,kHAAA,YAAY,OAAA;AACZ,sHAAA,gBAAgB,OAAA;AAChB,0HAAA,oBAAoB,OAAA;AACpB,6HAAA,uBAAuB,OAAA;AAGzB,mDAI0B;AAHxB,sHAAA,oBAAoB,OAAA;AACpB,qHAAA,mBAAmB,OAAA;AACnB,kHAAA,gBAAgB,OAAA;AAGlB,qBAAqB;AACrB,yCAMqB;AALnB,0GAAA,aAAa,OAAA;AACb,4GAAA,eAAe,OAAA;AACf,mHAAA,sBAAsB,OAAA;AACtB,mHAAA,sBAAsB,OAAA;AACtB,iHAAA,oBAAoB,OAAA"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lucidity decay processing (ADR-141)
|
|
3
|
+
*
|
|
4
|
+
* End-of-turn processing for NPC lucidity windows.
|
|
5
|
+
* When an NPC is in a lucid window with no sustaining trigger active,
|
|
6
|
+
* lucidity decays and eventually returns to baseline.
|
|
7
|
+
*
|
|
8
|
+
* Public interface: processLucidityDecay(), DECAY_RATE_TURNS.
|
|
9
|
+
* Owner context: stdlib / npc
|
|
10
|
+
*/
|
|
11
|
+
import { ISemanticEvent } from "../../core/index";
|
|
12
|
+
import { IFEntity, WorldModel, CharacterModelTrait, DecayRate } from "../../world-model/index";
|
|
13
|
+
/**
|
|
14
|
+
* Maps decay rate words to number of turns before baseline is restored.
|
|
15
|
+
* These are the window durations when no sustaining trigger is active.
|
|
16
|
+
*/
|
|
17
|
+
export declare const DECAY_RATE_TURNS: Record<DecayRate, number>;
|
|
18
|
+
/**
|
|
19
|
+
* Process end-of-turn lucidity decay for a single NPC.
|
|
20
|
+
*
|
|
21
|
+
* If the NPC has a CharacterModelTrait with an active lucidity window,
|
|
22
|
+
* decrements the window counter. When it reaches zero, the cognitive
|
|
23
|
+
* profile returns to baseline and a LUCIDITY_BASELINE_RESTORED event
|
|
24
|
+
* is emitted.
|
|
25
|
+
*
|
|
26
|
+
* If no lucidity config or no active window, returns empty array.
|
|
27
|
+
*
|
|
28
|
+
* @param npc - The NPC entity
|
|
29
|
+
* @param world - The world model (unused in current impl, reserved for future)
|
|
30
|
+
* @param turn - Current turn number (unused in current impl, reserved for future)
|
|
31
|
+
* @returns Array of events emitted (baseline restored, or empty)
|
|
32
|
+
*/
|
|
33
|
+
export declare function processLucidityDecay(npc: IFEntity, world: WorldModel, turn: number): ISemanticEvent[];
|
|
34
|
+
/**
|
|
35
|
+
* Initialize a lucidity window with the appropriate turn count
|
|
36
|
+
* based on the NPC's configured decay rate.
|
|
37
|
+
*
|
|
38
|
+
* Call this when entering a lucidity state via a trigger, so the
|
|
39
|
+
* window has the correct duration based on decayRate.
|
|
40
|
+
*
|
|
41
|
+
* @param trait - The NPC's CharacterModelTrait
|
|
42
|
+
* @param targetState - The lucidity state to enter
|
|
43
|
+
*/
|
|
44
|
+
export declare function enterLucidityWindow(trait: CharacterModelTrait, targetState: string): void;
|
|
45
|
+
//# sourceMappingURL=lucidity-decay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lucidity-decay.d.ts","sourceRoot":"","sources":["../../../../../../repos/sharpee/packages/stdlib/src/npc/lucidity-decay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,cAAc,EAAY,MAAM,eAAe,CAAC;AACzD,OAAO,EACL,QAAQ,EACR,UAAU,EAEV,mBAAmB,EACnB,SAAS,EACV,MAAM,sBAAsB,CAAC;AAO9B;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAItD,CAAC;AA0BF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,QAAQ,EACb,KAAK,EAAE,UAAU,EACjB,IAAI,EAAE,MAAM,GACX,cAAc,EAAE,CAsBlB;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,mBAAmB,EAC1B,WAAW,EAAE,MAAM,GAClB,IAAI,CAQN"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Lucidity decay processing (ADR-141)
|
|
4
|
+
*
|
|
5
|
+
* End-of-turn processing for NPC lucidity windows.
|
|
6
|
+
* When an NPC is in a lucid window with no sustaining trigger active,
|
|
7
|
+
* lucidity decays and eventually returns to baseline.
|
|
8
|
+
*
|
|
9
|
+
* Public interface: processLucidityDecay(), DECAY_RATE_TURNS.
|
|
10
|
+
* Owner context: stdlib / npc
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.DECAY_RATE_TURNS = void 0;
|
|
14
|
+
exports.processLucidityDecay = processLucidityDecay;
|
|
15
|
+
exports.enterLucidityWindow = enterLucidityWindow;
|
|
16
|
+
const world_model_1 = require("../../world-model/index.js");
|
|
17
|
+
const character_messages_1 = require("./character-messages");
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
// Decay rate mapping
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
/**
|
|
22
|
+
* Maps decay rate words to number of turns before baseline is restored.
|
|
23
|
+
* These are the window durations when no sustaining trigger is active.
|
|
24
|
+
*/
|
|
25
|
+
exports.DECAY_RATE_TURNS = {
|
|
26
|
+
slow: 8,
|
|
27
|
+
moderate: 4,
|
|
28
|
+
fast: 2,
|
|
29
|
+
};
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
// Event helper
|
|
32
|
+
// ---------------------------------------------------------------------------
|
|
33
|
+
let decayEventCounter = 0;
|
|
34
|
+
function createDecayEvent(type, npcId, data) {
|
|
35
|
+
return {
|
|
36
|
+
id: `decay_${++decayEventCounter}_${Date.now()}`,
|
|
37
|
+
type,
|
|
38
|
+
timestamp: Date.now(),
|
|
39
|
+
entities: { actor: npcId },
|
|
40
|
+
data,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
// ---------------------------------------------------------------------------
|
|
44
|
+
// Main decay function
|
|
45
|
+
// ---------------------------------------------------------------------------
|
|
46
|
+
/**
|
|
47
|
+
* Process end-of-turn lucidity decay for a single NPC.
|
|
48
|
+
*
|
|
49
|
+
* If the NPC has a CharacterModelTrait with an active lucidity window,
|
|
50
|
+
* decrements the window counter. When it reaches zero, the cognitive
|
|
51
|
+
* profile returns to baseline and a LUCIDITY_BASELINE_RESTORED event
|
|
52
|
+
* is emitted.
|
|
53
|
+
*
|
|
54
|
+
* If no lucidity config or no active window, returns empty array.
|
|
55
|
+
*
|
|
56
|
+
* @param npc - The NPC entity
|
|
57
|
+
* @param world - The world model (unused in current impl, reserved for future)
|
|
58
|
+
* @param turn - Current turn number (unused in current impl, reserved for future)
|
|
59
|
+
* @returns Array of events emitted (baseline restored, or empty)
|
|
60
|
+
*/
|
|
61
|
+
function processLucidityDecay(npc, world, turn) {
|
|
62
|
+
const trait = npc.get(world_model_1.TraitType.CHARACTER_MODEL);
|
|
63
|
+
if (!trait)
|
|
64
|
+
return [];
|
|
65
|
+
if (!trait.lucidityConfig)
|
|
66
|
+
return [];
|
|
67
|
+
// No active window
|
|
68
|
+
if (trait.lucidityWindowTurns <= 0)
|
|
69
|
+
return [];
|
|
70
|
+
const previousState = trait.currentLucidityState;
|
|
71
|
+
const expired = trait.decayLucidity();
|
|
72
|
+
if (expired) {
|
|
73
|
+
return [
|
|
74
|
+
createDecayEvent(character_messages_1.CharacterMessages.LUCIDITY_BASELINE_RESTORED, npc.id, { from: previousState, to: trait.currentLucidityState }),
|
|
75
|
+
];
|
|
76
|
+
}
|
|
77
|
+
return [];
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Initialize a lucidity window with the appropriate turn count
|
|
81
|
+
* based on the NPC's configured decay rate.
|
|
82
|
+
*
|
|
83
|
+
* Call this when entering a lucidity state via a trigger, so the
|
|
84
|
+
* window has the correct duration based on decayRate.
|
|
85
|
+
*
|
|
86
|
+
* @param trait - The NPC's CharacterModelTrait
|
|
87
|
+
* @param targetState - The lucidity state to enter
|
|
88
|
+
*/
|
|
89
|
+
function enterLucidityWindow(trait, targetState) {
|
|
90
|
+
if (!trait.lucidityConfig) {
|
|
91
|
+
trait.enterLucidityState(targetState);
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const turns = exports.DECAY_RATE_TURNS[trait.lucidityConfig.decayRate];
|
|
95
|
+
trait.enterLucidityState(targetState, turns);
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=lucidity-decay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lucidity-decay.js","sourceRoot":"","sources":["../../../../../../../repos/sharpee/packages/stdlib/src/npc/lucidity-decay.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;AAiEH,oDA0BC;AAYD,kDAWC;AA/GD,sDAM8B;AAC9B,6DAAyD;AAEzD,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E;;;GAGG;AACU,QAAA,gBAAgB,GAA8B;IACzD,IAAI,EAAE,CAAC;IACP,QAAQ,EAAE,CAAC;IACX,IAAI,EAAE,CAAC;CACR,CAAC;AAEF,8EAA8E;AAC9E,eAAe;AACf,8EAA8E;AAE9E,IAAI,iBAAiB,GAAG,CAAC,CAAC;AAE1B,SAAS,gBAAgB,CACvB,IAAY,EACZ,KAAe,EACf,IAA6B;IAE7B,OAAO;QACL,EAAE,EAAE,SAAS,EAAE,iBAAiB,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE;QAChD,IAAI;QACJ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;QAC1B,IAAI;KACL,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,sBAAsB;AACtB,8EAA8E;AAE9E;;;;;;;;;;;;;;GAcG;AACH,SAAgB,oBAAoB,CAClC,GAAa,EACb,KAAiB,EACjB,IAAY;IAEZ,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,uBAAS,CAAC,eAAe,CAAoC,CAAC;IACpF,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,IAAI,CAAC,KAAK,CAAC,cAAc;QAAE,OAAO,EAAE,CAAC;IAErC,mBAAmB;IACnB,IAAI,KAAK,CAAC,mBAAmB,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IAE9C,MAAM,aAAa,GAAG,KAAK,CAAC,oBAAoB,CAAC;IACjD,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC;IAEtC,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO;YACL,gBAAgB,CACd,sCAAiB,CAAC,0BAA0B,EAC5C,GAAG,CAAC,EAAE,EACN,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,KAAK,CAAC,oBAAoB,EAAE,CACxD;SACF,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,mBAAmB,CACjC,KAA0B,EAC1B,WAAmB;IAEnB,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;QAC1B,KAAK,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;QACtC,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,wBAAgB,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IAC/D,KAAK,CAAC,kBAAkB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;AAC/C,CAAC"}
|
package/npc/npc-service.d.ts
CHANGED
|
@@ -6,6 +6,11 @@
|
|
|
6
6
|
import { ISemanticEvent, EntityId, SeededRandom } from "../../core/index";
|
|
7
7
|
import { IFEntity, WorldModel } from "../../world-model/index";
|
|
8
8
|
import { NpcBehavior } from './types';
|
|
9
|
+
/**
|
|
10
|
+
* A tick phase handler that runs during NPC turn processing.
|
|
11
|
+
* Registered by higher-level packages (e.g., @sharpee/character).
|
|
12
|
+
*/
|
|
13
|
+
export type NpcTickPhase = (npcs: IFEntity[], context: NpcTickContext) => ISemanticEvent[];
|
|
9
14
|
/**
|
|
10
15
|
* NPC Combat Resolver function type.
|
|
11
16
|
*
|
|
@@ -47,6 +52,8 @@ export interface INpcService {
|
|
|
47
52
|
removeBehavior(id: string): void;
|
|
48
53
|
/** Get a behavior by ID */
|
|
49
54
|
getBehavior(id: string): NpcBehavior | undefined;
|
|
55
|
+
/** Register a tick phase handler (ADR-142/144/145/146) */
|
|
56
|
+
registerTickPhase(name: string, handler: NpcTickPhase): void;
|
|
50
57
|
/** Execute the NPC turn phase */
|
|
51
58
|
tick(context: NpcTickContext): ISemanticEvent[];
|
|
52
59
|
/** Notify NPCs that player entered a room */
|
|
@@ -63,9 +70,18 @@ export interface INpcService {
|
|
|
63
70
|
*/
|
|
64
71
|
export declare class NpcService implements INpcService {
|
|
65
72
|
private behaviors;
|
|
73
|
+
private readonly tickPhases;
|
|
66
74
|
registerBehavior(behavior: NpcBehavior): void;
|
|
67
75
|
removeBehavior(id: string): void;
|
|
68
76
|
getBehavior(id: string): NpcBehavior | undefined;
|
|
77
|
+
/**
|
|
78
|
+
* Register a tick phase handler (ADR-142/144/145/146).
|
|
79
|
+
* Phases run in registration order after behavior onTurn processing.
|
|
80
|
+
*
|
|
81
|
+
* @param name - Phase name for debugging
|
|
82
|
+
* @param handler - Function called with active NPCs and tick context
|
|
83
|
+
*/
|
|
84
|
+
registerTickPhase(name: string, handler: NpcTickPhase): void;
|
|
69
85
|
/**
|
|
70
86
|
* Execute the NPC turn phase
|
|
71
87
|
*/
|
package/npc/npc-service.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"npc-service.d.ts","sourceRoot":"","sources":["../../../../../../repos/sharpee/packages/stdlib/src/npc/npc-service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"npc-service.d.ts","sourceRoot":"","sources":["../../../../../../repos/sharpee/packages/stdlib/src/npc/npc-service.ts"],"names":[],"mappings":"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"}
|
package/npc/npc-service.js
CHANGED
|
@@ -11,6 +11,7 @@ exports.clearNpcCombatResolver = clearNpcCombatResolver;
|
|
|
11
11
|
exports.createNpcService = createNpcService;
|
|
12
12
|
const world_model_1 = require("../../world-model/index.js");
|
|
13
13
|
const npc_messages_1 = require("./npc-messages");
|
|
14
|
+
const lucidity_decay_1 = require("./lucidity-decay");
|
|
14
15
|
/**
|
|
15
16
|
* Module-level NPC combat resolver. Set via registerNpcCombatResolver().
|
|
16
17
|
* Uses globalThis to share across module boundaries (same pattern as interceptor registry).
|
|
@@ -59,6 +60,7 @@ function createEvent(type, data, npcId) {
|
|
|
59
60
|
*/
|
|
60
61
|
class NpcService {
|
|
61
62
|
behaviors = new Map();
|
|
63
|
+
tickPhases = [];
|
|
62
64
|
registerBehavior(behavior) {
|
|
63
65
|
this.behaviors.set(behavior.id, behavior);
|
|
64
66
|
}
|
|
@@ -68,6 +70,16 @@ class NpcService {
|
|
|
68
70
|
getBehavior(id) {
|
|
69
71
|
return this.behaviors.get(id);
|
|
70
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* Register a tick phase handler (ADR-142/144/145/146).
|
|
75
|
+
* Phases run in registration order after behavior onTurn processing.
|
|
76
|
+
*
|
|
77
|
+
* @param name - Phase name for debugging
|
|
78
|
+
* @param handler - Function called with active NPCs and tick context
|
|
79
|
+
*/
|
|
80
|
+
registerTickPhase(name, handler) {
|
|
81
|
+
this.tickPhases.push({ name, handler });
|
|
82
|
+
}
|
|
71
83
|
/**
|
|
72
84
|
* Execute the NPC turn phase
|
|
73
85
|
*/
|
|
@@ -91,6 +103,16 @@ class NpcService {
|
|
|
91
103
|
const actions = behavior.onTurn(npcContext);
|
|
92
104
|
const actionEvents = this.executeActions(npc, actions, world, random);
|
|
93
105
|
events.push(...actionEvents);
|
|
106
|
+
// Process lucidity decay for NPCs with character model (ADR-141)
|
|
107
|
+
if (npc.has(world_model_1.TraitType.CHARACTER_MODEL)) {
|
|
108
|
+
const decayEvents = (0, lucidity_decay_1.processLucidityDecay)(npc, world, turn);
|
|
109
|
+
events.push(...decayEvents);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// Registered tick phases (ADR-142/144/145/146)
|
|
113
|
+
for (const phase of this.tickPhases) {
|
|
114
|
+
const phaseEvents = phase.handler(npcs, context);
|
|
115
|
+
events.push(...phaseEvents);
|
|
94
116
|
}
|
|
95
117
|
return events;
|
|
96
118
|
}
|
package/npc/npc-service.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"npc-service.js","sourceRoot":"","sources":["../../../../../../../repos/sharpee/packages/stdlib/src/npc/npc-service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"npc-service.js","sourceRoot":"","sources":["../../../../../../../repos/sharpee/packages/stdlib/src/npc/npc-service.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sharpee/stdlib",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.107",
|
|
4
4
|
"description": "Standard library for Sharpee IF Platform - actions, commands, and game mechanics",
|
|
5
5
|
"main": "./index.js",
|
|
6
6
|
"types": "./index.d.ts",
|
|
@@ -12,11 +12,11 @@
|
|
|
12
12
|
}
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@sharpee/core": "^0.9.
|
|
16
|
-
"@sharpee/if-domain": "^0.9.
|
|
17
|
-
"@sharpee/if-services": "^0.9.
|
|
18
|
-
"@sharpee/lang-en-us": "^0.9.
|
|
19
|
-
"@sharpee/world-model": "^0.9.
|
|
15
|
+
"@sharpee/core": "^0.9.107",
|
|
16
|
+
"@sharpee/if-domain": "^0.9.107",
|
|
17
|
+
"@sharpee/if-services": "^0.9.107",
|
|
18
|
+
"@sharpee/lang-en-us": "^0.9.107",
|
|
19
|
+
"@sharpee/world-model": "^0.9.107"
|
|
20
20
|
},
|
|
21
21
|
"keywords": [
|
|
22
22
|
"interactive-fiction",
|