@sharpee/character 0.9.106 → 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.
Files changed (137) hide show
  1. package/apply.d.ts +29 -7
  2. package/apply.d.ts.map +1 -1
  3. package/apply.js +15 -7
  4. package/apply.js.map +1 -1
  5. package/character-builder.d.ts +67 -4
  6. package/character-builder.d.ts.map +1 -1
  7. package/character-builder.js +116 -7
  8. package/character-builder.js.map +1 -1
  9. package/conversation/acl.d.ts +62 -0
  10. package/conversation/acl.d.ts.map +1 -0
  11. package/conversation/acl.js +117 -0
  12. package/conversation/acl.js.map +1 -0
  13. package/conversation/builder.d.ts +247 -0
  14. package/conversation/builder.d.ts.map +1 -0
  15. package/conversation/builder.js +324 -0
  16. package/conversation/builder.js.map +1 -0
  17. package/conversation/constraint-evaluator.d.ts +147 -0
  18. package/conversation/constraint-evaluator.d.ts.map +1 -0
  19. package/conversation/constraint-evaluator.js +247 -0
  20. package/conversation/constraint-evaluator.js.map +1 -0
  21. package/conversation/conversation-messages.d.ts +56 -0
  22. package/conversation/conversation-messages.d.ts.map +1 -0
  23. package/conversation/conversation-messages.js +69 -0
  24. package/conversation/conversation-messages.js.map +1 -0
  25. package/conversation/dialogue-extension.d.ts +87 -0
  26. package/conversation/dialogue-extension.d.ts.map +1 -0
  27. package/conversation/dialogue-extension.js +302 -0
  28. package/conversation/dialogue-extension.js.map +1 -0
  29. package/conversation/dialogue-types.d.ts +71 -0
  30. package/conversation/dialogue-types.d.ts.map +1 -0
  31. package/conversation/dialogue-types.js +13 -0
  32. package/conversation/dialogue-types.js.map +1 -0
  33. package/conversation/index.d.ts +19 -0
  34. package/conversation/index.d.ts.map +1 -0
  35. package/conversation/index.js +37 -0
  36. package/conversation/index.js.map +1 -0
  37. package/conversation/lifecycle.d.ts +212 -0
  38. package/conversation/lifecycle.d.ts.map +1 -0
  39. package/conversation/lifecycle.js +348 -0
  40. package/conversation/lifecycle.js.map +1 -0
  41. package/conversation/response-types.d.ts +98 -0
  42. package/conversation/response-types.d.ts.map +1 -0
  43. package/conversation/response-types.js +30 -0
  44. package/conversation/response-types.js.map +1 -0
  45. package/conversation/topic-registry.d.ts +130 -0
  46. package/conversation/topic-registry.d.ts.map +1 -0
  47. package/conversation/topic-registry.js +187 -0
  48. package/conversation/topic-registry.js.map +1 -0
  49. package/goals/builder.d.ts +135 -0
  50. package/goals/builder.d.ts.map +1 -0
  51. package/goals/builder.js +193 -0
  52. package/goals/builder.js.map +1 -0
  53. package/goals/goal-activation.d.ts +99 -0
  54. package/goals/goal-activation.d.ts.map +1 -0
  55. package/goals/goal-activation.js +212 -0
  56. package/goals/goal-activation.js.map +1 -0
  57. package/goals/goal-types.d.ts +138 -0
  58. package/goals/goal-types.d.ts.map +1 -0
  59. package/goals/goal-types.js +20 -0
  60. package/goals/goal-types.js.map +1 -0
  61. package/goals/index.d.ts +15 -0
  62. package/goals/index.d.ts.map +1 -0
  63. package/goals/index.js +24 -0
  64. package/goals/index.js.map +1 -0
  65. package/goals/pathfinding.d.ts +67 -0
  66. package/goals/pathfinding.d.ts.map +1 -0
  67. package/goals/pathfinding.js +134 -0
  68. package/goals/pathfinding.js.map +1 -0
  69. package/goals/step-evaluator.d.ts +52 -0
  70. package/goals/step-evaluator.d.ts.map +1 -0
  71. package/goals/step-evaluator.js +153 -0
  72. package/goals/step-evaluator.js.map +1 -0
  73. package/index.d.ts +6 -1
  74. package/index.d.ts.map +1 -1
  75. package/index.js +60 -1
  76. package/index.js.map +1 -1
  77. package/influence/builder.d.ts +136 -0
  78. package/influence/builder.d.ts.map +1 -0
  79. package/influence/builder.js +198 -0
  80. package/influence/builder.js.map +1 -0
  81. package/influence/index.d.ts +16 -0
  82. package/influence/index.d.ts.map +1 -0
  83. package/influence/index.js +25 -0
  84. package/influence/index.js.map +1 -0
  85. package/influence/influence-duration.d.ts +82 -0
  86. package/influence/influence-duration.d.ts.map +1 -0
  87. package/influence/influence-duration.js +148 -0
  88. package/influence/influence-duration.js.map +1 -0
  89. package/influence/influence-evaluator.d.ts +55 -0
  90. package/influence/influence-evaluator.d.ts.map +1 -0
  91. package/influence/influence-evaluator.js +183 -0
  92. package/influence/influence-evaluator.js.map +1 -0
  93. package/influence/influence-messages.d.ts +30 -0
  94. package/influence/influence-messages.d.ts.map +1 -0
  95. package/influence/influence-messages.js +40 -0
  96. package/influence/influence-messages.js.map +1 -0
  97. package/influence/influence-types.d.ts +123 -0
  98. package/influence/influence-types.d.ts.map +1 -0
  99. package/influence/influence-types.js +12 -0
  100. package/influence/influence-types.js.map +1 -0
  101. package/influence/pc-influence.d.ts +38 -0
  102. package/influence/pc-influence.d.ts.map +1 -0
  103. package/influence/pc-influence.js +56 -0
  104. package/influence/pc-influence.js.map +1 -0
  105. package/package.json +4 -3
  106. package/propagation/builder.d.ts +47 -0
  107. package/propagation/builder.d.ts.map +1 -0
  108. package/propagation/builder.js +46 -0
  109. package/propagation/builder.js.map +1 -0
  110. package/propagation/fact-transfer.d.ts +47 -0
  111. package/propagation/fact-transfer.d.ts.map +1 -0
  112. package/propagation/fact-transfer.js +76 -0
  113. package/propagation/fact-transfer.js.map +1 -0
  114. package/propagation/index.d.ts +16 -0
  115. package/propagation/index.d.ts.map +1 -0
  116. package/propagation/index.js +28 -0
  117. package/propagation/index.js.map +1 -0
  118. package/propagation/propagation-evaluator.d.ts +53 -0
  119. package/propagation/propagation-evaluator.d.ts.map +1 -0
  120. package/propagation/propagation-evaluator.js +231 -0
  121. package/propagation/propagation-evaluator.js.map +1 -0
  122. package/propagation/propagation-messages.d.ts +30 -0
  123. package/propagation/propagation-messages.d.ts.map +1 -0
  124. package/propagation/propagation-messages.js +37 -0
  125. package/propagation/propagation-messages.js.map +1 -0
  126. package/propagation/propagation-types.d.ts +100 -0
  127. package/propagation/propagation-types.d.ts.map +1 -0
  128. package/propagation/propagation-types.js +68 -0
  129. package/propagation/propagation-types.js.map +1 -0
  130. package/propagation/visibility.d.ts +46 -0
  131. package/propagation/visibility.d.ts.map +1 -0
  132. package/propagation/visibility.js +79 -0
  133. package/propagation/visibility.js.map +1 -0
  134. package/tick-phases.d.ts +93 -0
  135. package/tick-phases.d.ts.map +1 -0
  136. package/tick-phases.js +433 -0
  137. package/tick-phases.js.map +1 -0
@@ -0,0 +1,136 @@
1
+ /**
2
+ * Influence builder API (ADR-146 layer 5)
3
+ *
4
+ * Fluent builder for defining NPC influences and resistances.
5
+ * Returns from CharacterBuilder.influence(name) and compiles to
6
+ * InfluenceDef stored in CompiledCharacter.influenceDefs.
7
+ *
8
+ * Public interface: InfluenceBuilder.
9
+ * Owner context: @sharpee/character / influence
10
+ */
11
+ import { InfluenceMode, InfluenceRange, InfluenceDuration, InfluenceEffect, InfluenceSchedule, InfluenceDef } from './influence-types';
12
+ /**
13
+ * Fluent builder for a single influence definition.
14
+ *
15
+ * Usage:
16
+ * ```
17
+ * builder.influence('seduction')
18
+ * .mode('passive')
19
+ * .range('proximity')
20
+ * .effect({ focus: 'clouded', mood: 'distracted' })
21
+ * .duration('while present')
22
+ * .witnessed('ginger-brushes-against-{target}')
23
+ * .resisted('ginger-brushes-against-{target}-no-effect')
24
+ * .done()
25
+ * ```
26
+ */
27
+ export declare class InfluenceBuilder<TParent> {
28
+ private readonly _name;
29
+ private readonly _parent;
30
+ private readonly _finalize;
31
+ private _mode;
32
+ private _range;
33
+ private _effect;
34
+ private _duration;
35
+ private _witnessed?;
36
+ private _resisted?;
37
+ private _schedule?;
38
+ private _onPlayerAction?;
39
+ private _lingeringTurns?;
40
+ private _lingeringClearCondition?;
41
+ /**
42
+ * Create a new influence builder.
43
+ *
44
+ * @param name - Author-defined influence name
45
+ * @param parent - Parent builder to return to on .done()
46
+ * @param finalize - Callback to register the compiled InfluenceDef
47
+ */
48
+ constructor(name: string, parent: TParent, finalize: (def: InfluenceDef) => void);
49
+ /**
50
+ * Set the influence mode.
51
+ *
52
+ * @param mode - 'passive' or 'active'
53
+ * @returns this for chaining
54
+ */
55
+ mode(mode: InfluenceMode): InfluenceBuilder<TParent>;
56
+ /**
57
+ * Set the influence range.
58
+ *
59
+ * @param range - 'proximity', 'targeted', or 'room'
60
+ * @returns this for chaining
61
+ */
62
+ range(range: InfluenceRange): InfluenceBuilder<TParent>;
63
+ /**
64
+ * Set the effect mutations applied to targets.
65
+ *
66
+ * @param effect - Character state mutations
67
+ * @returns this for chaining
68
+ */
69
+ effect(effect: InfluenceEffect): InfluenceBuilder<TParent>;
70
+ /**
71
+ * Set the duration type.
72
+ *
73
+ * @param duration - 'while present', 'momentary', or 'lingering'
74
+ * @returns this for chaining
75
+ */
76
+ duration(duration: InfluenceDuration): InfluenceBuilder<TParent>;
77
+ /**
78
+ * Set the message ID when the target is affected.
79
+ *
80
+ * @param messageId - Message ID
81
+ * @returns this for chaining
82
+ */
83
+ witnessed(messageId: string): InfluenceBuilder<TParent>;
84
+ /**
85
+ * Set the message ID when the target resists.
86
+ *
87
+ * @param messageId - Message ID
88
+ * @returns this for chaining
89
+ */
90
+ resisted(messageId: string): InfluenceBuilder<TParent>;
91
+ /**
92
+ * Set scheduling conditions for passive influences.
93
+ *
94
+ * @param schedule - Schedule with predicate conditions
95
+ * @returns this for chaining
96
+ */
97
+ schedule(schedule: InfluenceSchedule): InfluenceBuilder<TParent>;
98
+ /**
99
+ * Set the message ID when PC tries to act while under this influence.
100
+ *
101
+ * @param messageId - Message ID
102
+ * @returns this for chaining
103
+ */
104
+ onPlayerAction(messageId: string): InfluenceBuilder<TParent>;
105
+ /**
106
+ * Set lingering duration in turns.
107
+ *
108
+ * @param turns - Number of turns the effect persists
109
+ * @returns this for chaining
110
+ */
111
+ lingeringTurns(turns: number): InfluenceBuilder<TParent>;
112
+ /**
113
+ * Set a predicate condition that clears a lingering effect.
114
+ *
115
+ * @param condition - Predicate condition
116
+ * @returns this for chaining
117
+ */
118
+ clearsWhen(condition: string): InfluenceBuilder<TParent>;
119
+ /**
120
+ * Finalize this influence definition and return the parent builder.
121
+ *
122
+ * @returns The parent builder
123
+ */
124
+ done(): TParent;
125
+ /**
126
+ * Compile the parent builder, auto-finalizing this influence.
127
+ *
128
+ * @returns Compiled character data (delegates to parent's compile())
129
+ */
130
+ compile(): ReturnType<TParent extends {
131
+ compile(): infer R;
132
+ } ? () => R : never>;
133
+ /** @internal Build the InfluenceDef without finalizing. */
134
+ _buildDef(): InfluenceDef;
135
+ }
136
+ //# sourceMappingURL=builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../../../../../repos/sharpee/packages/character/src/influence/builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,YAAY,EACb,MAAM,mBAAmB,CAAC;AAE3B;;;;;;;;;;;;;;GAcG;AACH,qBAAa,gBAAgB,CAAC,OAAO;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA8B;IACxD,OAAO,CAAC,KAAK,CAA4B;IACzC,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,SAAS,CAAsC;IACvD,OAAO,CAAC,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAC,CAAoB;IACtC,OAAO,CAAC,eAAe,CAAC,CAAS;IACjC,OAAO,CAAC,eAAe,CAAC,CAAS;IACjC,OAAO,CAAC,wBAAwB,CAAC,CAAS;IAE1C;;;;;;OAMG;gBACS,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI;IAMhF;;;;;OAKG;IACH,IAAI,CAAC,IAAI,EAAE,aAAa,GAAG,gBAAgB,CAAC,OAAO,CAAC;IAKpD;;;;;OAKG;IACH,KAAK,CAAC,KAAK,EAAE,cAAc,GAAG,gBAAgB,CAAC,OAAO,CAAC;IAKvD;;;;;OAKG;IACH,MAAM,CAAC,MAAM,EAAE,eAAe,GAAG,gBAAgB,CAAC,OAAO,CAAC;IAK1D;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,GAAG,gBAAgB,CAAC,OAAO,CAAC;IAKhE;;;;;OAKG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC;IAKvD;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC;IAKtD;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,GAAG,gBAAgB,CAAC,OAAO,CAAC;IAKhE;;;;;OAKG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC;IAK5D;;;;;OAKG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC;IAKxD;;;;;OAKG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC;IAKxD;;;;OAIG;IACH,IAAI,IAAI,OAAO;IAKf;;;;OAIG;IACH,OAAO,IAAI,UAAU,CAAC,OAAO,SAAS;QAAE,OAAO,IAAI,MAAM,CAAC,CAAA;KAAE,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC;IAK/E,2DAA2D;IAC3D,SAAS,IAAI,YAAY;CAkB1B"}
@@ -0,0 +1,198 @@
1
+ "use strict";
2
+ /**
3
+ * Influence builder API (ADR-146 layer 5)
4
+ *
5
+ * Fluent builder for defining NPC influences and resistances.
6
+ * Returns from CharacterBuilder.influence(name) and compiles to
7
+ * InfluenceDef stored in CompiledCharacter.influenceDefs.
8
+ *
9
+ * Public interface: InfluenceBuilder.
10
+ * Owner context: @sharpee/character / influence
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.InfluenceBuilder = void 0;
14
+ /**
15
+ * Fluent builder for a single influence definition.
16
+ *
17
+ * Usage:
18
+ * ```
19
+ * builder.influence('seduction')
20
+ * .mode('passive')
21
+ * .range('proximity')
22
+ * .effect({ focus: 'clouded', mood: 'distracted' })
23
+ * .duration('while present')
24
+ * .witnessed('ginger-brushes-against-{target}')
25
+ * .resisted('ginger-brushes-against-{target}-no-effect')
26
+ * .done()
27
+ * ```
28
+ */
29
+ class InfluenceBuilder {
30
+ _name;
31
+ _parent;
32
+ _finalize;
33
+ _mode = 'passive';
34
+ _range = 'proximity';
35
+ _effect = {};
36
+ _duration = 'while present';
37
+ _witnessed;
38
+ _resisted;
39
+ _schedule;
40
+ _onPlayerAction;
41
+ _lingeringTurns;
42
+ _lingeringClearCondition;
43
+ /**
44
+ * Create a new influence builder.
45
+ *
46
+ * @param name - Author-defined influence name
47
+ * @param parent - Parent builder to return to on .done()
48
+ * @param finalize - Callback to register the compiled InfluenceDef
49
+ */
50
+ constructor(name, parent, finalize) {
51
+ this._name = name;
52
+ this._parent = parent;
53
+ this._finalize = finalize;
54
+ }
55
+ /**
56
+ * Set the influence mode.
57
+ *
58
+ * @param mode - 'passive' or 'active'
59
+ * @returns this for chaining
60
+ */
61
+ mode(mode) {
62
+ this._mode = mode;
63
+ return this;
64
+ }
65
+ /**
66
+ * Set the influence range.
67
+ *
68
+ * @param range - 'proximity', 'targeted', or 'room'
69
+ * @returns this for chaining
70
+ */
71
+ range(range) {
72
+ this._range = range;
73
+ return this;
74
+ }
75
+ /**
76
+ * Set the effect mutations applied to targets.
77
+ *
78
+ * @param effect - Character state mutations
79
+ * @returns this for chaining
80
+ */
81
+ effect(effect) {
82
+ this._effect = { ...effect };
83
+ return this;
84
+ }
85
+ /**
86
+ * Set the duration type.
87
+ *
88
+ * @param duration - 'while present', 'momentary', or 'lingering'
89
+ * @returns this for chaining
90
+ */
91
+ duration(duration) {
92
+ this._duration = duration;
93
+ return this;
94
+ }
95
+ /**
96
+ * Set the message ID when the target is affected.
97
+ *
98
+ * @param messageId - Message ID
99
+ * @returns this for chaining
100
+ */
101
+ witnessed(messageId) {
102
+ this._witnessed = messageId;
103
+ return this;
104
+ }
105
+ /**
106
+ * Set the message ID when the target resists.
107
+ *
108
+ * @param messageId - Message ID
109
+ * @returns this for chaining
110
+ */
111
+ resisted(messageId) {
112
+ this._resisted = messageId;
113
+ return this;
114
+ }
115
+ /**
116
+ * Set scheduling conditions for passive influences.
117
+ *
118
+ * @param schedule - Schedule with predicate conditions
119
+ * @returns this for chaining
120
+ */
121
+ schedule(schedule) {
122
+ this._schedule = { ...schedule };
123
+ return this;
124
+ }
125
+ /**
126
+ * Set the message ID when PC tries to act while under this influence.
127
+ *
128
+ * @param messageId - Message ID
129
+ * @returns this for chaining
130
+ */
131
+ onPlayerAction(messageId) {
132
+ this._onPlayerAction = messageId;
133
+ return this;
134
+ }
135
+ /**
136
+ * Set lingering duration in turns.
137
+ *
138
+ * @param turns - Number of turns the effect persists
139
+ * @returns this for chaining
140
+ */
141
+ lingeringTurns(turns) {
142
+ this._lingeringTurns = turns;
143
+ return this;
144
+ }
145
+ /**
146
+ * Set a predicate condition that clears a lingering effect.
147
+ *
148
+ * @param condition - Predicate condition
149
+ * @returns this for chaining
150
+ */
151
+ clearsWhen(condition) {
152
+ this._lingeringClearCondition = condition;
153
+ return this;
154
+ }
155
+ /**
156
+ * Finalize this influence definition and return the parent builder.
157
+ *
158
+ * @returns The parent builder
159
+ */
160
+ done() {
161
+ this._finalize(this._buildDef());
162
+ return this._parent;
163
+ }
164
+ /**
165
+ * Compile the parent builder, auto-finalizing this influence.
166
+ *
167
+ * @returns Compiled character data (delegates to parent's compile())
168
+ */
169
+ compile() {
170
+ const parent = this.done();
171
+ return parent.compile();
172
+ }
173
+ /** @internal Build the InfluenceDef without finalizing. */
174
+ _buildDef() {
175
+ const def = {
176
+ name: this._name,
177
+ mode: this._mode,
178
+ range: this._range,
179
+ effect: { ...this._effect },
180
+ duration: this._duration,
181
+ };
182
+ if (this._witnessed !== undefined)
183
+ def.witnessed = this._witnessed;
184
+ if (this._resisted !== undefined)
185
+ def.resisted = this._resisted;
186
+ if (this._schedule !== undefined)
187
+ def.schedule = { ...this._schedule };
188
+ if (this._onPlayerAction !== undefined)
189
+ def.onPlayerAction = this._onPlayerAction;
190
+ if (this._lingeringTurns !== undefined)
191
+ def.lingeringTurns = this._lingeringTurns;
192
+ if (this._lingeringClearCondition !== undefined)
193
+ def.lingeringClearCondition = this._lingeringClearCondition;
194
+ return def;
195
+ }
196
+ }
197
+ exports.InfluenceBuilder = InfluenceBuilder;
198
+ //# sourceMappingURL=builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../../../../../../repos/sharpee/packages/character/src/influence/builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * NPC influence exports (ADR-146)
3
+ *
4
+ * Influence definitions, evaluation engine, duration tracking,
5
+ * and PC influence handling.
6
+ *
7
+ * Public interface: All re-exported types, classes, and functions.
8
+ * Owner context: @sharpee/character / influence
9
+ */
10
+ export { type InfluenceMode, type InfluenceRange, type InfluenceDuration, type InfluenceEffect, type InfluenceSchedule, type InfluenceDef, type ResistanceDef, type ActiveInfluenceEffect, type InfluenceResult, } from './influence-types';
11
+ export { type InfluenceRoomEntity, checkResistance, evaluatePassiveInfluences, evaluateActiveInfluence, } from './influence-evaluator';
12
+ export { InfluenceTracker } from './influence-duration';
13
+ export { type PcInfluenceResult, evaluatePcInfluence, } from './pc-influence';
14
+ export { InfluenceBuilder } from './builder';
15
+ export { InfluenceMessages, type InfluenceMessageId, } from './influence-messages';
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../repos/sharpee/packages/character/src/influence/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC1B,KAAK,eAAe,GACrB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,KAAK,mBAAmB,EACxB,eAAe,EACf,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EACL,KAAK,iBAAiB,EACtB,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7C,OAAO,EACL,iBAAiB,EACjB,KAAK,kBAAkB,GACxB,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ /**
3
+ * NPC influence exports (ADR-146)
4
+ *
5
+ * Influence definitions, evaluation engine, duration tracking,
6
+ * and PC influence handling.
7
+ *
8
+ * Public interface: All re-exported types, classes, and functions.
9
+ * Owner context: @sharpee/character / influence
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.InfluenceMessages = exports.InfluenceBuilder = exports.evaluatePcInfluence = exports.InfluenceTracker = exports.evaluateActiveInfluence = exports.evaluatePassiveInfluences = exports.checkResistance = void 0;
13
+ var influence_evaluator_1 = require("./influence-evaluator");
14
+ Object.defineProperty(exports, "checkResistance", { enumerable: true, get: function () { return influence_evaluator_1.checkResistance; } });
15
+ Object.defineProperty(exports, "evaluatePassiveInfluences", { enumerable: true, get: function () { return influence_evaluator_1.evaluatePassiveInfluences; } });
16
+ Object.defineProperty(exports, "evaluateActiveInfluence", { enumerable: true, get: function () { return influence_evaluator_1.evaluateActiveInfluence; } });
17
+ var influence_duration_1 = require("./influence-duration");
18
+ Object.defineProperty(exports, "InfluenceTracker", { enumerable: true, get: function () { return influence_duration_1.InfluenceTracker; } });
19
+ var pc_influence_1 = require("./pc-influence");
20
+ Object.defineProperty(exports, "evaluatePcInfluence", { enumerable: true, get: function () { return pc_influence_1.evaluatePcInfluence; } });
21
+ var builder_1 = require("./builder");
22
+ Object.defineProperty(exports, "InfluenceBuilder", { enumerable: true, get: function () { return builder_1.InfluenceBuilder; } });
23
+ var influence_messages_1 = require("./influence-messages");
24
+ Object.defineProperty(exports, "InfluenceMessages", { enumerable: true, get: function () { return influence_messages_1.InfluenceMessages; } });
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../repos/sharpee/packages/character/src/influence/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAcH,6DAK+B;AAH7B,sHAAA,eAAe,OAAA;AACf,gIAAA,yBAAyB,OAAA;AACzB,8HAAA,uBAAuB,OAAA;AAGzB,2DAAwD;AAA/C,sHAAA,gBAAgB,OAAA;AAEzB,+CAGwB;AADtB,mHAAA,mBAAmB,OAAA;AAGrB,qCAA6C;AAApC,2GAAA,gBAAgB,OAAA;AAEzB,2DAG8B;AAF5B,uHAAA,iBAAiB,OAAA"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Influence duration tracking (ADR-146 layer 3)
3
+ *
4
+ * Tracks active influence effects and manages their expiration:
5
+ * 'while present' clears when influencer leaves room,
6
+ * 'momentary' clears after one turn,
7
+ * 'lingering' clears after authored turns or when a condition is met.
8
+ *
9
+ * Public interface: InfluenceTracker.
10
+ * Owner context: @sharpee/character / influence
11
+ */
12
+ import { ActiveInfluenceEffect, InfluenceEffect, InfluenceDuration } from './influence-types';
13
+ /**
14
+ * Tracks and manages active influence effects across turns.
15
+ *
16
+ * The tracker maintains a list of currently active effects and
17
+ * provides methods to add, query, and expire them.
18
+ */
19
+ export declare class InfluenceTracker {
20
+ private effects;
21
+ /**
22
+ * Record a new active influence effect.
23
+ *
24
+ * @param influenceName - The influence name
25
+ * @param influencerId - The influencer entity ID
26
+ * @param targetId - The target entity ID
27
+ * @param effect - The applied effect mutations
28
+ * @param options - Duration, timing, and clear condition options
29
+ */
30
+ track(influenceName: string, influencerId: string, targetId: string, effect: InfluenceEffect, options: {
31
+ duration: InfluenceDuration;
32
+ turn: number;
33
+ lingeringTurns?: number;
34
+ clearCondition?: string;
35
+ }): void;
36
+ /**
37
+ * Get all active effects on a specific target.
38
+ *
39
+ * @param targetId - The target entity ID
40
+ * @returns Active effects affecting this target
41
+ */
42
+ getEffectsOn(targetId: string): ActiveInfluenceEffect[];
43
+ /**
44
+ * Get all active effects from a specific influencer.
45
+ *
46
+ * @param influencerId - The influencer entity ID
47
+ * @returns Active effects from this influencer
48
+ */
49
+ getEffectsFrom(influencerId: string): ActiveInfluenceEffect[];
50
+ /**
51
+ * Check if a target is under a specific influence.
52
+ *
53
+ * @param targetId - The target entity ID
54
+ * @param influenceName - The influence name
55
+ * @returns true if the target is currently under this influence
56
+ */
57
+ isUnderInfluence(targetId: string, influenceName: string): boolean;
58
+ /**
59
+ * Expire 'while present' effects when the influencer leaves a room.
60
+ *
61
+ * @param influencerId - The influencer who left
62
+ * @param roomEntityIds - Entity IDs still in the room (targets to clear)
63
+ * @returns Effects that were cleared
64
+ */
65
+ expireOnDeparture(influencerId: string, roomEntityIds?: string[]): ActiveInfluenceEffect[];
66
+ /**
67
+ * Expire 'momentary' effects and check lingering expiration.
68
+ * Call once per turn.
69
+ *
70
+ * @param currentTurn - The current turn number
71
+ * @param evaluatePredicate - Function to evaluate clear conditions (targetId, predicate) => boolean
72
+ * @returns Effects that were cleared
73
+ */
74
+ expireTurn(currentTurn: number, evaluatePredicate?: (targetId: string, predicate: string) => boolean): ActiveInfluenceEffect[];
75
+ /** Get the count of active effects. */
76
+ get count(): number;
77
+ /** Export for serialization. */
78
+ toJSON(): ActiveInfluenceEffect[];
79
+ /** Restore from serialized data. */
80
+ static fromJSON(data: ActiveInfluenceEffect[]): InfluenceTracker;
81
+ }
82
+ //# sourceMappingURL=influence-duration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"influence-duration.d.ts","sourceRoot":"","sources":["../../../../../../repos/sharpee/packages/character/src/influence/influence-duration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACL,qBAAqB,EACrB,eAAe,EACf,iBAAiB,EAClB,MAAM,mBAAmB,CAAC;AAE3B;;;;;GAKG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAA+B;IAE9C;;;;;;;;OAQG;IACH,KAAK,CACH,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE;QACP,QAAQ,EAAE,iBAAiB,CAAC;QAC5B,IAAI,EAAE,MAAM,CAAC;QACb,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,GACA,IAAI;IAuBP;;;;;OAKG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,qBAAqB,EAAE;IAIvD;;;;;OAKG;IACH,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,qBAAqB,EAAE;IAI7D;;;;;;OAMG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO;IAMlE;;;;;;OAMG;IACH,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,qBAAqB,EAAE;IAe1F;;;;;;;OAOG;IACH,UAAU,CACR,WAAW,EAAE,MAAM,EACnB,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,GACnE,qBAAqB,EAAE;IAoC1B,uCAAuC;IACvC,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,gCAAgC;IAChC,MAAM,IAAI,qBAAqB,EAAE;IAIjC,oCAAoC;IACpC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,qBAAqB,EAAE,GAAG,gBAAgB;CAKjE"}
@@ -0,0 +1,148 @@
1
+ "use strict";
2
+ /**
3
+ * Influence duration tracking (ADR-146 layer 3)
4
+ *
5
+ * Tracks active influence effects and manages their expiration:
6
+ * 'while present' clears when influencer leaves room,
7
+ * 'momentary' clears after one turn,
8
+ * 'lingering' clears after authored turns or when a condition is met.
9
+ *
10
+ * Public interface: InfluenceTracker.
11
+ * Owner context: @sharpee/character / influence
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.InfluenceTracker = void 0;
15
+ /**
16
+ * Tracks and manages active influence effects across turns.
17
+ *
18
+ * The tracker maintains a list of currently active effects and
19
+ * provides methods to add, query, and expire them.
20
+ */
21
+ class InfluenceTracker {
22
+ effects = [];
23
+ /**
24
+ * Record a new active influence effect.
25
+ *
26
+ * @param influenceName - The influence name
27
+ * @param influencerId - The influencer entity ID
28
+ * @param targetId - The target entity ID
29
+ * @param effect - The applied effect mutations
30
+ * @param options - Duration, timing, and clear condition options
31
+ */
32
+ track(influenceName, influencerId, targetId, effect, options) {
33
+ const { duration, turn, lingeringTurns, clearCondition } = options;
34
+ // Don't double-track the same influence on the same target from the same source
35
+ const existing = this.effects.findIndex(e => e.influenceName === influenceName &&
36
+ e.influencerId === influencerId &&
37
+ e.targetId === targetId);
38
+ if (existing >= 0)
39
+ return;
40
+ this.effects.push({
41
+ influenceName,
42
+ influencerId,
43
+ targetId,
44
+ effect: { ...effect },
45
+ duration,
46
+ appliedAtTurn: turn,
47
+ expiresAtTurn: lingeringTurns != null ? turn + lingeringTurns : undefined,
48
+ clearCondition,
49
+ });
50
+ }
51
+ /**
52
+ * Get all active effects on a specific target.
53
+ *
54
+ * @param targetId - The target entity ID
55
+ * @returns Active effects affecting this target
56
+ */
57
+ getEffectsOn(targetId) {
58
+ return this.effects.filter(e => e.targetId === targetId);
59
+ }
60
+ /**
61
+ * Get all active effects from a specific influencer.
62
+ *
63
+ * @param influencerId - The influencer entity ID
64
+ * @returns Active effects from this influencer
65
+ */
66
+ getEffectsFrom(influencerId) {
67
+ return this.effects.filter(e => e.influencerId === influencerId);
68
+ }
69
+ /**
70
+ * Check if a target is under a specific influence.
71
+ *
72
+ * @param targetId - The target entity ID
73
+ * @param influenceName - The influence name
74
+ * @returns true if the target is currently under this influence
75
+ */
76
+ isUnderInfluence(targetId, influenceName) {
77
+ return this.effects.some(e => e.targetId === targetId && e.influenceName === influenceName);
78
+ }
79
+ /**
80
+ * Expire 'while present' effects when the influencer leaves a room.
81
+ *
82
+ * @param influencerId - The influencer who left
83
+ * @param roomEntityIds - Entity IDs still in the room (targets to clear)
84
+ * @returns Effects that were cleared
85
+ */
86
+ expireOnDeparture(influencerId, roomEntityIds) {
87
+ const expired = [];
88
+ this.effects = this.effects.filter(e => {
89
+ if (e.influencerId === influencerId &&
90
+ e.duration === 'while present') {
91
+ expired.push(e);
92
+ return false;
93
+ }
94
+ return true;
95
+ });
96
+ return expired;
97
+ }
98
+ /**
99
+ * Expire 'momentary' effects and check lingering expiration.
100
+ * Call once per turn.
101
+ *
102
+ * @param currentTurn - The current turn number
103
+ * @param evaluatePredicate - Function to evaluate clear conditions (targetId, predicate) => boolean
104
+ * @returns Effects that were cleared
105
+ */
106
+ expireTurn(currentTurn, evaluatePredicate) {
107
+ const expired = [];
108
+ this.effects = this.effects.filter(e => {
109
+ // Momentary: expires after one turn (applied on turn N, gone on turn N+1)
110
+ if (e.duration === 'momentary' && currentTurn > e.appliedAtTurn) {
111
+ expired.push(e);
112
+ return false;
113
+ }
114
+ // Lingering with turn limit
115
+ if (e.duration === 'lingering' &&
116
+ e.expiresAtTurn !== undefined &&
117
+ currentTurn >= e.expiresAtTurn) {
118
+ expired.push(e);
119
+ return false;
120
+ }
121
+ // Lingering with clear condition
122
+ if (e.duration === 'lingering' &&
123
+ e.clearCondition &&
124
+ evaluatePredicate?.(e.targetId, e.clearCondition)) {
125
+ expired.push(e);
126
+ return false;
127
+ }
128
+ return true;
129
+ });
130
+ return expired;
131
+ }
132
+ /** Get the count of active effects. */
133
+ get count() {
134
+ return this.effects.length;
135
+ }
136
+ /** Export for serialization. */
137
+ toJSON() {
138
+ return this.effects.map(e => ({ ...e, effect: { ...e.effect } }));
139
+ }
140
+ /** Restore from serialized data. */
141
+ static fromJSON(data) {
142
+ const tracker = new InfluenceTracker();
143
+ tracker.effects = data.map(e => ({ ...e, effect: { ...e.effect } }));
144
+ return tracker;
145
+ }
146
+ }
147
+ exports.InfluenceTracker = InfluenceTracker;
148
+ //# sourceMappingURL=influence-duration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"influence-duration.js","sourceRoot":"","sources":["../../../../../../../repos/sharpee/packages/character/src/influence/influence-duration.ts"],"names":[],"mappings":"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"}