@pie-players/pie-assessment-toolkit 0.2.9 → 0.2.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/ItemToolBar.custom-element.js +425 -93
- package/dist/components/PieAssessmentToolkit.custom-element.js +200 -46
- package/dist/components/SectionToolBar.custom-element.js +162 -0
- package/dist/components/section-toolbar-element.d.ts +3 -0
- package/dist/components/section-toolbar-element.d.ts.map +1 -0
- package/dist/components/section-toolbar-element.js +2 -0
- package/dist/components/section-toolbar-element.js.map +1 -0
- package/dist/context/assessment-toolkit-context.d.ts +1 -1
- package/dist/context/assessment-toolkit-context.d.ts.map +1 -1
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/runtime/SectionRuntimeEngine.d.ts +57 -1
- package/dist/runtime/SectionRuntimeEngine.d.ts.map +1 -1
- package/dist/runtime/SectionRuntimeEngine.js +23 -0
- package/dist/runtime/SectionRuntimeEngine.js.map +1 -1
- package/dist/runtime/registration-events.d.ts +19 -0
- package/dist/runtime/registration-events.d.ts.map +1 -1
- package/dist/runtime/registration-events.js +3 -0
- package/dist/runtime/registration-events.js.map +1 -1
- package/dist/runtime/runtime-event-guards.d.ts +0 -1
- package/dist/runtime/runtime-event-guards.d.ts.map +1 -1
- package/dist/runtime/runtime-event-guards.js +0 -5
- package/dist/runtime/runtime-event-guards.js.map +1 -1
- package/dist/runtime/session-event-emitter-policy.d.ts +12 -0
- package/dist/runtime/session-event-emitter-policy.d.ts.map +1 -0
- package/dist/runtime/session-event-emitter-policy.js +57 -0
- package/dist/runtime/session-event-emitter-policy.js.map +1 -0
- package/dist/services/HighlightCoordinator.d.ts +9 -0
- package/dist/services/HighlightCoordinator.d.ts.map +1 -1
- package/dist/services/HighlightCoordinator.js +196 -55
- package/dist/services/HighlightCoordinator.js.map +1 -1
- package/dist/services/TTSService.d.ts +18 -0
- package/dist/services/TTSService.d.ts.map +1 -1
- package/dist/services/TTSService.js +343 -105
- package/dist/services/TTSService.js.map +1 -1
- package/dist/services/ToolRegistry.d.ts +40 -2
- package/dist/services/ToolRegistry.d.ts.map +1 -1
- package/dist/services/ToolRegistry.js +22 -1
- package/dist/services/ToolRegistry.js.map +1 -1
- package/dist/services/ToolkitCoordinator.d.ts +34 -1
- package/dist/services/ToolkitCoordinator.d.ts.map +1 -1
- package/dist/services/ToolkitCoordinator.js +203 -2
- package/dist/services/ToolkitCoordinator.js.map +1 -1
- package/dist/services/createDefaultToolRegistry.d.ts +5 -11
- package/dist/services/createDefaultToolRegistry.d.ts.map +1 -1
- package/dist/services/createDefaultToolRegistry.js +5 -48
- package/dist/services/createDefaultToolRegistry.js.map +1 -1
- package/dist/services/interfaces.d.ts +7 -2
- package/dist/services/interfaces.d.ts.map +1 -1
- package/dist/services/interfaces.js.map +1 -1
- package/dist/services/pnp-standard-features.d.ts +1 -1
- package/dist/services/section-controller-types.d.ts +5 -0
- package/dist/services/section-controller-types.d.ts.map +1 -1
- package/dist/services/tool-config-defaults.d.ts +14 -0
- package/dist/services/tool-config-defaults.d.ts.map +1 -0
- package/dist/services/tool-config-defaults.js +23 -0
- package/dist/services/tool-config-defaults.js.map +1 -0
- package/dist/services/tool-context.d.ts.map +1 -1
- package/dist/services/tool-context.js +50 -3
- package/dist/services/tool-context.js.map +1 -1
- package/dist/services/tool-instance-id.d.ts +1 -3
- package/dist/services/tool-instance-id.d.ts.map +1 -1
- package/dist/services/tool-instance-id.js +4 -10
- package/dist/services/tool-instance-id.js.map +1 -1
- package/dist/services/toolbar-items.d.ts +26 -0
- package/dist/services/toolbar-items.d.ts.map +1 -0
- package/dist/services/toolbar-items.js +10 -0
- package/dist/services/toolbar-items.js.map +1 -0
- package/dist/services/tools-config-normalizer.d.ts.map +1 -1
- package/dist/services/tools-config-normalizer.js +5 -6
- package/dist/services/tools-config-normalizer.js.map +1 -1
- package/dist/services/tts/browser-provider.d.ts.map +1 -1
- package/dist/services/tts/browser-provider.js +201 -34
- package/dist/services/tts/browser-provider.js.map +1 -1
- package/dist/services/tts/text-processing.d.ts +17 -0
- package/dist/services/tts/text-processing.d.ts.map +1 -0
- package/dist/services/tts/text-processing.js +144 -0
- package/dist/services/tts/text-processing.js.map +1 -0
- package/dist/tools/default-tool-module-loaders.d.ts.map +1 -1
- package/dist/tools/default-tool-module-loaders.js +1 -7
- package/dist/tools/default-tool-module-loaders.js.map +1 -1
- package/dist/tools/registrations/accessibility-tools.d.ts +7 -2
- package/dist/tools/registrations/accessibility-tools.d.ts.map +1 -1
- package/dist/tools/registrations/accessibility-tools.js +23 -15
- package/dist/tools/registrations/accessibility-tools.js.map +1 -1
- package/dist/tools/registrations/calculator.d.ts.map +1 -1
- package/dist/tools/registrations/calculator.js +18 -10
- package/dist/tools/registrations/calculator.js.map +1 -1
- package/dist/tools/registrations/interaction-tools.d.ts.map +1 -1
- package/dist/tools/registrations/interaction-tools.js +5 -4
- package/dist/tools/registrations/interaction-tools.js.map +1 -1
- package/dist/tools/registrations/measurement-tools.js +4 -4
- package/dist/tools/registrations/measurement-tools.js.map +1 -1
- package/dist/tools/registrations/subject-specific-tools.js +4 -4
- package/dist/tools/registrations/subject-specific-tools.js.map +1 -1
- package/dist/tools/registrations/tts.d.ts.map +1 -1
- package/dist/tools/registrations/tts.js +161 -17
- package/dist/tools/registrations/tts.js.map +1 -1
- package/dist/tools/tool-tag-map.d.ts.map +1 -1
- package/dist/tools/tool-tag-map.js +2 -1
- package/dist/tools/tool-tag-map.js.map +1 -1
- package/package.json +12 -8
- package/src/components/ItemToolBar.svelte +275 -47
- package/src/components/PieAssessmentToolkit.svelte +217 -53
- package/src/components/SectionToolBar.svelte +58 -0
- package/dist/services/tts/provider-interface.d.ts +0 -131
- package/dist/services/tts/provider-interface.d.ts.map +0 -1
- package/dist/services/tts/provider-interface.js +0 -10
- package/dist/services/tts/provider-interface.js.map +0 -1
- package/src/components/PNPProvenanceViewer.svelte +0 -270
|
@@ -20,6 +20,15 @@ export interface ToolToolbarButtonDefinition {
|
|
|
20
20
|
active?: boolean;
|
|
21
21
|
}
|
|
22
22
|
export interface ToolbarContext {
|
|
23
|
+
scope: {
|
|
24
|
+
level: ToolLevel;
|
|
25
|
+
scopeId: string;
|
|
26
|
+
assessmentId?: string;
|
|
27
|
+
sectionId?: string;
|
|
28
|
+
itemId?: string;
|
|
29
|
+
canonicalItemId?: string;
|
|
30
|
+
contentKind?: string;
|
|
31
|
+
};
|
|
23
32
|
itemId: string;
|
|
24
33
|
catalogId: string;
|
|
25
34
|
language: string;
|
|
@@ -38,14 +47,19 @@ export interface ToolbarContext {
|
|
|
38
47
|
ensureTTSReady: (() => Promise<void>) | null;
|
|
39
48
|
componentOverrides?: ToolComponentOverrides;
|
|
40
49
|
}
|
|
50
|
+
export interface ToolRenderElement {
|
|
51
|
+
element: HTMLElement | null;
|
|
52
|
+
mount: "before-buttons" | "after-buttons";
|
|
53
|
+
}
|
|
41
54
|
export interface ToolToolbarRenderResult {
|
|
42
55
|
toolId: string;
|
|
43
|
-
|
|
44
|
-
overlayElement?: HTMLElement | null;
|
|
56
|
+
elements?: ToolRenderElement[];
|
|
45
57
|
button?: ToolToolbarButtonDefinition | null;
|
|
46
58
|
sync?: () => void;
|
|
47
59
|
subscribeActive?: (callback: (active: boolean) => void) => (() => void);
|
|
48
60
|
}
|
|
61
|
+
export type ToolActivation = "toolbar-toggle" | "selection-gateway";
|
|
62
|
+
export type ToolSingletonScope = "section";
|
|
49
63
|
/**
|
|
50
64
|
* Tool registration interface
|
|
51
65
|
*/
|
|
@@ -60,6 +74,16 @@ export interface ToolRegistration {
|
|
|
60
74
|
icon: string | ((context: ToolContext) => string);
|
|
61
75
|
/** Which levels this tool supports */
|
|
62
76
|
supportedLevels: ToolLevel[];
|
|
77
|
+
/**
|
|
78
|
+
* Activation model for this tool.
|
|
79
|
+
* - toolbar-toggle: rendered as a toolbar button (default)
|
|
80
|
+
* - selection-gateway: rendered as a singleton selection-driven gateway
|
|
81
|
+
*/
|
|
82
|
+
activation?: ToolActivation;
|
|
83
|
+
/**
|
|
84
|
+
* Optional singleton scope for activation models that mount exactly one instance.
|
|
85
|
+
*/
|
|
86
|
+
singletonScope?: ToolSingletonScope;
|
|
63
87
|
/**
|
|
64
88
|
* PNP support IDs that enable this tool (optional)
|
|
65
89
|
* Used by PNPToolResolver to determine if tool is allowed
|
|
@@ -156,6 +180,18 @@ export declare class ToolRegistry {
|
|
|
156
180
|
* @returns Array of tool registrations that support this level
|
|
157
181
|
*/
|
|
158
182
|
getToolsByLevel(level: ToolLevel): ToolRegistration[];
|
|
183
|
+
/**
|
|
184
|
+
* Resolve tool activation with backward-compatible defaults.
|
|
185
|
+
*/
|
|
186
|
+
getToolActivation(toolId: string): ToolActivation;
|
|
187
|
+
/**
|
|
188
|
+
* Resolve singleton scope for a tool when present.
|
|
189
|
+
*/
|
|
190
|
+
getToolSingletonScope(toolId: string): ToolSingletonScope | null;
|
|
191
|
+
/**
|
|
192
|
+
* Filter tool IDs by activation type.
|
|
193
|
+
*/
|
|
194
|
+
filterToolIdsByActivation(toolIds: string[], activation: ToolActivation): string[];
|
|
159
195
|
/**
|
|
160
196
|
* Filter tools by visibility in a given context
|
|
161
197
|
*
|
|
@@ -179,6 +215,8 @@ export declare class ToolRegistry {
|
|
|
179
215
|
description: string;
|
|
180
216
|
pnpSupportIds: string[];
|
|
181
217
|
supportedLevels: ToolLevel[];
|
|
218
|
+
activation: ToolActivation;
|
|
219
|
+
singletonScope: ToolSingletonScope | null;
|
|
182
220
|
}>;
|
|
183
221
|
/**
|
|
184
222
|
* Generate PNP support IDs from enabled tools
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolRegistry.d.ts","sourceRoot":"","sources":["../../src/services/ToolRegistry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,KAAK,EACX,sBAAsB,EACtB,gBAAgB,EAChB,mBAAmB,EACnB,WAAW,EACX,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"ToolRegistry.d.ts","sourceRoot":"","sources":["../../src/services/ToolRegistry.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* Central registry for all assessment tools. Manages tool metadata, visibility logic,
|
|
5
5
|
* and button/instance creation. Supports dynamic registration and override by integrators.
|
|
6
6
|
*/
|
|
7
|
+
import { normalizeToolAlias } from "./tools-config-normalizer.js";
|
|
7
8
|
/**
|
|
8
9
|
* Tool Registry
|
|
9
10
|
*
|
|
@@ -20,7 +21,7 @@ export class ToolRegistry {
|
|
|
20
21
|
* Normalize a single tool alias to canonical toolId.
|
|
21
22
|
*/
|
|
22
23
|
normalizeToolId(toolId) {
|
|
23
|
-
return toolId
|
|
24
|
+
return normalizeToolAlias(toolId);
|
|
24
25
|
}
|
|
25
26
|
/**
|
|
26
27
|
* Normalize a list of tool aliases to canonical toolIds.
|
|
@@ -146,6 +147,24 @@ export class ToolRegistry {
|
|
|
146
147
|
getToolsByLevel(level) {
|
|
147
148
|
return this.getAllTools().filter((tool) => tool.supportedLevels.includes(level));
|
|
148
149
|
}
|
|
150
|
+
/**
|
|
151
|
+
* Resolve tool activation with backward-compatible defaults.
|
|
152
|
+
*/
|
|
153
|
+
getToolActivation(toolId) {
|
|
154
|
+
return this.get(toolId)?.activation || "toolbar-toggle";
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Resolve singleton scope for a tool when present.
|
|
158
|
+
*/
|
|
159
|
+
getToolSingletonScope(toolId) {
|
|
160
|
+
return this.get(toolId)?.singletonScope || null;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Filter tool IDs by activation type.
|
|
164
|
+
*/
|
|
165
|
+
filterToolIdsByActivation(toolIds, activation) {
|
|
166
|
+
return toolIds.filter((toolId) => this.getToolActivation(toolId) === activation);
|
|
167
|
+
}
|
|
149
168
|
/**
|
|
150
169
|
* Filter tools by visibility in a given context
|
|
151
170
|
*
|
|
@@ -193,6 +212,8 @@ export class ToolRegistry {
|
|
|
193
212
|
description: tool.description,
|
|
194
213
|
pnpSupportIds: tool.pnpSupportIds || [],
|
|
195
214
|
supportedLevels: tool.supportedLevels,
|
|
215
|
+
activation: tool.activation || "toolbar-toggle",
|
|
216
|
+
singletonScope: tool.singletonScope || null,
|
|
196
217
|
}));
|
|
197
218
|
}
|
|
198
219
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolRegistry.js","sourceRoot":"","sources":["../../src/services/ToolRegistry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"ToolRegistry.js","sourceRoot":"","sources":["../../src/services/ToolRegistry.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,7 +23,7 @@ import { TTSService } from "./TTSService.js";
|
|
|
23
23
|
import { ToolProviderRegistry } from "./tool-providers/index.js";
|
|
24
24
|
import type { IToolProvider } from "./tool-providers/IToolProvider.js";
|
|
25
25
|
import type { DesmosToolProviderConfig, MathJsToolProviderConfig, TIToolProviderConfig, TTSToolProviderConfig } from "./tool-providers/index.js";
|
|
26
|
-
import type { SectionControllerContext, SectionControllerFactoryDefaults, SectionControllerHandle, SectionControllerPersistenceStrategy, SectionPersistenceFactoryDefaults } from "./section-controller-types.js";
|
|
26
|
+
import type { SectionControllerContext, SectionControllerFactoryDefaults, SectionControllerHandle, SectionControllerKey, SectionControllerPersistenceStrategy, SectionPersistenceFactoryDefaults } from "./section-controller-types.js";
|
|
27
27
|
export type { SectionControllerContext, SectionControllerFactoryDefaults, SectionControllerHandle, SectionControllerKey, SectionControllerPersistenceStrategy, SectionPersistenceFactoryDefaults, } from "./section-controller-types.js";
|
|
28
28
|
/**
|
|
29
29
|
* Generic tool configuration
|
|
@@ -37,10 +37,17 @@ export interface ToolConfig {
|
|
|
37
37
|
*/
|
|
38
38
|
export interface TTSToolConfig extends ToolConfig {
|
|
39
39
|
backend?: "browser" | "polly" | "google" | "server";
|
|
40
|
+
provider?: "polly" | "google";
|
|
41
|
+
serverProvider?: "polly" | "google";
|
|
42
|
+
engine?: "standard" | "neural";
|
|
43
|
+
sampleRate?: number;
|
|
44
|
+
format?: "mp3" | "ogg" | "pcm";
|
|
45
|
+
speechMarksMode?: "word" | "word+sentence";
|
|
40
46
|
defaultVoice?: string;
|
|
41
47
|
rate?: number;
|
|
42
48
|
pitch?: number;
|
|
43
49
|
apiEndpoint?: string;
|
|
50
|
+
language?: string;
|
|
44
51
|
authFetcher?: () => Promise<Partial<TTSToolProviderConfig>>;
|
|
45
52
|
}
|
|
46
53
|
/**
|
|
@@ -69,6 +76,7 @@ export interface ToolkitToolsConfig extends CanonicalToolsConfig {
|
|
|
69
76
|
providers: ToolProvidersConfig & {
|
|
70
77
|
tts?: TTSToolConfig;
|
|
71
78
|
calculator?: CalculatorToolConfig;
|
|
79
|
+
annotationToolbar?: ToolConfig;
|
|
72
80
|
};
|
|
73
81
|
}
|
|
74
82
|
/**
|
|
@@ -124,6 +132,17 @@ export interface ToolkitInitStatus {
|
|
|
124
132
|
coordinator: boolean;
|
|
125
133
|
providers: Record<string, boolean>;
|
|
126
134
|
}
|
|
135
|
+
export interface SectionControllerLifecycleEvent {
|
|
136
|
+
type: "ready" | "disposed";
|
|
137
|
+
key: SectionControllerKey;
|
|
138
|
+
controller?: SectionControllerHandle;
|
|
139
|
+
}
|
|
140
|
+
export interface SectionEventSubscriptionArgs {
|
|
141
|
+
sectionId: string;
|
|
142
|
+
attemptId?: string;
|
|
143
|
+
listener: (event: unknown) => void;
|
|
144
|
+
eventTypes?: readonly string[];
|
|
145
|
+
}
|
|
127
146
|
export interface ToolkitCoordinatorHooks {
|
|
128
147
|
onError?: (error: Error, context: ToolkitErrorContext) => void;
|
|
129
148
|
onTTSError?: (error: Error, context: ToolkitErrorContext) => void;
|
|
@@ -137,6 +156,11 @@ export interface ToolkitCoordinatorHooks {
|
|
|
137
156
|
onTelemetry?: (eventName: string, payload?: Record<string, unknown>) => void | Promise<void>;
|
|
138
157
|
loadToolState?: () => Record<string, Record<string, unknown>> | Promise<Record<string, Record<string, unknown>> | null | undefined> | null | undefined;
|
|
139
158
|
saveToolState?: (state: Record<string, Record<string, unknown>>) => void | Promise<void>;
|
|
159
|
+
/**
|
|
160
|
+
* Provide section-level controller overrides only.
|
|
161
|
+
* Avoid instantiating per-item controller graphs here unless item lifecycle
|
|
162
|
+
* requirements explicitly demand it.
|
|
163
|
+
*/
|
|
140
164
|
createSectionController?: (context: SectionControllerContext, defaults: SectionControllerFactoryDefaults) => SectionControllerHandle | Promise<SectionControllerHandle>;
|
|
141
165
|
createSectionPersistence?: (context: SectionControllerContext, defaults: SectionPersistenceFactoryDefaults) => SectionControllerPersistenceStrategy | Promise<SectionControllerPersistenceStrategy>;
|
|
142
166
|
onSectionControllerReady?: (context: SectionControllerContext, controller: SectionControllerHandle) => void | Promise<void>;
|
|
@@ -198,13 +222,19 @@ export declare class ToolkitCoordinator {
|
|
|
198
222
|
private coordinatorReadyNotified;
|
|
199
223
|
private readonly providerInitPromises;
|
|
200
224
|
private readonly sectionControllers;
|
|
225
|
+
private readonly sectionControllerKeys;
|
|
201
226
|
private readonly sectionControllerInitPromises;
|
|
202
227
|
private readonly sectionPersistenceStrategies;
|
|
228
|
+
private readonly sectionControllerLifecycleListeners;
|
|
229
|
+
private readonly sectionEventListenerIds;
|
|
230
|
+
private readonly sectionEventSubscriptions;
|
|
231
|
+
private nextSectionEventListenerId;
|
|
203
232
|
/** Callback for floating tools changes */
|
|
204
233
|
private floatingToolsChangeCallback;
|
|
205
234
|
private static resolveConfig;
|
|
206
235
|
constructor(config: ToolkitCoordinatorConfig);
|
|
207
236
|
private emitTelemetry;
|
|
237
|
+
private emitSectionControllerLifecycle;
|
|
208
238
|
private handleError;
|
|
209
239
|
private getSectionControllerMapKey;
|
|
210
240
|
private createDefaultSectionPersistence;
|
|
@@ -222,6 +252,9 @@ export declare class ToolkitCoordinator {
|
|
|
222
252
|
sectionId: string;
|
|
223
253
|
attemptId?: string;
|
|
224
254
|
}): SectionControllerHandle | undefined;
|
|
255
|
+
subscribeSectionEvents(args: SectionEventSubscriptionArgs): () => void;
|
|
256
|
+
private resolveSectionControllerForSubscription;
|
|
257
|
+
onSectionControllerLifecycle(listener: (event: SectionControllerLifecycleEvent) => void): () => void;
|
|
225
258
|
getOrCreateSectionController(args: {
|
|
226
259
|
sectionId: string;
|
|
227
260
|
attemptId?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolkitCoordinator.d.ts","sourceRoot":"","sources":["../../src/services/ToolkitCoordinator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAClF,OAAO,EAEN,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EAExB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"ToolkitCoordinator.d.ts","sourceRoot":"","sources":["../../src/services/ToolkitCoordinator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAClF,OAAO,EAEN,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EAExB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAkB,MAAM,iBAAiB,CAAC;AAE7D,OAAO,EACN,oBAAoB,EAKpB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,KAAK,EACX,wBAAwB,EACxB,wBAAwB,EACxB,oBAAoB,EACpB,qBAAqB,EACrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EACX,wBAAwB,EACxB,gCAAgC,EAChC,uBAAuB,EACvB,oBAAoB,EACpB,oCAAoC,EACpC,iCAAiC,EACjC,MAAM,+BAA+B,CAAC;AACvC,YAAY,EACX,wBAAwB,EACxB,gCAAgC,EAChC,uBAAuB,EACvB,oBAAoB,EACpB,oCAAoC,EACpC,iCAAiC,GACjC,MAAM,+BAA+B,CAAC;AAEvC;;GAEG;AACH,MAAM,WAAW,UAAU;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,UAAU;IAChD,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACpD,QAAQ,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC9B,cAAc,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IACpC,MAAM,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;IAC/B,eAAe,CAAC,EAAE,MAAM,GAAG,eAAe,CAAC;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC;CAC5D;AAED;;GAEG;AACH,MAAM,WAAW,0BAA2B,SAAQ,UAAU;IAC7D,QAAQ,CAAC,EAAE,eAAe,GAAG,MAAM,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,UAAU;IACvD,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,GAAG,QAAQ,CAAC;IACtC,WAAW,CAAC,EAAE,MAAM,OAAO,CAC1B,OAAO,CACN,wBAAwB,GAAG,oBAAoB,GAAG,wBAAwB,CAC1E,CACD,CAAC;CACF;AAED;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,UAAU;IACtD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,oBAAoB,CAAC;CAClC;AAED,MAAM,WAAW,kBAAmB,SAAQ,oBAAoB;IAC/D,MAAM,EAAE,gBAAgB,CAAC;IACzB,SAAS,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IACzC,SAAS,EAAE,mBAAmB,GAAG;QAChC,GAAG,CAAC,EAAE,aAAa,CAAC;QACpB,UAAU,CAAC,EAAE,oBAAoB,CAAC;QAClC,iBAAiB,CAAC,EAAE,UAAU,CAAC;KAC/B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACxC;;;OAGG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,KAAK,CAAC,EAAE;QACP,MAAM,CAAC,EAAE,gBAAgB,CAAC;QAC1B,SAAS,CAAC,EAAE,mBAAmB,CAAC;QAChC,SAAS,CAAC,EAAE,mBAAmB,CAAC;KAChC,CAAC;IAEF;;;OAGG;IACH,aAAa,CAAC,EAAE;QACf,QAAQ,CAAC,EAAE,oBAAoB,EAAE,CAAC;QAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IAEF;;OAEG;IACH,KAAK,CAAC,EAAE,uBAAuB,CAAC;IAEhC;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IACnC,KAAK,EACF,mBAAmB,GACnB,YAAY,GACZ,YAAY,GACZ,mBAAmB,GACnB,eAAe,GACf,UAAU,GACV,yBAAyB,GACzB,4BAA4B,CAAC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,wBAAwB;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IACjC,GAAG,EAAE,OAAO,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,+BAA+B;IAC/C,IAAI,EAAE,OAAO,GAAG,UAAU,CAAC;IAC3B,GAAG,EAAE,oBAAoB,CAAC;IAC1B,UAAU,CAAC,EAAE,uBAAuB,CAAC;CACrC;AAED,MAAM,WAAW,4BAA4B;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,uBAAuB;IACvC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAC/D,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAClE,eAAe,CAAC,EAAE,CACjB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,mBAAmB,KACxB,IAAI,CAAC;IAEV,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzE,UAAU,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,kBAAkB,CAAC,EAAE,CACpB,WAAW,EAAE,kBAAkB,KAC3B,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1B,oBAAoB,CAAC,EAAE,CACtB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,wBAAwB,KAC1B,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,mBAAmB,CAAC,EAAE,CACrB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,wBAAwB,KAC1B,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,eAAe,CAAC,EAAE,CACjB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,wBAAwB,KAC1B,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1B,WAAW,CAAC,EAAE,CACb,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC7B,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1B,aAAa,CAAC,EAAE,MACb,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACvC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,GACnE,IAAI,GACJ,SAAS,CAAC;IACb,aAAa,CAAC,EAAE,CACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,KAC1C,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1B;;;;OAIG;IACH,uBAAuB,CAAC,EAAE,CACzB,OAAO,EAAE,wBAAwB,EACjC,QAAQ,EAAE,gCAAgC,KACtC,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAEhE,wBAAwB,CAAC,EAAE,CAC1B,OAAO,EAAE,wBAAwB,EACjC,QAAQ,EAAE,iCAAiC,KAEzC,oCAAoC,GACpC,OAAO,CAAC,oCAAoC,CAAC,CAAC;IAEjD,wBAAwB,CAAC,EAAE,CAC1B,OAAO,EAAE,wBAAwB,EACjC,UAAU,EAAE,uBAAuB,KAC/B,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1B,0BAA0B,CAAC,EAAE,CAC5B,OAAO,EAAE,wBAAwB,EACjC,UAAU,EAAE,uBAAuB,KAC/B,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACpC,UAAU,EAAE,UAAU,CAAC;IACvB,eAAe,EAAE,eAAe,CAAC;IACjC,oBAAoB,EAAE,oBAAoB,CAAC;IAC3C,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,eAAe,EAAE,4BAA4B,CAAC;IAC9C,oBAAoB,EAAE,oBAAoB,CAAC;CAC3C;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,kBAAkB;IAC9B,qDAAqD;IACrD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAE9B,oBAAoB;IACpB,QAAQ,CAAC,MAAM,EAAE,wBAAwB,CAAC;IAE1C,kDAAkD;IAClD,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,QAAQ,CAAC,oBAAoB,EAAE,oBAAoB,CAAC;IACpD,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;IACtD,QAAQ,CAAC,eAAe,EAAE,4BAA4B,CAAC;IACvD,QAAQ,CAAC,oBAAoB,EAAE,oBAAoB,CAAC;IACpD,QAAQ,CAAC,KAAK,EAAE,uBAAuB,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAE3B,qCAAqC;IACrC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,cAAc,CAAC,CAAgB;IACvC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,gBAAgB,CAAC,CAAgB;IACzC,OAAO,CAAC,uBAAuB,CAAC,CAAgB;IAChD,OAAO,CAAC,wBAAwB,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAA6C;IAClF,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA8C;IACjF,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA2C;IACjF,OAAO,CAAC,QAAQ,CAAC,6BAA6B,CAG1C;IACJ,OAAO,CAAC,QAAQ,CAAC,4BAA4B,CAGzC;IACJ,OAAO,CAAC,QAAQ,CAAC,mCAAmC,CAEhD;IACJ,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAGpC;IACJ,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAiC;IAC3E,OAAO,CAAC,0BAA0B,CAAK;IAEvC,0CAA0C;IAC1C,OAAO,CAAC,2BAA2B,CAC7B;IAEN,OAAO,CAAC,MAAM,CAAC,aAAa;gBAmChB,MAAM,EAAE,wBAAwB;YAwC9B,aAAa;IAW3B,OAAO,CAAC,8BAA8B;IAatC,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,0BAA0B;IAIlC,OAAO,CAAC,+BAA+B;YAmCzB,yBAAyB;IAiBvC,OAAO,CAAC,0BAA0B;YASpB,iBAAiB;IA0B/B;;OAEG;IACH,OAAO,CAAC,sBAAsB;YAsEhB,gBAAgB;IA4BjB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IA+BrE,QAAQ,CAAC,KAAK,EAAE,uBAAuB,GAAG,IAAI;IAW9C,oBAAoB,CAAC,IAAI,EAAE;QACjC,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,uBAAuB,GAAG,SAAS;IAShC,sBAAsB,CAAC,IAAI,EAAE,4BAA4B,GAAG,MAAM,IAAI;IAyD7E,OAAO,CAAC,uCAAuC;IAuCxC,4BAA4B,CAClC,QAAQ,EAAE,CAAC,KAAK,EAAE,+BAA+B,KAAK,IAAI,GACxD,MAAM,IAAI;IAOA,4BAA4B,CAAC,IAAI,EAAE;QAC/C,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,uBAAuB,EAAE,MACtB,uBAAuB,GACvB,OAAO,CAAC,uBAAuB,CAAC,CAAC;KACpC,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAqEvB,wBAAwB,CAAC,IAAI,EAAE;QAC3C,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,oBAAoB,CAAC,EAAE,OAAO,CAAC;QAC/B,gBAAgB,CAAC,EAAE,OAAO,CAAC;KAC3B,GAAG,OAAO,CAAC,IAAI,CAAC;IAwDjB;;OAEG;IACU,cAAc,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;YASpD,cAAc;IA+G5B;;;OAGG;IACH,gBAAgB,IAAI,oBAAoB;IAWxC;;;;;OAKG;IACG,eAAe,CAAC,UAAU,EAAE,MAAM;IAIlC,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAwBrC,OAAO,IAAI,OAAO;IAIlB,aAAa,IAAI,iBAAiB;IAiBlC;;;;;;OAMG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAMtC;;;;;OAKG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAIhD;;;;;;OAMG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI;IAepE;;;;;OAKG;IACH,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAe5C;;;;OAIG;IACH,gBAAgB,IAAI,MAAM,EAAE;IAK5B;;;;;OAKG;IACH,qBAAqB,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,GAAG,MAAM,IAAI;IAUxE;;;OAGG;IACH,OAAO,CAAC,sBAAsB;YAyBhB,uBAAuB;CAmDrC"}
|
|
@@ -66,8 +66,13 @@ export class ToolkitCoordinator {
|
|
|
66
66
|
coordinatorReadyNotified = false;
|
|
67
67
|
providerInitPromises = new Map();
|
|
68
68
|
sectionControllers = new Map();
|
|
69
|
+
sectionControllerKeys = new Map();
|
|
69
70
|
sectionControllerInitPromises = new Map();
|
|
70
71
|
sectionPersistenceStrategies = new Map();
|
|
72
|
+
sectionControllerLifecycleListeners = new Set();
|
|
73
|
+
sectionEventListenerIds = new WeakMap();
|
|
74
|
+
sectionEventSubscriptions = new Map();
|
|
75
|
+
nextSectionEventListenerId = 1;
|
|
71
76
|
/** Callback for floating tools changes */
|
|
72
77
|
floatingToolsChangeCallback = null;
|
|
73
78
|
static resolveConfig(config) {
|
|
@@ -81,6 +86,9 @@ export class ToolkitCoordinator {
|
|
|
81
86
|
enabled: true,
|
|
82
87
|
provider: "desmos",
|
|
83
88
|
},
|
|
89
|
+
annotationToolbar: {
|
|
90
|
+
enabled: true,
|
|
91
|
+
},
|
|
84
92
|
};
|
|
85
93
|
return {
|
|
86
94
|
...config,
|
|
@@ -133,6 +141,16 @@ export class ToolkitCoordinator {
|
|
|
133
141
|
console.warn("[ToolkitCoordinator] telemetry hook failed:", err);
|
|
134
142
|
}
|
|
135
143
|
}
|
|
144
|
+
emitSectionControllerLifecycle(event) {
|
|
145
|
+
for (const listener of this.sectionControllerLifecycleListeners) {
|
|
146
|
+
try {
|
|
147
|
+
listener(event);
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
console.warn("[ToolkitCoordinator] section controller lifecycle listener failed:", error);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
136
154
|
handleError(error, context) {
|
|
137
155
|
const normalized = error instanceof Error ? error : new Error(String(error));
|
|
138
156
|
try {
|
|
@@ -244,11 +262,27 @@ export class ToolkitCoordinator {
|
|
|
244
262
|
const ttsConfig = this.config.tools?.providers?.tts;
|
|
245
263
|
if (ttsConfig?.enabled !== false) {
|
|
246
264
|
const backend = ttsConfig?.backend || "browser";
|
|
265
|
+
const serverProvider = ttsConfig?.serverProvider ||
|
|
266
|
+
ttsConfig?.provider ||
|
|
267
|
+
(backend === "polly" || backend === "google" ? backend : undefined);
|
|
247
268
|
void this.registerProvider("tts", {
|
|
248
269
|
provider: new TTSToolProvider(backend),
|
|
249
270
|
config: {
|
|
250
271
|
backend,
|
|
251
272
|
apiEndpoint: ttsConfig?.apiEndpoint,
|
|
273
|
+
serverProvider,
|
|
274
|
+
providerOptions: backend === "polly"
|
|
275
|
+
? {
|
|
276
|
+
...(ttsConfig?.engine ? { engine: ttsConfig.engine } : {}),
|
|
277
|
+
...(typeof ttsConfig?.sampleRate === "number"
|
|
278
|
+
? { sampleRate: ttsConfig.sampleRate }
|
|
279
|
+
: {}),
|
|
280
|
+
...(ttsConfig?.format ? { format: ttsConfig.format } : {}),
|
|
281
|
+
speechMarkTypes: ttsConfig?.speechMarksMode === "word+sentence"
|
|
282
|
+
? ["word", "sentence"]
|
|
283
|
+
: ["word"],
|
|
284
|
+
}
|
|
285
|
+
: undefined,
|
|
252
286
|
voice: ttsConfig?.defaultVoice,
|
|
253
287
|
rate: ttsConfig?.rate,
|
|
254
288
|
pitch: ttsConfig?.pitch,
|
|
@@ -356,6 +390,93 @@ export class ToolkitCoordinator {
|
|
|
356
390
|
};
|
|
357
391
|
return this.sectionControllers.get(this.getSectionControllerMapKey(key));
|
|
358
392
|
}
|
|
393
|
+
subscribeSectionEvents(args) {
|
|
394
|
+
const controllerEntry = this.resolveSectionControllerForSubscription({
|
|
395
|
+
sectionId: args.sectionId,
|
|
396
|
+
attemptId: args.attemptId,
|
|
397
|
+
});
|
|
398
|
+
const controller = controllerEntry?.controller;
|
|
399
|
+
const subscribe = controller?.subscribe;
|
|
400
|
+
if (!controller || !subscribe) {
|
|
401
|
+
return () => { };
|
|
402
|
+
}
|
|
403
|
+
const { mapKey } = controllerEntry;
|
|
404
|
+
let listenerId = this.sectionEventListenerIds.get(args.listener);
|
|
405
|
+
if (!listenerId) {
|
|
406
|
+
listenerId = this.nextSectionEventListenerId++;
|
|
407
|
+
this.sectionEventListenerIds.set(args.listener, listenerId);
|
|
408
|
+
}
|
|
409
|
+
const subscriptionKey = `${mapKey}::${listenerId}`;
|
|
410
|
+
const previousSubscription = this.sectionEventSubscriptions.get(subscriptionKey);
|
|
411
|
+
previousSubscription?.();
|
|
412
|
+
const eventTypeFilter = args.eventTypes
|
|
413
|
+
? new Set(args.eventTypes)
|
|
414
|
+
: null;
|
|
415
|
+
const unsubscribeController = subscribe.call(controller, (event) => {
|
|
416
|
+
if (!eventTypeFilter) {
|
|
417
|
+
args.listener(event);
|
|
418
|
+
return;
|
|
419
|
+
}
|
|
420
|
+
const eventType = typeof event === "object" &&
|
|
421
|
+
event !== null &&
|
|
422
|
+
"type" in event &&
|
|
423
|
+
typeof event.type === "string"
|
|
424
|
+
? event.type
|
|
425
|
+
: null;
|
|
426
|
+
if (!eventType || !eventTypeFilter.has(eventType)) {
|
|
427
|
+
return;
|
|
428
|
+
}
|
|
429
|
+
args.listener(event);
|
|
430
|
+
});
|
|
431
|
+
const detach = () => {
|
|
432
|
+
const current = this.sectionEventSubscriptions.get(subscriptionKey);
|
|
433
|
+
if (current !== detach) {
|
|
434
|
+
return;
|
|
435
|
+
}
|
|
436
|
+
this.sectionEventSubscriptions.delete(subscriptionKey);
|
|
437
|
+
unsubscribeController();
|
|
438
|
+
};
|
|
439
|
+
this.sectionEventSubscriptions.set(subscriptionKey, detach);
|
|
440
|
+
return detach;
|
|
441
|
+
}
|
|
442
|
+
resolveSectionControllerForSubscription(args) {
|
|
443
|
+
const explicitKey = {
|
|
444
|
+
assessmentId: this.assessmentId,
|
|
445
|
+
sectionId: args.sectionId,
|
|
446
|
+
attemptId: args.attemptId,
|
|
447
|
+
};
|
|
448
|
+
const explicitMapKey = this.getSectionControllerMapKey(explicitKey);
|
|
449
|
+
const explicitController = this.sectionControllers.get(explicitMapKey);
|
|
450
|
+
if (explicitController) {
|
|
451
|
+
return { mapKey: explicitMapKey, controller: explicitController };
|
|
452
|
+
}
|
|
453
|
+
if (args.attemptId !== undefined) {
|
|
454
|
+
return null;
|
|
455
|
+
}
|
|
456
|
+
const matches = [];
|
|
457
|
+
for (const [mapKey, key] of this.sectionControllerKeys.entries()) {
|
|
458
|
+
if (key.assessmentId !== this.assessmentId || key.sectionId !== args.sectionId) {
|
|
459
|
+
continue;
|
|
460
|
+
}
|
|
461
|
+
const controller = this.sectionControllers.get(mapKey);
|
|
462
|
+
if (!controller)
|
|
463
|
+
continue;
|
|
464
|
+
matches.push({ mapKey, controller });
|
|
465
|
+
}
|
|
466
|
+
if (matches.length === 1) {
|
|
467
|
+
return matches[0];
|
|
468
|
+
}
|
|
469
|
+
if (matches.length > 1) {
|
|
470
|
+
console.warn(`[ToolkitCoordinator] subscribeSectionEvents is ambiguous for section "${args.sectionId}" without attemptId; ${matches.length} controllers are active.`);
|
|
471
|
+
}
|
|
472
|
+
return null;
|
|
473
|
+
}
|
|
474
|
+
onSectionControllerLifecycle(listener) {
|
|
475
|
+
this.sectionControllerLifecycleListeners.add(listener);
|
|
476
|
+
return () => {
|
|
477
|
+
this.sectionControllerLifecycleListeners.delete(listener);
|
|
478
|
+
};
|
|
479
|
+
}
|
|
359
480
|
async getOrCreateSectionController(args) {
|
|
360
481
|
const key = {
|
|
361
482
|
assessmentId: this.assessmentId,
|
|
@@ -365,6 +486,7 @@ export class ToolkitCoordinator {
|
|
|
365
486
|
const mapKey = this.getSectionControllerMapKey(key);
|
|
366
487
|
const existingController = this.sectionControllers.get(mapKey);
|
|
367
488
|
if (existingController) {
|
|
489
|
+
this.sectionControllerKeys.set(mapKey, key);
|
|
368
490
|
if (args.updateExisting !== false) {
|
|
369
491
|
await existingController.updateInput?.(args.input);
|
|
370
492
|
}
|
|
@@ -390,6 +512,12 @@ export class ToolkitCoordinator {
|
|
|
390
512
|
await controller.initialize?.(args.input);
|
|
391
513
|
await controller.hydrate?.();
|
|
392
514
|
this.sectionControllers.set(mapKey, controller);
|
|
515
|
+
this.sectionControllerKeys.set(mapKey, key);
|
|
516
|
+
this.emitSectionControllerLifecycle({
|
|
517
|
+
type: "ready",
|
|
518
|
+
key,
|
|
519
|
+
controller,
|
|
520
|
+
});
|
|
393
521
|
await this.hooks.onSectionControllerReady?.(context, controller);
|
|
394
522
|
await this.emitTelemetry("section-controller-ready", {
|
|
395
523
|
assessmentId: key.assessmentId,
|
|
@@ -422,6 +550,12 @@ export class ToolkitCoordinator {
|
|
|
422
550
|
const controller = this.sectionControllers.get(mapKey);
|
|
423
551
|
if (!controller)
|
|
424
552
|
return;
|
|
553
|
+
const subscriptionPrefix = `${mapKey}::`;
|
|
554
|
+
for (const subscriptionKey of Array.from(this.sectionEventSubscriptions.keys())) {
|
|
555
|
+
if (!subscriptionKey.startsWith(subscriptionPrefix))
|
|
556
|
+
continue;
|
|
557
|
+
this.sectionEventSubscriptions.get(subscriptionKey)?.();
|
|
558
|
+
}
|
|
425
559
|
const context = {
|
|
426
560
|
key,
|
|
427
561
|
coordinator: this,
|
|
@@ -449,6 +583,11 @@ export class ToolkitCoordinator {
|
|
|
449
583
|
}
|
|
450
584
|
finally {
|
|
451
585
|
this.sectionControllers.delete(mapKey);
|
|
586
|
+
this.sectionControllerKeys.delete(mapKey);
|
|
587
|
+
this.emitSectionControllerLifecycle({
|
|
588
|
+
type: "disposed",
|
|
589
|
+
key,
|
|
590
|
+
});
|
|
452
591
|
if (args.clearPersistence) {
|
|
453
592
|
const strategy = this.sectionPersistenceStrategies.get(mapKey);
|
|
454
593
|
await strategy?.clear?.(context);
|
|
@@ -484,12 +623,58 @@ export class ToolkitCoordinator {
|
|
|
484
623
|
?.backend ??
|
|
485
624
|
"browser",
|
|
486
625
|
});
|
|
626
|
+
const resolvedToolConfig = config ||
|
|
627
|
+
(this.config.tools?.providers?.tts || {});
|
|
628
|
+
const resolvedBackend = resolvedToolConfig.backend || "browser";
|
|
629
|
+
const runtimeProvider = resolvedToolConfig.serverProvider ||
|
|
630
|
+
resolvedToolConfig.provider ||
|
|
631
|
+
(resolvedBackend === "polly" || resolvedBackend === "google"
|
|
632
|
+
? resolvedBackend
|
|
633
|
+
: undefined);
|
|
634
|
+
const runtimeTTSConfig = {
|
|
635
|
+
voice: resolvedToolConfig.defaultVoice,
|
|
636
|
+
rate: resolvedToolConfig.rate,
|
|
637
|
+
pitch: resolvedToolConfig.pitch,
|
|
638
|
+
providerOptions: {
|
|
639
|
+
...(resolvedToolConfig.language
|
|
640
|
+
? {
|
|
641
|
+
locale: resolvedToolConfig.language,
|
|
642
|
+
}
|
|
643
|
+
: {}),
|
|
644
|
+
...(resolvedBackend === "polly" && resolvedToolConfig.engine
|
|
645
|
+
? {
|
|
646
|
+
engine: resolvedToolConfig.engine,
|
|
647
|
+
}
|
|
648
|
+
: {}),
|
|
649
|
+
...(resolvedBackend === "polly" &&
|
|
650
|
+
typeof resolvedToolConfig.sampleRate === "number"
|
|
651
|
+
? {
|
|
652
|
+
sampleRate: resolvedToolConfig.sampleRate,
|
|
653
|
+
}
|
|
654
|
+
: {}),
|
|
655
|
+
...(resolvedBackend === "polly" && resolvedToolConfig.format
|
|
656
|
+
? {
|
|
657
|
+
format: resolvedToolConfig.format,
|
|
658
|
+
}
|
|
659
|
+
: {}),
|
|
660
|
+
...(resolvedBackend === "polly"
|
|
661
|
+
? {
|
|
662
|
+
speechMarkTypes: resolvedToolConfig.speechMarksMode === "word+sentence"
|
|
663
|
+
? ["word", "sentence"]
|
|
664
|
+
: ["word"],
|
|
665
|
+
}
|
|
666
|
+
: {}),
|
|
667
|
+
},
|
|
668
|
+
apiEndpoint: resolvedToolConfig.apiEndpoint,
|
|
669
|
+
provider: runtimeProvider,
|
|
670
|
+
language: resolvedToolConfig.language,
|
|
671
|
+
};
|
|
487
672
|
// Try to use TTS provider from registry if available
|
|
488
673
|
if (this.toolProviderRegistry.has("tts")) {
|
|
489
674
|
try {
|
|
490
675
|
const ttsProvider = await this.ensureProviderReady("tts");
|
|
491
676
|
const providerInstance = await ttsProvider.createInstance();
|
|
492
|
-
await this.ttsService.initialize(providerInstance);
|
|
677
|
+
await this.ttsService.initialize(providerInstance, runtimeTTSConfig);
|
|
493
678
|
this.ttsService.setCatalogResolver(this.catalogResolver);
|
|
494
679
|
this.ttsInitialized = true;
|
|
495
680
|
await this.hooks.onTTSReady?.();
|
|
@@ -506,7 +691,7 @@ export class ToolkitCoordinator {
|
|
|
506
691
|
// Fallback to browser provider
|
|
507
692
|
const provider = new BrowserTTSProvider();
|
|
508
693
|
try {
|
|
509
|
-
await this.ttsService.initialize(provider,
|
|
694
|
+
await this.ttsService.initialize(provider, runtimeTTSConfig);
|
|
510
695
|
this.ttsService.setCatalogResolver(this.catalogResolver);
|
|
511
696
|
this.ttsInitialized = true;
|
|
512
697
|
await this.hooks.onTTSReady?.();
|
|
@@ -710,11 +895,27 @@ export class ToolkitCoordinator {
|
|
|
710
895
|
if (ttsConfig?.enabled === false)
|
|
711
896
|
return;
|
|
712
897
|
const backend = ttsConfig?.backend || "browser";
|
|
898
|
+
const serverProvider = ttsConfig?.serverProvider ||
|
|
899
|
+
ttsConfig?.provider ||
|
|
900
|
+
(backend === "polly" || backend === "google" ? backend : undefined);
|
|
713
901
|
await this.registerProvider("tts", {
|
|
714
902
|
provider: new TTSToolProvider(backend),
|
|
715
903
|
config: {
|
|
716
904
|
backend,
|
|
717
905
|
apiEndpoint: ttsConfig?.apiEndpoint,
|
|
906
|
+
serverProvider,
|
|
907
|
+
providerOptions: backend === "polly"
|
|
908
|
+
? {
|
|
909
|
+
...(ttsConfig?.engine ? { engine: ttsConfig.engine } : {}),
|
|
910
|
+
...(typeof ttsConfig?.sampleRate === "number"
|
|
911
|
+
? { sampleRate: ttsConfig.sampleRate }
|
|
912
|
+
: {}),
|
|
913
|
+
...(ttsConfig?.format ? { format: ttsConfig.format } : {}),
|
|
914
|
+
speechMarkTypes: ttsConfig?.speechMarksMode === "word+sentence"
|
|
915
|
+
? ["word", "sentence"]
|
|
916
|
+
: ["word"],
|
|
917
|
+
}
|
|
918
|
+
: undefined,
|
|
718
919
|
voice: ttsConfig?.defaultVoice,
|
|
719
920
|
rate: ttsConfig?.rate,
|
|
720
921
|
pitch: ttsConfig?.pitch,
|