@dxos/plugin-observability 0.8.4-main.84f28bd → 0.8.4-main.9735255

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 (201) hide show
  1. package/dist/lib/browser/app-graph-builder-6KDHLPUO.mjs +44 -0
  2. package/dist/lib/browser/app-graph-builder-6KDHLPUO.mjs.map +7 -0
  3. package/dist/lib/browser/chunk-3XZDP7JS.mjs +16 -0
  4. package/dist/lib/browser/chunk-3XZDP7JS.mjs.map +7 -0
  5. package/dist/lib/browser/chunk-PYNLPSSZ.mjs +133 -0
  6. package/dist/lib/browser/chunk-PYNLPSSZ.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-SN7DIHQG.mjs +102 -0
  8. package/dist/lib/browser/chunk-SN7DIHQG.mjs.map +7 -0
  9. package/dist/lib/browser/cli/index.mjs +23 -0
  10. package/dist/lib/browser/cli/index.mjs.map +7 -0
  11. package/dist/lib/browser/client-ready-YWKHC5S2.mjs +107 -0
  12. package/dist/lib/browser/client-ready-YWKHC5S2.mjs.map +7 -0
  13. package/dist/lib/browser/index.mjs +72 -104
  14. package/dist/lib/browser/index.mjs.map +4 -4
  15. package/dist/lib/browser/meta.json +1 -1
  16. package/dist/lib/browser/operation-resolver-4ROZET3B.mjs +82 -0
  17. package/dist/lib/browser/operation-resolver-4ROZET3B.mjs.map +7 -0
  18. package/dist/lib/browser/react-surface-SJTESQAF.mjs +37 -0
  19. package/dist/lib/browser/react-surface-SJTESQAF.mjs.map +7 -0
  20. package/dist/lib/browser/settings-SQ4ICR7F.mjs +35 -0
  21. package/dist/lib/browser/settings-SQ4ICR7F.mjs.map +7 -0
  22. package/dist/lib/browser/state-IKCFXHYV.mjs +31 -0
  23. package/dist/lib/browser/state-IKCFXHYV.mjs.map +7 -0
  24. package/dist/lib/browser/types/index.mjs +18 -0
  25. package/dist/lib/node-esm/app-graph-builder-4YHKY4SP.mjs +45 -0
  26. package/dist/lib/node-esm/app-graph-builder-4YHKY4SP.mjs.map +7 -0
  27. package/dist/lib/node-esm/chunk-2ECMMPZY.mjs +18 -0
  28. package/dist/lib/node-esm/chunk-2ECMMPZY.mjs.map +7 -0
  29. package/dist/lib/node-esm/chunk-4T4N2NJZ.mjs +134 -0
  30. package/dist/lib/node-esm/chunk-4T4N2NJZ.mjs.map +7 -0
  31. package/dist/lib/node-esm/chunk-HNMV7ZZZ.mjs +103 -0
  32. package/dist/lib/node-esm/chunk-HNMV7ZZZ.mjs.map +7 -0
  33. package/dist/lib/node-esm/cli/index.mjs +24 -0
  34. package/dist/lib/node-esm/cli/index.mjs.map +7 -0
  35. package/dist/lib/node-esm/client-ready-YLYG6F6H.mjs +108 -0
  36. package/dist/lib/node-esm/client-ready-YLYG6F6H.mjs.map +7 -0
  37. package/dist/lib/node-esm/index.mjs +72 -104
  38. package/dist/lib/node-esm/index.mjs.map +4 -4
  39. package/dist/lib/node-esm/meta.json +1 -1
  40. package/dist/lib/node-esm/operation-resolver-UI7ZINXR.mjs +83 -0
  41. package/dist/lib/node-esm/operation-resolver-UI7ZINXR.mjs.map +7 -0
  42. package/dist/lib/node-esm/react-surface-D53VLGHY.mjs +38 -0
  43. package/dist/lib/node-esm/react-surface-D53VLGHY.mjs.map +7 -0
  44. package/dist/lib/node-esm/settings-WIRCHLWE.mjs +36 -0
  45. package/dist/lib/node-esm/settings-WIRCHLWE.mjs.map +7 -0
  46. package/dist/lib/node-esm/state-MQR4PNOT.mjs +32 -0
  47. package/dist/lib/node-esm/state-MQR4PNOT.mjs.map +7 -0
  48. package/dist/lib/node-esm/types/index.mjs +19 -0
  49. package/dist/types/src/ObservabilityPlugin.d.ts +4 -2
  50. package/dist/types/src/ObservabilityPlugin.d.ts.map +1 -1
  51. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +6 -0
  52. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +1 -0
  53. package/dist/types/src/capabilities/app-graph-builder/index.d.ts +3 -0
  54. package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +1 -0
  55. package/dist/types/src/capabilities/client-ready/client-ready.d.ts +10 -0
  56. package/dist/types/src/capabilities/client-ready/client-ready.d.ts.map +1 -0
  57. package/dist/types/src/capabilities/client-ready/index.d.ts +6 -0
  58. package/dist/types/src/capabilities/client-ready/index.d.ts.map +1 -0
  59. package/dist/types/src/capabilities/index.d.ts +6 -16
  60. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  61. package/dist/types/src/capabilities/operation-resolver/index.d.ts +5 -0
  62. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -0
  63. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +7 -0
  64. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -0
  65. package/dist/types/src/capabilities/react-surface/index.d.ts +3 -0
  66. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -0
  67. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +5 -0
  68. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -0
  69. package/dist/types/src/capabilities/settings/index.d.ts +7 -0
  70. package/dist/types/src/capabilities/settings/index.d.ts.map +1 -0
  71. package/dist/types/src/capabilities/settings/settings.d.ts +9 -0
  72. package/dist/types/src/capabilities/settings/settings.d.ts.map +1 -0
  73. package/dist/types/src/capabilities/state/index.d.ts +11 -0
  74. package/dist/types/src/capabilities/state/index.d.ts.map +1 -0
  75. package/dist/types/src/capabilities/state/state.d.ts +13 -0
  76. package/dist/types/src/capabilities/state/state.d.ts.map +1 -0
  77. package/dist/types/src/cli/index.d.ts +2 -0
  78. package/dist/types/src/cli/index.d.ts.map +1 -0
  79. package/dist/types/src/cli/plugin.d.ts +3 -0
  80. package/dist/types/src/cli/plugin.d.ts.map +1 -0
  81. package/dist/types/src/components/FeedbackForm.d.ts +3 -3
  82. package/dist/types/src/components/FeedbackForm.d.ts.map +1 -1
  83. package/dist/types/src/components/FeedbackForm.stories.d.ts +34 -0
  84. package/dist/types/src/components/FeedbackForm.stories.d.ts.map +1 -0
  85. package/dist/types/src/components/HelpContainer.d.ts.map +1 -1
  86. package/dist/types/src/components/ObservabilitySettings.d.ts +5 -3
  87. package/dist/types/src/components/ObservabilitySettings.d.ts.map +1 -1
  88. package/dist/types/src/index.d.ts +1 -2
  89. package/dist/types/src/index.d.ts.map +1 -1
  90. package/dist/types/src/meta.d.ts +2 -3
  91. package/dist/types/src/meta.d.ts.map +1 -1
  92. package/dist/types/src/translations.d.ts +3 -2
  93. package/dist/types/src/translations.d.ts.map +1 -1
  94. package/dist/types/src/types/capabilities.d.ts +27 -0
  95. package/dist/types/src/types/capabilities.d.ts.map +1 -0
  96. package/dist/types/src/types/events.d.ts +6 -0
  97. package/dist/types/src/types/events.d.ts.map +1 -0
  98. package/dist/types/src/types/index.d.ts +4 -0
  99. package/dist/types/src/types/index.d.ts.map +1 -0
  100. package/dist/types/src/types/schema.d.ts +61 -0
  101. package/dist/types/src/types/schema.d.ts.map +1 -0
  102. package/dist/types/tsconfig.tsbuildinfo +1 -1
  103. package/package.json +50 -39
  104. package/src/ObservabilityPlugin.ts +54 -51
  105. package/src/capabilities/app-graph-builder/app-graph-builder.ts +42 -0
  106. package/src/capabilities/app-graph-builder/index.ts +7 -0
  107. package/src/capabilities/client-ready/client-ready.ts +97 -0
  108. package/src/capabilities/client-ready/index.ts +7 -0
  109. package/src/capabilities/index.ts +6 -10
  110. package/src/capabilities/operation-resolver/index.ts +7 -0
  111. package/src/capabilities/operation-resolver/operation-resolver.ts +82 -0
  112. package/src/capabilities/react-surface/index.ts +7 -0
  113. package/src/capabilities/react-surface/react-surface.tsx +34 -0
  114. package/src/capabilities/settings/index.ts +7 -0
  115. package/src/capabilities/settings/settings.ts +33 -0
  116. package/src/capabilities/state/index.ts +7 -0
  117. package/src/capabilities/state/state.ts +30 -0
  118. package/src/cli/index.ts +5 -0
  119. package/src/cli/plugin.ts +27 -0
  120. package/src/components/FeedbackForm.stories.tsx +33 -0
  121. package/src/components/FeedbackForm.tsx +13 -69
  122. package/src/components/HelpContainer.tsx +20 -24
  123. package/src/components/ObservabilitySettings.tsx +28 -23
  124. package/src/index.ts +1 -2
  125. package/src/meta.ts +8 -5
  126. package/src/translations.ts +3 -2
  127. package/src/types/capabilities.ts +34 -0
  128. package/src/types/events.ts +14 -0
  129. package/src/types/index.ts +7 -0
  130. package/src/types/schema.ts +78 -0
  131. package/dist/lib/browser/app-graph-builder-DCOBBL5B.mjs +0 -43
  132. package/dist/lib/browser/app-graph-builder-DCOBBL5B.mjs.map +0 -7
  133. package/dist/lib/browser/chunk-57RVSKYP.mjs +0 -13
  134. package/dist/lib/browser/chunk-57RVSKYP.mjs.map +0 -7
  135. package/dist/lib/browser/chunk-D7WLH4F5.mjs +0 -179
  136. package/dist/lib/browser/chunk-D7WLH4F5.mjs.map +0 -7
  137. package/dist/lib/browser/chunk-N3VKS2LF.mjs +0 -175
  138. package/dist/lib/browser/chunk-N3VKS2LF.mjs.map +0 -7
  139. package/dist/lib/browser/chunk-UUOBAWT2.mjs +0 -18
  140. package/dist/lib/browser/chunk-UUOBAWT2.mjs.map +0 -7
  141. package/dist/lib/browser/client-ready-KK3EWEBV.mjs +0 -102
  142. package/dist/lib/browser/client-ready-KK3EWEBV.mjs.map +0 -7
  143. package/dist/lib/browser/intent-resolver-A4EV25OK.mjs +0 -77
  144. package/dist/lib/browser/intent-resolver-A4EV25OK.mjs.map +0 -7
  145. package/dist/lib/browser/react-surface-FUXMXVYO.mjs +0 -32
  146. package/dist/lib/browser/react-surface-FUXMXVYO.mjs.map +0 -7
  147. package/dist/lib/browser/settings-OSMKJOUM.mjs +0 -25
  148. package/dist/lib/browser/settings-OSMKJOUM.mjs.map +0 -7
  149. package/dist/lib/browser/state-VIOQS2IL.mjs +0 -26
  150. package/dist/lib/browser/state-VIOQS2IL.mjs.map +0 -7
  151. package/dist/lib/browser/types.mjs +0 -10
  152. package/dist/lib/node-esm/app-graph-builder-6JT2RPVM.mjs +0 -44
  153. package/dist/lib/node-esm/app-graph-builder-6JT2RPVM.mjs.map +0 -7
  154. package/dist/lib/node-esm/chunk-4BFWCQJ5.mjs +0 -180
  155. package/dist/lib/node-esm/chunk-4BFWCQJ5.mjs.map +0 -7
  156. package/dist/lib/node-esm/chunk-7XR7KMAA.mjs +0 -15
  157. package/dist/lib/node-esm/chunk-7XR7KMAA.mjs.map +0 -7
  158. package/dist/lib/node-esm/chunk-JTKEM7PT.mjs +0 -19
  159. package/dist/lib/node-esm/chunk-JTKEM7PT.mjs.map +0 -7
  160. package/dist/lib/node-esm/chunk-RG73SOOD.mjs +0 -176
  161. package/dist/lib/node-esm/chunk-RG73SOOD.mjs.map +0 -7
  162. package/dist/lib/node-esm/client-ready-EZVAX7D5.mjs +0 -103
  163. package/dist/lib/node-esm/client-ready-EZVAX7D5.mjs.map +0 -7
  164. package/dist/lib/node-esm/intent-resolver-7HLSOM7X.mjs +0 -78
  165. package/dist/lib/node-esm/intent-resolver-7HLSOM7X.mjs.map +0 -7
  166. package/dist/lib/node-esm/react-surface-TYVAHN2E.mjs +0 -33
  167. package/dist/lib/node-esm/react-surface-TYVAHN2E.mjs.map +0 -7
  168. package/dist/lib/node-esm/settings-S2OXVO3G.mjs +0 -26
  169. package/dist/lib/node-esm/settings-S2OXVO3G.mjs.map +0 -7
  170. package/dist/lib/node-esm/state-J2WS6L64.mjs +0 -27
  171. package/dist/lib/node-esm/state-J2WS6L64.mjs.map +0 -7
  172. package/dist/lib/node-esm/types.mjs +0 -11
  173. package/dist/types/src/capabilities/app-graph-builder.d.ts +0 -4
  174. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +0 -1
  175. package/dist/types/src/capabilities/capabilities.d.ts +0 -12
  176. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  177. package/dist/types/src/capabilities/client-ready.d.ts +0 -10
  178. package/dist/types/src/capabilities/client-ready.d.ts.map +0 -1
  179. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -7
  180. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  181. package/dist/types/src/capabilities/react-surface.d.ts +0 -4
  182. package/dist/types/src/capabilities/react-surface.d.ts.map +0 -1
  183. package/dist/types/src/capabilities/settings.d.ts +0 -4
  184. package/dist/types/src/capabilities/settings.d.ts.map +0 -1
  185. package/dist/types/src/capabilities/state.d.ts +0 -6
  186. package/dist/types/src/capabilities/state.d.ts.map +0 -1
  187. package/dist/types/src/events.d.ts +0 -5
  188. package/dist/types/src/events.d.ts.map +0 -1
  189. package/dist/types/src/types.d.ts +0 -286
  190. package/dist/types/src/types.d.ts.map +0 -1
  191. package/src/capabilities/app-graph-builder.ts +0 -45
  192. package/src/capabilities/capabilities.ts +0 -22
  193. package/src/capabilities/client-ready.ts +0 -97
  194. package/src/capabilities/intent-resolver.ts +0 -68
  195. package/src/capabilities/react-surface.tsx +0 -27
  196. package/src/capabilities/settings.ts +0 -21
  197. package/src/capabilities/state.ts +0 -21
  198. package/src/events.ts +0 -14
  199. package/src/types.ts +0 -203
  200. /package/dist/lib/browser/{types.mjs.map → types/index.mjs.map} +0 -0
  201. /package/dist/lib/node-esm/{types.mjs.map → types/index.mjs.map} +0 -0
package/package.json CHANGED
@@ -1,30 +1,42 @@
1
1
  {
2
2
  "name": "@dxos/plugin-observability",
3
- "version": "0.8.4-main.84f28bd",
3
+ "version": "0.8.4-main.9735255",
4
4
  "description": "DXOS app framework plugin for hooking up app observability",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/dxos/dxos"
10
+ },
7
11
  "license": "MIT",
8
12
  "author": "DXOS.org",
9
13
  "sideEffects": true,
10
14
  "type": "module",
11
15
  "exports": {
12
16
  ".": {
17
+ "source": "./src/index.ts",
13
18
  "types": "./dist/types/src/index.d.ts",
14
19
  "browser": "./dist/lib/browser/index.mjs",
15
20
  "node": "./dist/lib/node-esm/index.mjs"
16
21
  },
22
+ "./cli": {
23
+ "source": "./src/cli/index.ts",
24
+ "types": "./dist/types/src/cli/index.d.ts",
25
+ "browser": "./dist/lib/browser/cli/index.mjs",
26
+ "node": "./dist/lib/node-esm/cli/index.mjs"
27
+ },
17
28
  "./types": {
18
- "types": "./dist/types/src/types.d.ts",
19
- "browser": "./dist/lib/browser/types.mjs",
20
- "node": "./dist/lib/node-esm/types.mjs"
29
+ "source": "./src/types/index.ts",
30
+ "types": "./dist/types/src/types/index.d.ts",
31
+ "browser": "./dist/lib/browser/types/index.mjs",
32
+ "node": "./dist/lib/node-esm/types/index.mjs"
21
33
  }
22
34
  },
23
35
  "types": "dist/types/src/index.d.ts",
24
36
  "typesVersions": {
25
37
  "*": {
26
38
  "types": [
27
- "dist/types/src/types.d.ts"
39
+ "dist/types/src/types/index.d.ts"
28
40
  ]
29
41
  }
30
42
  },
@@ -33,45 +45,44 @@
33
45
  "src"
34
46
  ],
35
47
  "dependencies": {
36
- "@preact-signals/safe-react": "^0.9.0",
37
- "@preact/signals-core": "^1.9.0",
38
- "effect": "3.16.13",
48
+ "@effect-atom/atom": "^0.4.13",
49
+ "@effect-atom/atom-react": "^0.4.6",
50
+ "effect": "3.19.11",
39
51
  "localforage": "^1.10.0",
40
- "@dxos/app-framework": "0.8.4-main.84f28bd",
41
- "@dxos/async": "0.8.4-main.84f28bd",
42
- "@dxos/echo": "0.8.4-main.84f28bd",
43
- "@dxos/live-object": "0.8.4-main.84f28bd",
44
- "@dxos/invariant": "0.8.4-main.84f28bd",
45
- "@dxos/echo-schema": "0.8.4-main.84f28bd",
46
- "@dxos/context": "0.8.4-main.84f28bd",
47
- "@dxos/local-storage": "0.8.4-main.84f28bd",
48
- "@dxos/log": "0.8.4-main.84f28bd",
49
- "@dxos/observability": "0.8.4-main.84f28bd",
50
- "@dxos/plugin-graph": "0.8.4-main.84f28bd",
51
- "@dxos/protocols": "0.8.4-main.84f28bd",
52
- "@dxos/react-client": "0.8.4-main.84f28bd",
53
- "@dxos/react-ui-form": "0.8.4-main.84f28bd",
54
- "@dxos/react-ui-stack": "0.8.4-main.84f28bd",
55
- "@dxos/util": "0.8.4-main.84f28bd"
52
+ "@dxos/app-framework": "0.8.4-main.9735255",
53
+ "@dxos/async": "0.8.4-main.9735255",
54
+ "@dxos/context": "0.8.4-main.9735255",
55
+ "@dxos/echo": "0.8.4-main.9735255",
56
+ "@dxos/invariant": "0.8.4-main.9735255",
57
+ "@dxos/log": "0.8.4-main.9735255",
58
+ "@dxos/effect": "0.8.4-main.9735255",
59
+ "@dxos/operation": "0.8.4-main.9735255",
60
+ "@dxos/plugin-graph": "0.8.4-main.9735255",
61
+ "@dxos/observability": "0.8.4-main.9735255",
62
+ "@dxos/protocols": "0.8.4-main.9735255",
63
+ "@dxos/react-client": "0.8.4-main.9735255",
64
+ "@dxos/react-ui-form": "0.8.4-main.9735255",
65
+ "@dxos/util": "0.8.4-main.9735255",
66
+ "@dxos/react-ui-stack": "0.8.4-main.9735255"
56
67
  },
57
68
  "devDependencies": {
58
- "@effect-rx/rx-react": "0.38.0",
59
- "@effect/platform": "0.88.0",
60
- "@types/react": "~18.2.0",
61
- "react": "~18.2.0",
62
- "vite": "5.4.7",
63
- "@dxos/react-ui-theme": "0.8.4-main.84f28bd",
64
- "@dxos/react-ui": "0.8.4-main.84f28bd",
65
- "@dxos/storybook-utils": "0.8.4-main.84f28bd"
69
+ "@effect-atom/atom-react": "^0.4.6",
70
+ "@effect/platform": "0.93.6",
71
+ "@types/react": "~19.2.7",
72
+ "react": "~19.2.3",
73
+ "vite": "7.1.9",
74
+ "@dxos/react-ui": "0.8.4-main.9735255",
75
+ "@dxos/storybook-utils": "0.8.4-main.9735255",
76
+ "@dxos/ui-theme": "0.8.4-main.9735255"
66
77
  },
67
78
  "peerDependencies": {
68
- "@effect-rx/rx-react": "^0.34.1",
69
- "@effect/platform": "^0.80.12",
70
- "effect": "^3.13.3",
71
- "react": "~18.2.0",
72
- "react-dom": "~18.2.0",
73
- "@dxos/react-ui": "0.8.4-main.84f28bd",
74
- "@dxos/react-ui-theme": "0.8.4-main.84f28bd"
79
+ "@effect-atom/atom-react": "^0.4.6",
80
+ "@effect/platform": "0.93.6",
81
+ "effect": "3.19.11",
82
+ "react": "~19.2.3",
83
+ "react-dom": "~19.2.3",
84
+ "@dxos/react-ui": "0.8.4-main.9735255",
85
+ "@dxos/ui-theme": "0.8.4-main.9735255"
75
86
  },
76
87
  "publishConfig": {
77
88
  "access": "public"
@@ -2,66 +2,69 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { allOf, Capabilities, contributes, defineModule, definePlugin, Events } from '@dxos/app-framework';
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import { ActivationEvent, Capability, Common, Plugin } from '@dxos/app-framework';
6
8
  import { type Observability } from '@dxos/observability';
7
9
 
8
10
  import {
9
11
  AppGraphBuilder,
10
12
  ClientReady,
11
- IntentResolver,
12
- ObservabilityCapabilities,
13
13
  ObservabilitySettings,
14
14
  ObservabilityState,
15
+ OperationResolver,
15
16
  ReactSurface,
16
17
  } from './capabilities';
17
- import { ObservabilityEvents, ClientReadyEvent } from './events';
18
18
  import { meta } from './meta';
19
19
  import { translations } from './translations';
20
+ import { ClientReadyEvent, ObservabilityEvents } from './types';
21
+ import { ObservabilityCapabilities } from './types';
22
+
23
+ export type ObservabilityPluginOptions = {
24
+ namespace: string;
25
+ observability: () => Promise<Observability>;
26
+ };
20
27
 
21
- export const ObservabilityPlugin = (options: { namespace: string; observability: () => Promise<Observability> }) =>
22
- definePlugin(meta, [
23
- defineModule({
24
- id: `${meta.id}/module/observability`,
25
- activatesOn: Events.Startup,
26
- activate: async () => contributes(ObservabilityCapabilities.Observability, await options.observability()),
27
- }),
28
- defineModule({
29
- id: `${meta.id}/module/settings`,
30
- activatesOn: Events.SetupSettings,
31
- activate: ObservabilitySettings,
32
- }),
33
- defineModule({
34
- id: `${meta.id}/module/state`,
35
- activatesOn: Events.Startup,
36
- activatesAfter: [ObservabilityEvents.StateReady],
37
- activate: () => ObservabilityState({ namespace: options.namespace }),
38
- }),
39
- defineModule({
40
- id: `${meta.id}/module/translations`,
41
- activatesOn: Events.SetupTranslations,
42
- activate: () => contributes(Capabilities.Translations, translations),
43
- }),
44
- defineModule({
45
- id: `${meta.id}/module/intent-resolver`,
46
- activatesOn: Events.SetupIntentResolver,
47
- activate: (context) => IntentResolver({ context, namespace: options.namespace }),
48
- }),
49
- defineModule({
50
- id: `${meta.id}/module/react-surface`,
51
- activatesOn: Events.SetupReactSurface,
52
- activate: ReactSurface,
53
- }),
54
- defineModule({
55
- id: `${meta.id}/module/app-graph-builder`,
56
- activatesOn: Events.SetupAppGraph,
57
- activate: AppGraphBuilder,
58
- }),
59
- defineModule({
60
- id: `${meta.id}/module/client-ready`,
61
- activatesOn: allOf(Events.DispatcherReady, ObservabilityEvents.StateReady, ClientReadyEvent),
62
- activate: async (context) => {
63
- const observability = await options.observability();
64
- return ClientReady({ context, observability, namespace: options.namespace });
65
- },
66
- }),
67
- ]);
28
+ export const ObservabilityPlugin = Plugin.define<ObservabilityPluginOptions>(meta).pipe(
29
+ Plugin.addModule(({ namespace, observability }) => ({
30
+ id: 'observability',
31
+ activatesOn: Common.ActivationEvent.Startup,
32
+ activate: () =>
33
+ Effect.gen(function* () {
34
+ const obs = yield* Effect.tryPromise(() => observability());
35
+ return Capability.contributes(ObservabilityCapabilities.Observability, obs);
36
+ }),
37
+ })),
38
+ Plugin.addModule({
39
+ activatesOn: Common.ActivationEvent.SetupSettings,
40
+ activate: ObservabilitySettings,
41
+ }),
42
+ Plugin.addModule(({ namespace }) => ({
43
+ id: Capability.getModuleTag(ObservabilityState),
44
+ activatesOn: Common.ActivationEvent.Startup,
45
+ activatesAfter: [ObservabilityEvents.StateReady],
46
+ activate: () => ObservabilityState({ namespace }),
47
+ })),
48
+ Common.Plugin.addTranslationsModule({ translations }),
49
+ Plugin.addModule(({ namespace }) => ({
50
+ id: Capability.getModuleTag(OperationResolver),
51
+ activatesOn: Common.ActivationEvent.SetupOperationResolver,
52
+ activate: () => OperationResolver({ namespace }),
53
+ })),
54
+ Common.Plugin.addSurfaceModule({ activate: ReactSurface }),
55
+ Common.Plugin.addAppGraphModule({ activate: AppGraphBuilder }),
56
+ Plugin.addModule(({ namespace, observability }) => ({
57
+ id: Capability.getModuleTag(ClientReady),
58
+ activatesOn: ActivationEvent.allOf(
59
+ Common.ActivationEvent.OperationInvokerReady,
60
+ ObservabilityEvents.StateReady,
61
+ ClientReadyEvent,
62
+ ),
63
+ activate: () =>
64
+ Effect.gen(function* () {
65
+ const obs = yield* Effect.tryPromise(() => observability());
66
+ return yield* ClientReady({ namespace, observability: obs });
67
+ }),
68
+ })),
69
+ Plugin.make,
70
+ );
@@ -0,0 +1,42 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import { Capability, Common } from '@dxos/app-framework';
8
+ import { GraphBuilder, NodeMatcher } from '@dxos/plugin-graph';
9
+
10
+ import { meta } from '../../meta';
11
+
12
+ // NOTE: Copied from @dxos/plugin-deck to break circular dependency.
13
+ const ATTENDABLE_PATH_SEPARATOR = '~';
14
+
15
+ const DECK_COMPANION_TYPE = 'dxos.org/plugin/deck/deck-companion';
16
+
17
+ export default Capability.makeModule(
18
+ Effect.fnUntraced(function* () {
19
+ const extensions = yield* Effect.all([
20
+ GraphBuilder.createExtension({
21
+ id: `${meta.id}/help`,
22
+ match: NodeMatcher.whenRoot,
23
+ connector: (node) =>
24
+ Effect.succeed([
25
+ {
26
+ id: [node.id, 'help'].join(ATTENDABLE_PATH_SEPARATOR),
27
+ type: DECK_COMPANION_TYPE,
28
+ data: null,
29
+ properties: {
30
+ label: ['help label', { ns: meta.id }],
31
+ icon: 'ph--question--regular',
32
+ disposition: 'hidden',
33
+ position: 'hoist',
34
+ },
35
+ },
36
+ ]),
37
+ }),
38
+ ]);
39
+
40
+ return Capability.contributes(Common.Capability.AppGraphBuilder, extensions);
41
+ }),
42
+ );
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Capability } from '@dxos/app-framework';
6
+
7
+ export const AppGraphBuilder = Capability.lazy('AppGraphBuilder', () => import('./app-graph-builder'));
@@ -0,0 +1,97 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import { Capability, Common, SettingsOperation } from '@dxos/app-framework';
8
+ import { type Observability, setupTelemetryListeners } from '@dxos/observability';
9
+
10
+ import { meta } from '../../meta';
11
+ import { ClientCapability, ObservabilityCapabilities, ObservabilityOperation } from '../../types';
12
+
13
+ type ClientReadyOptions = {
14
+ namespace: string;
15
+ observability: Observability;
16
+ };
17
+
18
+ export default Capability.makeModule(
19
+ Effect.fnUntraced(function* (props?: ClientReadyOptions) {
20
+ const { namespace, observability } = props!;
21
+ const manager = yield* Capability.get(Common.Capability.PluginManager);
22
+ const { invokePromise } = yield* Capability.get(Common.Capability.OperationInvoker);
23
+ const registry = yield* Capability.get(Common.Capability.AtomRegistry);
24
+ const stateAtom = yield* Capability.get(ObservabilityCapabilities.State);
25
+ const client = yield* Capability.get(ClientCapability);
26
+
27
+ const sendPrivacyNotice = async () => {
28
+ const environment = client?.config?.values.runtime?.app?.env?.DX_ENVIRONMENT;
29
+ const notify =
30
+ environment && environment !== 'ci' && !environment.endsWith('.local') && !environment.endsWith('.lan');
31
+ const state = registry.get(stateAtom);
32
+ if (!state.notified && notify) {
33
+ await invokePromise(Common.LayoutOperation.AddToast, {
34
+ id: `${meta.id}/notice`,
35
+ title: ['observability toast label', { ns: meta.id }],
36
+ description: ['observability toast description', { ns: meta.id }],
37
+ duration: Infinity,
38
+ icon: 'ph--info--regular',
39
+ actionLabel: ['observability toast action label', { ns: meta.id }],
40
+ actionAlt: ['observability toast action alt', { ns: meta.id }],
41
+ closeLabel: ['observability toast close label', { ns: meta.id }],
42
+ onAction: () => invokePromise(SettingsOperation.Open, { plugin: meta.id }),
43
+ });
44
+
45
+ registry.set(stateAtom, { ...registry.get(stateAtom), notified: true });
46
+ }
47
+ };
48
+
49
+ // Ensure errors are tagged with enabled plugins to help with reproductions.
50
+ const enabledPlugins = manager.getEnabled();
51
+ for (const plugin of enabledPlugins) {
52
+ observability?.setTag(`pluginEnabled-${plugin}`, 'true', 'errors');
53
+ }
54
+
55
+ yield* Effect.tryPromise(() =>
56
+ invokePromise(ObservabilityOperation.SendEvent, {
57
+ name: 'page.load',
58
+ properties: {
59
+ // TODO(wittjosiah): These apis are deprecated. Is there a better way to find this information?
60
+ loadDuration: window.performance.timing.loadEventEnd - window.performance.timing.loadEventStart,
61
+ },
62
+ }),
63
+ );
64
+
65
+ // Start client observability (i.e. not running as shared worker)
66
+ // TODO(nf): how to prevent multiple instances for single shared worker?
67
+ const cleanup = setupTelemetryListeners(namespace, client, observability);
68
+
69
+ yield* Effect.tryPromise(() =>
70
+ Promise.all([
71
+ observability.setIdentityTags(client.services.services),
72
+ observability.startRuntimeMetrics(client),
73
+ observability.startNetworkMetrics(client.services.services),
74
+ observability.startSpacesMetrics(client, namespace),
75
+ ]),
76
+ );
77
+
78
+ if (client.halo.identity.get()) {
79
+ yield* Effect.tryPromise(() => sendPrivacyNotice());
80
+ } else {
81
+ const subscription = client.halo.identity.subscribe(async (identity) => {
82
+ if (identity && observability) {
83
+ await sendPrivacyNotice();
84
+ await observability.setIdentityTags(client.services.services);
85
+ subscription.unsubscribe();
86
+ }
87
+ });
88
+ }
89
+
90
+ return Capability.contributes(ObservabilityCapabilities.Observability, observability, () =>
91
+ Effect.tryPromise(async () => {
92
+ cleanup();
93
+ await observability.close();
94
+ }),
95
+ );
96
+ }),
97
+ );
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Capability } from '@dxos/app-framework';
6
+
7
+ export const ClientReady = Capability.lazy('ClientReady', () => import('./client-ready'));
@@ -2,13 +2,9 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { lazy } from '@dxos/app-framework';
6
-
7
- export const AppGraphBuilder = lazy(() => import('./app-graph-builder'));
8
- export const ClientReady = lazy(() => import('./client-ready'));
9
- export const IntentResolver = lazy(() => import('./intent-resolver'));
10
- export const ReactSurface = lazy(() => import('./react-surface'));
11
- export const ObservabilitySettings = lazy(() => import('./settings'));
12
- export const ObservabilityState = lazy(() => import('./state'));
13
-
14
- export * from './capabilities';
5
+ export * from './app-graph-builder';
6
+ export * from './client-ready';
7
+ export * from './operation-resolver';
8
+ export * from './react-surface';
9
+ export * from './settings';
10
+ export * from './state';
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Capability } from '@dxos/app-framework';
6
+
7
+ export const OperationResolver = Capability.lazy('OperationResolver', () => import('./operation-resolver'));
@@ -0,0 +1,82 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import { Capability, Common } from '@dxos/app-framework';
8
+ import { getTelemetryIdentity, storeObservabilityDisabled } from '@dxos/observability';
9
+ import { OperationResolver } from '@dxos/operation';
10
+
11
+ import { type ObservabilitySettingsProps } from '../../components';
12
+ import { meta } from '../../meta';
13
+ import { ClientCapability, ObservabilityCapabilities, ObservabilityOperation } from '../../types';
14
+
15
+ export default Capability.makeModule(
16
+ Effect.fnUntraced(function* (props?: { namespace: string }) {
17
+ const { namespace } = props!;
18
+ const capabilities = yield* Capability.Service;
19
+
20
+ return Capability.contributes(Common.Capability.OperationResolver, [
21
+ //
22
+ // Toggle
23
+ //
24
+ OperationResolver.make({
25
+ operation: ObservabilityOperation.Toggle,
26
+ handler: Effect.fnUntraced(function* (input) {
27
+ const client = yield* Capability.get(ClientCapability);
28
+ const observability = yield* Capability.get(ObservabilityCapabilities.Observability);
29
+ const registry = capabilities.get(Common.Capability.AtomRegistry);
30
+ const allSettings = capabilities.getAll(Common.Capability.Settings);
31
+ const settingsObj = allSettings.find((s: Common.Capability.Settings) => s.prefix === meta.id);
32
+ if (!settingsObj) {
33
+ return false;
34
+ }
35
+ const settings = registry.get(settingsObj.atom) as ObservabilitySettingsProps;
36
+ const newEnabled = input.state ?? !settings.enabled;
37
+ registry.set(settingsObj.atom, { ...settings, enabled: newEnabled });
38
+ observability.track({
39
+ ...getTelemetryIdentity(client),
40
+ action: 'observability.toggle',
41
+ properties: {
42
+ enabled: newEnabled,
43
+ },
44
+ });
45
+ observability.setMode(newEnabled ? 'basic' : 'disabled');
46
+ yield* Effect.promise(() => storeObservabilityDisabled(namespace, !newEnabled));
47
+ return newEnabled;
48
+ }),
49
+ }),
50
+
51
+ //
52
+ // SendEvent
53
+ //
54
+ OperationResolver.make({
55
+ operation: ObservabilityOperation.SendEvent,
56
+ handler: Effect.fnUntraced(function* (input) {
57
+ // NOTE: This is to ensure that events fired before observability is ready are still sent.
58
+ const observability = yield* Capability.waitFor(ObservabilityCapabilities.Observability);
59
+ const client = yield* Capability.get(ClientCapability);
60
+ const properties = input.properties ?? {};
61
+
62
+ observability.track({
63
+ ...getTelemetryIdentity(client),
64
+ action: input.name,
65
+ properties,
66
+ });
67
+ }),
68
+ }),
69
+
70
+ //
71
+ // CaptureUserFeedback
72
+ //
73
+ OperationResolver.make({
74
+ operation: ObservabilityOperation.CaptureUserFeedback,
75
+ handler: Effect.fnUntraced(function* (input) {
76
+ const observability = yield* Capability.get(ObservabilityCapabilities.Observability);
77
+ observability.captureUserFeedback(input.message);
78
+ }),
79
+ }),
80
+ ]);
81
+ }),
82
+ );
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Capability } from '@dxos/app-framework';
6
+
7
+ export const ReactSurface = Capability.lazy('ReactSurface', () => import('./react-surface'));
@@ -0,0 +1,34 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+ import React from 'react';
7
+
8
+ import { Capability, Common } from '@dxos/app-framework';
9
+ import { useSettingsState } from '@dxos/app-framework/react';
10
+
11
+ import { HelpContainer, ObservabilitySettings, type ObservabilitySettingsProps } from '../../components';
12
+ import { meta } from '../../meta';
13
+
14
+ export default Capability.makeModule(() =>
15
+ Effect.succeed(
16
+ Capability.contributes(Common.Capability.ReactSurface, [
17
+ Common.createSurface({
18
+ id: meta.id,
19
+ role: 'article',
20
+ filter: (data): data is { subject: Common.Capability.Settings } =>
21
+ Common.Capability.isSettings(data.subject) && data.subject.prefix === meta.id,
22
+ component: ({ data: { subject } }) => {
23
+ const { settings, updateSettings } = useSettingsState<ObservabilitySettingsProps>(subject.atom);
24
+ return <ObservabilitySettings settings={settings} onSettingsChange={updateSettings} />;
25
+ },
26
+ }),
27
+ Common.createSurface({
28
+ id: `${meta.id}/help`,
29
+ role: 'deck-companion--help',
30
+ component: () => <HelpContainer />,
31
+ }),
32
+ ]),
33
+ ),
34
+ );
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Capability } from '@dxos/app-framework';
6
+
7
+ export const ObservabilitySettings = Capability.lazy('ObservabilitySettings', () => import('./settings'));
@@ -0,0 +1,33 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import { Capability, Common } from '@dxos/app-framework';
8
+ import { createKvsStore } from '@dxos/effect';
9
+
10
+ import { ObservabilitySettingsSchema } from '../../components';
11
+ import { meta } from '../../meta';
12
+ import { ObservabilityCapabilities } from '../../types';
13
+
14
+ export default Capability.makeModule(() =>
15
+ Effect.sync(() => {
16
+ const settingsAtom = createKvsStore({
17
+ key: meta.id,
18
+ schema: ObservabilitySettingsSchema,
19
+ defaultValue: () => ({
20
+ enabled: true,
21
+ }),
22
+ });
23
+
24
+ return [
25
+ Capability.contributes(ObservabilityCapabilities.Settings, settingsAtom),
26
+ Capability.contributes(Common.Capability.Settings, {
27
+ prefix: meta.id,
28
+ schema: ObservabilitySettingsSchema,
29
+ atom: settingsAtom,
30
+ }),
31
+ ];
32
+ }),
33
+ );
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Capability } from '@dxos/app-framework';
6
+
7
+ export const ObservabilityState = Capability.lazy('ObservabilityState', () => import('./state'));
@@ -0,0 +1,30 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import { Capability, Common } from '@dxos/app-framework';
8
+ import { createKvsStore } from '@dxos/effect';
9
+ import { getObservabilityGroup } from '@dxos/observability';
10
+
11
+ import { meta } from '../../meta';
12
+ import { ObservabilityCapabilities } from '../../types';
13
+
14
+ export default Capability.makeModule(
15
+ Effect.fnUntraced(function* (props?: { namespace: string }) {
16
+ const { namespace } = props!;
17
+ const stateAtom = createKvsStore({
18
+ key: meta.id,
19
+ schema: ObservabilityCapabilities.StateSchema,
20
+ defaultValue: () => ({}),
21
+ });
22
+
23
+ // NOTE: Group is set at runtime, not persisted.
24
+ const group = yield* Effect.tryPromise(() => getObservabilityGroup(namespace));
25
+ const registry = yield* Capability.get(Common.Capability.AtomRegistry);
26
+ registry.set(stateAtom, { ...registry.get(stateAtom), group });
27
+
28
+ return Capability.contributes(ObservabilityCapabilities.State, stateAtom);
29
+ }),
30
+ );
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ export * from './plugin';