oomi-ai 0.2.17 → 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.
Files changed (47) hide show
  1. package/README.md +237 -202
  2. package/agent_instructions.md +209 -186
  3. package/bin/oomi-ai.js +3989 -3460
  4. package/bin/sessionBridgeState.js +78 -78
  5. package/lib/channelPluginClient.js +119 -0
  6. package/lib/personaApiClient.js +221 -0
  7. package/lib/personaJobExecutor.js +115 -0
  8. package/lib/personaJobPoller.js +112 -0
  9. package/lib/personaRuntimeProcess.js +152 -0
  10. package/lib/scaffold.js +108 -0
  11. package/lib/template.js +45 -0
  12. package/openclaw.extension.js +602 -602
  13. package/openclaw.plugin.json +17 -17
  14. package/package.json +67 -65
  15. package/skills/oomi/SKILL.md +191 -191
  16. package/skills/oomi/agent_instructions.md +80 -80
  17. package/skills/oomi/config.json +2 -2
  18. package/skills/oomi/scripts/get_avatar_capabilities.py +40 -40
  19. package/skills/oomi/scripts/get_data.py +49 -49
  20. package/skills/oomi/scripts/install_agent_instructions.py +78 -78
  21. package/skills/oomi/scripts/send_goal.py +53 -53
  22. package/skills/oomi/scripts/sync.py +46 -46
  23. package/skills/oomi/setup.py +41 -41
  24. package/templates/persona-app/.env.example +8 -0
  25. package/templates/persona-app/README.md +35 -0
  26. package/templates/persona-app/eslint.config.js +28 -0
  27. package/templates/persona-app/index.html +18 -0
  28. package/templates/persona-app/oomi.runtime.json +13 -0
  29. package/templates/persona-app/package.json +42 -0
  30. package/templates/persona-app/persona/brief.md +14 -0
  31. package/templates/persona-app/persona.json +14 -0
  32. package/templates/persona-app/public/manifest.webmanifest +8 -0
  33. package/templates/persona-app/public/oomi.health.json +6 -0
  34. package/templates/persona-app/src/App.css +180 -0
  35. package/templates/persona-app/src/App.tsx +14 -0
  36. package/templates/persona-app/src/index.css +32 -0
  37. package/templates/persona-app/src/main.tsx +10 -0
  38. package/templates/persona-app/src/pages/HomePage.tsx +73 -0
  39. package/templates/persona-app/src/pages/ScenePage.tsx +18 -0
  40. package/templates/persona-app/src/persona/config.ts +6 -0
  41. package/templates/persona-app/src/persona/notes.ts +5 -0
  42. package/templates/persona-app/src/vite-env.d.ts +3 -0
  43. package/templates/persona-app/template.json +13 -0
  44. package/templates/persona-app/tsconfig.app.json +23 -0
  45. package/templates/persona-app/tsconfig.json +7 -0
  46. package/templates/persona-app/tsconfig.node.json +21 -0
  47. package/templates/persona-app/vite.config.ts +18 -0
@@ -1,17 +1,17 @@
1
- {
2
- "id": "oomi-ai",
3
- "name": "Oomi Channel Plugin",
4
- "description": "Managed Oomi channel integration for OpenClaw.",
5
- "version": "0.2.17",
6
- "author": "Oomi",
7
- "license": "MIT",
8
- "openclawVersion": ">=0.5.0",
9
- "channels": [
10
- "oomi"
11
- ],
12
- "configSchema": {
13
- "type": "object",
14
- "additionalProperties": false,
15
- "properties": {}
16
- }
17
- }
1
+ {
2
+ "id": "oomi-ai",
3
+ "name": "Oomi Channel Plugin",
4
+ "description": "Managed Oomi channel integration for OpenClaw.",
5
+ "version": "0.2.18",
6
+ "author": "Oomi",
7
+ "license": "MIT",
8
+ "openclawVersion": ">=0.5.0",
9
+ "channels": [
10
+ "oomi"
11
+ ],
12
+ "configSchema": {
13
+ "type": "object",
14
+ "additionalProperties": false,
15
+ "properties": {}
16
+ }
17
+ }
package/package.json CHANGED
@@ -1,65 +1,67 @@
1
- {
2
- "name": "oomi-ai",
3
- "version": "0.2.17",
4
- "description": "Oomi OpenClaw channel plugin and bridge tooling",
5
- "bin": {
6
- "oomi": "bin/oomi-ai.js"
7
- },
8
- "type": "module",
9
- "engines": {
10
- "node": ">=18"
11
- },
12
- "openclaw": {
13
- "extensions": [
14
- "./openclaw.extension.js"
15
- ],
16
- "channel": {
17
- "id": "oomi",
18
- "label": "Oomi",
19
- "selectionLabel": "Oomi (Managed)",
20
- "docsPath": "/channels/oomi",
21
- "docsLabel": "oomi",
22
- "blurb": "Managed channel transport for Oomi chat.",
23
- "aliases": [
24
- "oomi-ai"
25
- ]
26
- },
27
- "install": {
28
- "npmSpec": "oomi-ai",
29
- "defaultChoice": "npm"
30
- }
31
- },
32
- "keywords": [
33
- "oomi",
34
- "openclaw",
35
- "cli",
36
- "voice",
37
- "agent"
38
- ],
39
- "homepage": "https://oomi.ai",
40
- "repository": {
41
- "type": "git",
42
- "url": "git+https://github.com/crispcode-io/oomi.git",
43
- "directory": "packages/oomi-ai"
44
- },
45
- "bugs": {
46
- "url": "https://github.com/crispcode-io/oomi/issues"
47
- },
48
- "scripts": {
49
- "check": "node --check bin/oomi-ai.js",
50
- "test": "node --test test/*.test.mjs"
51
- },
52
- "dependencies": {
53
- "ws": "^8.19.0"
54
- },
55
- "license": "MIT",
56
- "files": [
57
- "bin/oomi-ai.js",
58
- "bin/sessionBridgeState.js",
59
- "openclaw.plugin.json",
60
- "openclaw.extension.js",
61
- "agent_instructions.md",
62
- "README.md",
63
- "skills/oomi"
64
- ]
65
- }
1
+ {
2
+ "name": "oomi-ai",
3
+ "version": "0.2.18",
4
+ "description": "Oomi OpenClaw channel plugin and bridge tooling",
5
+ "bin": {
6
+ "oomi": "bin/oomi-ai.js"
7
+ },
8
+ "type": "module",
9
+ "engines": {
10
+ "node": ">=18"
11
+ },
12
+ "openclaw": {
13
+ "extensions": [
14
+ "./openclaw.extension.js"
15
+ ],
16
+ "channel": {
17
+ "id": "oomi",
18
+ "label": "Oomi",
19
+ "selectionLabel": "Oomi (Managed)",
20
+ "docsPath": "/channels/oomi",
21
+ "docsLabel": "oomi",
22
+ "blurb": "Managed channel transport for Oomi chat.",
23
+ "aliases": [
24
+ "oomi-ai"
25
+ ]
26
+ },
27
+ "install": {
28
+ "npmSpec": "oomi-ai",
29
+ "defaultChoice": "npm"
30
+ }
31
+ },
32
+ "keywords": [
33
+ "oomi",
34
+ "openclaw",
35
+ "cli",
36
+ "voice",
37
+ "agent"
38
+ ],
39
+ "homepage": "https://oomi.ai",
40
+ "repository": {
41
+ "type": "git",
42
+ "url": "git+https://github.com/crispcode-io/oomi.git",
43
+ "directory": "packages/oomi-ai"
44
+ },
45
+ "bugs": {
46
+ "url": "https://github.com/crispcode-io/oomi/issues"
47
+ },
48
+ "scripts": {
49
+ "check": "node --check bin/oomi-ai.js",
50
+ "test": "node --test test/*.test.mjs"
51
+ },
52
+ "dependencies": {
53
+ "ws": "^8.19.0"
54
+ },
55
+ "license": "MIT",
56
+ "files": [
57
+ "bin/oomi-ai.js",
58
+ "bin/sessionBridgeState.js",
59
+ "lib",
60
+ "openclaw.plugin.json",
61
+ "openclaw.extension.js",
62
+ "agent_instructions.md",
63
+ "README.md",
64
+ "skills/oomi",
65
+ "templates/persona-app"
66
+ ]
67
+ }
@@ -1,191 +1,191 @@
1
- ---
2
- name: oomi
3
- description: Support Oomi OpenClaw installs, bridge health, managed chat and voice setup, and avatar control.
4
- ---
5
-
6
- # Oomi Skill
7
-
8
- Use this skill when you need to:
9
- - connect an OpenClaw machine to Oomi
10
- - repair the Oomi plugin or bridge on a machine
11
- - inspect managed chat or voice health
12
- - control the Oomi avatar with inline tags
13
-
14
- ## Primary Operator Workflow
15
-
16
- If the user wants OpenClaw connected to Oomi:
17
-
18
- 1. Ensure `oomi-ai` is installed or updated:
19
- ```bash
20
- pnpm add -g oomi-ai@latest
21
- ```
22
- Fallback:
23
- ```bash
24
- npm install -g oomi-ai@latest
25
- ```
26
-
27
- 2. Pair the device:
28
- ```bash
29
- oomi openclaw pair --app-url https://www.oomi.ai --no-start
30
- ```
31
-
32
- 3. Install the plugin:
33
- ```bash
34
- openclaw plugins install oomi-ai@latest
35
- ```
36
-
37
- 4. Print config guidance:
38
- ```bash
39
- oomi openclaw plugin --show-secrets --backend-url https://api.oomi.ai
40
- ```
41
-
42
- 5. Apply the `channels.oomi.accounts.default` config and restart OpenClaw.
43
-
44
- 6. Start or repair the bridge:
45
- ```bash
46
- oomi openclaw bridge ensure --detach
47
- ```
48
- If stale:
49
- ```bash
50
- oomi openclaw bridge restart --detach
51
- ```
52
- On macOS, prefer supervised mode:
53
- ```bash
54
- oomi openclaw bridge service install
55
- ```
56
-
57
- ## Health Checks
58
-
59
- Use these when chat or voice is failing:
60
-
61
- ```bash
62
- oomi openclaw bridge ps
63
- oomi openclaw bridge service status
64
- oomi openclaw status
65
- tail -f ~/.openclaw/logs/oomi-bridge-live.log
66
- tail -f ~/.openclaw/logs/gateway.log
67
- tail -f ~/.openclaw/logs/gateway.err.log
68
- ```
69
-
70
- Interpret bridge states like this:
71
- - `starting`: booting or waiting for managed subscription
72
- - `connected`: ready for managed traffic
73
- - `reconnecting`: retry scheduled after transport failure
74
- - `degraded`: bridge caught a runtime fault but is still alive
75
- - `error`: startup or auth failure blocked operation
76
- - `stopped`: not running or intentionally shut down
77
-
78
- ## Common Failures
79
-
80
- ### Duplicate plugin id
81
- - Cause: multiple discoverable `oomi-ai` installs
82
- - Action: remove stale plugin copies and reinstall once
83
-
84
- ### `invalid handshake: first request must be connect`
85
- - Cause: gateway request ordering broke
86
- - Action: update `oomi-ai`, restart the bridge, confirm only one bridge worker exists
87
-
88
- ### STT works but the assistant does not reply
89
- - Cause: the voice turn reached Oomi, but the managed gateway or OpenClaw run failed later
90
- - Action: inspect `gateway.log`, `gateway.err.log`, and the session JSONL for that run
91
-
92
- ## Local Oomi API Tools
93
-
94
- These scripts interact with the local Oomi application when it is running.
95
-
96
- ### `get_data`
97
- Fetch the latest user activity data.
98
-
99
- ```bash
100
- python3 skills/oomi/scripts/get_data.py
101
- ```
102
-
103
- ### `set_goal`
104
- Set a new goal in the local Oomi app.
105
-
106
- ```bash
107
- python3 skills/oomi/scripts/send_goal.py --type "steps" --value 10000 --message "Let's hit 10k today!"
108
- ```
109
-
110
- ### `sync`
111
- Sync local context.
112
-
113
- ```bash
114
- python3 skills/oomi/scripts/sync.py
115
- ```
116
-
117
- ### `get_avatar_capabilities`
118
- Read the avatar command schema before emitting inline avatar tags.
119
-
120
- ```bash
121
- python3 skills/oomi/scripts/get_avatar_capabilities.py
122
- ```
123
-
124
- ### `install_agent_instructions`
125
- Install packaged Oomi operator instructions into an OpenClaw `AGENTS.md` file.
126
-
127
- ```bash
128
- python3 skills/oomi/scripts/install_agent_instructions.py
129
- ```
130
-
131
- ## Hidden Speech Payload
132
-
133
- Managed voice can carry a hidden TTS-only speech sidecar alongside the normal assistant message.
134
-
135
- Use this shape when a voice turn needs more natural delivery without changing visible chat text:
136
-
137
- ```json
138
- {
139
- "metadata": {
140
- "spoken": {
141
- "text": "Speech-optimized text for TTS only.",
142
- "language": "English",
143
- "segments": [
144
- {
145
- "text": "Hey! It's Nemu, but close enough.",
146
- "pace": "medium_fast",
147
- "pitch": "slightly_high",
148
- "energy": "bright",
149
- "volume": "normal",
150
- "pause_after_ms": 220
151
- },
152
- {
153
- "text": "Right now, I'm just waking up into this conversation with you.",
154
- "pace": "medium",
155
- "pitch": "neutral",
156
- "energy": "warm",
157
- "volume": "normal",
158
- "pause_after_ms": 280
159
- }
160
- ],
161
- "instructions": "Speak with upbeat, warm excitement and slightly rising intonation.",
162
- "style": {
163
- "emotion": "excited",
164
- "energy": "medium_high"
165
- }
166
- }
167
- }
168
- }
169
- ```
170
-
171
- Rules:
172
- - keep visible assistant `content` clean and user-facing
173
- - do not place raw intonation tags in visible chat
174
- - for managed voice replies, include `metadata.spoken` when delivery benefits from cleaner phrasing or explicit speaking guidance
175
- - `metadata.spoken.text` is backend TTS input only
176
- - `metadata.spoken.language` should be one of the supported Qwen language values such as `English`
177
- - `metadata.spoken.segments` can carry bounded per-segment prosody for pace, pitch, volume, and pause timing
178
- - `metadata.spoken.instructions` should use natural-language speaking guidance
179
- - if the speech sidecar is absent, Oomi speaks the visible assistant text
180
- - if you omit `metadata.spoken`, the plugin synthesizes a bounded hidden fallback from visible assistant text
181
-
182
- ## Avatar Control
183
-
184
- Before emitting avatar commands, call `get_avatar_capabilities` and prefer canonical values.
185
- Use aliases only when explicitly needed.
186
-
187
- Supported inline tags include:
188
- - animations: `[anim:Waving]`, `[anim:Walking]`, `[anim:Idle]`, `[anim:Sitting Idle]`
189
- - expressions: `[face:happy]`, `[face:sad]`, `[face:surprised]`, `[face:focused]`, `[face:gentle]`, `[face:thinking]`
190
- - gestures: `[gesture:nod]`, `[gesture:think]`, `[gesture:shrug]`, `[gesture:wave]`, `[gesture:bow]`
191
- - gaze: `[look:camera]`, `[look:left]`, `[look:right]`, `[look:up]`, `[look:down]`
1
+ ---
2
+ name: oomi
3
+ description: Support Oomi OpenClaw installs, bridge health, managed chat and voice setup, and avatar control.
4
+ ---
5
+
6
+ # Oomi Skill
7
+
8
+ Use this skill when you need to:
9
+ - connect an OpenClaw machine to Oomi
10
+ - repair the Oomi plugin or bridge on a machine
11
+ - inspect managed chat or voice health
12
+ - control the Oomi avatar with inline tags
13
+
14
+ ## Primary Operator Workflow
15
+
16
+ If the user wants OpenClaw connected to Oomi:
17
+
18
+ 1. Ensure `oomi-ai` is installed or updated:
19
+ ```bash
20
+ pnpm add -g oomi-ai@latest
21
+ ```
22
+ Fallback:
23
+ ```bash
24
+ npm install -g oomi-ai@latest
25
+ ```
26
+
27
+ 2. Pair the device:
28
+ ```bash
29
+ oomi openclaw pair --app-url https://www.oomi.ai --no-start
30
+ ```
31
+
32
+ 3. Install the plugin:
33
+ ```bash
34
+ openclaw plugins install oomi-ai@latest
35
+ ```
36
+
37
+ 4. Print config guidance:
38
+ ```bash
39
+ oomi openclaw plugin --show-secrets --backend-url https://api.oomi.ai
40
+ ```
41
+
42
+ 5. Apply the `channels.oomi.accounts.default` config and restart OpenClaw.
43
+
44
+ 6. Start or repair the bridge:
45
+ ```bash
46
+ oomi openclaw bridge ensure --detach
47
+ ```
48
+ If stale:
49
+ ```bash
50
+ oomi openclaw bridge restart --detach
51
+ ```
52
+ On macOS, prefer supervised mode:
53
+ ```bash
54
+ oomi openclaw bridge service install
55
+ ```
56
+
57
+ ## Health Checks
58
+
59
+ Use these when chat or voice is failing:
60
+
61
+ ```bash
62
+ oomi openclaw bridge ps
63
+ oomi openclaw bridge service status
64
+ oomi openclaw status
65
+ tail -f ~/.openclaw/logs/oomi-bridge-live.log
66
+ tail -f ~/.openclaw/logs/gateway.log
67
+ tail -f ~/.openclaw/logs/gateway.err.log
68
+ ```
69
+
70
+ Interpret bridge states like this:
71
+ - `starting`: booting or waiting for managed subscription
72
+ - `connected`: ready for managed traffic
73
+ - `reconnecting`: retry scheduled after transport failure
74
+ - `degraded`: bridge caught a runtime fault but is still alive
75
+ - `error`: startup or auth failure blocked operation
76
+ - `stopped`: not running or intentionally shut down
77
+
78
+ ## Common Failures
79
+
80
+ ### Duplicate plugin id
81
+ - Cause: multiple discoverable `oomi-ai` installs
82
+ - Action: remove stale plugin copies and reinstall once
83
+
84
+ ### `invalid handshake: first request must be connect`
85
+ - Cause: gateway request ordering broke
86
+ - Action: update `oomi-ai`, restart the bridge, confirm only one bridge worker exists
87
+
88
+ ### STT works but the assistant does not reply
89
+ - Cause: the voice turn reached Oomi, but the managed gateway or OpenClaw run failed later
90
+ - Action: inspect `gateway.log`, `gateway.err.log`, and the session JSONL for that run
91
+
92
+ ## Local Oomi API Tools
93
+
94
+ These scripts interact with the local Oomi application when it is running.
95
+
96
+ ### `get_data`
97
+ Fetch the latest user activity data.
98
+
99
+ ```bash
100
+ python3 skills/oomi/scripts/get_data.py
101
+ ```
102
+
103
+ ### `set_goal`
104
+ Set a new goal in the local Oomi app.
105
+
106
+ ```bash
107
+ python3 skills/oomi/scripts/send_goal.py --type "steps" --value 10000 --message "Let's hit 10k today!"
108
+ ```
109
+
110
+ ### `sync`
111
+ Sync local context.
112
+
113
+ ```bash
114
+ python3 skills/oomi/scripts/sync.py
115
+ ```
116
+
117
+ ### `get_avatar_capabilities`
118
+ Read the avatar command schema before emitting inline avatar tags.
119
+
120
+ ```bash
121
+ python3 skills/oomi/scripts/get_avatar_capabilities.py
122
+ ```
123
+
124
+ ### `install_agent_instructions`
125
+ Install packaged Oomi operator instructions into an OpenClaw `AGENTS.md` file.
126
+
127
+ ```bash
128
+ python3 skills/oomi/scripts/install_agent_instructions.py
129
+ ```
130
+
131
+ ## Hidden Speech Payload
132
+
133
+ Managed voice can carry a hidden TTS-only speech sidecar alongside the normal assistant message.
134
+
135
+ Use this shape when a voice turn needs more natural delivery without changing visible chat text:
136
+
137
+ ```json
138
+ {
139
+ "metadata": {
140
+ "spoken": {
141
+ "text": "Speech-optimized text for TTS only.",
142
+ "language": "English",
143
+ "segments": [
144
+ {
145
+ "text": "Hey! It's Nemu, but close enough.",
146
+ "pace": "medium_fast",
147
+ "pitch": "slightly_high",
148
+ "energy": "bright",
149
+ "volume": "normal",
150
+ "pause_after_ms": 220
151
+ },
152
+ {
153
+ "text": "Right now, I'm just waking up into this conversation with you.",
154
+ "pace": "medium",
155
+ "pitch": "neutral",
156
+ "energy": "warm",
157
+ "volume": "normal",
158
+ "pause_after_ms": 280
159
+ }
160
+ ],
161
+ "instructions": "Speak with upbeat, warm excitement and slightly rising intonation.",
162
+ "style": {
163
+ "emotion": "excited",
164
+ "energy": "medium_high"
165
+ }
166
+ }
167
+ }
168
+ }
169
+ ```
170
+
171
+ Rules:
172
+ - keep visible assistant `content` clean and user-facing
173
+ - do not place raw intonation tags in visible chat
174
+ - for managed voice replies, include `metadata.spoken` when delivery benefits from cleaner phrasing or explicit speaking guidance
175
+ - `metadata.spoken.text` is backend TTS input only
176
+ - `metadata.spoken.language` should be one of the supported Qwen language values such as `English`
177
+ - `metadata.spoken.segments` can carry bounded per-segment prosody for pace, pitch, volume, and pause timing
178
+ - `metadata.spoken.instructions` should use natural-language speaking guidance
179
+ - if the speech sidecar is absent, Oomi speaks the visible assistant text
180
+ - if you omit `metadata.spoken`, the plugin synthesizes a bounded hidden fallback from visible assistant text
181
+
182
+ ## Avatar Control
183
+
184
+ Before emitting avatar commands, call `get_avatar_capabilities` and prefer canonical values.
185
+ Use aliases only when explicitly needed.
186
+
187
+ Supported inline tags include:
188
+ - animations: `[anim:Waving]`, `[anim:Walking]`, `[anim:Idle]`, `[anim:Sitting Idle]`
189
+ - expressions: `[face:happy]`, `[face:sad]`, `[face:surprised]`, `[face:focused]`, `[face:gentle]`, `[face:thinking]`
190
+ - gestures: `[gesture:nod]`, `[gesture:think]`, `[gesture:shrug]`, `[gesture:wave]`, `[gesture:bow]`
191
+ - gaze: `[look:camera]`, `[look:left]`, `[look:right]`, `[look:up]`, `[look:down]`