@pie-players/pie-assessment-toolkit 0.3.3 → 0.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -9
- package/dist/components/ItemToolBar.custom-element.js +540 -95
- package/dist/components/SectionToolBar.custom-element.js +2 -1
- package/dist/index.d.ts +2 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/runtime/SectionRuntimeEngine.d.ts +2 -2
- package/dist/runtime/SectionRuntimeEngine.d.ts.map +1 -1
- package/dist/runtime/SectionRuntimeEngine.js.map +1 -1
- package/dist/services/PNPToolResolver.d.ts +1 -3
- package/dist/services/PNPToolResolver.d.ts.map +1 -1
- package/dist/services/PNPToolResolver.js +5 -4
- package/dist/services/PNPToolResolver.js.map +1 -1
- package/dist/services/ThemeProvider.js +7 -7
- package/dist/services/ToolCoordinator.d.ts +3 -3
- package/dist/services/ToolCoordinator.js +3 -3
- package/dist/services/ToolRegistry.d.ts +51 -0
- package/dist/services/ToolRegistry.d.ts.map +1 -1
- package/dist/services/ToolRegistry.js +60 -0
- package/dist/services/ToolRegistry.js.map +1 -1
- package/dist/services/ToolkitCoordinator.d.ts +18 -29
- package/dist/services/ToolkitCoordinator.d.ts.map +1 -1
- package/dist/services/ToolkitCoordinator.js +153 -138
- package/dist/services/ToolkitCoordinator.js.map +1 -1
- package/dist/services/defaultPersonalNeedsProfile.js +2 -2
- package/dist/services/defaultPersonalNeedsProfile.js.map +1 -1
- package/dist/services/interfaces.d.ts +8 -3
- 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 +108 -6
- package/dist/services/section-controller-types.d.ts.map +1 -1
- package/dist/services/tool-providers/index.d.ts +0 -4
- package/dist/services/tool-providers/index.d.ts.map +1 -1
- package/dist/services/tool-providers/index.js +0 -2
- package/dist/services/tool-providers/index.js.map +1 -1
- package/dist/services/tools-config-normalizer.d.ts +40 -3
- package/dist/services/tools-config-normalizer.d.ts.map +1 -1
- package/dist/services/tools-config-normalizer.js +86 -11
- package/dist/services/tools-config-normalizer.js.map +1 -1
- package/dist/tools/calculators/desmos-provider.d.ts +0 -7
- package/dist/tools/calculators/desmos-provider.d.ts.map +1 -1
- package/dist/tools/calculators/desmos-provider.js +0 -8
- package/dist/tools/calculators/desmos-provider.js.map +1 -1
- package/dist/tools/client.d.ts +1 -3
- package/dist/tools/client.d.ts.map +1 -1
- package/dist/tools/client.js +1 -7
- package/dist/tools/client.js.map +1 -1
- package/dist/tools/default-tool-module-loaders.js +1 -1
- package/dist/tools/default-tool-module-loaders.js.map +1 -1
- package/dist/tools/index.d.ts +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +1 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/library-loader.d.ts.map +1 -1
- package/dist/tools/library-loader.js +0 -35
- package/dist/tools/library-loader.js.map +1 -1
- package/dist/tools/registrations/accessibility-tools.d.ts.map +1 -1
- package/dist/tools/registrations/accessibility-tools.js +44 -41
- 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 +50 -2
- 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 +22 -28
- package/dist/tools/registrations/interaction-tools.js.map +1 -1
- package/dist/tools/registrations/measurement-tools.d.ts.map +1 -1
- package/dist/tools/registrations/measurement-tools.js +19 -27
- package/dist/tools/registrations/measurement-tools.js.map +1 -1
- package/dist/tools/registrations/subject-specific-tools.d.ts.map +1 -1
- package/dist/tools/registrations/subject-specific-tools.js +53 -37
- package/dist/tools/registrations/subject-specific-tools.js.map +1 -1
- package/dist/tools/registrations/toolbar-registration-helpers.d.ts +15 -0
- package/dist/tools/registrations/toolbar-registration-helpers.d.ts.map +1 -0
- package/dist/tools/registrations/toolbar-registration-helpers.js +22 -0
- package/dist/tools/registrations/toolbar-registration-helpers.js.map +1 -0
- package/dist/tools/registrations/tts.d.ts.map +1 -1
- package/dist/tools/registrations/tts.js +49 -0
- package/dist/tools/registrations/tts.js.map +1 -1
- package/dist/tools/response-discovery.d.ts +0 -8
- package/dist/tools/response-discovery.d.ts.map +1 -1
- package/dist/tools/response-discovery.js +0 -12
- package/dist/tools/response-discovery.js.map +1 -1
- package/dist/tools/tool-coordinator.d.ts +0 -4
- package/dist/tools/tool-coordinator.d.ts.map +1 -1
- package/dist/tools/tool-coordinator.js +1 -4
- package/dist/tools/tool-coordinator.js.map +1 -1
- package/dist/tools/types.d.ts +1 -1
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/types.js.map +1 -1
- package/dist/tools/variant-resolver.d.ts +0 -6
- package/dist/tools/variant-resolver.d.ts.map +1 -1
- package/dist/tools/variant-resolver.js +0 -6
- package/dist/tools/variant-resolver.js.map +1 -1
- package/package.json +8 -10
- package/dist/services/tool-providers/MathJsToolProvider.d.ts +0 -25
- package/dist/services/tool-providers/MathJsToolProvider.d.ts.map +0 -1
- package/dist/services/tool-providers/MathJsToolProvider.js +0 -53
- package/dist/services/tool-providers/MathJsToolProvider.js.map +0 -1
- package/dist/services/tool-providers/TIToolProvider.d.ts +0 -107
- package/dist/services/tool-providers/TIToolProvider.d.ts.map +0 -1
- package/dist/services/tool-providers/TIToolProvider.js +0 -123
- package/dist/services/tool-providers/TIToolProvider.js.map +0 -1
- package/dist/tools/calculators/mathjs-provider.d.ts +0 -50
- package/dist/tools/calculators/mathjs-provider.d.ts.map +0 -1
- package/dist/tools/calculators/mathjs-provider.js +0 -660
- package/dist/tools/calculators/mathjs-provider.js.map +0 -1
- package/dist/tools/calculators/ti-provider.d.ts +0 -122
- package/dist/tools/calculators/ti-provider.d.ts.map +0 -1
- package/dist/tools/calculators/ti-provider.js +0 -710
- package/dist/tools/calculators/ti-provider.js.map +0 -1
- package/src/README.md +0 -626
- package/src/components/ItemToolBar.svelte +0 -717
- package/src/components/PieAssessmentToolkit.svelte +0 -681
- package/src/components/SectionToolBar.svelte +0 -58
- package/src/components/ToolButton.svelte +0 -146
- package/src/components/ToolButtonGroup.svelte +0 -125
- package/src/tools/README.md +0 -617
- package/src/tools/calculators/README.md +0 -395
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* Part of PIE Assessment Toolkit.
|
|
15
15
|
*/
|
|
16
16
|
import type { AccessibilityCatalog } from "@pie-players/pie-players-shared/types";
|
|
17
|
-
import { type CanonicalToolsConfig, type ToolPlacementConfig, type ToolPolicyConfig, type ToolProvidersConfig } from "./tools-config-normalizer.js";
|
|
17
|
+
import { type CanonicalToolsConfig, type ToolPlacementConfig, type ToolPolicyConfig, type ToolProviderConfig, type ToolProvidersConfig } from "./tools-config-normalizer.js";
|
|
18
18
|
import { AccessibilityCatalogResolver } from "./AccessibilityCatalogResolver.js";
|
|
19
19
|
import { ElementToolStateStore } from "./ElementToolStateStore.js";
|
|
20
20
|
import { HighlightCoordinator } from "./HighlightCoordinator.js";
|
|
@@ -22,15 +22,17 @@ import { ToolCoordinator } from "./ToolCoordinator.js";
|
|
|
22
22
|
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
|
-
import type {
|
|
26
|
-
import type { SectionControllerContext, SectionControllerFactoryDefaults, SectionControllerHandle, SectionControllerKey, SectionControllerPersistenceStrategy, SectionPersistenceFactoryDefaults } from "./section-controller-types.js";
|
|
27
|
-
export type { SectionControllerContext, SectionControllerFactoryDefaults, SectionControllerHandle, SectionControllerKey, SectionControllerPersistenceStrategy, SectionPersistenceFactoryDefaults, } from "./section-controller-types.js";
|
|
25
|
+
import type { TTSToolProviderConfig } from "./tool-providers/index.js";
|
|
26
|
+
import type { SectionControllerContext, SectionControllerEvent, SectionControllerEventType, SectionControllerFactoryDefaults, SectionControllerHandle, SectionControllerKey, SectionControllerPersistenceStrategy, SectionPersistenceFactoryDefaults } from "./section-controller-types.js";
|
|
27
|
+
export type { SectionControllerContext, SectionControllerEvent, SectionControllerEventType, SectionControllerFactoryDefaults, SectionControllerHandle, SectionControllerKey, SectionControllerPersistenceStrategy, SectionControllerRuntimeState, SectionControllerSessionState, SectionPersistenceFactoryDefaults, } from "./section-controller-types.js";
|
|
28
28
|
/**
|
|
29
29
|
* Generic tool configuration
|
|
30
30
|
*/
|
|
31
31
|
export interface ToolConfig {
|
|
32
32
|
enabled?: boolean;
|
|
33
|
-
|
|
33
|
+
provider?: unknown;
|
|
34
|
+
settings?: Record<string, unknown>;
|
|
35
|
+
[key: string]: unknown;
|
|
34
36
|
}
|
|
35
37
|
/**
|
|
36
38
|
* TTS tool configuration
|
|
@@ -56,28 +58,10 @@ export interface TTSToolConfig extends ToolConfig {
|
|
|
56
58
|
export interface AnswerEliminatorToolConfig extends ToolConfig {
|
|
57
59
|
strategy?: "strikethrough" | "hide";
|
|
58
60
|
}
|
|
59
|
-
/**
|
|
60
|
-
* Calculator tool configuration
|
|
61
|
-
*/
|
|
62
|
-
export interface CalculatorToolConfig extends ToolConfig {
|
|
63
|
-
provider?: "desmos" | "ti" | "mathjs";
|
|
64
|
-
authFetcher?: () => Promise<Partial<DesmosToolProviderConfig | TIToolProviderConfig | MathJsToolProviderConfig>>;
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Floating tools configuration (calculator, graph, etc.)
|
|
68
|
-
*/
|
|
69
|
-
export interface FloatingToolsConfig extends ToolConfig {
|
|
70
|
-
enabledTools?: string[];
|
|
71
|
-
calculator?: CalculatorToolConfig;
|
|
72
|
-
}
|
|
73
61
|
export interface ToolkitToolsConfig extends CanonicalToolsConfig {
|
|
74
62
|
policy: ToolPolicyConfig;
|
|
75
63
|
placement: Required<ToolPlacementConfig>;
|
|
76
|
-
providers: ToolProvidersConfig
|
|
77
|
-
tts?: TTSToolConfig;
|
|
78
|
-
calculator?: CalculatorToolConfig;
|
|
79
|
-
annotationToolbar?: ToolConfig;
|
|
80
|
-
};
|
|
64
|
+
providers: ToolProvidersConfig;
|
|
81
65
|
}
|
|
82
66
|
/**
|
|
83
67
|
* Configuration for ToolkitCoordinator
|
|
@@ -138,10 +122,11 @@ export interface SectionControllerLifecycleEvent {
|
|
|
138
122
|
controller?: SectionControllerHandle;
|
|
139
123
|
}
|
|
140
124
|
export interface SectionEventSubscriptionArgs {
|
|
141
|
-
sectionId
|
|
125
|
+
sectionId?: string;
|
|
142
126
|
attemptId?: string;
|
|
143
|
-
listener: (event:
|
|
144
|
-
eventTypes?: readonly
|
|
127
|
+
listener: (event: SectionControllerEvent) => void;
|
|
128
|
+
eventTypes?: readonly SectionControllerEventType[];
|
|
129
|
+
itemIds?: readonly string[];
|
|
145
130
|
}
|
|
146
131
|
export interface ToolkitCoordinatorHooks {
|
|
147
132
|
onError?: (error: Error, context: ToolkitErrorContext) => void;
|
|
@@ -221,6 +206,7 @@ export declare class ToolkitCoordinator {
|
|
|
221
206
|
private coordinatorReadyPromise?;
|
|
222
207
|
private coordinatorReadyNotified;
|
|
223
208
|
private readonly providerInitPromises;
|
|
209
|
+
private readonly packagedToolRegistry;
|
|
224
210
|
private readonly sectionControllers;
|
|
225
211
|
private readonly sectionControllerKeys;
|
|
226
212
|
private readonly sectionControllerInitPromises;
|
|
@@ -245,6 +231,8 @@ export declare class ToolkitCoordinator {
|
|
|
245
231
|
* Register tool providers in the registry
|
|
246
232
|
*/
|
|
247
233
|
private _registerToolProviders;
|
|
234
|
+
private getProviderDescriptorTools;
|
|
235
|
+
private registerProviderFromTool;
|
|
248
236
|
private registerProvider;
|
|
249
237
|
ensureProviderReady(providerId: string): Promise<IToolProvider>;
|
|
250
238
|
setHooks(hooks: ToolkitCoordinatorHooks): void;
|
|
@@ -288,6 +276,7 @@ export declare class ToolkitCoordinator {
|
|
|
288
276
|
waitUntilReady(): Promise<void>;
|
|
289
277
|
isReady(): boolean;
|
|
290
278
|
getInitStatus(): ToolkitInitStatus;
|
|
279
|
+
private resolveProviderConfigKey;
|
|
291
280
|
/**
|
|
292
281
|
* Check if a tool is enabled.
|
|
293
282
|
* Tools are enabled by default unless explicitly disabled.
|
|
@@ -302,7 +291,7 @@ export declare class ToolkitCoordinator {
|
|
|
302
291
|
* @param toolId Tool identifier
|
|
303
292
|
* @returns Tool configuration or null if not configured
|
|
304
293
|
*/
|
|
305
|
-
getToolConfig(toolId: string):
|
|
294
|
+
getToolConfig(toolId: string): ToolProviderConfig | null;
|
|
306
295
|
/**
|
|
307
296
|
* Update tool configuration.
|
|
308
297
|
* Applies changes to underlying services.
|
|
@@ -310,7 +299,7 @@ export declare class ToolkitCoordinator {
|
|
|
310
299
|
* @param toolId Tool identifier
|
|
311
300
|
* @param updates Partial configuration updates
|
|
312
301
|
*/
|
|
313
|
-
updateToolConfig(toolId: string, updates: Partial<
|
|
302
|
+
updateToolConfig(toolId: string, updates: Partial<ToolProviderConfig>): void;
|
|
314
303
|
/**
|
|
315
304
|
* Update the enabled tools list for floating tools (calculator, graph, etc.).
|
|
316
305
|
* Used for PNP profile changes or dynamic tool configuration.
|
|
@@ -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;
|
|
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,kBAAkB,EACvB,KAAK,mBAAmB,EAExB,MAAM,8BAA8B,CAAC;AAEtC,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,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,KAAK,EACX,qBAAqB,EACrB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,KAAK,EACX,wBAAwB,EACxB,sBAAsB,EACtB,0BAA0B,EAC1B,gCAAgC,EAChC,uBAAuB,EACvB,oBAAoB,EACpB,oCAAoC,EACpC,iCAAiC,EACjC,MAAM,+BAA+B,CAAC;AACvC,YAAY,EACX,wBAAwB,EACxB,sBAAsB,EACtB,0BAA0B,EAC1B,gCAAgC,EAChC,uBAAuB,EACvB,oBAAoB,EACpB,oCAAoC,EACpC,6BAA6B,EAC7B,6BAA6B,EAC7B,iCAAiC,GACjC,MAAM,+BAA+B,CAAC;AAEvC;;GAEG;AACH,MAAM,WAAW,UAAU;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACvB;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,MAAM,WAAW,kBAAmB,SAAQ,oBAAoB;IAC/D,MAAM,EAAE,gBAAgB,CAAC;IACzB,SAAS,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IACzC,SAAS,EAAE,mBAAmB,CAAC;CAC/B;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,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,CAAC,KAAK,EAAE,sBAAsB,KAAK,IAAI,CAAC;IAClD,UAAU,CAAC,EAAE,SAAS,0BAA0B,EAAE,CAAC;IACnD,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5B;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,oBAAoB,CAAgC;IACrE,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;gBA+BhB,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;IAO9B,OAAO,CAAC,0BAA0B;YAMpB,wBAAwB;YAwBxB,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;IAmG7E,OAAO,CAAC,uCAAuC;IAyExC,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,OAAO,CAAC,wBAAwB;IAahC;;;;;;OAMG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAOtC;;;;;OAKG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI;IAQxD;;;;;;OAMG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,IAAI;IAgB5E;;;;;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;CAkBrC"}
|
|
@@ -14,13 +14,15 @@
|
|
|
14
14
|
* Part of PIE Assessment Toolkit.
|
|
15
15
|
*/
|
|
16
16
|
import { normalizeToolsConfig, resolveToolsForLevel, } from "./tools-config-normalizer.js";
|
|
17
|
+
import { DEFAULT_TOOL_ALIAS_MAP } from "./tool-config-defaults.js";
|
|
17
18
|
import { AccessibilityCatalogResolver } from "./AccessibilityCatalogResolver.js";
|
|
18
19
|
import { ElementToolStateStore } from "./ElementToolStateStore.js";
|
|
19
20
|
import { HighlightCoordinator } from "./HighlightCoordinator.js";
|
|
20
21
|
import { ToolCoordinator } from "./ToolCoordinator.js";
|
|
21
22
|
import { TTSService } from "./TTSService.js";
|
|
22
23
|
import { BrowserTTSProvider } from "./tts/browser-provider.js";
|
|
23
|
-
import { ToolProviderRegistry
|
|
24
|
+
import { ToolProviderRegistry } from "./tool-providers/index.js";
|
|
25
|
+
import { createPackagedToolRegistry } from "./createDefaultToolRegistry.js";
|
|
24
26
|
/**
|
|
25
27
|
* ToolkitCoordinator - Orchestrates all assessment toolkit services
|
|
26
28
|
*
|
|
@@ -65,6 +67,7 @@ export class ToolkitCoordinator {
|
|
|
65
67
|
coordinatorReadyPromise;
|
|
66
68
|
coordinatorReadyNotified = false;
|
|
67
69
|
providerInitPromises = new Map();
|
|
70
|
+
packagedToolRegistry = createPackagedToolRegistry();
|
|
68
71
|
sectionControllers = new Map();
|
|
69
72
|
sectionControllerKeys = new Map();
|
|
70
73
|
sectionControllerInitPromises = new Map();
|
|
@@ -82,10 +85,6 @@ export class ToolkitCoordinator {
|
|
|
82
85
|
enabled: true,
|
|
83
86
|
backend: "browser",
|
|
84
87
|
},
|
|
85
|
-
calculator: {
|
|
86
|
-
enabled: true,
|
|
87
|
-
provider: "desmos",
|
|
88
|
-
},
|
|
89
88
|
annotationToolbar: {
|
|
90
89
|
enabled: true,
|
|
91
90
|
},
|
|
@@ -258,67 +257,39 @@ export class ToolkitCoordinator {
|
|
|
258
257
|
* Register tool providers in the registry
|
|
259
258
|
*/
|
|
260
259
|
_registerToolProviders() {
|
|
261
|
-
|
|
262
|
-
const
|
|
263
|
-
|
|
264
|
-
const backend = ttsConfig?.backend || "browser";
|
|
265
|
-
const serverProvider = ttsConfig?.serverProvider ||
|
|
266
|
-
ttsConfig?.provider ||
|
|
267
|
-
(backend === "polly" || backend === "google" ? backend : undefined);
|
|
268
|
-
void this.registerProvider("tts", {
|
|
269
|
-
provider: new TTSToolProvider(backend),
|
|
270
|
-
config: {
|
|
271
|
-
backend,
|
|
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,
|
|
286
|
-
voice: ttsConfig?.defaultVoice,
|
|
287
|
-
rate: ttsConfig?.rate,
|
|
288
|
-
pitch: ttsConfig?.pitch,
|
|
289
|
-
},
|
|
290
|
-
lazy: true,
|
|
291
|
-
authFetcher: ttsConfig?.authFetcher,
|
|
292
|
-
});
|
|
293
|
-
}
|
|
294
|
-
// Register calculator providers
|
|
295
|
-
const calculatorConfig = this.config.tools?.providers?.calculator;
|
|
296
|
-
if (calculatorConfig?.enabled !== false) {
|
|
297
|
-
const provider = calculatorConfig?.provider || "desmos";
|
|
298
|
-
if (provider === "desmos") {
|
|
299
|
-
void this.registerProvider("calculator-desmos", {
|
|
300
|
-
provider: new DesmosToolProvider(),
|
|
301
|
-
config: {},
|
|
302
|
-
lazy: true,
|
|
303
|
-
authFetcher: calculatorConfig?.authFetcher,
|
|
304
|
-
});
|
|
305
|
-
}
|
|
306
|
-
else if (provider === "ti") {
|
|
307
|
-
void this.registerProvider("calculator-ti", {
|
|
308
|
-
provider: new TIToolProvider(),
|
|
309
|
-
config: {},
|
|
310
|
-
lazy: true,
|
|
311
|
-
});
|
|
312
|
-
}
|
|
313
|
-
else if (provider === "mathjs") {
|
|
314
|
-
void this.registerProvider("calculator-mathjs", {
|
|
315
|
-
provider: new MathJsToolProvider(),
|
|
316
|
-
config: {},
|
|
317
|
-
lazy: true,
|
|
318
|
-
});
|
|
319
|
-
}
|
|
260
|
+
const descriptorTools = this.getProviderDescriptorTools();
|
|
261
|
+
for (const tool of descriptorTools) {
|
|
262
|
+
void this.registerProviderFromTool(tool);
|
|
320
263
|
}
|
|
321
264
|
}
|
|
265
|
+
getProviderDescriptorTools() {
|
|
266
|
+
return this.packagedToolRegistry
|
|
267
|
+
.getAllTools()
|
|
268
|
+
.filter((tool) => !!tool.provider);
|
|
269
|
+
}
|
|
270
|
+
async registerProviderFromTool(tool) {
|
|
271
|
+
const descriptor = tool.provider;
|
|
272
|
+
if (!descriptor)
|
|
273
|
+
return;
|
|
274
|
+
const toolConfig = this.getToolConfig(tool.toolId) || undefined;
|
|
275
|
+
if (toolConfig?.enabled === false)
|
|
276
|
+
return;
|
|
277
|
+
const providerId = descriptor.getProviderId?.(toolConfig) ??
|
|
278
|
+
toolConfig?.provider?.id ??
|
|
279
|
+
tool.toolId;
|
|
280
|
+
if (this.toolProviderRegistry.has(providerId))
|
|
281
|
+
return;
|
|
282
|
+
const provider = descriptor.createProvider(toolConfig);
|
|
283
|
+
const initConfig = descriptor.getInitConfig?.(toolConfig) ?? toolConfig?.provider?.init ?? {};
|
|
284
|
+
const authFetcher = descriptor.getAuthFetcher?.(toolConfig) ??
|
|
285
|
+
toolConfig?.provider?.runtime?.authFetcher;
|
|
286
|
+
await this.registerProvider(providerId, {
|
|
287
|
+
provider,
|
|
288
|
+
config: initConfig,
|
|
289
|
+
lazy: descriptor.lazy ?? true,
|
|
290
|
+
authFetcher,
|
|
291
|
+
});
|
|
292
|
+
}
|
|
322
293
|
async registerProvider(providerId, config) {
|
|
323
294
|
try {
|
|
324
295
|
this.toolProviderRegistry.register(providerId, config);
|
|
@@ -391,14 +362,31 @@ export class ToolkitCoordinator {
|
|
|
391
362
|
return this.sectionControllers.get(this.getSectionControllerMapKey(key));
|
|
392
363
|
}
|
|
393
364
|
subscribeSectionEvents(args) {
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
365
|
+
let controllerEntry;
|
|
366
|
+
try {
|
|
367
|
+
controllerEntry = this.resolveSectionControllerForSubscription({
|
|
368
|
+
sectionId: args.sectionId,
|
|
369
|
+
attemptId: args.attemptId,
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
catch (error) {
|
|
373
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
374
|
+
const isAmbiguousSectionWithoutAttempt = args.sectionId !== undefined &&
|
|
375
|
+
args.attemptId === undefined &&
|
|
376
|
+
message.includes("subscribeSectionEvents is ambiguous for section");
|
|
377
|
+
if (isAmbiguousSectionWithoutAttempt) {
|
|
378
|
+
console.warn(message);
|
|
379
|
+
return () => { };
|
|
380
|
+
}
|
|
381
|
+
throw error;
|
|
382
|
+
}
|
|
383
|
+
const controller = controllerEntry.controller;
|
|
384
|
+
const subscribe = controller.subscribe;
|
|
385
|
+
if (!subscribe) {
|
|
386
|
+
const resolvedKey = this.sectionControllerKeys.get(controllerEntry.mapKey);
|
|
387
|
+
const sectionLabel = resolvedKey?.sectionId || args.sectionId || "<unknown>";
|
|
388
|
+
const attemptLabel = resolvedKey?.attemptId || args.attemptId || "<default>";
|
|
389
|
+
throw new Error(`[ToolkitCoordinator] subscribeSectionEvents could not subscribe: resolved controller for section "${sectionLabel}" attempt "${attemptLabel}" does not expose subscribe().`);
|
|
402
390
|
}
|
|
403
391
|
const { mapKey } = controllerEntry;
|
|
404
392
|
let listenerId = this.sectionEventListenerIds.get(args.listener);
|
|
@@ -412,19 +400,35 @@ export class ToolkitCoordinator {
|
|
|
412
400
|
const eventTypeFilter = args.eventTypes
|
|
413
401
|
? new Set(args.eventTypes)
|
|
414
402
|
: null;
|
|
403
|
+
const itemIdFilter = args.itemIds ? new Set(args.itemIds) : null;
|
|
415
404
|
const unsubscribeController = subscribe.call(controller, (event) => {
|
|
416
|
-
if (
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
405
|
+
if (eventTypeFilter || itemIdFilter) {
|
|
406
|
+
const eventType = event?.type || null;
|
|
407
|
+
if (eventTypeFilter && (!eventType || !eventTypeFilter.has(eventType))) {
|
|
408
|
+
return;
|
|
409
|
+
}
|
|
410
|
+
if (itemIdFilter) {
|
|
411
|
+
const eventItemCandidates = new Set();
|
|
412
|
+
if ("itemId" in event && typeof event.itemId === "string") {
|
|
413
|
+
eventItemCandidates.add(event.itemId);
|
|
414
|
+
}
|
|
415
|
+
if ("canonicalItemId" in event &&
|
|
416
|
+
typeof event.canonicalItemId === "string") {
|
|
417
|
+
eventItemCandidates.add(event.canonicalItemId);
|
|
418
|
+
}
|
|
419
|
+
if ("currentItemId" in event &&
|
|
420
|
+
typeof event.currentItemId === "string") {
|
|
421
|
+
eventItemCandidates.add(event.currentItemId);
|
|
422
|
+
}
|
|
423
|
+
if ("previousItemId" in event &&
|
|
424
|
+
typeof event.previousItemId === "string") {
|
|
425
|
+
eventItemCandidates.add(event.previousItemId);
|
|
426
|
+
}
|
|
427
|
+
const hasMatchingItem = Array.from(eventItemCandidates).some((itemId) => itemIdFilter.has(itemId));
|
|
428
|
+
if (!hasMatchingItem) {
|
|
429
|
+
return;
|
|
430
|
+
}
|
|
431
|
+
}
|
|
428
432
|
}
|
|
429
433
|
args.listener(event);
|
|
430
434
|
});
|
|
@@ -440,36 +444,57 @@ export class ToolkitCoordinator {
|
|
|
440
444
|
return detach;
|
|
441
445
|
}
|
|
442
446
|
resolveSectionControllerForSubscription(args) {
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
447
|
+
if (args.sectionId) {
|
|
448
|
+
const explicitKey = {
|
|
449
|
+
assessmentId: this.assessmentId,
|
|
450
|
+
sectionId: args.sectionId,
|
|
451
|
+
attemptId: args.attemptId,
|
|
452
|
+
};
|
|
453
|
+
const explicitMapKey = this.getSectionControllerMapKey(explicitKey);
|
|
454
|
+
const explicitController = this.sectionControllers.get(explicitMapKey);
|
|
455
|
+
if (explicitController) {
|
|
456
|
+
return { mapKey: explicitMapKey, controller: explicitController };
|
|
457
|
+
}
|
|
458
|
+
if (args.attemptId !== undefined) {
|
|
459
|
+
throw new Error(`[ToolkitCoordinator] subscribeSectionEvents could not resolve controller for section "${args.sectionId}" and attempt "${args.attemptId}".`);
|
|
460
|
+
}
|
|
461
|
+
const sectionMatches = [];
|
|
462
|
+
for (const [mapKey, key] of this.sectionControllerKeys.entries()) {
|
|
463
|
+
if (key.assessmentId !== this.assessmentId || key.sectionId !== args.sectionId) {
|
|
464
|
+
continue;
|
|
465
|
+
}
|
|
466
|
+
const controller = this.sectionControllers.get(mapKey);
|
|
467
|
+
if (!controller)
|
|
468
|
+
continue;
|
|
469
|
+
sectionMatches.push({ mapKey, controller });
|
|
470
|
+
}
|
|
471
|
+
if (sectionMatches.length === 1) {
|
|
472
|
+
return sectionMatches[0];
|
|
473
|
+
}
|
|
474
|
+
if (sectionMatches.length === 0) {
|
|
475
|
+
throw new Error(`[ToolkitCoordinator] subscribeSectionEvents found no active controller for section "${args.sectionId}".`);
|
|
476
|
+
}
|
|
477
|
+
throw new Error(`[ToolkitCoordinator] subscribeSectionEvents is ambiguous for section "${args.sectionId}" without attemptId; ${sectionMatches.length} controllers are active.`);
|
|
452
478
|
}
|
|
453
479
|
if (args.attemptId !== undefined) {
|
|
454
|
-
|
|
480
|
+
throw new Error(`[ToolkitCoordinator] subscribeSectionEvents requires sectionId when attemptId is provided ("${args.attemptId}").`);
|
|
455
481
|
}
|
|
456
|
-
const
|
|
482
|
+
const allMatches = [];
|
|
457
483
|
for (const [mapKey, key] of this.sectionControllerKeys.entries()) {
|
|
458
|
-
if (key.assessmentId !== this.assessmentId
|
|
484
|
+
if (key.assessmentId !== this.assessmentId)
|
|
459
485
|
continue;
|
|
460
|
-
}
|
|
461
486
|
const controller = this.sectionControllers.get(mapKey);
|
|
462
487
|
if (!controller)
|
|
463
488
|
continue;
|
|
464
|
-
|
|
489
|
+
allMatches.push({ mapKey, controller });
|
|
465
490
|
}
|
|
466
|
-
if (
|
|
467
|
-
return
|
|
491
|
+
if (allMatches.length === 1) {
|
|
492
|
+
return allMatches[0];
|
|
468
493
|
}
|
|
469
|
-
if (
|
|
470
|
-
|
|
494
|
+
if (allMatches.length === 0) {
|
|
495
|
+
throw new Error("[ToolkitCoordinator] subscribeSectionEvents found no active controllers; provide sectionId or initialize a section controller first.");
|
|
471
496
|
}
|
|
472
|
-
|
|
497
|
+
throw new Error(`[ToolkitCoordinator] subscribeSectionEvents is ambiguous without sectionId; ${allMatches.length} active controllers are registered.`);
|
|
473
498
|
}
|
|
474
499
|
onSectionControllerLifecycle(listener) {
|
|
475
500
|
this.sectionControllerLifecycleListeners.add(listener);
|
|
@@ -773,6 +798,18 @@ export class ToolkitCoordinator {
|
|
|
773
798
|
providers,
|
|
774
799
|
};
|
|
775
800
|
}
|
|
801
|
+
resolveProviderConfigKey(toolId) {
|
|
802
|
+
const providers = this.config.tools
|
|
803
|
+
?.providers || {};
|
|
804
|
+
if (toolId in providers)
|
|
805
|
+
return toolId;
|
|
806
|
+
for (const [alias, canonical] of Object.entries(DEFAULT_TOOL_ALIAS_MAP)) {
|
|
807
|
+
if (canonical === toolId && alias in providers) {
|
|
808
|
+
return alias;
|
|
809
|
+
}
|
|
810
|
+
}
|
|
811
|
+
return toolId;
|
|
812
|
+
}
|
|
776
813
|
/**
|
|
777
814
|
* Check if a tool is enabled.
|
|
778
815
|
* Tools are enabled by default unless explicitly disabled.
|
|
@@ -781,7 +818,8 @@ export class ToolkitCoordinator {
|
|
|
781
818
|
* @returns True if tool is enabled
|
|
782
819
|
*/
|
|
783
820
|
isToolEnabled(toolId) {
|
|
784
|
-
const
|
|
821
|
+
const configKey = this.resolveProviderConfigKey(toolId);
|
|
822
|
+
const toolConfig = this.config.tools?.providers?.[configKey];
|
|
785
823
|
// Enabled by default unless explicitly set to false
|
|
786
824
|
return toolConfig?.enabled !== false;
|
|
787
825
|
}
|
|
@@ -792,7 +830,9 @@ export class ToolkitCoordinator {
|
|
|
792
830
|
* @returns Tool configuration or null if not configured
|
|
793
831
|
*/
|
|
794
832
|
getToolConfig(toolId) {
|
|
795
|
-
|
|
833
|
+
const configKey = this.resolveProviderConfigKey(toolId);
|
|
834
|
+
return (this.config.tools
|
|
835
|
+
?.providers?.[configKey] || null);
|
|
796
836
|
}
|
|
797
837
|
/**
|
|
798
838
|
* Update tool configuration.
|
|
@@ -803,6 +843,7 @@ export class ToolkitCoordinator {
|
|
|
803
843
|
*/
|
|
804
844
|
updateToolConfig(toolId, updates) {
|
|
805
845
|
// Update config
|
|
846
|
+
const configKey = this.resolveProviderConfigKey(toolId);
|
|
806
847
|
const current = this.getToolConfig(toolId) || {};
|
|
807
848
|
if (!this.config.tools) {
|
|
808
849
|
this.config.tools = normalizeToolsConfig();
|
|
@@ -810,9 +851,9 @@ export class ToolkitCoordinator {
|
|
|
810
851
|
if (!this.config.tools.providers) {
|
|
811
852
|
this.config.tools.providers = {};
|
|
812
853
|
}
|
|
813
|
-
this.config.tools.providers[
|
|
854
|
+
this.config.tools.providers[configKey] = { ...current, ...updates };
|
|
814
855
|
// Apply configuration changes to services
|
|
815
|
-
this._applyToolConfigChange(
|
|
856
|
+
this._applyToolConfigChange(configKey, updates);
|
|
816
857
|
}
|
|
817
858
|
/**
|
|
818
859
|
* Update the enabled tools list for floating tools (calculator, graph, etc.).
|
|
@@ -891,38 +932,12 @@ export class ToolkitCoordinator {
|
|
|
891
932
|
if (this.toolProviderRegistry.has("tts")) {
|
|
892
933
|
await this.toolProviderRegistry.unregister("tts");
|
|
893
934
|
}
|
|
894
|
-
const
|
|
895
|
-
|
|
935
|
+
const ttsRegistration = this
|
|
936
|
+
.getProviderDescriptorTools()
|
|
937
|
+
.find((tool) => tool.toolId === "textToSpeech");
|
|
938
|
+
if (!ttsRegistration)
|
|
896
939
|
return;
|
|
897
|
-
|
|
898
|
-
const serverProvider = ttsConfig?.serverProvider ||
|
|
899
|
-
ttsConfig?.provider ||
|
|
900
|
-
(backend === "polly" || backend === "google" ? backend : undefined);
|
|
901
|
-
await this.registerProvider("tts", {
|
|
902
|
-
provider: new TTSToolProvider(backend),
|
|
903
|
-
config: {
|
|
904
|
-
backend,
|
|
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,
|
|
919
|
-
voice: ttsConfig?.defaultVoice,
|
|
920
|
-
rate: ttsConfig?.rate,
|
|
921
|
-
pitch: ttsConfig?.pitch,
|
|
922
|
-
},
|
|
923
|
-
lazy: true,
|
|
924
|
-
authFetcher: ttsConfig?.authFetcher,
|
|
925
|
-
});
|
|
940
|
+
await this.registerProviderFromTool(ttsRegistration);
|
|
926
941
|
}
|
|
927
942
|
}
|
|
928
943
|
//# sourceMappingURL=ToolkitCoordinator.js.map
|