@dxos/plugin-observability 0.8.1-staging.391c573 → 0.8.1-staging.9eaf14f

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 (132) hide show
  1. package/dist/lib/browser/app-graph-builder-OCAR3KUZ.mjs +40 -0
  2. package/dist/lib/browser/app-graph-builder-OCAR3KUZ.mjs.map +7 -0
  3. package/dist/lib/browser/chunk-6Q6ZJ3N4.mjs +123 -0
  4. package/dist/lib/browser/chunk-6Q6ZJ3N4.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-WEVYEGVJ.mjs → chunk-ECWB7E2O.mjs} +2 -2
  6. package/dist/lib/browser/chunk-RI4RE346.mjs +178 -0
  7. package/dist/lib/browser/chunk-RI4RE346.mjs.map +7 -0
  8. package/dist/lib/browser/{chunk-BMBRX6IW.mjs → chunk-RKH5BBR4.mjs} +1 -1
  9. package/dist/lib/browser/{chunk-BMBRX6IW.mjs.map → chunk-RKH5BBR4.mjs.map} +2 -2
  10. package/dist/lib/browser/{client-ready-4TJY6553.mjs → client-ready-LRY24QM5.mjs} +4 -5
  11. package/dist/lib/browser/{client-ready-4TJY6553.mjs.map → client-ready-LRY24QM5.mjs.map} +3 -3
  12. package/dist/lib/browser/index.mjs +30 -9
  13. package/dist/lib/browser/index.mjs.map +3 -3
  14. package/dist/lib/browser/{intents-resolver-YFYWVSTV.mjs → intent-resolver-ZKNJCLDV.mjs} +34 -21
  15. package/dist/lib/browser/intent-resolver-ZKNJCLDV.mjs.map +7 -0
  16. package/dist/lib/browser/meta.json +1 -1
  17. package/dist/lib/browser/react-surface-S36FDV7I.mjs +32 -0
  18. package/dist/lib/browser/react-surface-S36FDV7I.mjs.map +7 -0
  19. package/dist/lib/browser/{settings-SYYERK6Q.mjs → settings-JFZJTDH7.mjs} +4 -4
  20. package/dist/lib/browser/{state-LG42JNIS.mjs → state-GHBXMIQI.mjs} +3 -3
  21. package/dist/lib/browser/types.mjs +2 -2
  22. package/dist/lib/node/app-graph-builder-JPUTX4LQ.cjs +56 -0
  23. package/dist/lib/node/app-graph-builder-JPUTX4LQ.cjs.map +7 -0
  24. package/dist/lib/node/{chunk-7I7D7NBM.cjs → chunk-2ERIOZP3.cjs} +4 -4
  25. package/dist/lib/node/{chunk-7I7D7NBM.cjs.map → chunk-2ERIOZP3.cjs.map} +2 -2
  26. package/dist/lib/node/chunk-FIL4BZE2.cjs +148 -0
  27. package/dist/lib/node/chunk-FIL4BZE2.cjs.map +7 -0
  28. package/dist/lib/node/chunk-V4ZLLL5M.cjs +198 -0
  29. package/dist/lib/node/chunk-V4ZLLL5M.cjs.map +7 -0
  30. package/dist/lib/node/{chunk-X7HWBFE2.cjs → chunk-WJQ2MG7S.cjs} +7 -7
  31. package/dist/lib/node/{client-ready-VEHK7BIF.cjs → client-ready-KHGLQOQZ.cjs} +18 -19
  32. package/dist/lib/node/{client-ready-VEHK7BIF.cjs.map → client-ready-KHGLQOQZ.cjs.map} +3 -3
  33. package/dist/lib/node/index.cjs +43 -23
  34. package/dist/lib/node/index.cjs.map +3 -3
  35. package/dist/lib/node/intent-resolver-5SANBSGX.cjs +88 -0
  36. package/dist/lib/node/intent-resolver-5SANBSGX.cjs.map +7 -0
  37. package/dist/lib/node/meta.json +1 -1
  38. package/dist/lib/node/{react-surface-ZIZ3XZRX.cjs → react-surface-MWJS6OMP.cjs} +21 -14
  39. package/dist/lib/node/react-surface-MWJS6OMP.cjs.map +7 -0
  40. package/dist/lib/node/{settings-KPALB6TN.cjs → settings-ARLOGCYU.cjs} +9 -9
  41. package/dist/lib/node/{state-FNK3OBM7.cjs → state-5GZLUTX7.cjs} +8 -8
  42. package/dist/lib/node/types.cjs +4 -4
  43. package/dist/lib/node/types.cjs.map +1 -1
  44. package/dist/lib/node-esm/app-graph-builder-RKURIIFT.mjs +41 -0
  45. package/dist/lib/node-esm/app-graph-builder-RKURIIFT.mjs.map +7 -0
  46. package/dist/lib/node-esm/{chunk-HTL7V6A2.mjs → chunk-KT5SDFBU.mjs} +1 -1
  47. package/dist/lib/node-esm/{chunk-HTL7V6A2.mjs.map → chunk-KT5SDFBU.mjs.map} +2 -2
  48. package/dist/lib/node-esm/chunk-M3MGU3DN.mjs +179 -0
  49. package/dist/lib/node-esm/chunk-M3MGU3DN.mjs.map +7 -0
  50. package/dist/lib/node-esm/chunk-MW737PHD.mjs +124 -0
  51. package/dist/lib/node-esm/chunk-MW737PHD.mjs.map +7 -0
  52. package/dist/lib/node-esm/{chunk-KPH3N6JS.mjs → chunk-U3JYGK3O.mjs} +2 -2
  53. package/dist/lib/node-esm/{client-ready-HJUJPBUF.mjs → client-ready-4BUMAISA.mjs} +4 -5
  54. package/dist/lib/node-esm/{client-ready-HJUJPBUF.mjs.map → client-ready-4BUMAISA.mjs.map} +3 -3
  55. package/dist/lib/node-esm/index.mjs +30 -9
  56. package/dist/lib/node-esm/index.mjs.map +3 -3
  57. package/dist/lib/node-esm/{intents-resolver-ZX2GS5LN.mjs → intent-resolver-5EFEXLWX.mjs} +34 -21
  58. package/dist/lib/node-esm/intent-resolver-5EFEXLWX.mjs.map +7 -0
  59. package/dist/lib/node-esm/meta.json +1 -1
  60. package/dist/lib/node-esm/react-surface-VLQBOZTX.mjs +33 -0
  61. package/dist/lib/node-esm/react-surface-VLQBOZTX.mjs.map +7 -0
  62. package/dist/lib/node-esm/{settings-F55M56A3.mjs → settings-765HDSFY.mjs} +4 -4
  63. package/dist/lib/node-esm/{state-UXRA6NQC.mjs → state-R2UVEG7B.mjs} +3 -3
  64. package/dist/lib/node-esm/types.mjs +2 -2
  65. package/dist/types/src/ObservabilityPlugin.d.ts.map +1 -1
  66. package/dist/types/src/capabilities/app-graph-builder.d.ts +181 -0
  67. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -0
  68. package/dist/types/src/capabilities/client-ready.d.ts.map +1 -1
  69. package/dist/types/src/capabilities/index.d.ts +177 -0
  70. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  71. package/dist/types/src/capabilities/{intents-resolver.d.ts → intent-resolver.d.ts} +1 -1
  72. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -0
  73. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  74. package/dist/types/src/components/FeedbackForm.d.ts +6 -0
  75. package/dist/types/src/components/FeedbackForm.d.ts.map +1 -0
  76. package/dist/types/src/components/HelpContainer.d.ts +3 -0
  77. package/dist/types/src/components/HelpContainer.d.ts.map +1 -0
  78. package/dist/types/src/components/index.d.ts +2 -0
  79. package/dist/types/src/components/index.d.ts.map +1 -1
  80. package/dist/types/src/index.d.ts +1 -0
  81. package/dist/types/src/index.d.ts.map +1 -1
  82. package/dist/types/src/meta.d.ts +2 -5
  83. package/dist/types/src/meta.d.ts.map +1 -1
  84. package/dist/types/src/translations.d.ts +4 -0
  85. package/dist/types/src/translations.d.ts.map +1 -1
  86. package/dist/types/src/types.d.ts +141 -15
  87. package/dist/types/src/types.d.ts.map +1 -1
  88. package/package.json +21 -20
  89. package/src/ObservabilityPlugin.ts +6 -0
  90. package/src/capabilities/app-graph-builder.ts +33 -0
  91. package/src/capabilities/client-ready.ts +0 -1
  92. package/src/capabilities/index.ts +2 -1
  93. package/src/capabilities/{intents-resolver.ts → intent-resolver.ts} +21 -15
  94. package/src/capabilities/react-surface.tsx +8 -4
  95. package/src/components/FeedbackForm.tsx +82 -0
  96. package/src/components/HelpContainer.tsx +23 -0
  97. package/src/components/index.ts +2 -0
  98. package/src/index.ts +1 -0
  99. package/src/meta.ts +2 -2
  100. package/src/translations.ts +5 -0
  101. package/src/types.ts +167 -22
  102. package/dist/lib/browser/chunk-M5IXMQLH.mjs +0 -58
  103. package/dist/lib/browser/chunk-M5IXMQLH.mjs.map +0 -7
  104. package/dist/lib/browser/chunk-N5A53Y7I.mjs +0 -37
  105. package/dist/lib/browser/chunk-N5A53Y7I.mjs.map +0 -7
  106. package/dist/lib/browser/intents-resolver-YFYWVSTV.mjs.map +0 -7
  107. package/dist/lib/browser/react-surface-3X7G3DKS.mjs +0 -24
  108. package/dist/lib/browser/react-surface-3X7G3DKS.mjs.map +0 -7
  109. package/dist/lib/node/chunk-2Q7DSBI2.cjs +0 -78
  110. package/dist/lib/node/chunk-2Q7DSBI2.cjs.map +0 -7
  111. package/dist/lib/node/chunk-MM3VMYBM.cjs +0 -65
  112. package/dist/lib/node/chunk-MM3VMYBM.cjs.map +0 -7
  113. package/dist/lib/node/intents-resolver-TWGXEG7H.cjs +0 -75
  114. package/dist/lib/node/intents-resolver-TWGXEG7H.cjs.map +0 -7
  115. package/dist/lib/node/react-surface-ZIZ3XZRX.cjs.map +0 -7
  116. package/dist/lib/node-esm/chunk-543EU376.mjs +0 -59
  117. package/dist/lib/node-esm/chunk-543EU376.mjs.map +0 -7
  118. package/dist/lib/node-esm/chunk-COZQZRNU.mjs +0 -38
  119. package/dist/lib/node-esm/chunk-COZQZRNU.mjs.map +0 -7
  120. package/dist/lib/node-esm/intents-resolver-ZX2GS5LN.mjs.map +0 -7
  121. package/dist/lib/node-esm/react-surface-L7BIQR3B.mjs +0 -25
  122. package/dist/lib/node-esm/react-surface-L7BIQR3B.mjs.map +0 -7
  123. package/dist/types/src/capabilities/intents-resolver.d.ts.map +0 -1
  124. /package/dist/lib/browser/{chunk-WEVYEGVJ.mjs.map → chunk-ECWB7E2O.mjs.map} +0 -0
  125. /package/dist/lib/browser/{settings-SYYERK6Q.mjs.map → settings-JFZJTDH7.mjs.map} +0 -0
  126. /package/dist/lib/browser/{state-LG42JNIS.mjs.map → state-GHBXMIQI.mjs.map} +0 -0
  127. /package/dist/lib/node/{chunk-X7HWBFE2.cjs.map → chunk-WJQ2MG7S.cjs.map} +0 -0
  128. /package/dist/lib/node/{settings-KPALB6TN.cjs.map → settings-ARLOGCYU.cjs.map} +0 -0
  129. /package/dist/lib/node/{state-FNK3OBM7.cjs.map → state-5GZLUTX7.cjs.map} +0 -0
  130. /package/dist/lib/node-esm/{chunk-KPH3N6JS.mjs.map → chunk-U3JYGK3O.mjs.map} +0 -0
  131. /package/dist/lib/node-esm/{settings-F55M56A3.mjs.map → settings-765HDSFY.mjs.map} +0 -0
  132. /package/dist/lib/node-esm/{state-UXRA6NQC.mjs.map → state-R2UVEG7B.mjs.map} +0 -0
@@ -0,0 +1,40 @@
1
+ import {
2
+ OBSERVABILITY_PLUGIN
3
+ } from "./chunk-RKH5BBR4.mjs";
4
+
5
+ // packages/plugins/plugin-observability/src/capabilities/app-graph-builder.ts
6
+ import { Capabilities, contributes } from "@dxos/app-framework";
7
+ import { createExtension } from "@dxos/plugin-graph";
8
+ var ATTENDABLE_PATH_SEPARATOR = "~";
9
+ var DECK_COMPANION_TYPE = "dxos.org/plugin/deck/deck-companion";
10
+ var app_graph_builder_default = (context) => contributes(Capabilities.AppGraphBuilder, [
11
+ createExtension({
12
+ id: `${OBSERVABILITY_PLUGIN}/help`,
13
+ filter: (node) => node.id === "root",
14
+ connector: ({ node }) => [
15
+ {
16
+ id: [
17
+ node.id,
18
+ "help"
19
+ ].join(ATTENDABLE_PATH_SEPARATOR),
20
+ type: DECK_COMPANION_TYPE,
21
+ data: null,
22
+ properties: {
23
+ label: [
24
+ "help label",
25
+ {
26
+ ns: OBSERVABILITY_PLUGIN
27
+ }
28
+ ],
29
+ icon: "ph--question--regular",
30
+ disposition: "hidden",
31
+ position: "hoist"
32
+ }
33
+ }
34
+ ]
35
+ })
36
+ ]);
37
+ export {
38
+ app_graph_builder_default as default
39
+ };
40
+ //# sourceMappingURL=app-graph-builder-OCAR3KUZ.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/app-graph-builder.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capabilities, contributes, type PluginsContext } from '@dxos/app-framework';\nimport { createExtension, type Node } from '@dxos/plugin-graph';\n\nimport { OBSERVABILITY_PLUGIN } from '../meta';\n\n// NOTE: Copied from @dxos/plugin-deck to break circular dependency.\nconst ATTENDABLE_PATH_SEPARATOR = '~';\nconst DECK_COMPANION_TYPE = 'dxos.org/plugin/deck/deck-companion';\n\nexport default (context: PluginsContext) =>\n contributes(Capabilities.AppGraphBuilder, [\n createExtension({\n id: `${OBSERVABILITY_PLUGIN}/help`,\n filter: (node): node is Node<null> => node.id === 'root',\n connector: ({ node }) => [\n {\n id: [node.id, 'help'].join(ATTENDABLE_PATH_SEPARATOR),\n type: DECK_COMPANION_TYPE,\n data: null,\n properties: {\n label: ['help label', { ns: OBSERVABILITY_PLUGIN }],\n icon: 'ph--question--regular',\n disposition: 'hidden',\n position: 'hoist',\n },\n },\n ],\n }),\n ]);\n"],
5
+ "mappings": ";;;;;AAIA,SAASA,cAAcC,mBAAwC;AAC/D,SAASC,uBAAkC;AAK3C,IAAMC,4BAA4B;AAClC,IAAMC,sBAAsB;AAE5B,IAAA,4BAAe,CAACC,YACdC,YAAYC,aAAaC,iBAAiB;EACxCC,gBAAgB;IACdC,IAAI,GAAGC,oBAAAA;IACPC,QAAQ,CAACC,SAA6BA,KAAKH,OAAO;IAClDI,WAAW,CAAC,EAAED,KAAI,MAAO;MACvB;QACEH,IAAI;UAACG,KAAKH;UAAI;UAAQK,KAAKZ,yBAAAA;QAC3Ba,MAAMZ;QACNa,MAAM;QACNC,YAAY;UACVC,OAAO;YAAC;YAAc;cAAEC,IAAIT;YAAqB;;UACjDU,MAAM;UACNC,aAAa;UACbC,UAAU;QACZ;MACF;;EAEJ,CAAA;CACD;",
6
+ "names": ["Capabilities", "contributes", "createExtension", "ATTENDABLE_PATH_SEPARATOR", "DECK_COMPANION_TYPE", "context", "contributes", "Capabilities", "AppGraphBuilder", "createExtension", "id", "OBSERVABILITY_PLUGIN", "filter", "node", "connector", "join", "type", "data", "properties", "label", "ns", "icon", "disposition", "position"]
7
+ }
@@ -0,0 +1,123 @@
1
+ import {
2
+ ObservabilityAction,
3
+ UserFeedback
4
+ } from "./chunk-RI4RE346.mjs";
5
+ import {
6
+ OBSERVABILITY_PLUGIN
7
+ } from "./chunk-RKH5BBR4.mjs";
8
+
9
+ // packages/plugins/plugin-observability/src/components/FeedbackForm.tsx
10
+ import React, { useCallback, useRef, useState } from "react";
11
+ import { getSnapshot } from "@dxos/echo-schema";
12
+ import { IconButton, Input, useTranslation } from "@dxos/react-ui";
13
+ import { FormProvider, useFormContext, useInputProps } from "@dxos/react-ui-form";
14
+ var defaultValues = {
15
+ message: ""
16
+ };
17
+ var FormContent = () => {
18
+ const { t } = useTranslation(OBSERVABILITY_PLUGIN);
19
+ const { handleSave, canSave } = useFormContext();
20
+ const messageProps = useInputProps([
21
+ "message"
22
+ ]);
23
+ return /* @__PURE__ */ React.createElement("div", {
24
+ role: "form",
25
+ className: "p-3 flex flex-col gap-2"
26
+ }, /* @__PURE__ */ React.createElement("div", {
27
+ role: "none",
28
+ className: "space-b-1"
29
+ }, /* @__PURE__ */ React.createElement(Input.Root, {
30
+ validationValence: messageProps.getStatus().status
31
+ }, /* @__PURE__ */ React.createElement(Input.Label, null, t("feedback text area label")), /* @__PURE__ */ React.createElement(Input.TextArea, {
32
+ classNames: "text-sm",
33
+ rows: 5,
34
+ cols: 30,
35
+ placeholder: t("feedback text area placeholder"),
36
+ value: messageProps.getValue() ?? "",
37
+ onChange: (e) => messageProps.onValueChange("string", e.target.value),
38
+ // TODO(wittjosiah): This aggressively shows validation errors.
39
+ onBlur: messageProps.onBlur
40
+ }), /* @__PURE__ */ React.createElement(Input.DescriptionAndValidation, null, /* @__PURE__ */ React.createElement(Input.Validation, null, messageProps.getStatus().error)))), /* @__PURE__ */ React.createElement("div", {
41
+ role: "none",
42
+ className: "space-b-2"
43
+ }, /* @__PURE__ */ React.createElement(IconButton, {
44
+ icon: "ph--paper-plane-tilt--regular",
45
+ label: t("send feedback label"),
46
+ variant: "primary",
47
+ type: "submit",
48
+ classNames: "is-full",
49
+ disabled: !canSave,
50
+ onClick: handleSave
51
+ })));
52
+ };
53
+ var FeedbackForm = ({ onSave }) => {
54
+ const formRef = useRef(null);
55
+ const [_, update] = useState({});
56
+ const forceRender = useCallback(() => update({}), [
57
+ update
58
+ ]);
59
+ const handleSave = useCallback((values) => {
60
+ onSave(values);
61
+ forceRender();
62
+ }, [
63
+ forceRender,
64
+ onSave
65
+ ]);
66
+ const initialValues = getSnapshot(defaultValues);
67
+ return /* @__PURE__ */ React.createElement(FormProvider, {
68
+ formRef,
69
+ schema: UserFeedback,
70
+ initialValues,
71
+ onSave: handleSave
72
+ }, /* @__PURE__ */ React.createElement("div", {
73
+ ref: formRef
74
+ }, /* @__PURE__ */ React.createElement(FormContent, null)));
75
+ };
76
+
77
+ // packages/plugins/plugin-observability/src/components/HelpContainer.tsx
78
+ import React2, { useCallback as useCallback2 } from "react";
79
+ import { createIntent, useIntentDispatcher } from "@dxos/app-framework";
80
+ var HelpContainer = () => {
81
+ const { dispatchPromise: dispatch } = useIntentDispatcher();
82
+ const handleSave = useCallback2((values) => {
83
+ void dispatch(createIntent(ObservabilityAction.CaptureUserFeedback, values));
84
+ }, [
85
+ dispatch
86
+ ]);
87
+ return /* @__PURE__ */ React2.createElement(FeedbackForm, {
88
+ onSave: handleSave
89
+ });
90
+ };
91
+
92
+ // packages/plugins/plugin-observability/src/components/ObservabilitySettings.tsx
93
+ import React3 from "react";
94
+ import { createIntent as createIntent2, useIntentDispatcher as useIntentDispatcher2 } from "@dxos/app-framework";
95
+ import { S } from "@dxos/echo-schema";
96
+ import { Input as Input2, Message, useTranslation as useTranslation2 } from "@dxos/react-ui";
97
+ import { DeprecatedFormContainer, DeprecatedFormInput } from "@dxos/react-ui-form";
98
+ var ObservabilitySettingsSchema = S.mutable(S.Struct({
99
+ enabled: S.Boolean
100
+ }));
101
+ var ObservabilitySettings = ({ settings }) => {
102
+ const { t } = useTranslation2(OBSERVABILITY_PLUGIN);
103
+ const { dispatchPromise: dispatch } = useIntentDispatcher2();
104
+ return /* @__PURE__ */ React3.createElement(DeprecatedFormContainer, null, /* @__PURE__ */ React3.createElement(DeprecatedFormInput, {
105
+ label: t("observability enabled label"),
106
+ secondary: /* @__PURE__ */ React3.createElement(Message.Root, {
107
+ valence: "info"
108
+ }, /* @__PURE__ */ React3.createElement(Message.Body, null, t("observability description")))
109
+ }, /* @__PURE__ */ React3.createElement(Input2.Switch, {
110
+ checked: settings.enabled,
111
+ onCheckedChange: (checked) => dispatch(createIntent2(ObservabilityAction.Toggle, {
112
+ state: !!checked
113
+ }))
114
+ })));
115
+ };
116
+
117
+ export {
118
+ FeedbackForm,
119
+ HelpContainer,
120
+ ObservabilitySettingsSchema,
121
+ ObservabilitySettings
122
+ };
123
+ //# sourceMappingURL=chunk-6Q6ZJ3N4.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/FeedbackForm.tsx", "../../../src/components/HelpContainer.tsx", "../../../src/components/ObservabilitySettings.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useRef, useState } from 'react';\n\nimport { getSnapshot } from '@dxos/echo-schema';\nimport { IconButton, Input, useTranslation } from '@dxos/react-ui';\nimport { FormProvider, useFormContext, useInputProps } from '@dxos/react-ui-form';\n\nimport { OBSERVABILITY_PLUGIN } from '../meta';\nimport { UserFeedback } from '../types';\n\nconst defaultValues: UserFeedback = { message: '' };\n\nconst FormContent = () => {\n const { t } = useTranslation(OBSERVABILITY_PLUGIN);\n const { handleSave, canSave } = useFormContext<UserFeedback>();\n\n const messageProps = useInputProps(['message']);\n\n return (\n <div role='form' className='p-3 flex flex-col gap-2'>\n <div role='none' className='space-b-1'>\n <Input.Root validationValence={messageProps.getStatus().status}>\n <Input.Label>{t('feedback text area label')}</Input.Label>\n <Input.TextArea\n classNames={'text-sm'}\n rows={5}\n cols={30}\n placeholder={t('feedback text area placeholder')}\n value={messageProps.getValue() ?? ''}\n onChange={(e) => messageProps.onValueChange('string', e.target.value)}\n // TODO(wittjosiah): This aggressively shows validation errors.\n onBlur={messageProps.onBlur}\n />\n <Input.DescriptionAndValidation>\n <Input.Validation>{messageProps.getStatus().error}</Input.Validation>\n </Input.DescriptionAndValidation>\n </Input.Root>\n </div>\n\n <div role='none' className='space-b-2'>\n <IconButton\n icon='ph--paper-plane-tilt--regular'\n label={t('send feedback label')}\n variant='primary'\n type='submit'\n classNames='is-full'\n disabled={!canSave}\n onClick={handleSave}\n />\n </div>\n </div>\n );\n};\n\n// TODO(wittjosiah): Use `Form`?\nexport const FeedbackForm = ({ onSave }: { onSave: (values: UserFeedback) => void }) => {\n const formRef = useRef<HTMLDivElement>(null);\n const [_, update] = useState({});\n const forceRender = useCallback(() => update({}), [update]);\n\n const handleSave = useCallback(\n (values: UserFeedback) => {\n onSave(values);\n // TODO(wittjosiah): Force re-render to clear the form.\n forceRender();\n },\n [forceRender, onSave],\n );\n\n const initialValues = getSnapshot(defaultValues);\n\n return (\n <FormProvider formRef={formRef} schema={UserFeedback} initialValues={initialValues} onSave={handleSave}>\n <div ref={formRef}>\n <FormContent />\n </div>\n </FormProvider>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\n\nimport { FeedbackForm } from './FeedbackForm';\nimport { ObservabilityAction, type UserFeedback } from '../types';\n\nexport const HelpContainer = () => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n\n const handleSave = useCallback(\n (values: UserFeedback) => {\n void dispatch(createIntent(ObservabilityAction.CaptureUserFeedback, values));\n },\n [dispatch],\n );\n\n return <FeedbackForm onSave={handleSave} />;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { S } from '@dxos/echo-schema';\nimport { Input, Message, useTranslation } from '@dxos/react-ui';\nimport { DeprecatedFormContainer, DeprecatedFormInput } from '@dxos/react-ui-form';\n\nimport { OBSERVABILITY_PLUGIN } from '../meta';\nimport { ObservabilityAction } from '../types';\n\nexport const ObservabilitySettingsSchema = S.mutable(\n S.Struct({\n enabled: S.Boolean,\n // TODO(wittjosiah): Separate settings for each observability feature.\n // metrics?: boolean;\n // telemetry?: boolean;\n // errors?: boolean;\n }),\n);\n\nexport type ObservabilitySettingsProps = S.Schema.Type<typeof ObservabilitySettingsSchema>;\n\nexport const ObservabilitySettings = ({ settings }: { settings: ObservabilitySettingsProps }) => {\n const { t } = useTranslation(OBSERVABILITY_PLUGIN);\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n\n return (\n <DeprecatedFormContainer>\n <DeprecatedFormInput\n label={t('observability enabled label')}\n secondary={\n <Message.Root valence='info'>\n <Message.Body>{t('observability description')}</Message.Body>\n </Message.Root>\n }\n >\n <Input.Switch\n checked={settings.enabled}\n onCheckedChange={(checked) => dispatch(createIntent(ObservabilityAction.Toggle, { state: !!checked }))}\n />\n </DeprecatedFormInput>\n </DeprecatedFormContainer>\n );\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "useCallback", "useRef", "useState", "getSnapshot", "IconButton", "Input", "useTranslation", "FormProvider", "useFormContext", "useInputProps", "defaultValues", "message", "FormContent", "t", "useTranslation", "OBSERVABILITY_PLUGIN", "handleSave", "canSave", "useFormContext", "messageProps", "useInputProps", "div", "role", "className", "Input", "Root", "validationValence", "getStatus", "status", "Label", "TextArea", "classNames", "rows", "cols", "placeholder", "value", "getValue", "onChange", "e", "onValueChange", "target", "onBlur", "DescriptionAndValidation", "Validation", "error", "IconButton", "icon", "label", "variant", "type", "disabled", "onClick", "FeedbackForm", "onSave", "formRef", "useRef", "_", "update", "useState", "forceRender", "useCallback", "values", "initialValues", "getSnapshot", "FormProvider", "schema", "UserFeedback", "ref", "React", "useCallback", "createIntent", "useIntentDispatcher", "HelpContainer", "dispatchPromise", "dispatch", "useIntentDispatcher", "handleSave", "useCallback", "values", "createIntent", "ObservabilityAction", "CaptureUserFeedback", "React", "FeedbackForm", "onSave", "React", "createIntent", "useIntentDispatcher", "S", "Input", "Message", "useTranslation", "DeprecatedFormContainer", "DeprecatedFormInput", "ObservabilitySettingsSchema", "S", "mutable", "Struct", "enabled", "Boolean", "ObservabilitySettings", "settings", "t", "useTranslation", "OBSERVABILITY_PLUGIN", "dispatchPromise", "dispatch", "useIntentDispatcher", "React", "DeprecatedFormContainer", "DeprecatedFormInput", "label", "secondary", "Message", "Root", "valence", "Body", "Input", "Switch", "checked", "onCheckedChange", "createIntent", "ObservabilityAction", "Toggle", "state"]
7
+ }
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  OBSERVABILITY_PLUGIN
3
- } from "./chunk-BMBRX6IW.mjs";
3
+ } from "./chunk-RKH5BBR4.mjs";
4
4
 
5
5
  // packages/plugins/plugin-observability/src/capabilities/capabilities.ts
6
6
  import { defineCapability } from "@dxos/app-framework";
@@ -15,4 +15,4 @@ export {
15
15
  ObservabilityCapabilities,
16
16
  ClientCapability
17
17
  };
18
- //# sourceMappingURL=chunk-WEVYEGVJ.mjs.map
18
+ //# sourceMappingURL=chunk-ECWB7E2O.mjs.map
@@ -0,0 +1,178 @@
1
+ import {
2
+ OBSERVABILITY_PLUGIN
3
+ } from "./chunk-RKH5BBR4.mjs";
4
+
5
+ // packages/plugins/plugin-observability/src/types.ts
6
+ import { S } from "@dxos/echo-schema";
7
+ var nonEmpty = (field) => S.nonEmptyString({
8
+ message: () => `Missing field: ${field}`
9
+ });
10
+ var maxLength = (field, length) => S.maxLength(length, {
11
+ message: () => `Exceeds max length (${length}): ${field}`
12
+ });
13
+ var UserFeedback = S.Struct({
14
+ message: S.String.pipe(nonEmpty("Feedback"), maxLength("Feedback", 32768))
15
+ });
16
+ var OBSERVABILITY_ACTION = `${OBSERVABILITY_PLUGIN}/action`;
17
+ var ObservabilityAction;
18
+ (function(ObservabilityAction2) {
19
+ class Toggle extends S.TaggedClass()(`${OBSERVABILITY_ACTION}/toggle`, {
20
+ input: S.Struct({
21
+ state: S.optional(S.Boolean)
22
+ }),
23
+ output: S.Boolean
24
+ }) {
25
+ }
26
+ ObservabilityAction2.Toggle = Toggle;
27
+ class CaptureUserFeedback extends S.TaggedClass()(`${OBSERVABILITY_ACTION}/capture-feedback`, {
28
+ input: UserFeedback,
29
+ output: S.Void
30
+ }) {
31
+ }
32
+ ObservabilityAction2.CaptureUserFeedback = CaptureUserFeedback;
33
+ class BaseSendEvent extends S.TaggedClass()(`${OBSERVABILITY_ACTION}/send-event`, {
34
+ input: S.Struct({
35
+ name: S.String,
36
+ properties: S.optional(S.Object)
37
+ }),
38
+ output: S.Void
39
+ }) {
40
+ }
41
+ ObservabilityAction2.BaseSendEvent = BaseSendEvent;
42
+ class SendEvent extends S.TaggedClass()(`${OBSERVABILITY_ACTION}/send-event`, {
43
+ // NOTE: Sort alphabetically by name.
44
+ input: S.Union(S.Struct({
45
+ name: S.Literal("identity.create")
46
+ }), S.Struct({
47
+ name: S.Literal("identity.join")
48
+ }), S.Struct({
49
+ name: S.Literal("identity.recover")
50
+ }), S.Struct({
51
+ name: S.Literal("identity.share")
52
+ }), S.Struct({
53
+ name: S.Literal("navigation.activate"),
54
+ properties: S.Struct({
55
+ subjectId: S.String,
56
+ typename: S.optional(S.String)
57
+ })
58
+ }), S.Struct({
59
+ name: S.Literal("page.load"),
60
+ properties: S.Struct({
61
+ loadDuration: S.Number
62
+ })
63
+ }), S.Struct({
64
+ name: S.Literal("plugins.toggle"),
65
+ properties: S.Struct({
66
+ plugin: S.String,
67
+ enabled: S.Boolean
68
+ })
69
+ }), S.Struct({
70
+ name: S.Literal("space.create"),
71
+ properties: S.Struct({
72
+ spaceId: S.String
73
+ })
74
+ }), S.Struct({
75
+ name: S.Literal("space.join"),
76
+ properties: S.Struct({
77
+ spaceId: S.String
78
+ })
79
+ }), S.Struct({
80
+ name: S.Literal("space.limit"),
81
+ properties: S.Struct({
82
+ spaceId: S.String
83
+ })
84
+ }), S.Struct({
85
+ name: S.Literal("space.lock"),
86
+ properties: S.Struct({
87
+ spaceId: S.String
88
+ })
89
+ }), S.Struct({
90
+ name: S.Literal("space.migrate"),
91
+ properties: S.Struct({
92
+ spaceId: S.String,
93
+ targetVersion: S.optional(S.String),
94
+ version: S.optional(S.String)
95
+ })
96
+ }), S.Struct({
97
+ name: S.Literal("space.object.add"),
98
+ properties: S.Struct({
99
+ spaceId: S.String,
100
+ objectId: S.String,
101
+ typename: S.optional(S.String)
102
+ })
103
+ }), S.Struct({
104
+ name: S.Literal("space.share"),
105
+ properties: S.Struct({
106
+ spaceId: S.String
107
+ })
108
+ }), S.Struct({
109
+ name: S.Literal("space.unlock"),
110
+ properties: S.Struct({
111
+ spaceId: S.String
112
+ })
113
+ }), S.Struct({
114
+ name: S.Literal("threads.create"),
115
+ properties: S.Struct({
116
+ spaceId: S.String,
117
+ threadId: S.String
118
+ })
119
+ }), S.Struct({
120
+ name: S.Literal("threads.delete"),
121
+ properties: S.Struct({
122
+ spaceId: S.String,
123
+ threadId: S.String
124
+ })
125
+ }), S.Struct({
126
+ name: S.Literal("threads.message.add"),
127
+ properties: S.Struct({
128
+ spaceId: S.String,
129
+ threadId: S.String,
130
+ threadLength: S.Number,
131
+ messageId: S.String,
132
+ messageLength: S.Number
133
+ })
134
+ }), S.Struct({
135
+ name: S.Literal("threads.message.delete"),
136
+ properties: S.Struct({
137
+ spaceId: S.String,
138
+ threadId: S.String,
139
+ messageId: S.String
140
+ })
141
+ }), S.Struct({
142
+ name: S.Literal("threads.message.undo-delete"),
143
+ properties: S.Struct({
144
+ spaceId: S.String,
145
+ threadId: S.String,
146
+ messageId: S.String
147
+ })
148
+ }), S.Struct({
149
+ name: S.Literal("threads.message.update"),
150
+ properties: S.Struct({
151
+ spaceId: S.String,
152
+ messageId: S.String,
153
+ messageLength: S.Number
154
+ })
155
+ }), S.Struct({
156
+ name: S.Literal("threads.toggle-resolved"),
157
+ properties: S.Struct({
158
+ spaceId: S.String,
159
+ threadId: S.String
160
+ })
161
+ }), S.Struct({
162
+ name: S.Literal("threads.undo-delete"),
163
+ properties: S.Struct({
164
+ spaceId: S.String,
165
+ threadId: S.String
166
+ })
167
+ })),
168
+ output: S.Void
169
+ }) {
170
+ }
171
+ ObservabilityAction2.SendEvent = SendEvent;
172
+ })(ObservabilityAction || (ObservabilityAction = {}));
173
+
174
+ export {
175
+ UserFeedback,
176
+ ObservabilityAction
177
+ };
178
+ //# sourceMappingURL=chunk-RI4RE346.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/types.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { S } from '@dxos/echo-schema';\n\nimport { OBSERVABILITY_PLUGIN } from './meta';\n\nconst nonEmpty = <S extends S.Schema.Any>(field: string) =>\n S.nonEmptyString<S>({ message: () => `Missing field: ${field}` });\n\nconst maxLength = <S extends S.Schema.Any>(field: string, length: number) =>\n S.maxLength<S>(length, { message: () => `Exceeds max length (${length}): ${field}` });\n\nexport const UserFeedback = S.Struct({\n message: S.String.pipe(nonEmpty('Feedback'), maxLength('Feedback', 32_768)),\n});\n\nexport type UserFeedback = S.Schema.Type<typeof UserFeedback>;\n\nconst OBSERVABILITY_ACTION = `${OBSERVABILITY_PLUGIN}/action`;\n\nexport namespace ObservabilityAction {\n export class Toggle extends S.TaggedClass<Toggle>()(`${OBSERVABILITY_ACTION}/toggle`, {\n input: S.Struct({\n state: S.optional(S.Boolean),\n }),\n output: S.Boolean,\n }) {}\n\n export class CaptureUserFeedback extends S.TaggedClass<CaptureUserFeedback>()(\n `${OBSERVABILITY_ACTION}/capture-feedback`,\n {\n input: UserFeedback,\n output: S.Void,\n },\n ) {}\n\n /** Base intent for sending events. */\n export class BaseSendEvent extends S.TaggedClass<BaseSendEvent>()(`${OBSERVABILITY_ACTION}/send-event`, {\n input: S.Struct({\n name: S.String,\n properties: S.optional(S.Object),\n }),\n output: S.Void,\n }) {}\n\n /** Intent with strict types for first-party events. */\n export class SendEvent extends S.TaggedClass<SendEvent>()(`${OBSERVABILITY_ACTION}/send-event`, {\n // NOTE: Sort alphabetically by name.\n input: S.Union(\n S.Struct({\n name: S.Literal('identity.create'),\n }),\n S.Struct({\n name: S.Literal('identity.join'),\n }),\n S.Struct({\n name: S.Literal('identity.recover'),\n }),\n S.Struct({\n name: S.Literal('identity.share'),\n }),\n S.Struct({\n name: S.Literal('navigation.activate'),\n properties: S.Struct({\n subjectId: S.String,\n typename: S.optional(S.String),\n }),\n }),\n S.Struct({\n name: S.Literal('page.load'),\n properties: S.Struct({\n loadDuration: S.Number,\n }),\n }),\n S.Struct({\n name: S.Literal('plugins.toggle'),\n properties: S.Struct({\n plugin: S.String,\n enabled: S.Boolean,\n }),\n }),\n S.Struct({\n name: S.Literal('space.create'),\n properties: S.Struct({\n spaceId: S.String,\n }),\n }),\n S.Struct({\n name: S.Literal('space.join'),\n properties: S.Struct({\n spaceId: S.String,\n }),\n }),\n S.Struct({\n name: S.Literal('space.limit'),\n properties: S.Struct({\n spaceId: S.String,\n }),\n }),\n S.Struct({\n name: S.Literal('space.lock'),\n properties: S.Struct({\n spaceId: S.String,\n }),\n }),\n S.Struct({\n name: S.Literal('space.migrate'),\n properties: S.Struct({\n spaceId: S.String,\n targetVersion: S.optional(S.String),\n version: S.optional(S.String),\n }),\n }),\n S.Struct({\n name: S.Literal('space.object.add'),\n properties: S.Struct({\n spaceId: S.String,\n objectId: S.String,\n typename: S.optional(S.String),\n }),\n }),\n S.Struct({\n name: S.Literal('space.share'),\n properties: S.Struct({\n spaceId: S.String,\n }),\n }),\n S.Struct({\n name: S.Literal('space.unlock'),\n properties: S.Struct({\n spaceId: S.String,\n }),\n }),\n S.Struct({\n name: S.Literal('threads.create'),\n properties: S.Struct({\n spaceId: S.String,\n threadId: S.String,\n }),\n }),\n S.Struct({\n name: S.Literal('threads.delete'),\n properties: S.Struct({\n spaceId: S.String,\n threadId: S.String,\n }),\n }),\n S.Struct({\n name: S.Literal('threads.message.add'),\n properties: S.Struct({\n spaceId: S.String,\n threadId: S.String,\n threadLength: S.Number,\n messageId: S.String,\n messageLength: S.Number,\n }),\n }),\n S.Struct({\n name: S.Literal('threads.message.delete'),\n properties: S.Struct({\n spaceId: S.String,\n threadId: S.String,\n messageId: S.String,\n }),\n }),\n S.Struct({\n name: S.Literal('threads.message.undo-delete'),\n properties: S.Struct({\n spaceId: S.String,\n threadId: S.String,\n messageId: S.String,\n }),\n }),\n S.Struct({\n name: S.Literal('threads.message.update'),\n properties: S.Struct({\n spaceId: S.String,\n messageId: S.String,\n messageLength: S.Number,\n }),\n }),\n S.Struct({\n name: S.Literal('threads.toggle-resolved'),\n properties: S.Struct({\n spaceId: S.String,\n threadId: S.String,\n }),\n }),\n S.Struct({\n name: S.Literal('threads.undo-delete'),\n properties: S.Struct({\n spaceId: S.String,\n threadId: S.String,\n }),\n }),\n ),\n output: S.Void,\n }) {}\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["S", "nonEmpty", "field", "S", "nonEmptyString", "message", "maxLength", "length", "UserFeedback", "Struct", "String", "pipe", "OBSERVABILITY_ACTION", "OBSERVABILITY_PLUGIN", "ObservabilityAction", "Toggle", "TaggedClass", "input", "state", "optional", "Boolean", "output", "CaptureUserFeedback", "Void", "BaseSendEvent", "name", "properties", "Object", "SendEvent", "Union", "Literal", "subjectId", "typename", "loadDuration", "Number", "plugin", "enabled", "spaceId", "targetVersion", "version", "objectId", "threadId", "threadLength", "messageId", "messageLength"]
7
+ }
@@ -10,4 +10,4 @@ export {
10
10
  OBSERVABILITY_PLUGIN,
11
11
  meta
12
12
  };
13
- //# sourceMappingURL=chunk-BMBRX6IW.mjs.map
13
+ //# sourceMappingURL=chunk-RKH5BBR4.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/meta.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const OBSERVABILITY_PLUGIN = 'dxos.org/plugin/observability';\n\nexport const meta = {\n id: OBSERVABILITY_PLUGIN,\n name: 'Telemetry',\n icon: 'ph--eye--regular',\n} satisfies PluginMeta;\n"],
5
- "mappings": ";AAMO,IAAMA,uBAAuB;AAE7B,IAAMC,OAAO;EAClBC,IAAIF;EACJG,MAAM;EACNC,MAAM;AACR;",
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const OBSERVABILITY_PLUGIN = 'dxos.org/plugin/observability';\n\nexport const meta: PluginMeta = {\n id: OBSERVABILITY_PLUGIN,\n name: 'Telemetry',\n icon: 'ph--eye--regular',\n};\n"],
5
+ "mappings": ";AAMO,IAAMA,uBAAuB;AAE7B,IAAMC,OAAmB;EAC9BC,IAAIF;EACJG,MAAM;EACNC,MAAM;AACR;",
6
6
  "names": ["OBSERVABILITY_PLUGIN", "meta", "id", "name", "icon"]
7
7
  }
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  ObservabilityAction
3
- } from "./chunk-M5IXMQLH.mjs";
3
+ } from "./chunk-RI4RE346.mjs";
4
4
  import {
5
5
  ClientCapability,
6
6
  ObservabilityCapabilities
7
- } from "./chunk-WEVYEGVJ.mjs";
7
+ } from "./chunk-ECWB7E2O.mjs";
8
8
  import {
9
9
  OBSERVABILITY_PLUGIN
10
- } from "./chunk-BMBRX6IW.mjs";
10
+ } from "./chunk-RKH5BBR4.mjs";
11
11
 
12
12
  // packages/plugins/plugin-observability/src/capabilities/client-ready.ts
13
13
  import { Capabilities, contributes, createIntent, LayoutAction, SettingsAction } from "@dxos/app-framework";
@@ -69,7 +69,6 @@ var client_ready_default = async ({ context, namespace, observability }) => {
69
69
  await dispatch(createIntent(ObservabilityAction.SendEvent, {
70
70
  name: "page.load",
71
71
  properties: {
72
- href: window.location.href,
73
72
  // TODO(wittjosiah): These apis are deprecated. Is there a better way to find this information?
74
73
  loadDuration: window.performance.timing.loadEventEnd - window.performance.timing.loadEventStart
75
74
  }
@@ -100,4 +99,4 @@ var client_ready_default = async ({ context, namespace, observability }) => {
100
99
  export {
101
100
  client_ready_default as default
102
101
  };
103
- //# sourceMappingURL=client-ready-4TJY6553.mjs.map
102
+ //# sourceMappingURL=client-ready-LRY24QM5.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/capabilities/client-ready.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport {\n Capabilities,\n contributes,\n createIntent,\n LayoutAction,\n SettingsAction,\n type PluginsContext,\n} from '@dxos/app-framework';\nimport { setupTelemetryListeners, type Observability } from '@dxos/observability';\n\nimport { ClientCapability, ObservabilityCapabilities } from './capabilities';\nimport { OBSERVABILITY_PLUGIN } from '../meta';\nimport { ObservabilityAction } from '../types';\n\ntype ClientReadyOptions = {\n context: PluginsContext;\n namespace: string;\n observability: Observability;\n};\n\nexport default async ({ context, namespace, observability }: ClientReadyOptions) => {\n const manager = context.requestCapability(Capabilities.PluginManager);\n const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);\n const state = context.requestCapability(ObservabilityCapabilities.State);\n const client = context.requestCapability(ClientCapability);\n\n const sendPrivacyNotice = async () => {\n const environment = client?.config?.values.runtime?.app?.env?.DX_ENVIRONMENT;\n const notify =\n environment && environment !== 'ci' && !environment.endsWith('.local') && !environment.endsWith('.lan');\n if (!state.notified && notify) {\n await dispatch(\n createIntent(LayoutAction.AddToast, {\n part: 'toast',\n subject: {\n id: `${OBSERVABILITY_PLUGIN}/notice`,\n title: ['observability toast label', { ns: OBSERVABILITY_PLUGIN }],\n description: ['observability toast description', { ns: OBSERVABILITY_PLUGIN }],\n duration: Infinity,\n icon: 'ph--info--regular',\n actionLabel: ['observability toast action label', { ns: OBSERVABILITY_PLUGIN }],\n actionAlt: ['observability toast action alt', { ns: OBSERVABILITY_PLUGIN }],\n closeLabel: ['observability toast close label', { ns: OBSERVABILITY_PLUGIN }],\n onAction: () => dispatch(createIntent(SettingsAction.Open, { plugin: OBSERVABILITY_PLUGIN })),\n },\n }),\n );\n\n state.notified = true;\n }\n };\n\n // Ensure errors are tagged with enabled plugins to help with reproductions.\n manager.enabled.map((plugin) => observability?.setTag(`pluginEnabled-${plugin}`, 'true', 'errors'));\n\n await dispatch(\n createIntent(ObservabilityAction.SendEvent, {\n name: 'page.load',\n properties: {\n href: window.location.href,\n // TODO(wittjosiah): These apis are deprecated. Is there a better way to find this information?\n loadDuration: window.performance.timing.loadEventEnd - window.performance.timing.loadEventStart,\n },\n }),\n );\n\n // Start client observability (i.e. not running as shared worker)\n // TODO(nf): how to prevent multiple instances for single shared worker?\n const cleanup = setupTelemetryListeners(namespace, client, observability);\n\n await Promise.all([\n observability.setIdentityTags(client.services.services),\n observability.startRuntimeMetrics(client),\n observability.startNetworkMetrics(client.services.services),\n observability.startSpacesMetrics(client, namespace),\n ]);\n\n if (client.halo.identity.get()) {\n await sendPrivacyNotice();\n } else {\n const subscription = client.halo.identity.subscribe(async (identity) => {\n if (identity && observability) {\n await sendPrivacyNotice();\n await observability.setIdentityTags(client.services.services);\n subscription.unsubscribe();\n }\n });\n }\n\n return contributes(ObservabilityCapabilities.Observability, observability, async () => {\n cleanup();\n await observability.close();\n });\n};\n"],
5
- "mappings": ";;;;;;;;;;;;AAIA,SACEA,cACAC,aACAC,cACAC,cACAC,sBAEK;AACP,SAASC,+BAAmD;AAY5D,IAAA,uBAAe,OAAO,EAAEC,SAASC,WAAWC,cAAa,MAAsB;AAC7E,QAAMC,UAAUH,QAAQI,kBAAkBC,aAAaC,aAAa;AACpE,QAAM,EAAEC,iBAAiBC,SAAQ,IAAKR,QAAQI,kBAAkBC,aAAaI,gBAAgB;AAC7F,QAAMC,QAAQV,QAAQI,kBAAkBO,0BAA0BC,KAAK;AACvE,QAAMC,SAASb,QAAQI,kBAAkBU,gBAAAA;AAEzC,QAAMC,oBAAoB,YAAA;AACxB,UAAMC,cAAcH,QAAQI,QAAQC,OAAOC,SAASC,KAAKC,KAAKC;AAC9D,UAAMC,SACJP,eAAeA,gBAAgB,QAAQ,CAACA,YAAYQ,SAAS,QAAA,KAAa,CAACR,YAAYQ,SAAS,MAAA;AAClG,QAAI,CAACd,MAAMe,YAAYF,QAAQ;AAC7B,YAAMf,SACJkB,aAAaC,aAAaC,UAAU;QAClCC,MAAM;QACNC,SAAS;UACPC,IAAI,GAAGC,oBAAAA;UACPC,OAAO;YAAC;YAA6B;cAAEC,IAAIF;YAAqB;;UAChEG,aAAa;YAAC;YAAmC;cAAED,IAAIF;YAAqB;;UAC5EI,UAAUC;UACVC,MAAM;UACNC,aAAa;YAAC;YAAoC;cAAEL,IAAIF;YAAqB;;UAC7EQ,WAAW;YAAC;YAAkC;cAAEN,IAAIF;YAAqB;;UACzES,YAAY;YAAC;YAAmC;cAAEP,IAAIF;YAAqB;;UAC3EU,UAAU,MAAMlC,SAASkB,aAAaiB,eAAeC,MAAM;YAAEC,QAAQb;UAAqB,CAAA,CAAA;QAC5F;MACF,CAAA,CAAA;AAGFtB,YAAMe,WAAW;IACnB;EACF;AAGAtB,UAAQ2C,QAAQC,IAAI,CAACF,WAAW3C,eAAe8C,OAAO,iBAAiBH,MAAAA,IAAU,QAAQ,QAAA,CAAA;AAEzF,QAAMrC,SACJkB,aAAauB,oBAAoBC,WAAW;IAC1CC,MAAM;IACNC,YAAY;MACVC,MAAMC,OAAOC,SAASF;;MAEtBG,cAAcF,OAAOG,YAAYC,OAAOC,eAAeL,OAAOG,YAAYC,OAAOE;IACnF;EACF,CAAA,CAAA;AAKF,QAAMC,UAAUC,wBAAwB7D,WAAWY,QAAQX,aAAAA;AAE3D,QAAM6D,QAAQC,IAAI;IAChB9D,cAAc+D,gBAAgBpD,OAAOqD,SAASA,QAAQ;IACtDhE,cAAciE,oBAAoBtD,MAAAA;IAClCX,cAAckE,oBAAoBvD,OAAOqD,SAASA,QAAQ;IAC1DhE,cAAcmE,mBAAmBxD,QAAQZ,SAAAA;GAC1C;AAED,MAAIY,OAAOyD,KAAKC,SAASC,IAAG,GAAI;AAC9B,UAAMzD,kBAAAA;EACR,OAAO;AACL,UAAM0D,eAAe5D,OAAOyD,KAAKC,SAASG,UAAU,OAAOH,aAAAA;AACzD,UAAIA,YAAYrE,eAAe;AAC7B,cAAMa,kBAAAA;AACN,cAAMb,cAAc+D,gBAAgBpD,OAAOqD,SAASA,QAAQ;AAC5DO,qBAAaE,YAAW;MAC1B;IACF,CAAA;EACF;AAEA,SAAOC,YAAYjE,0BAA0BkE,eAAe3E,eAAe,YAAA;AACzE2D,YAAAA;AACA,UAAM3D,cAAc4E,MAAK;EAC3B,CAAA;AACF;",
6
- "names": ["Capabilities", "contributes", "createIntent", "LayoutAction", "SettingsAction", "setupTelemetryListeners", "context", "namespace", "observability", "manager", "requestCapability", "Capabilities", "PluginManager", "dispatchPromise", "dispatch", "IntentDispatcher", "state", "ObservabilityCapabilities", "State", "client", "ClientCapability", "sendPrivacyNotice", "environment", "config", "values", "runtime", "app", "env", "DX_ENVIRONMENT", "notify", "endsWith", "notified", "createIntent", "LayoutAction", "AddToast", "part", "subject", "id", "OBSERVABILITY_PLUGIN", "title", "ns", "description", "duration", "Infinity", "icon", "actionLabel", "actionAlt", "closeLabel", "onAction", "SettingsAction", "Open", "plugin", "enabled", "map", "setTag", "ObservabilityAction", "SendEvent", "name", "properties", "href", "window", "location", "loadDuration", "performance", "timing", "loadEventEnd", "loadEventStart", "cleanup", "setupTelemetryListeners", "Promise", "all", "setIdentityTags", "services", "startRuntimeMetrics", "startNetworkMetrics", "startSpacesMetrics", "halo", "identity", "get", "subscription", "subscribe", "unsubscribe", "contributes", "Observability", "close"]
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport {\n Capabilities,\n contributes,\n createIntent,\n LayoutAction,\n SettingsAction,\n type PluginsContext,\n} from '@dxos/app-framework';\nimport { setupTelemetryListeners, type Observability } from '@dxos/observability';\n\nimport { ClientCapability, ObservabilityCapabilities } from './capabilities';\nimport { OBSERVABILITY_PLUGIN } from '../meta';\nimport { ObservabilityAction } from '../types';\n\ntype ClientReadyOptions = {\n context: PluginsContext;\n namespace: string;\n observability: Observability;\n};\n\nexport default async ({ context, namespace, observability }: ClientReadyOptions) => {\n const manager = context.requestCapability(Capabilities.PluginManager);\n const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);\n const state = context.requestCapability(ObservabilityCapabilities.State);\n const client = context.requestCapability(ClientCapability);\n\n const sendPrivacyNotice = async () => {\n const environment = client?.config?.values.runtime?.app?.env?.DX_ENVIRONMENT;\n const notify =\n environment && environment !== 'ci' && !environment.endsWith('.local') && !environment.endsWith('.lan');\n if (!state.notified && notify) {\n await dispatch(\n createIntent(LayoutAction.AddToast, {\n part: 'toast',\n subject: {\n id: `${OBSERVABILITY_PLUGIN}/notice`,\n title: ['observability toast label', { ns: OBSERVABILITY_PLUGIN }],\n description: ['observability toast description', { ns: OBSERVABILITY_PLUGIN }],\n duration: Infinity,\n icon: 'ph--info--regular',\n actionLabel: ['observability toast action label', { ns: OBSERVABILITY_PLUGIN }],\n actionAlt: ['observability toast action alt', { ns: OBSERVABILITY_PLUGIN }],\n closeLabel: ['observability toast close label', { ns: OBSERVABILITY_PLUGIN }],\n onAction: () => dispatch(createIntent(SettingsAction.Open, { plugin: OBSERVABILITY_PLUGIN })),\n },\n }),\n );\n\n state.notified = true;\n }\n };\n\n // Ensure errors are tagged with enabled plugins to help with reproductions.\n manager.enabled.map((plugin) => observability?.setTag(`pluginEnabled-${plugin}`, 'true', 'errors'));\n\n await dispatch(\n createIntent(ObservabilityAction.SendEvent, {\n name: 'page.load',\n properties: {\n // TODO(wittjosiah): These apis are deprecated. Is there a better way to find this information?\n loadDuration: window.performance.timing.loadEventEnd - window.performance.timing.loadEventStart,\n },\n }),\n );\n\n // Start client observability (i.e. not running as shared worker)\n // TODO(nf): how to prevent multiple instances for single shared worker?\n const cleanup = setupTelemetryListeners(namespace, client, observability);\n\n await Promise.all([\n observability.setIdentityTags(client.services.services),\n observability.startRuntimeMetrics(client),\n observability.startNetworkMetrics(client.services.services),\n observability.startSpacesMetrics(client, namespace),\n ]);\n\n if (client.halo.identity.get()) {\n await sendPrivacyNotice();\n } else {\n const subscription = client.halo.identity.subscribe(async (identity) => {\n if (identity && observability) {\n await sendPrivacyNotice();\n await observability.setIdentityTags(client.services.services);\n subscription.unsubscribe();\n }\n });\n }\n\n return contributes(ObservabilityCapabilities.Observability, observability, async () => {\n cleanup();\n await observability.close();\n });\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;AAIA,SACEA,cACAC,aACAC,cACAC,cACAC,sBAEK;AACP,SAASC,+BAAmD;AAY5D,IAAA,uBAAe,OAAO,EAAEC,SAASC,WAAWC,cAAa,MAAsB;AAC7E,QAAMC,UAAUH,QAAQI,kBAAkBC,aAAaC,aAAa;AACpE,QAAM,EAAEC,iBAAiBC,SAAQ,IAAKR,QAAQI,kBAAkBC,aAAaI,gBAAgB;AAC7F,QAAMC,QAAQV,QAAQI,kBAAkBO,0BAA0BC,KAAK;AACvE,QAAMC,SAASb,QAAQI,kBAAkBU,gBAAAA;AAEzC,QAAMC,oBAAoB,YAAA;AACxB,UAAMC,cAAcH,QAAQI,QAAQC,OAAOC,SAASC,KAAKC,KAAKC;AAC9D,UAAMC,SACJP,eAAeA,gBAAgB,QAAQ,CAACA,YAAYQ,SAAS,QAAA,KAAa,CAACR,YAAYQ,SAAS,MAAA;AAClG,QAAI,CAACd,MAAMe,YAAYF,QAAQ;AAC7B,YAAMf,SACJkB,aAAaC,aAAaC,UAAU;QAClCC,MAAM;QACNC,SAAS;UACPC,IAAI,GAAGC,oBAAAA;UACPC,OAAO;YAAC;YAA6B;cAAEC,IAAIF;YAAqB;;UAChEG,aAAa;YAAC;YAAmC;cAAED,IAAIF;YAAqB;;UAC5EI,UAAUC;UACVC,MAAM;UACNC,aAAa;YAAC;YAAoC;cAAEL,IAAIF;YAAqB;;UAC7EQ,WAAW;YAAC;YAAkC;cAAEN,IAAIF;YAAqB;;UACzES,YAAY;YAAC;YAAmC;cAAEP,IAAIF;YAAqB;;UAC3EU,UAAU,MAAMlC,SAASkB,aAAaiB,eAAeC,MAAM;YAAEC,QAAQb;UAAqB,CAAA,CAAA;QAC5F;MACF,CAAA,CAAA;AAGFtB,YAAMe,WAAW;IACnB;EACF;AAGAtB,UAAQ2C,QAAQC,IAAI,CAACF,WAAW3C,eAAe8C,OAAO,iBAAiBH,MAAAA,IAAU,QAAQ,QAAA,CAAA;AAEzF,QAAMrC,SACJkB,aAAauB,oBAAoBC,WAAW;IAC1CC,MAAM;IACNC,YAAY;;MAEVC,cAAcC,OAAOC,YAAYC,OAAOC,eAAeH,OAAOC,YAAYC,OAAOE;IACnF;EACF,CAAA,CAAA;AAKF,QAAMC,UAAUC,wBAAwB3D,WAAWY,QAAQX,aAAAA;AAE3D,QAAM2D,QAAQC,IAAI;IAChB5D,cAAc6D,gBAAgBlD,OAAOmD,SAASA,QAAQ;IACtD9D,cAAc+D,oBAAoBpD,MAAAA;IAClCX,cAAcgE,oBAAoBrD,OAAOmD,SAASA,QAAQ;IAC1D9D,cAAciE,mBAAmBtD,QAAQZ,SAAAA;GAC1C;AAED,MAAIY,OAAOuD,KAAKC,SAASC,IAAG,GAAI;AAC9B,UAAMvD,kBAAAA;EACR,OAAO;AACL,UAAMwD,eAAe1D,OAAOuD,KAAKC,SAASG,UAAU,OAAOH,aAAAA;AACzD,UAAIA,YAAYnE,eAAe;AAC7B,cAAMa,kBAAAA;AACN,cAAMb,cAAc6D,gBAAgBlD,OAAOmD,SAASA,QAAQ;AAC5DO,qBAAaE,YAAW;MAC1B;IACF,CAAA;EACF;AAEA,SAAOC,YAAY/D,0BAA0BgE,eAAezE,eAAe,YAAA;AACzEyD,YAAAA;AACA,UAAMzD,cAAc0E,MAAK;EAC3B,CAAA;AACF;",
6
+ "names": ["Capabilities", "contributes", "createIntent", "LayoutAction", "SettingsAction", "setupTelemetryListeners", "context", "namespace", "observability", "manager", "requestCapability", "Capabilities", "PluginManager", "dispatchPromise", "dispatch", "IntentDispatcher", "state", "ObservabilityCapabilities", "State", "client", "ClientCapability", "sendPrivacyNotice", "environment", "config", "values", "runtime", "app", "env", "DX_ENVIRONMENT", "notify", "endsWith", "notified", "createIntent", "LayoutAction", "AddToast", "part", "subject", "id", "OBSERVABILITY_PLUGIN", "title", "ns", "description", "duration", "Infinity", "icon", "actionLabel", "actionAlt", "closeLabel", "onAction", "SettingsAction", "Open", "plugin", "enabled", "map", "setTag", "ObservabilityAction", "SendEvent", "name", "properties", "loadDuration", "window", "performance", "timing", "loadEventEnd", "loadEventStart", "cleanup", "setupTelemetryListeners", "Promise", "all", "setIdentityTags", "services", "startRuntimeMetrics", "startNetworkMetrics", "startSpacesMetrics", "halo", "identity", "get", "subscription", "subscribe", "unsubscribe", "contributes", "Observability", "close"]
7
7
  }
@@ -1,18 +1,26 @@
1
+ import {
2
+ FeedbackForm,
3
+ HelpContainer,
4
+ ObservabilitySettings,
5
+ ObservabilitySettingsSchema
6
+ } from "./chunk-6Q6ZJ3N4.mjs";
7
+ import "./chunk-RI4RE346.mjs";
1
8
  import {
2
9
  ObservabilityCapabilities
3
- } from "./chunk-WEVYEGVJ.mjs";
10
+ } from "./chunk-ECWB7E2O.mjs";
4
11
  import {
5
12
  OBSERVABILITY_PLUGIN,
6
13
  meta
7
- } from "./chunk-BMBRX6IW.mjs";
14
+ } from "./chunk-RKH5BBR4.mjs";
8
15
 
9
16
  // packages/plugins/plugin-observability/src/capabilities/index.ts
10
17
  import { lazy } from "@dxos/app-framework";
11
- var ClientReady = lazy(() => import("./client-ready-4TJY6553.mjs"));
12
- var IntentResolver = lazy(() => import("./intents-resolver-YFYWVSTV.mjs"));
13
- var ReactSurface = lazy(() => import("./react-surface-3X7G3DKS.mjs"));
14
- var ObservabilitySettings = lazy(() => import("./settings-SYYERK6Q.mjs"));
15
- var ObservabilityState = lazy(() => import("./state-LG42JNIS.mjs"));
18
+ var AppGraphBuilder = lazy(() => import("./app-graph-builder-OCAR3KUZ.mjs"));
19
+ var ClientReady = lazy(() => import("./client-ready-LRY24QM5.mjs"));
20
+ var IntentResolver = lazy(() => import("./intent-resolver-ZKNJCLDV.mjs"));
21
+ var ReactSurface = lazy(() => import("./react-surface-S36FDV7I.mjs"));
22
+ var ObservabilitySettings2 = lazy(() => import("./settings-JFZJTDH7.mjs"));
23
+ var ObservabilityState = lazy(() => import("./state-GHBXMIQI.mjs"));
16
24
 
17
25
  // packages/plugins/plugin-observability/src/events.ts
18
26
  import { defineEvent, Events } from "@dxos/app-framework";
@@ -38,7 +46,11 @@ var translations_default = [
38
46
  "observability toast close label": "Okay",
39
47
  "observability enabled label": "Enable telemetry",
40
48
  // TODO: Add link about telemetry privacy. Make it clearer that user data is not collected.
41
- "observability description": "When enabled, basic usage data will used to improve the product. This may include performance metrics, error logs, and usage data. No personally identifiable information, other than your public key, is included with this data and no private data ever leaves your devices."
49
+ "observability description": "When enabled, basic usage data will used to improve the product. This may include performance metrics, error logs, and usage data. No personally identifiable information, other than your public key, is included with this data and no private data ever leaves your devices.",
50
+ "help label": "Feedback & Support",
51
+ "feedback text area label": "Feedback",
52
+ "feedback text area placeholder": "Please describe your issue or suggestion.",
53
+ "send feedback label": "Send Feedback"
42
54
  }
43
55
  }
44
56
  }
@@ -54,7 +66,7 @@ var ObservabilityPlugin = (options) => definePlugin(meta, [
54
66
  defineModule({
55
67
  id: `${meta.id}/module/settings`,
56
68
  activatesOn: Events2.SetupSettings,
57
- activate: ObservabilitySettings
69
+ activate: ObservabilitySettings2
58
70
  }),
59
71
  defineModule({
60
72
  id: `${meta.id}/module/state`,
@@ -84,6 +96,11 @@ var ObservabilityPlugin = (options) => definePlugin(meta, [
84
96
  activatesOn: Events2.SetupReactSurface,
85
97
  activate: ReactSurface
86
98
  }),
99
+ defineModule({
100
+ id: `${meta.id}/module/app-graph-builder`,
101
+ activatesOn: Events2.SetupAppGraph,
102
+ activate: AppGraphBuilder
103
+ }),
87
104
  defineModule({
88
105
  id: `${meta.id}/module/client-ready`,
89
106
  activatesOn: allOf(Events2.DispatcherReady, ObservabilityEvents.StateReady, ClientReadyEvent),
@@ -98,10 +115,14 @@ var ObservabilityPlugin = (options) => definePlugin(meta, [
98
115
  })
99
116
  ]);
100
117
  export {
118
+ FeedbackForm,
119
+ HelpContainer,
101
120
  OBSERVABILITY_PLUGIN,
102
121
  ObservabilityCapabilities,
103
122
  ObservabilityEvents,
104
123
  ObservabilityPlugin,
124
+ ObservabilitySettings,
125
+ ObservabilitySettingsSchema,
105
126
  meta
106
127
  };
107
128
  //# sourceMappingURL=index.mjs.map