@dxos/plugin-observability 0.8.4-main.422d1c7879 → 0.8.4-main.4668b7de9b

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 (200) 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/{node-esm/cli/index.mjs → neutral/ObservabilityPlugin.node.mjs} +8 -7
  6. package/dist/lib/neutral/ObservabilityPlugin.node.mjs.map +7 -0
  7. package/dist/lib/{browser/cli/index.mjs → neutral/ObservabilityPlugin.workerd.mjs} +8 -6
  8. package/dist/lib/neutral/ObservabilityPlugin.workerd.mjs.map +7 -0
  9. package/dist/lib/{browser/ObservabilitySettings-EM7ABGCA.mjs → neutral/ObservabilitySettings-H6UKYDDT.mjs} +9 -13
  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-RY77X57N.mjs +109 -0
  18. package/dist/lib/neutral/chunk-RY77X57N.mjs.map +7 -0
  19. package/dist/lib/neutral/client-ready-DN3L5DIM.mjs +50 -0
  20. package/dist/lib/neutral/client-ready-DN3L5DIM.mjs.map +7 -0
  21. package/dist/lib/neutral/components/index.mjs +9 -0
  22. package/dist/lib/neutral/components/index.mjs.map +7 -0
  23. package/dist/lib/neutral/index.mjs +18 -0
  24. package/dist/lib/neutral/meta.json +1 -0
  25. package/dist/lib/neutral/meta.mjs +8 -0
  26. package/dist/lib/neutral/operation-handler-4WWRXOHR.mjs +13 -0
  27. package/dist/lib/neutral/operation-handler-4WWRXOHR.mjs.map +7 -0
  28. package/dist/lib/neutral/operations/index.mjs +8 -0
  29. package/dist/lib/neutral/plugin.mjs +16 -0
  30. package/dist/lib/neutral/plugin.mjs.map +7 -0
  31. package/dist/lib/neutral/privacy-notice-G5TVVCIW.mjs +66 -0
  32. package/dist/lib/neutral/privacy-notice-G5TVVCIW.mjs.map +7 -0
  33. package/dist/lib/neutral/react-surface-SHB2SLRK.mjs +35 -0
  34. package/dist/lib/neutral/react-surface-SHB2SLRK.mjs.map +7 -0
  35. package/dist/lib/{browser/send-event-BICCRJ2W.mjs → neutral/send-event-FKLBHQ2Q.mjs} +7 -10
  36. package/dist/lib/neutral/send-event-FKLBHQ2Q.mjs.map +7 -0
  37. package/dist/lib/neutral/settings-MZYK2WQR.mjs +30 -0
  38. package/dist/lib/neutral/settings-MZYK2WQR.mjs.map +7 -0
  39. package/dist/lib/neutral/state-5COCK3KV.mjs +27 -0
  40. package/dist/lib/neutral/state-5COCK3KV.mjs.map +7 -0
  41. package/dist/lib/{browser/toggle-NV2X62VV.mjs → neutral/toggle-S3T6KNBA.mjs} +8 -11
  42. package/dist/lib/neutral/toggle-S3T6KNBA.mjs.map +7 -0
  43. package/dist/lib/{browser/chunk-K33HLC3Z.mjs → neutral/translations.mjs} +5 -12
  44. package/dist/lib/neutral/translations.mjs.map +7 -0
  45. package/dist/lib/neutral/types/index.mjs +14 -0
  46. package/dist/lib/neutral/types/index.mjs.map +7 -0
  47. package/dist/types/src/ObservabilityPlugin.d.ts +6 -0
  48. package/dist/types/src/ObservabilityPlugin.d.ts.map +1 -1
  49. package/dist/types/src/{cli/plugin.d.ts → ObservabilityPlugin.node.d.ts} +2 -1
  50. package/dist/types/src/ObservabilityPlugin.node.d.ts.map +1 -0
  51. package/dist/types/src/ObservabilityPlugin.test.d.ts +2 -0
  52. package/dist/types/src/ObservabilityPlugin.test.d.ts.map +1 -0
  53. package/dist/types/src/ObservabilityPlugin.workerd.d.ts +4 -0
  54. package/dist/types/src/ObservabilityPlugin.workerd.d.ts.map +1 -0
  55. package/dist/types/src/capabilities/client-ready.d.ts.map +1 -1
  56. package/dist/types/src/capabilities/index.d.ts +2 -2
  57. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  58. package/dist/types/src/capabilities/operation-handler.d.ts +1 -1
  59. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -1
  60. package/dist/types/src/capabilities/privacy-notice.d.ts +11 -0
  61. package/dist/types/src/capabilities/privacy-notice.d.ts.map +1 -0
  62. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  63. package/dist/types/src/capabilities/settings.d.ts.map +1 -1
  64. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  65. package/dist/types/src/components/ObservabilitySettings/ObservabilitySettings.d.ts +1 -1
  66. package/dist/types/src/components/ObservabilitySettings/ObservabilitySettings.d.ts.map +1 -1
  67. package/dist/types/src/components/ObservabilitySettings/ObservabilitySettings.stories.d.ts +10 -18
  68. package/dist/types/src/components/ObservabilitySettings/ObservabilitySettings.stories.d.ts.map +1 -1
  69. package/dist/types/src/components/index.d.ts +0 -1
  70. package/dist/types/src/components/index.d.ts.map +1 -1
  71. package/dist/types/src/index.d.ts +1 -4
  72. package/dist/types/src/index.d.ts.map +1 -1
  73. package/dist/types/src/meta.d.ts +1 -1
  74. package/dist/types/src/meta.d.ts.map +1 -1
  75. package/dist/types/src/operations/index.d.ts +1 -3
  76. package/dist/types/src/operations/index.d.ts.map +1 -1
  77. package/dist/types/src/operations/send-event.d.ts +3 -3
  78. package/dist/types/src/operations/send-event.d.ts.map +1 -1
  79. package/dist/types/src/operations/toggle.d.ts +3 -3
  80. package/dist/types/src/operations/toggle.d.ts.map +1 -1
  81. package/dist/types/src/plugin.d.ts +4 -0
  82. package/dist/types/src/plugin.d.ts.map +1 -0
  83. package/dist/types/src/translations.d.ts +10 -19
  84. package/dist/types/src/translations.d.ts.map +1 -1
  85. package/dist/types/src/types/ObservabilityCapabilities.d.ts +28 -0
  86. package/dist/types/src/types/ObservabilityCapabilities.d.ts.map +1 -0
  87. package/dist/types/src/types/ObservabilityEvents.d.ts +4 -0
  88. package/dist/types/src/types/ObservabilityEvents.d.ts.map +1 -0
  89. package/dist/types/src/types/ObservabilityOperation.d.ts +10 -0
  90. package/dist/types/src/types/ObservabilityOperation.d.ts.map +1 -0
  91. package/dist/types/src/types/Settings.d.ts +1 -1
  92. package/dist/types/src/types/Settings.d.ts.map +1 -1
  93. package/dist/types/src/types/index.d.ts +3 -2
  94. package/dist/types/src/types/index.d.ts.map +1 -1
  95. package/dist/types/tsconfig.tsbuildinfo +1 -1
  96. package/package.json +70 -52
  97. package/src/{cli/plugin.ts → ObservabilityPlugin.node.ts} +5 -3
  98. package/src/ObservabilityPlugin.test.ts +25 -0
  99. package/src/ObservabilityPlugin.ts +24 -8
  100. package/src/ObservabilityPlugin.workerd.ts +32 -0
  101. package/src/capabilities/client-ready.ts +22 -41
  102. package/src/capabilities/index.ts +2 -2
  103. package/src/capabilities/operation-handler.ts +1 -1
  104. package/src/capabilities/privacy-notice.ts +50 -0
  105. package/src/capabilities/react-surface.tsx +1 -7
  106. package/src/components/ObservabilitySettings/ObservabilitySettings.stories.tsx +2 -1
  107. package/src/components/ObservabilitySettings/ObservabilitySettings.tsx +8 -12
  108. package/src/components/index.ts +0 -2
  109. package/src/index.ts +1 -4
  110. package/src/meta.ts +7 -4
  111. package/src/operations/index.ts +1 -5
  112. package/src/operations/send-event.ts +3 -4
  113. package/src/operations/toggle.ts +3 -4
  114. package/src/plugin.ts +11 -0
  115. package/src/translations.ts +1 -9
  116. package/src/types/ObservabilityCapabilities.ts +42 -0
  117. package/src/types/{events.ts → ObservabilityEvents.ts} +3 -3
  118. package/src/types/ObservabilityOperation.ts +44 -0
  119. package/src/types/Settings.ts +4 -1
  120. package/src/types/index.ts +3 -2
  121. package/dist/lib/browser/ObservabilitySettings-EM7ABGCA.mjs.map +0 -7
  122. package/dist/lib/browser/capture-user-feedback-H4KPG7PC.mjs +0 -25
  123. package/dist/lib/browser/capture-user-feedback-H4KPG7PC.mjs.map +0 -7
  124. package/dist/lib/browser/chunk-6WX6ST5B.mjs +0 -49
  125. package/dist/lib/browser/chunk-6WX6ST5B.mjs.map +0 -7
  126. package/dist/lib/browser/chunk-K33HLC3Z.mjs.map +0 -7
  127. package/dist/lib/browser/chunk-VZR3FNBD.mjs +0 -85
  128. package/dist/lib/browser/chunk-VZR3FNBD.mjs.map +0 -7
  129. package/dist/lib/browser/cli/index.mjs.map +0 -7
  130. package/dist/lib/browser/index.mjs +0 -110
  131. package/dist/lib/browser/index.mjs.map +0 -7
  132. package/dist/lib/browser/meta.json +0 -1
  133. package/dist/lib/browser/operations/index.mjs +0 -16
  134. package/dist/lib/browser/operations/index.mjs.map +0 -7
  135. package/dist/lib/browser/send-event-BICCRJ2W.mjs.map +0 -7
  136. package/dist/lib/browser/toggle-NV2X62VV.mjs.map +0 -7
  137. package/dist/lib/browser/types/index.mjs +0 -16
  138. package/dist/lib/node-esm/ObservabilitySettings-VP4A362Z.mjs +0 -32
  139. package/dist/lib/node-esm/ObservabilitySettings-VP4A362Z.mjs.map +0 -7
  140. package/dist/lib/node-esm/capture-user-feedback-DTL3DUXB.mjs +0 -26
  141. package/dist/lib/node-esm/capture-user-feedback-DTL3DUXB.mjs.map +0 -7
  142. package/dist/lib/node-esm/chunk-FZRJBWSE.mjs +0 -86
  143. package/dist/lib/node-esm/chunk-FZRJBWSE.mjs.map +0 -7
  144. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +0 -11
  145. package/dist/lib/node-esm/chunk-JGHMP7UL.mjs +0 -35
  146. package/dist/lib/node-esm/chunk-JGHMP7UL.mjs.map +0 -7
  147. package/dist/lib/node-esm/chunk-QZKJ2TUU.mjs +0 -50
  148. package/dist/lib/node-esm/chunk-QZKJ2TUU.mjs.map +0 -7
  149. package/dist/lib/node-esm/cli/index.mjs.map +0 -7
  150. package/dist/lib/node-esm/index.mjs +0 -111
  151. package/dist/lib/node-esm/index.mjs.map +0 -7
  152. package/dist/lib/node-esm/meta.json +0 -1
  153. package/dist/lib/node-esm/operations/index.mjs +0 -17
  154. package/dist/lib/node-esm/operations/index.mjs.map +0 -7
  155. package/dist/lib/node-esm/send-event-IWZKYZBI.mjs +0 -24
  156. package/dist/lib/node-esm/send-event-IWZKYZBI.mjs.map +0 -7
  157. package/dist/lib/node-esm/toggle-NJWUAPD4.mjs +0 -49
  158. package/dist/lib/node-esm/toggle-NJWUAPD4.mjs.map +0 -7
  159. package/dist/lib/node-esm/types/index.mjs +0 -17
  160. package/dist/types/src/capabilities/app-graph-builder.d.ts +0 -6
  161. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +0 -1
  162. package/dist/types/src/cli/index.d.ts +0 -2
  163. package/dist/types/src/cli/index.d.ts.map +0 -1
  164. package/dist/types/src/cli/plugin.d.ts.map +0 -1
  165. package/dist/types/src/components/FeedbackForm/FeedbackForm.d.ts +0 -6
  166. package/dist/types/src/components/FeedbackForm/FeedbackForm.d.ts.map +0 -1
  167. package/dist/types/src/components/FeedbackForm/FeedbackForm.stories.d.ts +0 -36
  168. package/dist/types/src/components/FeedbackForm/FeedbackForm.stories.d.ts.map +0 -1
  169. package/dist/types/src/components/FeedbackForm/index.d.ts +0 -2
  170. package/dist/types/src/components/FeedbackForm/index.d.ts.map +0 -1
  171. package/dist/types/src/containers/HelpContainer/HelpContainer.d.ts +0 -4
  172. package/dist/types/src/containers/HelpContainer/HelpContainer.d.ts.map +0 -1
  173. package/dist/types/src/containers/HelpContainer/index.d.ts +0 -2
  174. package/dist/types/src/containers/HelpContainer/index.d.ts.map +0 -1
  175. package/dist/types/src/containers/index.d.ts +0 -3
  176. package/dist/types/src/containers/index.d.ts.map +0 -1
  177. package/dist/types/src/operations/capture-user-feedback.d.ts +0 -5
  178. package/dist/types/src/operations/capture-user-feedback.d.ts.map +0 -1
  179. package/dist/types/src/operations/definitions.d.ts +0 -23
  180. package/dist/types/src/operations/definitions.d.ts.map +0 -1
  181. package/dist/types/src/types/capabilities.d.ts +0 -25
  182. package/dist/types/src/types/capabilities.d.ts.map +0 -1
  183. package/dist/types/src/types/events.d.ts +0 -6
  184. package/dist/types/src/types/events.d.ts.map +0 -1
  185. package/src/capabilities/app-graph-builder.ts +0 -36
  186. package/src/cli/index.ts +0 -5
  187. package/src/components/FeedbackForm/FeedbackForm.stories.tsx +0 -32
  188. package/src/components/FeedbackForm/FeedbackForm.tsx +0 -33
  189. package/src/components/FeedbackForm/index.ts +0 -5
  190. package/src/containers/HelpContainer/HelpContainer.tsx +0 -56
  191. package/src/containers/HelpContainer/index.ts +0 -5
  192. package/src/containers/index.ts +0 -7
  193. package/src/operations/capture-user-feedback.ts +0 -22
  194. package/src/operations/definitions.ts +0 -77
  195. package/src/types/capabilities.ts +0 -37
  196. /package/dist/lib/{browser → neutral}/chunk-J5LGTIGS.mjs +0 -0
  197. /package/dist/lib/{browser → neutral}/chunk-J5LGTIGS.mjs.map +0 -0
  198. /package/dist/lib/{browser/types → neutral}/index.mjs.map +0 -0
  199. /package/dist/lib/{node-esm/chunk-HSLMI22Q.mjs.map → neutral/meta.mjs.map} +0 -0
  200. /package/dist/lib/{node-esm/types → neutral/operations}/index.mjs.map +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/plugin-observability",
3
- "version": "0.8.4-main.422d1c7879",
3
+ "version": "0.8.4-main.4668b7de9b",
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",
@@ -8,42 +8,68 @@
8
8
  "type": "git",
9
9
  "url": "https://github.com/dxos/dxos"
10
10
  },
11
- "license": "MIT",
11
+ "license": "FSL-1.1-Apache-2.0",
12
12
  "author": "DXOS.org",
13
13
  "sideEffects": true,
14
14
  "type": "module",
15
15
  "imports": {
16
- "#capabilities": "./src/capabilities/index.ts",
17
- "#components": "./src/components/index.ts",
18
- "#containers": "./src/containers/index.ts",
19
- "#meta": "./src/meta.ts",
20
- "#operations": "./src/operations/index.ts",
21
- "#types": "./src/types/index.ts"
22
- },
23
- "exports": {
24
- ".": {
25
- "source": "./src/index.ts",
26
- "types": "./dist/types/src/index.d.ts",
27
- "browser": "./dist/lib/browser/index.mjs",
28
- "node": "./dist/lib/node-esm/index.mjs"
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"
29
25
  },
30
- "./cli": {
31
- "source": "./src/cli/index.ts",
32
- "types": "./dist/types/src/cli/index.d.ts",
33
- "browser": "./dist/lib/browser/cli/index.mjs",
34
- "node": "./dist/lib/node-esm/cli/index.mjs"
26
+ "#meta": {
27
+ "source": "./src/meta.ts",
28
+ "types": "./dist/types/src/meta.d.ts",
29
+ "default": "./dist/lib/neutral/meta.mjs"
35
30
  },
36
- "./operations": {
31
+ "#operations": {
37
32
  "source": "./src/operations/index.ts",
38
33
  "types": "./dist/types/src/operations/index.d.ts",
39
- "browser": "./dist/lib/browser/operations/index.mjs",
40
- "node": "./dist/lib/node-esm/operations/index.mjs"
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"
41
51
  },
42
- "./types": {
52
+ "#types": {
43
53
  "source": "./src/types/index.ts",
44
54
  "types": "./dist/types/src/types/index.d.ts",
45
- "browser": "./dist/lib/browser/types/index.mjs",
46
- "node": "./dist/lib/node-esm/types/index.mjs"
55
+ "default": "./dist/lib/neutral/types/index.mjs"
56
+ }
57
+ },
58
+ "exports": {
59
+ ".": {
60
+ "source": "./src/index.ts",
61
+ "types": "./dist/types/src/index.d.ts",
62
+ "default": "./dist/lib/neutral/index.mjs"
63
+ },
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"
47
73
  }
48
74
  },
49
75
  "types": "dist/types/src/index.d.ts",
@@ -52,38 +78,30 @@
52
78
  "src"
53
79
  ],
54
80
  "dependencies": {
55
- "@effect-atom/atom": "^0.5.1",
56
81
  "@effect-atom/atom-react": "^0.5.0",
57
82
  "effect": "3.20.0",
58
- "localforage": "^1.10.0",
59
- "@dxos/app-framework": "0.8.4-main.422d1c7879",
60
- "@dxos/context": "0.8.4-main.422d1c7879",
61
- "@dxos/app-toolkit": "0.8.4-main.422d1c7879",
62
- "@dxos/async": "0.8.4-main.422d1c7879",
63
- "@dxos/invariant": "0.8.4-main.422d1c7879",
64
- "@dxos/echo": "0.8.4-main.422d1c7879",
65
- "@dxos/effect": "0.8.4-main.422d1c7879",
66
- "@dxos/log": "0.8.4-main.422d1c7879",
67
- "@dxos/observability": "0.8.4-main.422d1c7879",
68
- "@dxos/operation": "0.8.4-main.422d1c7879",
69
- "@dxos/plugin-graph": "0.8.4-main.422d1c7879",
70
- "@dxos/protocols": "0.8.4-main.422d1c7879",
71
- "@dxos/react-client": "0.8.4-main.422d1c7879",
72
- "@dxos/react-hooks": "0.8.4-main.422d1c7879",
73
- "@dxos/react-ui-attention": "0.8.4-main.422d1c7879",
74
- "@dxos/react-ui-form": "0.8.4-main.422d1c7879",
75
- "@dxos/react-ui-stack": "0.8.4-main.422d1c7879",
76
- "@dxos/util": "0.8.4-main.422d1c7879"
83
+ "@dxos/app-toolkit": "0.8.4-main.4668b7de9b",
84
+ "@dxos/app-framework": "0.8.4-main.4668b7de9b",
85
+ "@dxos/effect": "0.8.4-main.4668b7de9b",
86
+ "@dxos/invariant": "0.8.4-main.4668b7de9b",
87
+ "@dxos/keys": "0.8.4-main.4668b7de9b",
88
+ "@dxos/client": "0.8.4-main.4668b7de9b",
89
+ "@dxos/observability": "0.8.4-main.4668b7de9b",
90
+ "@dxos/log": "0.8.4-main.4668b7de9b",
91
+ "@dxos/react-ui-form": "0.8.4-main.4668b7de9b",
92
+ "@dxos/compute": "0.8.4-main.4668b7de9b",
93
+ "@dxos/util": "0.8.4-main.4668b7de9b"
77
94
  },
78
95
  "devDependencies": {
79
96
  "@effect-atom/atom-react": "^0.5.0",
80
97
  "@effect/platform": "0.94.4",
81
98
  "@types/react": "~19.2.7",
82
99
  "react": "~19.2.3",
83
- "vite": "^7.1.11",
84
- "@dxos/ui-theme": "0.8.4-main.422d1c7879",
85
- "@dxos/storybook-utils": "0.8.4-main.422d1c7879",
86
- "@dxos/react-ui": "0.8.4-main.422d1c7879"
100
+ "vite": "^8.0.14",
101
+ "@dxos/plugin-testing": "0.8.4-main.4668b7de9b",
102
+ "@dxos/react-ui": "0.8.4-main.4668b7de9b",
103
+ "@dxos/ui-theme": "0.8.4-main.4668b7de9b",
104
+ "@dxos/storybook-utils": "0.8.4-main.4668b7de9b"
87
105
  },
88
106
  "peerDependencies": {
89
107
  "@effect-atom/atom-react": "^0.5.0",
@@ -91,8 +109,8 @@
91
109
  "effect": "3.20.0",
92
110
  "react": "~19.2.3",
93
111
  "react-dom": "~19.2.3",
94
- "@dxos/react-ui": "0.8.4-main.422d1c7879",
95
- "@dxos/ui-theme": "0.8.4-main.422d1c7879"
112
+ "@dxos/react-ui": "0.8.4-main.4668b7de9b",
113
+ "@dxos/ui-theme": "0.8.4-main.4668b7de9b"
96
114
  },
97
115
  "publishConfig": {
98
116
  "access": "public"
@@ -1,15 +1,15 @@
1
1
  //
2
- // Copyright 2025 DXOS.org
2
+ // Copyright 2026 DXOS.org
3
3
  //
4
4
 
5
5
  import * as Effect from 'effect/Effect';
6
6
 
7
7
  import { Capabilities, Capability, Plugin } from '@dxos/app-framework';
8
8
  import { AppPlugin } from '@dxos/app-toolkit';
9
- import { Operation, OperationHandlerSet } from '@dxos/operation';
9
+ import { Operation, OperationHandlerSet } from '@dxos/compute';
10
10
 
11
11
  import { meta } from '#meta';
12
- import { ObservabilityOperation } from '#operations';
12
+ import { ObservabilityOperation } from '#types';
13
13
 
14
14
  // TODO(wittjosiah): Hook up.
15
15
  export const ObservabilityPlugin = Plugin.define(meta).pipe(
@@ -29,3 +29,5 @@ export const ObservabilityPlugin = Plugin.define(meta).pipe(
29
29
  }),
30
30
  Plugin.make,
31
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
+ });
@@ -9,26 +9,28 @@ import { AppActivationEvents, AppPlugin } from '@dxos/app-toolkit';
9
9
  import { type Observability } from '@dxos/observability';
10
10
 
11
11
  import {
12
- AppGraphBuilder,
13
12
  ClientReady,
14
13
  ObservabilitySettings,
15
14
  ObservabilityState,
16
15
  OperationHandler,
16
+ PrivacyNotice,
17
17
  ReactSurface,
18
18
  } from '#capabilities';
19
19
  import { meta } from '#meta';
20
- import { ClientReadyEvent, ObservabilityEvents } from '#types';
21
- import { ObservabilityCapabilities } from '#types';
22
-
23
- import { translations } from './translations';
20
+ import { translations } from '#translations';
21
+ import { ObservabilityCapabilities, ObservabilityEvents } from '#types';
24
22
 
25
23
  export type ObservabilityPluginOptions = {
26
24
  namespace: string;
27
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>;
28
31
  };
29
32
 
30
33
  export const ObservabilityPlugin = Plugin.define<ObservabilityPluginOptions>(meta).pipe(
31
- AppPlugin.addAppGraphModule({ activate: AppGraphBuilder }),
32
34
  AppPlugin.addSurfaceModule({ activate: ReactSurface }),
33
35
  AppPlugin.addTranslationsModule({ translations }),
34
36
  Plugin.addModule(({ observability }) => ({
@@ -55,13 +57,25 @@ export const ObservabilityPlugin = Plugin.define<ObservabilityPluginOptions>(met
55
57
  activatesOn: ActivationEvents.Startup,
56
58
  activate: () => Effect.succeed(Capability.contributes(ObservabilityCapabilities.Namespace, namespace)),
57
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
+ })),
58
68
  AppPlugin.addOperationHandlerModule({ activate: OperationHandler }),
69
+ Plugin.addModule({
70
+ activatesOn: ActivationEvent.make('org.dxos.plugin.client.event.identity-created'),
71
+ activate: PrivacyNotice,
72
+ }),
59
73
  Plugin.addModule(({ namespace, observability }) => ({
60
74
  id: Capability.getModuleTag(ClientReady),
61
75
  activatesOn: ActivationEvent.allOf(
62
- ActivationEvents.OperationInvokerReady,
76
+ ActivationEvents.ProcessManagerReady,
63
77
  ObservabilityEvents.StateReady,
64
- ClientReadyEvent,
78
+ ObservabilityEvents.ClientReadyEvent,
65
79
  ),
66
80
  activate: () =>
67
81
  Effect.gen(function* () {
@@ -71,3 +85,5 @@ export const ObservabilityPlugin = Plugin.define<ObservabilityPluginOptions>(met
71
85
  })),
72
86
  Plugin.make,
73
87
  );
88
+
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;
@@ -5,12 +5,10 @@
5
5
  import * as Effect from 'effect/Effect';
6
6
 
7
7
  import { Capabilities, Capability } from '@dxos/app-framework';
8
- import { LayoutOperation, SettingsOperation } from '@dxos/app-toolkit';
8
+ import { log } from '@dxos/log';
9
9
  import { type Observability, ObservabilityProvider } from '@dxos/observability';
10
10
 
11
- import { meta } from '#meta';
12
- import { ObservabilityOperation } from '#operations';
13
- import { ClientCapability, ObservabilityCapabilities } from '#types';
11
+ import { ObservabilityCapabilities, ObservabilityOperation } from '#types';
14
12
 
15
13
  export type ClientReadyOptions = {
16
14
  namespace: string;
@@ -21,38 +19,16 @@ export default Capability.makeModule(
21
19
  Effect.fnUntraced(function* ({ observability }: ClientReadyOptions) {
22
20
  const manager = yield* Capability.get(Capabilities.PluginManager);
23
21
  const { invokePromise } = yield* Capability.get(Capabilities.OperationInvoker);
24
- const registry = yield* Capability.get(Capabilities.AtomRegistry);
25
- const stateAtom = yield* Capability.get(ObservabilityCapabilities.State);
26
- const client = yield* Capability.get(ClientCapability);
27
-
28
- const sendPrivacyNotice = async () => {
29
- const environment = client?.config?.values.runtime?.app?.env?.DX_ENVIRONMENT;
30
- const notify =
31
- environment && environment !== 'ci' && !environment.endsWith('.local') && !environment.endsWith('.lan');
32
- const state = registry.get(stateAtom);
33
- if (!state.notified && notify) {
34
- await invokePromise(LayoutOperation.AddToast, {
35
- id: `${meta.id}.notice`,
36
- title: ['observability-toast.label', { ns: meta.id }],
37
- description: ['observability-toast.description', { ns: meta.id }],
38
- duration: Infinity,
39
- icon: 'ph--info--regular',
40
- actionLabel: ['observability-toast-action.label', { ns: meta.id }],
41
- actionAlt: ['observability-toast-action.alt', { ns: meta.id }],
42
- closeLabel: ['observability-toast-close.label', { ns: meta.id }],
43
- onAction: () => invokePromise(SettingsOperation.Open, { plugin: meta.id }),
44
- });
45
-
46
- registry.set(stateAtom, { ...registry.get(stateAtom), notified: true });
47
- }
48
- };
22
+ const client = yield* Capability.get(ObservabilityCapabilities.ClientCapability);
49
23
 
50
24
  // Ensure errors are tagged with enabled plugins to help with reproductions.
51
25
  const enabledPlugins = manager.getEnabled();
26
+ log('client-ready: tagging enabled plugins', { count: enabledPlugins.length });
52
27
  for (const plugin of enabledPlugins) {
53
28
  observability.setTags({ [`pluginEnabled-${plugin}`]: 'true' }, 'errors');
54
29
  }
55
30
 
31
+ log('client-ready: sending page.load event');
56
32
  yield* Effect.tryPromise(() =>
57
33
  invokePromise(ObservabilityOperation.SendEvent, {
58
34
  name: 'page.load',
@@ -62,24 +38,29 @@ export default Capability.makeModule(
62
38
  },
63
39
  }),
64
40
  );
41
+ log('client-ready: page.load event sent');
65
42
 
66
- // Add client data providers.
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');
67
48
  yield* observability.addDataProvider(ObservabilityProvider.Client.identityProvider(client.services.services));
49
+ log('client-ready: identity data provider added');
50
+
51
+ log('client-ready: adding network metrics data provider');
68
52
  yield* observability.addDataProvider(ObservabilityProvider.Client.networkMetricsProvider(client.services.services));
53
+ log('client-ready: network metrics data provider added');
54
+
55
+ log('client-ready: adding runtime metrics data provider');
69
56
  yield* observability.addDataProvider(ObservabilityProvider.Client.runtimeMetricsProvider(client.services.services));
70
- yield* observability.addDataProvider(ObservabilityProvider.Client.spacesMetricsProvider(client));
57
+ log('client-ready: runtime metrics data provider added');
71
58
 
72
- if (client.halo.identity.get()) {
73
- yield* Effect.tryPromise(() => sendPrivacyNotice());
74
- } else {
75
- const subscription = client.halo.identity.subscribe(async (identity) => {
76
- if (identity && observability) {
77
- await sendPrivacyNotice();
78
- subscription.unsubscribe();
79
- }
80
- });
81
- }
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');
82
62
 
63
+ log('client-ready: contributing observability capability');
83
64
  return Capability.contributes(ObservabilityCapabilities.Observability, observability, () => observability.close());
84
65
  }),
85
66
  );
@@ -3,12 +3,12 @@
3
3
  //
4
4
 
5
5
  import { Capability } from '@dxos/app-framework';
6
- import { OperationHandlerSet } from '@dxos/operation';
6
+ import { OperationHandlerSet } from '@dxos/compute';
7
7
 
8
8
  import type { ClientReadyOptions } from './client-ready';
9
9
 
10
- export const AppGraphBuilder = Capability.lazy('AppGraphBuilder', () => import('./app-graph-builder'));
11
10
  export const ClientReady = Capability.lazy<ClientReadyOptions>('ClientReady', () => import('./client-ready'));
11
+ export const PrivacyNotice = Capability.lazy('PrivacyNotice', () => import('./privacy-notice'));
12
12
  export const OperationHandler = Capability.lazy<OperationHandlerSet.OperationHandlerSet>(
13
13
  'OperationHandler',
14
14
  () => import('./operation-handler'),
@@ -5,7 +5,7 @@
5
5
  import * as Effect from 'effect/Effect';
6
6
 
7
7
  import { Capabilities, Capability } from '@dxos/app-framework';
8
- import type { OperationHandlerSet } from '@dxos/operation';
8
+ import type { OperationHandlerSet } from '@dxos/compute';
9
9
 
10
10
  import { ObservabilityOperationHandlerSet } from '#operations';
11
11
 
@@ -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
+ );
@@ -10,9 +10,8 @@ import { Surface, useOperationInvoker, useSettingsState } from '@dxos/app-framew
10
10
  import { AppSurface } from '@dxos/app-toolkit/ui';
11
11
 
12
12
  import { ObservabilitySettings } from '#components';
13
- import { HelpContainer } from '#containers';
14
13
  import { meta } from '#meta';
15
- import { ObservabilityOperation } from '#operations';
14
+ import { ObservabilityOperation } from '#types';
16
15
  import { type Settings } from '#types';
17
16
 
18
17
  export default Capability.makeModule(() =>
@@ -31,11 +30,6 @@ export default Capability.makeModule(() =>
31
30
  return <ObservabilitySettings settings={settings} onSettingsChange={handleSettingsChange} />;
32
31
  },
33
32
  }),
34
- Surface.create({
35
- id: 'help',
36
- role: 'deck-companion--help',
37
- component: () => <HelpContainer />,
38
- }),
39
33
  ]),
40
34
  ),
41
35
  );
@@ -6,7 +6,8 @@ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
6
 
7
7
  import { withLayout, withTheme } from '@dxos/react-ui/testing';
8
8
 
9
- import { translations } from '../../translations';
9
+ import { translations } from '#translations';
10
+
10
11
  import { ObservabilitySettings } from './ObservabilitySettings';
11
12
 
12
13
  const meta = {
@@ -5,11 +5,11 @@
5
5
  import React from 'react';
6
6
 
7
7
  import { type AppSurface } from '@dxos/app-toolkit/ui';
8
- import { Input, Message, useTranslation } from '@dxos/react-ui';
8
+ import { Message, useTranslation } from '@dxos/react-ui';
9
9
  import { Settings as SettingsForm } from '@dxos/react-ui-form';
10
10
 
11
11
  import { meta } from '#meta';
12
- import { type Settings } from '#types';
12
+ import { Settings } from '#types';
13
13
 
14
14
  export type ObservabilitySettingsProps = AppSurface.SettingsArticleProps<Settings.Settings>;
15
15
 
@@ -22,16 +22,12 @@ export const ObservabilitySettings = ({ settings, onSettingsChange }: Observabil
22
22
  <Message.Root valence='info'>
23
23
  <Message.Content>{t('observability.description')}</Message.Content>
24
24
  </Message.Root>
25
- <SettingsForm.Item
26
- title={t('observability-enabled.label')}
27
- description={t('observability-enabled.description')}
28
- >
29
- <Input.Switch
30
- disabled={!onSettingsChange}
31
- checked={settings.enabled}
32
- onCheckedChange={(checked) => onSettingsChange?.((s) => ({ ...s, enabled: !!checked }))}
33
- />
34
- </SettingsForm.Item>
25
+ <SettingsForm.FieldSet
26
+ readonly={!onSettingsChange}
27
+ schema={Settings.Settings}
28
+ values={settings}
29
+ onValuesChanged={(values) => onSettingsChange?.(() => values)}
30
+ />
35
31
  </SettingsForm.Section>
36
32
  </SettingsForm.Viewport>
37
33
  );
@@ -4,6 +4,4 @@
4
4
 
5
5
  import { type ComponentType, lazy } from 'react';
6
6
 
7
- export * from './FeedbackForm';
8
-
9
7
  export const ObservabilitySettings: ComponentType<any> = lazy(() => import('./ObservabilitySettings'));
package/src/index.ts CHANGED
@@ -2,8 +2,5 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- export { ObservabilityCapabilities, ObservabilityEvents } from './types';
6
- export * from './components';
7
5
  export * from './meta';
8
- export * from './ObservabilityPlugin';
9
- export { translations as observabilityTranslations } from './translations';
6
+ export * from './types';
package/src/meta.ts CHANGED
@@ -2,15 +2,18 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { type Plugin } from '@dxos/app-framework';
5
+ import { Plugin } from '@dxos/app-framework';
6
+ import { DXN } from '@dxos/keys';
6
7
  import { trim } from '@dxos/util';
7
8
 
8
- export const meta: Plugin.Meta = {
9
- id: 'org.dxos.plugin.observability',
9
+ export const meta = Plugin.makeMeta({
10
+ key: DXN.make('org.dxos.plugin.observability'),
10
11
  name: 'Telemetry',
12
+ author: 'DXOS',
11
13
  description: trim`
12
14
  Application observability and telemetry collection for monitoring performance and usage patterns.
13
15
  Track metrics, logs, and traces for system health and analytics.
14
16
  `,
15
17
  icon: 'ph--eye--regular',
16
- };
18
+ tags: ['system'],
19
+ });
@@ -2,13 +2,9 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { OperationHandlerSet } from '@dxos/operation';
6
-
7
- export * as ObservabilityOperation from './definitions';
8
- export { UserFeedback } from './definitions';
5
+ import { OperationHandlerSet } from '@dxos/compute';
9
6
 
10
7
  export const ObservabilityOperationHandlerSet = OperationHandlerSet.lazy(
11
- () => import('./capture-user-feedback'),
12
8
  () => import('./send-event'),
13
9
  () => import('./toggle'),
14
10
  );
@@ -5,12 +5,11 @@
5
5
  import * as Effect from 'effect/Effect';
6
6
 
7
7
  import { Capability } from '@dxos/app-framework';
8
- import { Operation } from '@dxos/operation';
8
+ import { Operation } from '@dxos/compute';
9
9
 
10
- import { ObservabilityCapabilities } from '../types';
11
- import { SendEvent } from './definitions';
10
+ import { ObservabilityCapabilities, ObservabilityOperation } from '../types';
12
11
 
13
- const handler: Operation.WithHandler<typeof SendEvent> = SendEvent.pipe(
12
+ const handler: Operation.WithHandler<typeof ObservabilityOperation.SendEvent> = ObservabilityOperation.SendEvent.pipe(
14
13
  Operation.withHandler(
15
14
  Effect.fnUntraced(function* (input) {
16
15
  // NOTE: This is to ensure that events fired before observability is ready are still sent.