@dxos/plugin-observability 0.8.4-main.ead640a → 0.8.4-main.effb148878

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/LICENSE +102 -5
  2. package/README.md +1 -1
  3. package/dist/lib/neutral/ObservabilityPlugin.mjs +60 -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 +17 -0
  12. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  13. package/dist/lib/neutral/chunk-6QCY3Z6O.mjs +8 -0
  14. package/dist/lib/neutral/chunk-6QCY3Z6O.mjs.map +7 -0
  15. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  16. package/dist/lib/neutral/chunk-RPFT4FVC.mjs +20 -0
  17. package/dist/lib/neutral/chunk-RPFT4FVC.mjs.map +7 -0
  18. package/dist/lib/neutral/chunk-ZFVQL2JB.mjs +108 -0
  19. package/dist/lib/neutral/chunk-ZFVQL2JB.mjs.map +7 -0
  20. package/dist/lib/neutral/client-ready-TM7VE6CH.mjs +116 -0
  21. package/dist/lib/neutral/client-ready-TM7VE6CH.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/react-surface-SHB2SLRK.mjs +35 -0
  35. package/dist/lib/neutral/react-surface-SHB2SLRK.mjs.map +7 -0
  36. package/dist/lib/neutral/send-event-NUMOCKDO.mjs +20 -0
  37. package/dist/lib/neutral/send-event-NUMOCKDO.mjs.map +7 -0
  38. package/dist/lib/neutral/settings-MZYK2WQR.mjs +30 -0
  39. package/dist/lib/neutral/settings-MZYK2WQR.mjs.map +7 -0
  40. package/dist/lib/neutral/state-5COCK3KV.mjs +27 -0
  41. package/dist/lib/neutral/state-5COCK3KV.mjs.map +7 -0
  42. package/dist/lib/neutral/toggle-RESKOU6L.mjs +45 -0
  43. package/dist/lib/neutral/toggle-RESKOU6L.mjs.map +7 -0
  44. package/dist/lib/neutral/translations.mjs +26 -0
  45. package/dist/lib/neutral/translations.mjs.map +7 -0
  46. package/dist/lib/neutral/types/index.mjs +14 -0
  47. package/dist/lib/neutral/types/index.mjs.map +7 -0
  48. package/dist/types/src/ObservabilityPlugin.d.ts +9 -2
  49. package/dist/types/src/ObservabilityPlugin.d.ts.map +1 -1
  50. package/dist/types/src/ObservabilityPlugin.node.d.ts +4 -0
  51. package/dist/types/src/ObservabilityPlugin.node.d.ts.map +1 -0
  52. package/dist/types/src/ObservabilityPlugin.test.d.ts +2 -0
  53. package/dist/types/src/ObservabilityPlugin.test.d.ts.map +1 -0
  54. package/dist/types/src/ObservabilityPlugin.workerd.d.ts +4 -0
  55. package/dist/types/src/ObservabilityPlugin.workerd.d.ts.map +1 -0
  56. package/dist/types/src/capabilities/client-ready.d.ts +5 -5
  57. package/dist/types/src/capabilities/client-ready.d.ts.map +1 -1
  58. package/dist/types/src/capabilities/index.d.ts +15 -15
  59. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  60. package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
  61. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
  62. package/dist/types/src/capabilities/react-surface.d.ts +3 -2
  63. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  64. package/dist/types/src/capabilities/settings.d.ts +5 -2
  65. package/dist/types/src/capabilities/settings.d.ts.map +1 -1
  66. package/dist/types/src/capabilities/state.d.ts +10 -3
  67. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  68. package/dist/types/src/components/ObservabilitySettings/ObservabilitySettings.d.ts +6 -0
  69. package/dist/types/src/components/ObservabilitySettings/ObservabilitySettings.d.ts.map +1 -0
  70. package/dist/types/src/components/ObservabilitySettings/ObservabilitySettings.stories.d.ts +29 -0
  71. package/dist/types/src/components/ObservabilitySettings/ObservabilitySettings.stories.d.ts.map +1 -0
  72. package/dist/types/src/components/ObservabilitySettings/index.d.ts +2 -0
  73. package/dist/types/src/components/ObservabilitySettings/index.d.ts.map +1 -0
  74. package/dist/types/src/components/index.d.ts +2 -3
  75. package/dist/types/src/components/index.d.ts.map +1 -1
  76. package/dist/types/src/index.d.ts +1 -4
  77. package/dist/types/src/index.d.ts.map +1 -1
  78. package/dist/types/src/meta.d.ts +2 -2
  79. package/dist/types/src/meta.d.ts.map +1 -1
  80. package/dist/types/src/operations/index.d.ts +3 -0
  81. package/dist/types/src/operations/index.d.ts.map +1 -0
  82. package/dist/types/src/operations/send-event.d.ts +5 -0
  83. package/dist/types/src/operations/send-event.d.ts.map +1 -0
  84. package/dist/types/src/operations/toggle.d.ts +5 -0
  85. package/dist/types/src/operations/toggle.d.ts.map +1 -0
  86. package/dist/types/src/plugin.d.ts +4 -0
  87. package/dist/types/src/plugin.d.ts.map +1 -0
  88. package/dist/types/src/translations.d.ts +10 -17
  89. package/dist/types/src/translations.d.ts.map +1 -1
  90. package/dist/types/src/types/ObservabilityCapabilities.d.ts +28 -0
  91. package/dist/types/src/types/ObservabilityCapabilities.d.ts.map +1 -0
  92. package/dist/types/src/types/ObservabilityEvents.d.ts +4 -0
  93. package/dist/types/src/types/ObservabilityEvents.d.ts.map +1 -0
  94. package/dist/types/src/types/ObservabilityOperation.d.ts +10 -0
  95. package/dist/types/src/types/ObservabilityOperation.d.ts.map +1 -0
  96. package/dist/types/src/types/Settings.d.ts +7 -0
  97. package/dist/types/src/types/Settings.d.ts.map +1 -0
  98. package/dist/types/src/types/index.d.ts +4 -1
  99. package/dist/types/src/types/index.d.ts.map +1 -1
  100. package/dist/types/tsconfig.tsbuildinfo +1 -1
  101. package/package.json +97 -49
  102. package/src/ObservabilityPlugin.node.ts +33 -0
  103. package/src/ObservabilityPlugin.test.ts +25 -0
  104. package/src/ObservabilityPlugin.ts +64 -56
  105. package/src/ObservabilityPlugin.workerd.ts +32 -0
  106. package/src/capabilities/client-ready.ts +87 -79
  107. package/src/capabilities/index.ts +11 -8
  108. package/src/capabilities/operation-handler.ts +16 -0
  109. package/src/capabilities/react-surface.tsx +27 -19
  110. package/src/capabilities/settings.ts +26 -14
  111. package/src/capabilities/state.ts +20 -13
  112. package/src/components/ObservabilitySettings/ObservabilitySettings.stories.tsx +34 -0
  113. package/src/components/ObservabilitySettings/ObservabilitySettings.tsx +34 -0
  114. package/src/components/ObservabilitySettings/index.ts +5 -0
  115. package/src/components/index.ts +3 -3
  116. package/src/index.ts +1 -4
  117. package/src/meta.ts +10 -3
  118. package/src/operations/index.ts +10 -0
  119. package/src/operations/send-event.ts +23 -0
  120. package/src/operations/toggle.ts +46 -0
  121. package/src/plugin.ts +11 -0
  122. package/src/translations.ts +10 -17
  123. package/src/types/ObservabilityCapabilities.ts +42 -0
  124. package/src/types/ObservabilityEvents.ts +15 -0
  125. package/src/types/ObservabilityOperation.ts +43 -0
  126. package/src/types/Settings.ts +22 -0
  127. package/src/types/index.ts +4 -1
  128. package/dist/lib/browser/app-graph-builder-MBPI6TGN.mjs +0 -44
  129. package/dist/lib/browser/app-graph-builder-MBPI6TGN.mjs.map +0 -7
  130. package/dist/lib/browser/chunk-5VM6D2EF.mjs +0 -179
  131. package/dist/lib/browser/chunk-5VM6D2EF.mjs.map +0 -7
  132. package/dist/lib/browser/chunk-G754T676.mjs +0 -18
  133. package/dist/lib/browser/chunk-G754T676.mjs.map +0 -7
  134. package/dist/lib/browser/chunk-RS66U4WR.mjs +0 -191
  135. package/dist/lib/browser/chunk-RS66U4WR.mjs.map +0 -7
  136. package/dist/lib/browser/chunk-SCJ3DALL.mjs +0 -11
  137. package/dist/lib/browser/chunk-SCJ3DALL.mjs.map +0 -7
  138. package/dist/lib/browser/client-ready-IV2NFN4M.mjs +0 -102
  139. package/dist/lib/browser/client-ready-IV2NFN4M.mjs.map +0 -7
  140. package/dist/lib/browser/index.mjs +0 -128
  141. package/dist/lib/browser/index.mjs.map +0 -7
  142. package/dist/lib/browser/intent-resolver-IZTKLP6N.mjs +0 -77
  143. package/dist/lib/browser/intent-resolver-IZTKLP6N.mjs.map +0 -7
  144. package/dist/lib/browser/meta.json +0 -1
  145. package/dist/lib/browser/react-surface-N7WRUNJ2.mjs +0 -32
  146. package/dist/lib/browser/react-surface-N7WRUNJ2.mjs.map +0 -7
  147. package/dist/lib/browser/settings-JOZ5BZDO.mjs +0 -25
  148. package/dist/lib/browser/settings-JOZ5BZDO.mjs.map +0 -7
  149. package/dist/lib/browser/state-OVWHPB7K.mjs +0 -26
  150. package/dist/lib/browser/state-OVWHPB7K.mjs.map +0 -7
  151. package/dist/lib/browser/types/index.mjs +0 -10
  152. package/dist/lib/node-esm/app-graph-builder-LHLEY5QQ.mjs +0 -45
  153. package/dist/lib/node-esm/app-graph-builder-LHLEY5QQ.mjs.map +0 -7
  154. package/dist/lib/node-esm/chunk-4SMSG2RN.mjs +0 -13
  155. package/dist/lib/node-esm/chunk-4SMSG2RN.mjs.map +0 -7
  156. package/dist/lib/node-esm/chunk-H3QRVOIY.mjs +0 -180
  157. package/dist/lib/node-esm/chunk-H3QRVOIY.mjs.map +0 -7
  158. package/dist/lib/node-esm/chunk-SCOMEIPJ.mjs +0 -192
  159. package/dist/lib/node-esm/chunk-SCOMEIPJ.mjs.map +0 -7
  160. package/dist/lib/node-esm/chunk-ZS4YMD63.mjs +0 -19
  161. package/dist/lib/node-esm/chunk-ZS4YMD63.mjs.map +0 -7
  162. package/dist/lib/node-esm/client-ready-SL6BA2IP.mjs +0 -103
  163. package/dist/lib/node-esm/client-ready-SL6BA2IP.mjs.map +0 -7
  164. package/dist/lib/node-esm/index.mjs +0 -129
  165. package/dist/lib/node-esm/index.mjs.map +0 -7
  166. package/dist/lib/node-esm/intent-resolver-VW7XPMBG.mjs +0 -78
  167. package/dist/lib/node-esm/intent-resolver-VW7XPMBG.mjs.map +0 -7
  168. package/dist/lib/node-esm/meta.json +0 -1
  169. package/dist/lib/node-esm/react-surface-3PNZVMXB.mjs +0 -33
  170. package/dist/lib/node-esm/react-surface-3PNZVMXB.mjs.map +0 -7
  171. package/dist/lib/node-esm/settings-2AOUWDQY.mjs +0 -26
  172. package/dist/lib/node-esm/settings-2AOUWDQY.mjs.map +0 -7
  173. package/dist/lib/node-esm/state-5UHYHOJV.mjs +0 -27
  174. package/dist/lib/node-esm/state-5UHYHOJV.mjs.map +0 -7
  175. package/dist/lib/node-esm/types/index.mjs +0 -11
  176. package/dist/types/src/capabilities/app-graph-builder.d.ts +0 -4
  177. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +0 -1
  178. package/dist/types/src/capabilities/capabilities.d.ts +0 -12
  179. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  180. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -7
  181. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  182. package/dist/types/src/components/FeedbackForm.d.ts +0 -6
  183. package/dist/types/src/components/FeedbackForm.d.ts.map +0 -1
  184. package/dist/types/src/components/HelpContainer.d.ts +0 -3
  185. package/dist/types/src/components/HelpContainer.d.ts.map +0 -1
  186. package/dist/types/src/components/ObservabilitySettings.d.ts +0 -10
  187. package/dist/types/src/components/ObservabilitySettings.d.ts.map +0 -1
  188. package/dist/types/src/events.d.ts +0 -5
  189. package/dist/types/src/events.d.ts.map +0 -1
  190. package/dist/types/src/types/schema.d.ts +0 -313
  191. package/dist/types/src/types/schema.d.ts.map +0 -1
  192. package/src/capabilities/app-graph-builder.ts +0 -47
  193. package/src/capabilities/capabilities.ts +0 -23
  194. package/src/capabilities/intent-resolver.ts +0 -69
  195. package/src/components/FeedbackForm.tsx +0 -82
  196. package/src/components/HelpContainer.tsx +0 -41
  197. package/src/components/ObservabilitySettings.tsx +0 -48
  198. package/src/events.ts +0 -14
  199. package/src/types/schema.ts +0 -216
  200. /package/dist/lib/{browser/types/index.mjs.map → neutral/chunk-J5LGTIGS.mjs.map} +0 -0
  201. /package/dist/lib/{node-esm/types → neutral}/index.mjs.map +0 -0
package/package.json CHANGED
@@ -1,78 +1,126 @@
1
1
  {
2
2
  "name": "@dxos/plugin-observability",
3
- "version": "0.8.4-main.ead640a",
3
+ "version": "0.8.4-main.effb148878",
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.12.1",
40
- "effect": "3.18.3",
81
+ "@effect-atom/atom": "^0.5.1",
82
+ "@effect-atom/atom-react": "^0.5.0",
83
+ "effect": "3.20.0",
41
84
  "localforage": "^1.10.0",
42
- "@dxos/app-framework": "0.8.4-main.ead640a",
43
- "@dxos/async": "0.8.4-main.ead640a",
44
- "@dxos/context": "0.8.4-main.ead640a",
45
- "@dxos/echo": "0.8.4-main.ead640a",
46
- "@dxos/invariant": "0.8.4-main.ead640a",
47
- "@dxos/live-object": "0.8.4-main.ead640a",
48
- "@dxos/local-storage": "0.8.4-main.ead640a",
49
- "@dxos/log": "0.8.4-main.ead640a",
50
- "@dxos/observability": "0.8.4-main.ead640a",
51
- "@dxos/protocols": "0.8.4-main.ead640a",
52
- "@dxos/plugin-graph": "0.8.4-main.ead640a",
53
- "@dxos/react-ui-form": "0.8.4-main.ead640a",
54
- "@dxos/react-ui-stack": "0.8.4-main.ead640a",
55
- "@dxos/react-client": "0.8.4-main.ead640a",
56
- "@dxos/util": "0.8.4-main.ead640a"
85
+ "@dxos/app-framework": "0.8.4-main.effb148878",
86
+ "@dxos/client": "0.8.4-main.effb148878",
87
+ "@dxos/context": "0.8.4-main.effb148878",
88
+ "@dxos/async": "0.8.4-main.effb148878",
89
+ "@dxos/compute": "0.8.4-main.effb148878",
90
+ "@dxos/echo": "0.8.4-main.effb148878",
91
+ "@dxos/effect": "0.8.4-main.effb148878",
92
+ "@dxos/invariant": "0.8.4-main.effb148878",
93
+ "@dxos/log": "0.8.4-main.effb148878",
94
+ "@dxos/observability": "0.8.4-main.effb148878",
95
+ "@dxos/protocols": "0.8.4-main.effb148878",
96
+ "@dxos/plugin-graph": "0.8.4-main.effb148878",
97
+ "@dxos/react-client": "0.8.4-main.effb148878",
98
+ "@dxos/react-ui-form": "0.8.4-main.effb148878",
99
+ "@dxos/react-ui-attention": "0.8.4-main.effb148878",
100
+ "@dxos/util": "0.8.4-main.effb148878",
101
+ "@dxos/react-ui-stack": "0.8.4-main.effb148878",
102
+ "@dxos/app-toolkit": "0.8.4-main.effb148878",
103
+ "@dxos/react-hooks": "0.8.4-main.effb148878"
57
104
  },
58
105
  "devDependencies": {
59
- "@effect-rx/rx-react": "0.42.4",
60
- "@effect/platform": "0.92.1",
61
- "@types/react": "~19.2.2",
62
- "react": "~19.2.0",
63
- "vite": "7.1.9",
64
- "@dxos/react-ui": "0.8.4-main.ead640a",
65
- "@dxos/storybook-utils": "0.8.4-main.ead640a",
66
- "@dxos/react-ui-theme": "0.8.4-main.ead640a"
106
+ "@effect-atom/atom-react": "^0.5.0",
107
+ "@effect/platform": "0.94.4",
108
+ "@types/react": "~19.2.7",
109
+ "react": "~19.2.3",
110
+ "vite": "^8.0.14",
111
+ "@dxos/react-ui": "0.8.4-main.effb148878",
112
+ "@dxos/plugin-testing": "0.8.4-main.effb148878",
113
+ "@dxos/storybook-utils": "0.8.4-main.effb148878",
114
+ "@dxos/ui-theme": "0.8.4-main.effb148878"
67
115
  },
68
116
  "peerDependencies": {
69
- "@effect-rx/rx-react": "^0.34.1",
70
- "@effect/platform": "^0.80.12",
71
- "effect": "^3.13.3",
72
- "react": "^19.0.0",
73
- "react-dom": "^19.0.0",
74
- "@dxos/react-ui": "0.8.4-main.ead640a",
75
- "@dxos/react-ui-theme": "0.8.4-main.ead640a"
117
+ "@effect-atom/atom-react": "^0.5.0",
118
+ "@effect/platform": "0.94.4",
119
+ "effect": "3.20.0",
120
+ "react": "~19.2.3",
121
+ "react-dom": "~19.2.3",
122
+ "@dxos/react-ui": "0.8.4-main.effb148878",
123
+ "@dxos/ui-theme": "0.8.4-main.effb148878"
76
124
  },
77
125
  "publishConfig": {
78
126
  "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,69 +2,77 @@
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
- import {
9
- AppGraphBuilder,
10
- ClientReady,
11
- IntentResolver,
12
- ObservabilityCapabilities,
13
- ObservabilitySettings,
14
- ObservabilityState,
15
- ReactSurface,
16
- } from './capabilities';
17
- import { ClientReadyEvent, ObservabilityEvents } from './events';
18
- import { meta } from './meta';
19
- import { translations } from './translations';
11
+ import { ClientReady, ObservabilitySettings, ObservabilityState, OperationHandler, ReactSurface } from '#capabilities';
12
+ import { meta } from '#meta';
13
+ import { translations } from '#translations';
14
+ import { ObservabilityCapabilities, ObservabilityEvents } from '#types';
20
15
 
21
16
  export type ObservabilityPluginOptions = {
22
17
  namespace: string;
23
- observability: () => Promise<Observability>;
18
+ observability: () => Promise<Observability.Observability>;
19
+ /**
20
+ * Optional callback invoked by the help/feedback UI to download captured logs.
21
+ * When omitted the "Download logs" action is hidden.
22
+ */
23
+ downloadLogs?: () => void | Promise<void>;
24
24
  };
25
25
 
26
- export const ObservabilityPlugin = definePlugin<ObservabilityPluginOptions>(meta, ({ namespace, observability }) => [
27
- defineModule({
28
- id: `${meta.id}/module/observability`,
29
- activatesOn: Events.Startup,
30
- activate: async () => contributes(ObservabilityCapabilities.Observability, await observability()),
31
- }),
32
- defineModule({
33
- id: `${meta.id}/module/settings`,
34
- activatesOn: Events.SetupSettings,
26
+ export const ObservabilityPlugin = Plugin.define<ObservabilityPluginOptions>(meta).pipe(
27
+ AppPlugin.addSurfaceModule({ activate: ReactSurface }),
28
+ AppPlugin.addTranslationsModule({ translations }),
29
+ Plugin.addModule(({ observability }) => ({
30
+ id: 'observability',
31
+ activatesOn: ActivationEvents.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: AppActivationEvents.SetupSettings,
35
40
  activate: ObservabilitySettings,
36
41
  }),
37
- defineModule({
38
- id: `${meta.id}/module/state`,
39
- activatesOn: Events.Startup,
40
- activatesAfter: [ObservabilityEvents.StateReady],
42
+ Plugin.addModule(({ namespace }) => ({
43
+ id: Capability.getModuleTag(ObservabilityState),
44
+ activatesOn: ActivationEvents.Startup,
45
+ firesAfterActivation: [ObservabilityEvents.StateReady],
41
46
  activate: () => ObservabilityState({ namespace }),
42
- }),
43
- defineModule({
44
- id: `${meta.id}/module/translations`,
45
- activatesOn: Events.SetupTranslations,
46
- activate: () => contributes(Capabilities.Translations, translations),
47
- }),
48
- defineModule({
49
- id: `${meta.id}/module/intent-resolver`,
50
- activatesOn: Events.SetupIntentResolver,
51
- activate: (context) => IntentResolver({ context, namespace }),
52
- }),
53
- defineModule({
54
- id: `${meta.id}/module/react-surface`,
55
- activatesOn: Events.SetupReactSurface,
56
- activate: ReactSurface,
57
- }),
58
- defineModule({
59
- id: `${meta.id}/module/app-graph-builder`,
60
- activatesOn: Events.SetupAppGraph,
61
- activate: AppGraphBuilder,
62
- }),
63
- defineModule({
64
- id: `${meta.id}/module/client-ready`,
65
- activatesOn: allOf(Events.DispatcherReady, ObservabilityEvents.StateReady, ClientReadyEvent),
66
- activate: async (context) => {
67
- return ClientReady({ context, observability: await observability(), namespace });
68
- },
69
- }),
70
- ]);
47
+ })),
48
+ Plugin.addModule(({ namespace }) => ({
49
+ id: 'namespace',
50
+ activatesOn: ActivationEvents.Startup,
51
+ activate: () => Effect.succeed(Capability.contributes(ObservabilityCapabilities.Namespace, namespace)),
52
+ })),
53
+ Plugin.addModule(({ downloadLogs }) => ({
54
+ id: 'log-downloader',
55
+ activatesOn: ActivationEvents.Startup,
56
+ activate: () =>
57
+ Effect.succeed(
58
+ downloadLogs !== undefined ? Capability.contributes(ObservabilityCapabilities.LogDownloader, downloadLogs) : [],
59
+ ),
60
+ })),
61
+ AppPlugin.addOperationHandlerModule({ activate: OperationHandler }),
62
+ Plugin.addModule(({ namespace, observability }) => ({
63
+ id: Capability.getModuleTag(ClientReady),
64
+ activatesOn: ActivationEvent.allOf(
65
+ ActivationEvents.ProcessManagerReady,
66
+ ObservabilityEvents.StateReady,
67
+ ObservabilityEvents.ClientReadyEvent,
68
+ ),
69
+ activate: () =>
70
+ Effect.gen(function* () {
71
+ const obs = yield* Effect.tryPromise(() => observability());
72
+ return yield* ClientReady({ namespace, observability: obs });
73
+ }),
74
+ })),
75
+ Plugin.make,
76
+ );
77
+
78
+ 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,105 @@
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 { meta } from '../meta';
16
- import { ObservabilityAction } from '../types';
7
+ import { Capabilities, Capability } from '@dxos/app-framework';
8
+ import { LayoutOperation, SettingsOperation } from '@dxos/app-toolkit';
9
+ import { log } from '@dxos/log';
10
+ import { type Observability, ObservabilityProvider } from '@dxos/observability';
17
11
 
18
- import { ClientCapability, ObservabilityCapabilities } from './capabilities';
12
+ import { meta } from '#meta';
13
+ import { ObservabilityCapabilities, ObservabilityOperation } from '#types';
19
14
 
20
- type ClientReadyOptions = {
21
- context: PluginContext;
15
+ export type ClientReadyOptions = {
22
16
  namespace: string;
23
- observability: Observability;
17
+ observability: Observability.Observability;
24
18
  };
25
19
 
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);
20
+ export default Capability.makeModule(
21
+ Effect.fnUntraced(function* ({ observability }: ClientReadyOptions) {
22
+ const manager = yield* Capability.get(Capabilities.PluginManager);
23
+ 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(ObservabilityCapabilities.ClientCapability);
31
27
 
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: `${meta.id}/notice`,
42
- title: ['observability toast label', { ns: meta.id }],
43
- description: ['observability toast description', { ns: meta.id }],
44
- duration: Infinity,
45
- icon: 'ph--info--regular',
46
- actionLabel: ['observability toast action label', { ns: meta.id }],
47
- actionAlt: ['observability toast action alt', { ns: meta.id }],
48
- closeLabel: ['observability toast close label', { ns: meta.id }],
49
- onAction: () => dispatch(createIntent(SettingsAction.Open, { plugin: meta.id })),
50
- },
51
- }),
52
- );
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
+ });
53
45
 
54
- state.notified = true;
46
+ registry.set(stateAtom, { ...registry.get(stateAtom), notified: true });
47
+ }
48
+ };
49
+
50
+ // Ensure errors are tagged with enabled plugins to help with reproductions.
51
+ const enabledPlugins = manager.getEnabled();
52
+ log('client-ready: tagging enabled plugins', { count: enabledPlugins.length });
53
+ for (const plugin of enabledPlugins) {
54
+ observability.setTags({ [`pluginEnabled-${plugin}`]: 'true' }, 'errors');
55
55
  }
56
- };
57
56
 
58
- // Ensure errors are tagged with enabled plugins to help with reproductions.
59
- manager.enabled.map((plugin) => observability?.setTag(`pluginEnabled-${plugin}`, 'true', 'errors'));
57
+ log('client-ready: sending page.load event');
58
+ yield* Effect.tryPromise(() =>
59
+ invokePromise(ObservabilityOperation.SendEvent, {
60
+ name: 'page.load',
61
+ properties: {
62
+ // TODO(wittjosiah): These apis are deprecated. Is there a better way to find this information?
63
+ loadDuration: window.performance.timing.loadEventEnd - window.performance.timing.loadEventStart,
64
+ },
65
+ }),
66
+ );
67
+ log('client-ready: page.load event sent');
60
68
 
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
- );
69
+ // Each provider is logged individually because some provider setups perform
70
+ // RPC calls (e.g. runtimeMetricsProvider awaits SystemService.getPlatform());
71
+ // a hung worker pipe surfaces as a missing "added" log, so the last
72
+ // "adding ..." line points to the stall.
73
+ log('client-ready: adding identity data provider');
74
+ yield* observability.addDataProvider(ObservabilityProvider.Client.identityProvider(client.services.services));
75
+ log('client-ready: identity data provider added');
70
76
 
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);
77
+ log('client-ready: adding network metrics data provider');
78
+ yield* observability.addDataProvider(ObservabilityProvider.Client.networkMetricsProvider(client.services.services));
79
+ log('client-ready: network metrics data provider added');
74
80
 
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
- ]);
81
+ log('client-ready: adding runtime metrics data provider');
82
+ yield* observability.addDataProvider(ObservabilityProvider.Client.runtimeMetricsProvider(client.services.services));
83
+ log('client-ready: runtime metrics data provider added');
81
84
 
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
- }
85
+ log('client-ready: adding space metrics data provider');
86
+ yield* observability.addDataProvider(ObservabilityProvider.Client.spacesMetricsProvider(client));
87
+ log('client-ready: space metrics data provider added');
93
88
 
94
- return contributes(ObservabilityCapabilities.Observability, observability, async () => {
95
- cleanup();
96
- await observability.close();
97
- });
98
- };
89
+ if (client.halo.identity.get()) {
90
+ log('client-ready: identity present, sending privacy notice');
91
+ yield* Effect.tryPromise(() => sendPrivacyNotice());
92
+ log('client-ready: privacy notice sent');
93
+ } else {
94
+ log('client-ready: no identity, deferring privacy notice');
95
+ const subscription = client.halo.identity.subscribe(async (identity) => {
96
+ if (identity && observability) {
97
+ await sendPrivacyNotice();
98
+ subscription.unsubscribe();
99
+ }
100
+ });
101
+ }
102
+
103
+ log('client-ready: contributing observability capability');
104
+ return Capability.contributes(ObservabilityCapabilities.Observability, observability, () => observability.close());
105
+ }),
106
+ );
@@ -2,13 +2,16 @@
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 OperationHandler = Capability.lazy<OperationHandlerSet.OperationHandlerSet>(
12
+ 'OperationHandler',
13
+ () => import('./operation-handler'),
14
+ );
15
+ export const ReactSurface = Capability.lazy('ReactSurface', () => import('./react-surface'));
16
+ export const ObservabilitySettings = Capability.lazy('ObservabilitySettings', () => import('./settings'));
17
+ 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
+ );