@dxos/plugin-observability 0.8.2-main.f11618f → 0.8.2-staging.42af850

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 (110) hide show
  1. package/dist/lib/browser/app-graph-builder-3ROXVPV2.mjs +43 -0
  2. package/dist/lib/browser/app-graph-builder-3ROXVPV2.mjs.map +7 -0
  3. package/dist/lib/browser/chunk-A7FGEPI3.mjs +175 -0
  4. package/dist/lib/{node-esm/chunk-Z22V3GLC.mjs.map → browser/chunk-A7FGEPI3.mjs.map} +3 -3
  5. package/dist/lib/browser/{chunk-ECWB7E2O.mjs → chunk-BJ2ZWVOH.mjs} +4 -4
  6. package/dist/lib/{node-esm/chunk-U3JYGK3O.mjs.map → browser/chunk-BJ2ZWVOH.mjs.map} +1 -1
  7. package/dist/lib/browser/chunk-P7VVCZOC.mjs +179 -0
  8. package/dist/lib/browser/chunk-P7VVCZOC.mjs.map +7 -0
  9. package/dist/lib/browser/{client-ready-LRY24QM5.mjs → client-ready-LP3YSSAH.mjs} +7 -7
  10. package/dist/lib/browser/client-ready-LP3YSSAH.mjs.map +7 -0
  11. package/dist/lib/browser/index.mjs +10 -10
  12. package/dist/lib/browser/index.mjs.map +1 -1
  13. package/dist/lib/browser/{intent-resolver-ZKNJCLDV.mjs → intent-resolver-JESDDMKB.mjs} +8 -8
  14. package/dist/lib/browser/intent-resolver-JESDDMKB.mjs.map +7 -0
  15. package/dist/lib/browser/meta.json +1 -1
  16. package/dist/lib/browser/{react-surface-QMP4YECT.mjs → react-surface-6RWNGDFA.mjs} +3 -3
  17. package/dist/lib/browser/{settings-V5C5V5EJ.mjs → settings-5UNGZSKH.mjs} +3 -3
  18. package/dist/lib/browser/{state-GHBXMIQI.mjs → state-LG4FXJD2.mjs} +2 -2
  19. package/dist/lib/browser/types.mjs +1 -1
  20. package/dist/lib/node/{app-graph-builder-JPUTX4LQ.cjs → app-graph-builder-EXZP366Q.cjs} +28 -25
  21. package/dist/lib/node/app-graph-builder-EXZP366Q.cjs.map +7 -0
  22. package/dist/lib/node/chunk-6UA74KDI.cjs +200 -0
  23. package/dist/lib/node/chunk-6UA74KDI.cjs.map +7 -0
  24. package/dist/lib/node/{chunk-WJQ2MG7S.cjs → chunk-HAIMXBCH.cjs} +5 -5
  25. package/dist/lib/node/{chunk-WJQ2MG7S.cjs.map → chunk-HAIMXBCH.cjs.map} +1 -1
  26. package/dist/lib/node/chunk-UMH4JAVS.cjs +199 -0
  27. package/dist/lib/node/chunk-UMH4JAVS.cjs.map +7 -0
  28. package/dist/lib/node/{client-ready-KHGLQOQZ.cjs → client-ready-CTPKWHMP.cjs} +12 -12
  29. package/dist/lib/node/client-ready-CTPKWHMP.cjs.map +7 -0
  30. package/dist/lib/node/index.cjs +16 -16
  31. package/dist/lib/node/index.cjs.map +1 -1
  32. package/dist/lib/node/{intent-resolver-5SANBSGX.cjs → intent-resolver-7G4GEUOA.cjs} +15 -15
  33. package/dist/lib/node/intent-resolver-7G4GEUOA.cjs.map +7 -0
  34. package/dist/lib/node/meta.json +1 -1
  35. package/dist/lib/node/{react-surface-O6M5TFVP.cjs → react-surface-VZQ7EWYP.cjs} +8 -8
  36. package/dist/lib/node/{settings-CWIX7OVJ.cjs → settings-PMUXB3WF.cjs} +7 -7
  37. package/dist/lib/node/{state-5GZLUTX7.cjs → state-NXRP3P5D.cjs} +6 -6
  38. package/dist/lib/node/types.cjs +3 -3
  39. package/dist/lib/node/types.cjs.map +1 -1
  40. package/dist/lib/node-esm/app-graph-builder-T7J46NSQ.mjs +44 -0
  41. package/dist/lib/node-esm/app-graph-builder-T7J46NSQ.mjs.map +7 -0
  42. package/dist/lib/node-esm/chunk-OWGL3ALC.mjs +176 -0
  43. package/dist/lib/{browser/chunk-DWLES54T.mjs.map → node-esm/chunk-OWGL3ALC.mjs.map} +3 -3
  44. package/dist/lib/node-esm/chunk-S2MXYKCI.mjs +180 -0
  45. package/dist/lib/node-esm/chunk-S2MXYKCI.mjs.map +7 -0
  46. package/dist/lib/node-esm/{chunk-U3JYGK3O.mjs → chunk-X2U2ZHWX.mjs} +4 -4
  47. package/dist/lib/{browser/chunk-ECWB7E2O.mjs.map → node-esm/chunk-X2U2ZHWX.mjs.map} +1 -1
  48. package/dist/lib/node-esm/{client-ready-4BUMAISA.mjs → client-ready-FS62YRSD.mjs} +7 -7
  49. package/dist/lib/node-esm/client-ready-FS62YRSD.mjs.map +7 -0
  50. package/dist/lib/node-esm/index.mjs +10 -10
  51. package/dist/lib/node-esm/index.mjs.map +1 -1
  52. package/dist/lib/node-esm/{intent-resolver-5EFEXLWX.mjs → intent-resolver-MREOBMHB.mjs} +8 -8
  53. package/dist/lib/node-esm/intent-resolver-MREOBMHB.mjs.map +7 -0
  54. package/dist/lib/node-esm/meta.json +1 -1
  55. package/dist/lib/node-esm/{react-surface-JP4SJGWP.mjs → react-surface-ZHMNRVFJ.mjs} +3 -3
  56. package/dist/lib/node-esm/{settings-ZOKCFJET.mjs → settings-YF4AO2PI.mjs} +3 -3
  57. package/dist/lib/node-esm/{state-R2UVEG7B.mjs → state-IZNXQ5RA.mjs} +2 -2
  58. package/dist/lib/node-esm/types.mjs +1 -1
  59. package/dist/types/src/ObservabilityPlugin.d.ts.map +1 -1
  60. package/dist/types/src/capabilities/app-graph-builder.d.ts +2 -179
  61. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  62. package/dist/types/src/capabilities/client-ready.d.ts +2 -2
  63. package/dist/types/src/capabilities/client-ready.d.ts.map +1 -1
  64. package/dist/types/src/capabilities/index.d.ts +3 -179
  65. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  66. package/dist/types/src/capabilities/intent-resolver.d.ts +2 -2
  67. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  68. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  69. package/dist/types/src/components/FeedbackForm.d.ts.map +1 -1
  70. package/dist/types/src/components/ObservabilitySettings.d.ts +4 -4
  71. package/dist/types/src/components/ObservabilitySettings.d.ts.map +1 -1
  72. package/dist/types/src/types.d.ts +258 -145
  73. package/dist/types/src/types.d.ts.map +1 -1
  74. package/dist/types/tsconfig.tsbuildinfo +1 -1
  75. package/package.json +31 -24
  76. package/src/capabilities/app-graph-builder.ts +29 -17
  77. package/src/capabilities/client-ready.ts +6 -6
  78. package/src/capabilities/intent-resolver.ts +7 -7
  79. package/src/components/ObservabilitySettings.tsx +5 -5
  80. package/src/types.ts +128 -126
  81. package/dist/lib/browser/app-graph-builder-OCAR3KUZ.mjs +0 -40
  82. package/dist/lib/browser/app-graph-builder-OCAR3KUZ.mjs.map +0 -7
  83. package/dist/lib/browser/chunk-DWLES54T.mjs +0 -152
  84. package/dist/lib/browser/chunk-RI4RE346.mjs +0 -178
  85. package/dist/lib/browser/chunk-RI4RE346.mjs.map +0 -7
  86. package/dist/lib/browser/client-ready-LRY24QM5.mjs.map +0 -7
  87. package/dist/lib/browser/intent-resolver-ZKNJCLDV.mjs.map +0 -7
  88. package/dist/lib/node/app-graph-builder-JPUTX4LQ.cjs.map +0 -7
  89. package/dist/lib/node/chunk-HF4SL56O.cjs +0 -177
  90. package/dist/lib/node/chunk-HF4SL56O.cjs.map +0 -7
  91. package/dist/lib/node/chunk-V4ZLLL5M.cjs +0 -198
  92. package/dist/lib/node/chunk-V4ZLLL5M.cjs.map +0 -7
  93. package/dist/lib/node/client-ready-KHGLQOQZ.cjs.map +0 -7
  94. package/dist/lib/node/intent-resolver-5SANBSGX.cjs.map +0 -7
  95. package/dist/lib/node-esm/app-graph-builder-RKURIIFT.mjs +0 -41
  96. package/dist/lib/node-esm/app-graph-builder-RKURIIFT.mjs.map +0 -7
  97. package/dist/lib/node-esm/chunk-M3MGU3DN.mjs +0 -179
  98. package/dist/lib/node-esm/chunk-M3MGU3DN.mjs.map +0 -7
  99. package/dist/lib/node-esm/chunk-Z22V3GLC.mjs +0 -153
  100. package/dist/lib/node-esm/client-ready-4BUMAISA.mjs.map +0 -7
  101. package/dist/lib/node-esm/intent-resolver-5EFEXLWX.mjs.map +0 -7
  102. /package/dist/lib/browser/{react-surface-QMP4YECT.mjs.map → react-surface-6RWNGDFA.mjs.map} +0 -0
  103. /package/dist/lib/browser/{settings-V5C5V5EJ.mjs.map → settings-5UNGZSKH.mjs.map} +0 -0
  104. /package/dist/lib/browser/{state-GHBXMIQI.mjs.map → state-LG4FXJD2.mjs.map} +0 -0
  105. /package/dist/lib/node/{react-surface-O6M5TFVP.cjs.map → react-surface-VZQ7EWYP.cjs.map} +0 -0
  106. /package/dist/lib/node/{settings-CWIX7OVJ.cjs.map → settings-PMUXB3WF.cjs.map} +0 -0
  107. /package/dist/lib/node/{state-5GZLUTX7.cjs.map → state-NXRP3P5D.cjs.map} +0 -0
  108. /package/dist/lib/node-esm/{react-surface-JP4SJGWP.mjs.map → react-surface-ZHMNRVFJ.mjs.map} +0 -0
  109. /package/dist/lib/node-esm/{settings-ZOKCFJET.mjs.map → settings-YF4AO2PI.mjs.map} +0 -0
  110. /package/dist/lib/node-esm/{state-R2UVEG7B.mjs.map → state-IZNXQ5RA.mjs.map} +0 -0
@@ -0,0 +1,43 @@
1
+ import {
2
+ OBSERVABILITY_PLUGIN
3
+ } from "./chunk-RKH5BBR4.mjs";
4
+
5
+ // packages/plugins/plugin-observability/src/capabilities/app-graph-builder.ts
6
+ import { Rx } from "@effect-rx/rx-react";
7
+ import { Option, pipe } from "effect";
8
+ import { Capabilities, contributes } from "@dxos/app-framework";
9
+ import { createExtension, ROOT_ID } from "@dxos/plugin-graph";
10
+ var ATTENDABLE_PATH_SEPARATOR = "~";
11
+ var DECK_COMPANION_TYPE = "dxos.org/plugin/deck/deck-companion";
12
+ var app_graph_builder_default = (context) => contributes(Capabilities.AppGraphBuilder, [
13
+ createExtension({
14
+ id: `${OBSERVABILITY_PLUGIN}/help`,
15
+ connector: (node) => Rx.make((get) => pipe(get(node), Option.flatMap((node2) => node2.id === ROOT_ID ? Option.some(node2) : Option.none()), Option.map((node2) => {
16
+ return [
17
+ {
18
+ id: [
19
+ node2.id,
20
+ "help"
21
+ ].join(ATTENDABLE_PATH_SEPARATOR),
22
+ type: DECK_COMPANION_TYPE,
23
+ data: null,
24
+ properties: {
25
+ label: [
26
+ "help label",
27
+ {
28
+ ns: OBSERVABILITY_PLUGIN
29
+ }
30
+ ],
31
+ icon: "ph--question--regular",
32
+ disposition: "hidden",
33
+ position: "hoist"
34
+ }
35
+ }
36
+ ];
37
+ }), Option.getOrElse(() => [])))
38
+ })
39
+ ]);
40
+ export {
41
+ app_graph_builder_default as default
42
+ };
43
+ //# sourceMappingURL=app-graph-builder-3ROXVPV2.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 { Rx } from '@effect-rx/rx-react';\nimport { Option, pipe } from 'effect';\n\nimport { Capabilities, contributes, type PluginContext } from '@dxos/app-framework';\nimport { createExtension, ROOT_ID } 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: PluginContext) =>\n contributes(Capabilities.AppGraphBuilder, [\n createExtension({\n id: `${OBSERVABILITY_PLUGIN}/help`,\n connector: (node) =>\n Rx.make((get) =>\n pipe(\n get(node),\n Option.flatMap((node) => (node.id === ROOT_ID ? Option.some(node) : Option.none())),\n Option.map((node) => {\n return [\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 Option.getOrElse(() => []),\n ),\n ),\n }),\n ]);\n"],
5
+ "mappings": ";;;;;AAIA,SAASA,UAAU;AACnB,SAASC,QAAQC,YAAY;AAE7B,SAASC,cAAcC,mBAAuC;AAC9D,SAASC,iBAAiBC,eAAe;AAKzC,IAAMC,4BAA4B;AAClC,IAAMC,sBAAsB;AAE5B,IAAA,4BAAe,CAACC,YACdC,YAAYC,aAAaC,iBAAiB;EACxCC,gBAAgB;IACdC,IAAI,GAAGC,oBAAAA;IACPC,WAAW,CAACC,SACVC,GAAGC,KAAK,CAACC,QACPC,KACED,IAAIH,IAAAA,GACJK,OAAOC,QAAQ,CAACN,UAAUA,MAAKH,OAAOU,UAAUF,OAAOG,KAAKR,KAAAA,IAAQK,OAAOI,KAAI,CAAA,GAC/EJ,OAAOK,IAAI,CAACV,UAAAA;AACV,aAAO;QACL;UACEH,IAAI;YAACG,MAAKH;YAAI;YAAQc,KAAKrB,yBAAAA;UAC3BsB,MAAMrB;UACNsB,MAAM;UACNC,YAAY;YACVC,OAAO;cAAC;cAAc;gBAAEC,IAAIlB;cAAqB;;YACjDmB,MAAM;YACNC,aAAa;YACbC,UAAU;UACZ;QACF;;IAEJ,CAAA,GACAd,OAAOe,UAAU,MAAM,CAAA,CAAE,CAAA,CAAA;EAGjC,CAAA;CACD;",
6
+ "names": ["Rx", "Option", "pipe", "Capabilities", "contributes", "createExtension", "ROOT_ID", "ATTENDABLE_PATH_SEPARATOR", "DECK_COMPANION_TYPE", "context", "contributes", "Capabilities", "AppGraphBuilder", "createExtension", "id", "OBSERVABILITY_PLUGIN", "connector", "node", "Rx", "make", "get", "pipe", "Option", "flatMap", "ROOT_ID", "some", "none", "map", "join", "type", "data", "properties", "label", "ns", "icon", "disposition", "position", "getOrElse"]
7
+ }
@@ -0,0 +1,175 @@
1
+ import {
2
+ ObservabilityAction,
3
+ UserFeedback
4
+ } from "./chunk-P7VVCZOC.mjs";
5
+ import {
6
+ OBSERVABILITY_PLUGIN
7
+ } from "./chunk-RKH5BBR4.mjs";
8
+
9
+ // packages/plugins/plugin-observability/src/components/FeedbackForm.tsx
10
+ import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
11
+ import React, { useCallback, useRef, useState } from "react";
12
+ import { getSnapshot } from "@dxos/echo-schema";
13
+ import { IconButton, Input, useTranslation } from "@dxos/react-ui";
14
+ import { FormProvider, useFormContext, useInputProps } from "@dxos/react-ui-form";
15
+ var defaultValues = {
16
+ message: ""
17
+ };
18
+ var FormContent = () => {
19
+ var _effect = _useSignals();
20
+ try {
21
+ const { t } = useTranslation(OBSERVABILITY_PLUGIN);
22
+ const { handleSave, canSave } = useFormContext();
23
+ const messageProps = useInputProps([
24
+ "message"
25
+ ]);
26
+ return /* @__PURE__ */ React.createElement("div", {
27
+ role: "form",
28
+ className: "p-3 flex flex-col gap-2"
29
+ }, /* @__PURE__ */ React.createElement("div", {
30
+ role: "none",
31
+ className: "space-b-1"
32
+ }, /* @__PURE__ */ React.createElement(Input.Root, {
33
+ validationValence: messageProps.getStatus().status
34
+ }, /* @__PURE__ */ React.createElement(Input.Label, null, t("feedback text area label")), /* @__PURE__ */ React.createElement(Input.TextArea, {
35
+ classNames: "text-sm",
36
+ rows: 5,
37
+ cols: 30,
38
+ placeholder: t("feedback text area placeholder"),
39
+ value: messageProps.getValue() ?? "",
40
+ onChange: (e) => messageProps.onValueChange("string", e.target.value),
41
+ // TODO(wittjosiah): This aggressively shows validation errors.
42
+ onBlur: messageProps.onBlur
43
+ }), /* @__PURE__ */ React.createElement(Input.DescriptionAndValidation, null, /* @__PURE__ */ React.createElement(Input.Validation, null, messageProps.getStatus().error)))), /* @__PURE__ */ React.createElement("div", {
44
+ role: "none",
45
+ className: "space-b-2"
46
+ }, /* @__PURE__ */ React.createElement(IconButton, {
47
+ icon: "ph--paper-plane-tilt--regular",
48
+ label: t("send feedback label"),
49
+ variant: "primary",
50
+ type: "submit",
51
+ classNames: "is-full",
52
+ disabled: !canSave,
53
+ onClick: handleSave
54
+ })));
55
+ } finally {
56
+ _effect.f();
57
+ }
58
+ };
59
+ var FeedbackForm = ({ onSave }) => {
60
+ var _effect = _useSignals();
61
+ try {
62
+ const formRef = useRef(null);
63
+ const [_, update] = useState({});
64
+ const forceRender = useCallback(() => update({}), [
65
+ update
66
+ ]);
67
+ const handleSave = useCallback((values) => {
68
+ onSave(values);
69
+ forceRender();
70
+ }, [
71
+ forceRender,
72
+ onSave
73
+ ]);
74
+ const initialValues = getSnapshot(defaultValues);
75
+ return /* @__PURE__ */ React.createElement(FormProvider, {
76
+ formRef,
77
+ schema: UserFeedback,
78
+ initialValues,
79
+ onSave: handleSave
80
+ }, /* @__PURE__ */ React.createElement("div", {
81
+ ref: formRef
82
+ }, /* @__PURE__ */ React.createElement(FormContent, null)));
83
+ } finally {
84
+ _effect.f();
85
+ }
86
+ };
87
+
88
+ // packages/plugins/plugin-observability/src/components/HelpContainer.tsx
89
+ import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
90
+ import { pipe } from "effect";
91
+ import React2, { useCallback as useCallback2 } from "react";
92
+ import { chain, createIntent, LayoutAction, useIntentDispatcher } from "@dxos/app-framework";
93
+ var HelpContainer = () => {
94
+ var _effect = _useSignals2();
95
+ try {
96
+ const { dispatchPromise: dispatch } = useIntentDispatcher();
97
+ const handleSave = useCallback2((values) => dispatch(pipe(createIntent(ObservabilityAction.CaptureUserFeedback, values), chain(LayoutAction.UpdateComplementary, {
98
+ part: "complementary",
99
+ options: {
100
+ state: "collapsed"
101
+ }
102
+ }), chain(LayoutAction.AddToast, {
103
+ part: "toast",
104
+ subject: {
105
+ id: `${OBSERVABILITY_PLUGIN}/feedback-success`,
106
+ icon: "ph--paper-plane-tilt--regular",
107
+ duration: 3e3,
108
+ title: [
109
+ "feedback toast label",
110
+ {
111
+ ns: OBSERVABILITY_PLUGIN
112
+ }
113
+ ],
114
+ description: [
115
+ "feedback toast description",
116
+ {
117
+ ns: OBSERVABILITY_PLUGIN
118
+ }
119
+ ],
120
+ closeLabel: [
121
+ "close label",
122
+ {
123
+ ns: "os"
124
+ }
125
+ ]
126
+ }
127
+ }))), [
128
+ dispatch
129
+ ]);
130
+ return /* @__PURE__ */ React2.createElement(FeedbackForm, {
131
+ onSave: handleSave
132
+ });
133
+ } finally {
134
+ _effect.f();
135
+ }
136
+ };
137
+
138
+ // packages/plugins/plugin-observability/src/components/ObservabilitySettings.tsx
139
+ import { useSignals as _useSignals3 } from "@preact-signals/safe-react/tracking";
140
+ import { Schema } from "effect";
141
+ import React3 from "react";
142
+ import { createIntent as createIntent2, useIntentDispatcher as useIntentDispatcher2 } from "@dxos/app-framework";
143
+ import { Input as Input2, Message, useTranslation as useTranslation2 } from "@dxos/react-ui";
144
+ import { DeprecatedFormContainer, DeprecatedFormInput } from "@dxos/react-ui-form";
145
+ var ObservabilitySettingsSchema = Schema.mutable(Schema.Struct({
146
+ enabled: Schema.Boolean
147
+ }));
148
+ var ObservabilitySettings = ({ settings }) => {
149
+ var _effect = _useSignals3();
150
+ try {
151
+ const { t } = useTranslation2(OBSERVABILITY_PLUGIN);
152
+ const { dispatchPromise: dispatch } = useIntentDispatcher2();
153
+ return /* @__PURE__ */ React3.createElement(DeprecatedFormContainer, null, /* @__PURE__ */ React3.createElement(DeprecatedFormInput, {
154
+ label: t("observability enabled label"),
155
+ secondary: /* @__PURE__ */ React3.createElement(Message.Root, {
156
+ valence: "info"
157
+ }, /* @__PURE__ */ React3.createElement(Message.Body, null, t("observability description")))
158
+ }, /* @__PURE__ */ React3.createElement(Input2.Switch, {
159
+ checked: settings.enabled,
160
+ onCheckedChange: (checked) => dispatch(createIntent2(ObservabilityAction.Toggle, {
161
+ state: !!checked
162
+ }))
163
+ })));
164
+ } finally {
165
+ _effect.f();
166
+ }
167
+ };
168
+
169
+ export {
170
+ FeedbackForm,
171
+ HelpContainer,
172
+ ObservabilitySettingsSchema,
173
+ ObservabilitySettings
174
+ };
175
+ //# sourceMappingURL=chunk-A7FGEPI3.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
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 { pipe } from 'effect';\nimport React, { useCallback } from 'react';\n\nimport { chain, createIntent, LayoutAction, useIntentDispatcher } from '@dxos/app-framework';\n\nimport { FeedbackForm } from './FeedbackForm';\nimport { OBSERVABILITY_PLUGIN } from '../meta';\nimport { ObservabilityAction, type UserFeedback } from '../types';\n\nexport const HelpContainer = () => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n\n const handleSave = useCallback(\n (values: UserFeedback) =>\n dispatch(\n pipe(\n createIntent(ObservabilityAction.CaptureUserFeedback, values),\n chain(LayoutAction.UpdateComplementary, { part: 'complementary', options: { state: 'collapsed' } }),\n chain(LayoutAction.AddToast, {\n part: 'toast',\n subject: {\n id: `${OBSERVABILITY_PLUGIN}/feedback-success`,\n icon: 'ph--paper-plane-tilt--regular',\n duration: 3000,\n title: ['feedback toast label', { ns: OBSERVABILITY_PLUGIN }],\n description: ['feedback toast description', { ns: OBSERVABILITY_PLUGIN }],\n closeLabel: ['close label', { ns: 'os' }],\n },\n }),\n ),\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", "pipe", "React", "useCallback", "chain", "createIntent", "LayoutAction", "useIntentDispatcher", "HelpContainer", "dispatchPromise", "dispatch", "useIntentDispatcher", "handleSave", "useCallback", "values", "pipe", "createIntent", "ObservabilityAction", "CaptureUserFeedback", "chain", "LayoutAction", "UpdateComplementary", "part", "options", "state", "AddToast", "subject", "id", "OBSERVABILITY_PLUGIN", "icon", "duration", "title", "ns", "description", "closeLabel", "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"]
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 { pipe } from 'effect';\nimport React, { useCallback } from 'react';\n\nimport { chain, createIntent, LayoutAction, useIntentDispatcher } from '@dxos/app-framework';\n\nimport { FeedbackForm } from './FeedbackForm';\nimport { OBSERVABILITY_PLUGIN } from '../meta';\nimport { ObservabilityAction, type UserFeedback } from '../types';\n\nexport const HelpContainer = () => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n\n const handleSave = useCallback(\n (values: UserFeedback) =>\n dispatch(\n pipe(\n createIntent(ObservabilityAction.CaptureUserFeedback, values),\n chain(LayoutAction.UpdateComplementary, { part: 'complementary', options: { state: 'collapsed' } }),\n chain(LayoutAction.AddToast, {\n part: 'toast',\n subject: {\n id: `${OBSERVABILITY_PLUGIN}/feedback-success`,\n icon: 'ph--paper-plane-tilt--regular',\n duration: 3000,\n title: ['feedback toast label', { ns: OBSERVABILITY_PLUGIN }],\n description: ['feedback toast description', { ns: OBSERVABILITY_PLUGIN }],\n closeLabel: ['close label', { ns: 'os' }],\n },\n }),\n ),\n ),\n [dispatch],\n );\n\n return <FeedbackForm onSave={handleSave} />;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Schema } from 'effect';\nimport React from 'react';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\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 = Schema.mutable(\n Schema.Struct({\n enabled: Schema.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 = Schema.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": ";;;;;;;;;;AAIA,OAAOA,SAASC,aAAaC,QAAQC,gBAAgB;AAErD,SAASC,mBAAmB;AAC5B,SAASC,YAAYC,OAAOC,sBAAsB;AAClD,SAASC,cAAcC,gBAAgBC,qBAAqB;AAK5D,IAAMC,gBAA8B;EAAEC,SAAS;AAAG;AAElD,IAAMC,cAAc,MAAA;;;AAClB,UAAM,EAAEC,EAAC,IAAKC,eAAeC,oBAAAA;AAC7B,UAAM,EAAEC,YAAYC,QAAO,IAAKC,eAAAA;AAEhC,UAAMC,eAAeC,cAAc;MAAC;KAAU;AAE9C,WACE,sBAAA,cAACC,OAAAA;MAAIC,MAAK;MAAOC,WAAU;OACzB,sBAAA,cAACF,OAAAA;MAAIC,MAAK;MAAOC,WAAU;OACzB,sBAAA,cAACC,MAAMC,MAAI;MAACC,mBAAmBP,aAAaQ,UAAS,EAAGC;OACtD,sBAAA,cAACJ,MAAMK,OAAK,MAAEhB,EAAE,0BAAA,CAAA,GAChB,sBAAA,cAACW,MAAMM,UAAQ;MACbC,YAAY;MACZC,MAAM;MACNC,MAAM;MACNC,aAAarB,EAAE,gCAAA;MACfsB,OAAOhB,aAAaiB,SAAQ,KAAM;MAClCC,UAAU,CAACC,MAAMnB,aAAaoB,cAAc,UAAUD,EAAEE,OAAOL,KAAK;;MAEpEM,QAAQtB,aAAasB;QAEvB,sBAAA,cAACjB,MAAMkB,0BAAwB,MAC7B,sBAAA,cAAClB,MAAMmB,YAAU,MAAExB,aAAaQ,UAAS,EAAGiB,KAAK,CAAA,CAAA,CAAA,GAKvD,sBAAA,cAACvB,OAAAA;MAAIC,MAAK;MAAOC,WAAU;OACzB,sBAAA,cAACsB,YAAAA;MACCC,MAAK;MACLC,OAAOlC,EAAE,qBAAA;MACTmC,SAAQ;MACRC,MAAK;MACLlB,YAAW;MACXmB,UAAU,CAACjC;MACXkC,SAASnC;;;;;AAKnB;AAGO,IAAMoC,eAAe,CAAC,EAAEC,OAAM,MAA8C;;;AACjF,UAAMC,UAAUC,OAAuB,IAAA;AACvC,UAAM,CAACC,GAAGC,MAAAA,IAAUC,SAAS,CAAC,CAAA;AAC9B,UAAMC,cAAcC,YAAY,MAAMH,OAAO,CAAC,CAAA,GAAI;MAACA;KAAO;AAE1D,UAAMzC,aAAa4C,YACjB,CAACC,WAAAA;AACCR,aAAOQ,MAAAA;AAEPF,kBAAAA;IACF,GACA;MAACA;MAAaN;KAAO;AAGvB,UAAMS,gBAAgBC,YAAYrD,aAAAA;AAElC,WACE,sBAAA,cAACsD,cAAAA;MAAaV;MAAkBW,QAAQC;MAAcJ;MAA8BT,QAAQrC;OAC1F,sBAAA,cAACK,OAAAA;MAAI8C,KAAKb;OACR,sBAAA,cAAC1C,aAAAA,IAAAA,CAAAA,CAAAA;;;;AAIT;;;;AC7EA,SAASwD,YAAY;AACrB,OAAOC,UAASC,eAAAA,oBAAmB;AAEnC,SAASC,OAAOC,cAAcC,cAAcC,2BAA2B;AAMhE,IAAMC,gBAAgB,MAAA;;;AAC3B,UAAM,EAAEC,iBAAiBC,SAAQ,IAAKC,oBAAAA;AAEtC,UAAMC,aAAaC,aACjB,CAACC,WACCJ,SACEK,KACEC,aAAaC,oBAAoBC,qBAAqBJ,MAAAA,GACtDK,MAAMC,aAAaC,qBAAqB;MAAEC,MAAM;MAAiBC,SAAS;QAAEC,OAAO;MAAY;IAAE,CAAA,GACjGL,MAAMC,aAAaK,UAAU;MAC3BH,MAAM;MACNI,SAAS;QACPC,IAAI,GAAGC,oBAAAA;QACPC,MAAM;QACNC,UAAU;QACVC,OAAO;UAAC;UAAwB;YAAEC,IAAIJ;UAAqB;;QAC3DK,aAAa;UAAC;UAA8B;YAAED,IAAIJ;UAAqB;;QACvEM,YAAY;UAAC;UAAe;YAAEF,IAAI;UAAK;;MACzC;IACF,CAAA,CAAA,CAAA,GAGN;MAACtB;KAAS;AAGZ,WAAO,gBAAAyB,OAAA,cAACC,cAAAA;MAAaC,QAAQzB;;;;;AAC/B;;;;ACnCA,SAAS0B,cAAc;AACvB,OAAOC,YAAW;AAElB,SAASC,gBAAAA,eAAcC,uBAAAA,4BAA2B;AAClD,SAASC,SAAAA,QAAOC,SAASC,kBAAAA,uBAAsB;AAC/C,SAASC,yBAAyBC,2BAA2B;AAKtD,IAAMC,8BAA8BC,OAAOC,QAChDD,OAAOE,OAAO;EACZC,SAASH,OAAOI;AAKlB,CAAA,CAAA;AAKK,IAAMC,wBAAwB,CAAC,EAAEC,SAAQ,MAA4C;;;AAC1F,UAAM,EAAEC,EAAC,IAAKC,gBAAeC,oBAAAA;AAC7B,UAAM,EAAEC,iBAAiBC,SAAQ,IAAKC,qBAAAA;AAEtC,WACE,gBAAAC,OAAA,cAACC,yBAAAA,MACC,gBAAAD,OAAA,cAACE,qBAAAA;MACCC,OAAOT,EAAE,6BAAA;MACTU,WACE,gBAAAJ,OAAA,cAACK,QAAQC,MAAI;QAACC,SAAQ;SACpB,gBAAAP,OAAA,cAACK,QAAQG,MAAI,MAAEd,EAAE,2BAAA,CAAA,CAAA;OAIrB,gBAAAM,OAAA,cAACS,OAAMC,QAAM;MACXC,SAASlB,SAASH;MAClBsB,iBAAiB,CAACD,YAAYb,SAASe,cAAaC,oBAAoBC,QAAQ;QAAEC,OAAO,CAAC,CAACL;MAAQ,CAAA,CAAA;;;;;AAK7G;",
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", "pipe", "React", "useCallback", "chain", "createIntent", "LayoutAction", "useIntentDispatcher", "HelpContainer", "dispatchPromise", "dispatch", "useIntentDispatcher", "handleSave", "useCallback", "values", "pipe", "createIntent", "ObservabilityAction", "CaptureUserFeedback", "chain", "LayoutAction", "UpdateComplementary", "part", "options", "state", "AddToast", "subject", "id", "OBSERVABILITY_PLUGIN", "icon", "duration", "title", "ns", "description", "closeLabel", "React", "FeedbackForm", "onSave", "Schema", "React", "createIntent", "useIntentDispatcher", "Input", "Message", "useTranslation", "DeprecatedFormContainer", "DeprecatedFormInput", "ObservabilitySettingsSchema", "Schema", "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
7
  }
@@ -4,15 +4,15 @@ import {
4
4
 
5
5
  // packages/plugins/plugin-observability/src/capabilities/capabilities.ts
6
6
  import { defineCapability } from "@dxos/app-framework";
7
- var ObservabilityCapabilities;
8
7
  (function(ObservabilityCapabilities2) {
9
8
  ObservabilityCapabilities2.State = defineCapability(`${OBSERVABILITY_PLUGIN}/capability/state`);
10
9
  ObservabilityCapabilities2.Observability = defineCapability(`${OBSERVABILITY_PLUGIN}/capability/observability`);
11
10
  })(ObservabilityCapabilities || (ObservabilityCapabilities = {}));
12
11
  var ClientCapability = defineCapability("dxos.org/plugin/client/capability/client");
12
+ var ObservabilityCapabilities;
13
13
 
14
14
  export {
15
- ObservabilityCapabilities,
16
- ClientCapability
15
+ ClientCapability,
16
+ ObservabilityCapabilities
17
17
  };
18
- //# sourceMappingURL=chunk-ECWB7E2O.mjs.map
18
+ //# sourceMappingURL=chunk-BJ2ZWVOH.mjs.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/capabilities/capabilities.ts"],
4
4
  "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { defineCapability } from '@dxos/app-framework';\nimport { type Client } from '@dxos/client';\nimport { type Observability } from '@dxos/observability';\n\nimport { OBSERVABILITY_PLUGIN } from '../meta';\n\nexport namespace ObservabilityCapabilities {\n export type State = {\n group?: string;\n notified?: boolean;\n };\n export const State = defineCapability<State>(`${OBSERVABILITY_PLUGIN}/capability/state`);\n\n export const Observability = defineCapability<Observability>(`${OBSERVABILITY_PLUGIN}/capability/observability`);\n}\n\n// NOTE: This is cloned from the client plugin to avoid circular dependencies.\nexport const ClientCapability = defineCapability<Client>('dxos.org/plugin/client/capability/client');\n"],
5
- "mappings": ";;;;;;AAIA,SAASA,wBAAwB;;UAMhBC,4BAAAA;6BAKFC,QAAQC,iBAAwB,GAAGC,oBAAAA,mBAAuC;6BAE1EC,gBAAgBF,iBAAgC,GAAGC,oBAAAA,2BAA+C;AACjH,GARiBH,8BAAAA,4BAAAA,CAAAA,EAAAA;AAWV,IAAMK,mBAAmBH,iBAAyB,0CAAA;",
5
+ "mappings": ";;;;;AAIA,SAASA,wBAAwB;UAMhBC,4BAAAA;6BAKFC,QAAQC,iBAAwB,GAAGC,oBAAAA,mBAAuC;6BAE1EC,gBAAgBF,iBAAgC,GAAGC,oBAAAA,2BAA+C;AACjH,GARiBH,8BAAAA,4BAAAA,CAAAA,EAAAA;AAWV,IAAMK,mBAAmBH,iBAAyB,0CAAA;;",
6
6
  "names": ["defineCapability", "ObservabilityCapabilities", "State", "defineCapability", "OBSERVABILITY_PLUGIN", "Observability", "ClientCapability"]
7
7
  }
@@ -0,0 +1,179 @@
1
+ import {
2
+ OBSERVABILITY_PLUGIN
3
+ } from "./chunk-RKH5BBR4.mjs";
4
+
5
+ // packages/plugins/plugin-observability/src/types.ts
6
+ import { Schema } from "effect";
7
+ import { Type } from "@dxos/echo";
8
+ var nonEmpty = (field) => Schema.nonEmptyString({
9
+ message: () => `Missing field: ${field}`
10
+ });
11
+ var maxLength = (field, length) => Schema.maxLength(length, {
12
+ message: () => `Exceeds max length (${length}): ${field}`
13
+ });
14
+ var UserFeedback = Schema.Struct({
15
+ message: Schema.String.pipe(nonEmpty("Feedback"), maxLength("Feedback", 32768))
16
+ });
17
+ var OBSERVABILITY_ACTION = `${OBSERVABILITY_PLUGIN}/action`;
18
+ (function(ObservabilityAction2) {
19
+ class Toggle extends Schema.TaggedClass()(`${OBSERVABILITY_ACTION}/toggle`, {
20
+ input: Schema.Struct({
21
+ state: Schema.optional(Schema.Boolean)
22
+ }),
23
+ output: Schema.Boolean
24
+ }) {
25
+ }
26
+ ObservabilityAction2.Toggle = Toggle;
27
+ class CaptureUserFeedback extends Schema.TaggedClass()(`${OBSERVABILITY_ACTION}/capture-feedback`, {
28
+ input: UserFeedback,
29
+ output: Schema.Void
30
+ }) {
31
+ }
32
+ ObservabilityAction2.CaptureUserFeedback = CaptureUserFeedback;
33
+ class BaseSendEvent extends Schema.TaggedClass()(`${OBSERVABILITY_ACTION}/send-event`, {
34
+ input: Schema.Struct({
35
+ name: Schema.String,
36
+ properties: Schema.optional(Schema.Object)
37
+ }),
38
+ output: Schema.Void
39
+ }) {
40
+ }
41
+ ObservabilityAction2.BaseSendEvent = BaseSendEvent;
42
+ class SendEvent extends Schema.TaggedClass()(`${OBSERVABILITY_ACTION}/send-event`, {
43
+ // NOTE: Sort alphabetically by name.
44
+ input: Schema.Union(Schema.Struct({
45
+ name: Schema.Literal("identity.create")
46
+ }), Schema.Struct({
47
+ name: Schema.Literal("identity.join")
48
+ }), Schema.Struct({
49
+ name: Schema.Literal("identity.recover")
50
+ }), Schema.Struct({
51
+ name: Schema.Literal("identity.share")
52
+ }), Schema.Struct({
53
+ name: Schema.Literal("navigation.activate"),
54
+ properties: Schema.Struct({
55
+ subjectId: Schema.String,
56
+ typename: Schema.optional(Schema.String)
57
+ })
58
+ }), Schema.Struct({
59
+ name: Schema.Literal("page.load"),
60
+ properties: Schema.Struct({
61
+ loadDuration: Schema.Number
62
+ })
63
+ }), Schema.Struct({
64
+ name: Schema.Literal("plugins.toggle"),
65
+ properties: Schema.Struct({
66
+ plugin: Schema.String,
67
+ enabled: Schema.Boolean
68
+ })
69
+ }), Schema.Struct({
70
+ name: Schema.Literal("space.create"),
71
+ properties: Schema.Struct({
72
+ spaceId: Type.SpaceId
73
+ })
74
+ }), Schema.Struct({
75
+ name: Schema.Literal("space.join"),
76
+ properties: Schema.Struct({
77
+ spaceId: Type.SpaceId
78
+ })
79
+ }), Schema.Struct({
80
+ name: Schema.Literal("space.limit"),
81
+ properties: Schema.Struct({
82
+ spaceId: Type.SpaceId
83
+ })
84
+ }), Schema.Struct({
85
+ name: Schema.Literal("space.lock"),
86
+ properties: Schema.Struct({
87
+ spaceId: Type.SpaceId
88
+ })
89
+ }), Schema.Struct({
90
+ name: Schema.Literal("space.migrate"),
91
+ properties: Schema.Struct({
92
+ spaceId: Type.SpaceId,
93
+ targetVersion: Schema.optional(Schema.String),
94
+ version: Schema.optional(Schema.String)
95
+ })
96
+ }), Schema.Struct({
97
+ name: Schema.Literal("space.object.add"),
98
+ properties: Schema.Struct({
99
+ spaceId: Type.SpaceId,
100
+ objectId: Schema.String,
101
+ typename: Schema.optional(Schema.String)
102
+ })
103
+ }), Schema.Struct({
104
+ name: Schema.Literal("space.share"),
105
+ properties: Schema.Struct({
106
+ spaceId: Type.SpaceId
107
+ })
108
+ }), Schema.Struct({
109
+ name: Schema.Literal("space.unlock"),
110
+ properties: Schema.Struct({
111
+ spaceId: Type.SpaceId
112
+ })
113
+ }), Schema.Struct({
114
+ name: Schema.Literal("threads.create"),
115
+ properties: Schema.Struct({
116
+ spaceId: Type.SpaceId,
117
+ threadId: Schema.String
118
+ })
119
+ }), Schema.Struct({
120
+ name: Schema.Literal("threads.delete"),
121
+ properties: Schema.Struct({
122
+ spaceId: Type.SpaceId,
123
+ threadId: Schema.String
124
+ })
125
+ }), Schema.Struct({
126
+ name: Schema.Literal("threads.message.add"),
127
+ properties: Schema.Struct({
128
+ spaceId: Type.SpaceId,
129
+ threadId: Schema.String,
130
+ threadLength: Schema.Number,
131
+ messageId: Schema.String,
132
+ messageLength: Schema.Number
133
+ })
134
+ }), Schema.Struct({
135
+ name: Schema.Literal("threads.message.delete"),
136
+ properties: Schema.Struct({
137
+ spaceId: Type.SpaceId,
138
+ threadId: Schema.String,
139
+ messageId: Schema.String
140
+ })
141
+ }), Schema.Struct({
142
+ name: Schema.Literal("threads.message.undo-delete"),
143
+ properties: Schema.Struct({
144
+ spaceId: Type.SpaceId,
145
+ threadId: Schema.String,
146
+ messageId: Schema.String
147
+ })
148
+ }), Schema.Struct({
149
+ name: Schema.Literal("threads.message.update"),
150
+ properties: Schema.Struct({
151
+ spaceId: Type.SpaceId,
152
+ messageId: Schema.String,
153
+ messageLength: Schema.Number
154
+ })
155
+ }), Schema.Struct({
156
+ name: Schema.Literal("threads.toggle-resolved"),
157
+ properties: Schema.Struct({
158
+ spaceId: Type.SpaceId,
159
+ threadId: Schema.String
160
+ })
161
+ }), Schema.Struct({
162
+ name: Schema.Literal("threads.undo-delete"),
163
+ properties: Schema.Struct({
164
+ spaceId: Type.SpaceId,
165
+ threadId: Schema.String
166
+ })
167
+ })),
168
+ output: Schema.Void
169
+ }) {
170
+ }
171
+ ObservabilityAction2.SendEvent = SendEvent;
172
+ })(ObservabilityAction || (ObservabilityAction = {}));
173
+ var ObservabilityAction;
174
+
175
+ export {
176
+ UserFeedback,
177
+ ObservabilityAction
178
+ };
179
+ //# sourceMappingURL=chunk-P7VVCZOC.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 { Schema } from 'effect';\n\nimport { Type } from '@dxos/echo';\n\nimport { OBSERVABILITY_PLUGIN } from './meta';\n\nconst nonEmpty = <S extends Schema.Schema.Any>(field: string) =>\n Schema.nonEmptyString<S>({ message: () => `Missing field: ${field}` });\n\nconst maxLength = <S extends Schema.Schema.Any>(field: string, length: number) =>\n Schema.maxLength<S>(length, { message: () => `Exceeds max length (${length}): ${field}` });\n\nexport const UserFeedback = Schema.Struct({\n message: Schema.String.pipe(nonEmpty('Feedback'), maxLength('Feedback', 32_768)),\n});\n\nexport type UserFeedback = Schema.Schema.Type<typeof UserFeedback>;\n\nconst OBSERVABILITY_ACTION = `${OBSERVABILITY_PLUGIN}/action`;\n\nexport namespace ObservabilityAction {\n export class Toggle extends Schema.TaggedClass<Toggle>()(`${OBSERVABILITY_ACTION}/toggle`, {\n input: Schema.Struct({\n state: Schema.optional(Schema.Boolean),\n }),\n output: Schema.Boolean,\n }) {}\n\n export class CaptureUserFeedback extends Schema.TaggedClass<CaptureUserFeedback>()(\n `${OBSERVABILITY_ACTION}/capture-feedback`,\n {\n input: UserFeedback,\n output: Schema.Void,\n },\n ) {}\n\n /** Base intent for sending events. */\n export class BaseSendEvent extends Schema.TaggedClass<BaseSendEvent>()(`${OBSERVABILITY_ACTION}/send-event`, {\n input: Schema.Struct({\n name: Schema.String,\n properties: Schema.optional(Schema.Object),\n }),\n output: Schema.Void,\n }) {}\n\n /** Intent with strict types for first-party events. */\n export class SendEvent extends Schema.TaggedClass<SendEvent>()(`${OBSERVABILITY_ACTION}/send-event`, {\n // NOTE: Sort alphabetically by name.\n input: Schema.Union(\n Schema.Struct({\n name: Schema.Literal('identity.create'),\n }),\n Schema.Struct({\n name: Schema.Literal('identity.join'),\n }),\n Schema.Struct({\n name: Schema.Literal('identity.recover'),\n }),\n Schema.Struct({\n name: Schema.Literal('identity.share'),\n }),\n Schema.Struct({\n name: Schema.Literal('navigation.activate'),\n properties: Schema.Struct({\n subjectId: Schema.String,\n typename: Schema.optional(Schema.String),\n }),\n }),\n Schema.Struct({\n name: Schema.Literal('page.load'),\n properties: Schema.Struct({\n loadDuration: Schema.Number,\n }),\n }),\n Schema.Struct({\n name: Schema.Literal('plugins.toggle'),\n properties: Schema.Struct({\n plugin: Schema.String,\n enabled: Schema.Boolean,\n }),\n }),\n Schema.Struct({\n name: Schema.Literal('space.create'),\n properties: Schema.Struct({\n spaceId: Type.SpaceId,\n }),\n }),\n Schema.Struct({\n name: Schema.Literal('space.join'),\n properties: Schema.Struct({\n spaceId: Type.SpaceId,\n }),\n }),\n Schema.Struct({\n name: Schema.Literal('space.limit'),\n properties: Schema.Struct({\n spaceId: Type.SpaceId,\n }),\n }),\n Schema.Struct({\n name: Schema.Literal('space.lock'),\n properties: Schema.Struct({\n spaceId: Type.SpaceId,\n }),\n }),\n Schema.Struct({\n name: Schema.Literal('space.migrate'),\n properties: Schema.Struct({\n spaceId: Type.SpaceId,\n targetVersion: Schema.optional(Schema.String),\n version: Schema.optional(Schema.String),\n }),\n }),\n Schema.Struct({\n name: Schema.Literal('space.object.add'),\n properties: Schema.Struct({\n spaceId: Type.SpaceId,\n objectId: Schema.String,\n typename: Schema.optional(Schema.String),\n }),\n }),\n Schema.Struct({\n name: Schema.Literal('space.share'),\n properties: Schema.Struct({\n spaceId: Type.SpaceId,\n }),\n }),\n Schema.Struct({\n name: Schema.Literal('space.unlock'),\n properties: Schema.Struct({\n spaceId: Type.SpaceId,\n }),\n }),\n Schema.Struct({\n name: Schema.Literal('threads.create'),\n properties: Schema.Struct({\n spaceId: Type.SpaceId,\n threadId: Schema.String,\n }),\n }),\n Schema.Struct({\n name: Schema.Literal('threads.delete'),\n properties: Schema.Struct({\n spaceId: Type.SpaceId,\n threadId: Schema.String,\n }),\n }),\n Schema.Struct({\n name: Schema.Literal('threads.message.add'),\n properties: Schema.Struct({\n spaceId: Type.SpaceId,\n threadId: Schema.String,\n threadLength: Schema.Number,\n messageId: Schema.String,\n messageLength: Schema.Number,\n }),\n }),\n Schema.Struct({\n name: Schema.Literal('threads.message.delete'),\n properties: Schema.Struct({\n spaceId: Type.SpaceId,\n threadId: Schema.String,\n messageId: Schema.String,\n }),\n }),\n Schema.Struct({\n name: Schema.Literal('threads.message.undo-delete'),\n properties: Schema.Struct({\n spaceId: Type.SpaceId,\n threadId: Schema.String,\n messageId: Schema.String,\n }),\n }),\n Schema.Struct({\n name: Schema.Literal('threads.message.update'),\n properties: Schema.Struct({\n spaceId: Type.SpaceId,\n messageId: Schema.String,\n messageLength: Schema.Number,\n }),\n }),\n Schema.Struct({\n name: Schema.Literal('threads.toggle-resolved'),\n properties: Schema.Struct({\n spaceId: Type.SpaceId,\n threadId: Schema.String,\n }),\n }),\n Schema.Struct({\n name: Schema.Literal('threads.undo-delete'),\n properties: Schema.Struct({\n spaceId: Type.SpaceId,\n threadId: Schema.String,\n }),\n }),\n ),\n output: Schema.Void,\n }) {}\n}\n"],
5
+ "mappings": ";;;;;AAIA,SAASA,cAAc;AAEvB,SAASC,YAAY;AAIrB,IAAMC,WAAW,CAA8BC,UAC7CC,OAAOC,eAAkB;EAAEC,SAAS,MAAM,kBAAkBH,KAAAA;AAAQ,CAAA;AAEtE,IAAMI,YAAY,CAA8BJ,OAAeK,WAC7DJ,OAAOG,UAAaC,QAAQ;EAAEF,SAAS,MAAM,uBAAuBE,MAAAA,MAAYL,KAAAA;AAAQ,CAAA;AAEnF,IAAMM,eAAeL,OAAOM,OAAO;EACxCJ,SAASF,OAAOO,OAAOC,KAAKV,SAAS,UAAA,GAAaK,UAAU,YAAY,KAAA,CAAA;AAC1E,CAAA;AAIA,IAAMM,uBAAuB,GAAGC,oBAAAA;UAEfC,sBAAAA;EACR,MAAMC,eAAeZ,OAAOa,YAAW,EAAW,GAAGJ,oBAAAA,WAA+B;IACzFK,OAAOd,OAAOM,OAAO;MACnBS,OAAOf,OAAOgB,SAAShB,OAAOiB,OAAO;IACvC,CAAA;IACAC,QAAQlB,OAAOiB;EACjB,CAAA,EAAA;EAAI;uBALSL,SAAAA;EAON,MAAMO,4BAA4BnB,OAAOa,YAAW,EACzD,GAAGJ,oBAAAA,qBACH;IACEK,OAAOT;IACPa,QAAQlB,OAAOoB;EACjB,CAAA,EAAA;EACC;uBANUD,sBAAAA;EASN,MAAME,sBAAsBrB,OAAOa,YAAW,EAAkB,GAAGJ,oBAAAA,eAAmC;IAC3GK,OAAOd,OAAOM,OAAO;MACnBgB,MAAMtB,OAAOO;MACbgB,YAAYvB,OAAOgB,SAAShB,OAAOwB,MAAM;IAC3C,CAAA;IACAN,QAAQlB,OAAOoB;EACjB,CAAA,EAAA;EAAI;AAPgC,EAAAT,qBACvBU,gBAAAA;EASN,MAAMI,kBAAkBzB,OAAOa,YAAW,EAAc,GAAGJ,oBAAAA,eAAmC;;IAEnGK,OAAOd,OAAO0B,MACZ1B,OAAOM,OAAO;MACZgB,MAAMtB,OAAO2B,QAAQ,iBAAA;IACvB,CAAA,GACA3B,OAAOM,OAAO;MACZgB,MAAMtB,OAAO2B,QAAQ,eAAA;IACvB,CAAA,GACA3B,OAAOM,OAAO;MACZgB,MAAMtB,OAAO2B,QAAQ,kBAAA;IACvB,CAAA,GACA3B,OAAOM,OAAO;MACZgB,MAAMtB,OAAO2B,QAAQ,gBAAA;IACvB,CAAA,GACA3B,OAAOM,OAAO;MACZgB,MAAMtB,OAAO2B,QAAQ,qBAAA;MACrBJ,YAAYvB,OAAOM,OAAO;QACxBsB,WAAW5B,OAAOO;QAClBsB,UAAU7B,OAAOgB,SAAShB,OAAOO,MAAM;MACzC,CAAA;IACF,CAAA,GACAP,OAAOM,OAAO;MACZgB,MAAMtB,OAAO2B,QAAQ,WAAA;MACrBJ,YAAYvB,OAAOM,OAAO;QACxBwB,cAAc9B,OAAO+B;MACvB,CAAA;IACF,CAAA,GACA/B,OAAOM,OAAO;MACZgB,MAAMtB,OAAO2B,QAAQ,gBAAA;MACrBJ,YAAYvB,OAAOM,OAAO;QACxB0B,QAAQhC,OAAOO;QACf0B,SAASjC,OAAOiB;MAClB,CAAA;IACF,CAAA,GACAjB,OAAOM,OAAO;MACZgB,MAAMtB,OAAO2B,QAAQ,cAAA;MACrBJ,YAAYvB,OAAOM,OAAO;QACxB4B,SAASC,KAAKC;MAChB,CAAA;IACF,CAAA,GACApC,OAAOM,OAAO;MACZgB,MAAMtB,OAAO2B,QAAQ,YAAA;MACrBJ,YAAYvB,OAAOM,OAAO;QACxB4B,SAASC,KAAKC;MAChB,CAAA;IACF,CAAA,GACApC,OAAOM,OAAO;MACZgB,MAAMtB,OAAO2B,QAAQ,aAAA;MACrBJ,YAAYvB,OAAOM,OAAO;QACxB4B,SAASC,KAAKC;MAChB,CAAA;IACF,CAAA,GACApC,OAAOM,OAAO;MACZgB,MAAMtB,OAAO2B,QAAQ,YAAA;MACrBJ,YAAYvB,OAAOM,OAAO;QACxB4B,SAASC,KAAKC;MAChB,CAAA;IACF,CAAA,GACApC,OAAOM,OAAO;MACZgB,MAAMtB,OAAO2B,QAAQ,eAAA;MACrBJ,YAAYvB,OAAOM,OAAO;QACxB4B,SAASC,KAAKC;QACdC,eAAerC,OAAOgB,SAAShB,OAAOO,MAAM;QAC5C+B,SAAStC,OAAOgB,SAAShB,OAAOO,MAAM;MACxC,CAAA;IACF,CAAA,GACAP,OAAOM,OAAO;MACZgB,MAAMtB,OAAO2B,QAAQ,kBAAA;MACrBJ,YAAYvB,OAAOM,OAAO;QACxB4B,SAASC,KAAKC;QACdG,UAAUvC,OAAOO;QACjBsB,UAAU7B,OAAOgB,SAAShB,OAAOO,MAAM;MACzC,CAAA;IACF,CAAA,GACAP,OAAOM,OAAO;MACZgB,MAAMtB,OAAO2B,QAAQ,aAAA;MACrBJ,YAAYvB,OAAOM,OAAO;QACxB4B,SAASC,KAAKC;MAChB,CAAA;IACF,CAAA,GACApC,OAAOM,OAAO;MACZgB,MAAMtB,OAAO2B,QAAQ,cAAA;MACrBJ,YAAYvB,OAAOM,OAAO;QACxB4B,SAASC,KAAKC;MAChB,CAAA;IACF,CAAA,GACApC,OAAOM,OAAO;MACZgB,MAAMtB,OAAO2B,QAAQ,gBAAA;MACrBJ,YAAYvB,OAAOM,OAAO;QACxB4B,SAASC,KAAKC;QACdI,UAAUxC,OAAOO;MACnB,CAAA;IACF,CAAA,GACAP,OAAOM,OAAO;MACZgB,MAAMtB,OAAO2B,QAAQ,gBAAA;MACrBJ,YAAYvB,OAAOM,OAAO;QACxB4B,SAASC,KAAKC;QACdI,UAAUxC,OAAOO;MACnB,CAAA;IACF,CAAA,GACAP,OAAOM,OAAO;MACZgB,MAAMtB,OAAO2B,QAAQ,qBAAA;MACrBJ,YAAYvB,OAAOM,OAAO;QACxB4B,SAASC,KAAKC;QACdI,UAAUxC,OAAOO;QACjBkC,cAAczC,OAAO+B;QACrBW,WAAW1C,OAAOO;QAClBoC,eAAe3C,OAAO+B;MACxB,CAAA;IACF,CAAA,GACA/B,OAAOM,OAAO;MACZgB,MAAMtB,OAAO2B,QAAQ,wBAAA;MACrBJ,YAAYvB,OAAOM,OAAO;QACxB4B,SAASC,KAAKC;QACdI,UAAUxC,OAAOO;QACjBmC,WAAW1C,OAAOO;MACpB,CAAA;IACF,CAAA,GACAP,OAAOM,OAAO;MACZgB,MAAMtB,OAAO2B,QAAQ,6BAAA;MACrBJ,YAAYvB,OAAOM,OAAO;QACxB4B,SAASC,KAAKC;QACdI,UAAUxC,OAAOO;QACjBmC,WAAW1C,OAAOO;MACpB,CAAA;IACF,CAAA,GACAP,OAAOM,OAAO;MACZgB,MAAMtB,OAAO2B,QAAQ,wBAAA;MACrBJ,YAAYvB,OAAOM,OAAO;QACxB4B,SAASC,KAAKC;QACdM,WAAW1C,OAAOO;QAClBoC,eAAe3C,OAAO+B;MACxB,CAAA;IACF,CAAA,GACA/B,OAAOM,OAAO;MACZgB,MAAMtB,OAAO2B,QAAQ,yBAAA;MACrBJ,YAAYvB,OAAOM,OAAO;QACxB4B,SAASC,KAAKC;QACdI,UAAUxC,OAAOO;MACnB,CAAA;IACF,CAAA,GACAP,OAAOM,OAAO;MACZgB,MAAMtB,OAAO2B,QAAQ,qBAAA;MACrBJ,YAAYvB,OAAOM,OAAO;QACxB4B,SAASC,KAAKC;QACdI,UAAUxC,OAAOO;MACnB,CAAA;IACF,CAAA,CAAA;IAEFW,QAAQlB,OAAOoB;EACjB,CAAA,EAAA;EAAI;AAxJiD,EAAAT,qBACxCc,YAAAA;AAwJf,GAlLiBd,wBAAAA,sBAAAA,CAAAA,EAAAA;;",
6
+ "names": ["Schema", "Type", "nonEmpty", "field", "Schema", "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", "Type", "SpaceId", "targetVersion", "version", "objectId", "threadId", "threadLength", "messageId", "messageLength"]
7
+ }
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  ObservabilityAction
3
- } from "./chunk-RI4RE346.mjs";
3
+ } from "./chunk-P7VVCZOC.mjs";
4
4
  import {
5
5
  ClientCapability,
6
6
  ObservabilityCapabilities
7
- } from "./chunk-ECWB7E2O.mjs";
7
+ } from "./chunk-BJ2ZWVOH.mjs";
8
8
  import {
9
9
  OBSERVABILITY_PLUGIN
10
10
  } from "./chunk-RKH5BBR4.mjs";
@@ -13,10 +13,10 @@ import {
13
13
  import { Capabilities, contributes, createIntent, LayoutAction, SettingsAction } from "@dxos/app-framework";
14
14
  import { setupTelemetryListeners } from "@dxos/observability";
15
15
  var client_ready_default = async ({ context, namespace, observability }) => {
16
- const manager = context.requestCapability(Capabilities.PluginManager);
17
- const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);
18
- const state = context.requestCapability(ObservabilityCapabilities.State);
19
- const client = context.requestCapability(ClientCapability);
16
+ const manager = context.getCapability(Capabilities.PluginManager);
17
+ const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);
18
+ const state = context.getCapability(ObservabilityCapabilities.State);
19
+ const client = context.getCapability(ClientCapability);
20
20
  const sendPrivacyNotice = async () => {
21
21
  const environment = client?.config?.values.runtime?.app?.env?.DX_ENVIRONMENT;
22
22
  const notify = environment && environment !== "ci" && !environment.endsWith(".local") && !environment.endsWith(".lan");
@@ -99,4 +99,4 @@ var client_ready_default = async ({ context, namespace, observability }) => {
99
99
  export {
100
100
  client_ready_default as default
101
101
  };
102
- //# sourceMappingURL=client-ready-LRY24QM5.mjs.map
102
+ //# sourceMappingURL=client-ready-LP3YSSAH.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 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 PluginContext,\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: PluginContext;\n namespace: string;\n observability: Observability;\n};\n\nexport default async ({ context, namespace, observability }: ClientReadyOptions) => {\n const manager = context.getCapability(Capabilities.PluginManager);\n const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);\n const state = context.getCapability(ObservabilityCapabilities.State);\n const client = context.getCapability(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,cAAcC,aAAaC,aAAa;AAChE,QAAM,EAAEC,iBAAiBC,SAAQ,IAAKR,QAAQI,cAAcC,aAAaI,gBAAgB;AACzF,QAAMC,QAAQV,QAAQI,cAAcO,0BAA0BC,KAAK;AACnE,QAAMC,SAASb,QAAQI,cAAcU,gBAAAA;AAErC,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", "getCapability", "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
+ }
@@ -3,11 +3,11 @@ import {
3
3
  HelpContainer,
4
4
  ObservabilitySettings,
5
5
  ObservabilitySettingsSchema
6
- } from "./chunk-DWLES54T.mjs";
7
- import "./chunk-RI4RE346.mjs";
6
+ } from "./chunk-A7FGEPI3.mjs";
7
+ import "./chunk-P7VVCZOC.mjs";
8
8
  import {
9
9
  ObservabilityCapabilities
10
- } from "./chunk-ECWB7E2O.mjs";
10
+ } from "./chunk-BJ2ZWVOH.mjs";
11
11
  import {
12
12
  OBSERVABILITY_PLUGIN,
13
13
  meta
@@ -15,20 +15,20 @@ import {
15
15
 
16
16
  // packages/plugins/plugin-observability/src/capabilities/index.ts
17
17
  import { lazy } from "@dxos/app-framework";
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-QMP4YECT.mjs"));
22
- var ObservabilitySettings2 = lazy(() => import("./settings-V5C5V5EJ.mjs"));
23
- var ObservabilityState = lazy(() => import("./state-GHBXMIQI.mjs"));
18
+ var AppGraphBuilder = lazy(() => import("./app-graph-builder-3ROXVPV2.mjs"));
19
+ var ClientReady = lazy(() => import("./client-ready-LP3YSSAH.mjs"));
20
+ var IntentResolver = lazy(() => import("./intent-resolver-JESDDMKB.mjs"));
21
+ var ReactSurface = lazy(() => import("./react-surface-6RWNGDFA.mjs"));
22
+ var ObservabilitySettings2 = lazy(() => import("./settings-5UNGZSKH.mjs"));
23
+ var ObservabilityState = lazy(() => import("./state-LG4FXJD2.mjs"));
24
24
 
25
25
  // packages/plugins/plugin-observability/src/events.ts
26
26
  import { defineEvent, Events } from "@dxos/app-framework";
27
- var ObservabilityEvents;
28
27
  (function(ObservabilityEvents2) {
29
28
  ObservabilityEvents2.StateReady = Events.createStateEvent(OBSERVABILITY_PLUGIN);
30
29
  })(ObservabilityEvents || (ObservabilityEvents = {}));
31
30
  var ClientReadyEvent = defineEvent("dxos.org/plugin/client/event/client-ready");
31
+ var ObservabilityEvents;
32
32
 
33
33
  // packages/plugins/plugin-observability/src/ObservabilityPlugin.ts
34
34
  import { allOf, Capabilities, contributes, defineModule, definePlugin, Events as Events2 } from "@dxos/app-framework";