@dxos/plugin-observability 0.8.4-main.fd6878d → 0.8.4-staging.60fe92afc8

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 (206) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +1 -1
  3. package/dist/lib/neutral/ObservabilityPlugin.mjs +63 -0
  4. package/dist/lib/neutral/ObservabilityPlugin.mjs.map +7 -0
  5. package/dist/lib/neutral/ObservabilityPlugin.node.mjs +22 -0
  6. package/dist/lib/neutral/ObservabilityPlugin.node.mjs.map +7 -0
  7. package/dist/lib/neutral/ObservabilityPlugin.workerd.mjs +22 -0
  8. package/dist/lib/neutral/ObservabilityPlugin.workerd.mjs.map +7 -0
  9. package/dist/lib/neutral/ObservabilitySettings-H6UKYDDT.mjs +27 -0
  10. package/dist/lib/neutral/ObservabilitySettings-H6UKYDDT.mjs.map +7 -0
  11. package/dist/lib/neutral/capabilities/index.mjs +19 -0
  12. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  13. package/dist/lib/neutral/chunk-5KWS3NZY.mjs +22 -0
  14. package/dist/lib/neutral/chunk-5KWS3NZY.mjs.map +7 -0
  15. package/dist/lib/neutral/chunk-GLRKOAB7.mjs +8 -0
  16. package/dist/lib/neutral/chunk-GLRKOAB7.mjs.map +7 -0
  17. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  18. package/dist/lib/neutral/chunk-RY77X57N.mjs +109 -0
  19. package/dist/lib/neutral/chunk-RY77X57N.mjs.map +7 -0
  20. package/dist/lib/neutral/client-ready-DN3L5DIM.mjs +50 -0
  21. package/dist/lib/neutral/client-ready-DN3L5DIM.mjs.map +7 -0
  22. package/dist/lib/neutral/components/index.mjs +9 -0
  23. package/dist/lib/neutral/components/index.mjs.map +7 -0
  24. package/dist/lib/neutral/index.mjs +18 -0
  25. package/dist/lib/neutral/meta.json +1 -0
  26. package/dist/lib/neutral/meta.mjs +8 -0
  27. package/dist/lib/neutral/meta.mjs.map +7 -0
  28. package/dist/lib/neutral/operation-handler-4WWRXOHR.mjs +13 -0
  29. package/dist/lib/neutral/operation-handler-4WWRXOHR.mjs.map +7 -0
  30. package/dist/lib/neutral/operations/index.mjs +8 -0
  31. package/dist/lib/neutral/operations/index.mjs.map +7 -0
  32. package/dist/lib/neutral/plugin.mjs +16 -0
  33. package/dist/lib/neutral/plugin.mjs.map +7 -0
  34. package/dist/lib/neutral/privacy-notice-G5TVVCIW.mjs +66 -0
  35. package/dist/lib/neutral/privacy-notice-G5TVVCIW.mjs.map +7 -0
  36. package/dist/lib/neutral/react-surface-SHB2SLRK.mjs +35 -0
  37. package/dist/lib/neutral/react-surface-SHB2SLRK.mjs.map +7 -0
  38. package/dist/lib/neutral/send-event-FKLBHQ2Q.mjs +20 -0
  39. package/dist/lib/neutral/send-event-FKLBHQ2Q.mjs.map +7 -0
  40. package/dist/lib/neutral/settings-MZYK2WQR.mjs +30 -0
  41. package/dist/lib/neutral/settings-MZYK2WQR.mjs.map +7 -0
  42. package/dist/lib/neutral/state-5COCK3KV.mjs +27 -0
  43. package/dist/lib/neutral/state-5COCK3KV.mjs.map +7 -0
  44. package/dist/lib/neutral/toggle-S3T6KNBA.mjs +45 -0
  45. package/dist/lib/neutral/toggle-S3T6KNBA.mjs.map +7 -0
  46. package/dist/lib/neutral/translations.mjs +26 -0
  47. package/dist/lib/neutral/translations.mjs.map +7 -0
  48. package/dist/lib/neutral/types/index.mjs +14 -0
  49. package/dist/lib/neutral/types/index.mjs.map +7 -0
  50. package/dist/types/src/ObservabilityPlugin.d.ts +11 -3
  51. package/dist/types/src/ObservabilityPlugin.d.ts.map +1 -1
  52. package/dist/types/src/ObservabilityPlugin.node.d.ts +4 -0
  53. package/dist/types/src/ObservabilityPlugin.node.d.ts.map +1 -0
  54. package/dist/types/src/ObservabilityPlugin.test.d.ts +2 -0
  55. package/dist/types/src/ObservabilityPlugin.test.d.ts.map +1 -0
  56. package/dist/types/src/ObservabilityPlugin.workerd.d.ts +4 -0
  57. package/dist/types/src/ObservabilityPlugin.workerd.d.ts.map +1 -0
  58. package/dist/types/src/capabilities/client-ready.d.ts +5 -5
  59. package/dist/types/src/capabilities/client-ready.d.ts.map +1 -1
  60. package/dist/types/src/capabilities/index.d.ts +16 -15
  61. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  62. package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
  63. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
  64. package/dist/types/src/capabilities/privacy-notice.d.ts +11 -0
  65. package/dist/types/src/capabilities/privacy-notice.d.ts.map +1 -0
  66. package/dist/types/src/capabilities/react-surface.d.ts +3 -2
  67. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  68. package/dist/types/src/capabilities/settings.d.ts +5 -2
  69. package/dist/types/src/capabilities/settings.d.ts.map +1 -1
  70. package/dist/types/src/capabilities/state.d.ts +10 -3
  71. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  72. package/dist/types/src/components/ObservabilitySettings/ObservabilitySettings.d.ts +6 -0
  73. package/dist/types/src/components/ObservabilitySettings/ObservabilitySettings.d.ts.map +1 -0
  74. package/dist/types/src/components/ObservabilitySettings/ObservabilitySettings.stories.d.ts +29 -0
  75. package/dist/types/src/components/ObservabilitySettings/ObservabilitySettings.stories.d.ts.map +1 -0
  76. package/dist/types/src/components/ObservabilitySettings/index.d.ts +2 -0
  77. package/dist/types/src/components/ObservabilitySettings/index.d.ts.map +1 -0
  78. package/dist/types/src/components/index.d.ts +2 -3
  79. package/dist/types/src/components/index.d.ts.map +1 -1
  80. package/dist/types/src/index.d.ts +1 -4
  81. package/dist/types/src/index.d.ts.map +1 -1
  82. package/dist/types/src/meta.d.ts +2 -3
  83. package/dist/types/src/meta.d.ts.map +1 -1
  84. package/dist/types/src/operations/index.d.ts +3 -0
  85. package/dist/types/src/operations/index.d.ts.map +1 -0
  86. package/dist/types/src/operations/send-event.d.ts +5 -0
  87. package/dist/types/src/operations/send-event.d.ts.map +1 -0
  88. package/dist/types/src/operations/toggle.d.ts +5 -0
  89. package/dist/types/src/operations/toggle.d.ts.map +1 -0
  90. package/dist/types/src/plugin.d.ts +4 -0
  91. package/dist/types/src/plugin.d.ts.map +1 -0
  92. package/dist/types/src/translations.d.ts +10 -16
  93. package/dist/types/src/translations.d.ts.map +1 -1
  94. package/dist/types/src/types/ObservabilityCapabilities.d.ts +28 -0
  95. package/dist/types/src/types/ObservabilityCapabilities.d.ts.map +1 -0
  96. package/dist/types/src/types/ObservabilityEvents.d.ts +4 -0
  97. package/dist/types/src/types/ObservabilityEvents.d.ts.map +1 -0
  98. package/dist/types/src/types/ObservabilityOperation.d.ts +10 -0
  99. package/dist/types/src/types/ObservabilityOperation.d.ts.map +1 -0
  100. package/dist/types/src/types/Settings.d.ts +7 -0
  101. package/dist/types/src/types/Settings.d.ts.map +1 -0
  102. package/dist/types/src/types/index.d.ts +4 -1
  103. package/dist/types/src/types/index.d.ts.map +1 -1
  104. package/dist/types/tsconfig.tsbuildinfo +1 -1
  105. package/package.json +88 -51
  106. package/src/ObservabilityPlugin.node.ts +33 -0
  107. package/src/ObservabilityPlugin.test.ts +25 -0
  108. package/src/ObservabilityPlugin.ts +77 -55
  109. package/src/ObservabilityPlugin.workerd.ts +32 -0
  110. package/src/capabilities/client-ready.ts +48 -80
  111. package/src/capabilities/index.ts +12 -8
  112. package/src/capabilities/operation-handler.ts +16 -0
  113. package/src/capabilities/privacy-notice.ts +50 -0
  114. package/src/capabilities/react-surface.tsx +27 -19
  115. package/src/capabilities/settings.ts +26 -14
  116. package/src/capabilities/state.ts +20 -13
  117. package/src/components/ObservabilitySettings/ObservabilitySettings.stories.tsx +34 -0
  118. package/src/components/ObservabilitySettings/ObservabilitySettings.tsx +34 -0
  119. package/src/components/ObservabilitySettings/index.ts +5 -0
  120. package/src/components/index.ts +3 -3
  121. package/src/index.ts +1 -4
  122. package/src/meta.ts +12 -6
  123. package/src/operations/index.ts +10 -0
  124. package/src/operations/send-event.ts +23 -0
  125. package/src/operations/toggle.ts +46 -0
  126. package/src/plugin.ts +11 -0
  127. package/src/translations.ts +10 -16
  128. package/src/types/ObservabilityCapabilities.ts +42 -0
  129. package/src/types/ObservabilityEvents.ts +15 -0
  130. package/src/types/ObservabilityOperation.ts +44 -0
  131. package/src/types/Settings.ts +22 -0
  132. package/src/types/index.ts +4 -1
  133. package/dist/lib/browser/app-graph-builder-2SLFJVUL.mjs +0 -43
  134. package/dist/lib/browser/app-graph-builder-2SLFJVUL.mjs.map +0 -7
  135. package/dist/lib/browser/chunk-57RVSKYP.mjs +0 -13
  136. package/dist/lib/browser/chunk-57RVSKYP.mjs.map +0 -7
  137. package/dist/lib/browser/chunk-AL5RST75.mjs +0 -191
  138. package/dist/lib/browser/chunk-AL5RST75.mjs.map +0 -7
  139. package/dist/lib/browser/chunk-EAA6E4FU.mjs +0 -175
  140. package/dist/lib/browser/chunk-EAA6E4FU.mjs.map +0 -7
  141. package/dist/lib/browser/chunk-UUOBAWT2.mjs +0 -18
  142. package/dist/lib/browser/chunk-UUOBAWT2.mjs.map +0 -7
  143. package/dist/lib/browser/client-ready-NBJRF7OJ.mjs +0 -102
  144. package/dist/lib/browser/client-ready-NBJRF7OJ.mjs.map +0 -7
  145. package/dist/lib/browser/index.mjs +0 -130
  146. package/dist/lib/browser/index.mjs.map +0 -7
  147. package/dist/lib/browser/intent-resolver-NPEP5KJQ.mjs +0 -77
  148. package/dist/lib/browser/intent-resolver-NPEP5KJQ.mjs.map +0 -7
  149. package/dist/lib/browser/meta.json +0 -1
  150. package/dist/lib/browser/react-surface-245UEKB5.mjs +0 -32
  151. package/dist/lib/browser/react-surface-245UEKB5.mjs.map +0 -7
  152. package/dist/lib/browser/settings-4WW5E4VA.mjs +0 -25
  153. package/dist/lib/browser/settings-4WW5E4VA.mjs.map +0 -7
  154. package/dist/lib/browser/state-N7RLB477.mjs +0 -26
  155. package/dist/lib/browser/state-N7RLB477.mjs.map +0 -7
  156. package/dist/lib/browser/types/index.mjs +0 -10
  157. package/dist/lib/node-esm/app-graph-builder-MMH6BVY4.mjs +0 -44
  158. package/dist/lib/node-esm/app-graph-builder-MMH6BVY4.mjs.map +0 -7
  159. package/dist/lib/node-esm/chunk-5W5V4TVX.mjs +0 -192
  160. package/dist/lib/node-esm/chunk-5W5V4TVX.mjs.map +0 -7
  161. package/dist/lib/node-esm/chunk-7XR7KMAA.mjs +0 -15
  162. package/dist/lib/node-esm/chunk-7XR7KMAA.mjs.map +0 -7
  163. package/dist/lib/node-esm/chunk-D6QRS2CR.mjs +0 -176
  164. package/dist/lib/node-esm/chunk-D6QRS2CR.mjs.map +0 -7
  165. package/dist/lib/node-esm/chunk-JTKEM7PT.mjs +0 -19
  166. package/dist/lib/node-esm/chunk-JTKEM7PT.mjs.map +0 -7
  167. package/dist/lib/node-esm/client-ready-XDI3JWUY.mjs +0 -103
  168. package/dist/lib/node-esm/client-ready-XDI3JWUY.mjs.map +0 -7
  169. package/dist/lib/node-esm/index.mjs +0 -131
  170. package/dist/lib/node-esm/index.mjs.map +0 -7
  171. package/dist/lib/node-esm/intent-resolver-OH4MMH5I.mjs +0 -78
  172. package/dist/lib/node-esm/intent-resolver-OH4MMH5I.mjs.map +0 -7
  173. package/dist/lib/node-esm/meta.json +0 -1
  174. package/dist/lib/node-esm/react-surface-ZR3IU2ZM.mjs +0 -33
  175. package/dist/lib/node-esm/react-surface-ZR3IU2ZM.mjs.map +0 -7
  176. package/dist/lib/node-esm/settings-BKKLNOFT.mjs +0 -26
  177. package/dist/lib/node-esm/settings-BKKLNOFT.mjs.map +0 -7
  178. package/dist/lib/node-esm/state-LKANNCJJ.mjs +0 -27
  179. package/dist/lib/node-esm/state-LKANNCJJ.mjs.map +0 -7
  180. package/dist/lib/node-esm/types/index.mjs +0 -11
  181. package/dist/types/src/capabilities/app-graph-builder.d.ts +0 -4
  182. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +0 -1
  183. package/dist/types/src/capabilities/capabilities.d.ts +0 -12
  184. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  185. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -7
  186. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  187. package/dist/types/src/components/FeedbackForm.d.ts +0 -6
  188. package/dist/types/src/components/FeedbackForm.d.ts.map +0 -1
  189. package/dist/types/src/components/HelpContainer.d.ts +0 -3
  190. package/dist/types/src/components/HelpContainer.d.ts.map +0 -1
  191. package/dist/types/src/components/ObservabilitySettings.d.ts +0 -10
  192. package/dist/types/src/components/ObservabilitySettings.d.ts.map +0 -1
  193. package/dist/types/src/events.d.ts +0 -5
  194. package/dist/types/src/events.d.ts.map +0 -1
  195. package/dist/types/src/types/schema.d.ts +0 -313
  196. package/dist/types/src/types/schema.d.ts.map +0 -1
  197. package/src/capabilities/app-graph-builder.ts +0 -45
  198. package/src/capabilities/capabilities.ts +0 -22
  199. package/src/capabilities/intent-resolver.ts +0 -69
  200. package/src/components/FeedbackForm.tsx +0 -82
  201. package/src/components/HelpContainer.tsx +0 -41
  202. package/src/components/ObservabilitySettings.tsx +0 -48
  203. package/src/events.ts +0 -14
  204. package/src/types/schema.ts +0 -216
  205. /package/dist/lib/{browser/types/index.mjs.map → neutral/chunk-J5LGTIGS.mjs.map} +0 -0
  206. /package/dist/lib/{node-esm/types → neutral}/index.mjs.map +0 -0
package/package.json CHANGED
@@ -1,79 +1,116 @@
1
1
  {
2
2
  "name": "@dxos/plugin-observability",
3
- "version": "0.8.4-main.fd6878d",
3
+ "version": "0.8.4-staging.60fe92afc8",
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
- "license": "MIT",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/dxos/dxos"
10
+ },
11
+ "license": "FSL-1.1-Apache-2.0",
8
12
  "author": "DXOS.org",
9
13
  "sideEffects": true,
10
14
  "type": "module",
15
+ "imports": {
16
+ "#capabilities": {
17
+ "source": "./src/capabilities/index.ts",
18
+ "types": "./dist/types/src/capabilities/index.d.ts",
19
+ "default": "./dist/lib/neutral/capabilities/index.mjs"
20
+ },
21
+ "#components": {
22
+ "source": "./src/components/index.ts",
23
+ "types": "./dist/types/src/components/index.d.ts",
24
+ "default": "./dist/lib/neutral/components/index.mjs"
25
+ },
26
+ "#meta": {
27
+ "source": "./src/meta.ts",
28
+ "types": "./dist/types/src/meta.d.ts",
29
+ "default": "./dist/lib/neutral/meta.mjs"
30
+ },
31
+ "#operations": {
32
+ "source": "./src/operations/index.ts",
33
+ "types": "./dist/types/src/operations/index.d.ts",
34
+ "default": "./dist/lib/neutral/operations/index.mjs"
35
+ },
36
+ "#plugin": {
37
+ "source": {
38
+ "workerd": "./src/ObservabilityPlugin.workerd.ts",
39
+ "node": "./src/ObservabilityPlugin.node.ts",
40
+ "default": "./src/ObservabilityPlugin.ts"
41
+ },
42
+ "types": "./dist/types/src/ObservabilityPlugin.d.ts",
43
+ "workerd": "./dist/lib/neutral/ObservabilityPlugin.workerd.mjs",
44
+ "node": "./dist/lib/neutral/ObservabilityPlugin.node.mjs",
45
+ "default": "./dist/lib/neutral/ObservabilityPlugin.mjs"
46
+ },
47
+ "#translations": {
48
+ "source": "./src/translations.ts",
49
+ "types": "./dist/types/src/translations.d.ts",
50
+ "default": "./dist/lib/neutral/translations.mjs"
51
+ },
52
+ "#types": {
53
+ "source": "./src/types/index.ts",
54
+ "types": "./dist/types/src/types/index.d.ts",
55
+ "default": "./dist/lib/neutral/types/index.mjs"
56
+ }
57
+ },
11
58
  "exports": {
12
59
  ".": {
13
60
  "source": "./src/index.ts",
14
61
  "types": "./dist/types/src/index.d.ts",
15
- "browser": "./dist/lib/browser/index.mjs",
16
- "node": "./dist/lib/node-esm/index.mjs"
62
+ "default": "./dist/lib/neutral/index.mjs"
17
63
  },
18
- "./types": {
19
- "source": "./src/types/index.ts",
20
- "types": "./dist/types/src/types/index.d.ts",
21
- "browser": "./dist/lib/browser/types/index.mjs",
22
- "node": "./dist/lib/node-esm/types/index.mjs"
64
+ "./plugin": {
65
+ "source": "./src/plugin.ts",
66
+ "types": "./dist/types/src/plugin.d.ts",
67
+ "default": "./dist/lib/neutral/plugin.mjs"
68
+ },
69
+ "./translations": {
70
+ "source": "./src/translations.ts",
71
+ "types": "./dist/types/src/translations.d.ts",
72
+ "default": "./dist/lib/neutral/translations.mjs"
23
73
  }
24
74
  },
25
75
  "types": "dist/types/src/index.d.ts",
26
- "typesVersions": {
27
- "*": {
28
- "types": [
29
- "dist/types/src/types/index.d.ts"
30
- ]
31
- }
32
- },
33
76
  "files": [
34
77
  "dist",
35
78
  "src"
36
79
  ],
37
80
  "dependencies": {
38
- "@preact-signals/safe-react": "^0.9.0",
39
- "@preact/signals-core": "^1.9.0",
40
- "effect": "3.17.7",
41
- "localforage": "^1.10.0",
42
- "@dxos/async": "0.8.4-main.fd6878d",
43
- "@dxos/context": "0.8.4-main.fd6878d",
44
- "@dxos/echo-schema": "0.8.4-main.fd6878d",
45
- "@dxos/app-framework": "0.8.4-main.fd6878d",
46
- "@dxos/echo": "0.8.4-main.fd6878d",
47
- "@dxos/live-object": "0.8.4-main.fd6878d",
48
- "@dxos/local-storage": "0.8.4-main.fd6878d",
49
- "@dxos/invariant": "0.8.4-main.fd6878d",
50
- "@dxos/log": "0.8.4-main.fd6878d",
51
- "@dxos/observability": "0.8.4-main.fd6878d",
52
- "@dxos/plugin-graph": "0.8.4-main.fd6878d",
53
- "@dxos/protocols": "0.8.4-main.fd6878d",
54
- "@dxos/react-client": "0.8.4-main.fd6878d",
55
- "@dxos/react-ui-form": "0.8.4-main.fd6878d",
56
- "@dxos/util": "0.8.4-main.fd6878d",
57
- "@dxos/react-ui-stack": "0.8.4-main.fd6878d"
81
+ "@effect-atom/atom-react": "^0.5.0",
82
+ "effect": "3.21.3",
83
+ "@dxos/app-framework": "0.8.4-staging.60fe92afc8",
84
+ "@dxos/app-toolkit": "0.8.4-staging.60fe92afc8",
85
+ "@dxos/client": "0.8.4-staging.60fe92afc8",
86
+ "@dxos/compute": "0.8.4-staging.60fe92afc8",
87
+ "@dxos/effect": "0.8.4-staging.60fe92afc8",
88
+ "@dxos/invariant": "0.8.4-staging.60fe92afc8",
89
+ "@dxos/keys": "0.8.4-staging.60fe92afc8",
90
+ "@dxos/log": "0.8.4-staging.60fe92afc8",
91
+ "@dxos/observability": "0.8.4-staging.60fe92afc8",
92
+ "@dxos/util": "0.8.4-staging.60fe92afc8",
93
+ "@dxos/react-ui-form": "0.8.4-staging.60fe92afc8"
58
94
  },
59
95
  "devDependencies": {
60
- "@effect-rx/rx-react": "0.38.0",
61
- "@effect/platform": "0.90.2",
62
- "@types/react": "~18.2.0",
63
- "react": "~18.2.0",
64
- "vite": "5.4.7",
65
- "@dxos/react-ui": "0.8.4-main.fd6878d",
66
- "@dxos/react-ui-theme": "0.8.4-main.fd6878d",
67
- "@dxos/storybook-utils": "0.8.4-main.fd6878d"
96
+ "@effect-atom/atom-react": "^0.5.0",
97
+ "@effect/platform": "0.96.1",
98
+ "@types/react": "~19.2.7",
99
+ "react": "~19.2.3",
100
+ "vite": "^8.0.16",
101
+ "@dxos/plugin-testing": "0.8.4-staging.60fe92afc8",
102
+ "@dxos/react-ui": "0.8.4-staging.60fe92afc8",
103
+ "@dxos/storybook-utils": "0.8.4-staging.60fe92afc8",
104
+ "@dxos/ui-theme": "0.8.4-staging.60fe92afc8"
68
105
  },
69
106
  "peerDependencies": {
70
- "@effect-rx/rx-react": "^0.34.1",
71
- "@effect/platform": "^0.80.12",
72
- "effect": "^3.13.3",
73
- "react": "~18.2.0",
74
- "react-dom": "~18.2.0",
75
- "@dxos/react-ui": "0.8.4-main.fd6878d",
76
- "@dxos/react-ui-theme": "0.8.4-main.fd6878d"
107
+ "@effect-atom/atom-react": "^0.5.0",
108
+ "@effect/platform": "0.96.1",
109
+ "effect": "3.21.3",
110
+ "react": "~19.2.3",
111
+ "react-dom": "~19.2.3",
112
+ "@dxos/react-ui": "0.8.4-staging.60fe92afc8",
113
+ "@dxos/ui-theme": "0.8.4-staging.60fe92afc8"
77
114
  },
78
115
  "publishConfig": {
79
116
  "access": "public"
@@ -0,0 +1,33 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import { Capabilities, Capability, Plugin } from '@dxos/app-framework';
8
+ import { AppPlugin } from '@dxos/app-toolkit';
9
+ import { Operation, OperationHandlerSet } from '@dxos/compute';
10
+
11
+ import { meta } from '#meta';
12
+ import { ObservabilityOperation } from '#types';
13
+
14
+ // TODO(wittjosiah): Hook up.
15
+ export const ObservabilityPlugin = Plugin.define(meta).pipe(
16
+ AppPlugin.addOperationHandlerModule({
17
+ activate: Capability.lazy('OperationHandler', () =>
18
+ Promise.resolve({
19
+ default: Capability.makeModule<OperationHandlerSet.OperationHandlerSet>(
20
+ Effect.fnUntraced(function* () {
21
+ return Capability.contributes(
22
+ Capabilities.OperationHandler,
23
+ OperationHandlerSet.make(Operation.withHandler(ObservabilityOperation.SendEvent, () => Effect.void)),
24
+ );
25
+ }),
26
+ ),
27
+ }),
28
+ ),
29
+ }),
30
+ Plugin.make,
31
+ );
32
+
33
+ export default ObservabilityPlugin;
@@ -0,0 +1,25 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import { describe, test } from 'vitest';
6
+
7
+ import { createComposerTestApp } from '@dxos/plugin-testing/harness';
8
+
9
+ import { ObservabilityPlugin } from '#plugin';
10
+
11
+ import { meta } from './meta';
12
+
13
+ const moduleId = (name: string) => `${meta.id}.module.${name}`;
14
+
15
+ describe('ObservabilityPlugin', () => {
16
+ test('modules activate on the expected events', async ({ expect }) => {
17
+ await using harness = await createComposerTestApp({
18
+ // TODO(wittjosiah): Align browser and node variant option types.
19
+ plugins: [ObservabilityPlugin({} as any)],
20
+ });
21
+
22
+ // OperationHandler fires automatically (ProcessManagerPlugin fires SetupProcessManager during Startup).
23
+ expect(harness.manager.getActive()).toContain(moduleId('OperationHandler'));
24
+ });
25
+ });
@@ -2,66 +2,88 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { Capabilities, Events, allOf, contributes, defineModule, definePlugin } from '@dxos/app-framework';
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import { ActivationEvent, ActivationEvents, Capability, Plugin } from '@dxos/app-framework';
8
+ import { AppActivationEvents, AppPlugin } from '@dxos/app-toolkit';
6
9
  import { type Observability } from '@dxos/observability';
7
10
 
8
11
  import {
9
- AppGraphBuilder,
10
12
  ClientReady,
11
- IntentResolver,
12
- ObservabilityCapabilities,
13
13
  ObservabilitySettings,
14
14
  ObservabilityState,
15
+ OperationHandler,
16
+ PrivacyNotice,
15
17
  ReactSurface,
16
- } from './capabilities';
17
- import { ClientReadyEvent, ObservabilityEvents } from './events';
18
- import { meta } from './meta';
19
- import { translations } from './translations';
18
+ } from '#capabilities';
19
+ import { meta } from '#meta';
20
+ import { translations } from '#translations';
21
+ import { ObservabilityCapabilities, ObservabilityEvents } from '#types';
22
+
23
+ export type ObservabilityPluginOptions = {
24
+ namespace: string;
25
+ observability: () => Promise<Observability.Observability>;
26
+ /**
27
+ * Optional callback invoked by the help/feedback UI to download captured logs.
28
+ * When omitted the "Download logs" action is hidden.
29
+ */
30
+ downloadLogs?: () => void | Promise<void>;
31
+ };
32
+
33
+ export const ObservabilityPlugin = Plugin.define<ObservabilityPluginOptions>(meta).pipe(
34
+ AppPlugin.addSurfaceModule({ activate: ReactSurface }),
35
+ AppPlugin.addTranslationsModule({ translations }),
36
+ Plugin.addModule(({ observability }) => ({
37
+ id: 'observability',
38
+ activatesOn: ActivationEvents.Startup,
39
+ activate: () =>
40
+ Effect.gen(function* () {
41
+ const obs = yield* Effect.tryPromise(() => observability());
42
+ return Capability.contributes(ObservabilityCapabilities.Observability, obs);
43
+ }),
44
+ })),
45
+ Plugin.addModule({
46
+ activatesOn: AppActivationEvents.SetupSettings,
47
+ activate: ObservabilitySettings,
48
+ }),
49
+ Plugin.addModule(({ namespace }) => ({
50
+ id: Capability.getModuleTag(ObservabilityState),
51
+ activatesOn: ActivationEvents.Startup,
52
+ firesAfterActivation: [ObservabilityEvents.StateReady],
53
+ activate: () => ObservabilityState({ namespace }),
54
+ })),
55
+ Plugin.addModule(({ namespace }) => ({
56
+ id: 'namespace',
57
+ activatesOn: ActivationEvents.Startup,
58
+ activate: () => Effect.succeed(Capability.contributes(ObservabilityCapabilities.Namespace, namespace)),
59
+ })),
60
+ Plugin.addModule(({ downloadLogs }) => ({
61
+ id: 'log-downloader',
62
+ activatesOn: ActivationEvents.Startup,
63
+ activate: () =>
64
+ Effect.succeed(
65
+ downloadLogs !== undefined ? Capability.contributes(ObservabilityCapabilities.LogDownloader, downloadLogs) : [],
66
+ ),
67
+ })),
68
+ AppPlugin.addOperationHandlerModule({ activate: OperationHandler }),
69
+ Plugin.addModule({
70
+ activatesOn: ActivationEvent.make('org.dxos.plugin.client.event.identity-created'),
71
+ activate: PrivacyNotice,
72
+ }),
73
+ Plugin.addModule(({ namespace, observability }) => ({
74
+ id: Capability.getModuleTag(ClientReady),
75
+ activatesOn: ActivationEvent.allOf(
76
+ ActivationEvents.ProcessManagerReady,
77
+ ObservabilityEvents.StateReady,
78
+ ObservabilityEvents.ClientReadyEvent,
79
+ ),
80
+ activate: () =>
81
+ Effect.gen(function* () {
82
+ const obs = yield* Effect.tryPromise(() => observability());
83
+ return yield* ClientReady({ namespace, observability: obs });
84
+ }),
85
+ })),
86
+ Plugin.make,
87
+ );
20
88
 
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
- ]);
89
+ export default ObservabilityPlugin;
@@ -0,0 +1,32 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import { Capabilities, Capability, Plugin } from '@dxos/app-framework';
8
+ import { AppPlugin } from '@dxos/app-toolkit';
9
+ import { Operation, OperationHandlerSet } from '@dxos/compute';
10
+
11
+ import { meta } from '#meta';
12
+ import { ObservabilityOperation } from '#types';
13
+
14
+ export const ObservabilityPlugin = Plugin.define(meta).pipe(
15
+ AppPlugin.addOperationHandlerModule({
16
+ activate: Capability.lazy('OperationHandler', () =>
17
+ Promise.resolve({
18
+ default: Capability.makeModule<OperationHandlerSet.OperationHandlerSet>(
19
+ Effect.fnUntraced(function* () {
20
+ return Capability.contributes(
21
+ Capabilities.OperationHandler,
22
+ OperationHandlerSet.make(Operation.withHandler(ObservabilityOperation.SendEvent, () => Effect.void)),
23
+ );
24
+ }),
25
+ ),
26
+ }),
27
+ ),
28
+ }),
29
+ Plugin.make,
30
+ );
31
+
32
+ export default ObservabilityPlugin;
@@ -2,97 +2,65 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import {
6
- Capabilities,
7
- LayoutAction,
8
- type PluginContext,
9
- SettingsAction,
10
- contributes,
11
- createIntent,
12
- } from '@dxos/app-framework';
13
- import { type Observability, setupTelemetryListeners } from '@dxos/observability';
5
+ import * as Effect from 'effect/Effect';
14
6
 
15
- import { OBSERVABILITY_PLUGIN } from '../meta';
16
- import { ObservabilityAction } from '../types';
7
+ import { Capabilities, Capability } from '@dxos/app-framework';
8
+ import { log } from '@dxos/log';
9
+ import { type Observability, ObservabilityProvider } from '@dxos/observability';
17
10
 
18
- import { ClientCapability, ObservabilityCapabilities } from './capabilities';
11
+ import { ObservabilityCapabilities, ObservabilityOperation } from '#types';
19
12
 
20
- type ClientReadyOptions = {
21
- context: PluginContext;
13
+ export type ClientReadyOptions = {
22
14
  namespace: string;
23
- observability: Observability;
15
+ observability: Observability.Observability;
24
16
  };
25
17
 
26
- export default async ({ context, namespace, observability }: ClientReadyOptions) => {
27
- const manager = context.getCapability(Capabilities.PluginManager);
28
- const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);
29
- const state = context.getCapability(ObservabilityCapabilities.State);
30
- const client = context.getCapability(ClientCapability);
18
+ export default Capability.makeModule(
19
+ Effect.fnUntraced(function* ({ observability }: ClientReadyOptions) {
20
+ const manager = yield* Capability.get(Capabilities.PluginManager);
21
+ const { invokePromise } = yield* Capability.get(Capabilities.OperationInvoker);
22
+ const client = yield* Capability.get(ObservabilityCapabilities.ClientCapability);
31
23
 
32
- const sendPrivacyNotice = async () => {
33
- const environment = client?.config?.values.runtime?.app?.env?.DX_ENVIRONMENT;
34
- const notify =
35
- environment && environment !== 'ci' && !environment.endsWith('.local') && !environment.endsWith('.lan');
36
- if (!state.notified && notify) {
37
- await dispatch(
38
- createIntent(LayoutAction.AddToast, {
39
- part: 'toast',
40
- subject: {
41
- id: `${OBSERVABILITY_PLUGIN}/notice`,
42
- title: ['observability toast label', { ns: OBSERVABILITY_PLUGIN }],
43
- description: ['observability toast description', { ns: OBSERVABILITY_PLUGIN }],
44
- duration: Infinity,
45
- icon: 'ph--info--regular',
46
- actionLabel: ['observability toast action label', { ns: OBSERVABILITY_PLUGIN }],
47
- actionAlt: ['observability toast action alt', { ns: OBSERVABILITY_PLUGIN }],
48
- closeLabel: ['observability toast close label', { ns: OBSERVABILITY_PLUGIN }],
49
- onAction: () => dispatch(createIntent(SettingsAction.Open, { plugin: OBSERVABILITY_PLUGIN })),
50
- },
51
- }),
52
- );
53
-
54
- state.notified = true;
24
+ // Ensure errors are tagged with enabled plugins to help with reproductions.
25
+ const enabledPlugins = manager.getEnabled();
26
+ log('client-ready: tagging enabled plugins', { count: enabledPlugins.length });
27
+ for (const plugin of enabledPlugins) {
28
+ observability.setTags({ [`pluginEnabled-${plugin}`]: 'true' }, 'errors');
55
29
  }
56
- };
57
30
 
58
- // Ensure errors are tagged with enabled plugins to help with reproductions.
59
- manager.enabled.map((plugin) => observability?.setTag(`pluginEnabled-${plugin}`, 'true', 'errors'));
31
+ log('client-ready: sending page.load event');
32
+ yield* Effect.tryPromise(() =>
33
+ invokePromise(ObservabilityOperation.SendEvent, {
34
+ name: 'page.load',
35
+ properties: {
36
+ // TODO(wittjosiah): These apis are deprecated. Is there a better way to find this information?
37
+ loadDuration: window.performance.timing.loadEventEnd - window.performance.timing.loadEventStart,
38
+ },
39
+ }),
40
+ );
41
+ log('client-ready: page.load event sent');
60
42
 
61
- await dispatch(
62
- createIntent(ObservabilityAction.SendEvent, {
63
- name: 'page.load',
64
- properties: {
65
- // TODO(wittjosiah): These apis are deprecated. Is there a better way to find this information?
66
- loadDuration: window.performance.timing.loadEventEnd - window.performance.timing.loadEventStart,
67
- },
68
- }),
69
- );
43
+ // Each provider is logged individually because some provider setups perform
44
+ // RPC calls (e.g. runtimeMetricsProvider awaits SystemService.getPlatform());
45
+ // a hung worker pipe surfaces as a missing "added" log, so the last
46
+ // "adding ..." line points to the stall.
47
+ log('client-ready: adding identity data provider');
48
+ yield* observability.addDataProvider(ObservabilityProvider.Client.identityProvider(client.services.services));
49
+ log('client-ready: identity data provider added');
70
50
 
71
- // Start client observability (i.e. not running as shared worker)
72
- // TODO(nf): how to prevent multiple instances for single shared worker?
73
- const cleanup = setupTelemetryListeners(namespace, client, observability);
51
+ log('client-ready: adding network metrics data provider');
52
+ yield* observability.addDataProvider(ObservabilityProvider.Client.networkMetricsProvider(client.services.services));
53
+ log('client-ready: network metrics data provider added');
74
54
 
75
- await Promise.all([
76
- observability.setIdentityTags(client.services.services),
77
- observability.startRuntimeMetrics(client),
78
- observability.startNetworkMetrics(client.services.services),
79
- observability.startSpacesMetrics(client, namespace),
80
- ]);
55
+ log('client-ready: adding runtime metrics data provider');
56
+ yield* observability.addDataProvider(ObservabilityProvider.Client.runtimeMetricsProvider(client.services.services));
57
+ log('client-ready: runtime metrics data provider added');
81
58
 
82
- if (client.halo.identity.get()) {
83
- await sendPrivacyNotice();
84
- } else {
85
- const subscription = client.halo.identity.subscribe(async (identity) => {
86
- if (identity && observability) {
87
- await sendPrivacyNotice();
88
- await observability.setIdentityTags(client.services.services);
89
- subscription.unsubscribe();
90
- }
91
- });
92
- }
59
+ log('client-ready: adding space metrics data provider');
60
+ yield* observability.addDataProvider(ObservabilityProvider.Client.spacesMetricsProvider(client));
61
+ log('client-ready: space metrics data provider added');
93
62
 
94
- return contributes(ObservabilityCapabilities.Observability, observability, async () => {
95
- cleanup();
96
- await observability.close();
97
- });
98
- };
63
+ log('client-ready: contributing observability capability');
64
+ return Capability.contributes(ObservabilityCapabilities.Observability, observability, () => observability.close());
65
+ }),
66
+ );
@@ -2,13 +2,17 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { lazy } from '@dxos/app-framework';
5
+ import { Capability } from '@dxos/app-framework';
6
+ import { OperationHandlerSet } from '@dxos/compute';
6
7
 
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'));
8
+ import type { ClientReadyOptions } from './client-ready';
13
9
 
14
- export * from './capabilities';
10
+ export const ClientReady = Capability.lazy<ClientReadyOptions>('ClientReady', () => import('./client-ready'));
11
+ export const PrivacyNotice = Capability.lazy('PrivacyNotice', () => import('./privacy-notice'));
12
+ export const OperationHandler = Capability.lazy<OperationHandlerSet.OperationHandlerSet>(
13
+ 'OperationHandler',
14
+ () => import('./operation-handler'),
15
+ );
16
+ export const ReactSurface = Capability.lazy('ReactSurface', () => import('./react-surface'));
17
+ export const ObservabilitySettings = Capability.lazy('ObservabilitySettings', () => import('./settings'));
18
+ export const ObservabilityState = Capability.lazy('ObservabilityState', () => import('./state'));
@@ -0,0 +1,16 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import { Capabilities, Capability } from '@dxos/app-framework';
8
+ import type { OperationHandlerSet } from '@dxos/compute';
9
+
10
+ import { ObservabilityOperationHandlerSet } from '#operations';
11
+
12
+ export default Capability.makeModule<OperationHandlerSet.OperationHandlerSet>(
13
+ Effect.fnUntraced(function* () {
14
+ return Capability.contributes(Capabilities.OperationHandler, ObservabilityOperationHandlerSet);
15
+ }),
16
+ );
@@ -0,0 +1,50 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import { Capabilities, Capability } from '@dxos/app-framework';
8
+ import { LayoutOperation, SettingsOperation } from '@dxos/app-toolkit';
9
+
10
+ import { meta } from '#meta';
11
+ import { ObservabilityCapabilities } from '#types';
12
+
13
+ /**
14
+ * Shows the privacy notice toast once when an identity is first created.
15
+ * Activates on `ClientEvents.IdentityCreated` — which only fires for genuinely
16
+ * new identities, not for recovered or joined ones — so no HALO device-count
17
+ * checks or session-storage flags are needed.
18
+ */
19
+ export default Capability.makeModule(
20
+ Effect.fnUntraced(function* () {
21
+ const { invokePromise } = yield* Capability.get(Capabilities.OperationInvoker);
22
+ const registry = yield* Capability.get(Capabilities.AtomRegistry);
23
+ const stateAtom = yield* Capability.get(ObservabilityCapabilities.State);
24
+ const client = yield* Capability.get(ObservabilityCapabilities.ClientCapability);
25
+
26
+ const environment = client?.config?.values.runtime?.app?.env?.DX_ENVIRONMENT;
27
+ const notify =
28
+ environment && environment !== 'ci' && !environment.endsWith('.local') && !environment.endsWith('.lan');
29
+
30
+ const state = registry.get(stateAtom);
31
+ if (!state.notified && notify) {
32
+ yield* Effect.tryPromise(() =>
33
+ invokePromise(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
+ return [];
49
+ }),
50
+ );