@dxos/plugin-observability 0.8.3-staging.0fa589b → 0.8.4-main.03d5cd7b56

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 (248) hide show
  1. package/dist/lib/neutral/HelpContainer-NYKOV3GM.mjs +68 -0
  2. package/dist/lib/neutral/HelpContainer-NYKOV3GM.mjs.map +7 -0
  3. package/dist/lib/neutral/ObservabilityPlugin.mjs +62 -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/ObservabilitySettings-H6UKYDDT.mjs +27 -0
  8. package/dist/lib/neutral/ObservabilitySettings-H6UKYDDT.mjs.map +7 -0
  9. package/dist/lib/neutral/app-graph-builder-PTVHNKQY.mjs +37 -0
  10. package/dist/lib/neutral/app-graph-builder-PTVHNKQY.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/capture-user-feedback-M45PTVMA.mjs +22 -0
  14. package/dist/lib/neutral/capture-user-feedback-M45PTVMA.mjs.map +7 -0
  15. package/dist/lib/neutral/chunk-ANCT53Y3.mjs +19 -0
  16. package/dist/lib/neutral/chunk-ANCT53Y3.mjs.map +7 -0
  17. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  18. package/dist/lib/neutral/chunk-LBYPFOE5.mjs +132 -0
  19. package/dist/lib/neutral/chunk-LBYPFOE5.mjs.map +7 -0
  20. package/dist/lib/neutral/chunk-YZMTBNAS.mjs +8 -0
  21. package/dist/lib/neutral/chunk-YZMTBNAS.mjs.map +7 -0
  22. package/dist/lib/neutral/client-ready-TM7VE6CH.mjs +116 -0
  23. package/dist/lib/neutral/client-ready-TM7VE6CH.mjs.map +7 -0
  24. package/dist/lib/neutral/components/index.mjs +44 -0
  25. package/dist/lib/neutral/components/index.mjs.map +7 -0
  26. package/dist/lib/neutral/containers/index.mjs +9 -0
  27. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  28. package/dist/lib/neutral/index.mjs +18 -0
  29. package/dist/lib/neutral/meta.json +1 -0
  30. package/dist/lib/neutral/meta.mjs +8 -0
  31. package/dist/lib/neutral/meta.mjs.map +7 -0
  32. package/dist/lib/neutral/operation-handler-4WWRXOHR.mjs +13 -0
  33. package/dist/lib/neutral/operation-handler-4WWRXOHR.mjs.map +7 -0
  34. package/dist/lib/neutral/operations/index.mjs +8 -0
  35. package/dist/lib/neutral/operations/index.mjs.map +7 -0
  36. package/dist/lib/neutral/plugin.mjs +16 -0
  37. package/dist/lib/neutral/plugin.mjs.map +7 -0
  38. package/dist/lib/neutral/react-surface-2LUZ7EK5.mjs +41 -0
  39. package/dist/lib/neutral/react-surface-2LUZ7EK5.mjs.map +7 -0
  40. package/dist/lib/neutral/send-event-DPYXUUL5.mjs +20 -0
  41. package/dist/lib/neutral/send-event-DPYXUUL5.mjs.map +7 -0
  42. package/dist/lib/neutral/settings-MZYK2WQR.mjs +30 -0
  43. package/dist/lib/neutral/settings-MZYK2WQR.mjs.map +7 -0
  44. package/dist/lib/neutral/state-5COCK3KV.mjs +27 -0
  45. package/dist/lib/neutral/state-5COCK3KV.mjs.map +7 -0
  46. package/dist/lib/neutral/toggle-VKTFKVFC.mjs +45 -0
  47. package/dist/lib/neutral/toggle-VKTFKVFC.mjs.map +7 -0
  48. package/dist/lib/neutral/translations.mjs +33 -0
  49. package/dist/lib/neutral/translations.mjs.map +7 -0
  50. package/dist/lib/neutral/types/index.mjs +14 -0
  51. package/dist/lib/neutral/types/index.mjs.map +7 -0
  52. package/dist/types/src/ObservabilityPlugin.d.ts +11 -3
  53. package/dist/types/src/ObservabilityPlugin.d.ts.map +1 -1
  54. package/dist/types/src/ObservabilityPlugin.node.d.ts +4 -0
  55. package/dist/types/src/ObservabilityPlugin.node.d.ts.map +1 -0
  56. package/dist/types/src/ObservabilityPlugin.test.d.ts +2 -0
  57. package/dist/types/src/ObservabilityPlugin.test.d.ts.map +1 -0
  58. package/dist/types/src/capabilities/app-graph-builder.d.ts +4 -2
  59. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  60. package/dist/types/src/capabilities/client-ready.d.ts +5 -5
  61. package/dist/types/src/capabilities/client-ready.d.ts.map +1 -1
  62. package/dist/types/src/capabilities/index.d.ts +16 -15
  63. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  64. package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
  65. package/dist/types/src/capabilities/operation-handler.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/FeedbackForm/FeedbackForm.d.ts +9 -0
  73. package/dist/types/src/components/FeedbackForm/FeedbackForm.d.ts.map +1 -0
  74. package/dist/types/src/components/FeedbackForm/FeedbackForm.stories.d.ts +36 -0
  75. package/dist/types/src/components/FeedbackForm/FeedbackForm.stories.d.ts.map +1 -0
  76. package/dist/types/src/components/FeedbackForm/index.d.ts +2 -0
  77. package/dist/types/src/components/FeedbackForm/index.d.ts.map +1 -0
  78. package/dist/types/src/components/ObservabilitySettings/ObservabilitySettings.d.ts +6 -0
  79. package/dist/types/src/components/ObservabilitySettings/ObservabilitySettings.d.ts.map +1 -0
  80. package/dist/types/src/components/ObservabilitySettings/ObservabilitySettings.stories.d.ts +36 -0
  81. package/dist/types/src/components/ObservabilitySettings/ObservabilitySettings.stories.d.ts.map +1 -0
  82. package/dist/types/src/components/ObservabilitySettings/index.d.ts +2 -0
  83. package/dist/types/src/components/ObservabilitySettings/index.d.ts.map +1 -0
  84. package/dist/types/src/components/index.d.ts +2 -2
  85. package/dist/types/src/components/index.d.ts.map +1 -1
  86. package/dist/types/src/containers/HelpContainer/HelpContainer.d.ts +4 -0
  87. package/dist/types/src/containers/HelpContainer/HelpContainer.d.ts.map +1 -0
  88. package/dist/types/src/containers/HelpContainer/index.d.ts +2 -0
  89. package/dist/types/src/containers/HelpContainer/index.d.ts.map +1 -0
  90. package/dist/types/src/containers/index.d.ts +3 -0
  91. package/dist/types/src/containers/index.d.ts.map +1 -0
  92. package/dist/types/src/index.d.ts +1 -4
  93. package/dist/types/src/index.d.ts.map +1 -1
  94. package/dist/types/src/meta.d.ts +2 -3
  95. package/dist/types/src/meta.d.ts.map +1 -1
  96. package/dist/types/src/operations/capture-user-feedback.d.ts +5 -0
  97. package/dist/types/src/operations/capture-user-feedback.d.ts.map +1 -0
  98. package/dist/types/src/operations/index.d.ts +3 -0
  99. package/dist/types/src/operations/index.d.ts.map +1 -0
  100. package/dist/types/src/operations/send-event.d.ts +5 -0
  101. package/dist/types/src/operations/send-event.d.ts.map +1 -0
  102. package/dist/types/src/operations/toggle.d.ts +5 -0
  103. package/dist/types/src/operations/toggle.d.ts.map +1 -0
  104. package/dist/types/src/plugin.d.ts +4 -0
  105. package/dist/types/src/plugin.d.ts.map +1 -0
  106. package/dist/types/src/translations.d.ts +20 -19
  107. package/dist/types/src/translations.d.ts.map +1 -1
  108. package/dist/types/src/types/ObservabilityCapabilities.d.ts +28 -0
  109. package/dist/types/src/types/ObservabilityCapabilities.d.ts.map +1 -0
  110. package/dist/types/src/types/ObservabilityEvents.d.ts +4 -0
  111. package/dist/types/src/types/ObservabilityEvents.d.ts.map +1 -0
  112. package/dist/types/src/types/ObservabilityOperation.d.ts +20 -0
  113. package/dist/types/src/types/ObservabilityOperation.d.ts.map +1 -0
  114. package/dist/types/src/types/Settings.d.ts +7 -0
  115. package/dist/types/src/types/Settings.d.ts.map +1 -0
  116. package/dist/types/src/types/index.d.ts +5 -0
  117. package/dist/types/src/types/index.d.ts.map +1 -0
  118. package/dist/types/tsconfig.tsbuildinfo +1 -1
  119. package/package.json +105 -53
  120. package/src/ObservabilityPlugin.node.ts +33 -0
  121. package/src/ObservabilityPlugin.test.ts +25 -0
  122. package/src/ObservabilityPlugin.ts +73 -54
  123. package/src/capabilities/app-graph-builder.ts +28 -37
  124. package/src/capabilities/client-ready.ts +88 -79
  125. package/src/capabilities/index.ts +12 -8
  126. package/src/capabilities/operation-handler.ts +16 -0
  127. package/src/capabilities/react-surface.tsx +33 -19
  128. package/src/capabilities/settings.ts +26 -14
  129. package/src/capabilities/state.ts +20 -12
  130. package/src/components/FeedbackForm/FeedbackForm.stories.tsx +44 -0
  131. package/src/components/FeedbackForm/FeedbackForm.tsx +49 -0
  132. package/src/components/FeedbackForm/index.ts +5 -0
  133. package/src/components/ObservabilitySettings/ObservabilitySettings.stories.tsx +34 -0
  134. package/src/components/ObservabilitySettings/ObservabilitySettings.tsx +34 -0
  135. package/src/components/ObservabilitySettings/index.ts +5 -0
  136. package/src/components/index.ts +4 -2
  137. package/src/containers/HelpContainer/HelpContainer.tsx +57 -0
  138. package/src/containers/HelpContainer/index.ts +5 -0
  139. package/src/containers/index.ts +7 -0
  140. package/src/index.ts +1 -4
  141. package/src/meta.ts +9 -5
  142. package/src/operations/capture-user-feedback.ts +22 -0
  143. package/src/operations/index.ts +11 -0
  144. package/src/operations/send-event.ts +23 -0
  145. package/src/operations/toggle.ts +46 -0
  146. package/src/plugin.ts +11 -0
  147. package/src/translations.ts +22 -19
  148. package/src/types/ObservabilityCapabilities.ts +42 -0
  149. package/src/types/ObservabilityEvents.ts +15 -0
  150. package/src/types/ObservabilityOperation.ts +75 -0
  151. package/src/types/Settings.ts +22 -0
  152. package/src/types/index.ts +8 -0
  153. package/dist/lib/browser/app-graph-builder-3ROXVPV2.mjs +0 -43
  154. package/dist/lib/browser/app-graph-builder-3ROXVPV2.mjs.map +0 -7
  155. package/dist/lib/browser/chunk-BJ2ZWVOH.mjs +0 -18
  156. package/dist/lib/browser/chunk-BJ2ZWVOH.mjs.map +0 -7
  157. package/dist/lib/browser/chunk-NYBEHHJN.mjs +0 -175
  158. package/dist/lib/browser/chunk-NYBEHHJN.mjs.map +0 -7
  159. package/dist/lib/browser/chunk-P7VVCZOC.mjs +0 -179
  160. package/dist/lib/browser/chunk-P7VVCZOC.mjs.map +0 -7
  161. package/dist/lib/browser/chunk-RKH5BBR4.mjs +0 -13
  162. package/dist/lib/browser/chunk-RKH5BBR4.mjs.map +0 -7
  163. package/dist/lib/browser/client-ready-LP3YSSAH.mjs +0 -102
  164. package/dist/lib/browser/client-ready-LP3YSSAH.mjs.map +0 -7
  165. package/dist/lib/browser/index.mjs +0 -130
  166. package/dist/lib/browser/index.mjs.map +0 -7
  167. package/dist/lib/browser/intent-resolver-JESDDMKB.mjs +0 -77
  168. package/dist/lib/browser/intent-resolver-JESDDMKB.mjs.map +0 -7
  169. package/dist/lib/browser/meta.json +0 -1
  170. package/dist/lib/browser/react-surface-LVUG4XN3.mjs +0 -32
  171. package/dist/lib/browser/react-surface-LVUG4XN3.mjs.map +0 -7
  172. package/dist/lib/browser/settings-V2DX26J3.mjs +0 -25
  173. package/dist/lib/browser/settings-V2DX26J3.mjs.map +0 -7
  174. package/dist/lib/browser/state-LG4FXJD2.mjs +0 -26
  175. package/dist/lib/browser/state-LG4FXJD2.mjs.map +0 -7
  176. package/dist/lib/browser/types.mjs +0 -10
  177. package/dist/lib/node/app-graph-builder-EXZP366Q.cjs +0 -59
  178. package/dist/lib/node/app-graph-builder-EXZP366Q.cjs.map +0 -7
  179. package/dist/lib/node/chunk-2ERIOZP3.cjs +0 -36
  180. package/dist/lib/node/chunk-2ERIOZP3.cjs.map +0 -7
  181. package/dist/lib/node/chunk-B773OI2Y.cjs +0 -200
  182. package/dist/lib/node/chunk-B773OI2Y.cjs.map +0 -7
  183. package/dist/lib/node/chunk-HAIMXBCH.cjs +0 -38
  184. package/dist/lib/node/chunk-HAIMXBCH.cjs.map +0 -7
  185. package/dist/lib/node/chunk-UMH4JAVS.cjs +0 -199
  186. package/dist/lib/node/chunk-UMH4JAVS.cjs.map +0 -7
  187. package/dist/lib/node/client-ready-CTPKWHMP.cjs +0 -113
  188. package/dist/lib/node/client-ready-CTPKWHMP.cjs.map +0 -7
  189. package/dist/lib/node/index.cjs +0 -152
  190. package/dist/lib/node/index.cjs.map +0 -7
  191. package/dist/lib/node/intent-resolver-7G4GEUOA.cjs +0 -88
  192. package/dist/lib/node/intent-resolver-7G4GEUOA.cjs.map +0 -7
  193. package/dist/lib/node/meta.json +0 -1
  194. package/dist/lib/node/react-surface-CNFUEPBI.cjs +0 -55
  195. package/dist/lib/node/react-surface-CNFUEPBI.cjs.map +0 -7
  196. package/dist/lib/node/settings-RO5MXEQG.cjs +0 -39
  197. package/dist/lib/node/settings-RO5MXEQG.cjs.map +0 -7
  198. package/dist/lib/node/state-NXRP3P5D.cjs +0 -40
  199. package/dist/lib/node/state-NXRP3P5D.cjs.map +0 -7
  200. package/dist/lib/node/types.cjs +0 -32
  201. package/dist/lib/node/types.cjs.map +0 -7
  202. package/dist/lib/node-esm/app-graph-builder-T7J46NSQ.mjs +0 -44
  203. package/dist/lib/node-esm/app-graph-builder-T7J46NSQ.mjs.map +0 -7
  204. package/dist/lib/node-esm/chunk-JJGRAKXD.mjs +0 -176
  205. package/dist/lib/node-esm/chunk-JJGRAKXD.mjs.map +0 -7
  206. package/dist/lib/node-esm/chunk-KT5SDFBU.mjs +0 -15
  207. package/dist/lib/node-esm/chunk-KT5SDFBU.mjs.map +0 -7
  208. package/dist/lib/node-esm/chunk-S2MXYKCI.mjs +0 -180
  209. package/dist/lib/node-esm/chunk-S2MXYKCI.mjs.map +0 -7
  210. package/dist/lib/node-esm/chunk-X2U2ZHWX.mjs +0 -19
  211. package/dist/lib/node-esm/chunk-X2U2ZHWX.mjs.map +0 -7
  212. package/dist/lib/node-esm/client-ready-FS62YRSD.mjs +0 -103
  213. package/dist/lib/node-esm/client-ready-FS62YRSD.mjs.map +0 -7
  214. package/dist/lib/node-esm/index.mjs +0 -131
  215. package/dist/lib/node-esm/index.mjs.map +0 -7
  216. package/dist/lib/node-esm/intent-resolver-MREOBMHB.mjs +0 -78
  217. package/dist/lib/node-esm/intent-resolver-MREOBMHB.mjs.map +0 -7
  218. package/dist/lib/node-esm/meta.json +0 -1
  219. package/dist/lib/node-esm/react-surface-B3JSZZAO.mjs +0 -33
  220. package/dist/lib/node-esm/react-surface-B3JSZZAO.mjs.map +0 -7
  221. package/dist/lib/node-esm/settings-BFFR4CHU.mjs +0 -26
  222. package/dist/lib/node-esm/settings-BFFR4CHU.mjs.map +0 -7
  223. package/dist/lib/node-esm/state-IZNXQ5RA.mjs +0 -27
  224. package/dist/lib/node-esm/state-IZNXQ5RA.mjs.map +0 -7
  225. package/dist/lib/node-esm/types.mjs +0 -11
  226. package/dist/types/src/capabilities/capabilities.d.ts +0 -12
  227. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  228. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -7
  229. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  230. package/dist/types/src/components/FeedbackForm.d.ts +0 -6
  231. package/dist/types/src/components/FeedbackForm.d.ts.map +0 -1
  232. package/dist/types/src/components/HelpContainer.d.ts +0 -3
  233. package/dist/types/src/components/HelpContainer.d.ts.map +0 -1
  234. package/dist/types/src/components/ObservabilitySettings.d.ts +0 -10
  235. package/dist/types/src/components/ObservabilitySettings.d.ts.map +0 -1
  236. package/dist/types/src/events.d.ts +0 -5
  237. package/dist/types/src/events.d.ts.map +0 -1
  238. package/dist/types/src/types.d.ts +0 -286
  239. package/dist/types/src/types.d.ts.map +0 -1
  240. package/src/capabilities/capabilities.ts +0 -22
  241. package/src/capabilities/intent-resolver.ts +0 -68
  242. package/src/components/FeedbackForm.tsx +0 -82
  243. package/src/components/HelpContainer.tsx +0 -40
  244. package/src/components/ObservabilitySettings.tsx +0 -48
  245. package/src/events.ts +0 -14
  246. package/src/types.ts +0 -203
  247. /package/dist/lib/{browser/types.mjs.map → neutral/chunk-J5LGTIGS.mjs.map} +0 -0
  248. /package/dist/lib/{node-esm/types.mjs.map → neutral/index.mjs.map} +0 -0
@@ -1,68 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import { Capabilities, contributes, createResolver, IntentAction, type PluginContext } from '@dxos/app-framework';
6
- import { log } from '@dxos/log';
7
- import { getTelemetryIdentity, storeObservabilityDisabled } from '@dxos/observability';
8
-
9
- import { ClientCapability, ObservabilityCapabilities } from './capabilities';
10
- import { type ObservabilitySettingsProps } from '../components';
11
- import { OBSERVABILITY_PLUGIN } from '../meta';
12
- import { ObservabilityAction } from '../types';
13
-
14
- export default ({ context, namespace }: { context: PluginContext; namespace: string }) =>
15
- contributes(Capabilities.IntentResolver, [
16
- createResolver({
17
- intent: IntentAction.Track,
18
- resolve: (intent) => {
19
- log.info('intent', { intent });
20
- },
21
- }),
22
- createResolver({
23
- intent: ObservabilityAction.Toggle,
24
- resolve: async ({ state }) => {
25
- const client = context.getCapability(ClientCapability);
26
- const observability = context.getCapability(ObservabilityCapabilities.Observability);
27
- const settings = context
28
- .getCapability(Capabilities.SettingsStore)
29
- .getStore<ObservabilitySettingsProps>(OBSERVABILITY_PLUGIN)!.value;
30
- settings.enabled = state ?? !settings.enabled;
31
- observability.track({
32
- ...getTelemetryIdentity(client),
33
- action: 'observability.toggle',
34
- properties: {
35
- enabled: settings.enabled,
36
- },
37
- });
38
- observability.setMode(settings.enabled ? 'basic' : 'disabled');
39
- await storeObservabilityDisabled(namespace, !settings.enabled);
40
- return { data: settings.enabled };
41
- },
42
- }),
43
- createResolver({
44
- intent: ObservabilityAction.SendEvent,
45
- resolve: (data) => {
46
- const client = context.getCapability(ClientCapability);
47
- const properties = 'properties' in data ? data.properties : {};
48
-
49
- // NOTE: This is to ensure that events fired before observability is ready are still sent.
50
- // TODO(wittjosiah): If the intent dispatcher supports concurrent actions in the future,
51
- // then this could be awaited still rather than voiding.
52
- void context.waitForCapability(ObservabilityCapabilities.Observability).then((observability) => {
53
- observability.track({
54
- ...getTelemetryIdentity(client),
55
- action: data.name,
56
- properties,
57
- });
58
- });
59
- },
60
- }),
61
- createResolver({
62
- intent: ObservabilityAction.CaptureUserFeedback,
63
- resolve: async (data) => {
64
- const observability = context.getCapability(ObservabilityCapabilities.Observability);
65
- observability.captureUserFeedback(data.message);
66
- },
67
- }),
68
- ]);
@@ -1,82 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- //
4
-
5
- import React, { useCallback, useRef, useState } from 'react';
6
-
7
- import { getSnapshot } from '@dxos/echo-schema';
8
- import { IconButton, Input, useTranslation } from '@dxos/react-ui';
9
- import { FormProvider, useFormContext, useInputProps } from '@dxos/react-ui-form';
10
-
11
- import { OBSERVABILITY_PLUGIN } from '../meta';
12
- import { UserFeedback } from '../types';
13
-
14
- const defaultValues: UserFeedback = { message: '' };
15
-
16
- const FormContent = () => {
17
- const { t } = useTranslation(OBSERVABILITY_PLUGIN);
18
- const { handleSave, canSave } = useFormContext<UserFeedback>();
19
-
20
- const messageProps = useInputProps(['message']);
21
-
22
- return (
23
- <div role='form' className='p-3 flex flex-col gap-2'>
24
- <div role='none' className='space-b-1'>
25
- <Input.Root validationValence={messageProps.getStatus().status}>
26
- <Input.Label>{t('feedback text area label')}</Input.Label>
27
- <Input.TextArea
28
- classNames={'text-sm'}
29
- rows={5}
30
- cols={30}
31
- placeholder={t('feedback text area placeholder')}
32
- value={messageProps.getValue() ?? ''}
33
- onChange={(e) => messageProps.onValueChange('string', e.target.value)}
34
- // TODO(wittjosiah): This aggressively shows validation errors.
35
- onBlur={messageProps.onBlur}
36
- />
37
- <Input.DescriptionAndValidation>
38
- <Input.Validation>{messageProps.getStatus().error}</Input.Validation>
39
- </Input.DescriptionAndValidation>
40
- </Input.Root>
41
- </div>
42
-
43
- <div role='none' className='space-b-2'>
44
- <IconButton
45
- icon='ph--paper-plane-tilt--regular'
46
- label={t('send feedback label')}
47
- variant='primary'
48
- type='submit'
49
- classNames='is-full'
50
- disabled={!canSave}
51
- onClick={handleSave}
52
- />
53
- </div>
54
- </div>
55
- );
56
- };
57
-
58
- // TODO(wittjosiah): Use `Form`?
59
- export const FeedbackForm = ({ onSave }: { onSave: (values: UserFeedback) => void }) => {
60
- const formRef = useRef<HTMLDivElement>(null);
61
- const [_, update] = useState({});
62
- const forceRender = useCallback(() => update({}), [update]);
63
-
64
- const handleSave = useCallback(
65
- (values: UserFeedback) => {
66
- onSave(values);
67
- // TODO(wittjosiah): Force re-render to clear the form.
68
- forceRender();
69
- },
70
- [forceRender, onSave],
71
- );
72
-
73
- const initialValues = getSnapshot(defaultValues);
74
-
75
- return (
76
- <FormProvider formRef={formRef} schema={UserFeedback} initialValues={initialValues} onSave={handleSave}>
77
- <div ref={formRef}>
78
- <FormContent />
79
- </div>
80
- </FormProvider>
81
- );
82
- };
@@ -1,40 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import { pipe } from 'effect';
6
- import React, { useCallback } from 'react';
7
-
8
- import { chain, createIntent, LayoutAction, useIntentDispatcher } from '@dxos/app-framework';
9
-
10
- import { FeedbackForm } from './FeedbackForm';
11
- import { OBSERVABILITY_PLUGIN } from '../meta';
12
- import { ObservabilityAction, type UserFeedback } from '../types';
13
-
14
- export const HelpContainer = () => {
15
- const { dispatchPromise: dispatch } = useIntentDispatcher();
16
-
17
- const handleSave = useCallback(
18
- (values: UserFeedback) =>
19
- dispatch(
20
- pipe(
21
- createIntent(ObservabilityAction.CaptureUserFeedback, values),
22
- chain(LayoutAction.UpdateComplementary, { part: 'complementary', options: { state: 'collapsed' } }),
23
- chain(LayoutAction.AddToast, {
24
- part: 'toast',
25
- subject: {
26
- id: `${OBSERVABILITY_PLUGIN}/feedback-success`,
27
- icon: 'ph--paper-plane-tilt--regular',
28
- duration: 3000,
29
- title: ['feedback toast label', { ns: OBSERVABILITY_PLUGIN }],
30
- description: ['feedback toast description', { ns: OBSERVABILITY_PLUGIN }],
31
- closeLabel: ['close label', { ns: 'os' }],
32
- },
33
- }),
34
- ),
35
- ),
36
- [dispatch],
37
- );
38
-
39
- return <FeedbackForm onSave={handleSave} />;
40
- };
@@ -1,48 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import { Schema } from 'effect';
6
- import React from 'react';
7
-
8
- import { createIntent, useIntentDispatcher } from '@dxos/app-framework';
9
- import { Input, Message, useTranslation } from '@dxos/react-ui';
10
- import { DeprecatedFormContainer, DeprecatedFormInput } from '@dxos/react-ui-form';
11
-
12
- import { OBSERVABILITY_PLUGIN } from '../meta';
13
- import { ObservabilityAction } from '../types';
14
-
15
- export const ObservabilitySettingsSchema = Schema.mutable(
16
- Schema.Struct({
17
- enabled: Schema.Boolean,
18
- // TODO(wittjosiah): Separate settings for each observability feature.
19
- // metrics?: boolean;
20
- // telemetry?: boolean;
21
- // errors?: boolean;
22
- }),
23
- );
24
-
25
- export type ObservabilitySettingsProps = Schema.Schema.Type<typeof ObservabilitySettingsSchema>;
26
-
27
- export const ObservabilitySettings = ({ settings }: { settings: ObservabilitySettingsProps }) => {
28
- const { t } = useTranslation(OBSERVABILITY_PLUGIN);
29
- const { dispatchPromise: dispatch } = useIntentDispatcher();
30
-
31
- return (
32
- <DeprecatedFormContainer>
33
- <DeprecatedFormInput
34
- label={t('observability enabled label')}
35
- secondary={
36
- <Message.Root valence='info'>
37
- <Message.Content>{t('observability description')}</Message.Content>
38
- </Message.Root>
39
- }
40
- >
41
- <Input.Switch
42
- checked={settings.enabled}
43
- onCheckedChange={(checked) => dispatch(createIntent(ObservabilityAction.Toggle, { state: !!checked }))}
44
- />
45
- </DeprecatedFormInput>
46
- </DeprecatedFormContainer>
47
- );
48
- };
package/src/events.ts DELETED
@@ -1,14 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import { defineEvent, Events } from '@dxos/app-framework';
6
-
7
- import { OBSERVABILITY_PLUGIN } from './meta';
8
-
9
- export namespace ObservabilityEvents {
10
- export const StateReady = Events.createStateEvent(OBSERVABILITY_PLUGIN);
11
- }
12
-
13
- // NOTE: This is cloned from the client plugin to avoid circular dependencies.
14
- export const ClientReadyEvent = defineEvent('dxos.org/plugin/client/event/client-ready');
package/src/types.ts DELETED
@@ -1,203 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- //
4
-
5
- import { Schema } from 'effect';
6
-
7
- import { Type } from '@dxos/echo';
8
-
9
- import { OBSERVABILITY_PLUGIN } from './meta';
10
-
11
- const nonEmpty = <S extends Schema.Schema.Any>(field: string) =>
12
- Schema.nonEmptyString<S>({ message: () => `Missing field: ${field}` });
13
-
14
- const maxLength = <S extends Schema.Schema.Any>(field: string, length: number) =>
15
- Schema.maxLength<S>(length, { message: () => `Exceeds max length (${length}): ${field}` });
16
-
17
- export const UserFeedback = Schema.Struct({
18
- message: Schema.String.pipe(nonEmpty('Feedback'), maxLength('Feedback', 32_768)),
19
- });
20
-
21
- export type UserFeedback = Schema.Schema.Type<typeof UserFeedback>;
22
-
23
- const OBSERVABILITY_ACTION = `${OBSERVABILITY_PLUGIN}/action`;
24
-
25
- export namespace ObservabilityAction {
26
- export class Toggle extends Schema.TaggedClass<Toggle>()(`${OBSERVABILITY_ACTION}/toggle`, {
27
- input: Schema.Struct({
28
- state: Schema.optional(Schema.Boolean),
29
- }),
30
- output: Schema.Boolean,
31
- }) {}
32
-
33
- export class CaptureUserFeedback extends Schema.TaggedClass<CaptureUserFeedback>()(
34
- `${OBSERVABILITY_ACTION}/capture-feedback`,
35
- {
36
- input: UserFeedback,
37
- output: Schema.Void,
38
- },
39
- ) {}
40
-
41
- /** Base intent for sending events. */
42
- export class BaseSendEvent extends Schema.TaggedClass<BaseSendEvent>()(`${OBSERVABILITY_ACTION}/send-event`, {
43
- input: Schema.Struct({
44
- name: Schema.String,
45
- properties: Schema.optional(Schema.Object),
46
- }),
47
- output: Schema.Void,
48
- }) {}
49
-
50
- /** Intent with strict types for first-party events. */
51
- export class SendEvent extends Schema.TaggedClass<SendEvent>()(`${OBSERVABILITY_ACTION}/send-event`, {
52
- // NOTE: Sort alphabetically by name.
53
- input: Schema.Union(
54
- Schema.Struct({
55
- name: Schema.Literal('identity.create'),
56
- }),
57
- Schema.Struct({
58
- name: Schema.Literal('identity.join'),
59
- }),
60
- Schema.Struct({
61
- name: Schema.Literal('identity.recover'),
62
- }),
63
- Schema.Struct({
64
- name: Schema.Literal('identity.share'),
65
- }),
66
- Schema.Struct({
67
- name: Schema.Literal('navigation.activate'),
68
- properties: Schema.Struct({
69
- subjectId: Schema.String,
70
- typename: Schema.optional(Schema.String),
71
- }),
72
- }),
73
- Schema.Struct({
74
- name: Schema.Literal('page.load'),
75
- properties: Schema.Struct({
76
- loadDuration: Schema.Number,
77
- }),
78
- }),
79
- Schema.Struct({
80
- name: Schema.Literal('plugins.toggle'),
81
- properties: Schema.Struct({
82
- plugin: Schema.String,
83
- enabled: Schema.Boolean,
84
- }),
85
- }),
86
- Schema.Struct({
87
- name: Schema.Literal('space.create'),
88
- properties: Schema.Struct({
89
- spaceId: Type.SpaceId,
90
- }),
91
- }),
92
- Schema.Struct({
93
- name: Schema.Literal('space.join'),
94
- properties: Schema.Struct({
95
- spaceId: Type.SpaceId,
96
- }),
97
- }),
98
- Schema.Struct({
99
- name: Schema.Literal('space.limit'),
100
- properties: Schema.Struct({
101
- spaceId: Type.SpaceId,
102
- }),
103
- }),
104
- Schema.Struct({
105
- name: Schema.Literal('space.lock'),
106
- properties: Schema.Struct({
107
- spaceId: Type.SpaceId,
108
- }),
109
- }),
110
- Schema.Struct({
111
- name: Schema.Literal('space.migrate'),
112
- properties: Schema.Struct({
113
- spaceId: Type.SpaceId,
114
- targetVersion: Schema.optional(Schema.String),
115
- version: Schema.optional(Schema.String),
116
- }),
117
- }),
118
- Schema.Struct({
119
- name: Schema.Literal('space.object.add'),
120
- properties: Schema.Struct({
121
- spaceId: Type.SpaceId,
122
- objectId: Schema.String,
123
- typename: Schema.optional(Schema.String),
124
- }),
125
- }),
126
- Schema.Struct({
127
- name: Schema.Literal('space.share'),
128
- properties: Schema.Struct({
129
- spaceId: Type.SpaceId,
130
- }),
131
- }),
132
- Schema.Struct({
133
- name: Schema.Literal('space.unlock'),
134
- properties: Schema.Struct({
135
- spaceId: Type.SpaceId,
136
- }),
137
- }),
138
- Schema.Struct({
139
- name: Schema.Literal('threads.create'),
140
- properties: Schema.Struct({
141
- spaceId: Type.SpaceId,
142
- threadId: Schema.String,
143
- }),
144
- }),
145
- Schema.Struct({
146
- name: Schema.Literal('threads.delete'),
147
- properties: Schema.Struct({
148
- spaceId: Type.SpaceId,
149
- threadId: Schema.String,
150
- }),
151
- }),
152
- Schema.Struct({
153
- name: Schema.Literal('threads.message.add'),
154
- properties: Schema.Struct({
155
- spaceId: Type.SpaceId,
156
- threadId: Schema.String,
157
- threadLength: Schema.Number,
158
- messageId: Schema.String,
159
- messageLength: Schema.Number,
160
- }),
161
- }),
162
- Schema.Struct({
163
- name: Schema.Literal('threads.message.delete'),
164
- properties: Schema.Struct({
165
- spaceId: Type.SpaceId,
166
- threadId: Schema.String,
167
- messageId: Schema.String,
168
- }),
169
- }),
170
- Schema.Struct({
171
- name: Schema.Literal('threads.message.undo-delete'),
172
- properties: Schema.Struct({
173
- spaceId: Type.SpaceId,
174
- threadId: Schema.String,
175
- messageId: Schema.String,
176
- }),
177
- }),
178
- Schema.Struct({
179
- name: Schema.Literal('threads.message.update'),
180
- properties: Schema.Struct({
181
- spaceId: Type.SpaceId,
182
- messageId: Schema.String,
183
- messageLength: Schema.Number,
184
- }),
185
- }),
186
- Schema.Struct({
187
- name: Schema.Literal('threads.toggle-resolved'),
188
- properties: Schema.Struct({
189
- spaceId: Type.SpaceId,
190
- threadId: Schema.String,
191
- }),
192
- }),
193
- Schema.Struct({
194
- name: Schema.Literal('threads.undo-delete'),
195
- properties: Schema.Struct({
196
- spaceId: Type.SpaceId,
197
- threadId: Schema.String,
198
- }),
199
- }),
200
- ),
201
- output: Schema.Void,
202
- }) {}
203
- }