@pie-players/pie-assessment-toolkit 0.3.74 → 1.0.0-beta.0
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 +658 -714
- package/custom-elements.json +1315 -0
- package/dist/attempt/TestSession.d.ts +1 -21
- package/dist/attempt/TestSession.js +16 -102
- package/dist/components/ItemScope.custom-element.d.ts +1 -0
- package/dist/components/ItemScope.custom-element.js +1 -0
- package/dist/components/ItemToolBar.custom-element.js +1 -1
- package/dist/components/PieAssessmentToolkit.custom-element.js +14 -14
- package/dist/components/SectionToolBar.custom-element.js +1 -1
- package/dist/components/chunks/ItemToolBar-3zrc4p3d.js +4 -0
- package/dist/components/chunks/ItemToolBar-66hcwmfw.js +2 -0
- package/dist/components/chunks/ItemToolBar-9gqhfxtn.js +40 -0
- package/dist/components/chunks/ItemToolBar-hzc5wyjp.js +2 -0
- package/dist/components/chunks/{ItemToolBar-gmrryv2v.js → ItemToolBar-kkj69ptr.js} +1 -1
- package/dist/components/chunks/ItemToolBar-vdkyn9f3.js +2 -0
- package/dist/components/chunks/sre-engine-bj997w4b.js +1 -0
- package/dist/components/item-scope-element.d.ts +2 -0
- package/dist/components/item-scope-element.js +2 -0
- package/dist/context/assessment-toolkit-context.d.ts +33 -6
- package/dist/index.d.ts +25 -50
- package/dist/index.js +15 -45
- package/dist/policy/core/PolicySource.d.ts +2 -2
- package/dist/policy/core/ToolPolicyEngine.d.ts +118 -34
- package/dist/policy/core/ToolPolicyEngine.js +203 -56
- package/dist/policy/core/compose-decision.d.ts +28 -7
- package/dist/policy/core/compose-decision.js +95 -74
- package/dist/policy/core/decision-types.d.ts +98 -55
- package/dist/policy/core/feature-decision.d.ts +28 -19
- package/dist/policy/core/feature-decision.js +15 -11
- package/dist/policy/core/pnp-policy-inputs.d.ts +29 -35
- package/dist/policy/core/pnp-policy-inputs.js +40 -88
- package/dist/policy/core/provenance.d.ts +10 -5
- package/dist/policy/core/provenance.js +1 -1
- package/dist/policy/core/tool-parameters.d.ts +11 -0
- package/dist/policy/core/tool-parameters.js +15 -0
- package/dist/policy/engine.d.ts +7 -23
- package/dist/policy/engine.js +5 -20
- package/dist/policy/sources/PnpPolicySource.d.ts +43 -68
- package/dist/policy/sources/PnpPolicySource.js +133 -132
- package/dist/runtime/SectionControllerBinding.d.ts +283 -0
- package/dist/runtime/SectionControllerBinding.js +456 -0
- package/dist/runtime/SectionRuntimeEngine.d.ts +26 -289
- package/dist/runtime/SectionRuntimeEngine.js +30 -372
- package/dist/runtime/adapter/SectionEngineAdapter.d.ts +19 -80
- package/dist/runtime/adapter/SectionEngineAdapter.js +19 -92
- package/dist/runtime/adapter/dom-event-bridge.d.ts +15 -30
- package/dist/runtime/adapter/dom-event-bridge.js +17 -44
- package/dist/runtime/adapter/subscriber-fanout.d.ts +1 -3
- package/dist/runtime/adapter/subscriber-fanout.js +2 -6
- package/dist/runtime/catalog-context.d.ts +19 -0
- package/dist/runtime/catalog-context.js +28 -0
- package/dist/runtime/composition-emit-scheduler.d.ts +12 -18
- package/dist/runtime/composition-emit-scheduler.js +10 -16
- package/dist/runtime/content-language.d.ts +32 -0
- package/dist/runtime/content-language.js +46 -0
- package/dist/runtime/content-region.d.ts +13 -0
- package/dist/runtime/content-region.js +29 -0
- package/dist/runtime/content-registration.d.ts +13 -0
- package/dist/runtime/content-registration.js +25 -0
- package/dist/runtime/core/SectionEngineCore.d.ts +2 -4
- package/dist/runtime/core/SectionEngineCore.js +2 -6
- package/dist/runtime/core/cohort.d.ts +1 -6
- package/dist/runtime/core/cohort.js +1 -10
- package/dist/runtime/core/engine-input.d.ts +18 -30
- package/dist/runtime/core/engine-input.js +11 -12
- package/dist/runtime/core/engine-output.d.ts +17 -40
- package/dist/runtime/core/engine-output.js +9 -21
- package/dist/runtime/core/engine-readiness.d.ts +5 -37
- package/dist/runtime/core/engine-readiness.js +8 -41
- package/dist/runtime/core/engine-resolver.d.ts +46 -74
- package/dist/runtime/core/engine-resolver.js +18 -43
- package/dist/runtime/core/engine-state.d.ts +28 -36
- package/dist/runtime/core/engine-state.js +18 -21
- package/dist/runtime/core/engine-transition.d.ts +14 -19
- package/dist/runtime/core/engine-transition.js +74 -53
- package/dist/runtime/engine.d.ts +16 -19
- package/dist/runtime/engine.js +12 -19
- package/dist/runtime/page-warnings.d.ts +13 -0
- package/dist/runtime/page-warnings.js +22 -0
- package/dist/runtime/policy-input-forwarding.d.ts +25 -0
- package/dist/runtime/policy-input-forwarding.js +25 -0
- package/dist/runtime/registration-events.d.ts +22 -14
- package/dist/runtime/runtime-event-claim.d.ts +8 -0
- package/dist/runtime/runtime-event-claim.js +15 -0
- package/dist/runtime/runtime-id.d.ts +1 -1
- package/dist/runtime/runtime-id.js +1 -1
- package/dist/runtime/shell-event-bridge.d.ts +45 -0
- package/dist/runtime/shell-event-bridge.js +127 -0
- package/dist/runtime/shell-registration.d.ts +73 -0
- package/dist/runtime/shell-registration.js +95 -0
- package/dist/runtime/shell-scope.d.ts +68 -0
- package/dist/runtime/shell-scope.js +194 -0
- package/dist/runtime/tool-host-contract.d.ts +8 -14
- package/dist/runtime/tool-host-contract.js +12 -12
- package/dist/runtime/unclaimed-registration-watch.d.ts +7 -0
- package/dist/runtime/unclaimed-registration-watch.js +23 -0
- package/dist/services/AccessibilityCatalogResolver.d.ts +21 -31
- package/dist/services/AccessibilityCatalogResolver.js +29 -42
- package/dist/services/ElementToolStateStore.d.ts +42 -67
- package/dist/services/ElementToolStateStore.js +65 -71
- package/dist/services/HighlightCoordinator.d.ts +28 -40
- package/dist/services/HighlightCoordinator.js +459 -381
- package/dist/services/RangeSerializer.d.ts +11 -33
- package/dist/services/RangeSerializer.js +88 -59
- package/dist/services/SSMLExtractor.d.ts +8 -31
- package/dist/services/SSMLExtractor.js +18 -40
- package/dist/services/TTSService.d.ts +159 -119
- package/dist/services/TTSService.js +937 -822
- package/dist/services/ToolCoordinator.d.ts +42 -102
- package/dist/services/ToolCoordinator.js +178 -256
- package/dist/services/ToolRegistry.d.ts +152 -133
- package/dist/services/ToolRegistry.js +192 -178
- package/dist/services/ToolkitCoordinator.d.ts +233 -237
- package/dist/services/ToolkitCoordinator.js +615 -557
- package/dist/services/audio-handoff.d.ts +6 -7
- package/dist/services/audio-handoff.js +20 -14
- package/dist/services/catalog-owner.d.ts +0 -1
- package/dist/services/framework-error-bus.d.ts +3 -6
- package/dist/services/framework-error-bus.js +3 -6
- package/dist/services/framework-error.d.ts +51 -13
- package/dist/services/framework-error.js +19 -20
- package/dist/services/interfaces.d.ts +189 -184
- package/dist/services/section-controller-types.d.ts +7 -7
- package/dist/services/section-session-assignment.d.ts +21 -0
- package/dist/services/section-session-assignment.js +80 -0
- package/dist/services/spoken-audio-cards.d.ts +2 -6
- package/dist/services/spoken-audio-cards.js +2 -6
- package/dist/services/tool-config-defaults.d.ts +3 -3
- package/dist/services/tool-config-defaults.js +3 -3
- package/dist/services/tool-config-validation.d.ts +9 -12
- package/dist/services/tool-config-validation.js +47 -87
- package/dist/services/tool-context.d.ts +7 -31
- package/dist/services/tool-context.js +99 -65
- package/dist/services/tool-failure.d.ts +30 -0
- package/dist/services/tool-failure.js +11 -0
- package/dist/services/tool-icons.d.ts +5 -5
- package/dist/services/tool-icons.js +6 -5
- package/dist/services/tool-instance-id.d.ts +8 -7
- package/dist/services/tool-instance-id.js +12 -24
- package/dist/services/tool-providers/TTSToolProvider.d.ts +20 -58
- package/dist/services/tool-providers/TTSToolProvider.js +32 -85
- package/dist/services/tool-providers/ToolProviderApi.d.ts +10 -11
- package/dist/services/tool-providers/ToolProviderRegistry.d.ts +29 -60
- package/dist/services/tool-providers/ToolProviderRegistry.js +128 -144
- package/dist/services/tool-request.d.ts +31 -12
- package/dist/services/tool-request.js +31 -16
- package/dist/services/toolbar-decided-tools.d.ts +16 -0
- package/dist/services/toolbar-decided-tools.js +29 -0
- package/dist/services/toolbar-items.js +2 -5
- package/dist/services/tools-config-normalizer.d.ts +33 -29
- package/dist/services/tools-config-normalizer.js +26 -28
- package/dist/services/tts/browser-provider.d.ts +39 -6
- package/dist/services/tts/browser-provider.js +280 -160
- package/dist/services/tts/catalog-span-alignment.js +14 -7
- package/dist/services/tts/flat-tree.d.ts +64 -0
- package/dist/services/tts/flat-tree.js +269 -0
- package/dist/services/tts/generated-speech/assemble-plan.d.ts +3 -1
- package/dist/services/tts/generated-speech/assemble-plan.js +3 -1
- package/dist/services/tts/generated-speech/dom/build-dom-plan.d.ts +2 -0
- package/dist/services/tts/generated-speech/dom/build-dom-plan.js +1 -1
- package/dist/services/tts/generated-speech/dom/to-chunk-inputs.d.ts +2 -2
- package/dist/services/tts/generated-speech/index.d.ts +1 -1
- package/dist/services/tts/generated-speech/index.js +1 -1
- package/dist/services/tts/generated-speech/math-speech-cache.d.ts +3 -1
- package/dist/services/tts/generated-speech/math-speech-cache.js +5 -1
- package/dist/services/tts/generated-speech/types.d.ts +1 -1
- package/dist/services/tts/generated-speech/types.js +1 -1
- package/dist/services/tts/highlight-pipeline/create-highlight-plan.js +22 -16
- package/dist/services/tts/highlight-pipeline/prose-boundary-resolver.js +6 -4
- package/dist/services/tts/highlight-pipeline/readable-region.js +3 -2
- package/dist/services/tts/highlight-pipeline/types.d.ts +5 -0
- package/dist/services/tts/highlight-pipeline/visible-map-range.d.ts +12 -0
- package/dist/services/tts/highlight-pipeline/visible-map-range.js +73 -7
- package/dist/services/tts/highlight-target-resolver.d.ts +12 -0
- package/dist/services/tts/math-aware-text-processing.d.ts +5 -1
- package/dist/services/tts/math-aware-text-processing.js +42 -47
- package/dist/services/tts/math-control-names.d.ts +21 -0
- package/dist/services/tts/math-control-names.js +142 -0
- package/dist/services/tts/math-speech.d.ts +12 -1
- package/dist/services/tts/math-speech.js +54 -18
- package/dist/services/tts/mathml-sanitization.d.ts +7 -0
- package/dist/services/tts/mathml-sanitization.js +9 -1
- package/dist/services/tts/provider-options.d.ts +52 -0
- package/dist/services/tts/provider-options.js +1 -0
- package/dist/services/tts/ssml/spoken-text.d.ts +2 -26
- package/dist/services/tts/ssml/spoken-text.js +29 -0
- package/dist/services/tts/start-failure.d.ts +4 -0
- package/dist/services/tts/start-failure.js +19 -0
- package/dist/services/tts/text-processing.d.ts +9 -0
- package/dist/services/tts/text-processing.js +46 -33
- package/dist/services/tts/text-segmentation.d.ts +12 -0
- package/dist/services/tts/text-segmentation.js +60 -10
- package/dist/services/tts-runtime-config.d.ts +54 -26
- package/dist/services/tts-runtime-config.js +27 -112
- package/dist/tools/content-capability-resolution.d.ts +9 -11
- package/dist/tools/content-capability-resolution.js +8 -45
- package/dist/tools/registration.d.ts +59 -0
- package/dist/tools/registration.js +55 -0
- package/dist/tools/registrations/toolbar-registration-helpers.d.ts +6 -0
- package/dist/tools/registrations/toolbar-registration-helpers.js +8 -2
- package/dist/tools/tool-surface-host.d.ts +6 -10
- package/dist/tools/tool-surface-host.js +45 -50
- package/dist/tools/tool-tag-map.d.ts +5 -15
- package/dist/tools/tool-tag-map.js +6 -20
- package/dist/utils/structural-equality.d.ts +11 -0
- package/dist/utils/structural-equality.js +47 -0
- package/package.json +15 -29
- package/dist/attempt/adapters/activity-to-test-attempt-session.d.ts +0 -49
- package/dist/attempt/adapters/activity-to-test-attempt-session.js +0 -138
- package/dist/components/chunks/ItemToolBar-b9dz5jvd.js +0 -40
- package/dist/components/chunks/ItemToolBar-h4xap0t0.js +0 -4
- package/dist/components/chunks/ItemToolBar-wr2myaah.js +0 -2
- package/dist/components/chunks/sre-engine-wf9s43gg.js +0 -1
- package/dist/context/runtime-context-consumer.d.ts +0 -13
- package/dist/context/runtime-context-consumer.js +0 -18
- package/dist/item-loader.d.ts +0 -44
- package/dist/item-loader.js +0 -61
- package/dist/policy/core/engine-context.d.ts +0 -29
- package/dist/policy/core/engine-context.js +0 -27
- package/dist/policy/core/policy-source-tag.d.ts +0 -31
- package/dist/policy/core/policy-source-tag.js +0 -28
- package/dist/policy/internal.d.ts +0 -25
- package/dist/policy/internal.js +0 -25
- package/dist/runtime/adapter/coordinator-bridge.d.ts +0 -92
- package/dist/runtime/adapter/coordinator-bridge.js +0 -126
- package/dist/runtime/adapter/framework-error-bridge.d.ts +0 -36
- package/dist/runtime/adapter/framework-error-bridge.js +0 -46
- package/dist/runtime/adapter/instrumentation-bridge.d.ts +0 -31
- package/dist/runtime/adapter/instrumentation-bridge.js +0 -38
- package/dist/runtime/core/engine-stage-derivation.d.ts +0 -18
- package/dist/runtime/core/engine-stage-derivation.js +0 -29
- package/dist/runtime/engine-context.d.ts +0 -39
- package/dist/runtime/engine-context.js +0 -31
- package/dist/runtime/internal.d.ts +0 -43
- package/dist/runtime/internal.js +0 -45
- package/dist/runtime/section-runtime-engine-host-context.d.ts +0 -74
- package/dist/runtime/section-runtime-engine-host-context.js +0 -57
- package/dist/runtime/stage-emit-gate.d.ts +0 -92
- package/dist/runtime/stage-emit-gate.js +0 -82
- package/dist/services/ContextVariableStore.d.ts +0 -113
- package/dist/services/ContextVariableStore.js +0 -206
- package/dist/services/I18nService.d.ts +0 -47
- package/dist/services/I18nService.js +0 -84
- package/dist/services/ThemeProvider.d.ts +0 -95
- package/dist/services/ThemeProvider.js +0 -334
- package/dist/services/defaultPersonalNeedsProfile.d.ts +0 -21
- package/dist/services/defaultPersonalNeedsProfile.js +0 -26
- package/dist/services/pnp-standard-features.d.ts +0 -238
- package/dist/services/pnp-standard-features.js +0 -338
- package/dist/services/tts-control-events.d.ts +0 -13
- package/dist/services/tts-control-events.js +0 -7
- package/dist/tools/client.d.ts +0 -10
- package/dist/tools/client.js +0 -10
- package/dist/tools/internal.d.ts +0 -44
- package/dist/tools/internal.js +0 -39
- package/dist/utils/logger.d.ts +0 -6
- package/dist/utils/logger.js +0 -10
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* TTS Tool Provider
|
|
3
3
|
*
|
|
4
|
-
* Unified provider for
|
|
5
|
-
* -
|
|
6
|
-
* -
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
4
|
+
* Unified provider for both TTS backends:
|
|
5
|
+
* - `browser`: the Web Speech API (no auth)
|
|
6
|
+
* - `server`: a TTS server, its service named by the config's `provider`.
|
|
7
|
+
* `polly` and `google` run on the `pie` transport; `custom` runs on the
|
|
8
|
+
* `custom` transport to a host's own service, which takes `lang_id`,
|
|
9
|
+
* `speedRate` and `cache`
|
|
10
10
|
*/
|
|
11
|
+
import { createPieLogger, isTtsDebugEnabled, } from "@pie-players/pie-players-shared/pie";
|
|
11
12
|
import { BrowserTTSProvider } from "../../services/tts/browser-provider.js";
|
|
13
|
+
const logger = createPieLogger("tts-tool-provider", isTtsDebugEnabled);
|
|
12
14
|
/**
|
|
13
15
|
* Binds a server backend's provider to the config the registry initialized this
|
|
14
16
|
* tool provider with, including what `provider.runtime.authFetcher` returned.
|
|
@@ -19,8 +21,6 @@ import { BrowserTTSProvider } from "../../services/tts/browser-provider.js";
|
|
|
19
21
|
function bindServerBackendConfig(provider, bound) {
|
|
20
22
|
return {
|
|
21
23
|
providerId: provider.providerId,
|
|
22
|
-
providerName: provider.providerName,
|
|
23
|
-
version: provider.version,
|
|
24
24
|
initialize: (config) => {
|
|
25
25
|
const runtime = config;
|
|
26
26
|
const merged = {
|
|
@@ -34,7 +34,6 @@ function bindServerBackendConfig(provider, bound) {
|
|
|
34
34
|
};
|
|
35
35
|
return provider.initialize(merged);
|
|
36
36
|
},
|
|
37
|
-
supportsFeature: (feature) => provider.supportsFeature(feature),
|
|
38
37
|
getCapabilities: () => provider.getCapabilities(),
|
|
39
38
|
destroy: () => provider.destroy(),
|
|
40
39
|
};
|
|
@@ -42,34 +41,34 @@ function bindServerBackendConfig(provider, bound) {
|
|
|
42
41
|
/**
|
|
43
42
|
* TTS Tool Provider
|
|
44
43
|
*
|
|
45
|
-
* Wraps
|
|
44
|
+
* Wraps the browser or a server TTS provider with the ToolProviderApi interface
|
|
46
45
|
* for use in the ToolProviderRegistry.
|
|
47
46
|
*
|
|
48
47
|
* @example Browser TTS (no auth)
|
|
49
48
|
* ```typescript
|
|
50
49
|
* const provider = new TTSToolProvider();
|
|
51
|
-
* await provider.initialize({
|
|
50
|
+
* await provider.initialize({});
|
|
52
51
|
* const ttsProvider = await provider.createInstance();
|
|
53
52
|
* ```
|
|
54
53
|
*
|
|
55
54
|
* @example Server TTS
|
|
56
55
|
* ```typescript
|
|
57
|
-
* const provider = new TTSToolProvider('
|
|
56
|
+
* const provider = new TTSToolProvider('server', {
|
|
58
57
|
* loadServerProvider: async () => ServerTTSProvider,
|
|
59
58
|
* });
|
|
60
59
|
* await provider.initialize({
|
|
61
|
-
*
|
|
60
|
+
* provider: 'polly',
|
|
62
61
|
* apiEndpoint: '/api/tts',
|
|
63
62
|
* });
|
|
64
63
|
* const ttsProvider = await provider.createInstance();
|
|
65
64
|
* ```
|
|
66
65
|
*/
|
|
67
66
|
export class TTSToolProvider {
|
|
68
|
-
providerId = "tts-service";
|
|
69
67
|
providerName = "Text-to-Speech";
|
|
70
68
|
category = "tts";
|
|
71
69
|
version = "1.0";
|
|
72
70
|
requiresAuth;
|
|
71
|
+
backend;
|
|
73
72
|
ttsProvider = null;
|
|
74
73
|
config = null;
|
|
75
74
|
loadServerProvider;
|
|
@@ -81,23 +80,15 @@ export class TTSToolProvider {
|
|
|
81
80
|
console.warn("[TTSToolProvider] telemetry callback failed:", error);
|
|
82
81
|
}
|
|
83
82
|
}
|
|
84
|
-
/**
|
|
85
|
-
* Create TTS tool provider
|
|
86
|
-
*
|
|
87
|
-
* @param backend TTS backend to use (default: 'browser')
|
|
88
|
-
* @param options Loader for the server adapter, required by server backends
|
|
89
|
-
*/
|
|
83
|
+
/** A server backend needs `options.loadServerProvider`. */
|
|
90
84
|
constructor(backend = "browser", options = {}) {
|
|
85
|
+
this.backend = backend;
|
|
91
86
|
this.requiresAuth = backend !== "browser";
|
|
92
87
|
this.loadServerProvider = options.loadServerProvider;
|
|
93
88
|
}
|
|
94
89
|
/**
|
|
95
|
-
*
|
|
96
|
-
*
|
|
97
|
-
* Sets up the appropriate TTS backend.
|
|
98
|
-
*
|
|
99
|
-
* @param config Configuration with backend type and credentials
|
|
100
|
-
* @throws Error if initialization fails or required config missing
|
|
90
|
+
* Set up the backend's TTS provider. Throws when the backend is unavailable
|
|
91
|
+
* or its required config is missing. Once initialized, a call only warns.
|
|
101
92
|
*/
|
|
102
93
|
async initialize(config) {
|
|
103
94
|
if (this.ttsProvider) {
|
|
@@ -105,34 +96,25 @@ export class TTSToolProvider {
|
|
|
105
96
|
return;
|
|
106
97
|
}
|
|
107
98
|
this.config = config;
|
|
108
|
-
switch (
|
|
99
|
+
switch (this.backend) {
|
|
109
100
|
case "browser":
|
|
110
|
-
await this._initializeBrowserTTS(
|
|
101
|
+
await this._initializeBrowserTTS();
|
|
111
102
|
break;
|
|
112
|
-
case "polly":
|
|
113
|
-
case "google":
|
|
114
103
|
case "server":
|
|
115
104
|
await this._initializeServerTTS(config);
|
|
116
105
|
break;
|
|
117
106
|
default:
|
|
118
|
-
throw new Error(`[TTSToolProvider] Unknown backend: ${
|
|
107
|
+
throw new Error(`[TTSToolProvider] Unknown backend: ${this.backend}`);
|
|
119
108
|
}
|
|
120
|
-
|
|
109
|
+
logger.debug(`initialized (backend: ${this.backend})`);
|
|
121
110
|
}
|
|
122
|
-
|
|
123
|
-
* Initialize browser TTS (Web Speech API)
|
|
124
|
-
*/
|
|
125
|
-
async _initializeBrowserTTS(config) {
|
|
126
|
-
// Check if Web Speech API is available
|
|
111
|
+
async _initializeBrowserTTS() {
|
|
127
112
|
if (typeof window === "undefined" || !("speechSynthesis" in window)) {
|
|
128
113
|
throw new Error("[TTSToolProvider] Browser TTS not supported (Web Speech API not available)");
|
|
129
114
|
}
|
|
130
115
|
this.ttsProvider = new BrowserTTSProvider();
|
|
131
|
-
|
|
116
|
+
logger.debug("browser TTS initialized (Web Speech API)");
|
|
132
117
|
}
|
|
133
|
-
/**
|
|
134
|
-
* Initialize server-based TTS (Polly, Google)
|
|
135
|
-
*/
|
|
136
118
|
async _initializeServerTTS(config) {
|
|
137
119
|
if (!config.apiEndpoint) {
|
|
138
120
|
throw new Error("[TTSToolProvider] apiEndpoint required for server-based TTS backends");
|
|
@@ -141,11 +123,12 @@ export class TTSToolProvider {
|
|
|
141
123
|
if (!loadServerProvider) {
|
|
142
124
|
throw new Error("[TTSToolProvider] server-based TTS backends need the loadServerProvider option");
|
|
143
125
|
}
|
|
126
|
+
const serverProvider = config.provider || this.backend;
|
|
144
127
|
const moduleLoadStartedAt = Date.now();
|
|
145
128
|
await this.emitTelemetry("pie-tool-library-load-start", {
|
|
146
129
|
toolId: "textToSpeech",
|
|
147
130
|
operation: "server-provider-module-import",
|
|
148
|
-
backend:
|
|
131
|
+
backend: serverProvider,
|
|
149
132
|
});
|
|
150
133
|
const ServerProvider = await (async () => {
|
|
151
134
|
try {
|
|
@@ -153,7 +136,7 @@ export class TTSToolProvider {
|
|
|
153
136
|
await this.emitTelemetry("pie-tool-library-load-success", {
|
|
154
137
|
toolId: "textToSpeech",
|
|
155
138
|
operation: "server-provider-module-import",
|
|
156
|
-
backend:
|
|
139
|
+
backend: serverProvider,
|
|
157
140
|
duration: Date.now() - moduleLoadStartedAt,
|
|
158
141
|
});
|
|
159
142
|
return loaded;
|
|
@@ -162,7 +145,7 @@ export class TTSToolProvider {
|
|
|
162
145
|
await this.emitTelemetry("pie-tool-library-load-error", {
|
|
163
146
|
toolId: "textToSpeech",
|
|
164
147
|
operation: "server-provider-module-import",
|
|
165
|
-
backend:
|
|
148
|
+
backend: serverProvider,
|
|
166
149
|
duration: Date.now() - moduleLoadStartedAt,
|
|
167
150
|
errorType: "ToolLibraryLoadError",
|
|
168
151
|
message: error instanceof Error ? error.message : String(error),
|
|
@@ -170,18 +153,13 @@ export class TTSToolProvider {
|
|
|
170
153
|
throw error;
|
|
171
154
|
}
|
|
172
155
|
})();
|
|
173
|
-
const {
|
|
156
|
+
const { onTelemetry: _onTelemetry, ...backendConfig } = config;
|
|
174
157
|
this.ttsProvider = bindServerBackendConfig(new ServerProvider(), backendConfig);
|
|
175
|
-
|
|
158
|
+
logger.debug(`server TTS initialized (provider: ${serverProvider})`);
|
|
176
159
|
}
|
|
177
160
|
/**
|
|
178
|
-
*
|
|
179
|
-
*
|
|
180
|
-
* Returns the initialized TTS provider.
|
|
181
|
-
*
|
|
182
|
-
* @param config Optional instance-specific configuration (currently unused)
|
|
183
|
-
* @returns TTS provider
|
|
184
|
-
* @throws Error if provider not initialized
|
|
161
|
+
* The initialized TTS provider; every call returns the same one and ignores
|
|
162
|
+
* `config`. Throws before `initialize`.
|
|
185
163
|
*/
|
|
186
164
|
async createInstance(config) {
|
|
187
165
|
if (!this.ttsProvider) {
|
|
@@ -189,46 +167,15 @@ export class TTSToolProvider {
|
|
|
189
167
|
}
|
|
190
168
|
return this.ttsProvider;
|
|
191
169
|
}
|
|
192
|
-
/**
|
|
193
|
-
* Get provider capabilities
|
|
194
|
-
*
|
|
195
|
-
* @returns TTS capabilities based on backend
|
|
196
|
-
*/
|
|
197
|
-
getCapabilities() {
|
|
198
|
-
const isBrowser = this.config?.backend === "browser";
|
|
199
|
-
return {
|
|
200
|
-
supportsOffline: isBrowser,
|
|
201
|
-
requiresAuth: !isBrowser,
|
|
202
|
-
maxInstances: 1, // Single TTS instance (playback is sequential)
|
|
203
|
-
features: {
|
|
204
|
-
wordBoundary: true, // All backends support word highlighting
|
|
205
|
-
pause: true,
|
|
206
|
-
resume: true,
|
|
207
|
-
rateControl: true,
|
|
208
|
-
pitchControl: isBrowser, // Only browser supports pitch
|
|
209
|
-
voiceSelection: true,
|
|
210
|
-
},
|
|
211
|
-
};
|
|
212
|
-
}
|
|
213
|
-
/**
|
|
214
|
-
* Check if provider is ready
|
|
215
|
-
*
|
|
216
|
-
* @returns true if provider is initialized
|
|
217
|
-
*/
|
|
218
170
|
isReady() {
|
|
219
171
|
return this.ttsProvider !== null;
|
|
220
172
|
}
|
|
221
|
-
/**
|
|
222
|
-
* Clean up provider resources
|
|
223
|
-
*
|
|
224
|
-
* Destroys the TTS provider and releases resources.
|
|
225
|
-
*/
|
|
226
173
|
destroy() {
|
|
227
174
|
if (this.ttsProvider) {
|
|
228
175
|
this.ttsProvider.destroy();
|
|
229
176
|
this.ttsProvider = null;
|
|
230
177
|
}
|
|
231
178
|
this.config = null;
|
|
232
|
-
|
|
179
|
+
logger.debug("destroyed");
|
|
233
180
|
}
|
|
234
181
|
}
|
|
@@ -5,21 +5,20 @@
|
|
|
5
5
|
* configuration, authentication, or external services.
|
|
6
6
|
*/
|
|
7
7
|
export type ToolCategory = "calculator" | "tts" | "translation" | "annotation" | "accessibility" | "other";
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
8
|
+
/**
|
|
9
|
+
* A tool's provider. It registers under its tool's id, which is how the toolkit
|
|
10
|
+
* and the tool find it; it carries no id of its own.
|
|
11
|
+
*
|
|
12
|
+
* Config takes no type parameter (ADR 0002): an implementation narrows it in its
|
|
13
|
+
* own method signatures.
|
|
14
|
+
*/
|
|
15
|
+
export interface ToolProviderApi<TInstance = any> {
|
|
16
16
|
readonly providerName: string;
|
|
17
17
|
readonly category: ToolCategory;
|
|
18
18
|
readonly version: string;
|
|
19
19
|
readonly requiresAuth: boolean;
|
|
20
|
-
initialize(config:
|
|
21
|
-
createInstance(config?:
|
|
22
|
-
getCapabilities(): ToolProviderCapabilities;
|
|
20
|
+
initialize(config: unknown): Promise<void>;
|
|
21
|
+
createInstance(config?: unknown): Promise<TInstance>;
|
|
23
22
|
isReady(): boolean;
|
|
24
23
|
destroy(): void;
|
|
25
24
|
}
|
|
@@ -3,18 +3,16 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Centralized registry for managing tool providers.
|
|
5
5
|
* Handles initialization, authentication, and lazy loading.
|
|
6
|
-
*
|
|
7
|
-
* Part of PIE Assessment Toolkit.
|
|
8
6
|
*/
|
|
9
7
|
import type { ToolProviderApi, ToolCategory } from "./ToolProviderApi.js";
|
|
10
8
|
/**
|
|
11
|
-
*
|
|
9
|
+
* What `register` takes: the provider, its config, and how it starts.
|
|
12
10
|
*/
|
|
13
|
-
export interface
|
|
11
|
+
export interface ToolProviderRegistration<TConfig = any> {
|
|
14
12
|
/**
|
|
15
13
|
* Provider instance to register
|
|
16
14
|
*/
|
|
17
|
-
provider: ToolProviderApi
|
|
15
|
+
provider: ToolProviderApi;
|
|
18
16
|
/**
|
|
19
17
|
* Configuration for this provider
|
|
20
18
|
* (may include auth credentials, endpoints, etc.)
|
|
@@ -36,7 +34,7 @@ export interface ToolProviderConfig<TConfig = any> {
|
|
|
36
34
|
* @example
|
|
37
35
|
* ```typescript
|
|
38
36
|
* authFetcher: async () => {
|
|
39
|
-
* const response = await fetch('/api/desmos/
|
|
37
|
+
* const response = await fetch('/api/tools/desmos/auth');
|
|
40
38
|
* return response.json(); // { apiKey: '...' }
|
|
41
39
|
* }
|
|
42
40
|
* ```
|
|
@@ -54,14 +52,16 @@ export interface ToolProviderConfig<TConfig = any> {
|
|
|
54
52
|
* - Registration
|
|
55
53
|
* - Lazy initialization
|
|
56
54
|
* - Auth credential fetching
|
|
57
|
-
* - Provider lookup by
|
|
55
|
+
* - Provider lookup by tool id or category
|
|
56
|
+
*
|
|
57
|
+
* The toolkit coordinator registers each provider under its tool's id.
|
|
58
58
|
*
|
|
59
59
|
* @example
|
|
60
60
|
* ```typescript
|
|
61
61
|
* const registry = new ToolProviderRegistry();
|
|
62
62
|
*
|
|
63
63
|
* // Register a provider with auth fetcher
|
|
64
|
-
* registry.register('
|
|
64
|
+
* registry.register('calculator', {
|
|
65
65
|
* provider: new ExampleToolProvider(),
|
|
66
66
|
* config: {},
|
|
67
67
|
* lazy: true,
|
|
@@ -72,7 +72,7 @@ export interface ToolProviderConfig<TConfig = any> {
|
|
|
72
72
|
* });
|
|
73
73
|
*
|
|
74
74
|
* // Get provider (auto-initializes if lazy)
|
|
75
|
-
* const provider = await registry.getProvider('
|
|
75
|
+
* const provider = await registry.getProvider('calculator');
|
|
76
76
|
* ```
|
|
77
77
|
*/
|
|
78
78
|
export declare class ToolProviderRegistry {
|
|
@@ -85,23 +85,22 @@ export declare class ToolProviderRegistry {
|
|
|
85
85
|
* Register a tool provider
|
|
86
86
|
*
|
|
87
87
|
* Adds a provider to the registry. If lazy is false, initializes immediately.
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
* @throws Error if provider with same ID already registered
|
|
88
|
+
* A registration under an id already registered replaces it: the replaced
|
|
89
|
+
* provider is destroyed once a start in progress settles, and a caller
|
|
90
|
+
* waiting on that start gets the replacement.
|
|
92
91
|
*/
|
|
93
|
-
register(
|
|
92
|
+
register(toolId: string, config: ToolProviderRegistration): void;
|
|
94
93
|
/**
|
|
95
94
|
* Initialize a provider
|
|
96
95
|
*
|
|
97
96
|
* Fetches auth if needed and initializes the provider.
|
|
98
97
|
* Safe to call multiple times - subsequent calls wait for first initialization.
|
|
99
|
-
*
|
|
100
|
-
* @param providerId Provider to initialize
|
|
101
|
-
* @returns Promise that resolves when initialization complete
|
|
102
|
-
* @throws Error if provider not registered or initialization fails
|
|
98
|
+
* Throws when the provider is not registered or its initialization fails.
|
|
103
99
|
*/
|
|
104
|
-
initialize(
|
|
100
|
+
initialize(toolId: string): Promise<void>;
|
|
101
|
+
/** Whether a registration replaced `provider` under `toolId`. */
|
|
102
|
+
private isReplaced;
|
|
103
|
+
private destroyProvider;
|
|
105
104
|
/**
|
|
106
105
|
* Internal initialization logic
|
|
107
106
|
*/
|
|
@@ -110,56 +109,26 @@ export declare class ToolProviderRegistry {
|
|
|
110
109
|
* Get a provider instance
|
|
111
110
|
*
|
|
112
111
|
* Retrieves a registered provider. If autoInitialize is true and provider
|
|
113
|
-
* is not initialized, initializes it first.
|
|
114
|
-
*
|
|
115
|
-
* @param providerId Provider identifier
|
|
116
|
-
* @param autoInitialize Auto-initialize if not ready (default: true)
|
|
117
|
-
* @returns Provider instance
|
|
118
|
-
* @throws Error if provider not registered
|
|
119
|
-
*/
|
|
120
|
-
getProvider<T extends ToolProviderApi = ToolProviderApi>(providerId: string, autoInitialize?: boolean): Promise<T>;
|
|
121
|
-
/**
|
|
122
|
-
* Get all providers in a category
|
|
123
|
-
*
|
|
124
|
-
* @param category Tool category to filter by
|
|
125
|
-
* @returns Array of provider IDs in the category
|
|
112
|
+
* is not initialized, initializes it first. Throws when the provider is not
|
|
113
|
+
* registered.
|
|
126
114
|
*/
|
|
115
|
+
getProvider<T extends ToolProviderApi = ToolProviderApi>(toolId: string, autoInitialize?: boolean): Promise<T>;
|
|
116
|
+
/** The ids of the tools whose provider is in `category`. */
|
|
127
117
|
getProvidersByCategory(category: ToolCategory): string[];
|
|
128
118
|
/**
|
|
129
|
-
*
|
|
130
|
-
*
|
|
131
|
-
* @returns Array of all provider IDs
|
|
119
|
+
* The ids of the tools with a registered provider.
|
|
132
120
|
*/
|
|
133
121
|
getProviderIds(): string[];
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
* @param providerId Provider identifier
|
|
138
|
-
* @returns true if provider is registered
|
|
139
|
-
*/
|
|
140
|
-
has(providerId: string): boolean;
|
|
141
|
-
/**
|
|
142
|
-
* Check if provider is initialized
|
|
143
|
-
*
|
|
144
|
-
* @param providerId Provider identifier
|
|
145
|
-
* @returns true if provider is initialized
|
|
146
|
-
*/
|
|
147
|
-
isInitialized(providerId: string): boolean;
|
|
148
|
-
/**
|
|
149
|
-
* Check if provider is currently initializing
|
|
150
|
-
*
|
|
151
|
-
* @param providerId Provider identifier
|
|
152
|
-
* @returns true if initialization in progress
|
|
153
|
-
*/
|
|
154
|
-
isInitializing(providerId: string): boolean;
|
|
122
|
+
has(toolId: string): boolean;
|
|
123
|
+
isInitialized(toolId: string): boolean;
|
|
124
|
+
isInitializing(toolId: string): boolean;
|
|
155
125
|
/**
|
|
156
126
|
* Unregister and destroy a provider
|
|
157
127
|
*
|
|
158
|
-
* Removes the provider from the registry and calls its destroy method
|
|
159
|
-
*
|
|
160
|
-
* @param providerId Provider to unregister
|
|
128
|
+
* Removes the provider from the registry and calls its destroy method,
|
|
129
|
+
* after any start in progress settles.
|
|
161
130
|
*/
|
|
162
|
-
unregister(
|
|
131
|
+
unregister(toolId: string): Promise<void>;
|
|
163
132
|
/**
|
|
164
133
|
* Clean up all providers
|
|
165
134
|
*
|