@backbay/glia 0.2.0-alpha.6 → 0.2.0-alpha.8

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 (226) hide show
  1. package/dist/audio/index.js +1145 -5
  2. package/dist/audio/index.js.map +1 -1
  3. package/dist/components/index.js +3187 -10
  4. package/dist/components/index.js.map +1 -1
  5. package/dist/core.js +19714 -12
  6. package/dist/core.js.map +1 -1
  7. package/dist/emotion/index.js +1 -1
  8. package/dist/emotion/index.js.map +1 -1
  9. package/dist/hooks/index.js +941 -6
  10. package/dist/hooks/index.js.map +1 -1
  11. package/dist/index.js +31841 -183
  12. package/dist/index.js.map +1 -1
  13. package/dist/primitives/index.js +21111 -57
  14. package/dist/primitives/index.js.map +1 -1
  15. package/dist/protocol/index.js +360 -2
  16. package/dist/protocol/index.js.map +1 -1
  17. package/dist/speakeasy/index.js +2786 -38
  18. package/dist/speakeasy/index.js.map +1 -1
  19. package/dist/styles.css +1 -1
  20. package/dist/theme/index.js +1150 -3
  21. package/dist/theme/index.js.map +1 -1
  22. package/dist/vision/index.js +370 -2
  23. package/dist/vision/index.js.map +1 -1
  24. package/dist/workspace/index.js +16824 -2
  25. package/dist/workspace/index.js.map +1 -1
  26. package/package.json +16 -10
  27. package/dist/AuroraBackground-AP6ZHVFA.js +0 -6
  28. package/dist/AuroraBackground-AP6ZHVFA.js.map +0 -1
  29. package/dist/BentoGrid-CDARICNM.js +0 -6
  30. package/dist/BentoGrid-CDARICNM.js.map +0 -1
  31. package/dist/CommandPalette-JCWJKRBY.js +0 -6
  32. package/dist/CommandPalette-JCWJKRBY.js.map +0 -1
  33. package/dist/Glass-H4X4ZI4P.js +0 -7
  34. package/dist/Glass-H4X4ZI4P.js.map +0 -1
  35. package/dist/GlitchText-KLQ57PPY.js +0 -6
  36. package/dist/GlitchText-KLQ57PPY.js.map +0 -1
  37. package/dist/GlowButton-VGBPMZO7.js +0 -6
  38. package/dist/GlowButton-VGBPMZO7.js.map +0 -1
  39. package/dist/Graph3D-GO7N2EZQ.js +0 -540
  40. package/dist/Graph3D-GO7N2EZQ.js.map +0 -1
  41. package/dist/HUDProgressRing-N6C5NAEV.js +0 -6
  42. package/dist/HUDProgressRing-N6C5NAEV.js.map +0 -1
  43. package/dist/KPIStat-PBQK27ZB.js +0 -6
  44. package/dist/KPIStat-PBQK27ZB.js.map +0 -1
  45. package/dist/NeonToast-W5F7MU3U.js +0 -6
  46. package/dist/NeonToast-W5F7MU3U.js.map +0 -1
  47. package/dist/ParticleField-WK6CNHWU.js +0 -51
  48. package/dist/ParticleField-WK6CNHWU.js.map +0 -1
  49. package/dist/TextGenerateEffect-EUCEIIUJ.js +0 -6
  50. package/dist/TextGenerateEffect-EUCEIIUJ.js.map +0 -1
  51. package/dist/ThreeDCard-VH5I3SSY.js +0 -6
  52. package/dist/ThreeDCard-VH5I3SSY.js.map +0 -1
  53. package/dist/TypingAnimation-GIWOHPIX.js +0 -6
  54. package/dist/TypingAnimation-GIWOHPIX.js.map +0 -1
  55. package/dist/alert-dialog-QOSYBIIE.js +0 -19
  56. package/dist/alert-dialog-QOSYBIIE.js.map +0 -1
  57. package/dist/avatar-N5R37PCU.js +0 -10
  58. package/dist/avatar-N5R37PCU.js.map +0 -1
  59. package/dist/badge-GTVIIGPY.js +0 -8
  60. package/dist/badge-GTVIIGPY.js.map +0 -1
  61. package/dist/button-D7IMSV2D.js +0 -8
  62. package/dist/button-D7IMSV2D.js.map +0 -1
  63. package/dist/chunk-3CMPQOMY.js +0 -69
  64. package/dist/chunk-3CMPQOMY.js.map +0 -1
  65. package/dist/chunk-3OQT6IYR.js +0 -41
  66. package/dist/chunk-3OQT6IYR.js.map +0 -1
  67. package/dist/chunk-43B2WVLS.js +0 -85
  68. package/dist/chunk-43B2WVLS.js.map +0 -1
  69. package/dist/chunk-4SRFO5W3.js +0 -121
  70. package/dist/chunk-4SRFO5W3.js.map +0 -1
  71. package/dist/chunk-5IZELOOU.js +0 -362
  72. package/dist/chunk-5IZELOOU.js.map +0 -1
  73. package/dist/chunk-6DM4ACSS.js +0 -154
  74. package/dist/chunk-6DM4ACSS.js.map +0 -1
  75. package/dist/chunk-6IGT34PC.js +0 -50
  76. package/dist/chunk-6IGT34PC.js.map +0 -1
  77. package/dist/chunk-6RKBCJHN.js +0 -194
  78. package/dist/chunk-6RKBCJHN.js.map +0 -1
  79. package/dist/chunk-6RX2WGCO.js +0 -108
  80. package/dist/chunk-6RX2WGCO.js.map +0 -1
  81. package/dist/chunk-7K4WZM3U.js +0 -189
  82. package/dist/chunk-7K4WZM3U.js.map +0 -1
  83. package/dist/chunk-7MDBHJPT.js +0 -407
  84. package/dist/chunk-7MDBHJPT.js.map +0 -1
  85. package/dist/chunk-7UQD6ROV.js +0 -9
  86. package/dist/chunk-7UQD6ROV.js.map +0 -1
  87. package/dist/chunk-AFNIVLZP.js +0 -1069
  88. package/dist/chunk-AFNIVLZP.js.map +0 -1
  89. package/dist/chunk-ANWYRO6A.js +0 -407
  90. package/dist/chunk-ANWYRO6A.js.map +0 -1
  91. package/dist/chunk-DIXPOHDO.js +0 -71
  92. package/dist/chunk-DIXPOHDO.js.map +0 -1
  93. package/dist/chunk-DWYMKYPI.js +0 -3
  94. package/dist/chunk-DWYMKYPI.js.map +0 -1
  95. package/dist/chunk-E3NVDCZG.js +0 -280
  96. package/dist/chunk-E3NVDCZG.js.map +0 -1
  97. package/dist/chunk-EBM7YBKL.js +0 -399
  98. package/dist/chunk-EBM7YBKL.js.map +0 -1
  99. package/dist/chunk-EPAM7IWW.js +0 -294
  100. package/dist/chunk-EPAM7IWW.js.map +0 -1
  101. package/dist/chunk-EXQ7GYRS.js +0 -134
  102. package/dist/chunk-EXQ7GYRS.js.map +0 -1
  103. package/dist/chunk-F4QTUZ3C.js +0 -136
  104. package/dist/chunk-F4QTUZ3C.js.map +0 -1
  105. package/dist/chunk-FEW533R2.js +0 -105
  106. package/dist/chunk-FEW533R2.js.map +0 -1
  107. package/dist/chunk-FFZLJKC7.js +0 -270
  108. package/dist/chunk-FFZLJKC7.js.map +0 -1
  109. package/dist/chunk-GEAMOBF7.js +0 -8486
  110. package/dist/chunk-GEAMOBF7.js.map +0 -1
  111. package/dist/chunk-GRTRSCTD.js +0 -74
  112. package/dist/chunk-GRTRSCTD.js.map +0 -1
  113. package/dist/chunk-IKGYOGLK.js +0 -16
  114. package/dist/chunk-IKGYOGLK.js.map +0 -1
  115. package/dist/chunk-IQ7WYWVJ.js +0 -73
  116. package/dist/chunk-IQ7WYWVJ.js.map +0 -1
  117. package/dist/chunk-IXIVWQLF.js +0 -543
  118. package/dist/chunk-IXIVWQLF.js.map +0 -1
  119. package/dist/chunk-JCJU57RC.js +0 -115
  120. package/dist/chunk-JCJU57RC.js.map +0 -1
  121. package/dist/chunk-KORSTBU4.js +0 -117
  122. package/dist/chunk-KORSTBU4.js.map +0 -1
  123. package/dist/chunk-KSEZ6UM2.js +0 -235
  124. package/dist/chunk-KSEZ6UM2.js.map +0 -1
  125. package/dist/chunk-MHPF7R3O.js +0 -1376
  126. package/dist/chunk-MHPF7R3O.js.map +0 -1
  127. package/dist/chunk-MPC5IH7E.js +0 -81
  128. package/dist/chunk-MPC5IH7E.js.map +0 -1
  129. package/dist/chunk-MQIU2NYA.js +0 -114
  130. package/dist/chunk-MQIU2NYA.js.map +0 -1
  131. package/dist/chunk-NYMBJOGR.js +0 -2192
  132. package/dist/chunk-NYMBJOGR.js.map +0 -1
  133. package/dist/chunk-OBZD2M3C.js +0 -169
  134. package/dist/chunk-OBZD2M3C.js.map +0 -1
  135. package/dist/chunk-ODM2AG6G.js +0 -176
  136. package/dist/chunk-ODM2AG6G.js.map +0 -1
  137. package/dist/chunk-ONDKF5LP.js +0 -53
  138. package/dist/chunk-ONDKF5LP.js.map +0 -1
  139. package/dist/chunk-P25YCWQB.js +0 -41
  140. package/dist/chunk-P25YCWQB.js.map +0 -1
  141. package/dist/chunk-PFYVNM6H.js +0 -14
  142. package/dist/chunk-PFYVNM6H.js.map +0 -1
  143. package/dist/chunk-PWNNSGFL.js +0 -20
  144. package/dist/chunk-PWNNSGFL.js.map +0 -1
  145. package/dist/chunk-Q2PGZVOT.js +0 -36
  146. package/dist/chunk-Q2PGZVOT.js.map +0 -1
  147. package/dist/chunk-Q2XDMV7U.js +0 -76
  148. package/dist/chunk-Q2XDMV7U.js.map +0 -1
  149. package/dist/chunk-QG7FH2FI.js +0 -45
  150. package/dist/chunk-QG7FH2FI.js.map +0 -1
  151. package/dist/chunk-R7HUOK2D.js +0 -1914
  152. package/dist/chunk-R7HUOK2D.js.map +0 -1
  153. package/dist/chunk-REUYY7G5.js +0 -773
  154. package/dist/chunk-REUYY7G5.js.map +0 -1
  155. package/dist/chunk-RHC2Z2HT.js +0 -199
  156. package/dist/chunk-RHC2Z2HT.js.map +0 -1
  157. package/dist/chunk-RMCVLIFE.js +0 -23
  158. package/dist/chunk-RMCVLIFE.js.map +0 -1
  159. package/dist/chunk-ROZLTXGR.js +0 -234
  160. package/dist/chunk-ROZLTXGR.js.map +0 -1
  161. package/dist/chunk-RSS2C2O3.js +0 -17
  162. package/dist/chunk-RSS2C2O3.js.map +0 -1
  163. package/dist/chunk-SAGCG5SH.js +0 -355
  164. package/dist/chunk-SAGCG5SH.js.map +0 -1
  165. package/dist/chunk-TM6AOUSD.js +0 -40
  166. package/dist/chunk-TM6AOUSD.js.map +0 -1
  167. package/dist/chunk-TPK4BYCO.js +0 -970
  168. package/dist/chunk-TPK4BYCO.js.map +0 -1
  169. package/dist/chunk-UNQIL4K2.js +0 -34
  170. package/dist/chunk-UNQIL4K2.js.map +0 -1
  171. package/dist/chunk-UUG6L75Y.js +0 -47
  172. package/dist/chunk-UUG6L75Y.js.map +0 -1
  173. package/dist/chunk-V2SYMV4W.js +0 -114
  174. package/dist/chunk-V2SYMV4W.js.map +0 -1
  175. package/dist/chunk-V7EN5CTH.js +0 -130
  176. package/dist/chunk-V7EN5CTH.js.map +0 -1
  177. package/dist/chunk-VITKG2HL.js +0 -1125
  178. package/dist/chunk-VITKG2HL.js.map +0 -1
  179. package/dist/chunk-VYEWU5LO.js +0 -2631
  180. package/dist/chunk-VYEWU5LO.js.map +0 -1
  181. package/dist/chunk-W67QAGSH.js +0 -178
  182. package/dist/chunk-W67QAGSH.js.map +0 -1
  183. package/dist/chunk-WWBIN6KV.js +0 -1353
  184. package/dist/chunk-WWBIN6KV.js.map +0 -1
  185. package/dist/chunk-X77Z4PFB.js +0 -224
  186. package/dist/chunk-X77Z4PFB.js.map +0 -1
  187. package/dist/chunk-X7VG7OTT.js +0 -8
  188. package/dist/chunk-X7VG7OTT.js.map +0 -1
  189. package/dist/chunk-XE4K2SGI.js +0 -74
  190. package/dist/chunk-XE4K2SGI.js.map +0 -1
  191. package/dist/chunk-YIUG7IJK.js +0 -628
  192. package/dist/chunk-YIUG7IJK.js.map +0 -1
  193. package/dist/chunk-YNVN3V4Y.js +0 -13
  194. package/dist/chunk-YNVN3V4Y.js.map +0 -1
  195. package/dist/chunk-Z2S54IZX.js +0 -198
  196. package/dist/chunk-Z2S54IZX.js.map +0 -1
  197. package/dist/chunk-ZR6AH25Z.js +0 -17
  198. package/dist/chunk-ZR6AH25Z.js.map +0 -1
  199. package/dist/dialog-SPM3DTTI.js +0 -17
  200. package/dist/dialog-SPM3DTTI.js.map +0 -1
  201. package/dist/dropdown-menu-HMTWKWGK.js +0 -21
  202. package/dist/dropdown-menu-HMTWKWGK.js.map +0 -1
  203. package/dist/input-BH4P4S26.js +0 -6
  204. package/dist/input-BH4P4S26.js.map +0 -1
  205. package/dist/label-5Z4Q6VER.js +0 -8
  206. package/dist/label-5Z4Q6VER.js.map +0 -1
  207. package/dist/popover-IFOUXYLI.js +0 -18
  208. package/dist/popover-IFOUXYLI.js.map +0 -1
  209. package/dist/scroll-area-DJXNW6QX.js +0 -14
  210. package/dist/scroll-area-DJXNW6QX.js.map +0 -1
  211. package/dist/select-FZ277C3G.js +0 -22
  212. package/dist/select-FZ277C3G.js.map +0 -1
  213. package/dist/separator-BTMLN4NB.js +0 -8
  214. package/dist/separator-BTMLN4NB.js.map +0 -1
  215. package/dist/skeleton-DXIWBH4W.js +0 -6
  216. package/dist/skeleton-DXIWBH4W.js.map +0 -1
  217. package/dist/switch-4MCXIZBY.js +0 -13
  218. package/dist/switch-4MCXIZBY.js.map +0 -1
  219. package/dist/tabs-O7AW3APK.js +0 -17
  220. package/dist/tabs-O7AW3APK.js.map +0 -1
  221. package/dist/textarea-IB5WAFDO.js +0 -6
  222. package/dist/textarea-IB5WAFDO.js.map +0 -1
  223. package/dist/toggle-XVPPG6P4.js +0 -10
  224. package/dist/toggle-XVPPG6P4.js.map +0 -1
  225. package/dist/tooltip-JICZTD4F.js +0 -18
  226. package/dist/tooltip-JICZTD4F.js.map +0 -1
@@ -1,970 +0,0 @@
1
- import { useRunStream } from './chunk-Z2S54IZX.js';
2
- export * from '@backbay/glia-agent/audio';
3
- import { useRef, useEffect, useCallback, useState, useMemo } from 'react';
4
- import { z } from 'zod';
5
-
6
- var DEFAULT_RUN_SPEECH_CUES = {
7
- onStart: "hold",
8
- onComplete: "done",
9
- onFail: "error",
10
- onCancel: "warning"
11
- };
12
- function useRunSpeechCues(options) {
13
- const { runId, enabled = true, emit, cues, cooldownMs = 800 } = options;
14
- const { status } = useRunStream(runId);
15
- const prevStatusRef = useRef(null);
16
- const lastEmitAtRef = useRef(0);
17
- useEffect(() => {
18
- if (!enabled) return;
19
- if (!runId) return;
20
- const prev = prevStatusRef.current;
21
- prevStatusRef.current = status;
22
- if (prev === status) return;
23
- const now = Date.now();
24
- if (now - lastEmitAtRef.current < cooldownMs) return;
25
- const cueMap = { ...DEFAULT_RUN_SPEECH_CUES, ...cues ?? {} };
26
- let token = null;
27
- if (status === "running") token = cueMap.onStart;
28
- if (status === "completed") token = cueMap.onComplete;
29
- if (status === "failed") token = cueMap.onFail;
30
- if (status === "cancelled") token = cueMap.onCancel;
31
- if (!token) return;
32
- lastEmitAtRef.current = now;
33
- void emit(token, { runId, status });
34
- }, [enabled, runId, status, emit, cues, cooldownMs]);
35
- }
36
-
37
- // src/cognition/types.ts
38
- function clamp01(value) {
39
- return Math.max(0, Math.min(1, value));
40
- }
41
- var DEFAULT_AVO = { arousal: 0.25, valence: 0.6, openness: 0.35 };
42
- function createInitialCognitionState(overrides) {
43
- return {
44
- mode: "idle",
45
- attention: 0.3,
46
- workload: 0,
47
- timePressure: 0,
48
- planDrift: 0,
49
- costPressure: 0,
50
- risk: 0,
51
- uncertainty: 0.2,
52
- confidence: 0.8,
53
- errorStress: 0,
54
- personaAnchor: 1,
55
- personaDriftRisk: 0,
56
- moodAVO: { ...DEFAULT_AVO },
57
- emotionAVO: { ...DEFAULT_AVO },
58
- ...overrides
59
- };
60
- }
61
-
62
- // src/cognition/reducers.ts
63
- var MODE_TRANSITION_MAP = {
64
- "ui.input_received": "listening",
65
- "ui.user_idle": "idle",
66
- "ui.interrupt": "listening",
67
- "run.started": "deliberating",
68
- "run.completed": "idle",
69
- "run.event": "deliberating"
70
- };
71
- function reduceSignals(state, signals) {
72
- return {
73
- ...state,
74
- attention: signals.attention !== void 0 ? clamp01(signals.attention) : state.attention,
75
- workload: signals.workload !== void 0 ? clamp01(signals.workload) : state.workload,
76
- risk: signals.risk !== void 0 ? clamp01(signals.risk) : state.risk,
77
- timePressure: signals.timePressure !== void 0 ? clamp01(signals.timePressure) : state.timePressure,
78
- errorStress: signals.errorStress !== void 0 ? clamp01(signals.errorStress) : state.errorStress,
79
- planDrift: signals.planDrift !== void 0 ? clamp01(signals.planDrift) : state.planDrift,
80
- costPressure: signals.costPressure !== void 0 ? clamp01(signals.costPressure) : state.costPressure,
81
- uncertainty: signals.uncertainty !== void 0 ? clamp01(signals.uncertainty) : state.uncertainty,
82
- confidence: signals.confidence !== void 0 ? clamp01(signals.confidence) : state.confidence
83
- };
84
- }
85
- function reduceDynamicsUpdate(state, dynamics) {
86
- return {
87
- ...state,
88
- dynamics
89
- };
90
- }
91
- function reducePolicyUpdate(state, policy, personality) {
92
- return {
93
- ...state,
94
- policy: policy ?? state.policy,
95
- personality: personality ?? state.personality
96
- };
97
- }
98
- function reduceModeTransition(state, event) {
99
- const trigger = event.type;
100
- const newMode = MODE_TRANSITION_MAP[trigger];
101
- if (!newMode) {
102
- return state;
103
- }
104
- let focusRunId = state.focusRunId;
105
- let errorStress = state.errorStress;
106
- let mode = newMode;
107
- if (event.type === "run.started") {
108
- focusRunId = event.runId;
109
- } else if (event.type === "run.completed") {
110
- focusRunId = void 0;
111
- if (!event.success) {
112
- errorStress = clamp01(state.errorStress + 0.2);
113
- mode = "recovering";
114
- }
115
- } else if (event.type === "run.event") {
116
- focusRunId = event.runId;
117
- }
118
- return {
119
- ...state,
120
- mode,
121
- focusRunId,
122
- errorStress
123
- };
124
- }
125
- function reduceDecay(state, deltaMs) {
126
- const deltaSec = deltaMs / 1e3;
127
- const errorStress = clamp01(
128
- state.errorStress * Math.exp(-0.1 * deltaSec)
129
- );
130
- const timePressure = clamp01(
131
- state.timePressure * Math.exp(-0.05 * deltaSec)
132
- );
133
- const planDrift = clamp01(
134
- state.planDrift * Math.exp(-0.08 * deltaSec)
135
- );
136
- return {
137
- ...state,
138
- errorStress,
139
- timePressure,
140
- planDrift
141
- };
142
- }
143
- function reduceEvent(state, event) {
144
- switch (event.type) {
145
- case "signals.update":
146
- return reduceSignals(state, event.signals);
147
- case "intensity.update":
148
- return reduceSignals(state, event.values);
149
- case "dynamics.update":
150
- return reduceDynamicsUpdate(state, event.dynamics);
151
- case "policy.update":
152
- return reducePolicyUpdate(state, event.policy, event.personality);
153
- case "tick":
154
- return reduceDecay(state, event.deltaMs);
155
- case "ui.input_received":
156
- case "ui.user_idle":
157
- case "ui.interrupt":
158
- case "run.started":
159
- case "run.completed":
160
- case "run.event":
161
- return reduceModeTransition(state, event);
162
- case "text.user_message": {
163
- const categories = event.categories ?? [];
164
- const driftRisk = categories.includes("meta_reflection") ? 0.3 : categories.includes("vulnerable_disclosure") ? 0.4 : 0;
165
- const newPersonaDriftRisk = clamp01(
166
- state.personaDriftRisk * 0.7 + driftRisk * 0.3
167
- );
168
- return {
169
- ...state,
170
- mode: "listening",
171
- personaDriftRisk: newPersonaDriftRisk
172
- };
173
- }
174
- default: {
175
- return state;
176
- }
177
- }
178
- }
179
-
180
- // src/cognition/controller.ts
181
- var MODE_TO_ANCHOR = {
182
- idle: "idle",
183
- listening: "listening",
184
- deliberating: "thinking",
185
- acting: "focused",
186
- explaining: "explaining",
187
- recovering: "recovering",
188
- blocked: "concerned"
189
- };
190
- var MODE_TO_AVO = {
191
- idle: { arousal: 0.25, valence: 0.6, openness: 0.35 },
192
- listening: { arousal: 0.45, valence: 0.7, openness: 0.05 },
193
- deliberating: { arousal: 0.6, valence: 0.6, openness: 0.4 },
194
- acting: { arousal: 0.7, valence: 0.7, openness: 0.5 },
195
- explaining: { arousal: 0.55, valence: 0.8, openness: 0.85 },
196
- recovering: { arousal: 0.4, valence: 0.45, openness: 0.4 },
197
- blocked: { arousal: 0.55, valence: 0.3, openness: 0.3 }
198
- };
199
- var CognitionController = class {
200
- _state;
201
- _listeners = /* @__PURE__ */ new Map();
202
- _disposed = false;
203
- constructor(options = {}) {
204
- this._state = createInitialCognitionState(options.initial);
205
- }
206
- /**
207
- * Get current cognition state
208
- */
209
- getState() {
210
- return { ...this._state };
211
- }
212
- /**
213
- * Get the emotion target for the current cognitive state
214
- * Returns anchor state and AVO values adjusted by signals
215
- */
216
- getEmotionTarget() {
217
- const anchor = MODE_TO_ANCHOR[this._state.mode];
218
- const baseAVO = MODE_TO_AVO[this._state.mode];
219
- const avo = this._adjustAVOBySignals(baseAVO);
220
- return { anchor, avo };
221
- }
222
- /**
223
- * Get emotion bridge - derives anchor and AVO from cognitive state
224
- * @deprecated Use getEmotionTarget() instead
225
- */
226
- getEmotionBridge() {
227
- const target = this.getEmotionTarget();
228
- return { anchor: target.anchor, avo: target.avo };
229
- }
230
- /**
231
- * Handle a cognition event and update state
232
- */
233
- handleEvent(event) {
234
- if (this._disposed) return;
235
- const prevMode = this._state.mode;
236
- this._state = reduceEvent(this._state, event);
237
- if (this._state.mode !== prevMode) {
238
- this._emitEvent("modeChange", { from: prevMode, to: this._state.mode });
239
- }
240
- this._emitEvent("change", this._state);
241
- }
242
- /**
243
- * Process an event and update state
244
- * @deprecated Use handleEvent() instead
245
- */
246
- emit(event) {
247
- this.handleEvent(event);
248
- }
249
- /**
250
- * Update tick - call each frame with delta time in milliseconds
251
- * Applies time-based decay to stress signals
252
- */
253
- tick(deltaMs) {
254
- if (this._disposed) return;
255
- const prevState = this._state;
256
- this._state = reduceDecay(this._state, deltaMs);
257
- if (prevState.errorStress !== this._state.errorStress || prevState.timePressure !== this._state.timePressure || prevState.planDrift !== this._state.planDrift) {
258
- this._emitEvent("change", this._state);
259
- }
260
- }
261
- /**
262
- * Subscribe to controller events
263
- * Returns unsubscribe function
264
- */
265
- on(event, handler) {
266
- if (!this._listeners.has(event)) {
267
- this._listeners.set(event, /* @__PURE__ */ new Set());
268
- }
269
- this._listeners.get(event).add(handler);
270
- return () => {
271
- this._listeners.get(event)?.delete(handler);
272
- };
273
- }
274
- /**
275
- * Dispose controller and clean up resources
276
- */
277
- dispose() {
278
- this._disposed = true;
279
- this._listeners.clear();
280
- }
281
- /**
282
- * Adjust AVO values based on current signal levels
283
- */
284
- _adjustAVOBySignals(baseAVO) {
285
- const { errorStress, workload, timePressure, uncertainty, confidence, personaDriftRisk } = this._state;
286
- const arousalBoost = workload * 0.2 + timePressure * 0.15 + errorStress * 0.1;
287
- const valenceDrops = errorStress * 0.3 + uncertainty * 0.15;
288
- const valenceBoost = (confidence - 0.5) * 0.2;
289
- const opennessDrop = personaDriftRisk * 0.3;
290
- return {
291
- arousal: Math.max(0, Math.min(1, baseAVO.arousal + arousalBoost)),
292
- valence: Math.max(0, Math.min(1, baseAVO.valence - valenceDrops + valenceBoost)),
293
- openness: Math.max(0, Math.min(1, baseAVO.openness - opennessDrop))
294
- };
295
- }
296
- _emitEvent(event, data) {
297
- this._listeners.get(event)?.forEach((handler) => handler(data));
298
- }
299
- };
300
-
301
- // src/cognition/hooks/useCognition.ts
302
- function useCognition(options = {}) {
303
- const { initial, onChange, autoTick = true } = options;
304
- const controllerRef = useRef(null);
305
- if (!controllerRef.current) {
306
- controllerRef.current = new CognitionController({ initial });
307
- }
308
- const controller = controllerRef.current;
309
- const [state, setState] = useState(controller.getState());
310
- const [emotion, setEmotion] = useState(
311
- controller.getEmotionTarget()
312
- );
313
- const onChangeRef = useRef(onChange);
314
- onChangeRef.current = onChange;
315
- useEffect(() => {
316
- const unsub = controller.on("change", (newState) => {
317
- setState({ ...newState });
318
- setEmotion(controller.getEmotionTarget());
319
- onChangeRef.current?.(newState);
320
- });
321
- return () => {
322
- unsub();
323
- };
324
- }, [controller]);
325
- useEffect(() => {
326
- if (!autoTick) return;
327
- let lastTime = performance.now();
328
- let rafId;
329
- const tickFn = (time) => {
330
- const delta = time - lastTime;
331
- lastTime = time;
332
- controller.tick(delta);
333
- rafId = requestAnimationFrame(tickFn);
334
- };
335
- rafId = requestAnimationFrame(tickFn);
336
- return () => {
337
- cancelAnimationFrame(rafId);
338
- };
339
- }, [controller, autoTick]);
340
- useEffect(() => {
341
- return () => {
342
- controller.dispose();
343
- };
344
- }, [controller]);
345
- const handleEvent = useCallback(
346
- (event) => {
347
- controller.handleEvent(event);
348
- },
349
- [controller]
350
- );
351
- const tick = useCallback(
352
- (deltaMs) => {
353
- controller.tick(deltaMs);
354
- },
355
- [controller]
356
- );
357
- const emit = handleEvent;
358
- return {
359
- state,
360
- emotion,
361
- handleEvent,
362
- tick,
363
- emit
364
- };
365
- }
366
-
367
- // src/audio/types.ts
368
- var DEFAULT_TARGET_AVO = {
369
- // Match the emotion system's "idle" anchor for a stable neutral baseline.
370
- arousal: 0.25,
371
- valence: 0.6,
372
- openness: 0.35
373
- };
374
- function clamp012(value) {
375
- return Math.max(0, Math.min(1, value));
376
- }
377
- function createTraceId() {
378
- if (typeof crypto !== "undefined" && "randomUUID" in crypto) {
379
- return crypto.randomUUID();
380
- }
381
- return `trace_${Date.now()}_${Math.random().toString(16).slice(2)}`;
382
- }
383
-
384
- // src/audio/planner.ts
385
- function pickFirstAllowedVoiceId(voices, allowedVoiceIds) {
386
- const list = voices.list();
387
- for (const entry of list) {
388
- if (!allowedVoiceIds || allowedVoiceIds.includes(entry.voiceId)) {
389
- return entry.voiceId;
390
- }
391
- }
392
- return null;
393
- }
394
- function pickVoiceId(args) {
395
- const { voices, allowedVoiceIds, preferredVoiceId, requiredTag } = args;
396
- if (preferredVoiceId) {
397
- const entry = voices.get(preferredVoiceId);
398
- if (entry && (!allowedVoiceIds || allowedVoiceIds.includes(entry.voiceId))) {
399
- if (!requiredTag || (entry.tags ?? []).includes(requiredTag)) {
400
- return entry.voiceId;
401
- }
402
- }
403
- }
404
- for (const entry of voices.list()) {
405
- if (allowedVoiceIds && !allowedVoiceIds.includes(entry.voiceId)) continue;
406
- if (requiredTag && !(entry.tags ?? []).includes(requiredTag)) continue;
407
- return entry.voiceId;
408
- }
409
- return null;
410
- }
411
- function stripExcessPunctuation(text) {
412
- return text.replace(/[!?]{2,}/g, (m) => m[0] ?? "!").replace(/\.{3,}/g, "\u2026");
413
- }
414
- function clampTextForSafetyMode(text) {
415
- return stripExcessPunctuation(text).replace(/!/g, ".");
416
- }
417
- function planSpeech(input) {
418
- const {
419
- text,
420
- language,
421
- runId,
422
- targetAffect,
423
- policy,
424
- voices,
425
- signals,
426
- defaults
427
- } = input;
428
- const personaDriftRisk = clamp012(signals?.personaDriftRisk ?? 0);
429
- const confidence = clamp012(signals?.confidence ?? 0.8);
430
- const risk = clamp012(signals?.risk ?? 1 - confidence);
431
- const groundedVoiceTag = defaults?.groundedVoiceTag ?? "grounded";
432
- const defaultVoiceTag = defaults?.defaultVoiceTag ?? "default";
433
- const requireGrounded = policy.safetyMode || personaDriftRisk >= 0.6 || risk >= 0.7 && confidence <= 0.5;
434
- const voiceId = (requireGrounded ? pickVoiceId({
435
- voices,
436
- allowedVoiceIds: policy.allowedVoiceIds,
437
- preferredVoiceId: defaults?.voiceId,
438
- requiredTag: groundedVoiceTag
439
- }) : pickVoiceId({
440
- voices,
441
- allowedVoiceIds: policy.allowedVoiceIds,
442
- preferredVoiceId: defaults?.voiceId,
443
- requiredTag: defaultVoiceTag
444
- })) ?? pickVoiceId({
445
- voices,
446
- allowedVoiceIds: policy.allowedVoiceIds,
447
- preferredVoiceId: defaults?.voiceId
448
- }) ?? pickFirstAllowedVoiceId(voices, policy.allowedVoiceIds);
449
- if (!voiceId) {
450
- throw new Error("No available voices (voice catalog is empty or policy blocks all voices)");
451
- }
452
- const baseTemperature = clamp012(defaults?.temperature ?? 0.65);
453
- const temperature = requireGrounded ? Math.min(baseTemperature, 0.25) : baseTemperature;
454
- const controls = {
455
- temperature
456
- };
457
- const plannedText = policy.safetyMode || personaDriftRisk >= 0.7 ? clampTextForSafetyMode(text) : stripExcessPunctuation(text);
458
- return {
459
- traceId: createTraceId(),
460
- runId,
461
- text: plannedText,
462
- language,
463
- voiceId,
464
- targetAffect: targetAffect ?? DEFAULT_TARGET_AVO,
465
- controls,
466
- policy: {
467
- safetyMode: policy.safetyMode,
468
- trustTier: policy.trustTier,
469
- voiceCloningAllowed: policy.voiceCloningAllowed
470
- }
471
- };
472
- }
473
- function planSpeechFromCognition(input) {
474
- const { cognition, ...rest } = input;
475
- const signals = {
476
- mode: cognition.mode,
477
- personaDriftRisk: cognition.personaDriftRisk,
478
- confidence: cognition.confidence,
479
- risk: cognition.risk
480
- };
481
- const targetAffect = rest.targetAffect ?? cognition.emotionAVO;
482
- return planSpeech({
483
- ...rest,
484
- targetAffect,
485
- signals
486
- });
487
- }
488
- var AudioProofVersionSchema = z.enum(["1.0"]);
489
- var AudioFormatSchema = z.enum(["wav", "pcm_s16le", "opus", "mp3", "flac"]);
490
- var VoiceLicenseCategorySchema = z.enum(["cc0", "cc-by", "cc-by-nc", "custom", "unknown"]);
491
- var AvoSchema = z.object({
492
- valence: z.number().min(0).max(1),
493
- arousal: z.number().min(0).max(1),
494
- openness: z.number().min(0).max(1)
495
- });
496
- var AudioArtifactSchema = z.object({
497
- id: z.string().min(1),
498
- uri: z.string().optional(),
499
- format: AudioFormatSchema,
500
- sha256: z.string().min(32),
501
- sampleRateHz: z.number().int().min(8e3).optional(),
502
- channels: z.number().int().min(1).max(8).optional(),
503
- durationMs: z.number().int().min(1)
504
- });
505
- var AudioGateResultSchema = z.object({
506
- passed: z.boolean(),
507
- metrics: z.record(z.string(), z.unknown()).optional(),
508
- reason: z.string().optional()
509
- });
510
- var AudioGatesSchema = z.object({
511
- quality: AudioGateResultSchema,
512
- semantic: AudioGateResultSchema,
513
- affect: AudioGateResultSchema,
514
- multimodalConsistency: AudioGateResultSchema.optional(),
515
- watermark: AudioGateResultSchema.optional(),
516
- speakerConsistency: AudioGateResultSchema.optional(),
517
- antiSpoof: AudioGateResultSchema.optional(),
518
- mos: AudioGateResultSchema.optional(),
519
- safetyText: AudioGateResultSchema.optional(),
520
- safetyAudio: AudioGateResultSchema.optional()
521
- });
522
- var EvidenceRefSchema = z.object({
523
- type: z.enum(["run", "run_receipt", "artifact", "ui"]),
524
- runId: z.string().optional(),
525
- receiptHash: z.string().optional(),
526
- path: z.string().optional(),
527
- digest: z.string().optional(),
528
- componentId: z.string().optional(),
529
- note: z.string().optional()
530
- });
531
- var AudioProofSchema = z.object({
532
- version: AudioProofVersionSchema,
533
- createdAt: z.string().datetime(),
534
- manifest: z.object({
535
- traceId: z.string().optional(),
536
- runId: z.string().optional(),
537
- text: z.string().min(1),
538
- language: z.string().optional(),
539
- targetAffect: AvoSchema,
540
- policy: z.object({
541
- safetyMode: z.boolean(),
542
- trustTier: z.string().optional(),
543
- voiceCloningAllowed: z.boolean()
544
- }),
545
- cognitionSnapshot: z.record(z.string(), z.unknown()).optional()
546
- }),
547
- proof: z.object({
548
- synthesis: z.object({
549
- providerId: z.string().min(1),
550
- model: z.object({
551
- id: z.string().min(1),
552
- revision: z.string().optional(),
553
- sha256: z.string().optional()
554
- }),
555
- voice: z.object({
556
- voiceId: z.string().min(1),
557
- licenseCategory: VoiceLicenseCategorySchema,
558
- licenseText: z.string().optional(),
559
- source: z.string().optional()
560
- }),
561
- controls: z.record(z.string(), z.unknown()).optional(),
562
- seed: z.number().int().min(0).optional()
563
- }),
564
- attempts: z.array(
565
- z.object({
566
- attempt: z.number().int().min(1),
567
- artifactRef: z.string().min(1),
568
- notes: z.string().optional(),
569
- gates: AudioGatesSchema
570
- })
571
- ).optional(),
572
- artifacts: z.array(AudioArtifactSchema).min(1),
573
- gates: AudioGatesSchema,
574
- evidence: z.array(EvidenceRefSchema).optional()
575
- }),
576
- verdict: z.object({
577
- passed: z.boolean(),
578
- reason: z.string().optional(),
579
- score: z.number().optional()
580
- })
581
- });
582
- function validateAudioProof(audioProof) {
583
- const result = AudioProofSchema.safeParse(audioProof);
584
- if (result.success) {
585
- return { success: true, data: result.data };
586
- }
587
- return { success: false, errors: result.error };
588
- }
589
- function useAudioPlayer(options = {}) {
590
- const { volume = 1, onEnded, onError } = options;
591
- const audioRef = useRef(null);
592
- const objectUrlRef = useRef(null);
593
- const [isPlaying, setIsPlaying] = useState(false);
594
- const [error, setError] = useState(null);
595
- if (!audioRef.current && typeof Audio !== "undefined") {
596
- audioRef.current = new Audio();
597
- }
598
- const stop = useCallback(() => {
599
- const audio = audioRef.current;
600
- if (!audio) return;
601
- try {
602
- audio.pause();
603
- audio.currentTime = 0;
604
- } catch {
605
- } finally {
606
- setIsPlaying(false);
607
- }
608
- }, []);
609
- const play = useCallback(
610
- async (source) => {
611
- const audio = audioRef.current;
612
- if (!audio) {
613
- throw new Error("Audio playback not supported in this environment");
614
- }
615
- setError(null);
616
- if (objectUrlRef.current) {
617
- URL.revokeObjectURL(objectUrlRef.current);
618
- objectUrlRef.current = null;
619
- }
620
- const src = typeof source === "string" ? source : URL.createObjectURL(source);
621
- if (typeof source !== "string") {
622
- objectUrlRef.current = src;
623
- }
624
- audio.volume = volume;
625
- audio.src = src;
626
- try {
627
- await audio.play();
628
- setIsPlaying(true);
629
- } catch (err) {
630
- const message = err instanceof Error ? err.message : "Failed to play audio";
631
- setIsPlaying(false);
632
- setError(message);
633
- onError?.(err instanceof Error ? err : new Error(message));
634
- throw err instanceof Error ? err : new Error(message);
635
- }
636
- },
637
- [volume, onError]
638
- );
639
- useEffect(() => {
640
- const audio = audioRef.current;
641
- if (!audio) return;
642
- const handleEnded = () => {
643
- setIsPlaying(false);
644
- onEnded?.();
645
- };
646
- const handleError = () => {
647
- setIsPlaying(false);
648
- const message = "Audio element error";
649
- setError(message);
650
- onError?.(new Error(message));
651
- };
652
- audio.addEventListener("ended", handleEnded);
653
- audio.addEventListener("error", handleError);
654
- return () => {
655
- audio.removeEventListener("ended", handleEnded);
656
- audio.removeEventListener("error", handleError);
657
- };
658
- }, [onEnded, onError]);
659
- useEffect(() => {
660
- return () => {
661
- stop();
662
- if (objectUrlRef.current) {
663
- URL.revokeObjectURL(objectUrlRef.current);
664
- objectUrlRef.current = null;
665
- }
666
- };
667
- }, [stop]);
668
- return {
669
- isPlaying,
670
- error,
671
- play,
672
- stop,
673
- audioElement: audioRef.current
674
- };
675
- }
676
- function useBargeIn(options) {
677
- const { stream, enabled = true, threshold = 0.02, hangoverMs = 250, onBargeIn } = options;
678
- const [isUserSpeaking, setIsUserSpeaking] = useState(false);
679
- const [levelRms, setLevelRms] = useState(0);
680
- const rafRef = useRef(null);
681
- const lastAboveRef = useRef(0);
682
- const prevSpeakingRef = useRef(false);
683
- useEffect(() => {
684
- if (!enabled || !stream) {
685
- setIsUserSpeaking(false);
686
- setLevelRms(0);
687
- return;
688
- }
689
- if (typeof AudioContext === "undefined") {
690
- return;
691
- }
692
- const audioContext = new AudioContext();
693
- const source = audioContext.createMediaStreamSource(stream);
694
- const analyser = audioContext.createAnalyser();
695
- analyser.fftSize = 2048;
696
- source.connect(analyser);
697
- const buffer = new Float32Array(analyser.fftSize);
698
- const tick = () => {
699
- analyser.getFloatTimeDomainData(buffer);
700
- let sum = 0;
701
- for (let i = 0; i < buffer.length; i++) {
702
- const x = buffer[i];
703
- sum += x * x;
704
- }
705
- const rms = Math.sqrt(sum / buffer.length);
706
- setLevelRms(rms);
707
- const now = performance.now();
708
- if (rms >= threshold) {
709
- lastAboveRef.current = now;
710
- }
711
- const speaking = rms >= threshold || now - lastAboveRef.current <= hangoverMs;
712
- setIsUserSpeaking(speaking);
713
- if (!prevSpeakingRef.current && speaking) {
714
- onBargeIn?.();
715
- }
716
- prevSpeakingRef.current = speaking;
717
- rafRef.current = requestAnimationFrame(tick);
718
- };
719
- rafRef.current = requestAnimationFrame(tick);
720
- return () => {
721
- if (rafRef.current) cancelAnimationFrame(rafRef.current);
722
- rafRef.current = null;
723
- try {
724
- source.disconnect();
725
- analyser.disconnect();
726
- } catch {
727
- }
728
- audioContext.close().catch(() => {
729
- });
730
- };
731
- }, [stream, enabled, threshold, hangoverMs, onBargeIn]);
732
- return { isUserSpeaking, levelRms };
733
- }
734
-
735
- // src/audio/hooks/useSpeechSynthesis.ts
736
- function useSpeechSynthesis(options) {
737
- const {
738
- provider,
739
- verifier,
740
- voices,
741
- policy,
742
- signals,
743
- defaults,
744
- bargeIn,
745
- volume = 1,
746
- verificationMode,
747
- onProof,
748
- onBargeIn,
749
- onError
750
- } = options;
751
- const effectiveVerificationMode = useMemo(() => {
752
- if (verificationMode) return verificationMode;
753
- if (policy.requireProofBeforePlayback) return "before_playback";
754
- if (verifier) return "after_playback";
755
- return "never";
756
- }, [verificationMode, policy.requireProofBeforePlayback, verifier]);
757
- const abortRef = useRef(null);
758
- const [isSynthesizing, setIsSynthesizing] = useState(false);
759
- const [error, setError] = useState(null);
760
- const [lastRequest, setLastRequest] = useState(null);
761
- const [lastResult, setLastResult] = useState(null);
762
- const [lastProof, setLastProof] = useState(null);
763
- const player = useAudioPlayer({
764
- volume,
765
- onError: (err) => {
766
- setError(err.message);
767
- onError?.(err);
768
- }
769
- });
770
- const bargeInState = useBargeIn({
771
- stream: bargeIn?.stream ?? null,
772
- enabled: !!bargeIn?.stream,
773
- threshold: bargeIn?.threshold,
774
- hangoverMs: bargeIn?.hangoverMs,
775
- onBargeIn: () => {
776
- onBargeIn?.();
777
- }
778
- });
779
- const cancel = useCallback(() => {
780
- abortRef.current?.abort();
781
- abortRef.current = null;
782
- setIsSynthesizing(false);
783
- player.stop();
784
- }, [player]);
785
- useEffect(() => {
786
- if (!bargeIn?.stream) return;
787
- if (!bargeInState.isUserSpeaking) return;
788
- cancel();
789
- }, [bargeIn?.stream, bargeInState.isUserSpeaking, cancel]);
790
- const speak = useCallback(
791
- async (text, speakOptions) => {
792
- cancel();
793
- setError(null);
794
- setIsSynthesizing(true);
795
- const controller = new AbortController();
796
- abortRef.current = controller;
797
- try {
798
- const request = planSpeech({
799
- text,
800
- language: speakOptions?.language,
801
- runId: speakOptions?.runId,
802
- targetAffect: speakOptions?.targetAffect,
803
- policy,
804
- voices,
805
- signals,
806
- defaults
807
- });
808
- setLastRequest(request);
809
- const result = await provider.synthesizeSpeech(request, { signal: controller.signal });
810
- setLastResult(result);
811
- let proof = result.proof;
812
- if (proof) {
813
- const parsed = validateAudioProof(proof);
814
- if (!parsed.success) {
815
- throw new Error("Provider returned invalid AudioProof");
816
- }
817
- proof = parsed.data;
818
- }
819
- const verifyNow = effectiveVerificationMode === "before_playback" && (!proof || !proof.verdict?.passed) && !!verifier;
820
- if (verifyNow && verifier) {
821
- proof = await verifier.verifySpeech({ request, result, policy });
822
- const parsed = validateAudioProof(proof);
823
- if (!parsed.success) {
824
- throw new Error("Verifier returned invalid AudioProof");
825
- }
826
- proof = parsed.data;
827
- }
828
- if (policy.requireProofBeforePlayback && (!proof || proof.verdict.passed !== true)) {
829
- throw new Error("Playback blocked by policy: missing or failing AudioProof");
830
- }
831
- await player.play(result.audio);
832
- if (effectiveVerificationMode === "after_playback" && verifier && !proof) {
833
- void (async () => {
834
- try {
835
- const p = await verifier.verifySpeech({ request, result, policy });
836
- const parsed = validateAudioProof(p);
837
- if (!parsed.success) return;
838
- setLastProof(parsed.data);
839
- onProof?.(parsed.data);
840
- } catch {
841
- }
842
- })();
843
- }
844
- if (proof) {
845
- setLastProof(proof);
846
- onProof?.(proof);
847
- }
848
- } catch (err) {
849
- const message = err instanceof Error ? err.message : "Speech synthesis failed";
850
- setError(message);
851
- onError?.(err instanceof Error ? err : new Error(message));
852
- throw err instanceof Error ? err : new Error(message);
853
- } finally {
854
- setIsSynthesizing(false);
855
- abortRef.current = null;
856
- }
857
- },
858
- [
859
- cancel,
860
- policy,
861
- voices,
862
- signals,
863
- defaults,
864
- provider,
865
- verifier,
866
- effectiveVerificationMode,
867
- player,
868
- onProof,
869
- onError
870
- ]
871
- );
872
- return {
873
- isSynthesizing,
874
- isSpeaking: player.isPlaying,
875
- error,
876
- lastRequest,
877
- lastResult,
878
- lastProof,
879
- speak,
880
- cancel
881
- };
882
- }
883
-
884
- // src/audio/hooks/useCognitionSpeech.ts
885
- function useCognitionSpeech(options) {
886
- const {
887
- provider,
888
- verifier,
889
- voices,
890
- policy,
891
- volume,
892
- verificationMode,
893
- initialCognition,
894
- autoTick = true,
895
- onCognitionChange,
896
- bargeIn,
897
- defaults,
898
- onProof,
899
- onBargeIn,
900
- onError
901
- } = options;
902
- const cognitionResult = useCognition({
903
- initial: initialCognition,
904
- autoTick,
905
- onChange: onCognitionChange
906
- });
907
- const speechResult = useSpeechSynthesis({
908
- provider,
909
- verifier,
910
- voices,
911
- policy,
912
- volume,
913
- verificationMode,
914
- signals: {
915
- mode: cognitionResult.state.mode,
916
- personaDriftRisk: cognitionResult.state.personaDriftRisk,
917
- confidence: cognitionResult.state.confidence,
918
- risk: cognitionResult.state.risk
919
- },
920
- defaults,
921
- bargeIn,
922
- onProof,
923
- onBargeIn: () => {
924
- cognitionResult.handleEvent({ type: "ui.interrupt" });
925
- onBargeIn?.();
926
- },
927
- onError
928
- });
929
- const speak = useCallback(
930
- async (text, speakOptions) => {
931
- const request = planSpeechFromCognition({
932
- text,
933
- language: speakOptions?.language,
934
- runId: speakOptions?.runId,
935
- targetAffect: speakOptions?.targetAffect,
936
- cognition: cognitionResult.state,
937
- policy,
938
- voices,
939
- defaults
940
- });
941
- await speechResult.speak(text, {
942
- ...speakOptions,
943
- targetAffect: request.targetAffect
944
- });
945
- },
946
- [cognitionResult.state, policy, voices, defaults, speechResult]
947
- );
948
- return {
949
- // Cognition
950
- cognition: cognitionResult.state,
951
- emotion: cognitionResult.emotion,
952
- handleCognition: cognitionResult.handleEvent,
953
- emitCognition: cognitionResult.handleEvent,
954
- // deprecated alias
955
- tickCognition: cognitionResult.tick,
956
- // Speech
957
- isSynthesizing: speechResult.isSynthesizing,
958
- isSpeaking: speechResult.isSpeaking,
959
- error: speechResult.error,
960
- lastRequest: speechResult.lastRequest,
961
- lastResult: speechResult.lastResult,
962
- lastProof: speechResult.lastProof,
963
- speak,
964
- cancel: speechResult.cancel
965
- };
966
- }
967
-
968
- export { DEFAULT_RUN_SPEECH_CUES, useCognitionSpeech, useRunSpeechCues };
969
- //# sourceMappingURL=chunk-TPK4BYCO.js.map
970
- //# sourceMappingURL=chunk-TPK4BYCO.js.map