@pie-players/pie-assessment-toolkit 0.3.73 → 0.3.75

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (274) hide show
  1. package/README.md +469 -318
  2. package/dist/attempt/AssessmentSession.d.ts +1 -5
  3. package/dist/attempt/AssessmentSession.js +0 -29
  4. package/dist/attempt/TestSession.d.ts +1 -20
  5. package/dist/attempt/TestSession.js +8 -99
  6. package/dist/components/ItemScope.custom-element.d.ts +1 -0
  7. package/dist/components/ItemScope.custom-element.js +1 -0
  8. package/dist/components/ItemToolBar.custom-element.d.ts +1 -0
  9. package/dist/components/ItemToolBar.custom-element.js +1 -1
  10. package/dist/components/PieAssessmentToolkit.custom-element.d.ts +1 -0
  11. package/dist/components/PieAssessmentToolkit.custom-element.js +13 -13
  12. package/dist/components/SectionToolBar.custom-element.d.ts +1 -0
  13. package/dist/components/SectionToolBar.custom-element.js +1 -1
  14. package/dist/components/chunks/ItemToolBar-7tt7v2xp.js +4 -0
  15. package/dist/components/chunks/ItemToolBar-97hx60z4.js +2 -0
  16. package/dist/components/chunks/ItemToolBar-bxwyhr5p.js +2 -0
  17. package/dist/components/chunks/ItemToolBar-jx38w99s.js +2 -0
  18. package/dist/components/chunks/ItemToolBar-rd2bb4p6.js +40 -0
  19. package/dist/components/chunks/ItemToolBar-vdkyn9f3.js +2 -0
  20. package/dist/components/chunks/sre-engine-jd8cc08x.js +1 -0
  21. package/dist/components/item-scope-element.d.ts +2 -0
  22. package/dist/components/item-scope-element.js +2 -0
  23. package/dist/context/assessment-toolkit-context.d.ts +32 -6
  24. package/dist/index.d.ts +23 -48
  25. package/dist/index.js +12 -37
  26. package/dist/policy/core/PolicySource.d.ts +1 -1
  27. package/dist/policy/core/ToolPolicyEngine.d.ts +85 -34
  28. package/dist/policy/core/ToolPolicyEngine.js +148 -46
  29. package/dist/policy/core/compose-decision.d.ts +28 -7
  30. package/dist/policy/core/compose-decision.js +75 -54
  31. package/dist/policy/core/decision-types.d.ts +65 -34
  32. package/dist/policy/core/feature-decision.d.ts +16 -9
  33. package/dist/policy/core/feature-decision.js +14 -8
  34. package/dist/policy/core/pnp-policy-inputs.d.ts +24 -33
  35. package/dist/policy/core/pnp-policy-inputs.js +28 -56
  36. package/dist/policy/core/provenance.d.ts +9 -4
  37. package/dist/policy/core/provenance.js +1 -1
  38. package/dist/policy/engine.d.ts +7 -23
  39. package/dist/policy/engine.js +5 -20
  40. package/dist/policy/sources/PnpPolicySource.d.ts +44 -61
  41. package/dist/policy/sources/PnpPolicySource.js +117 -118
  42. package/dist/runtime/SectionControllerBinding.d.ts +279 -0
  43. package/dist/runtime/SectionControllerBinding.js +450 -0
  44. package/dist/runtime/SectionRuntimeEngine.d.ts +26 -289
  45. package/dist/runtime/SectionRuntimeEngine.js +30 -372
  46. package/dist/runtime/adapter/SectionEngineAdapter.d.ts +19 -80
  47. package/dist/runtime/adapter/SectionEngineAdapter.js +19 -92
  48. package/dist/runtime/adapter/dom-event-bridge.d.ts +15 -30
  49. package/dist/runtime/adapter/dom-event-bridge.js +17 -44
  50. package/dist/runtime/adapter/subscriber-fanout.d.ts +1 -2
  51. package/dist/runtime/adapter/subscriber-fanout.js +1 -2
  52. package/dist/runtime/catalog-context.d.ts +19 -0
  53. package/dist/runtime/catalog-context.js +28 -0
  54. package/dist/runtime/composition-emit-scheduler.d.ts +9 -15
  55. package/dist/runtime/composition-emit-scheduler.js +9 -15
  56. package/dist/runtime/content-language.d.ts +32 -0
  57. package/dist/runtime/content-language.js +46 -0
  58. package/dist/runtime/content-region.d.ts +17 -0
  59. package/dist/runtime/content-region.js +29 -0
  60. package/dist/runtime/content-registration.d.ts +13 -0
  61. package/dist/runtime/content-registration.js +25 -0
  62. package/dist/runtime/core/SectionEngineCore.d.ts +2 -2
  63. package/dist/runtime/core/SectionEngineCore.js +2 -2
  64. package/dist/runtime/core/cohort.d.ts +1 -1
  65. package/dist/runtime/core/cohort.js +1 -1
  66. package/dist/runtime/core/engine-input.d.ts +18 -30
  67. package/dist/runtime/core/engine-input.js +11 -12
  68. package/dist/runtime/core/engine-output.d.ts +16 -40
  69. package/dist/runtime/core/engine-output.js +9 -21
  70. package/dist/runtime/core/engine-readiness.d.ts +5 -37
  71. package/dist/runtime/core/engine-readiness.js +8 -41
  72. package/dist/runtime/core/engine-resolver.d.ts +46 -74
  73. package/dist/runtime/core/engine-resolver.js +18 -43
  74. package/dist/runtime/core/engine-state.d.ts +28 -36
  75. package/dist/runtime/core/engine-state.js +18 -21
  76. package/dist/runtime/core/engine-transition.d.ts +14 -19
  77. package/dist/runtime/core/engine-transition.js +71 -51
  78. package/dist/runtime/engine.d.ts +16 -19
  79. package/dist/runtime/engine.js +12 -19
  80. package/dist/runtime/page-warnings.d.ts +13 -0
  81. package/dist/runtime/page-warnings.js +22 -0
  82. package/dist/runtime/policy-input-forwarding.d.ts +25 -0
  83. package/dist/runtime/policy-input-forwarding.js +25 -0
  84. package/dist/runtime/registration-events.d.ts +14 -0
  85. package/dist/runtime/runtime-event-claim.d.ts +8 -0
  86. package/dist/runtime/runtime-event-claim.js +15 -0
  87. package/dist/runtime/shell-event-bridge.d.ts +45 -0
  88. package/dist/runtime/shell-event-bridge.js +127 -0
  89. package/dist/runtime/shell-registration.d.ts +73 -0
  90. package/dist/runtime/shell-registration.js +95 -0
  91. package/dist/runtime/shell-scope.d.ts +68 -0
  92. package/dist/runtime/shell-scope.js +188 -0
  93. package/dist/runtime/tool-host-contract.d.ts +28 -10
  94. package/dist/runtime/tool-host-contract.js +31 -10
  95. package/dist/runtime/unclaimed-registration-watch.d.ts +7 -0
  96. package/dist/runtime/unclaimed-registration-watch.js +23 -0
  97. package/dist/services/ElementToolStateStore.d.ts +14 -10
  98. package/dist/services/ElementToolStateStore.js +37 -13
  99. package/dist/services/HighlightCoordinator.d.ts +22 -28
  100. package/dist/services/HighlightCoordinator.js +431 -327
  101. package/dist/services/RangeSerializer.d.ts +10 -1
  102. package/dist/services/RangeSerializer.js +87 -14
  103. package/dist/services/TTSService.d.ts +130 -69
  104. package/dist/services/TTSService.js +713 -570
  105. package/dist/services/ToolCoordinator.d.ts +43 -66
  106. package/dist/services/ToolCoordinator.js +164 -208
  107. package/dist/services/ToolRegistry.d.ts +78 -54
  108. package/dist/services/ToolRegistry.js +107 -105
  109. package/dist/services/ToolkitCoordinator.d.ts +261 -175
  110. package/dist/services/ToolkitCoordinator.js +667 -433
  111. package/dist/services/audio-handoff.d.ts +6 -7
  112. package/dist/services/audio-handoff.js +20 -14
  113. package/dist/services/catalog-owner.d.ts +11 -1
  114. package/dist/services/catalog-owner.js +25 -0
  115. package/dist/services/create-tools-config.d.ts +2 -2
  116. package/dist/services/framework-error-bus.d.ts +3 -6
  117. package/dist/services/framework-error-bus.js +3 -6
  118. package/dist/services/framework-error.d.ts +30 -8
  119. package/dist/services/framework-error.js +9 -7
  120. package/dist/services/interfaces.d.ts +158 -129
  121. package/dist/services/section-controller-types.d.ts +15 -0
  122. package/dist/services/section-session-assignment.d.ts +21 -0
  123. package/dist/services/section-session-assignment.js +82 -0
  124. package/dist/services/spoken-audio-cards.d.ts +0 -2
  125. package/dist/services/spoken-audio-cards.js +1 -3
  126. package/dist/services/tool-config-defaults.d.ts +3 -3
  127. package/dist/services/tool-config-defaults.js +3 -3
  128. package/dist/services/tool-config-validation.d.ts +14 -4
  129. package/dist/services/tool-config-validation.js +63 -71
  130. package/dist/services/tool-context.d.ts +0 -8
  131. package/dist/services/tool-context.js +29 -25
  132. package/dist/services/tool-icons.d.ts +4 -3
  133. package/dist/services/tool-icons.js +4 -3
  134. package/dist/services/tool-instance-id.d.ts +0 -1
  135. package/dist/services/tool-instance-id.js +0 -6
  136. package/dist/services/tool-providers/TTSToolProvider.d.ts +41 -80
  137. package/dist/services/tool-providers/TTSToolProvider.js +81 -40
  138. package/dist/services/tool-providers/ToolProviderApi.d.ts +10 -4
  139. package/dist/services/tool-providers/ToolProviderRegistry.d.ts +32 -28
  140. package/dist/services/tool-providers/ToolProviderRegistry.js +121 -107
  141. package/dist/services/tool-providers/index.d.ts +0 -9
  142. package/dist/services/tool-providers/index.js +2 -4
  143. package/dist/services/tool-request.d.ts +27 -12
  144. package/dist/services/tool-request.js +24 -14
  145. package/dist/services/toolbar-decided-tools.d.ts +15 -0
  146. package/dist/services/toolbar-decided-tools.js +28 -0
  147. package/dist/services/tools-config-normalizer.d.ts +37 -23
  148. package/dist/services/tools-config-normalizer.js +2 -10
  149. package/dist/services/tts/browser-provider.d.ts +38 -2
  150. package/dist/services/tts/browser-provider.js +276 -140
  151. package/dist/services/tts/catalog-span-alignment.d.ts +2 -17
  152. package/dist/services/tts/catalog-span-alignment.js +17 -142
  153. package/dist/services/tts/flat-tree.d.ts +71 -0
  154. package/dist/services/tts/flat-tree.js +269 -0
  155. package/dist/services/tts/generated-speech/assemble-plan.d.ts +3 -1
  156. package/dist/services/tts/generated-speech/assemble-plan.js +3 -1
  157. package/dist/services/tts/generated-speech/dom/build-dom-plan.d.ts +2 -0
  158. package/dist/services/tts/generated-speech/dom/build-dom-plan.js +1 -1
  159. package/dist/services/tts/generated-speech/math-speech-cache.d.ts +3 -1
  160. package/dist/services/tts/generated-speech/math-speech-cache.js +5 -1
  161. package/dist/services/tts/generated-speech/types.d.ts +0 -12
  162. package/dist/services/tts/highlight-pipeline/boundary-normalizer.js +12 -62
  163. package/dist/services/tts/highlight-pipeline/create-highlight-plan.js +38 -5
  164. package/dist/services/tts/highlight-pipeline/normalize-speech-chunks.js +3 -6
  165. package/dist/services/tts/highlight-pipeline/prose-boundary-resolver.js +6 -4
  166. package/dist/services/tts/highlight-pipeline/readable-region.js +3 -2
  167. package/dist/services/tts/highlight-pipeline/types.d.ts +5 -0
  168. package/dist/services/tts/highlight-pipeline/visible-map-range.d.ts +12 -0
  169. package/dist/services/tts/highlight-pipeline/visible-map-range.js +73 -7
  170. package/dist/services/tts/math-alignment/index.d.ts +0 -5
  171. package/dist/services/tts/math-alignment/index.js +5 -25
  172. package/dist/services/tts/math-alignment/speech-tokenizer.d.ts +9 -1
  173. package/dist/services/tts/math-alignment/speech-tokenizer.js +38 -36
  174. package/dist/services/tts/math-alignment/types.d.ts +4 -2
  175. package/dist/services/tts/math-aware-text-processing.d.ts +5 -1
  176. package/dist/services/tts/math-aware-text-processing.js +74 -18
  177. package/dist/services/tts/math-control-names.d.ts +21 -0
  178. package/dist/services/tts/math-control-names.js +142 -0
  179. package/dist/services/tts/math-speech.d.ts +16 -1
  180. package/dist/services/tts/math-speech.js +55 -19
  181. package/dist/services/tts/provider-options.d.ts +41 -0
  182. package/dist/services/tts/provider-options.js +1 -0
  183. package/dist/services/tts/sre-engine.d.ts +7 -0
  184. package/dist/services/tts/sre-engine.js +11 -0
  185. package/dist/services/tts/sre-locales.d.ts +14 -0
  186. package/dist/services/tts/sre-locales.js +57 -0
  187. package/dist/services/tts/ssml/spoken-text.d.ts +2 -26
  188. package/dist/services/tts/ssml/spoken-text.js +29 -0
  189. package/dist/services/tts/start-failure.d.ts +11 -0
  190. package/dist/services/tts/start-failure.js +19 -0
  191. package/dist/services/tts/text-processing.d.ts +9 -1
  192. package/dist/services/tts/text-processing.js +46 -34
  193. package/dist/services/tts/text-segmentation.d.ts +7 -0
  194. package/dist/services/tts/text-segmentation.js +47 -0
  195. package/dist/services/tts-runtime-config.d.ts +44 -18
  196. package/dist/services/tts-runtime-config.js +22 -93
  197. package/dist/tools/content-capability-resolution.d.ts +7 -9
  198. package/dist/tools/content-capability-resolution.js +8 -45
  199. package/dist/tools/registration.d.ts +58 -0
  200. package/dist/tools/registration.js +54 -0
  201. package/dist/tools/registrations/toolbar-registration-helpers.js +2 -2
  202. package/dist/tools/tool-surface-host.d.ts +6 -10
  203. package/dist/tools/tool-surface-host.js +44 -42
  204. package/dist/tools/tool-tag-map.d.ts +5 -15
  205. package/dist/tools/tool-tag-map.js +6 -20
  206. package/dist/utils/structural-equality.d.ts +11 -0
  207. package/dist/utils/structural-equality.js +47 -0
  208. package/package.json +24 -59
  209. package/dist/attempt/adapters/activity-to-test-attempt-session.d.ts +0 -49
  210. package/dist/attempt/adapters/activity-to-test-attempt-session.js +0 -138
  211. package/dist/components/chunks/ItemToolBar-byq80z42.js +0 -40
  212. package/dist/components/chunks/ItemToolBar-d36g3aw4.js +0 -49
  213. package/dist/context/runtime-context-consumer.d.ts +0 -13
  214. package/dist/context/runtime-context-consumer.js +0 -51
  215. package/dist/item-loader.d.ts +0 -44
  216. package/dist/item-loader.js +0 -61
  217. package/dist/policy/core/engine-context.d.ts +0 -29
  218. package/dist/policy/core/engine-context.js +0 -27
  219. package/dist/policy/core/policy-source-tag.d.ts +0 -31
  220. package/dist/policy/core/policy-source-tag.js +0 -28
  221. package/dist/policy/internal.d.ts +0 -25
  222. package/dist/policy/internal.js +0 -25
  223. package/dist/runtime/adapter/coordinator-bridge.d.ts +0 -92
  224. package/dist/runtime/adapter/coordinator-bridge.js +0 -126
  225. package/dist/runtime/adapter/framework-error-bridge.d.ts +0 -36
  226. package/dist/runtime/adapter/framework-error-bridge.js +0 -46
  227. package/dist/runtime/adapter/instrumentation-bridge.d.ts +0 -31
  228. package/dist/runtime/adapter/instrumentation-bridge.js +0 -38
  229. package/dist/runtime/core/engine-stage-derivation.d.ts +0 -18
  230. package/dist/runtime/core/engine-stage-derivation.js +0 -29
  231. package/dist/runtime/engine-context.d.ts +0 -39
  232. package/dist/runtime/engine-context.js +0 -31
  233. package/dist/runtime/internal.d.ts +0 -43
  234. package/dist/runtime/internal.js +0 -45
  235. package/dist/runtime/section-runtime-engine-host-context.d.ts +0 -80
  236. package/dist/runtime/section-runtime-engine-host-context.js +0 -95
  237. package/dist/runtime/stage-emit-gate.d.ts +0 -92
  238. package/dist/runtime/stage-emit-gate.js +0 -82
  239. package/dist/services/I18nService.d.ts +0 -47
  240. package/dist/services/I18nService.js +0 -84
  241. package/dist/services/ThemeProvider.d.ts +0 -95
  242. package/dist/services/ThemeProvider.js +0 -334
  243. package/dist/services/ToolConfigResolver.d.ts +0 -161
  244. package/dist/services/ToolConfigResolver.js +0 -229
  245. package/dist/services/catalog-media.d.ts +0 -56
  246. package/dist/services/catalog-media.js +0 -190
  247. package/dist/services/createDefaultToolRegistry.d.ts +0 -53
  248. package/dist/services/createDefaultToolRegistry.js +0 -45
  249. package/dist/services/defaultPersonalNeedsProfile.d.ts +0 -21
  250. package/dist/services/defaultPersonalNeedsProfile.js +0 -26
  251. package/dist/services/pnp-standard-features.d.ts +0 -238
  252. package/dist/services/pnp-standard-features.js +0 -338
  253. package/dist/services/tool-providers/CortexToolProvider.d.ts +0 -13
  254. package/dist/services/tool-providers/CortexToolProvider.js +0 -32
  255. package/dist/services/tool-providers/DesmosToolProvider.d.ts +0 -14
  256. package/dist/services/tool-providers/DesmosToolProvider.js +0 -32
  257. package/dist/services/tool-providers/GeoGebraToolProvider.d.ts +0 -16
  258. package/dist/services/tool-providers/GeoGebraToolProvider.js +0 -32
  259. package/dist/services/tool-providers/LazyCalculatorToolProvider.d.ts +0 -35
  260. package/dist/services/tool-providers/LazyCalculatorToolProvider.js +0 -95
  261. package/dist/services/tts/visual-line-ranges.d.ts +0 -18
  262. package/dist/services/tts/visual-line-ranges.js +0 -226
  263. package/dist/tools/client.d.ts +0 -12
  264. package/dist/tools/client.js +0 -14
  265. package/dist/tools/index.d.ts +0 -8
  266. package/dist/tools/index.js +0 -10
  267. package/dist/tools/internal.d.ts +0 -43
  268. package/dist/tools/internal.js +0 -41
  269. package/dist/tools/response-discovery.d.ts +0 -61
  270. package/dist/tools/response-discovery.js +0 -113
  271. package/dist/tools/types.d.ts +0 -337
  272. package/dist/tools/types.js +0 -12
  273. package/dist/tools/variant-resolver.d.ts +0 -41
  274. package/dist/tools/variant-resolver.js +0 -207
@@ -1,113 +0,0 @@
1
- /**
2
- * Response Discovery Service
3
- * Finds and manages PIE response components for tool-to-response integration
4
- *
5
- * Enables tools (e.g., calculator) to insert content into response fields
6
- * Based on capability-based interface pattern (inspired by VS Code extension API)
7
- */
8
- export class ResponseDiscoveryServiceImpl {
9
- responses = new Map();
10
- activeResponseId = null;
11
- activeResponseListeners = [];
12
- /**
13
- * Get currently active (focused) response component
14
- */
15
- getActiveResponse() {
16
- if (!this.activeResponseId) {
17
- return null;
18
- }
19
- return this.responses.get(this.activeResponseId) || null;
20
- }
21
- /**
22
- * Get response by ID
23
- */
24
- getResponse(responseId) {
25
- return this.responses.get(responseId) || null;
26
- }
27
- /**
28
- * Get all registered responses
29
- */
30
- getAllResponses() {
31
- return Array.from(this.responses.values());
32
- }
33
- /**
34
- * Get responses that accept a specific content format
35
- */
36
- getResponsesAccepting(format) {
37
- return this.getAllResponses().filter((response) => {
38
- const capabilities = response.getCapabilities();
39
- return capabilities.supportedFormats.includes(format);
40
- });
41
- }
42
- /**
43
- * Register a response component
44
- */
45
- registerResponse(response) {
46
- this.responses.set(response.responseId, response);
47
- console.log(`[ResponseDiscovery] Registered response: ${response.responseId}`);
48
- // If this is the first response and no active response, set it as active
49
- if (!this.activeResponseId && this.responses.size === 1) {
50
- this.setActiveResponse(response.responseId);
51
- }
52
- }
53
- /**
54
- * Unregister a response component
55
- */
56
- unregisterResponse(responseId) {
57
- this.responses.delete(responseId);
58
- console.log(`[ResponseDiscovery] Unregistered response: ${responseId}`);
59
- // If active response was removed, clear it
60
- if (this.activeResponseId === responseId) {
61
- this.setActiveResponse(null);
62
- }
63
- }
64
- /**
65
- * Explicitly signal that a registered response is active.
66
- */
67
- signalActive(responseId) {
68
- if (!this.responses.has(responseId)) {
69
- console.warn(`[ResponseDiscovery] Cannot mark active: unknown response ${responseId}`);
70
- return;
71
- }
72
- this.setActiveResponse(responseId);
73
- }
74
- /**
75
- * Explicitly signal that a response is no longer active.
76
- */
77
- signalInactive(responseId) {
78
- if (this.activeResponseId !== responseId)
79
- return;
80
- this.setActiveResponse(null);
81
- }
82
- /**
83
- * Set active response (internal use)
84
- */
85
- setActiveResponse(responseId) {
86
- if (this.activeResponseId === responseId)
87
- return;
88
- this.activeResponseId = responseId;
89
- const response = responseId ? this.getResponse(responseId) : null;
90
- // Notify listeners
91
- for (const listener of this.activeResponseListeners) {
92
- listener(response);
93
- }
94
- }
95
- /**
96
- * Listen for active response changes
97
- */
98
- onActiveResponseChanged(listener) {
99
- this.activeResponseListeners.push(listener);
100
- }
101
- /**
102
- * Clear all responses (for cleanup)
103
- */
104
- clear() {
105
- this.responses.clear();
106
- this.activeResponseId = null;
107
- this.activeResponseListeners = [];
108
- }
109
- }
110
- /**
111
- * Singleton instance
112
- */
113
- export const responseDiscovery = new ResponseDiscoveryServiceImpl();
@@ -1,337 +0,0 @@
1
- /**
2
- * Tool system type definitions
3
- */
4
- export type { CalculationHistoryEntry, Calculator, CalculatorProvider, CalculatorProviderCapabilities, CalculatorProviderConfig, CalculatorState, CalculatorType, } from "@pie-players/pie-calculator";
5
- export type ToolId = string;
6
- export interface ToolState {
7
- id: ToolId;
8
- name: string;
9
- isVisible: boolean;
10
- isActive: boolean;
11
- zIndex: number;
12
- element?: HTMLElement;
13
- }
14
- export interface ToolPosition {
15
- x: number;
16
- y: number;
17
- }
18
- export interface ToolSize {
19
- width: number;
20
- height: number;
21
- }
22
- export interface ToolConfig {
23
- id: ToolId;
24
- name: string;
25
- icon?: string;
26
- enabled: boolean;
27
- alwaysAvailable?: boolean;
28
- }
29
- export interface AssessmentToolConfig {
30
- enabledTools: ToolId[];
31
- toolSettings?: Record<ToolId, any>;
32
- }
33
- /**
34
- * Tool allowance: "0" = blocked, "1" = allowed
35
- * Based on existing platform patterns
36
- */
37
- export type ToolAllowance = "0" | "1";
38
- /**
39
- * Roster/Test-level tool configuration
40
- * Defines default tool availability for an assessment
41
- */
42
- export interface RosterToolConfiguration {
43
- rosterId: string;
44
- testId?: string;
45
- toolAllowances: Record<string, ToolAllowance>;
46
- defaultToolConfigs?: Record<string, ToolConfig>;
47
- }
48
- /**
49
- * Configuration source for tool resolution
50
- */
51
- export type ConfigurationSource = "roster-block" | "item-restriction" | "item-requirement" | "student-accommodation" | "roster-default" | "system-default";
52
- /**
53
- * Resolved tool configuration with source tracking
54
- */
55
- export interface ResolvedToolConfig extends ToolConfig {
56
- resolvedFrom: ConfigurationSource;
57
- required: boolean;
58
- reason: string;
59
- }
60
- /**
61
- * Tool resolution result
62
- */
63
- export interface ToolResolutionResult {
64
- allowed: boolean;
65
- reason: string;
66
- source: ConfigurationSource;
67
- config?: ToolConfig;
68
- }
69
- /**
70
- * Item-level tool configuration
71
- */
72
- export interface ItemToolConfig {
73
- itemId: string;
74
- requiredTools?: string[];
75
- restrictedTools?: string[];
76
- toolParameters?: Record<string, ItemToolParameters>;
77
- variantConfig?: ItemVariantConfig;
78
- }
79
- /**
80
- * Item tool parameters
81
- */
82
- export interface ItemToolParameters {
83
- config?: Partial<ToolConfig>;
84
- hint?: string;
85
- preOpen?: boolean;
86
- variants?: Record<string, ItemToolParametersVariant>;
87
- }
88
- /**
89
- * Item tool parameters variant
90
- */
91
- export interface ItemToolParametersVariant {
92
- config?: Partial<ToolConfig>;
93
- hint?: string;
94
- preOpen?: boolean;
95
- }
96
- /**
97
- * Item variant configuration for A/B testing and scaffolding
98
- */
99
- export interface ItemVariantConfig {
100
- variantId?: string;
101
- toolOverrides?: Record<string, ItemToolOverride>;
102
- adaptations?: ContentAdaptation[];
103
- experimental?: Record<string, any>;
104
- }
105
- /**
106
- * Tool override for item variants
107
- */
108
- export interface ItemToolOverride {
109
- config?: Partial<ToolConfig>;
110
- uiVariant?: string;
111
- parameters?: Record<string, any>;
112
- replacementTool?: string;
113
- }
114
- /**
115
- * Content adaptation types
116
- */
117
- export interface ContentAdaptation {
118
- type: "scaffolding" | "difficulty" | "language" | "modality" | "custom";
119
- level: string | number;
120
- affectedTools?: string[];
121
- config?: Record<string, any>;
122
- }
123
- /**
124
- * Variant context for resolution
125
- */
126
- export interface VariantContext {
127
- studentId: string;
128
- sessionId: string;
129
- language?: string;
130
- scaffoldingLevel?: number;
131
- difficultyLevel?: string;
132
- custom?: Record<string, any>;
133
- }
134
- /**
135
- * Resolved item configuration with variants applied
136
- */
137
- export interface ResolvedItemConfig {
138
- itemId: string;
139
- requiredTools: string[];
140
- restrictedTools: string[];
141
- toolParameters: Record<string, ResolvedItemToolParameters>;
142
- appliedVariant?: string;
143
- appliedAdaptations?: ContentAdaptation[];
144
- }
145
- /**
146
- * Resolved item tool parameters
147
- */
148
- export interface ResolvedItemToolParameters extends ItemToolParameters {
149
- finalConfig: ToolConfig;
150
- }
151
- /**
152
- * Base interface that all tool components should implement
153
- */
154
- export interface Tool {
155
- /** Unique identifier for this tool */
156
- id: ToolId;
157
- /** Display name */
158
- name: string;
159
- /** Show the tool */
160
- show(): void;
161
- /** Hide the tool */
162
- hide(): void;
163
- /** Toggle visibility */
164
- toggle(): void;
165
- /** Cleanup when tool is destroyed */
166
- destroy?(): void;
167
- }
168
- /**
169
- * Tool categories for organizational purposes
170
- */
171
- export declare enum ToolCategory {
172
- STANDALONE = "standalone",
173
- CONTENT_INTERACTIVE = "content-interactive",
174
- SERVICE_DEPENDENT = "service-dependent"
175
- }
176
- /**
177
- * Tool metadata
178
- */
179
- export interface ToolMetadata {
180
- id: ToolId;
181
- name: string;
182
- description: string;
183
- category: ToolCategory;
184
- icon?: string;
185
- dependencies?: string[];
186
- }
187
- /**
188
- * Accommodation Resolver Service
189
- * Resolves final tool configuration by merging roster, student, and item configs
190
- * Precedence: Roster block > Item restriction > Item requirement > Student accommodation > Roster default
191
- */
192
- export interface AccommodationResolver {
193
- /**
194
- * Resolve final tools for an item given all configuration sources
195
- */
196
- resolveToolsForItem(student: AccommodationProfile, roster: RosterToolConfiguration, item: ItemToolConfig): ResolvedToolConfig[];
197
- /**
198
- * Check if a specific tool is allowed
199
- */
200
- isToolAllowed(toolType: string, student: AccommodationProfile, roster: RosterToolConfiguration, item: ItemToolConfig): ToolResolutionResult;
201
- /**
202
- * Get resolution trace for debugging
203
- */
204
- getResolutionTrace(toolType: string, student: AccommodationProfile, roster: RosterToolConfiguration, item: ItemToolConfig): ResolutionTrace;
205
- }
206
- /**
207
- * Accommodation profile (student-level tool permissions)
208
- */
209
- export interface AccommodationProfile {
210
- studentId: string;
211
- testId?: string;
212
- rosterId?: string;
213
- accommodations: Record<string, boolean>;
214
- }
215
- /**
216
- * Resolution trace for debugging
217
- */
218
- export interface ResolutionTrace {
219
- toolType: string;
220
- steps: ResolutionStep[];
221
- finalDecision: ToolResolutionResult;
222
- }
223
- /**
224
- * Resolution step in trace
225
- */
226
- export interface ResolutionStep {
227
- source: ConfigurationSource;
228
- decision: "allow" | "block" | "require" | "skip";
229
- reason: string;
230
- config?: Partial<ToolConfig>;
231
- }
232
- /**
233
- * Variant Resolver Service
234
- * Resolves item configuration considering variants
235
- */
236
- export interface VariantResolver {
237
- /**
238
- * Resolve variant configuration for an item
239
- */
240
- resolveVariant(itemConfig: ItemToolConfig, context: VariantContext): ResolvedItemConfig;
241
- }
242
- /**
243
- * PIE Response Component Interface
244
- * For tool-to-response integration (e.g., calculator inserting into text field)
245
- */
246
- export interface PIEResponseComponent {
247
- readonly responseId: string;
248
- readonly responseType: PIEResponseType;
249
- getCapabilities(): ResponseCapabilities;
250
- canAccept(content: string, format: ContentFormat): boolean;
251
- insertContent(content: string, options: InsertionOptions): Promise<InsertionResult>;
252
- getContent(format?: ContentFormat): string;
253
- getCursorPosition(): number | null;
254
- setCursorPosition(position: number): void;
255
- focus(): void;
256
- isFocused(): boolean;
257
- validate(content: string, format: ContentFormat): ValidationResult;
258
- }
259
- /**
260
- * PIE response types
261
- */
262
- export type PIEResponseType = "text-entry" | "extended-text-entry" | "math-inline" | "math-block" | "numeric" | "multiple-choice" | "custom";
263
- /**
264
- * Response capabilities
265
- */
266
- export interface ResponseCapabilities {
267
- acceptsPlainText?: boolean;
268
- acceptsLatex?: boolean;
269
- acceptsNumeric?: boolean;
270
- acceptsHtml?: boolean;
271
- acceptsFormattedText?: boolean;
272
- supportedFormats: ContentFormat[];
273
- supportsReplacement?: boolean;
274
- supportsInsertion?: boolean;
275
- supportsAppend?: boolean;
276
- maxLength?: number;
277
- allowedCharacters?: string;
278
- }
279
- /**
280
- * Content formats
281
- */
282
- export type ContentFormat = "plain-text" | "latex" | "mathml" | "numeric" | "html" | "markdown" | "formatted-text";
283
- /**
284
- * Insertion options for response content
285
- */
286
- export interface InsertionOptions {
287
- mode: "replace" | "insert" | "append";
288
- format: ContentFormat;
289
- position?: number;
290
- select?: boolean;
291
- focus?: boolean;
292
- source?: {
293
- toolId: string;
294
- toolType: string;
295
- timestamp: number;
296
- };
297
- }
298
- /**
299
- * Insertion result
300
- */
301
- export interface InsertionResult {
302
- success: boolean;
303
- error?: string;
304
- insertedLength?: number;
305
- finalCursorPosition?: number;
306
- }
307
- /**
308
- * Validation result
309
- */
310
- export interface ValidationResult {
311
- valid: boolean;
312
- errors?: ValidationError[];
313
- warnings?: string[];
314
- }
315
- /**
316
- * Validation error
317
- */
318
- export interface ValidationError {
319
- code: string;
320
- message: string;
321
- position?: number;
322
- }
323
- /**
324
- * Response Discovery Service
325
- * Finds and manages PIE response components for tool integration
326
- */
327
- export interface ResponseDiscoveryService {
328
- getActiveResponse(): PIEResponseComponent | null;
329
- getResponse(responseId: string): PIEResponseComponent | null;
330
- getAllResponses(): PIEResponseComponent[];
331
- getResponsesAccepting(format: ContentFormat): PIEResponseComponent[];
332
- registerResponse(response: PIEResponseComponent): void;
333
- unregisterResponse(responseId: string): void;
334
- signalActive(responseId: string): void;
335
- signalInactive(responseId: string): void;
336
- onActiveResponseChanged(listener: (response: PIEResponseComponent | null) => void): void;
337
- }
@@ -1,12 +0,0 @@
1
- /**
2
- * Tool system type definitions
3
- */
4
- /**
5
- * Tool categories for organizational purposes
6
- */
7
- export var ToolCategory;
8
- (function (ToolCategory) {
9
- ToolCategory["STANDALONE"] = "standalone";
10
- ToolCategory["CONTENT_INTERACTIVE"] = "content-interactive";
11
- ToolCategory["SERVICE_DEPENDENT"] = "service-dependent";
12
- })(ToolCategory || (ToolCategory = {}));
@@ -1,41 +0,0 @@
1
- /**
2
- * Variant Resolver Service
3
- * Resolves item configuration considering variants for A/B testing, scaffolding, and adaptations
4
- *
5
- * Based on architectural enhancements for item-level variant configuration
6
- */
7
- import type { ItemToolConfig, ResolvedItemConfig, VariantContext, VariantResolver } from "./types.js";
8
- export declare class VariantResolverImpl implements VariantResolver {
9
- /**
10
- * Resolve variant configuration for an item
11
- */
12
- resolveVariant(itemConfig: ItemToolConfig, context: VariantContext): ResolvedItemConfig;
13
- /**
14
- * Resolve tool parameters considering variant and context
15
- */
16
- private _resolveToolParameters;
17
- /**
18
- * Select variant parameters based on context
19
- */
20
- private _selectVariantParameters;
21
- /**
22
- * Create tool parameters from override
23
- */
24
- private _createToolParametersFromOverride;
25
- /**
26
- * Resolve required tools considering overrides
27
- */
28
- private _resolveRequiredTools;
29
- /**
30
- * Filter adaptations based on context
31
- */
32
- private _filterAdaptations;
33
- /**
34
- * Build resolved config without variants
35
- */
36
- private _buildResolvedConfig;
37
- /**
38
- * Convert tool type to human-readable name
39
- */
40
- private _humanizeName;
41
- }
@@ -1,207 +0,0 @@
1
- /**
2
- * Variant Resolver Service
3
- * Resolves item configuration considering variants for A/B testing, scaffolding, and adaptations
4
- *
5
- * Based on architectural enhancements for item-level variant configuration
6
- */
7
- export class VariantResolverImpl {
8
- /**
9
- * Resolve variant configuration for an item
10
- */
11
- resolveVariant(itemConfig, context) {
12
- // If no variant config, return item as-is
13
- if (!itemConfig.variantConfig) {
14
- return this._buildResolvedConfig(itemConfig, null, []);
15
- }
16
- const { variantConfig } = itemConfig;
17
- const { variantId, toolOverrides, adaptations } = variantConfig;
18
- // Apply tool overrides if variant specified
19
- const resolvedToolParameters = {};
20
- if (itemConfig.toolParameters) {
21
- for (const [toolType, params] of Object.entries(itemConfig.toolParameters)) {
22
- resolvedToolParameters[toolType] = this._resolveToolParameters(toolType, params, toolOverrides, context);
23
- }
24
- }
25
- // Apply tool overrides that aren't in original tool parameters
26
- if (toolOverrides) {
27
- for (const [toolType, override] of Object.entries(toolOverrides)) {
28
- if (!resolvedToolParameters[toolType]) {
29
- resolvedToolParameters[toolType] =
30
- this._createToolParametersFromOverride(toolType, override);
31
- }
32
- }
33
- }
34
- // Build final resolved config
35
- return {
36
- itemId: itemConfig.itemId,
37
- requiredTools: this._resolveRequiredTools(itemConfig, toolOverrides),
38
- restrictedTools: itemConfig.restrictedTools || [],
39
- toolParameters: resolvedToolParameters,
40
- appliedVariant: variantId,
41
- appliedAdaptations: this._filterAdaptations(adaptations, context),
42
- };
43
- }
44
- /**
45
- * Resolve tool parameters considering variant and context
46
- */
47
- _resolveToolParameters(toolType, params, toolOverrides, context) {
48
- // Start with base parameters
49
- let finalConfig = params.config || {};
50
- let finalHint = params.hint;
51
- let finalPreOpen = params.preOpen;
52
- // Apply variant-specific parameters if they exist
53
- if (params.variants) {
54
- const variantParams = this._selectVariantParameters(params.variants, context);
55
- if (variantParams) {
56
- finalConfig = { ...finalConfig, ...variantParams.config };
57
- if (variantParams.hint !== undefined)
58
- finalHint = variantParams.hint;
59
- if (variantParams.preOpen !== undefined)
60
- finalPreOpen = variantParams.preOpen;
61
- }
62
- }
63
- // Apply tool override from variant config
64
- if (toolOverrides && toolOverrides[toolType]) {
65
- const override = toolOverrides[toolType];
66
- if (override.config) {
67
- finalConfig = { ...finalConfig, ...override.config };
68
- }
69
- if (override.parameters) {
70
- // Merge additional parameters
71
- finalConfig = { ...finalConfig, ...override.parameters };
72
- }
73
- }
74
- return {
75
- config: params.config,
76
- hint: finalHint,
77
- preOpen: finalPreOpen,
78
- variants: params.variants,
79
- finalConfig: finalConfig,
80
- };
81
- }
82
- /**
83
- * Select variant parameters based on context
84
- */
85
- _selectVariantParameters(variants, context) {
86
- // Strategy: Select based on context properties
87
- // 1. Check for scaffolding level match
88
- if (context.scaffoldingLevel !== undefined) {
89
- const scaffoldKey = `scaffolding-${context.scaffoldingLevel}`;
90
- if (variants[scaffoldKey])
91
- return variants[scaffoldKey];
92
- }
93
- // 2. Check for difficulty level match
94
- if (context.difficultyLevel) {
95
- const difficultyKey = `difficulty-${context.difficultyLevel}`;
96
- if (variants[difficultyKey])
97
- return variants[difficultyKey];
98
- }
99
- // 3. Check for language match
100
- if (context.language) {
101
- const langKey = `lang-${context.language}`;
102
- if (variants[langKey])
103
- return variants[langKey];
104
- }
105
- // 4. Check custom context keys
106
- if (context.custom) {
107
- for (const [key, value] of Object.entries(context.custom)) {
108
- const customKey = `${key}-${value}`;
109
- if (variants[customKey])
110
- return variants[customKey];
111
- }
112
- }
113
- // 5. Check for default variant
114
- if (variants.default)
115
- return variants.default;
116
- return null;
117
- }
118
- /**
119
- * Create tool parameters from override
120
- */
121
- _createToolParametersFromOverride(toolType, override) {
122
- return {
123
- config: override.config,
124
- hint: override.hint,
125
- preOpen: override.preOpen,
126
- finalConfig: {
127
- id: toolType,
128
- name: this._humanizeName(toolType),
129
- enabled: true,
130
- ...override.config,
131
- },
132
- };
133
- }
134
- /**
135
- * Resolve required tools considering overrides
136
- */
137
- _resolveRequiredTools(itemConfig, toolOverrides) {
138
- const required = new Set(itemConfig.requiredTools || []);
139
- // Add tools that have replacements via overrides
140
- if (toolOverrides) {
141
- for (const [toolType, override] of Object.entries(toolOverrides)) {
142
- if (override.replacementTool) {
143
- required.delete(toolType);
144
- required.add(override.replacementTool);
145
- }
146
- }
147
- }
148
- return Array.from(required);
149
- }
150
- /**
151
- * Filter adaptations based on context
152
- */
153
- _filterAdaptations(adaptations, context) {
154
- if (!adaptations)
155
- return [];
156
- return adaptations.filter((adaptation) => {
157
- // Check if adaptation matches context
158
- if (adaptation.type === "scaffolding" &&
159
- context.scaffoldingLevel !== undefined) {
160
- return adaptation.level === context.scaffoldingLevel;
161
- }
162
- if (adaptation.type === "difficulty" && context.difficultyLevel) {
163
- return adaptation.level === context.difficultyLevel;
164
- }
165
- if (adaptation.type === "language" && context.language) {
166
- return adaptation.level === context.language;
167
- }
168
- // Include custom adaptations by default
169
- return true;
170
- });
171
- }
172
- /**
173
- * Build resolved config without variants
174
- */
175
- _buildResolvedConfig(itemConfig, variantId, adaptations) {
176
- const resolvedToolParameters = {};
177
- if (itemConfig.toolParameters) {
178
- for (const [toolType, params] of Object.entries(itemConfig.toolParameters)) {
179
- resolvedToolParameters[toolType] = {
180
- ...params,
181
- finalConfig: {
182
- id: toolType,
183
- name: this._humanizeName(toolType),
184
- enabled: true,
185
- ...params.config,
186
- },
187
- };
188
- }
189
- }
190
- return {
191
- itemId: itemConfig.itemId,
192
- requiredTools: itemConfig.requiredTools || [],
193
- restrictedTools: itemConfig.restrictedTools || [],
194
- toolParameters: resolvedToolParameters,
195
- appliedVariant: variantId || undefined,
196
- appliedAdaptations: adaptations,
197
- };
198
- }
199
- /**
200
- * Convert tool type to human-readable name
201
- */
202
- _humanizeName(toolType) {
203
- return toolType
204
- .replace(/[-_]/g, " ")
205
- .replace(/\b\w/g, (char) => char.toUpperCase());
206
- }
207
- }