oomi-ai 0.2.50 → 0.3.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.
Files changed (88) hide show
  1. package/README.md +203 -507
  2. package/agent_instructions.md +244 -253
  3. package/bin/oomi-ai.js +4026 -5795
  4. package/bin/sessionBridgeState.js +78 -78
  5. package/lib/openclawPaths.js +70 -71
  6. package/lib/openclawProfile.js +216 -216
  7. package/lib/personaApiClient.js +133 -303
  8. package/lib/spokenMetadata.js +137 -137
  9. package/openclaw.extension.js +341 -341
  10. package/openclaw.plugin.json +17 -17
  11. package/package.json +59 -59
  12. package/persona-app/README.md +27 -0
  13. package/persona-app/registry/v1.json +63 -0
  14. package/persona-app/schema/persona-app.v1.schema.json +90 -0
  15. package/skills/oomi/SKILL.md +165 -182
  16. package/skills/oomi/agent_instructions.md +99 -80
  17. package/lib/channelPluginClient.js +0 -119
  18. package/lib/openclawDevGateway.js +0 -384
  19. package/lib/personaJobExecutor.js +0 -139
  20. package/lib/personaJobPoller.js +0 -112
  21. package/lib/personaPortAllocator.js +0 -36
  22. package/lib/personaRuntimeManager.js +0 -496
  23. package/lib/personaRuntimeProcess.js +0 -924
  24. package/lib/personaRuntimeRegistry.js +0 -67
  25. package/lib/personaRuntimeSupervisor.js +0 -330
  26. package/lib/scaffold.js +0 -108
  27. package/lib/template.js +0 -45
  28. package/skills/oomi/config.json +0 -3
  29. package/skills/oomi/scripts/get_avatar_capabilities.py +0 -40
  30. package/skills/oomi/scripts/get_data.py +0 -49
  31. package/skills/oomi/scripts/install_agent_instructions.py +0 -78
  32. package/skills/oomi/scripts/send_goal.py +0 -53
  33. package/skills/oomi/scripts/sync.py +0 -46
  34. package/skills/oomi/setup.py +0 -41
  35. package/templates/persona-app/.env.example +0 -8
  36. package/templates/persona-app/README.md +0 -58
  37. package/templates/persona-app/eslint.config.js +0 -28
  38. package/templates/persona-app/index.html +0 -18
  39. package/templates/persona-app/oomi.runtime.json +0 -13
  40. package/templates/persona-app/package.json +0 -44
  41. package/templates/persona-app/persona/brief.md +0 -14
  42. package/templates/persona-app/persona.json +0 -14
  43. package/templates/persona-app/public/manifest.webmanifest +0 -8
  44. package/templates/persona-app/public/oomi.health.json +0 -6
  45. package/templates/persona-app/src/App.css +0 -379
  46. package/templates/persona-app/src/App.tsx +0 -17
  47. package/templates/persona-app/src/index.css +0 -53
  48. package/templates/persona-app/src/main.tsx +0 -23
  49. package/templates/persona-app/src/pages/HomePage.tsx +0 -127
  50. package/templates/persona-app/src/pages/ScenePage.tsx +0 -158
  51. package/templates/persona-app/src/persona/config.ts +0 -6
  52. package/templates/persona-app/src/persona/notes.ts +0 -10
  53. package/templates/persona-app/src/spatial.ts +0 -82
  54. package/templates/persona-app/src/vite-env.d.ts +0 -3
  55. package/templates/persona-app/template.json +0 -13
  56. package/templates/persona-app/tsconfig.app.json +0 -23
  57. package/templates/persona-app/tsconfig.json +0 -7
  58. package/templates/persona-app/tsconfig.node.json +0 -21
  59. package/templates/persona-app/vendor/webspatial/FORK.md +0 -6
  60. package/templates/persona-app/vendor/webspatial/core-sdk/LICENSE +0 -21
  61. package/templates/persona-app/vendor/webspatial/core-sdk/dist/iife/index.d.ts +0 -906
  62. package/templates/persona-app/vendor/webspatial/core-sdk/dist/iife/index.global.js +0 -75
  63. package/templates/persona-app/vendor/webspatial/core-sdk/dist/iife/index.global.js.map +0 -1
  64. package/templates/persona-app/vendor/webspatial/core-sdk/dist/index.d.ts +0 -906
  65. package/templates/persona-app/vendor/webspatial/core-sdk/dist/index.js +0 -3131
  66. package/templates/persona-app/vendor/webspatial/core-sdk/dist/index.js.map +0 -1
  67. package/templates/persona-app/vendor/webspatial/core-sdk/package.json +0 -45
  68. package/templates/persona-app/vendor/webspatial/react-sdk/LICENSE +0 -21
  69. package/templates/persona-app/vendor/webspatial/react-sdk/dist/default/index.d.ts +0 -365
  70. package/templates/persona-app/vendor/webspatial/react-sdk/dist/default/index.js +0 -4167
  71. package/templates/persona-app/vendor/webspatial/react-sdk/dist/default/index.js.map +0 -1
  72. package/templates/persona-app/vendor/webspatial/react-sdk/dist/jsx/jsx-dev-runtime.d.ts +0 -82
  73. package/templates/persona-app/vendor/webspatial/react-sdk/dist/jsx/jsx-dev-runtime.js +0 -66
  74. package/templates/persona-app/vendor/webspatial/react-sdk/dist/jsx/jsx-dev-runtime.js.map +0 -1
  75. package/templates/persona-app/vendor/webspatial/react-sdk/dist/jsx/jsx-dev-runtime.web.d.ts +0 -2
  76. package/templates/persona-app/vendor/webspatial/react-sdk/dist/jsx/jsx-dev-runtime.web.js +0 -18
  77. package/templates/persona-app/vendor/webspatial/react-sdk/dist/jsx/jsx-dev-runtime.web.js.map +0 -1
  78. package/templates/persona-app/vendor/webspatial/react-sdk/dist/jsx/jsx-runtime.d.ts +0 -5
  79. package/templates/persona-app/vendor/webspatial/react-sdk/dist/jsx/jsx-runtime.js +0 -66
  80. package/templates/persona-app/vendor/webspatial/react-sdk/dist/jsx/jsx-runtime.js.map +0 -1
  81. package/templates/persona-app/vendor/webspatial/react-sdk/dist/jsx/jsx-runtime.web.d.ts +0 -1
  82. package/templates/persona-app/vendor/webspatial/react-sdk/dist/jsx/jsx-runtime.web.js +0 -18
  83. package/templates/persona-app/vendor/webspatial/react-sdk/dist/jsx/jsx-runtime.web.js.map +0 -1
  84. package/templates/persona-app/vendor/webspatial/react-sdk/dist/web/index.d.ts +0 -365
  85. package/templates/persona-app/vendor/webspatial/react-sdk/dist/web/index.js +0 -4207
  86. package/templates/persona-app/vendor/webspatial/react-sdk/dist/web/index.js.map +0 -1
  87. package/templates/persona-app/vendor/webspatial/react-sdk/package.json +0 -94
  88. package/templates/persona-app/vite.config.ts +0 -31
@@ -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.50",
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, bridge, voice, and persona app API integration for OpenClaw.",
5
+ "version": "0.3.0",
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,34 +1,34 @@
1
- {
2
- "name": "oomi-ai",
3
- "version": "0.2.50",
4
- "description": "Managed Oomi chat, voice bridge, and XR-first persona scaffolding for OpenClaw",
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
- },
1
+ {
2
+ "name": "oomi-ai",
3
+ "version": "0.3.0",
4
+ "description": "Managed Oomi channel, bridge, voice, and persona app API tooling for OpenClaw",
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
32
  "keywords": [
33
33
  "oomi",
34
34
  "openclaw",
@@ -37,38 +37,38 @@
37
37
  "voice",
38
38
  "agent",
39
39
  "persona",
40
- "webspatial",
41
- "xr",
42
- "androidxr"
40
+ "api"
43
41
  ],
44
42
  "homepage": "https://www.oomi.ai",
45
- "repository": {
46
- "type": "git",
47
- "url": "git+https://github.com/crispcode-io/oomi.git",
48
- "directory": "packages/oomi-ai"
49
- },
50
- "bugs": {
51
- "url": "https://github.com/crispcode-io/oomi/issues"
52
- },
53
- "scripts": {
54
- "check": "node --check bin/oomi-ai.js",
55
- "test": "node --test test/*.test.mjs"
56
- },
57
- "dependencies": {
58
- "ws": "^8.19.0"
59
- },
60
- "license": "MIT",
61
- "files": [
62
- "bin/oomi-ai.js",
63
- "bin/sessionBridgeState.js",
64
- "lib",
65
- "openclaw.plugin.json",
43
+ "repository": {
44
+ "type": "git",
45
+ "url": "git+https://github.com/crispcode-io/oomi.git",
46
+ "directory": "packages/oomi-ai"
47
+ },
48
+ "bugs": {
49
+ "url": "https://github.com/crispcode-io/oomi/issues"
50
+ },
51
+ "scripts": {
52
+ "check": "node --check bin/oomi-ai.js",
53
+ "test": "node --test test/*.test.mjs"
54
+ },
55
+ "dependencies": {
56
+ "ws": "^8.19.0"
57
+ },
58
+ "license": "MIT",
59
+ "files": [
60
+ "bin/oomi-ai.js",
61
+ "bin/sessionBridgeState.js",
62
+ "lib/openclawPaths.js",
63
+ "lib/openclawProfile.js",
64
+ "lib/personaApiClient.js",
65
+ "lib/spokenMetadata.js",
66
+ "openclaw.plugin.json",
66
67
  "openclaw.extension.js",
67
68
  "agent_instructions.md",
68
69
  "README.md",
69
- "skills/oomi",
70
- "templates/persona-app",
71
- "templates/persona-app/vendor/webspatial/core-sdk/dist",
72
- "templates/persona-app/vendor/webspatial/react-sdk/dist"
70
+ "persona-app",
71
+ "skills/oomi/SKILL.md",
72
+ "skills/oomi/agent_instructions.md"
73
73
  ]
74
74
  }
@@ -0,0 +1,27 @@
1
+ # Persona App Definitions
2
+
3
+ Persona apps are composed from approved templates, components, data bindings, actions, and permissions.
4
+
5
+ The agent should inspect and update account-linked persona app state through approved Oomi API actions. It should not generate arbitrary client code for any client target.
6
+
7
+ Client renderers are target-specific:
8
+
9
+ - iOS renders approved definitions with native SwiftUI components.
10
+ - Android should render the same definitions with native components.
11
+ - Web should render the same definitions with React components.
12
+ - Spatial clients can render the same definitions directly or through a target-specific projection.
13
+
14
+ The current files are the first shared contract for the vertical slice:
15
+
16
+ - `schema/persona-app.v1.schema.json`
17
+ - `registry/v1.json`
18
+
19
+ OpenClaw agents should use the packaged CLI to inspect and update account-linked persona apps:
20
+
21
+ ```bash
22
+ oomi persona-apps list --json
23
+ oomi persona-apps show fitness-today --json
24
+ oomi persona-apps apply-action fitness-today --action fitness.complete_workout --payload-json '{"goalId":"easy-run","minutes":20}' --json
25
+ ```
26
+
27
+ If a persona app is missing, ask the user to add it from the Oomi client first so platform-specific permissions and hydration can run.
@@ -0,0 +1,63 @@
1
+ {
2
+ "schemaVersion": "persona-app.v1",
3
+ "registryVersion": "2026-04-23.1",
4
+ "sharedComponents": [
5
+ {
6
+ "type": "shared.personaHero",
7
+ "description": "Domain hero with title, subtitle, and a primary metric.",
8
+ "targets": ["ios", "android", "web", "webspatial"]
9
+ },
10
+ {
11
+ "type": "shared.oomiNote",
12
+ "description": "A primary-persona note with optional actions.",
13
+ "targets": ["ios", "android", "web", "webspatial"]
14
+ }
15
+ ],
16
+ "personaPacks": [
17
+ {
18
+ "personaType": "fitness",
19
+ "displayName": "Fitness",
20
+ "components": [
21
+ {
22
+ "type": "fitness.todaySummary",
23
+ "description": "Daily movement summary with progress, steps, and sleep context.",
24
+ "targets": ["ios", "android", "web"]
25
+ },
26
+ {
27
+ "type": "fitness.goalChecklist",
28
+ "description": "Checklist of suggested goals for today.",
29
+ "targets": ["ios", "android", "web"]
30
+ }
31
+ ],
32
+ "actions": [
33
+ {
34
+ "id": "fitness.complete_goal",
35
+ "description": "Marks one fitness goal complete.",
36
+ "payloadSchema": {
37
+ "type": "object",
38
+ "required": ["goalId"],
39
+ "properties": {
40
+ "goalId": { "type": "string" }
41
+ }
42
+ }
43
+ },
44
+ {
45
+ "id": "fitness.complete_workout",
46
+ "description": "Records a completed workout and updates today's movement state.",
47
+ "payloadSchema": {
48
+ "type": "object",
49
+ "properties": {
50
+ "goalId": { "type": "string" },
51
+ "minutes": { "type": "integer", "minimum": 1 }
52
+ }
53
+ }
54
+ }
55
+ ],
56
+ "permissions": [
57
+ "fitness.state.read",
58
+ "fitness.state.write"
59
+ ]
60
+ }
61
+ ]
62
+ }
63
+
@@ -0,0 +1,90 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://oomi.ai/schemas/persona-app.v1.schema.json",
4
+ "title": "Oomi Persona App Definition",
5
+ "type": "object",
6
+ "required": ["schemaVersion", "title", "summary", "tabs"],
7
+ "properties": {
8
+ "schemaVersion": {
9
+ "const": "persona-app.v1"
10
+ },
11
+ "title": {
12
+ "type": "string",
13
+ "minLength": 1
14
+ },
15
+ "summary": {
16
+ "type": "string"
17
+ },
18
+ "theme": {
19
+ "type": "object",
20
+ "additionalProperties": true
21
+ },
22
+ "tabs": {
23
+ "type": "array",
24
+ "minItems": 1,
25
+ "items": {
26
+ "type": "object",
27
+ "required": ["id", "title", "components"],
28
+ "properties": {
29
+ "id": {
30
+ "type": "string",
31
+ "pattern": "^[a-z][a-z0-9_-]*$"
32
+ },
33
+ "title": {
34
+ "type": "string",
35
+ "minLength": 1
36
+ },
37
+ "components": {
38
+ "type": "array",
39
+ "items": {
40
+ "type": "object",
41
+ "required": ["id", "type"],
42
+ "properties": {
43
+ "id": {
44
+ "type": "string",
45
+ "pattern": "^[a-z][a-z0-9_-]*$"
46
+ },
47
+ "type": {
48
+ "type": "string",
49
+ "pattern": "^[a-z][a-z0-9_-]*(\\.[a-z][a-z0-9_-]*)+$"
50
+ },
51
+ "title": {
52
+ "type": "string"
53
+ },
54
+ "dataKey": {
55
+ "type": "string"
56
+ },
57
+ "props": {
58
+ "type": "object",
59
+ "additionalProperties": true
60
+ }
61
+ },
62
+ "additionalProperties": false
63
+ }
64
+ }
65
+ },
66
+ "additionalProperties": false
67
+ }
68
+ },
69
+ "actions": {
70
+ "type": "array",
71
+ "items": {
72
+ "type": "object",
73
+ "required": ["id", "label"],
74
+ "properties": {
75
+ "id": {
76
+ "type": "string"
77
+ },
78
+ "label": {
79
+ "type": "string"
80
+ },
81
+ "requiresConfirmation": {
82
+ "type": "boolean"
83
+ }
84
+ },
85
+ "additionalProperties": false
86
+ }
87
+ }
88
+ },
89
+ "additionalProperties": false
90
+ }