oomi-ai 0.2.16 → 0.2.18
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/README.md +238 -203
- package/agent_instructions.md +209 -184
- package/bin/oomi-ai.js +3989 -3460
- package/bin/sessionBridgeState.js +78 -78
- package/lib/channelPluginClient.js +119 -0
- package/lib/personaApiClient.js +221 -0
- package/lib/personaJobExecutor.js +115 -0
- package/lib/personaJobPoller.js +112 -0
- package/lib/personaRuntimeProcess.js +152 -0
- package/lib/scaffold.js +108 -0
- package/lib/template.js +45 -0
- package/openclaw.extension.js +602 -424
- package/openclaw.plugin.json +17 -17
- package/package.json +67 -65
- package/skills/oomi/SKILL.md +191 -170
- package/skills/oomi/agent_instructions.md +80 -78
- package/skills/oomi/config.json +2 -2
- package/skills/oomi/scripts/get_avatar_capabilities.py +40 -40
- package/skills/oomi/scripts/get_data.py +49 -49
- package/skills/oomi/scripts/install_agent_instructions.py +78 -78
- package/skills/oomi/scripts/send_goal.py +53 -53
- package/skills/oomi/scripts/sync.py +46 -46
- package/skills/oomi/setup.py +41 -41
- package/templates/persona-app/.env.example +8 -0
- package/templates/persona-app/README.md +35 -0
- package/templates/persona-app/eslint.config.js +28 -0
- package/templates/persona-app/index.html +18 -0
- package/templates/persona-app/oomi.runtime.json +13 -0
- package/templates/persona-app/package.json +42 -0
- package/templates/persona-app/persona/brief.md +14 -0
- package/templates/persona-app/persona.json +14 -0
- package/templates/persona-app/public/manifest.webmanifest +8 -0
- package/templates/persona-app/public/oomi.health.json +6 -0
- package/templates/persona-app/src/App.css +180 -0
- package/templates/persona-app/src/App.tsx +14 -0
- package/templates/persona-app/src/index.css +32 -0
- package/templates/persona-app/src/main.tsx +10 -0
- package/templates/persona-app/src/pages/HomePage.tsx +73 -0
- package/templates/persona-app/src/pages/ScenePage.tsx +18 -0
- package/templates/persona-app/src/persona/config.ts +6 -0
- package/templates/persona-app/src/persona/notes.ts +5 -0
- package/templates/persona-app/src/vite-env.d.ts +3 -0
- package/templates/persona-app/template.json +13 -0
- package/templates/persona-app/tsconfig.app.json +23 -0
- package/templates/persona-app/tsconfig.json +7 -0
- package/templates/persona-app/tsconfig.node.json +21 -0
- package/templates/persona-app/vite.config.ts +18 -0
package/README.md
CHANGED
|
@@ -2,227 +2,262 @@
|
|
|
2
2
|
|
|
3
3
|
OpenClaw channel plugin and bridge tooling for Oomi managed chat and voice.
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
- OpenClaw operators who need to connect a machine to Oomi and keep chat or voice healthy
|
|
7
|
-
- Developers evaluating the plugin on npm and deciding whether it matches their OpenClaw + Oomi setup
|
|
8
|
-
|
|
9
|
-
## What This Package Ships
|
|
10
|
-
|
|
11
|
-
The npm package contains two Oomi integration surfaces:
|
|
12
|
-
|
|
13
|
-
1. OpenClaw channel extension
|
|
14
|
-
- File: `openclaw.extension.js`
|
|
15
|
-
- Purpose: stable managed text transport through the Oomi backend channel API
|
|
16
|
-
- This is the preferred integration surface for normal chat
|
|
17
|
-
|
|
18
|
-
2. Local bridge + CLI
|
|
19
|
-
- Files: `bin/oomi-ai.js`, `bin/sessionBridgeState.js`
|
|
20
|
-
- Purpose: pair a device, manage the OpenClaw bridge worker, and support managed gateway traffic needed by device-backed chat and voice
|
|
21
|
-
- This is the part that deals with broker sockets, local gateway sessions, challenge auth, and bridge health
|
|
22
|
-
|
|
23
|
-
In practical terms:
|
|
24
|
-
- If you only need a clean managed chat channel, the extension is the main reason to install this package
|
|
25
|
-
- If you need Oomi device-backed chat or voice on an OpenClaw machine, you also need the bridge tooling in this package
|
|
26
|
-
|
|
27
|
-
## When To Install It
|
|
28
|
-
|
|
29
|
-
Install `oomi-ai` if all of the following are true:
|
|
30
|
-
- you use OpenClaw
|
|
31
|
-
- you want Oomi as a managed channel inside OpenClaw
|
|
32
|
-
- you want device-backed Oomi chat, Oomi voice, or both
|
|
33
|
-
|
|
34
|
-
Do not install it just to use the Oomi web app by itself.
|
|
35
|
-
|
|
36
|
-
## Install And Upgrade
|
|
37
|
-
|
|
38
|
-
Global install:
|
|
39
|
-
|
|
40
|
-
```bash
|
|
41
|
-
pnpm add -g oomi-ai@latest
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
Fallback:
|
|
45
|
-
|
|
46
|
-
```bash
|
|
47
|
-
npm install -g oomi-ai@latest
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
Install the OpenClaw plugin:
|
|
51
|
-
|
|
52
|
-
```bash
|
|
53
|
-
openclaw plugins install oomi-ai@latest
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
Upgrade an existing machine:
|
|
57
|
-
|
|
58
|
-
```bash
|
|
59
|
-
pnpm add -g oomi-ai@latest
|
|
60
|
-
openclaw plugins install oomi-ai@latest
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
## Operator Quick Start
|
|
64
|
-
|
|
65
|
-
The packaged operator instructions live in [agent_instructions.md](./agent_instructions.md).
|
|
66
|
-
That is the primary reference for:
|
|
67
|
-
- pairing a device
|
|
68
|
-
- installing the plugin
|
|
69
|
-
- configuring `channels.oomi.accounts.default`
|
|
70
|
-
- running or supervising the bridge
|
|
71
|
-
- checking whether the system is healthy
|
|
72
|
-
- troubleshooting chat and voice failures
|
|
73
|
-
|
|
74
|
-
Fast-path install flow:
|
|
75
|
-
|
|
76
|
-
```bash
|
|
77
|
-
oomi openclaw pair --app-url https://www.oomi.ai --no-start
|
|
78
|
-
openclaw plugins install oomi-ai@latest
|
|
79
|
-
oomi openclaw plugin --show-secrets --backend-url https://api.oomi.ai
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
Then apply the printed `channels.oomi.accounts.default` config and restart OpenClaw.
|
|
83
|
-
|
|
84
|
-
## Configuration
|
|
85
|
-
|
|
86
|
-
OpenClaw channel config lives under:
|
|
5
|
+
## Current Focus
|
|
87
6
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
"accounts": {
|
|
94
|
-
"default": {
|
|
95
|
-
"backendUrl": "https://api.oomi.ai",
|
|
96
|
-
"deviceToken": "...",
|
|
97
|
-
"defaultSessionKey": "agent:main:webchat:channel:oomi",
|
|
98
|
-
"requestTimeoutMs": 15000
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
Required fields:
|
|
107
|
-
- `backendUrl`
|
|
108
|
-
- `deviceToken`
|
|
109
|
-
|
|
110
|
-
Optional fields:
|
|
111
|
-
- `defaultSessionKey`
|
|
112
|
-
- `requestTimeoutMs`
|
|
7
|
+
`0.2.18` adds the first live persona automation lane:
|
|
8
|
+
- WebSpatial-based persona scaffolding for generated Oomi apps
|
|
9
|
+
- device-authenticated persona runtime registration and job callbacks
|
|
10
|
+
- automatic bridge-side polling for queued `persona_job` control messages
|
|
11
|
+
- end-to-end local persona startup from a structured orchestration payload
|
|
113
12
|
|
|
13
|
+
This package is for two audiences:
|
|
14
|
+
- OpenClaw operators who need to connect a machine to Oomi and keep chat or voice healthy
|
|
15
|
+
- Developers evaluating the plugin on npm and deciding whether it matches their OpenClaw + Oomi setup
|
|
16
|
+
|
|
17
|
+
## What This Package Ships
|
|
18
|
+
|
|
19
|
+
The npm package contains two Oomi integration surfaces:
|
|
20
|
+
|
|
21
|
+
1. OpenClaw channel extension
|
|
22
|
+
- File: `openclaw.extension.js`
|
|
23
|
+
- Purpose: stable managed text transport through the Oomi backend channel API
|
|
24
|
+
- This is the preferred integration surface for normal chat
|
|
25
|
+
|
|
26
|
+
2. Local bridge + CLI
|
|
27
|
+
- Files: `bin/oomi-ai.js`, `bin/sessionBridgeState.js`
|
|
28
|
+
- Purpose: pair a device, manage the OpenClaw bridge worker, and support managed gateway traffic needed by device-backed chat and voice
|
|
29
|
+
- This is the part that deals with broker sockets, local gateway sessions, challenge auth, and bridge health
|
|
30
|
+
|
|
31
|
+
In practical terms:
|
|
32
|
+
- If you only need a clean managed chat channel, the extension is the main reason to install this package
|
|
33
|
+
- If you need Oomi device-backed chat or voice on an OpenClaw machine, you also need the bridge tooling in this package
|
|
34
|
+
|
|
35
|
+
## When To Install It
|
|
36
|
+
|
|
37
|
+
Install `oomi-ai` if all of the following are true:
|
|
38
|
+
- you use OpenClaw
|
|
39
|
+
- you want Oomi as a managed channel inside OpenClaw
|
|
40
|
+
- you want device-backed Oomi chat, Oomi voice, or both
|
|
41
|
+
|
|
42
|
+
Do not install it just to use the Oomi web app by itself.
|
|
43
|
+
|
|
44
|
+
## Install And Upgrade
|
|
45
|
+
|
|
46
|
+
Global install:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
pnpm add -g oomi-ai@latest
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Fallback:
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
npm install -g oomi-ai@latest
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Install the OpenClaw plugin:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
openclaw plugins install oomi-ai@latest
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Upgrade an existing machine:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
pnpm add -g oomi-ai@latest
|
|
68
|
+
openclaw plugins install oomi-ai@latest
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Operator Quick Start
|
|
72
|
+
|
|
73
|
+
The packaged operator instructions live in [agent_instructions.md](./agent_instructions.md).
|
|
74
|
+
That is the primary reference for:
|
|
75
|
+
- pairing a device
|
|
76
|
+
- installing the plugin
|
|
77
|
+
- configuring `channels.oomi.accounts.default`
|
|
78
|
+
- running or supervising the bridge
|
|
79
|
+
- checking whether the system is healthy
|
|
80
|
+
- troubleshooting chat and voice failures
|
|
81
|
+
|
|
82
|
+
Fast-path install flow:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
oomi openclaw pair --app-url https://www.oomi.ai --no-start
|
|
86
|
+
openclaw plugins install oomi-ai@latest
|
|
87
|
+
oomi openclaw plugin --show-secrets --backend-url https://api.oomi.ai
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Then apply the printed `channels.oomi.accounts.default` config and restart OpenClaw.
|
|
91
|
+
|
|
92
|
+
## Configuration
|
|
93
|
+
|
|
94
|
+
OpenClaw channel config lives under:
|
|
95
|
+
|
|
96
|
+
```json
|
|
97
|
+
{
|
|
98
|
+
"channels": {
|
|
99
|
+
"oomi": {
|
|
100
|
+
"defaultAccountId": "default",
|
|
101
|
+
"accounts": {
|
|
102
|
+
"default": {
|
|
103
|
+
"backendUrl": "https://api.oomi.ai",
|
|
104
|
+
"deviceToken": "...",
|
|
105
|
+
"defaultSessionKey": "agent:main:webchat:channel:oomi",
|
|
106
|
+
"requestTimeoutMs": 15000
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Required fields:
|
|
115
|
+
- `backendUrl`
|
|
116
|
+
- `deviceToken`
|
|
117
|
+
|
|
118
|
+
Optional fields:
|
|
119
|
+
- `defaultSessionKey`
|
|
120
|
+
- `requestTimeoutMs`
|
|
121
|
+
|
|
114
122
|
## Runtime Model
|
|
115
123
|
|
|
116
124
|
There are two runtime contracts worth understanding.
|
|
117
|
-
|
|
118
|
-
### Managed Text Chat
|
|
119
|
-
|
|
120
|
-
Managed text chat uses the OpenClaw channel extension and the Oomi backend channel API.
|
|
121
|
-
This path is the more stable contract and should be preferred when evaluating the plugin for normal chat.
|
|
122
|
-
|
|
123
|
-
### Device-Backed Chat And Voice
|
|
124
|
-
|
|
125
|
-
Device-backed chat and voice use the local bridge.
|
|
126
|
-
That bridge:
|
|
127
|
-
- keeps a broker socket open to Oomi
|
|
128
|
-
- opens local gateway sessions on demand
|
|
129
|
-
- enforces `connect`-first request ordering
|
|
130
|
-
- preserves or synthesizes `idempotencyKey` for `chat.send`
|
|
131
|
-
- keeps voice-session faults from poisoning normal provider health where possible
|
|
132
|
-
|
|
133
|
-
This is the part of the package most likely to matter when debugging voice turn failures.
|
|
134
|
-
|
|
125
|
+
|
|
126
|
+
### Managed Text Chat
|
|
127
|
+
|
|
128
|
+
Managed text chat uses the OpenClaw channel extension and the Oomi backend channel API.
|
|
129
|
+
This path is the more stable contract and should be preferred when evaluating the plugin for normal chat.
|
|
130
|
+
|
|
131
|
+
### Device-Backed Chat And Voice
|
|
132
|
+
|
|
133
|
+
Device-backed chat and voice use the local bridge.
|
|
134
|
+
That bridge:
|
|
135
|
+
- keeps a broker socket open to Oomi
|
|
136
|
+
- opens local gateway sessions on demand
|
|
137
|
+
- enforces `connect`-first request ordering
|
|
138
|
+
- preserves or synthesizes `idempotencyKey` for `chat.send`
|
|
139
|
+
- keeps voice-session faults from poisoning normal provider health where possible
|
|
140
|
+
|
|
141
|
+
This is the part of the package most likely to matter when debugging voice turn failures.
|
|
142
|
+
|
|
135
143
|
For managed voice replies, the extension also preserves an explicit hidden `metadata.spoken` sidecar when upstream provides one.
|
|
136
|
-
If upstream does not provide one, the extension now synthesizes a
|
|
137
|
-
|
|
138
|
-
## Bridge Health States
|
|
139
|
-
|
|
140
|
-
The bridge status file is written locally and should roughly be interpreted as:
|
|
141
|
-
- `starting`: process booting or waiting for managed subscription
|
|
142
|
-
- `connected`: broker connected and managed subscription confirmed
|
|
143
|
-
- `reconnecting`: broker or gateway transport dropped and reconnect is scheduled
|
|
144
|
-
- `degraded`: bridge is still alive but hit a runtime fault that needs attention
|
|
145
|
-
- `error`: startup or auth-level failure that prevents useful operation
|
|
146
|
-
- `stopped`: bridge is not running or was intentionally stopped
|
|
147
|
-
|
|
148
|
-
For voice support, a `voice_session_*` failure should be treated as narrower than a full provider outage.
|
|
149
|
-
|
|
150
|
-
## Troubleshooting
|
|
151
|
-
|
|
152
|
-
### `invalid handshake: first request must be connect`
|
|
153
|
-
|
|
154
|
-
Meaning:
|
|
155
|
-
- a gateway request was forwarded before the session had accepted `connect`
|
|
156
|
-
|
|
157
|
-
What to check:
|
|
158
|
-
- update to the latest `oomi-ai`
|
|
159
|
-
- restart the bridge worker
|
|
160
|
-
- confirm only one active bridge worker exists for the device
|
|
161
|
-
|
|
162
|
-
### `duplicate plugin id detected`
|
|
163
|
-
|
|
164
|
-
Meaning:
|
|
165
|
-
- OpenClaw can see more than one `oomi-ai` plugin source
|
|
166
|
-
|
|
167
|
-
What to check:
|
|
168
|
-
- ensure there is only one active install under OpenClaw plugin discovery paths
|
|
169
|
-
- remove stale local extension copies before reinstalling
|
|
170
|
-
|
|
171
|
-
### Bridge keeps flipping between `reconnecting`, `degraded`, or `stopped`
|
|
172
|
-
|
|
173
|
-
What to check:
|
|
174
|
-
- `oomi openclaw bridge ps`
|
|
175
|
-
- `oomi openclaw bridge service status`
|
|
176
|
-
- `tail -f ~/.openclaw/logs/oomi-bridge-live.log`
|
|
177
|
-
- `tail -f ~/.openclaw/logs/gateway.log`
|
|
178
|
-
|
|
179
|
-
If the process is alive but runtime faults are being caught, expect `degraded` rather than an immediate hard stop.
|
|
180
|
-
|
|
181
|
-
### Voice STT works but the agent does not answer
|
|
182
|
-
|
|
183
|
-
This usually means one of these:
|
|
184
|
-
- the managed gateway/device side is not actually ready
|
|
185
|
-
- the bridge or agent run failed after delivery
|
|
186
|
-
- the OpenClaw run stopped with an upstream provider `network_error`
|
|
187
|
-
|
|
188
|
-
In that situation, inspect:
|
|
189
|
-
- `~/.openclaw/logs/gateway.log`
|
|
190
|
-
- `~/.openclaw/logs/gateway.err.log`
|
|
191
|
-
- the relevant session JSONL in `~/.openclaw/agents/main/sessions/`
|
|
192
|
-
|
|
193
|
-
## Developer Notes
|
|
144
|
+
If upstream does not provide one, the extension now synthesizes a bounded hidden fallback from the visible assistant text so backend TTS can speak a cleaner and more varied version without changing user-visible chat.
|
|
194
145
|
|
|
195
|
-
|
|
196
|
-
- the extension path is the stable managed text contract
|
|
197
|
-
- the local bridge exists because Oomi also needs device-backed and voice-capable flows
|
|
198
|
-
- the bridge has been hardened for:
|
|
199
|
-
- strict `connect`-first forwarding
|
|
200
|
-
- method-specific request shaping
|
|
201
|
-
- `idempotencyKey` handling
|
|
202
|
-
- bridge status that does not report `connected` before managed subscription is ready
|
|
203
|
-
- runtime fault isolation so local session failures are less likely to crash the whole provider
|
|
204
|
-
- hidden managed-voice speech metadata forwarding, with a synthesized fallback when upstream does not provide `metadata.spoken`
|
|
146
|
+
## Persona Scaffolding
|
|
205
147
|
|
|
206
|
-
|
|
148
|
+
Use the scaffold flow when OpenClaw needs to build a managed persona app that will live inside Oomi:
|
|
207
149
|
|
|
208
150
|
```bash
|
|
209
|
-
|
|
210
|
-
node --test test/*.test.mjs
|
|
211
|
-
npm pack --dry-run
|
|
151
|
+
oomi personas scaffold market-analyst --name "Market Analyst" --description "Private app for reviewing my broker positions and risk." --out ~/.openclaw/personas/market-analyst
|
|
212
152
|
```
|
|
213
153
|
|
|
214
|
-
|
|
154
|
+
Use:
|
|
155
|
+
- `oomi personas create <id>` for repo-local manifest work
|
|
156
|
+
- `oomi personas scaffold <slug>` for a WebSpatial-based Oomi app shell with runtime metadata and health documents
|
|
157
|
+
- `oomi persona-jobs execute --message-file <job.json>` when OpenClaw receives a structured persona orchestration job from Oomi
|
|
215
158
|
|
|
216
|
-
|
|
159
|
+
Additional persona runtime commands:
|
|
217
160
|
|
|
218
161
|
```bash
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
162
|
+
oomi personas runtime-register market-analyst --local-port 4789
|
|
163
|
+
oomi personas heartbeat market-analyst --local-port 4789
|
|
164
|
+
oomi persona-jobs start pj_123
|
|
165
|
+
oomi persona-jobs succeed pj_123 --workspace-path ~/.openclaw/personas/market-analyst --local-port 4789
|
|
166
|
+
oomi persona-jobs fail pj_123 --code JOB_FAILED --message "Scaffold generation failed."
|
|
222
167
|
```
|
|
223
168
|
|
|
169
|
+
When the managed bridge is running, `oomi-ai` now also polls the backend control lane for queued `persona_job` messages and executes them automatically. That poll path is filtered to `metadata.type = persona_job`, so it does not consume normal queued chat traffic.
|
|
170
|
+
|
|
171
|
+
## Bridge Health States
|
|
172
|
+
|
|
173
|
+
The bridge status file is written locally and should roughly be interpreted as:
|
|
174
|
+
- `starting`: process booting or waiting for managed subscription
|
|
175
|
+
- `connected`: broker connected and managed subscription confirmed
|
|
176
|
+
- `reconnecting`: broker or gateway transport dropped and reconnect is scheduled
|
|
177
|
+
- `degraded`: bridge is still alive but hit a runtime fault that needs attention
|
|
178
|
+
- `error`: startup or auth-level failure that prevents useful operation
|
|
179
|
+
- `stopped`: bridge is not running or was intentionally stopped
|
|
180
|
+
|
|
181
|
+
For voice support, a `voice_session_*` failure should be treated as narrower than a full provider outage.
|
|
182
|
+
|
|
183
|
+
## Troubleshooting
|
|
184
|
+
|
|
185
|
+
### `invalid handshake: first request must be connect`
|
|
186
|
+
|
|
187
|
+
Meaning:
|
|
188
|
+
- a gateway request was forwarded before the session had accepted `connect`
|
|
189
|
+
|
|
190
|
+
What to check:
|
|
191
|
+
- update to the latest `oomi-ai`
|
|
192
|
+
- restart the bridge worker
|
|
193
|
+
- confirm only one active bridge worker exists for the device
|
|
194
|
+
|
|
195
|
+
### `duplicate plugin id detected`
|
|
196
|
+
|
|
197
|
+
Meaning:
|
|
198
|
+
- OpenClaw can see more than one `oomi-ai` plugin source
|
|
199
|
+
|
|
200
|
+
What to check:
|
|
201
|
+
- ensure there is only one active install under OpenClaw plugin discovery paths
|
|
202
|
+
- remove stale local extension copies before reinstalling
|
|
203
|
+
|
|
204
|
+
### Bridge keeps flipping between `reconnecting`, `degraded`, or `stopped`
|
|
205
|
+
|
|
206
|
+
What to check:
|
|
207
|
+
- `oomi openclaw bridge ps`
|
|
208
|
+
- `oomi openclaw bridge service status`
|
|
209
|
+
- `tail -f ~/.openclaw/logs/oomi-bridge-live.log`
|
|
210
|
+
- `tail -f ~/.openclaw/logs/gateway.log`
|
|
211
|
+
|
|
212
|
+
If the process is alive but runtime faults are being caught, expect `degraded` rather than an immediate hard stop.
|
|
213
|
+
|
|
214
|
+
### Voice STT works but the agent does not answer
|
|
215
|
+
|
|
216
|
+
This usually means one of these:
|
|
217
|
+
- the managed gateway/device side is not actually ready
|
|
218
|
+
- the bridge or agent run failed after delivery
|
|
219
|
+
- the OpenClaw run stopped with an upstream provider `network_error`
|
|
220
|
+
|
|
221
|
+
In that situation, inspect:
|
|
222
|
+
- `~/.openclaw/logs/gateway.log`
|
|
223
|
+
- `~/.openclaw/logs/gateway.err.log`
|
|
224
|
+
- the relevant session JSONL in `~/.openclaw/agents/main/sessions/`
|
|
225
|
+
|
|
226
|
+
## Developer Notes
|
|
227
|
+
|
|
228
|
+
If you are inspecting this package on npm, the main architectural points are:
|
|
229
|
+
- the extension path is the stable managed text contract
|
|
230
|
+
- the local bridge exists because Oomi also needs device-backed and voice-capable flows
|
|
231
|
+
- the bridge has been hardened for:
|
|
232
|
+
- strict `connect`-first forwarding
|
|
233
|
+
- method-specific request shaping
|
|
234
|
+
- `idempotencyKey` handling
|
|
235
|
+
- bridge status that does not report `connected` before managed subscription is ready
|
|
236
|
+
- runtime fault isolation so local session failures are less likely to crash the whole provider
|
|
237
|
+
- hidden managed-voice speech metadata forwarding, with a synthesized fallback when upstream does not provide `metadata.spoken`
|
|
238
|
+
|
|
239
|
+
If you are developing the plugin, test the packaged surface with:
|
|
240
|
+
|
|
241
|
+
```bash
|
|
242
|
+
cd packages/oomi-ai
|
|
243
|
+
node --test test/*.test.mjs
|
|
244
|
+
npm pack --dry-run
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
## Release Process
|
|
248
|
+
|
|
249
|
+
Before publishing:
|
|
250
|
+
|
|
251
|
+
```bash
|
|
252
|
+
cd packages/oomi-ai
|
|
253
|
+
node --test test/*.test.mjs
|
|
254
|
+
npm pack --dry-run
|
|
255
|
+
```
|
|
256
|
+
|
|
224
257
|
Then publish the bumped version:
|
|
225
258
|
|
|
226
259
|
```bash
|
|
227
|
-
|
|
260
|
+
pnpm check
|
|
261
|
+
pnpm publish --dry-run --no-git-checks --access public
|
|
262
|
+
pnpm publish --access public
|
|
228
263
|
```
|