@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.
- package/apply.d.ts +29 -7
- package/apply.d.ts.map +1 -1
- package/apply.js +15 -7
- package/apply.js.map +1 -1
- package/character-builder.d.ts +67 -4
- package/character-builder.d.ts.map +1 -1
- package/character-builder.js +116 -7
- package/character-builder.js.map +1 -1
- package/conversation/acl.d.ts +62 -0
- package/conversation/acl.d.ts.map +1 -0
- package/conversation/acl.js +117 -0
- package/conversation/acl.js.map +1 -0
- package/conversation/builder.d.ts +247 -0
- package/conversation/builder.d.ts.map +1 -0
- package/conversation/builder.js +324 -0
- package/conversation/builder.js.map +1 -0
- package/conversation/constraint-evaluator.d.ts +147 -0
- package/conversation/constraint-evaluator.d.ts.map +1 -0
- package/conversation/constraint-evaluator.js +247 -0
- package/conversation/constraint-evaluator.js.map +1 -0
- package/conversation/conversation-messages.d.ts +56 -0
- package/conversation/conversation-messages.d.ts.map +1 -0
- package/conversation/conversation-messages.js +69 -0
- package/conversation/conversation-messages.js.map +1 -0
- package/conversation/dialogue-extension.d.ts +87 -0
- package/conversation/dialogue-extension.d.ts.map +1 -0
- package/conversation/dialogue-extension.js +302 -0
- package/conversation/dialogue-extension.js.map +1 -0
- package/conversation/dialogue-types.d.ts +71 -0
- package/conversation/dialogue-types.d.ts.map +1 -0
- package/conversation/dialogue-types.js +13 -0
- package/conversation/dialogue-types.js.map +1 -0
- package/conversation/index.d.ts +19 -0
- package/conversation/index.d.ts.map +1 -0
- package/conversation/index.js +37 -0
- package/conversation/index.js.map +1 -0
- package/conversation/lifecycle.d.ts +212 -0
- package/conversation/lifecycle.d.ts.map +1 -0
- package/conversation/lifecycle.js +348 -0
- package/conversation/lifecycle.js.map +1 -0
- package/conversation/response-types.d.ts +98 -0
- package/conversation/response-types.d.ts.map +1 -0
- package/conversation/response-types.js +30 -0
- package/conversation/response-types.js.map +1 -0
- package/conversation/topic-registry.d.ts +130 -0
- package/conversation/topic-registry.d.ts.map +1 -0
- package/conversation/topic-registry.js +187 -0
- package/conversation/topic-registry.js.map +1 -0
- package/goals/builder.d.ts +135 -0
- package/goals/builder.d.ts.map +1 -0
- package/goals/builder.js +193 -0
- package/goals/builder.js.map +1 -0
- package/goals/goal-activation.d.ts +99 -0
- package/goals/goal-activation.d.ts.map +1 -0
- package/goals/goal-activation.js +212 -0
- package/goals/goal-activation.js.map +1 -0
- package/goals/goal-types.d.ts +138 -0
- package/goals/goal-types.d.ts.map +1 -0
- package/goals/goal-types.js +20 -0
- package/goals/goal-types.js.map +1 -0
- package/goals/index.d.ts +15 -0
- package/goals/index.d.ts.map +1 -0
- package/goals/index.js +24 -0
- package/goals/index.js.map +1 -0
- package/goals/pathfinding.d.ts +67 -0
- package/goals/pathfinding.d.ts.map +1 -0
- package/goals/pathfinding.js +134 -0
- package/goals/pathfinding.js.map +1 -0
- package/goals/step-evaluator.d.ts +52 -0
- package/goals/step-evaluator.d.ts.map +1 -0
- package/goals/step-evaluator.js +153 -0
- package/goals/step-evaluator.js.map +1 -0
- package/index.d.ts +6 -1
- package/index.d.ts.map +1 -1
- package/index.js +60 -1
- package/index.js.map +1 -1
- package/influence/builder.d.ts +136 -0
- package/influence/builder.d.ts.map +1 -0
- package/influence/builder.js +198 -0
- package/influence/builder.js.map +1 -0
- package/influence/index.d.ts +16 -0
- package/influence/index.d.ts.map +1 -0
- package/influence/index.js +25 -0
- package/influence/index.js.map +1 -0
- package/influence/influence-duration.d.ts +82 -0
- package/influence/influence-duration.d.ts.map +1 -0
- package/influence/influence-duration.js +148 -0
- package/influence/influence-duration.js.map +1 -0
- package/influence/influence-evaluator.d.ts +55 -0
- package/influence/influence-evaluator.d.ts.map +1 -0
- package/influence/influence-evaluator.js +183 -0
- package/influence/influence-evaluator.js.map +1 -0
- package/influence/influence-messages.d.ts +30 -0
- package/influence/influence-messages.d.ts.map +1 -0
- package/influence/influence-messages.js +40 -0
- package/influence/influence-messages.js.map +1 -0
- package/influence/influence-types.d.ts +123 -0
- package/influence/influence-types.d.ts.map +1 -0
- package/influence/influence-types.js +12 -0
- package/influence/influence-types.js.map +1 -0
- package/influence/pc-influence.d.ts +38 -0
- package/influence/pc-influence.d.ts.map +1 -0
- package/influence/pc-influence.js +56 -0
- package/influence/pc-influence.js.map +1 -0
- package/package.json +4 -3
- package/propagation/builder.d.ts +47 -0
- package/propagation/builder.d.ts.map +1 -0
- package/propagation/builder.js +46 -0
- package/propagation/builder.js.map +1 -0
- package/propagation/fact-transfer.d.ts +47 -0
- package/propagation/fact-transfer.d.ts.map +1 -0
- package/propagation/fact-transfer.js +76 -0
- package/propagation/fact-transfer.js.map +1 -0
- package/propagation/index.d.ts +16 -0
- package/propagation/index.d.ts.map +1 -0
- package/propagation/index.js +28 -0
- package/propagation/index.js.map +1 -0
- package/propagation/propagation-evaluator.d.ts +53 -0
- package/propagation/propagation-evaluator.d.ts.map +1 -0
- package/propagation/propagation-evaluator.js +231 -0
- package/propagation/propagation-evaluator.js.map +1 -0
- package/propagation/propagation-messages.d.ts +30 -0
- package/propagation/propagation-messages.d.ts.map +1 -0
- package/propagation/propagation-messages.js +37 -0
- package/propagation/propagation-messages.js.map +1 -0
- package/propagation/propagation-types.d.ts +100 -0
- package/propagation/propagation-types.d.ts.map +1 -0
- package/propagation/propagation-types.js +68 -0
- package/propagation/propagation-types.js.map +1 -0
- package/propagation/visibility.d.ts +46 -0
- package/propagation/visibility.d.ts.map +1 -0
- package/propagation/visibility.js +79 -0
- package/propagation/visibility.js.map +1 -0
- package/tick-phases.d.ts +93 -0
- package/tick-phases.d.ts.map +1 -0
- package/tick-phases.js +433 -0
- package/tick-phases.js.map +1 -0
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Conversation builder API (ADR-142)
|
|
3
|
+
*
|
|
4
|
+
* Extends CharacterBuilder with fluent methods for defining conversation
|
|
5
|
+
* topics, response constraints, NPC initiative, and NPC-to-NPC scenes.
|
|
6
|
+
* Compiles to ConversationData stored in CompiledCharacter.
|
|
7
|
+
*
|
|
8
|
+
* Public interface: ConversationBuilder, ResponseChainBuilder,
|
|
9
|
+
* ConversationData, OffscreenScene, WitnessedScene, DialogueLine.
|
|
10
|
+
* Owner context: @sharpee/character / conversation
|
|
11
|
+
*/
|
|
12
|
+
import { CharacterBuilder } from '../character-builder';
|
|
13
|
+
import { TopicDef } from './topic-registry';
|
|
14
|
+
import { ResponseCandidate } from './response-types';
|
|
15
|
+
import { ConversationIntent, ConversationStrength, InitiativeTrigger } from './lifecycle';
|
|
16
|
+
/** State mutations triggered by a response. */
|
|
17
|
+
export interface ResponseStateMutation {
|
|
18
|
+
threat?: number;
|
|
19
|
+
mood?: string;
|
|
20
|
+
disposition?: Record<string, string>;
|
|
21
|
+
}
|
|
22
|
+
/** Context settings attached to a response. */
|
|
23
|
+
export interface ResponseContextSettings {
|
|
24
|
+
label: string;
|
|
25
|
+
intent?: ConversationIntent;
|
|
26
|
+
strength?: ConversationStrength;
|
|
27
|
+
decayThreshold?: number;
|
|
28
|
+
}
|
|
29
|
+
/** Between-turn override keyed by turn number. */
|
|
30
|
+
export interface BetweenTurnOverride {
|
|
31
|
+
turnNumber: number;
|
|
32
|
+
messageId: string;
|
|
33
|
+
}
|
|
34
|
+
/** An authored response with its full metadata. */
|
|
35
|
+
export interface AuthoredResponse {
|
|
36
|
+
/** The response candidate for constraint evaluation. */
|
|
37
|
+
candidate: ResponseCandidate;
|
|
38
|
+
/** Optional context to set after this response. */
|
|
39
|
+
contextSettings?: ResponseContextSettings;
|
|
40
|
+
/** Optional state mutations to apply after this response. */
|
|
41
|
+
stateMutations?: ResponseStateMutation;
|
|
42
|
+
/** Between-turn message overrides within this response's context. */
|
|
43
|
+
betweenTurnOverrides?: BetweenTurnOverride[];
|
|
44
|
+
/** Leave-attempt message when this response's context is blocking. */
|
|
45
|
+
onLeaveAttemptMessage?: string;
|
|
46
|
+
}
|
|
47
|
+
/** A dialogue line in an NPC-to-NPC scene. */
|
|
48
|
+
export interface DialogueLine {
|
|
49
|
+
speaker: string;
|
|
50
|
+
says: string;
|
|
51
|
+
}
|
|
52
|
+
/** An offscreen NPC-to-NPC conversation (player absent). */
|
|
53
|
+
export interface OffscreenScene {
|
|
54
|
+
npcA: string;
|
|
55
|
+
npcB: string;
|
|
56
|
+
conditions: string[];
|
|
57
|
+
mutations: Record<string, ResponseStateMutation>;
|
|
58
|
+
topicUnlocks?: Record<string, string[]>;
|
|
59
|
+
onReturnMessage?: string;
|
|
60
|
+
}
|
|
61
|
+
/** An eavesdropping NPC-to-NPC conversation (player concealed). */
|
|
62
|
+
export interface WitnessedScene {
|
|
63
|
+
npcA: string;
|
|
64
|
+
npcB: string;
|
|
65
|
+
conditions: string[];
|
|
66
|
+
dialogue: DialogueLine[];
|
|
67
|
+
mutations: Record<string, ResponseStateMutation>;
|
|
68
|
+
playerLearns?: {
|
|
69
|
+
topic: string;
|
|
70
|
+
source: string;
|
|
71
|
+
};
|
|
72
|
+
discoveredBy?: {
|
|
73
|
+
condition: string;
|
|
74
|
+
messageId: string;
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
/** All conversation data compiled from the builder. */
|
|
78
|
+
export interface ConversationData {
|
|
79
|
+
/** Topic definitions. */
|
|
80
|
+
topics: TopicDef[];
|
|
81
|
+
/** Authored responses keyed by topic trigger (e.g., 'asked about murder'). */
|
|
82
|
+
responses: Map<string, AuthoredResponse[]>;
|
|
83
|
+
/** NPC initiative triggers. */
|
|
84
|
+
initiatives: InitiativeTrigger[];
|
|
85
|
+
/** Offscreen NPC-to-NPC scenes. */
|
|
86
|
+
offscreenScenes: OffscreenScene[];
|
|
87
|
+
/** Witnessed/eavesdropping NPC-to-NPC scenes. */
|
|
88
|
+
witnessedScenes: WitnessedScene[];
|
|
89
|
+
}
|
|
90
|
+
/** Create empty conversation data. */
|
|
91
|
+
export declare function createConversationData(): ConversationData;
|
|
92
|
+
/**
|
|
93
|
+
* Fluent builder for defining response constraints within a topic trigger.
|
|
94
|
+
* Each .if().action() pair becomes one ResponseCandidate.
|
|
95
|
+
*/
|
|
96
|
+
export declare class ResponseChainBuilder {
|
|
97
|
+
private readonly parentBuilder;
|
|
98
|
+
private readonly trigger;
|
|
99
|
+
private candidates;
|
|
100
|
+
private currentConstraints;
|
|
101
|
+
private pendingContextSettings?;
|
|
102
|
+
private pendingStateMutations?;
|
|
103
|
+
private pendingBetweenTurnOverrides;
|
|
104
|
+
private pendingOnLeaveAttemptMessage?;
|
|
105
|
+
constructor(trigger: string, parent: ConversationBuilder);
|
|
106
|
+
/**
|
|
107
|
+
* Set predicate constraints for the next response.
|
|
108
|
+
* All predicates must be satisfied for this response to be selected.
|
|
109
|
+
*
|
|
110
|
+
* @param predicates - Predicate names
|
|
111
|
+
* @returns this for chaining
|
|
112
|
+
*/
|
|
113
|
+
if(...predicates: string[]): ResponseChainBuilder;
|
|
114
|
+
/**
|
|
115
|
+
* Mark the next response as the fallback (no constraints).
|
|
116
|
+
*
|
|
117
|
+
* @returns this for chaining
|
|
118
|
+
*/
|
|
119
|
+
otherwise(): ResponseChainBuilder;
|
|
120
|
+
private addResponse;
|
|
121
|
+
/** Share the information truthfully. */
|
|
122
|
+
tell(messageId: string, params?: Record<string, () => unknown>): ResponseChainBuilder;
|
|
123
|
+
/** Provide false information. */
|
|
124
|
+
lie(messageId: string): ResponseChainBuilder;
|
|
125
|
+
/** Change the subject. */
|
|
126
|
+
deflect(messageId: string): ResponseChainBuilder;
|
|
127
|
+
/** Explicitly refuse to answer. */
|
|
128
|
+
refuse(messageId: string): ResponseChainBuilder;
|
|
129
|
+
/** Know but don't mention. */
|
|
130
|
+
omit(messageId: string): ResponseChainBuilder;
|
|
131
|
+
/** Reveal previously hidden truth. */
|
|
132
|
+
confess(messageId: string): ResponseChainBuilder;
|
|
133
|
+
/** Fill gaps with invented details (NPC believes them). */
|
|
134
|
+
confabulate(messageId: string): ResponseChainBuilder;
|
|
135
|
+
/** Turn the question around. */
|
|
136
|
+
askBack(messageId: string): ResponseChainBuilder;
|
|
137
|
+
/**
|
|
138
|
+
* Set conversation context after this response.
|
|
139
|
+
*
|
|
140
|
+
* @param label - Context label
|
|
141
|
+
* @param opts - Optional intent, strength, decay threshold
|
|
142
|
+
* @returns this for chaining
|
|
143
|
+
*/
|
|
144
|
+
setsContext(label: string, opts?: {
|
|
145
|
+
intent?: ConversationIntent;
|
|
146
|
+
strength?: ConversationStrength;
|
|
147
|
+
decayThreshold?: number;
|
|
148
|
+
}): ResponseChainBuilder;
|
|
149
|
+
/**
|
|
150
|
+
* Override between-turn commentary within this response's context.
|
|
151
|
+
*
|
|
152
|
+
* @param turnNumber - Which non-conversation turn this fires on
|
|
153
|
+
* @param messageId - The message ID
|
|
154
|
+
* @returns this for chaining
|
|
155
|
+
*/
|
|
156
|
+
betweenTurns(turnNumber: number, messageId: string): ResponseChainBuilder;
|
|
157
|
+
/**
|
|
158
|
+
* Set the message shown when the player tries to leave during a blocking context.
|
|
159
|
+
*
|
|
160
|
+
* @param messageId - The message ID
|
|
161
|
+
* @returns this for chaining
|
|
162
|
+
*/
|
|
163
|
+
onLeaveAttempt(messageId: string): ResponseChainBuilder;
|
|
164
|
+
/**
|
|
165
|
+
* Apply state mutations after this response.
|
|
166
|
+
*
|
|
167
|
+
* @param mutations - State changes (threat, mood, disposition)
|
|
168
|
+
* @returns this for chaining
|
|
169
|
+
*/
|
|
170
|
+
updatesState(mutations: ResponseStateMutation): ResponseChainBuilder;
|
|
171
|
+
/**
|
|
172
|
+
* Start a new .when() trigger chain, finalizing this one.
|
|
173
|
+
*
|
|
174
|
+
* @param trigger - The new trigger (e.g., 'asked about weapon')
|
|
175
|
+
* @returns A new ResponseChainBuilder for the new trigger
|
|
176
|
+
*/
|
|
177
|
+
when(trigger: string): ResponseChainBuilder;
|
|
178
|
+
/**
|
|
179
|
+
* Return to the parent builder, finalizing this chain.
|
|
180
|
+
*
|
|
181
|
+
* @returns The parent ConversationBuilder
|
|
182
|
+
*/
|
|
183
|
+
done(): ConversationBuilder;
|
|
184
|
+
/** @internal Finalize this chain and push candidates to parent. */
|
|
185
|
+
finalize(): void;
|
|
186
|
+
/** @internal Get candidates without finalizing (for testing). */
|
|
187
|
+
_getCandidates(): AuthoredResponse[];
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Extends CharacterBuilder with conversation-specific methods.
|
|
191
|
+
* Accumulates conversation data and compiles it alongside
|
|
192
|
+
* the character model data.
|
|
193
|
+
*/
|
|
194
|
+
export declare class ConversationBuilder extends CharacterBuilder {
|
|
195
|
+
private readonly _conversationData;
|
|
196
|
+
private _activeChain?;
|
|
197
|
+
/**
|
|
198
|
+
* Define a conversation topic.
|
|
199
|
+
*
|
|
200
|
+
* @param name - The canonical topic name
|
|
201
|
+
* @param def - Topic definition (keywords, related, availableWhen)
|
|
202
|
+
* @returns this for chaining
|
|
203
|
+
*/
|
|
204
|
+
topic(name: string, def: Omit<TopicDef, 'name'>): ConversationBuilder;
|
|
205
|
+
/**
|
|
206
|
+
* Begin a response chain for a trigger.
|
|
207
|
+
* The trigger is typically 'asked about {topic}' or 'told about {topic}'.
|
|
208
|
+
*
|
|
209
|
+
* @param trigger - The trigger string
|
|
210
|
+
* @returns A ResponseChainBuilder for fluent chaining
|
|
211
|
+
*/
|
|
212
|
+
when(trigger: string): ResponseChainBuilder;
|
|
213
|
+
/** @internal Called by ResponseChainBuilder to register completed responses. */
|
|
214
|
+
_addResponses(trigger: string, responses: AuthoredResponse[]): void;
|
|
215
|
+
/**
|
|
216
|
+
* Define when this NPC initiates conversation proactively.
|
|
217
|
+
*
|
|
218
|
+
* @param conditions - Predicate conditions
|
|
219
|
+
* @param messageId - The message ID when the NPC initiates
|
|
220
|
+
* @returns this for chaining
|
|
221
|
+
*/
|
|
222
|
+
initiates(conditions: string[], messageId: string): ConversationBuilder;
|
|
223
|
+
/**
|
|
224
|
+
* Define an offscreen NPC-to-NPC conversation (player absent).
|
|
225
|
+
*
|
|
226
|
+
* @param scene - The offscreen scene definition
|
|
227
|
+
* @returns this for chaining
|
|
228
|
+
*/
|
|
229
|
+
offscreen(scene: OffscreenScene): ConversationBuilder;
|
|
230
|
+
/**
|
|
231
|
+
* Define an eavesdropping scene (player concealed).
|
|
232
|
+
*
|
|
233
|
+
* @param scene - The witnessed scene definition
|
|
234
|
+
* @returns this for chaining
|
|
235
|
+
*/
|
|
236
|
+
witnessed(scene: WitnessedScene): ConversationBuilder;
|
|
237
|
+
/**
|
|
238
|
+
* Get the compiled conversation data.
|
|
239
|
+
* Finalizes any pending response chain.
|
|
240
|
+
*
|
|
241
|
+
* @returns The conversation data
|
|
242
|
+
*/
|
|
243
|
+
getConversationData(): ConversationData;
|
|
244
|
+
/** Finalize any pending response chain builder. */
|
|
245
|
+
private _finalizePendingChain;
|
|
246
|
+
}
|
|
247
|
+
//# sourceMappingURL=builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../../../../../repos/sharpee/packages/character/src/conversation/builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Conversation builder API (ADR-142)
|
|
4
|
+
*
|
|
5
|
+
* Extends CharacterBuilder with fluent methods for defining conversation
|
|
6
|
+
* topics, response constraints, NPC initiative, and NPC-to-NPC scenes.
|
|
7
|
+
* Compiles to ConversationData stored in CompiledCharacter.
|
|
8
|
+
*
|
|
9
|
+
* Public interface: ConversationBuilder, ResponseChainBuilder,
|
|
10
|
+
* ConversationData, OffscreenScene, WitnessedScene, DialogueLine.
|
|
11
|
+
* Owner context: @sharpee/character / conversation
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.ConversationBuilder = exports.ResponseChainBuilder = void 0;
|
|
15
|
+
exports.createConversationData = createConversationData;
|
|
16
|
+
const character_builder_1 = require("../character-builder");
|
|
17
|
+
/** Create empty conversation data. */
|
|
18
|
+
function createConversationData() {
|
|
19
|
+
return {
|
|
20
|
+
topics: [],
|
|
21
|
+
responses: new Map(),
|
|
22
|
+
initiatives: [],
|
|
23
|
+
offscreenScenes: [],
|
|
24
|
+
witnessedScenes: [],
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
// ---------------------------------------------------------------------------
|
|
28
|
+
// Response chain builder (fluent chain for .when().if().tell() etc.)
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
/**
|
|
31
|
+
* Fluent builder for defining response constraints within a topic trigger.
|
|
32
|
+
* Each .if().action() pair becomes one ResponseCandidate.
|
|
33
|
+
*/
|
|
34
|
+
class ResponseChainBuilder {
|
|
35
|
+
parentBuilder;
|
|
36
|
+
trigger;
|
|
37
|
+
candidates = [];
|
|
38
|
+
currentConstraints = [];
|
|
39
|
+
pendingContextSettings;
|
|
40
|
+
pendingStateMutations;
|
|
41
|
+
pendingBetweenTurnOverrides = [];
|
|
42
|
+
pendingOnLeaveAttemptMessage;
|
|
43
|
+
constructor(trigger, parent) {
|
|
44
|
+
this.trigger = trigger;
|
|
45
|
+
this.parentBuilder = parent;
|
|
46
|
+
}
|
|
47
|
+
// =========================================================================
|
|
48
|
+
// Constraint setting
|
|
49
|
+
// =========================================================================
|
|
50
|
+
/**
|
|
51
|
+
* Set predicate constraints for the next response.
|
|
52
|
+
* All predicates must be satisfied for this response to be selected.
|
|
53
|
+
*
|
|
54
|
+
* @param predicates - Predicate names
|
|
55
|
+
* @returns this for chaining
|
|
56
|
+
*/
|
|
57
|
+
if(...predicates) {
|
|
58
|
+
this.currentConstraints = predicates;
|
|
59
|
+
return this;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Mark the next response as the fallback (no constraints).
|
|
63
|
+
*
|
|
64
|
+
* @returns this for chaining
|
|
65
|
+
*/
|
|
66
|
+
otherwise() {
|
|
67
|
+
this.currentConstraints = [];
|
|
68
|
+
return this;
|
|
69
|
+
}
|
|
70
|
+
// =========================================================================
|
|
71
|
+
// Response actions
|
|
72
|
+
// =========================================================================
|
|
73
|
+
addResponse(action, messageId, params) {
|
|
74
|
+
const authored = {
|
|
75
|
+
candidate: {
|
|
76
|
+
action,
|
|
77
|
+
messageId,
|
|
78
|
+
constraints: [...this.currentConstraints],
|
|
79
|
+
params,
|
|
80
|
+
},
|
|
81
|
+
contextSettings: this.pendingContextSettings,
|
|
82
|
+
stateMutations: this.pendingStateMutations,
|
|
83
|
+
betweenTurnOverrides: this.pendingBetweenTurnOverrides.length > 0
|
|
84
|
+
? [...this.pendingBetweenTurnOverrides]
|
|
85
|
+
: undefined,
|
|
86
|
+
onLeaveAttemptMessage: this.pendingOnLeaveAttemptMessage,
|
|
87
|
+
};
|
|
88
|
+
this.candidates.push(authored);
|
|
89
|
+
// Reset pending state for next response
|
|
90
|
+
this.currentConstraints = [];
|
|
91
|
+
this.pendingContextSettings = undefined;
|
|
92
|
+
this.pendingStateMutations = undefined;
|
|
93
|
+
this.pendingBetweenTurnOverrides = [];
|
|
94
|
+
this.pendingOnLeaveAttemptMessage = undefined;
|
|
95
|
+
return this;
|
|
96
|
+
}
|
|
97
|
+
/** Share the information truthfully. */
|
|
98
|
+
tell(messageId, params) {
|
|
99
|
+
return this.addResponse('tell', messageId, params);
|
|
100
|
+
}
|
|
101
|
+
/** Provide false information. */
|
|
102
|
+
lie(messageId) {
|
|
103
|
+
return this.addResponse('lie', messageId);
|
|
104
|
+
}
|
|
105
|
+
/** Change the subject. */
|
|
106
|
+
deflect(messageId) {
|
|
107
|
+
return this.addResponse('deflect', messageId);
|
|
108
|
+
}
|
|
109
|
+
/** Explicitly refuse to answer. */
|
|
110
|
+
refuse(messageId) {
|
|
111
|
+
return this.addResponse('refuse', messageId);
|
|
112
|
+
}
|
|
113
|
+
/** Know but don't mention. */
|
|
114
|
+
omit(messageId) {
|
|
115
|
+
return this.addResponse('omit', messageId);
|
|
116
|
+
}
|
|
117
|
+
/** Reveal previously hidden truth. */
|
|
118
|
+
confess(messageId) {
|
|
119
|
+
return this.addResponse('confess', messageId);
|
|
120
|
+
}
|
|
121
|
+
/** Fill gaps with invented details (NPC believes them). */
|
|
122
|
+
confabulate(messageId) {
|
|
123
|
+
return this.addResponse('confabulate', messageId);
|
|
124
|
+
}
|
|
125
|
+
/** Turn the question around. */
|
|
126
|
+
askBack(messageId) {
|
|
127
|
+
return this.addResponse('ask back', messageId);
|
|
128
|
+
}
|
|
129
|
+
// =========================================================================
|
|
130
|
+
// Response modifiers (applied to the NEXT response added)
|
|
131
|
+
// =========================================================================
|
|
132
|
+
/**
|
|
133
|
+
* Set conversation context after this response.
|
|
134
|
+
*
|
|
135
|
+
* @param label - Context label
|
|
136
|
+
* @param opts - Optional intent, strength, decay threshold
|
|
137
|
+
* @returns this for chaining
|
|
138
|
+
*/
|
|
139
|
+
setsContext(label, opts) {
|
|
140
|
+
this.pendingContextSettings = {
|
|
141
|
+
label,
|
|
142
|
+
intent: opts?.intent,
|
|
143
|
+
strength: opts?.strength,
|
|
144
|
+
decayThreshold: opts?.decayThreshold,
|
|
145
|
+
};
|
|
146
|
+
return this;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Override between-turn commentary within this response's context.
|
|
150
|
+
*
|
|
151
|
+
* @param turnNumber - Which non-conversation turn this fires on
|
|
152
|
+
* @param messageId - The message ID
|
|
153
|
+
* @returns this for chaining
|
|
154
|
+
*/
|
|
155
|
+
betweenTurns(turnNumber, messageId) {
|
|
156
|
+
this.pendingBetweenTurnOverrides.push({ turnNumber, messageId });
|
|
157
|
+
return this;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Set the message shown when the player tries to leave during a blocking context.
|
|
161
|
+
*
|
|
162
|
+
* @param messageId - The message ID
|
|
163
|
+
* @returns this for chaining
|
|
164
|
+
*/
|
|
165
|
+
onLeaveAttempt(messageId) {
|
|
166
|
+
this.pendingOnLeaveAttemptMessage = messageId;
|
|
167
|
+
return this;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Apply state mutations after this response.
|
|
171
|
+
*
|
|
172
|
+
* @param mutations - State changes (threat, mood, disposition)
|
|
173
|
+
* @returns this for chaining
|
|
174
|
+
*/
|
|
175
|
+
updatesState(mutations) {
|
|
176
|
+
this.pendingStateMutations = mutations;
|
|
177
|
+
return this;
|
|
178
|
+
}
|
|
179
|
+
// =========================================================================
|
|
180
|
+
// Finalization
|
|
181
|
+
// =========================================================================
|
|
182
|
+
/**
|
|
183
|
+
* Start a new .when() trigger chain, finalizing this one.
|
|
184
|
+
*
|
|
185
|
+
* @param trigger - The new trigger (e.g., 'asked about weapon')
|
|
186
|
+
* @returns A new ResponseChainBuilder for the new trigger
|
|
187
|
+
*/
|
|
188
|
+
when(trigger) {
|
|
189
|
+
this.finalize();
|
|
190
|
+
return this.parentBuilder.when(trigger);
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Return to the parent builder, finalizing this chain.
|
|
194
|
+
*
|
|
195
|
+
* @returns The parent ConversationBuilder
|
|
196
|
+
*/
|
|
197
|
+
done() {
|
|
198
|
+
this.finalize();
|
|
199
|
+
return this.parentBuilder;
|
|
200
|
+
}
|
|
201
|
+
/** @internal Finalize this chain and push candidates to parent. */
|
|
202
|
+
finalize() {
|
|
203
|
+
if (this.candidates.length > 0) {
|
|
204
|
+
this.parentBuilder._addResponses(this.trigger, this.candidates);
|
|
205
|
+
this.candidates = [];
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
/** @internal Get candidates without finalizing (for testing). */
|
|
209
|
+
_getCandidates() {
|
|
210
|
+
return this.candidates;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
exports.ResponseChainBuilder = ResponseChainBuilder;
|
|
214
|
+
// ---------------------------------------------------------------------------
|
|
215
|
+
// Conversation builder (extends CharacterBuilder)
|
|
216
|
+
// ---------------------------------------------------------------------------
|
|
217
|
+
/**
|
|
218
|
+
* Extends CharacterBuilder with conversation-specific methods.
|
|
219
|
+
* Accumulates conversation data and compiles it alongside
|
|
220
|
+
* the character model data.
|
|
221
|
+
*/
|
|
222
|
+
class ConversationBuilder extends character_builder_1.CharacterBuilder {
|
|
223
|
+
_conversationData = createConversationData();
|
|
224
|
+
_activeChain;
|
|
225
|
+
// =========================================================================
|
|
226
|
+
// Topic registration
|
|
227
|
+
// =========================================================================
|
|
228
|
+
/**
|
|
229
|
+
* Define a conversation topic.
|
|
230
|
+
*
|
|
231
|
+
* @param name - The canonical topic name
|
|
232
|
+
* @param def - Topic definition (keywords, related, availableWhen)
|
|
233
|
+
* @returns this for chaining
|
|
234
|
+
*/
|
|
235
|
+
topic(name, def) {
|
|
236
|
+
this._conversationData.topics.push({ name, ...def });
|
|
237
|
+
return this;
|
|
238
|
+
}
|
|
239
|
+
// =========================================================================
|
|
240
|
+
// Response chains
|
|
241
|
+
// =========================================================================
|
|
242
|
+
/**
|
|
243
|
+
* Begin a response chain for a trigger.
|
|
244
|
+
* The trigger is typically 'asked about {topic}' or 'told about {topic}'.
|
|
245
|
+
*
|
|
246
|
+
* @param trigger - The trigger string
|
|
247
|
+
* @returns A ResponseChainBuilder for fluent chaining
|
|
248
|
+
*/
|
|
249
|
+
when(trigger) {
|
|
250
|
+
// Finalize any pending chain
|
|
251
|
+
this._finalizePendingChain();
|
|
252
|
+
const chain = new ResponseChainBuilder(trigger, this);
|
|
253
|
+
this._activeChain = chain;
|
|
254
|
+
return chain;
|
|
255
|
+
}
|
|
256
|
+
/** @internal Called by ResponseChainBuilder to register completed responses. */
|
|
257
|
+
_addResponses(trigger, responses) {
|
|
258
|
+
const existing = this._conversationData.responses.get(trigger) ?? [];
|
|
259
|
+
existing.push(...responses);
|
|
260
|
+
this._conversationData.responses.set(trigger, existing);
|
|
261
|
+
}
|
|
262
|
+
// =========================================================================
|
|
263
|
+
// NPC initiative
|
|
264
|
+
// =========================================================================
|
|
265
|
+
/**
|
|
266
|
+
* Define when this NPC initiates conversation proactively.
|
|
267
|
+
*
|
|
268
|
+
* @param conditions - Predicate conditions
|
|
269
|
+
* @param messageId - The message ID when the NPC initiates
|
|
270
|
+
* @returns this for chaining
|
|
271
|
+
*/
|
|
272
|
+
initiates(conditions, messageId) {
|
|
273
|
+
this._conversationData.initiatives.push({ conditions, messageId });
|
|
274
|
+
return this;
|
|
275
|
+
}
|
|
276
|
+
// =========================================================================
|
|
277
|
+
// NPC-to-NPC scenes
|
|
278
|
+
// =========================================================================
|
|
279
|
+
/**
|
|
280
|
+
* Define an offscreen NPC-to-NPC conversation (player absent).
|
|
281
|
+
*
|
|
282
|
+
* @param scene - The offscreen scene definition
|
|
283
|
+
* @returns this for chaining
|
|
284
|
+
*/
|
|
285
|
+
offscreen(scene) {
|
|
286
|
+
this._conversationData.offscreenScenes.push(scene);
|
|
287
|
+
return this;
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Define an eavesdropping scene (player concealed).
|
|
291
|
+
*
|
|
292
|
+
* @param scene - The witnessed scene definition
|
|
293
|
+
* @returns this for chaining
|
|
294
|
+
*/
|
|
295
|
+
witnessed(scene) {
|
|
296
|
+
this._conversationData.witnessedScenes.push(scene);
|
|
297
|
+
return this;
|
|
298
|
+
}
|
|
299
|
+
// =========================================================================
|
|
300
|
+
// Conversation data access
|
|
301
|
+
// =========================================================================
|
|
302
|
+
/**
|
|
303
|
+
* Get the compiled conversation data.
|
|
304
|
+
* Finalizes any pending response chain.
|
|
305
|
+
*
|
|
306
|
+
* @returns The conversation data
|
|
307
|
+
*/
|
|
308
|
+
getConversationData() {
|
|
309
|
+
this._finalizePendingChain();
|
|
310
|
+
return this._conversationData;
|
|
311
|
+
}
|
|
312
|
+
// =========================================================================
|
|
313
|
+
// Private helpers
|
|
314
|
+
// =========================================================================
|
|
315
|
+
/** Finalize any pending response chain builder. */
|
|
316
|
+
_finalizePendingChain() {
|
|
317
|
+
if (this._activeChain) {
|
|
318
|
+
this._activeChain.finalize();
|
|
319
|
+
this._activeChain = undefined;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
exports.ConversationBuilder = ConversationBuilder;
|
|
324
|
+
//# sourceMappingURL=builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../../../../../../../repos/sharpee/packages/character/src/conversation/builder.ts"],"names":[],"mappings":"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"}
|