@pie-players/pie-players-shared 0.2.5 → 0.2.6

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 (57) hide show
  1. package/dist/index.d.ts +1 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +1 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/instrumentation/types.d.ts +1 -1
  6. package/dist/pie/configure-initialization.d.ts +1 -16
  7. package/dist/pie/configure-initialization.d.ts.map +1 -1
  8. package/dist/pie/configure-initialization.js +0 -73
  9. package/dist/pie/configure-initialization.js.map +1 -1
  10. package/dist/pie/iife-loader.d.ts +1 -1
  11. package/dist/pie/index.d.ts +6 -0
  12. package/dist/pie/index.d.ts.map +1 -1
  13. package/dist/pie/index.js +3 -0
  14. package/dist/pie/index.js.map +1 -1
  15. package/dist/pie/initialization.d.ts +1 -0
  16. package/dist/pie/initialization.d.ts.map +1 -1
  17. package/dist/pie/initialization.js +52 -37
  18. package/dist/pie/initialization.js.map +1 -1
  19. package/dist/pie/item-controller-storage.d.ts +21 -0
  20. package/dist/pie/item-controller-storage.d.ts.map +1 -0
  21. package/dist/pie/item-controller-storage.js +44 -0
  22. package/dist/pie/item-controller-storage.js.map +1 -0
  23. package/dist/pie/item-controller.d.ts +29 -0
  24. package/dist/pie/item-controller.d.ts.map +1 -0
  25. package/dist/pie/item-controller.js +62 -0
  26. package/dist/pie/item-controller.js.map +1 -0
  27. package/dist/pie/item-session-contract.d.ts +20 -0
  28. package/dist/pie/item-session-contract.d.ts.map +1 -0
  29. package/dist/pie/item-session-contract.js +125 -0
  30. package/dist/pie/item-session-contract.js.map +1 -0
  31. package/dist/pie/logger.d.ts +2 -2
  32. package/dist/pie/logger.js +2 -2
  33. package/dist/pie/player-initializer.d.ts +4 -4
  34. package/dist/pie/player-initializer.js +4 -4
  35. package/dist/pie/updates.d.ts.map +1 -1
  36. package/dist/pie/updates.js +34 -70
  37. package/dist/pie/updates.js.map +1 -1
  38. package/dist/pie/use-resource-monitor.svelte.d.ts +1 -1
  39. package/dist/pie/use-resource-monitor.svelte.js +1 -1
  40. package/dist/player-strategy.d.ts +6 -0
  41. package/dist/player-strategy.d.ts.map +1 -0
  42. package/dist/player-strategy.js +13 -0
  43. package/dist/player-strategy.js.map +1 -0
  44. package/package.json +3 -3
  45. package/src/components/PieItemPlayer.svelte +200 -21
  46. package/dist/types/custom-elements.d.ts +0 -183
  47. package/dist/types/custom-elements.d.ts.map +0 -1
  48. package/dist/types/custom-elements.js +0 -8
  49. package/dist/types/custom-elements.js.map +0 -1
  50. package/dist/types/search.d.ts +0 -105
  51. package/dist/types/search.d.ts.map +0 -1
  52. package/dist/types/search.js +0 -12
  53. package/dist/types/search.js.map +0 -1
  54. package/dist/types/transform.d.ts +0 -48
  55. package/dist/types/transform.d.ts.map +0 -1
  56. package/dist/types/transform.js +0 -21
  57. package/dist/types/transform.js.map +0 -1
@@ -10,7 +10,13 @@
10
10
  import { onDestroy, tick, untrack } from "svelte";
11
11
  import type { LoaderConfig } from "../loader-config.js";
12
12
  import { DEFAULT_LOADER_CONFIG } from "../loader-config.js";
13
- import { AssetEventManager } from "../pie/asset-handler.js";
13
+ import {
14
+ AssetEventManager,
15
+ createDefaultImageDeleteHandler,
16
+ createDefaultImageInsertHandler,
17
+ createDefaultSoundDeleteHandler,
18
+ createDefaultSoundInsertHandler,
19
+ } from "../pie/asset-handler.js";
14
20
  import { initializeConfiguresFromLoadedBundle } from "../pie/configure-initialization.js";
15
21
  import { initializePiesFromLoadedBundle } from "../pie/initialization.js";
16
22
  import { createPieLogger, isGlobalDebugEnabled } from "../pie/logger.js";
@@ -47,6 +53,7 @@
47
53
  // Authoring mode props
48
54
  mode = "view" as "view" | "author",
49
55
  configuration = {} as Record<string, any>,
56
+ authoringBackend = "demo" as "demo" | "required",
50
57
  // Toolkit service integration (optional)
51
58
  ttsService = null,
52
59
  toolCoordinator = null,
@@ -75,6 +82,7 @@
75
82
  // Authoring mode props
76
83
  mode?: "view" | "author";
77
84
  configuration?: Record<string, any>;
85
+ authoringBackend?: "demo" | "required";
78
86
  // Toolkit service integration
79
87
  ttsService?: any;
80
88
  toolCoordinator?: any;
@@ -96,6 +104,8 @@
96
104
 
97
105
  // Asset event manager for authoring mode
98
106
  let assetEventManager: AssetEventManager | null = $state(null);
107
+ let authoringBlockedError: string | null = $state(null);
108
+ let lastReportedAuthoringError: string | null = $state(null);
99
109
 
100
110
  // Transform markup for authoring mode (append -config suffix)
101
111
  function transformMarkupForAuthoring(
@@ -159,6 +169,75 @@
159
169
  dispatchEvent(event);
160
170
  };
161
171
 
172
+ const requiredHandlerNames = [
173
+ "onInsertImage",
174
+ "onDeleteImage",
175
+ "onInsertSound",
176
+ "onDeleteSound",
177
+ ] as const;
178
+
179
+ function reportAuthoringErrorOnce(message: string) {
180
+ if (lastReportedAuthoringError === message) return;
181
+ lastReportedAuthoringError = message;
182
+ logger.error(`[PieItemPlayer] ${message}`);
183
+ dispatch("player-error", {
184
+ code: "AUTHORING_BACKEND_CONFIG_ERROR",
185
+ message,
186
+ });
187
+ }
188
+
189
+ function buildEffectiveAuthoringHandlers() {
190
+ if (authoringBackend === "required") {
191
+ const missing: string[] = [];
192
+ if (!onInsertImage) missing.push("onInsertImage");
193
+ if (!onDeleteImage) missing.push("onDeleteImage");
194
+ if (!onInsertSound) missing.push("onInsertSound");
195
+ if (!onDeleteSound) missing.push("onDeleteSound");
196
+
197
+ if (missing.length > 0) {
198
+ const message = `Authoring backend is required but missing handlers: ${missing.join(", ")}. Provide all ${requiredHandlerNames.join(", ")} callbacks.`;
199
+ authoringBlockedError = message;
200
+ reportAuthoringErrorOnce(message);
201
+ return null;
202
+ }
203
+
204
+ return {
205
+ onInsertImage: onInsertImage!,
206
+ onDeleteImage: onDeleteImage!,
207
+ onInsertSound: onInsertSound!,
208
+ onDeleteSound: onDeleteSound!,
209
+ };
210
+ }
211
+
212
+ if (
213
+ onInsertImage ||
214
+ onDeleteImage ||
215
+ onInsertSound ||
216
+ onDeleteSound
217
+ ) {
218
+ return {
219
+ onInsertImage,
220
+ onDeleteImage,
221
+ onInsertSound,
222
+ onDeleteSound,
223
+ };
224
+ }
225
+
226
+ logger.warn(
227
+ "[PieItemPlayer] Authoring backend mode is 'demo'. Using non-production media handlers.",
228
+ );
229
+ return {
230
+ onInsertImage: createDefaultImageInsertHandler((src) => {
231
+ logger.debug("[PieItemPlayer] Demo image insert completed:", src);
232
+ }),
233
+ onDeleteImage: createDefaultImageDeleteHandler(),
234
+ onInsertSound: createDefaultSoundInsertHandler((src) => {
235
+ logger.debug("[PieItemPlayer] Demo sound insert completed:", src);
236
+ }),
237
+ onDeleteSound: createDefaultSoundDeleteHandler(),
238
+ };
239
+ }
240
+
162
241
  // Populate session with correct responses when addCorrectResponse is true
163
242
  async function populateCorrectResponses(force = false) {
164
243
  // Early return checks
@@ -287,10 +366,19 @@
287
366
 
288
367
  // Flag to prevent infinite loop when re-dispatching events
289
368
  let isDispatching = $state(false);
369
+ let lastDispatchedSessionDetailSignature = $state("");
290
370
 
291
371
  // Root element reference for resource monitor
292
372
  let rootElement: HTMLElement | null = $state(null);
293
373
 
374
+ function getSessionSignature(): string {
375
+ try {
376
+ return JSON.stringify(session ?? []);
377
+ } catch {
378
+ return String(session ?? "");
379
+ }
380
+ }
381
+
294
382
  // Resource monitor (handles initialization and cleanup automatically)
295
383
  const resourceMonitor = useResourceMonitor(
296
384
  () => rootElement,
@@ -329,6 +417,12 @@
329
417
  if (mode === "author") {
330
418
  // AUTHORING MODE: Initialize configure elements
331
419
  logger.debug("[PieItemPlayer] Initializing in authoring mode");
420
+ authoringBlockedError = null;
421
+ const effectiveHandlers = buildEffectiveAuthoringHandlers();
422
+ if (authoringBlockedError || !effectiveHandlers) {
423
+ initialized = false;
424
+ return;
425
+ }
332
426
 
333
427
  const authoringEnv: AuthoringEnv = {
334
428
  ...env,
@@ -350,17 +444,65 @@
350
444
  );
351
445
  }
352
446
 
353
- // Set up asset event manager if handlers provided
354
- if (
355
- rootElement &&
356
- (onInsertImage || onDeleteImage || onInsertSound || onDeleteSound)
357
- ) {
447
+ if (rootElement && effectiveHandlers) {
358
448
  assetEventManager = new AssetEventManager(
359
449
  rootElement,
360
- onInsertImage,
361
- onDeleteImage,
362
- onInsertSound,
363
- onDeleteSound
450
+ effectiveHandlers.onInsertImage
451
+ ? (handler) => {
452
+ try {
453
+ effectiveHandlers.onInsertImage!(handler);
454
+ } catch (error: any) {
455
+ const err =
456
+ error instanceof Error
457
+ ? error
458
+ : new Error(String(error ?? "Unknown upload error"));
459
+ logger.error("[PieItemPlayer] onInsertImage failed:", err);
460
+ handler.done(err);
461
+ }
462
+ }
463
+ : undefined,
464
+ effectiveHandlers.onDeleteImage
465
+ ? (src, done) => {
466
+ try {
467
+ effectiveHandlers.onDeleteImage!(src, done);
468
+ } catch (error: any) {
469
+ const err =
470
+ error instanceof Error
471
+ ? error
472
+ : new Error(String(error ?? "Unknown delete error"));
473
+ logger.error("[PieItemPlayer] onDeleteImage failed:", err);
474
+ done(err);
475
+ }
476
+ }
477
+ : undefined,
478
+ effectiveHandlers.onInsertSound
479
+ ? (handler) => {
480
+ try {
481
+ effectiveHandlers.onInsertSound!(handler);
482
+ } catch (error: any) {
483
+ const err =
484
+ error instanceof Error
485
+ ? error
486
+ : new Error(String(error ?? "Unknown upload error"));
487
+ logger.error("[PieItemPlayer] onInsertSound failed:", err);
488
+ handler.done(err);
489
+ }
490
+ }
491
+ : undefined,
492
+ effectiveHandlers.onDeleteSound
493
+ ? (src, done) => {
494
+ try {
495
+ effectiveHandlers.onDeleteSound!(src, done);
496
+ } catch (error: any) {
497
+ const err =
498
+ error instanceof Error
499
+ ? error
500
+ : new Error(String(error ?? "Unknown delete error"));
501
+ logger.error("[PieItemPlayer] onDeleteSound failed:", err);
502
+ done(err);
503
+ }
504
+ }
505
+ : undefined
364
506
  );
365
507
  assetEventManager.attach();
366
508
  logger.debug("[PieItemPlayer] Asset event manager attached");
@@ -434,13 +576,20 @@
434
576
  };
435
577
 
436
578
  if (rootElement) {
437
- rootElement.addEventListener("model.updated", handleModelUpdated);
579
+ // Capture phase ensures we receive author updates even when the event
580
+ // does not bubble from nested configure editors.
581
+ rootElement.addEventListener(
582
+ "model.updated",
583
+ handleModelUpdated,
584
+ true
585
+ );
438
586
  sessionListenerAttached = true;
439
587
  detachSessionChangedListener = () => {
440
588
  try {
441
589
  rootElement?.removeEventListener(
442
590
  "model.updated",
443
- handleModelUpdated
591
+ handleModelUpdated,
592
+ true
444
593
  );
445
594
  } catch {}
446
595
  };
@@ -464,16 +613,30 @@
464
613
  customEvent.detail
465
614
  );
466
615
 
616
+ // Forward event detail with the latest in-memory session snapshot.
617
+ // PIE elements often emit metadata-only details, while the actual response
618
+ // array is mutated in-place on the `session` prop.
619
+ const forwardedDetail = {
620
+ ...(customEvent.detail || {}),
621
+ session: { id: "", data: session },
622
+ };
623
+
624
+ // Ignore duplicate payloads that can occur during model wiring.
625
+ let detailSignature = "";
626
+ try {
627
+ detailSignature = JSON.stringify(forwardedDetail);
628
+ } catch {
629
+ detailSignature = String(customEvent.detail);
630
+ }
631
+ if (detailSignature === lastDispatchedSessionDetailSignature) {
632
+ return;
633
+ }
634
+ lastDispatchedSessionDetailSignature = detailSignature;
635
+
467
636
  // Set flag before dispatching
468
637
  isDispatching = true;
469
638
  try {
470
- // Re-dispatch to parent with full session data (not just event detail)
471
- // The event detail only contains metadata like {complete: boolean, component: string}
472
- // The actual session data is in the session array prop (it's already the data array)
473
- dispatch("session-changed", {
474
- ...customEvent.detail,
475
- session: { id: "", data: session },
476
- });
639
+ dispatch("session-changed", forwardedDetail);
477
640
  } finally {
478
641
  // Reset flag after dispatch (use setTimeout to ensure it happens after event propagation)
479
642
  setTimeout(() => {
@@ -581,13 +744,29 @@
581
744
  </script>
582
745
 
583
746
  <div class="pie-item-player" bind:this={rootElement}>
584
- {#if passageMarkup}
747
+ {#if authoringBlockedError}
748
+ <div
749
+ class="pie-player-error"
750
+ style="
751
+ padding: 20px;
752
+ margin: 20px 0;
753
+ border: 2px solid #d32f2f;
754
+ border-radius: 4px;
755
+ background-color: #ffebee;
756
+ color: #c62828;
757
+ font-family: sans-serif;
758
+ "
759
+ >
760
+ <h3 style="margin: 0 0 10px 0">Authoring Backend Configuration Error</h3>
761
+ <p style="margin: 0">{authoringBlockedError}</p>
762
+ </div>
763
+ {:else if passageMarkup}
585
764
  <div class={passageContainerClassFinal}>
586
765
  {@html passageMarkup}
587
766
  </div>
588
767
  {/if}
589
768
 
590
- {#if itemMarkup}
769
+ {#if !authoringBlockedError && itemMarkup}
591
770
  <div class={itemContainerClassFinal}>
592
771
  {@html itemMarkup}
593
772
  </div>
@@ -1,183 +0,0 @@
1
- /**
2
- * TypeScript interfaces for custom PIE elements
3
- *
4
- * These interfaces provide type safety when working with custom elements
5
- * that are defined as Svelte components with customElement option.
6
- */
7
- import type { ItemConfig } from "./index.js";
8
- /**
9
- * PIE IIFE Player custom element interface
10
- *
11
- * @example
12
- * ```typescript
13
- * const player = document.querySelector('pie-iife-player') as PieIifePlayerElement;
14
- * player.config = itemConfig;
15
- * player.session = { id: 'session-1', data: [] };
16
- * ```
17
- */
18
- export interface PieIifePlayerElement extends HTMLElement {
19
- /** PIE item configuration */
20
- config: ItemConfig;
21
- /** Session state containing response data */
22
- session: {
23
- id: string;
24
- data: any[];
25
- };
26
- /** Player environment (mode and role) */
27
- env: {
28
- mode: "gather" | "view" | "evaluate";
29
- role: "student" | "instructor";
30
- };
31
- /**
32
- * Authoring mode toggle (separate from env.mode).
33
- * - view: normal runtime rendering
34
- * - author: loads editor bundles and enables configure/authoring flows
35
- */
36
- mode?: "view" | "author";
37
- /**
38
- * Authoring configuration passed through to PIE elements (e.g. configure settings).
39
- * In authoring mode this typically influences the element's configure UI and emitted
40
- * `model.updated` events.
41
- */
42
- configuration?: Record<string, any>;
43
- /** Debug mode flag */
44
- debug?: boolean;
45
- }
46
- /**
47
- * PIE ESM Player custom element interface
48
- *
49
- * Mirrors the pie-iife-player contract, but loads PIE bundles via native ESM from an ESM CDN.
50
- */
51
- export interface PieEsmPlayerElement extends HTMLElement {
52
- /** PIE item configuration */
53
- config: ItemConfig;
54
- /** Session state containing response data */
55
- session: {
56
- id: string;
57
- data: any[];
58
- };
59
- /** Player environment (mode and role) */
60
- env: {
61
- mode: "gather" | "view" | "evaluate";
62
- role: "student" | "instructor";
63
- };
64
- /** ESM CDN base URL (e.g. https://esm.sh) */
65
- esmCdnUrl?: string;
66
- /** Authoring mode toggle (separate from env.mode). */
67
- mode?: "view" | "author";
68
- /** Authoring configuration passed through to PIE elements. */
69
- configuration?: Record<string, any>;
70
- /** Debug mode flag */
71
- debug?: boolean;
72
- }
73
- /**
74
- * Tool Toolbar custom element interface
75
- */
76
- export interface ToolToolbarElement extends HTMLElement {
77
- /** Comma-separated list of enabled tools */
78
- tools?: string;
79
- /** Whether toolbar is disabled */
80
- disabled?: boolean;
81
- /** Toolbar position */
82
- position?: "top" | "bottom" | "left" | "right";
83
- /** Whether to show tool labels */
84
- "show-labels"?: boolean;
85
- /** Organization ID for tool configuration */
86
- "organization-id"?: string;
87
- /** Base URL for tool resources */
88
- "base-url"?: string;
89
- /** Tool coordinator instance (passed as property, not attribute) */
90
- toolCoordinator?: any;
91
- /** Highlight coordinator instance */
92
- highlightCoordinator?: any;
93
- }
94
- /**
95
- * Base tool element interface
96
- *
97
- * All tool custom elements share these properties
98
- */
99
- export interface BaseToolElement extends HTMLElement {
100
- /** Whether the tool is visible */
101
- visible?: boolean;
102
- /** Unique tool identifier */
103
- "tool-id"?: string;
104
- /** Tool coordinator instance (passed as property) */
105
- coordinator?: any;
106
- }
107
- /**
108
- * Calculator tool element
109
- */
110
- export interface ToolCalculatorElement extends BaseToolElement {
111
- /** Calculator type */
112
- "calculator-type"?: "basic" | "scientific" | "graphing";
113
- }
114
- /**
115
- * Color Scheme tool element
116
- */
117
- export interface ToolColorSchemeElement extends BaseToolElement {
118
- }
119
- /**
120
- * Graph tool element
121
- */
122
- export interface ToolGraphElement extends BaseToolElement {
123
- }
124
- /**
125
- * Periodic Table tool element
126
- */
127
- export interface ToolPeriodicTableElement extends BaseToolElement {
128
- }
129
- /**
130
- * Ruler tool element
131
- */
132
- export interface ToolRulerElement extends BaseToolElement {
133
- /** Initial units (cm or in) */
134
- units?: "cm" | "in";
135
- }
136
- /**
137
- * Protractor tool element
138
- */
139
- export interface ToolProtractorElement extends BaseToolElement {
140
- }
141
- /**
142
- * Line Reader tool element
143
- */
144
- export interface ToolLineReaderElement extends BaseToolElement {
145
- }
146
- /**
147
- * Text-to-Speech tool element
148
- */
149
- export interface ToolTextToSpeechElement extends BaseToolElement {
150
- }
151
- /**
152
- * Answer Eliminator tool element
153
- */
154
- export interface ToolAnswerEliminatorElement extends BaseToolElement {
155
- }
156
- /**
157
- * Helper type to get element interface by tag name
158
- *
159
- * @example
160
- * ```typescript
161
- * const player = document.querySelector('pie-iife-player') as CustomElementByTag<'pie-iife-player'>;
162
- * ```
163
- */
164
- export type CustomElementByTag<T extends string> = T extends "pie-iife-player" ? PieIifePlayerElement : T extends "pie-tool-toolbar" ? ToolToolbarElement : T extends "pie-tool-calculator" ? ToolCalculatorElement : T extends "pie-tool-color-scheme" ? ToolColorSchemeElement : T extends "pie-tool-graph" ? ToolGraphElement : T extends "pie-tool-periodic-table" ? ToolPeriodicTableElement : T extends "pie-tool-ruler" ? ToolRulerElement : T extends "pie-tool-protractor" ? ToolProtractorElement : T extends "pie-tool-line-reader" ? ToolLineReaderElement : T extends "pie-tool-text-to-speech" ? ToolTextToSpeechElement : T extends "pie-tool-answer-eliminator" ? ToolAnswerEliminatorElement : HTMLElement;
165
- /**
166
- * Declare custom elements in global namespace for TypeScript
167
- */
168
- declare global {
169
- interface HTMLElementTagNameMap {
170
- "pie-iife-player": PieIifePlayerElement;
171
- "pie-tool-toolbar": ToolToolbarElement;
172
- "pie-tool-calculator": ToolCalculatorElement;
173
- "pie-tool-color-scheme": ToolColorSchemeElement;
174
- "pie-tool-graph": ToolGraphElement;
175
- "pie-tool-periodic-table": ToolPeriodicTableElement;
176
- "pie-tool-ruler": ToolRulerElement;
177
- "pie-tool-protractor": ToolProtractorElement;
178
- "pie-tool-line-reader": ToolLineReaderElement;
179
- "pie-tool-text-to-speech": ToolTextToSpeechElement;
180
- "pie-tool-answer-eliminator": ToolAnswerEliminatorElement;
181
- }
182
- }
183
- //# sourceMappingURL=custom-elements.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"custom-elements.d.ts","sourceRoot":"","sources":["../../src/types/custom-elements.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- /**
2
- * TypeScript interfaces for custom PIE elements
3
- *
4
- * These interfaces provide type safety when working with custom elements
5
- * that are defined as Svelte components with customElement option.
6
- */
7
- export {};
8
- //# sourceMappingURL=custom-elements.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"custom-elements.js","sourceRoot":"","sources":["../../src/types/custom-elements.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -1,105 +0,0 @@
1
- /**
2
- * Local type definitions for search package types used in client code.
3
- *
4
- * These are copied from @pie-api-aws/search to avoid importing from a server-only package.
5
- * This prevents Vite from trying to process the package and its Node.js dependencies.
6
- *
7
- * Server-side code should import directly from @pie-api-aws/search.
8
- *
9
- * When these types change in the search package, they should be updated here as well.
10
- */
11
- export interface GenerationDebugInfo {
12
- step1: {
13
- prompt: string;
14
- response: string;
15
- parsedIntent: {
16
- subject?: string;
17
- standardSet?: string;
18
- gradeLevels: number[];
19
- keywords: string[];
20
- standardSearchHints: string[];
21
- [key: string]: any;
22
- };
23
- cost?: {
24
- inputTokens: number;
25
- outputTokens: number;
26
- estimatedCost: number;
27
- };
28
- };
29
- step2: {
30
- intent: {
31
- subject?: string;
32
- standardSet?: string;
33
- gradeLevels: number[];
34
- keywords: string[];
35
- standardSearchHints: string[];
36
- [key: string]: any;
37
- };
38
- searchQuery?: {
39
- filters: {
40
- subject?: string;
41
- standardSet?: string;
42
- gradeLevels: number[];
43
- };
44
- keywords: string[];
45
- searchHints: string[];
46
- [key: string]: any;
47
- };
48
- candidatesFound: number;
49
- candidatesEmbedded?: number;
50
- topStandards?: Array<{
51
- guid: string;
52
- title?: string;
53
- score?: number;
54
- similarity?: number;
55
- }>;
56
- topStandardsReturned?: number;
57
- cost?: {
58
- embeddingCalls: number;
59
- estimatedCost: number;
60
- };
61
- };
62
- step3: {
63
- prompt: string;
64
- response: string;
65
- parsedBlueprint: {
66
- name: string;
67
- description?: string;
68
- subject?: string;
69
- standardSet?: string;
70
- gradeLevels: number[];
71
- assessmentGoal?: {
72
- dokDistribution?: {
73
- dok1?: number;
74
- dok2?: number;
75
- dok3?: number;
76
- dok4?: number;
77
- };
78
- totalItemCount?: {
79
- target?: number;
80
- min?: number;
81
- max?: number;
82
- };
83
- [key: string]: any;
84
- };
85
- standards: Array<{
86
- guid: string;
87
- count: number;
88
- rationale?: string;
89
- [key: string]: any;
90
- }>;
91
- [key: string]: any;
92
- };
93
- cost?: {
94
- inputTokens: number;
95
- outputTokens: number;
96
- estimatedCost: number;
97
- };
98
- };
99
- totalCost?: {
100
- llmCalls: number;
101
- embeddingCalls?: number;
102
- estimatedTotalCost: number;
103
- };
104
- }
105
- //# sourceMappingURL=search.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/types/search.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- /**
2
- * Local type definitions for search package types used in client code.
3
- *
4
- * These are copied from @pie-api-aws/search to avoid importing from a server-only package.
5
- * This prevents Vite from trying to process the package and its Node.js dependencies.
6
- *
7
- * Server-side code should import directly from @pie-api-aws/search.
8
- *
9
- * When these types change in the search package, they should be updated here as well.
10
- */
11
- export {};
12
- //# sourceMappingURL=search.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/types/search.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}