claude-b 0.3.2 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/RELEASING.md ADDED
@@ -0,0 +1,167 @@
1
+ # Releasing Claude-B
2
+
3
+ A release publishes `claude-b` to three registries simultaneously from a
4
+ single git tag. The workflow is idempotent — re-running it on the same
5
+ tag is safe.
6
+
7
+ ## What gets published where
8
+
9
+ | Target | URL | Consumer install |
10
+ |---|---|---|
11
+ | npm (public) | https://www.npmjs.com/package/claude-b | `npm i -g claude-b` |
12
+ | Docker Hub (public) | https://hub.docker.com/r/danimoya/claude-b | `docker pull danimoya/claude-b` |
13
+ | GHCR | https://github.com/danimoya/Claude-B/pkgs/container/claude-b | `docker pull ghcr.io/danimoya/claude-b` |
14
+ | GitHub Release | https://github.com/danimoya/Claude-B/releases | tag browser |
15
+
16
+ Docker images are multi-arch (`linux/amd64`, `linux/arm64`).
17
+
18
+ ## One-time setup
19
+
20
+ ### GitHub secrets
21
+
22
+ Set on the repo (`Settings → Secrets and variables → Actions`):
23
+
24
+ | Secret | Source |
25
+ |---|---|
26
+ | `NPM_TOKEN` | npmjs.com → **Access Tokens** → *Granular* with publish scope on `claude-b` |
27
+ | `DOCKERHUB_USERNAME` | `danimoya` |
28
+ | `DOCKERHUB_TOKEN` | hub.docker.com → **Account Settings → Security → New Access Token** (R/W/D) — cached in `~/.dockerhub-credentials` |
29
+
30
+ `GITHUB_TOKEN` is automatic; nothing to set for GHCR.
31
+
32
+ CLI shortcut:
33
+
34
+ ```bash
35
+ gh secret set NPM_TOKEN -b "npm_..."
36
+ source ~/.dockerhub-credentials
37
+ gh secret set DOCKERHUB_USERNAME -b "$DOCKERHUB_USERNAME"
38
+ gh secret set DOCKERHUB_TOKEN -b "$DOCKERHUB_TOKEN"
39
+ ```
40
+
41
+ ### DockerHub — first push is private
42
+
43
+ DockerHub creates any newly-pushed repo as *private* by default. On the
44
+ free plan the second private repo hits `plan_exceeded` and anonymous
45
+ pulls 404. Flip it to public *once*:
46
+
47
+ ```bash
48
+ source ~/.dockerhub-credentials
49
+ JWT=$(curl -sS -X POST \
50
+ -H 'Content-Type: application/json' \
51
+ -d "{\"username\":\"$DOCKERHUB_USERNAME\",\"password\":\"$DOCKERHUB_TOKEN\"}" \
52
+ https://hub.docker.com/v2/users/login/ | jq -r .token)
53
+
54
+ curl -sS -X POST \
55
+ -H "Authorization: JWT $JWT" \
56
+ -H 'Content-Type: application/json' \
57
+ -d '{"is_private":false}' \
58
+ https://hub.docker.com/v2/repositories/danimoya/claude-b/privacy/
59
+ ```
60
+
61
+ Note the `/privacy/` sub-path — `PATCH` to the root endpoint returns
62
+ 200 but silently ignores `is_private`.
63
+
64
+ ## Releasing a new version
65
+
66
+ ```bash
67
+ # 1. Make sure main is clean and builds
68
+ pnpm build && pnpm typecheck
69
+
70
+ # 2. Bump version (semver)
71
+ npm version patch # or minor / major — updates package.json + creates a tag
72
+
73
+ # 3. Push commit + tag
74
+ git push origin main --follow-tags
75
+ ```
76
+
77
+ `npm version` creates the commit *and* the tag (`vX.Y.Z`). The
78
+ `--follow-tags` push triggers `.github/workflows/release.yml`.
79
+
80
+ Watch it:
81
+
82
+ ```bash
83
+ gh run watch --exit-status --workflow=release.yml
84
+ ```
85
+
86
+ If only one job fails (usually npm, when a token rolls):
87
+
88
+ ```bash
89
+ gh run rerun <run-id> --failed
90
+ ```
91
+
92
+ ## Verifying a release
93
+
94
+ ```bash
95
+ # npm
96
+ npm view claude-b dist-tags
97
+
98
+ # Docker Hub (multi-arch check)
99
+ docker manifest inspect danimoya/claude-b:latest | jq '.manifests[] | .platform'
100
+
101
+ # GHCR
102
+ docker pull ghcr.io/danimoya/claude-b:latest
103
+
104
+ # End-to-end: the landing script
105
+ curl -fsSL https://cb.danimoya.com | head
106
+ ```
107
+
108
+ ## Keeping the Docker Hub README in sync
109
+
110
+ The Hub page's README is *not* pulled from this repo automatically.
111
+ Edit `website/DOCKERHUB.md` and push:
112
+
113
+ ```bash
114
+ ./website/sync-dockerhub-readme.sh
115
+ ```
116
+
117
+ The helper PATCHes Hub's `description` and `full_description`. Creds
118
+ come from `~/.dockerhub-credentials` unless overridden via env.
119
+
120
+ ## Workflow file reference
121
+
122
+ `.github/workflows/release.yml` — three jobs, published independently:
123
+
124
+ - **`npm`** — `npm publish --access public`. Falls back to
125
+ Trusted Publishing (OIDC, `--provenance`) when `NPM_TOKEN` is absent.
126
+ - **`docker`** — `docker/build-push-action@v6` with QEMU for arm64.
127
+ Tags: `X.Y.Z`, `X.Y`, `X`, `vX.Y.Z`, `latest`. Pushes to GHCR
128
+ always; to Docker Hub only when `DOCKERHUB_USERNAME` is set.
129
+ - **`release`** — `softprops/action-gh-release@v2`. Depends on `docker`
130
+ only, so a broken npm token never blocks the GitHub Release.
131
+
132
+ A manual dispatch (`workflow_dispatch`) with `dry_run=true` builds
133
+ everything and pushes nothing — handy for testing CI edits without a
134
+ throwaway tag.
135
+
136
+ ## Upgrading to npm Trusted Publishing (optional)
137
+
138
+ When you want to retire the long-lived `NPM_TOKEN`:
139
+
140
+ 1. Publish once manually from a laptop with 2FA (`npm publish --otp=...`)
141
+ so the package slot exists on npm.
142
+ 2. Go to https://www.npmjs.com/package/claude-b/access → *Trusted
143
+ Publishers* → *Add* → **GitHub Actions**. Fill:
144
+
145
+ | Field | Value |
146
+ |---|---|
147
+ | Organization or user | `danimoya` |
148
+ | Repository | `Claude-B` |
149
+ | Workflow filename | `release.yml` |
150
+ | Environment name | *(blank)* |
151
+
152
+ 3. Delete `NPM_TOKEN` from the repo secrets. The next release publishes
153
+ with cryptographic provenance and a green "verified" badge on the
154
+ package page.
155
+
156
+ The workflow is already OIDC-ready (`id-token: write` permission,
157
+ `--provenance` when no token is present).
158
+
159
+ ## Credentials & files — where things live
160
+
161
+ | File / secret | Purpose | Location |
162
+ |---|---|---|
163
+ | `~/.dockerhub-credentials` | Docker Hub PAT for release + README sync | dev machine, mode 600 |
164
+ | `~/.npm-credentials` | Nginx Proxy Manager admin (unrelated to npm) | dev machine, mode 600 |
165
+ | `GH secret NPM_TOKEN` | npmjs.com publish auth | repo secrets |
166
+ | `GH secret DOCKERHUB_*` | Docker Hub publish auth | repo secrets |
167
+ | `.npmrc` | never committed — see `.gitignore` | repo root if created locally |
@@ -0,0 +1,46 @@
1
+ %%{init: {'theme':'base', 'themeVariables': {
2
+ 'background': '#fdf7e9',
3
+ 'primaryColor': '#fff9e7',
4
+ 'primaryTextColor': '#2d2a22',
5
+ 'primaryBorderColor': '#c9b87a',
6
+ 'lineColor': '#8a7338',
7
+ 'secondaryColor': '#fff2c6',
8
+ 'tertiaryColor': '#fdf7e9',
9
+ 'actorBkg': '#fff9e7',
10
+ 'actorBorder': '#c9b87a',
11
+ 'actorTextColor': '#2d2a22',
12
+ 'activationBkgColor': '#fff2c6',
13
+ 'activationBorderColor': '#c9b87a',
14
+ 'noteBkgColor': '#fff9e7',
15
+ 'noteBorderColor': '#c9b87a',
16
+ 'signalColor': '#2d2a22',
17
+ 'signalTextColor': '#2d2a22',
18
+ 'labelBoxBkgColor': '#fff9e7',
19
+ 'labelBoxBorderColor': '#c9b87a',
20
+ 'labelTextColor': '#2d2a22',
21
+ 'loopTextColor': '#2d2a22',
22
+ 'sequenceNumberColor': '#2d2a22'
23
+ }}}%%
24
+ sequenceDiagram
25
+ autonumber
26
+ actor U as You
27
+ participant B as Claude-B
28
+ participant STT as STT<br/>Whisper · Speechmatics · Deepgram
29
+ participant O as Optimizer<br/>Claude Haiku 4.5
30
+ participant C as Claude Code<br/>Sonnet / Opus
31
+ participant T as TTS<br/>OpenAI · Deepgram
32
+
33
+ U->>B: voice note in
34
+ B->>STT: Opus audio
35
+ STT-->>B: raw transcript
36
+ B->>O: transcript + last 3 turns of<br/>session context
37
+ O-->>B: polished prompt
38
+ B-->>U: preview · confirm / edit / cancel
39
+ U->>B: confirm
40
+ B->>C: execute
41
+ C-->>B: response
42
+ B-->>U: markdown reply
43
+ U->>B: tap to listen
44
+ B->>T: text
45
+ T-->>B: Opus audio
46
+ B-->>U: voice reply out
Binary file
@@ -0,0 +1 @@
1
+ <svg id="container" width="1489" xmlns="http://www.w3.org/2000/svg" height="862" viewBox="-50 -10 1489 862" role="graphics-document document" aria-roledescription="sequence"><g><rect x="1231" y="776" fill="#eaeaea" stroke="#666" width="158" height="65" name="T" rx="3" ry="3" class="actor actor-bottom"></rect><text x="1310" y="808.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="1310" dy="-8">TTS</tspan></text><text x="1310" y="808.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="1310" dy="8">OpenAI · Deepgram</tspan></text></g><g><rect x="1031" y="776" fill="#eaeaea" stroke="#666" width="150" height="65" name="C" rx="3" ry="3" class="actor actor-bottom"></rect><text x="1106" y="808.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="1106" dy="-8">Claude Code</tspan></text><text x="1106" y="808.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="1106" dy="8">Sonnet / Opus</tspan></text></g><g><rect x="831" y="776" fill="#eaeaea" stroke="#666" width="150" height="65" name="O" rx="3" ry="3" class="actor actor-bottom"></rect><text x="906" y="808.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="906" dy="-8">Optimizer</tspan></text><text x="906" y="808.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="906" dy="8">Claude Haiku 4.5</tspan></text></g><g><rect x="503" y="776" fill="#eaeaea" stroke="#666" width="278" height="65" name="STT" rx="3" ry="3" class="actor actor-bottom"></rect><text x="642" y="808.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="642" dy="-8">STT</tspan></text><text x="642" y="808.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="642" dy="8">Whisper · Speechmatics · Deepgram</tspan></text></g><g><rect x="303" y="776" fill="#eaeaea" stroke="#666" width="150" height="65" name="B" rx="3" ry="3" class="actor actor-bottom"></rect><text x="378" y="808.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="378" dy="0">Claude-B</tspan></text></g><g></g><g><line id="actor5" x1="1310" y1="65" x2="1310" y2="776" class="actor-line 200" stroke-width="0.5px" stroke="#999" name="T"></line><g id="root-5"><rect x="1231" y="0" fill="#eaeaea" stroke="#666" width="158" height="65" name="T" rx="3" ry="3" class="actor actor-top"></rect><text x="1310" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="1310" dy="-8">TTS</tspan></text><text x="1310" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="1310" dy="8">OpenAI · Deepgram</tspan></text></g></g><g><line id="actor4" x1="1106" y1="65" x2="1106" y2="776" class="actor-line 200" stroke-width="0.5px" stroke="#999" name="C"></line><g id="root-4"><rect x="1031" y="0" fill="#eaeaea" stroke="#666" width="150" height="65" name="C" rx="3" ry="3" class="actor actor-top"></rect><text x="1106" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="1106" dy="-8">Claude Code</tspan></text><text x="1106" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="1106" dy="8">Sonnet / Opus</tspan></text></g></g><g><line id="actor3" x1="906" y1="65" x2="906" y2="776" class="actor-line 200" stroke-width="0.5px" stroke="#999" name="O"></line><g id="root-3"><rect x="831" y="0" fill="#eaeaea" stroke="#666" width="150" height="65" name="O" rx="3" ry="3" class="actor actor-top"></rect><text x="906" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="906" dy="-8">Optimizer</tspan></text><text x="906" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="906" dy="8">Claude Haiku 4.5</tspan></text></g></g><g><line id="actor2" x1="642" y1="65" x2="642" y2="776" class="actor-line 200" stroke-width="0.5px" stroke="#999" name="STT"></line><g id="root-2"><rect x="503" y="0" fill="#eaeaea" stroke="#666" width="278" height="65" name="STT" rx="3" ry="3" class="actor actor-top"></rect><text x="642" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="642" dy="-8">STT</tspan></text><text x="642" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="642" dy="8">Whisper · Speechmatics · Deepgram</tspan></text></g></g><g><line id="actor1" x1="378" y1="65" x2="378" y2="776" class="actor-line 200" stroke-width="0.5px" stroke="#999" name="B"></line><g id="root-1"><rect x="303" y="0" fill="#eaeaea" stroke="#666" width="150" height="65" name="B" rx="3" ry="3" class="actor actor-top"></rect><text x="378" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="378" dy="0">Claude-B</tspan></text></g></g><g><line id="actor0" x1="75" y1="80" x2="75" y2="776" class="actor-line 200" stroke-width="0.5px" stroke="#999" name="U"></line></g><style>#container{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#2d2a22;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#container .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#container .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#container .error-icon{fill:#fdf7e9;}#container .error-text{fill:#020816;stroke:#020816;}#container .edge-thickness-normal{stroke-width:1px;}#container .edge-thickness-thick{stroke-width:3.5px;}#container .edge-pattern-solid{stroke-dasharray:0;}#container .edge-thickness-invisible{stroke-width:0;fill:none;}#container .edge-pattern-dashed{stroke-dasharray:3;}#container .edge-pattern-dotted{stroke-dasharray:2;}#container .marker{fill:#8a7338;stroke:#8a7338;}#container .marker.cross{stroke:#8a7338;}#container svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#container p{margin:0;}#container .actor{stroke:#c9b87a;fill:#fff9e7;}#container text.actor&gt;tspan{fill:#2d2a22;stroke:none;}#container .actor-line{stroke:#c9b87a;}#container .innerArc{stroke-width:1.5;stroke-dasharray:none;}#container .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#2d2a22;}#container .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#2d2a22;}#container #arrowhead path{fill:#2d2a22;stroke:#2d2a22;}#container .sequenceNumber{fill:#2d2a22;}#container #sequencenumber{fill:#2d2a22;}#container #crosshead path{fill:#2d2a22;stroke:#2d2a22;}#container .messageText{fill:#2d2a22;stroke:none;}#container .labelBox{stroke:#c9b87a;fill:#fff9e7;}#container .labelText,#container .labelText&gt;tspan{fill:#2d2a22;stroke:none;}#container .loopText,#container .loopText&gt;tspan{fill:#2d2a22;stroke:none;}#container .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:#c9b87a;fill:#c9b87a;}#container .note{stroke:#c9b87a;fill:#fff9e7;}#container .noteText,#container .noteText&gt;tspan{fill:#333;stroke:none;}#container .activation0{fill:#fff2c6;stroke:#c9b87a;}#container .activation1{fill:#fff2c6;stroke:#c9b87a;}#container .activation2{fill:#fff2c6;stroke:#c9b87a;}#container .actorPopupMenu{position:absolute;}#container .actorPopupMenuPanel{position:absolute;fill:#fff9e7;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#container .actor-man line{stroke:#c9b87a;fill:#fff9e7;}#container .actor-man circle,#container line{stroke:#c9b87a;fill:#fff9e7;stroke-width:2px;}#container :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}</style><g></g><defs><symbol id="computer" width="24" height="24"><path transform="scale(.5)" d="M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z"></path></symbol></defs><defs><symbol id="database" fill-rule="evenodd" clip-rule="evenodd"><path transform="scale(.5)" d="M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z"></path></symbol></defs><defs><symbol id="clock" width="24" height="24"><path transform="scale(.5)" d="M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z"></path></symbol></defs><defs><marker id="arrowhead" refX="7.9" refY="5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto-start-reverse"><path d="M -1 0 L 10 5 L 0 10 z"></path></marker></defs><defs><marker id="crosshead" markerWidth="15" markerHeight="8" orient="auto" refX="4" refY="4.5"><path fill="none" stroke="#000000" stroke-width="1pt" d="M 1,2 L 6,7 M 6,2 L 1,7" style="stroke-dasharray: 0, 0;"></path></marker></defs><defs><marker id="filled-head" refX="15.5" refY="7" markerWidth="20" markerHeight="28" orient="auto"><path d="M 18,7 L9,13 L14,7 L9,1 Z"></path></marker></defs><defs><marker id="sequencenumber" refX="15" refY="15" markerWidth="60" markerHeight="40" orient="auto"><circle cx="15" cy="15" r="6"></circle></marker></defs><g class="actor-man actor-top" name="U"><line id="actor-man-torso0" x1="75" y1="25" x2="75" y2="45"></line><line id="actor-man-arms0" x1="57" y1="33" x2="93" y2="33"></line><line x1="57" y1="60" x2="75" y2="45"></line><line x1="75" y1="45" x2="91" y2="60"></line><circle cx="75" cy="10" r="15" width="150" height="65"></circle><text x="75" y="67.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-man" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="75" dy="0">You</tspan></text></g><text x="225" y="80" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">voice note in</text><line x1="76" y1="113" x2="374" y2="113" class="messageLine0" stroke-width="2" stroke="none" marker-end="url(#arrowhead)" style="fill: none;"></line><line x1="76" y1="113" x2="76" y2="113" stroke-width="0" marker-start="url(#sequencenumber)"></line><text x="76" y="117" font-family="sans-serif" font-size="12px" text-anchor="middle" class="sequenceNumber">1</text><text x="509" y="128" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">Opus audio</text><line x1="379" y1="161" x2="638" y2="161" class="messageLine0" stroke-width="2" stroke="none" marker-end="url(#arrowhead)" style="fill: none;"></line><line x1="379" y1="161" x2="379" y2="161" stroke-width="0" marker-start="url(#sequencenumber)"></line><text x="379" y="165" font-family="sans-serif" font-size="12px" text-anchor="middle" class="sequenceNumber">2</text><text x="512" y="176" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">raw transcript</text><line x1="641" y1="209" x2="382" y2="209" class="messageLine1" stroke-width="2" stroke="none" marker-end="url(#arrowhead)" style="stroke-dasharray: 3, 3; fill: none;"></line><line x1="641" y1="209" x2="641" y2="209" stroke-width="0" marker-start="url(#sequencenumber)"></line><text x="641" y="213" font-family="sans-serif" font-size="12px" text-anchor="middle" class="sequenceNumber">3</text><text x="641" y="224" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">transcript + last 3 turns of</text><text x="641" y="243" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">session context</text><line x1="379" y1="276" x2="902" y2="276" class="messageLine0" stroke-width="2" stroke="none" marker-end="url(#arrowhead)" style="fill: none;"></line><line x1="379" y1="276" x2="379" y2="276" stroke-width="0" marker-start="url(#sequencenumber)"></line><text x="379" y="280" font-family="sans-serif" font-size="12px" text-anchor="middle" class="sequenceNumber">4</text><text x="644" y="291" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">polished prompt</text><line x1="905" y1="324" x2="382" y2="324" class="messageLine1" stroke-width="2" stroke="none" marker-end="url(#arrowhead)" style="stroke-dasharray: 3, 3; fill: none;"></line><line x1="905" y1="324" x2="905" y2="324" stroke-width="0" marker-start="url(#sequencenumber)"></line><text x="905" y="328" font-family="sans-serif" font-size="12px" text-anchor="middle" class="sequenceNumber">5</text><text x="228" y="339" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">preview · confirm / edit / cancel</text><line x1="377" y1="372" x2="79" y2="372" class="messageLine1" stroke-width="2" stroke="none" marker-end="url(#arrowhead)" style="stroke-dasharray: 3, 3; fill: none;"></line><line x1="377" y1="372" x2="377" y2="372" stroke-width="0" marker-start="url(#sequencenumber)"></line><text x="377" y="376" font-family="sans-serif" font-size="12px" text-anchor="middle" class="sequenceNumber">6</text><text x="225" y="387" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">confirm</text><line x1="76" y1="420" x2="374" y2="420" class="messageLine0" stroke-width="2" stroke="none" marker-end="url(#arrowhead)" style="fill: none;"></line><line x1="76" y1="420" x2="76" y2="420" stroke-width="0" marker-start="url(#sequencenumber)"></line><text x="76" y="424" font-family="sans-serif" font-size="12px" text-anchor="middle" class="sequenceNumber">7</text><text x="741" y="435" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">execute</text><line x1="379" y1="468" x2="1102" y2="468" class="messageLine0" stroke-width="2" stroke="none" marker-end="url(#arrowhead)" style="fill: none;"></line><line x1="379" y1="468" x2="379" y2="468" stroke-width="0" marker-start="url(#sequencenumber)"></line><text x="379" y="472" font-family="sans-serif" font-size="12px" text-anchor="middle" class="sequenceNumber">8</text><text x="744" y="483" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">response</text><line x1="1105" y1="516" x2="382" y2="516" class="messageLine1" stroke-width="2" stroke="none" marker-end="url(#arrowhead)" style="stroke-dasharray: 3, 3; fill: none;"></line><line x1="1105" y1="516" x2="1105" y2="516" stroke-width="0" marker-start="url(#sequencenumber)"></line><text x="1105" y="520" font-family="sans-serif" font-size="12px" text-anchor="middle" class="sequenceNumber">9</text><text x="228" y="531" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">markdown reply</text><line x1="377" y1="564" x2="79" y2="564" class="messageLine1" stroke-width="2" stroke="none" marker-end="url(#arrowhead)" style="stroke-dasharray: 3, 3; fill: none;"></line><line x1="377" y1="564" x2="377" y2="564" stroke-width="0" marker-start="url(#sequencenumber)"></line><text x="377" y="568" font-family="sans-serif" font-size="12px" text-anchor="middle" class="sequenceNumber">10</text><text x="225" y="579" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">tap to listen</text><line x1="76" y1="612" x2="374" y2="612" class="messageLine0" stroke-width="2" stroke="none" marker-end="url(#arrowhead)" style="fill: none;"></line><line x1="76" y1="612" x2="76" y2="612" stroke-width="0" marker-start="url(#sequencenumber)"></line><text x="76" y="616" font-family="sans-serif" font-size="12px" text-anchor="middle" class="sequenceNumber">11</text><text x="843" y="627" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">text</text><line x1="379" y1="660" x2="1306" y2="660" class="messageLine0" stroke-width="2" stroke="none" marker-end="url(#arrowhead)" style="fill: none;"></line><line x1="379" y1="660" x2="379" y2="660" stroke-width="0" marker-start="url(#sequencenumber)"></line><text x="379" y="664" font-family="sans-serif" font-size="12px" text-anchor="middle" class="sequenceNumber">12</text><text x="846" y="675" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">Opus audio</text><line x1="1309" y1="708" x2="382" y2="708" class="messageLine1" stroke-width="2" stroke="none" marker-end="url(#arrowhead)" style="stroke-dasharray: 3, 3; fill: none;"></line><line x1="1309" y1="708" x2="1309" y2="708" stroke-width="0" marker-start="url(#sequencenumber)"></line><text x="1309" y="712" font-family="sans-serif" font-size="12px" text-anchor="middle" class="sequenceNumber">13</text><text x="228" y="723" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">voice reply out</text><line x1="377" y1="756" x2="79" y2="756" class="messageLine1" stroke-width="2" stroke="none" marker-end="url(#arrowhead)" style="stroke-dasharray: 3, 3; fill: none;"></line><line x1="377" y1="756" x2="377" y2="756" stroke-width="0" marker-start="url(#sequencenumber)"></line><text x="377" y="760" font-family="sans-serif" font-size="12px" text-anchor="middle" class="sequenceNumber">14</text><g class="actor-man actor-bottom" name="U"><line id="actor-man-torso5" x1="75" y1="801" x2="75" y2="821"></line><line id="actor-man-arms5" x1="57" y1="809" x2="93" y2="809"></line><line x1="57" y1="836" x2="75" y2="821"></line><line x1="75" y1="821" x2="91" y2="836"></line><circle cx="75" cy="786" r="15" width="150" height="65"></circle><text x="75" y="843.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-man" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="75" dy="0">You</tspan></text></g></svg>