@hanzo/rooms 0.1.23 → 0.1.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Chat.js +2 -2
- package/dist/Meet.js +3 -3
- package/dist/speech.js +2 -2
- package/package.json +3 -3
package/dist/Chat.js
CHANGED
|
@@ -50,7 +50,7 @@ import { WEB } from "./lib/web.js";
|
|
|
50
50
|
import { useHydrated } from "./lib/hydrated.js";
|
|
51
51
|
import { base, served } from "./lib/ai.js";
|
|
52
52
|
import { onServed } from "./lib/served.js";
|
|
53
|
-
import {
|
|
53
|
+
import { refused as worded, speech, useDictation, useTalk, useVoice, Voice } from "@hanzo/voice";
|
|
54
54
|
import { ArrowUp, AudioLines, Image as ImageMark, Mic, Paperclip, Square, Star, PanelRight, X } from "lucide-react";
|
|
55
55
|
import { ENSO, FREE } from "./lib/ai.js";
|
|
56
56
|
import { openThread, useOpen } from "./open.js";
|
|
@@ -1198,7 +1198,7 @@ function Thread({ placeholder = message(), initial, anonymous = false, heading,
|
|
|
1198
1198
|
// WHAT GOES WITH THE MESSAGE, above the frame: one chip a file, each
|
|
1199
1199
|
// with its own remove, and the reason any file was refused.
|
|
1200
1200
|
head: files.length || turnedAway || preparing || talk.open || talk.refusal || pause ? (_jsxs(YStack, { width: "calc(100% - 32px)", maxW: `calc(${MEASURE} - 3rem)`, mx: "auto", gap: "$1.5", children: [pause ? (_jsx(LimitedBanner, { message: pause.message, actions: pause.actions, onUsage: () => showSettings("usage") })) : null, files.length ? (_jsx(XStack, { gap: "$1.5", flexWrap: "wrap", role: "list", "aria-label": "Attached files", "data-slot": "composer-attached", children: files.map((one) => (_jsx(HeldChip, { one: one, onRemove: () => drop(at, one.id) }, one.id))) })) : null, preparing ? (_jsxs(Text, { role: "status", "aria-live": "polite", "data-slot": "composer-preparing", fontSize: "$2", color: "$soft", children: [preparing, "\u2026"] })) : null, turnedAway ? (_jsx(Text, { role: "alert", fontSize: "$2", color: BAD, children: turnedAway })) : null, talk.open || talk.refusal ? (_jsx(Text, { role: "status", "aria-live": "polite", "data-slot": "composer-talk-reply", fontSize: "$2", color: talk.refusal ? BAD : "$soft", children: talk.refusal
|
|
1201
|
-
?
|
|
1201
|
+
? worded(talk.refusal)
|
|
1202
1202
|
: talk.reply
|
|
1203
1203
|
? `Hanzo: ${talk.reply}`
|
|
1204
1204
|
: talk.state === "listening"
|
package/dist/Meet.js
CHANGED
|
@@ -5,7 +5,7 @@ import { Video, VideoOff, Mic, MicOff, PhoneOff, Copy, Check, Plus, Calendar, Ex
|
|
|
5
5
|
import { Text, View, XStack, YStack } from '@hanzo/gui';
|
|
6
6
|
import { Button } from '@hanzo/ui';
|
|
7
7
|
import { useIamToken } from '@hanzo/iam/react';
|
|
8
|
-
import {
|
|
8
|
+
import { refused, speech, useTranscript, useVoice } from '@hanzo/voice';
|
|
9
9
|
import { Face, voiceOf } from './cast.js';
|
|
10
10
|
import { member } from './team.js';
|
|
11
11
|
import { cleanForSpeech, speakAgent, stopAgentSpeech, AudioWave, useAgentSpeech } from './speech.js';
|
|
@@ -231,7 +231,7 @@ export function Meet() {
|
|
|
231
231
|
onPartial: setCaption,
|
|
232
232
|
onSettled: (text) => setLiveNotes((prev) => [...prev, `${clock()}: You: ${text}`]),
|
|
233
233
|
});
|
|
234
|
-
const transcriberNote = transcriber.reason ?? (transcriber.refusal ?
|
|
234
|
+
const transcriberNote = transcriber.reason ?? (transcriber.refusal ? refused(transcriber.refusal) : null);
|
|
235
235
|
const handleSpokenInput = useCallback(async (transcript) => {
|
|
236
236
|
const time = clock();
|
|
237
237
|
setLiveNotes((prev) => [...prev, `${time}: You (voice): ${transcript}`]);
|
|
@@ -269,7 +269,7 @@ export function Meet() {
|
|
|
269
269
|
};
|
|
270
270
|
// What the hands-free control says: why it cannot run, or that Hanzo's speech
|
|
271
271
|
// refused and the browser stood in (or could not) — never silence.
|
|
272
|
-
const handsFreeNote = handsFree.reason ?? (handsFree.refusal ?
|
|
272
|
+
const handsFreeNote = handsFree.reason ?? (handsFree.refusal ? refused(handsFree.refusal) : null);
|
|
273
273
|
return (_jsxs(YStack, { width: "100%", height: "100%", bg: "$background", overflowX: "auto", overflowY: "auto", children: [_jsxs(XStack, { minH: 56, px: 20, py: 8, gap: 10, flexWrap: "wrap", bg: "$panel", borderBottomWidth: 1, borderBottomColor: "$borderColor", items: "center", justify: "space-between", children: [_jsxs(XStack, { items: "center", gap: 12, shrink: 1, minW: "auto", children: [_jsx(XStack, { width: 32, height: 32, rounded: 8, bg: "$raised", items: "center", justify: "center", shrink: 1, minW: "auto", children: _jsx(Video, { size: 18, color: "var(--foreground)" }) }), _jsxs(YStack, { shrink: 1, minW: "auto", children: [_jsxs(XStack, { items: "center", gap: 8, children: [_jsx(Text, { fontSize: "$4", fontWeight: "700", color: "$ink", children: "Hanzo Meet" }), _jsx(Text, { fontSize: FLOOR, fontWeight: "700", bg: "$hover", color: "$soft", borderWidth: 1, borderColor: "$borderColor", px: 6, py: 1, rounded: 4, children: "LIVE \u00B7 meet.hanzo.ai" })] }), _jsx(Text, { fontSize: "$1", color: "$soft", children: "Native WebRTC video conferencing with AI meeting bot transcription & voice" })] })] }), activeMeetingRoom ? (_jsxs(XStack, { items: "center", gap: 8, shrink: 1, minW: "auto", flexWrap: "wrap", children: [_jsx(XStack, { bg: "$hover", rounded: 8, p: 2, gap: 2, borderWidth: 1, borderColor: "$borderColor", shrink: 1, minW: "auto", children: [
|
|
274
274
|
['iframe', 'SFU Stage', Tv],
|
|
275
275
|
['grid', 'Agent Grid', LayoutGrid],
|
package/dist/speech.js
CHANGED
|
@@ -18,7 +18,7 @@ import { Volume2, Square } from 'lucide-react';
|
|
|
18
18
|
import { View, XStack } from '@hanzo/gui';
|
|
19
19
|
import { Button } from '@hanzo/ui';
|
|
20
20
|
import { useIamToken } from '@hanzo/iam/react';
|
|
21
|
-
import { mouth,
|
|
21
|
+
import { mouth, refused, speech } from '@hanzo/voice';
|
|
22
22
|
import { GOOD } from './lib/mix.js';
|
|
23
23
|
import { base } from './lib/ai.js';
|
|
24
24
|
import { voiceOf, voiceProfileOf } from './cast.js';
|
|
@@ -211,7 +211,7 @@ export function SpeakButton({ text, agentName, compact = false, }) {
|
|
|
211
211
|
const voice = voiceOf(agentName);
|
|
212
212
|
// A browser voice standing in for a refused platform sounds like success;
|
|
213
213
|
// the label is the one place that says otherwise.
|
|
214
|
-
const stood = refusal ? ` ${
|
|
214
|
+
const stood = refusal ? ` ${refused(refusal)}` : '';
|
|
215
215
|
// An @hanzo/ui Button: ghost at rest, the quiet pressed ground while it
|
|
216
216
|
// speaks. The word for speaking is the one status here, so it alone takes
|
|
217
217
|
// the success ink (GOOD holds 4.5:1 on either theme); the icons follow the
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hanzo/rooms",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.24",
|
|
4
4
|
"description": "The workspace rooms — Home, Chat, Inbox, Contacts, Meet, Cal, Drive, Board, Work, Bots — and the frame that holds them, once, for every Hanzo surface.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
"@hanzo/plans": ">=1.8.9",
|
|
59
59
|
"@hanzo/ui": ">=8.27.57",
|
|
60
60
|
"@hanzo/usage": ">=0.1.18",
|
|
61
|
-
"@hanzo/voice": ">=0.1.
|
|
61
|
+
"@hanzo/voice": ">=0.1.16",
|
|
62
62
|
"@hanzogui/shell": "^8.3.20",
|
|
63
63
|
"lucide-react": ">=1.42.0",
|
|
64
64
|
"react": ">=19.2.8",
|
|
@@ -77,7 +77,7 @@
|
|
|
77
77
|
"@hanzo/plans": "1.8.9",
|
|
78
78
|
"@hanzo/ui": "8.27.57",
|
|
79
79
|
"@hanzo/usage": "0.1.18",
|
|
80
|
-
"@hanzo/voice": "0.1.
|
|
80
|
+
"@hanzo/voice": "0.1.16",
|
|
81
81
|
"@hanzogui/config": "8.3.5",
|
|
82
82
|
"@hanzogui/core": "8.3.5",
|
|
83
83
|
"@hanzogui/lucide-icons-2": "8.3.5",
|