@dxos/plugin-observability 0.7.5-main.9d26e3a → 0.7.5-main.9d2a38b

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 (113) hide show
  1. package/dist/lib/browser/{chunk-UBDF6N5K.mjs → chunk-BAU7OKYM.mjs} +2 -2
  2. package/dist/lib/browser/{chunk-X6XUBXZQ.mjs → chunk-BWEAT3RG.mjs} +3 -3
  3. package/dist/lib/{node-esm/chunk-7GGPSKXN.mjs.map → browser/chunk-BWEAT3RG.mjs.map} +3 -3
  4. package/dist/lib/browser/chunk-H2SQZM4P.mjs +18 -0
  5. package/dist/lib/browser/chunk-H2SQZM4P.mjs.map +7 -0
  6. package/dist/lib/browser/chunk-K2Y64RO7.mjs +37 -0
  7. package/dist/lib/browser/chunk-K2Y64RO7.mjs.map +7 -0
  8. package/dist/lib/browser/client-ready-3J4QVJE6.mjs +104 -0
  9. package/dist/lib/browser/client-ready-3J4QVJE6.mjs.map +7 -0
  10. package/dist/lib/browser/index.mjs +73 -206
  11. package/dist/lib/browser/index.mjs.map +4 -4
  12. package/dist/lib/browser/intents-resolver-P36HTRAG.mjs +55 -0
  13. package/dist/lib/browser/intents-resolver-P36HTRAG.mjs.map +7 -0
  14. package/dist/lib/browser/meta.json +1 -1
  15. package/dist/lib/browser/react-surface-MPOMS7ZD.mjs +26 -0
  16. package/dist/lib/browser/react-surface-MPOMS7ZD.mjs.map +7 -0
  17. package/dist/lib/browser/settings-T23OKKWF.mjs +25 -0
  18. package/dist/lib/browser/settings-T23OKKWF.mjs.map +7 -0
  19. package/dist/lib/browser/state-FQ6WMLXG.mjs +26 -0
  20. package/dist/lib/browser/state-FQ6WMLXG.mjs.map +7 -0
  21. package/dist/lib/browser/types.mjs +2 -2
  22. package/dist/lib/node/chunk-44EFFE6E.cjs +38 -0
  23. package/dist/lib/node/chunk-44EFFE6E.cjs.map +7 -0
  24. package/dist/lib/node/{chunk-HZSRCP4I.cjs → chunk-GSKCHQV5.cjs} +6 -6
  25. package/dist/lib/node/{chunk-SIUGGDNL.cjs → chunk-HLDDHG6J.cjs} +7 -7
  26. package/dist/lib/node/chunk-HLDDHG6J.cjs.map +7 -0
  27. package/dist/lib/node/chunk-UYLJVCUK.cjs +65 -0
  28. package/dist/lib/node/chunk-UYLJVCUK.cjs.map +7 -0
  29. package/dist/lib/node/client-ready-UQHLLUQI.cjs +115 -0
  30. package/dist/lib/node/client-ready-UQHLLUQI.cjs.map +7 -0
  31. package/dist/lib/node/index.cjs +69 -199
  32. package/dist/lib/node/index.cjs.map +4 -4
  33. package/dist/lib/node/intents-resolver-E7LSFPS6.cjs +66 -0
  34. package/dist/lib/node/intents-resolver-E7LSFPS6.cjs.map +7 -0
  35. package/dist/lib/node/meta.json +1 -1
  36. package/dist/lib/node/react-surface-F77LLZIF.cjs +50 -0
  37. package/dist/lib/node/react-surface-F77LLZIF.cjs.map +7 -0
  38. package/dist/lib/node/settings-BUWSSDPF.cjs +39 -0
  39. package/dist/lib/node/settings-BUWSSDPF.cjs.map +7 -0
  40. package/dist/lib/node/state-NL2ZZN3S.cjs +40 -0
  41. package/dist/lib/node/state-NL2ZZN3S.cjs.map +7 -0
  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/{chunk-52FTHXHB.mjs → chunk-DF2CPSQB.mjs} +2 -2
  45. package/dist/lib/node-esm/chunk-PZRWMBEG.mjs +38 -0
  46. package/dist/lib/node-esm/chunk-PZRWMBEG.mjs.map +7 -0
  47. package/dist/lib/node-esm/chunk-SCQR7W6A.mjs +19 -0
  48. package/dist/lib/node-esm/chunk-SCQR7W6A.mjs.map +7 -0
  49. package/dist/lib/node-esm/{chunk-7GGPSKXN.mjs → chunk-YK5MJX7W.mjs} +3 -3
  50. package/dist/lib/{browser/chunk-X6XUBXZQ.mjs.map → node-esm/chunk-YK5MJX7W.mjs.map} +3 -3
  51. package/dist/lib/node-esm/client-ready-LPGIUDS2.mjs +105 -0
  52. package/dist/lib/node-esm/client-ready-LPGIUDS2.mjs.map +7 -0
  53. package/dist/lib/node-esm/index.mjs +73 -206
  54. package/dist/lib/node-esm/index.mjs.map +4 -4
  55. package/dist/lib/node-esm/intents-resolver-QDAK6TMP.mjs +56 -0
  56. package/dist/lib/node-esm/intents-resolver-QDAK6TMP.mjs.map +7 -0
  57. package/dist/lib/node-esm/meta.json +1 -1
  58. package/dist/lib/node-esm/react-surface-MMGCSPXQ.mjs +27 -0
  59. package/dist/lib/node-esm/react-surface-MMGCSPXQ.mjs.map +7 -0
  60. package/dist/lib/node-esm/settings-WWUULM4T.mjs +26 -0
  61. package/dist/lib/node-esm/settings-WWUULM4T.mjs.map +7 -0
  62. package/dist/lib/node-esm/state-AM2ICAXU.mjs +27 -0
  63. package/dist/lib/node-esm/state-AM2ICAXU.mjs.map +7 -0
  64. package/dist/lib/node-esm/types.mjs +2 -2
  65. package/dist/types/src/ObservabilityPlugin.d.ts +1 -11
  66. package/dist/types/src/ObservabilityPlugin.d.ts.map +1 -1
  67. package/dist/types/src/capabilities/capabilities.d.ts +12 -0
  68. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -0
  69. package/dist/types/src/capabilities/client-ready.d.ts +10 -0
  70. package/dist/types/src/capabilities/client-ready.d.ts.map +1 -0
  71. package/dist/types/src/capabilities/index.d.ts +16 -0
  72. package/dist/types/src/capabilities/index.d.ts.map +1 -0
  73. package/dist/types/src/capabilities/intents-resolver.d.ts +7 -0
  74. package/dist/types/src/capabilities/intents-resolver.d.ts.map +1 -0
  75. package/dist/types/src/capabilities/react-surface.d.ts +4 -0
  76. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -0
  77. package/dist/types/src/capabilities/settings.d.ts +4 -0
  78. package/dist/types/src/capabilities/settings.d.ts.map +1 -0
  79. package/dist/types/src/capabilities/state.d.ts +6 -0
  80. package/dist/types/src/capabilities/state.d.ts.map +1 -0
  81. package/dist/types/src/components/ObservabilitySettings.d.ts +5 -3
  82. package/dist/types/src/components/ObservabilitySettings.d.ts.map +1 -1
  83. package/dist/types/src/events.d.ts +5 -0
  84. package/dist/types/src/events.d.ts.map +1 -0
  85. package/dist/types/src/index.d.ts +3 -2
  86. package/dist/types/src/index.d.ts.map +1 -1
  87. package/dist/types/src/meta.d.ts +1 -2
  88. package/dist/types/src/meta.d.ts.map +1 -1
  89. package/dist/types/tsconfig.tsbuildinfo +1 -1
  90. package/package.json +19 -27
  91. package/src/ObservabilityPlugin.ts +60 -0
  92. package/src/capabilities/capabilities.ts +22 -0
  93. package/src/capabilities/client-ready.ts +99 -0
  94. package/src/capabilities/index.ts +13 -0
  95. package/src/capabilities/intents-resolver.ts +53 -0
  96. package/src/capabilities/react-surface.tsx +26 -0
  97. package/src/capabilities/settings.ts +19 -0
  98. package/src/capabilities/state.ts +21 -0
  99. package/src/components/ObservabilitySettings.tsx +12 -7
  100. package/src/events.ts +14 -0
  101. package/src/index.ts +3 -4
  102. package/src/meta.ts +1 -1
  103. package/dist/lib/browser/meta.mjs +0 -9
  104. package/dist/lib/browser/meta.mjs.map +0 -7
  105. package/dist/lib/node/chunk-SIUGGDNL.cjs.map +0 -7
  106. package/dist/lib/node/meta.cjs +0 -30
  107. package/dist/lib/node/meta.cjs.map +0 -7
  108. package/dist/lib/node-esm/meta.mjs +0 -10
  109. package/dist/lib/node-esm/meta.mjs.map +0 -7
  110. package/src/ObservabilityPlugin.tsx +0 -215
  111. /package/dist/lib/browser/{chunk-UBDF6N5K.mjs.map → chunk-BAU7OKYM.mjs.map} +0 -0
  112. /package/dist/lib/node/{chunk-HZSRCP4I.cjs.map → chunk-GSKCHQV5.cjs.map} +0 -0
  113. /package/dist/lib/node-esm/{chunk-52FTHXHB.mjs.map → chunk-DF2CPSQB.mjs.map} +0 -0
@@ -1,41 +1,30 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
  import {
3
- ObservabilityAction
4
- } from "./chunk-52FTHXHB.mjs";
3
+ ObservabilityCapabilities
4
+ } from "./chunk-SCQR7W6A.mjs";
5
5
  import {
6
6
  OBSERVABILITY_PLUGIN,
7
- meta_default
8
- } from "./chunk-7GGPSKXN.mjs";
7
+ meta
8
+ } from "./chunk-YK5MJX7W.mjs";
9
9
 
10
- // packages/plugins/plugin-observability/src/ObservabilityPlugin.tsx
11
- import React2 from "react";
12
- import { resolvePlugin, parseIntentPlugin, LayoutAction, SettingsAction, createSurface, findPlugin, createIntent as createIntent2, createResolver } from "@dxos/app-framework";
13
- import { EventSubscriptions } from "@dxos/async";
14
- import { invariant } from "@dxos/invariant";
15
- import { create } from "@dxos/live-object";
16
- import { LocalStorageStore } from "@dxos/local-storage";
17
- import { getTelemetryIdentifier, setupTelemetryListeners, isObservabilityDisabled, storeObservabilityDisabled, getObservabilityGroup } from "@dxos/observability";
10
+ // packages/plugins/plugin-observability/src/capabilities/index.ts
11
+ import { lazy } from "@dxos/app-framework";
12
+ var ClientReady = lazy(() => import("./client-ready-LPGIUDS2.mjs"));
13
+ var IntentResolver = lazy(() => import("./intents-resolver-QDAK6TMP.mjs"));
14
+ var ReactSurface = lazy(() => import("./react-surface-MMGCSPXQ.mjs"));
15
+ var ObservabilitySettings = lazy(() => import("./settings-WWUULM4T.mjs"));
16
+ var ObservabilityState = lazy(() => import("./state-AM2ICAXU.mjs"));
18
17
 
19
- // packages/plugins/plugin-observability/src/components/ObservabilitySettings.tsx
20
- import React from "react";
21
- import { createIntent, useIntentDispatcher } from "@dxos/app-framework";
22
- import { Input, Message, useTranslation } from "@dxos/react-ui";
23
- import { DeprecatedFormInput } from "@dxos/react-ui-form";
24
- var ObservabilitySettings = ({ settings }) => {
25
- const { t } = useTranslation(OBSERVABILITY_PLUGIN);
26
- const { dispatchPromise: dispatch } = useIntentDispatcher();
27
- return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(DeprecatedFormInput, {
28
- label: t("observability enabled label"),
29
- secondary: /* @__PURE__ */ React.createElement(Message.Root, {
30
- valence: "info"
31
- }, /* @__PURE__ */ React.createElement(Message.Body, null, t("observability description")))
32
- }, /* @__PURE__ */ React.createElement(Input.Switch, {
33
- checked: settings.enabled,
34
- onCheckedChange: (checked) => dispatch(createIntent(ObservabilityAction.Toggle, {
35
- state: !!checked
36
- }))
37
- })));
38
- };
18
+ // packages/plugins/plugin-observability/src/events.ts
19
+ import { defineEvent, Events } from "@dxos/app-framework";
20
+ var ObservabilityEvents;
21
+ (function(ObservabilityEvents2) {
22
+ ObservabilityEvents2.StateReady = Events.createStateEvent(OBSERVABILITY_PLUGIN);
23
+ })(ObservabilityEvents || (ObservabilityEvents = {}));
24
+ var ClientReadyEvent = defineEvent("dxos.org/plugin/client/event/client-ready");
25
+
26
+ // packages/plugins/plugin-observability/src/ObservabilityPlugin.ts
27
+ import { allOf, Capabilities, contributes, defineModule, definePlugin, Events as Events2 } from "@dxos/app-framework";
39
28
 
40
29
  // packages/plugins/plugin-observability/src/translations.ts
41
30
  var translations_default = [
@@ -56,183 +45,61 @@ var translations_default = [
56
45
  }
57
46
  ];
58
47
 
59
- // packages/plugins/plugin-observability/src/ObservabilityPlugin.tsx
60
- var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-observability/src/ObservabilityPlugin.tsx";
61
- var parseObservabilityPlugin = (plugin) => (plugin?.provides).observability ? plugin : void 0;
62
- var ObservabilityPlugin = (options) => {
63
- const settings = create({});
64
- const state = new LocalStorageStore(OBSERVABILITY_PLUGIN);
65
- const subscriptions = new EventSubscriptions();
66
- let observability;
67
- return {
68
- meta: meta_default,
69
- initialize: async () => {
70
- settings.enabled = !await isObservabilityDisabled(options.namespace);
71
- state.values.group = await getObservabilityGroup(options.namespace);
72
- state.prop({
73
- key: "notified",
74
- type: LocalStorageStore.bool({
75
- allowUndefined: true
76
- })
77
- });
78
- },
79
- ready: async ({ plugins }) => {
80
- const client = findPlugin(plugins, "dxos.org/plugin/client")?.provides.client;
81
- const intentPlugin = resolvePlugin(plugins, parseIntentPlugin);
82
- const dispatch = intentPlugin?.provides?.intent?.dispatchPromise;
83
- if (!dispatch) {
84
- return;
85
- }
86
- const sendPrivacyNotice = async () => {
87
- const environment = client?.config?.values.runtime?.app?.env?.DX_ENVIRONMENT;
88
- const notify = environment && environment !== "ci" && !environment.endsWith(".local") && !environment.endsWith(".lan");
89
- if (!state.values.notified && notify) {
90
- await dispatch(createIntent2(LayoutAction.SetLayout, {
91
- element: "toast",
92
- subject: {
93
- id: `${OBSERVABILITY_PLUGIN}/notice`,
94
- // TODO(wittjosiah): Non-react translation utils.
95
- title: translations_default[0]["en-US"][OBSERVABILITY_PLUGIN]["observability toast label"],
96
- description: translations_default[0]["en-US"][OBSERVABILITY_PLUGIN]["observability toast description"],
97
- duration: Infinity,
98
- icon: "ph--info--regular",
99
- actionLabel: translations_default[0]["en-US"][OBSERVABILITY_PLUGIN]["observability toast action label"],
100
- actionAlt: translations_default[0]["en-US"][OBSERVABILITY_PLUGIN]["observability toast action alt"],
101
- closeLabel: translations_default[0]["en-US"][OBSERVABILITY_PLUGIN]["observability toast close label"],
102
- onAction: () => dispatch(createIntent2(SettingsAction.Open, {
103
- plugin: OBSERVABILITY_PLUGIN
104
- }))
105
- }
106
- }));
107
- state.values.notified = true;
108
- }
109
- };
110
- void options.observability().then(async (obs) => {
111
- observability = obs;
112
- plugins.map((plugin) => observability?.setTag(`pluginEnabled-${plugin.meta.id}`, "true", "errors"));
113
- if (!client) {
114
- return;
115
- }
116
- await dispatch(createIntent2(ObservabilityAction.SendEvent, {
117
- name: "page.load",
118
- properties: {
119
- href: window.location.href,
120
- // TODO(wittjosiah): These apis are deprecated. Is there a better way to find this information?
121
- loadDuration: window.performance.timing.loadEventEnd - window.performance.timing.loadEventStart
122
- }
123
- }));
124
- setupTelemetryListeners(options.namespace, client, observability);
125
- await Promise.all([
126
- observability.setIdentityTags(client.services.services),
127
- observability.startRuntimeMetrics(client),
128
- observability.startNetworkMetrics(client.services.services),
129
- observability.startSpacesMetrics(client, options.namespace)
130
- ]);
131
- if (client.halo.identity.get()) {
132
- await sendPrivacyNotice();
133
- } else {
134
- const subscription = client.halo.identity.subscribe(async (identity) => {
135
- if (identity && observability) {
136
- await sendPrivacyNotice();
137
- await observability.setIdentityTags(client.services.services);
138
- subscription.unsubscribe();
139
- }
140
- });
141
- }
48
+ // packages/plugins/plugin-observability/src/ObservabilityPlugin.ts
49
+ var ObservabilityPlugin = (options) => definePlugin(meta, [
50
+ defineModule({
51
+ id: `${meta.id}/module/observability`,
52
+ activatesOn: Events2.Startup,
53
+ activate: async () => contributes(ObservabilityCapabilities.Observability, await options.observability())
54
+ }),
55
+ defineModule({
56
+ id: `${meta.id}/module/settings`,
57
+ activatesOn: Events2.SetupSettings,
58
+ activate: ObservabilitySettings
59
+ }),
60
+ defineModule({
61
+ id: `${meta.id}/module/state`,
62
+ activatesOn: Events2.Startup,
63
+ activate: () => ObservabilityState({
64
+ namespace: options.namespace
65
+ })
66
+ }),
67
+ defineModule({
68
+ id: `${meta.id}/module/translations`,
69
+ activatesOn: Events2.SetupTranslations,
70
+ activate: () => contributes(Capabilities.Translations, translations_default)
71
+ }),
72
+ defineModule({
73
+ id: `${meta.id}/module/intent-resolver`,
74
+ activatesOn: Events2.SetupIntents,
75
+ activate: (context) => IntentResolver({
76
+ context,
77
+ namespace: options.namespace
78
+ })
79
+ }),
80
+ defineModule({
81
+ id: `${meta.id}/module/react-surface`,
82
+ activatesOn: Events2.Startup,
83
+ activate: ReactSurface
84
+ }),
85
+ defineModule({
86
+ id: `${meta.id}/module/client-ready`,
87
+ activatesOn: allOf(Events2.DispatcherReady, ObservabilityEvents.StateReady, ClientReadyEvent),
88
+ activate: async (context) => {
89
+ const observability = await options.observability();
90
+ return ClientReady({
91
+ context,
92
+ observability,
93
+ namespace: options.namespace
142
94
  });
143
- },
144
- unload: async () => {
145
- subscriptions.clear();
146
- await observability?.close();
147
- },
148
- provides: {
149
- intent: {
150
- resolvers: ({ plugins }) => {
151
- const client = findPlugin(plugins, "dxos.org/plugin/client")?.provides.client;
152
- if (!client || !observability) {
153
- return [];
154
- }
155
- return [
156
- createResolver(ObservabilityAction.Toggle, async ({ state: state2 }) => {
157
- invariant(observability, "Observability instance not available", {
158
- F: __dxlog_file,
159
- L: 170,
160
- S: void 0,
161
- A: [
162
- "observability",
163
- "'Observability instance not available'"
164
- ]
165
- });
166
- settings.enabled = state2 ?? !settings.enabled;
167
- observability.event({
168
- identityId: getTelemetryIdentifier(client),
169
- name: `${options.namespace}.observability.toggle`,
170
- properties: {
171
- enabled: settings.enabled
172
- }
173
- });
174
- observability.setMode(settings.enabled ? "basic" : "disabled");
175
- await storeObservabilityDisabled(options.namespace, !settings.enabled);
176
- return {
177
- data: settings.enabled
178
- };
179
- }),
180
- createResolver(ObservabilityAction.SendEvent, async (data) => {
181
- invariant(observability, "Observability instance not available", {
182
- F: __dxlog_file,
183
- L: 184,
184
- S: void 0,
185
- A: [
186
- "observability",
187
- "'Observability instance not available'"
188
- ]
189
- });
190
- const event = {
191
- identityId: getTelemetryIdentifier(client),
192
- name: `${options.namespace}.${data.name}`,
193
- properties: {
194
- ...data.properties
195
- }
196
- };
197
- observability.event(event);
198
- }),
199
- createResolver(ObservabilityAction.CaptureUserFeedback, async (data) => {
200
- invariant(observability, "Observability instance not available", {
201
- F: __dxlog_file,
202
- L: 195,
203
- S: void 0,
204
- A: [
205
- "observability",
206
- "'Observability instance not available'"
207
- ]
208
- });
209
- observability.captureUserFeedback(data.email, data.name, data.message);
210
- })
211
- ];
212
- }
213
- },
214
- observability: state.values,
215
- settings,
216
- surface: {
217
- definitions: () => createSurface({
218
- id: OBSERVABILITY_PLUGIN,
219
- role: "settings",
220
- filter: (data) => data.subject === OBSERVABILITY_PLUGIN,
221
- component: () => /* @__PURE__ */ React2.createElement(ObservabilitySettings, {
222
- settings
223
- })
224
- })
225
- },
226
- translations: translations_default
227
95
  }
228
- };
229
- };
230
-
231
- // packages/plugins/plugin-observability/src/index.ts
232
- var src_default = ObservabilityPlugin;
96
+ })
97
+ ]);
233
98
  export {
99
+ OBSERVABILITY_PLUGIN,
100
+ ObservabilityCapabilities,
101
+ ObservabilityEvents,
234
102
  ObservabilityPlugin,
235
- src_default as default,
236
- parseObservabilityPlugin
103
+ meta
237
104
  };
238
105
  //# sourceMappingURL=index.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../src/ObservabilityPlugin.tsx", "../../../src/components/ObservabilitySettings.tsx", "../../../src/translations.ts", "../../../src/index.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport {\n type Plugin,\n type PluginDefinition,\n type IntentResolverProvides,\n type SettingsProvides,\n type SurfaceProvides,\n type TranslationsProvides,\n resolvePlugin,\n parseIntentPlugin,\n LayoutAction,\n SettingsAction,\n createSurface,\n findPlugin,\n createIntent,\n createResolver,\n} from '@dxos/app-framework';\nimport { EventSubscriptions } from '@dxos/async';\nimport { invariant } from '@dxos/invariant';\nimport { create } from '@dxos/live-object';\nimport { LocalStorageStore } from '@dxos/local-storage';\nimport {\n type Observability,\n getTelemetryIdentifier,\n setupTelemetryListeners,\n isObservabilityDisabled,\n storeObservabilityDisabled,\n getObservabilityGroup,\n} from '@dxos/observability';\nimport { type Client } from '@dxos/react-client';\n\nimport { ObservabilitySettings, type ObservabilitySettingsProps } from './components';\nimport meta, { OBSERVABILITY_PLUGIN } from './meta';\nimport translations from './translations';\nimport { ObservabilityAction } from './types';\n\nexport type ObservabilityPluginState = {\n group?: string;\n notified?: boolean;\n};\n\nexport type ObservabilityPluginProvides = IntentResolverProvides &\n SurfaceProvides &\n SettingsProvides<ObservabilitySettingsProps> &\n TranslationsProvides & {\n observability: ObservabilityPluginState;\n };\n\nexport const parseObservabilityPlugin = (plugin?: Plugin) =>\n (plugin?.provides as any).observability ? (plugin as Plugin<ObservabilityPluginProvides>) : undefined;\n\nexport const ObservabilityPlugin = (options: {\n namespace: string;\n observability: () => Promise<Observability>;\n}): PluginDefinition<ObservabilityPluginProvides> => {\n const settings = create<ObservabilitySettingsProps>({});\n const state = new LocalStorageStore<ObservabilityPluginState>(OBSERVABILITY_PLUGIN);\n const subscriptions = new EventSubscriptions();\n let observability: Observability | undefined;\n\n return {\n meta,\n initialize: async () => {\n settings.enabled = !(await isObservabilityDisabled(options.namespace));\n state.values.group = await getObservabilityGroup(options.namespace);\n state.prop({ key: 'notified', type: LocalStorageStore.bool({ allowUndefined: true }) });\n },\n ready: async ({ plugins }) => {\n const client = findPlugin<{ client: Client }>(plugins, 'dxos.org/plugin/client')?.provides.client;\n const intentPlugin = resolvePlugin(plugins, parseIntentPlugin);\n\n const dispatch = intentPlugin?.provides?.intent?.dispatchPromise;\n if (!dispatch) {\n return;\n }\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.values.notified && notify) {\n await dispatch(\n createIntent(LayoutAction.SetLayout, {\n element: 'toast',\n subject: {\n id: `${OBSERVABILITY_PLUGIN}/notice`,\n // TODO(wittjosiah): Non-react translation utils.\n title: translations[0]['en-US'][OBSERVABILITY_PLUGIN]['observability toast label'],\n description: translations[0]['en-US'][OBSERVABILITY_PLUGIN]['observability toast description'],\n duration: Infinity,\n icon: 'ph--info--regular',\n actionLabel: translations[0]['en-US'][OBSERVABILITY_PLUGIN]['observability toast action label'],\n actionAlt: translations[0]['en-US'][OBSERVABILITY_PLUGIN]['observability toast action alt'],\n closeLabel: translations[0]['en-US'][OBSERVABILITY_PLUGIN]['observability toast close label'],\n onAction: () => dispatch(createIntent(SettingsAction.Open, { plugin: OBSERVABILITY_PLUGIN })),\n },\n }),\n );\n\n state.values.notified = true;\n }\n };\n\n // Initialize asynchronously in the background, not in plugin initialization.\n // Should not block application startup.\n void options.observability().then(async (obs) => {\n observability = obs;\n\n // Ensure errors are tagged with enabled plugins to help with reproductions.\n plugins.map((plugin) => observability?.setTag(`pluginEnabled-${plugin.meta.id}`, 'true', 'errors'));\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 if (!client) {\n return;\n }\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 setupTelemetryListeners(options.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, options.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 },\n unload: async () => {\n subscriptions.clear();\n await observability?.close();\n },\n provides: {\n intent: {\n resolvers: ({ plugins }) => {\n const client = findPlugin<{ client: Client }>(plugins, 'dxos.org/plugin/client')?.provides.client;\n if (!client || !observability) {\n return [];\n }\n\n return [\n createResolver(ObservabilityAction.Toggle, async ({ state }) => {\n invariant(observability, 'Observability instance not available');\n settings.enabled = state ?? !settings.enabled;\n observability.event({\n identityId: getTelemetryIdentifier(client),\n name: `${options.namespace}.observability.toggle`,\n properties: {\n enabled: settings.enabled,\n },\n });\n observability.setMode(settings.enabled ? 'basic' : 'disabled');\n await storeObservabilityDisabled(options.namespace, !settings.enabled);\n return { data: settings.enabled };\n }),\n createResolver(ObservabilityAction.SendEvent, async (data) => {\n invariant(observability, 'Observability instance not available');\n const event = {\n identityId: getTelemetryIdentifier(client),\n name: `${options.namespace}.${data.name}`,\n properties: {\n ...data.properties,\n },\n };\n observability.event(event);\n }),\n createResolver(ObservabilityAction.CaptureUserFeedback, async (data) => {\n invariant(observability, 'Observability instance not available');\n observability.captureUserFeedback(data.email, data.name, data.message);\n }),\n ];\n },\n },\n observability: state.values,\n settings,\n surface: {\n definitions: () =>\n createSurface({\n id: OBSERVABILITY_PLUGIN,\n role: 'settings',\n filter: (data): data is any => data.subject === OBSERVABILITY_PLUGIN,\n component: () => <ObservabilitySettings settings={settings} />,\n }),\n },\n translations,\n },\n };\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { Input, Message, useTranslation } from '@dxos/react-ui';\nimport { DeprecatedFormInput } from '@dxos/react-ui-form';\n\nimport { OBSERVABILITY_PLUGIN } from '../meta';\nimport { ObservabilityAction } from '../types';\n\nexport type ObservabilitySettingsProps = {\n enabled?: boolean;\n // TODO(wittjosiah): Separate settings for each observability feature.\n // metrics?: boolean;\n // telemetry?: boolean;\n // errors?: boolean;\n};\n\nexport const ObservabilitySettings = ({ settings }: { settings: ObservabilitySettingsProps }) => {\n const { t } = useTranslation(OBSERVABILITY_PLUGIN);\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n\n return (\n <>\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 </>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { OBSERVABILITY_PLUGIN } from './meta';\n\nexport default [\n {\n 'en-US': {\n [OBSERVABILITY_PLUGIN]: {\n 'plugin name': 'Telemetry',\n 'observability toast label': 'Privacy Notice',\n 'observability toast description':\n 'Composer collects usage and performance metrics to improve the product. No user data is collected.',\n 'observability toast action label': 'Settings',\n 'observability toast action alt': 'Open settings to learn more or to disable.',\n 'observability toast close label': 'Okay',\n 'observability enabled label': 'Enable telemetry',\n // TODO: Add link about telemetry privacy. Make it clearer that user data is not collected.\n 'observability description':\n 'When enabled, basic usage data will be sent to the DXOS team in order 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.',\n },\n },\n },\n];\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { ObservabilityPlugin } from './ObservabilityPlugin';\n\nexport default ObservabilityPlugin;\n\nexport * from './ObservabilityPlugin';\n"],
5
- "mappings": "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",
6
- "names": ["React", "resolvePlugin", "parseIntentPlugin", "LayoutAction", "SettingsAction", "createSurface", "findPlugin", "createIntent", "createResolver", "EventSubscriptions", "invariant", "create", "LocalStorageStore", "getTelemetryIdentifier", "setupTelemetryListeners", "isObservabilityDisabled", "storeObservabilityDisabled", "getObservabilityGroup", "React", "createIntent", "useIntentDispatcher", "Input", "Message", "useTranslation", "DeprecatedFormInput", "ObservabilitySettings", "settings", "t", "useTranslation", "OBSERVABILITY_PLUGIN", "dispatchPromise", "dispatch", "useIntentDispatcher", "DeprecatedFormInput", "label", "secondary", "Message", "Root", "valence", "Body", "Input", "Switch", "checked", "enabled", "onCheckedChange", "createIntent", "ObservabilityAction", "Toggle", "state", "OBSERVABILITY_PLUGIN", "parseObservabilityPlugin", "plugin", "provides", "observability", "undefined", "ObservabilityPlugin", "options", "settings", "create", "state", "LocalStorageStore", "OBSERVABILITY_PLUGIN", "subscriptions", "EventSubscriptions", "meta", "initialize", "enabled", "isObservabilityDisabled", "namespace", "values", "group", "getObservabilityGroup", "prop", "key", "type", "bool", "allowUndefined", "ready", "plugins", "client", "findPlugin", "intentPlugin", "resolvePlugin", "parseIntentPlugin", "dispatch", "intent", "dispatchPromise", "sendPrivacyNotice", "environment", "config", "runtime", "app", "env", "DX_ENVIRONMENT", "notify", "endsWith", "notified", "createIntent", "LayoutAction", "SetLayout", "element", "subject", "id", "title", "translations", "description", "duration", "Infinity", "icon", "actionLabel", "actionAlt", "closeLabel", "onAction", "SettingsAction", "Open", "then", "obs", "map", "setTag", "ObservabilityAction", "SendEvent", "name", "properties", "href", "window", "location", "loadDuration", "performance", "timing", "loadEventEnd", "loadEventStart", "setupTelemetryListeners", "Promise", "all", "setIdentityTags", "services", "startRuntimeMetrics", "startNetworkMetrics", "startSpacesMetrics", "halo", "identity", "get", "subscription", "subscribe", "unsubscribe", "unload", "clear", "close", "resolvers", "createResolver", "Toggle", "invariant", "event", "identityId", "getTelemetryIdentifier", "setMode", "storeObservabilityDisabled", "data", "CaptureUserFeedback", "captureUserFeedback", "email", "message", "surface", "definitions", "createSurface", "role", "filter", "component", "React", "ObservabilitySettings", "ObservabilityPlugin"]
3
+ "sources": ["../../../src/capabilities/index.ts", "../../../src/events.ts", "../../../src/ObservabilityPlugin.ts", "../../../src/translations.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { lazy } from '@dxos/app-framework';\n\nexport const ClientReady = lazy(() => import('./client-ready'));\nexport const IntentResolver = lazy(() => import('./intents-resolver'));\nexport const ReactSurface = lazy(() => import('./react-surface'));\nexport const ObservabilitySettings = lazy(() => import('./settings'));\nexport const ObservabilityState = lazy(() => import('./state'));\n\nexport * from './capabilities';\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { defineEvent, Events } from '@dxos/app-framework';\n\nimport { OBSERVABILITY_PLUGIN } from './meta';\n\nexport namespace ObservabilityEvents {\n export const StateReady = Events.createStateEvent(OBSERVABILITY_PLUGIN);\n}\n\n// NOTE: This is cloned from the client plugin to avoid circular dependencies.\nexport const ClientReadyEvent = defineEvent('dxos.org/plugin/client/event/client-ready');\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { allOf, Capabilities, contributes, defineModule, definePlugin, Events } from '@dxos/app-framework';\nimport { type Observability } from '@dxos/observability';\n\nimport {\n ClientReady,\n IntentResolver,\n ObservabilityCapabilities,\n ObservabilitySettings,\n ObservabilityState,\n ReactSurface,\n} from './capabilities';\nimport { ObservabilityEvents, ClientReadyEvent } from './events';\nimport { meta } from './meta';\nimport translations from './translations';\n\nexport const ObservabilityPlugin = (options: { namespace: string; observability: () => Promise<Observability> }) =>\n definePlugin(meta, [\n defineModule({\n id: `${meta.id}/module/observability`,\n activatesOn: Events.Startup,\n activate: async () => contributes(ObservabilityCapabilities.Observability, await options.observability()),\n }),\n defineModule({\n id: `${meta.id}/module/settings`,\n activatesOn: Events.SetupSettings,\n activate: ObservabilitySettings,\n }),\n defineModule({\n id: `${meta.id}/module/state`,\n activatesOn: Events.Startup,\n activate: () => ObservabilityState({ namespace: options.namespace }),\n }),\n defineModule({\n id: `${meta.id}/module/translations`,\n activatesOn: Events.SetupTranslations,\n activate: () => contributes(Capabilities.Translations, translations),\n }),\n defineModule({\n id: `${meta.id}/module/intent-resolver`,\n activatesOn: Events.SetupIntents,\n activate: (context) => IntentResolver({ context, namespace: options.namespace }),\n }),\n defineModule({\n id: `${meta.id}/module/react-surface`,\n activatesOn: Events.Startup,\n activate: ReactSurface,\n }),\n defineModule({\n id: `${meta.id}/module/client-ready`,\n activatesOn: allOf(Events.DispatcherReady, ObservabilityEvents.StateReady, ClientReadyEvent),\n activate: async (context) => {\n const observability = await options.observability();\n return ClientReady({ context, observability, namespace: options.namespace });\n },\n }),\n ]);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { OBSERVABILITY_PLUGIN } from './meta';\n\nexport default [\n {\n 'en-US': {\n [OBSERVABILITY_PLUGIN]: {\n 'plugin name': 'Telemetry',\n 'observability toast label': 'Privacy Notice',\n 'observability toast description':\n 'Composer collects usage and performance metrics to improve the product. No user data is collected.',\n 'observability toast action label': 'Settings',\n 'observability toast action alt': 'Open settings to learn more or to disable.',\n 'observability toast close label': 'Okay',\n 'observability enabled label': 'Enable telemetry',\n // TODO: Add link about telemetry privacy. Make it clearer that user data is not collected.\n 'observability description':\n 'When enabled, basic usage data will be sent to the DXOS team in order 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.',\n },\n },\n },\n];\n"],
5
+ "mappings": ";;;;;;;;;;AAIA,SAASA,YAAY;AAEd,IAAMC,cAAcC,KAAK,MAAM,OAAO,6BAAA,CAAA;AACtC,IAAMC,iBAAiBD,KAAK,MAAM,OAAO,iCAAA,CAAA;AACzC,IAAME,eAAeF,KAAK,MAAM,OAAO,8BAAA,CAAA;AACvC,IAAMG,wBAAwBH,KAAK,MAAM,OAAO,yBAAA,CAAA;AAChD,IAAMI,qBAAqBJ,KAAK,MAAM,OAAO,sBAAA,CAAA;;;ACNpD,SAASK,aAAaC,cAAc;;UAInBC,sBAAAA;uBACFC,aAAaC,OAAOC,iBAAiBC,oBAAAA;AACpD,GAFiBJ,wBAAAA,sBAAAA,CAAAA,EAAAA;AAKV,IAAMK,mBAAmBC,YAAY,2CAAA;;;ACT5C,SAASC,OAAOC,cAAcC,aAAaC,cAAcC,cAAcC,UAAAA,eAAc;;;ACErF,IAAA,uBAAe;EACb;IACE,SAAS;MACP,CAACC,oBAAAA,GAAuB;QACtB,eAAe;QACf,6BAA6B;QAC7B,mCACE;QACF,oCAAoC;QACpC,kCAAkC;QAClC,mCAAmC;QACnC,+BAA+B;;QAE/B,6BACE;MACJ;IACF;EACF;;;;ADJK,IAAMC,sBAAsB,CAACC,YAClCC,aAAaC,MAAM;EACjBC,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,QAAOC;IACpBC,UAAU,YAAYC,YAAYC,0BAA0BC,eAAe,MAAMX,QAAQY,cAAa,CAAA;EACxG,CAAA;EACAT,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,QAAOO;IACpBL,UAAUM;EACZ,CAAA;EACAX,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,QAAOC;IACpBC,UAAU,MAAMO,mBAAmB;MAAEC,WAAWhB,QAAQgB;IAAU,CAAA;EACpE,CAAA;EACAb,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,QAAOW;IACpBT,UAAU,MAAMC,YAAYS,aAAaC,cAAcC,oBAAAA;EACzD,CAAA;EACAjB,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,QAAOe;IACpBb,UAAU,CAACc,YAAYC,eAAe;MAAED;MAASN,WAAWhB,QAAQgB;IAAU,CAAA;EAChF,CAAA;EACAb,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,QAAOC;IACpBC,UAAUgB;EACZ,CAAA;EACArB,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaoB,MAAMnB,QAAOoB,iBAAiBC,oBAAoBC,YAAYC,gBAAAA;IAC3ErB,UAAU,OAAOc,YAAAA;AACf,YAAMV,gBAAgB,MAAMZ,QAAQY,cAAa;AACjD,aAAOkB,YAAY;QAAER;QAASV;QAAeI,WAAWhB,QAAQgB;MAAU,CAAA;IAC5E;EACF,CAAA;CACD;",
6
+ "names": ["lazy", "ClientReady", "lazy", "IntentResolver", "ReactSurface", "ObservabilitySettings", "ObservabilityState", "defineEvent", "Events", "ObservabilityEvents", "StateReady", "Events", "createStateEvent", "OBSERVABILITY_PLUGIN", "ClientReadyEvent", "defineEvent", "allOf", "Capabilities", "contributes", "defineModule", "definePlugin", "Events", "OBSERVABILITY_PLUGIN", "ObservabilityPlugin", "options", "definePlugin", "meta", "defineModule", "id", "activatesOn", "Events", "Startup", "activate", "contributes", "ObservabilityCapabilities", "Observability", "observability", "SetupSettings", "ObservabilitySettings", "ObservabilityState", "namespace", "SetupTranslations", "Capabilities", "Translations", "translations", "SetupIntents", "context", "IntentResolver", "ReactSurface", "allOf", "DispatcherReady", "ObservabilityEvents", "StateReady", "ClientReadyEvent", "ClientReady"]
7
7
  }
@@ -0,0 +1,56 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ ObservabilityAction
4
+ } from "./chunk-DF2CPSQB.mjs";
5
+ import {
6
+ ClientCapability,
7
+ ObservabilityCapabilities
8
+ } from "./chunk-SCQR7W6A.mjs";
9
+ import {
10
+ OBSERVABILITY_PLUGIN
11
+ } from "./chunk-YK5MJX7W.mjs";
12
+
13
+ // packages/plugins/plugin-observability/src/capabilities/intents-resolver.ts
14
+ import { Capabilities, contributes, createResolver } from "@dxos/app-framework";
15
+ import { getTelemetryIdentifier, storeObservabilityDisabled } from "@dxos/observability";
16
+ var intents_resolver_default = ({ context, namespace }) => contributes(Capabilities.IntentResolver, [
17
+ createResolver(ObservabilityAction.Toggle, async ({ state }) => {
18
+ const client = context.requestCapability(ClientCapability);
19
+ const observability = context.requestCapability(ObservabilityCapabilities.Observability);
20
+ const settings = context.requestCapability(Capabilities.SettingsStore).getStore(OBSERVABILITY_PLUGIN).value;
21
+ settings.enabled = state ?? !settings.enabled;
22
+ observability.event({
23
+ identityId: getTelemetryIdentifier(client),
24
+ name: `${namespace}.observability.toggle`,
25
+ properties: {
26
+ enabled: settings.enabled
27
+ }
28
+ });
29
+ observability.setMode(settings.enabled ? "basic" : "disabled");
30
+ await storeObservabilityDisabled(namespace, !settings.enabled);
31
+ return {
32
+ data: settings.enabled
33
+ };
34
+ }),
35
+ createResolver(ObservabilityAction.SendEvent, (data) => {
36
+ const client = context.requestCapability(ClientCapability);
37
+ void context.waitForCapability(ObservabilityCapabilities.Observability).then((observability) => {
38
+ const event = {
39
+ identityId: getTelemetryIdentifier(client),
40
+ name: `${namespace}.${data.name}`,
41
+ properties: {
42
+ ...data.properties
43
+ }
44
+ };
45
+ observability.event(event);
46
+ });
47
+ }),
48
+ createResolver(ObservabilityAction.CaptureUserFeedback, async (data) => {
49
+ const observability = context.requestCapability(ObservabilityCapabilities.Observability);
50
+ observability.captureUserFeedback(data.email, data.name, data.message);
51
+ })
52
+ ]);
53
+ export {
54
+ intents_resolver_default as default
55
+ };
56
+ //# sourceMappingURL=intents-resolver-QDAK6TMP.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/intents-resolver.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capabilities, contributes, createResolver, type PluginsContext } from '@dxos/app-framework';\nimport { getTelemetryIdentifier, storeObservabilityDisabled } from '@dxos/observability';\n\nimport { ClientCapability, ObservabilityCapabilities } from './capabilities';\nimport { type ObservabilitySettingsProps } from '../components';\nimport { OBSERVABILITY_PLUGIN } from '../meta';\nimport { ObservabilityAction } from '../types';\n\nexport default ({ context, namespace }: { context: PluginsContext; namespace: string }) =>\n contributes(Capabilities.IntentResolver, [\n createResolver(ObservabilityAction.Toggle, async ({ state }) => {\n const client = context.requestCapability(ClientCapability);\n const observability = context.requestCapability(ObservabilityCapabilities.Observability);\n const settings = context\n .requestCapability(Capabilities.SettingsStore)\n .getStore<ObservabilitySettingsProps>(OBSERVABILITY_PLUGIN)!.value;\n settings.enabled = state ?? !settings.enabled;\n observability.event({\n identityId: getTelemetryIdentifier(client),\n name: `${namespace}.observability.toggle`,\n properties: {\n enabled: settings.enabled,\n },\n });\n observability.setMode(settings.enabled ? 'basic' : 'disabled');\n await storeObservabilityDisabled(namespace, !settings.enabled);\n return { data: settings.enabled };\n }),\n createResolver(ObservabilityAction.SendEvent, (data) => {\n const client = context.requestCapability(ClientCapability);\n // NOTE: This is to ensure that events fired before observability is ready are still sent.\n // TODO(wittjosiah): If the intent dispatcher supports concurrent actions in the future,\n // then this could awaited still rather than voiding.\n void context.waitForCapability(ObservabilityCapabilities.Observability).then((observability) => {\n const event = {\n identityId: getTelemetryIdentifier(client),\n name: `${namespace}.${data.name}`,\n properties: {\n ...data.properties,\n },\n };\n observability.event(event);\n });\n }),\n createResolver(ObservabilityAction.CaptureUserFeedback, async (data) => {\n const observability = context.requestCapability(ObservabilityCapabilities.Observability);\n observability.captureUserFeedback(data.email, data.name, data.message);\n }),\n ]);\n"],
5
+ "mappings": ";;;;;;;;;;;;;AAIA,SAASA,cAAcC,aAAaC,sBAA2C;AAC/E,SAASC,wBAAwBC,kCAAkC;AAOnE,IAAA,2BAAe,CAAC,EAAEC,SAASC,UAAS,MAClCC,YAAYC,aAAaC,gBAAgB;EACvCC,eAAeC,oBAAoBC,QAAQ,OAAO,EAAEC,MAAK,MAAE;AACzD,UAAMC,SAAST,QAAQU,kBAAkBC,gBAAAA;AACzC,UAAMC,gBAAgBZ,QAAQU,kBAAkBG,0BAA0BC,aAAa;AACvF,UAAMC,WAAWf,QACdU,kBAAkBP,aAAaa,aAAa,EAC5CC,SAAqCC,oBAAAA,EAAuBC;AAC/DJ,aAASK,UAAUZ,SAAS,CAACO,SAASK;AACtCR,kBAAcS,MAAM;MAClBC,YAAYC,uBAAuBd,MAAAA;MACnCe,MAAM,GAAGvB,SAAAA;MACTwB,YAAY;QACVL,SAASL,SAASK;MACpB;IACF,CAAA;AACAR,kBAAcc,QAAQX,SAASK,UAAU,UAAU,UAAA;AACnD,UAAMO,2BAA2B1B,WAAW,CAACc,SAASK,OAAO;AAC7D,WAAO;MAAEQ,MAAMb,SAASK;IAAQ;EAClC,CAAA;EACAf,eAAeC,oBAAoBuB,WAAW,CAACD,SAAAA;AAC7C,UAAMnB,SAAST,QAAQU,kBAAkBC,gBAAAA;AAIzC,SAAKX,QAAQ8B,kBAAkBjB,0BAA0BC,aAAa,EAAEiB,KAAK,CAACnB,kBAAAA;AAC5E,YAAMS,QAAQ;QACZC,YAAYC,uBAAuBd,MAAAA;QACnCe,MAAM,GAAGvB,SAAAA,IAAa2B,KAAKJ,IAAI;QAC/BC,YAAY;UACV,GAAGG,KAAKH;QACV;MACF;AACAb,oBAAcS,MAAMA,KAAAA;IACtB,CAAA;EACF,CAAA;EACAhB,eAAeC,oBAAoB0B,qBAAqB,OAAOJ,SAAAA;AAC7D,UAAMhB,gBAAgBZ,QAAQU,kBAAkBG,0BAA0BC,aAAa;AACvFF,kBAAcqB,oBAAoBL,KAAKM,OAAON,KAAKJ,MAAMI,KAAKO,OAAO;EACvE,CAAA;CACD;",
6
+ "names": ["Capabilities", "contributes", "createResolver", "getTelemetryIdentifier", "storeObservabilityDisabled", "context", "namespace", "contributes", "Capabilities", "IntentResolver", "createResolver", "ObservabilityAction", "Toggle", "state", "client", "requestCapability", "ClientCapability", "observability", "ObservabilityCapabilities", "Observability", "settings", "SettingsStore", "getStore", "OBSERVABILITY_PLUGIN", "value", "enabled", "event", "identityId", "getTelemetryIdentifier", "name", "properties", "setMode", "storeObservabilityDisabled", "data", "SendEvent", "waitForCapability", "then", "CaptureUserFeedback", "captureUserFeedback", "email", "message"]
7
+ }
@@ -1 +1 @@
1
- {"inputs":{"packages/plugins/plugin-observability/src/meta.ts":{"bytes":1009,"imports":[],"format":"esm"},"packages/plugins/plugin-observability/src/types.ts":{"bytes":6985,"imports":[{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-observability/src/meta.ts","kind":"import-statement","original":"./meta"}],"format":"esm"},"packages/plugins/plugin-observability/src/components/ObservabilitySettings.tsx":{"bytes":4551,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-form","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-observability/src/meta.ts","kind":"import-statement","original":"../meta"},{"path":"packages/plugins/plugin-observability/src/types.ts","kind":"import-statement","original":"../types"}],"format":"esm"},"packages/plugins/plugin-observability/src/components/index.ts":{"bytes":553,"imports":[{"path":"packages/plugins/plugin-observability/src/components/ObservabilitySettings.tsx","kind":"import-statement","original":"./ObservabilitySettings"}],"format":"esm"},"packages/plugins/plugin-observability/src/translations.ts":{"bytes":3430,"imports":[{"path":"packages/plugins/plugin-observability/src/meta.ts","kind":"import-statement","original":"./meta"}],"format":"esm"},"packages/plugins/plugin-observability/src/ObservabilityPlugin.tsx":{"bytes":29319,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/live-object","kind":"import-statement","external":true},{"path":"@dxos/local-storage","kind":"import-statement","external":true},{"path":"@dxos/observability","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-observability/src/components/index.ts","kind":"import-statement","original":"./components"},{"path":"packages/plugins/plugin-observability/src/meta.ts","kind":"import-statement","original":"./meta"},{"path":"packages/plugins/plugin-observability/src/translations.ts","kind":"import-statement","original":"./translations"},{"path":"packages/plugins/plugin-observability/src/types.ts","kind":"import-statement","original":"./types"}],"format":"esm"},"packages/plugins/plugin-observability/src/index.ts":{"bytes":869,"imports":[{"path":"packages/plugins/plugin-observability/src/ObservabilityPlugin.tsx","kind":"import-statement","original":"./ObservabilityPlugin"},{"path":"packages/plugins/plugin-observability/src/ObservabilityPlugin.tsx","kind":"import-statement","original":"./ObservabilityPlugin"}],"format":"esm"}},"outputs":{"packages/plugins/plugin-observability/dist/lib/node-esm/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":18208},"packages/plugins/plugin-observability/dist/lib/node-esm/index.mjs":{"imports":[{"path":"packages/plugins/plugin-observability/dist/lib/node-esm/chunk-52FTHXHB.mjs","kind":"import-statement"},{"path":"packages/plugins/plugin-observability/dist/lib/node-esm/chunk-7GGPSKXN.mjs","kind":"import-statement"},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/live-object","kind":"import-statement","external":true},{"path":"@dxos/local-storage","kind":"import-statement","external":true},{"path":"@dxos/observability","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-form","kind":"import-statement","external":true}],"exports":["ObservabilityPlugin","default","parseObservabilityPlugin"],"entryPoint":"packages/plugins/plugin-observability/src/index.ts","inputs":{"packages/plugins/plugin-observability/src/ObservabilityPlugin.tsx":{"bytesInOutput":7557},"packages/plugins/plugin-observability/src/components/ObservabilitySettings.tsx":{"bytesInOutput":961},"packages/plugins/plugin-observability/src/components/index.ts":{"bytesInOutput":0},"packages/plugins/plugin-observability/src/translations.ts":{"bytesInOutput":1031},"packages/plugins/plugin-observability/src/index.ts":{"bytesInOutput":39}},"bytes":10284},"packages/plugins/plugin-observability/dist/lib/node-esm/meta.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"packages/plugins/plugin-observability/dist/lib/node-esm/meta.mjs":{"imports":[{"path":"packages/plugins/plugin-observability/dist/lib/node-esm/chunk-7GGPSKXN.mjs","kind":"import-statement"}],"exports":["OBSERVABILITY_PLUGIN","default"],"entryPoint":"packages/plugins/plugin-observability/src/meta.ts","inputs":{},"bytes":267},"packages/plugins/plugin-observability/dist/lib/node-esm/types.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"packages/plugins/plugin-observability/dist/lib/node-esm/types.mjs":{"imports":[{"path":"packages/plugins/plugin-observability/dist/lib/node-esm/chunk-52FTHXHB.mjs","kind":"import-statement"},{"path":"packages/plugins/plugin-observability/dist/lib/node-esm/chunk-7GGPSKXN.mjs","kind":"import-statement"}],"exports":["ObservabilityAction","UserFeedback"],"entryPoint":"packages/plugins/plugin-observability/src/types.ts","inputs":{},"bytes":286},"packages/plugins/plugin-observability/dist/lib/node-esm/chunk-52FTHXHB.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":3576},"packages/plugins/plugin-observability/dist/lib/node-esm/chunk-52FTHXHB.mjs":{"imports":[{"path":"packages/plugins/plugin-observability/dist/lib/node-esm/chunk-7GGPSKXN.mjs","kind":"import-statement"},{"path":"@dxos/echo-schema","kind":"import-statement","external":true}],"exports":["ObservabilityAction","UserFeedback"],"inputs":{"packages/plugins/plugin-observability/src/types.ts":{"bytesInOutput":1658}},"bytes":1963},"packages/plugins/plugin-observability/dist/lib/node-esm/chunk-7GGPSKXN.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":480},"packages/plugins/plugin-observability/dist/lib/node-esm/chunk-7GGPSKXN.mjs":{"imports":[],"exports":["OBSERVABILITY_PLUGIN","meta_default"],"inputs":{"packages/plugins/plugin-observability/src/meta.ts":{"bytesInOutput":132}},"bytes":374}}}
1
+ {"inputs":{"packages/plugins/plugin-observability/src/meta.ts":{"bytes":1046,"imports":[],"format":"esm"},"packages/plugins/plugin-observability/src/capabilities/capabilities.ts":{"bytes":2554,"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-observability/src/meta.ts","kind":"import-statement","original":"../meta"}],"format":"esm"},"packages/plugins/plugin-observability/src/types.ts":{"bytes":6985,"imports":[{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-observability/src/meta.ts","kind":"import-statement","original":"./meta"}],"format":"esm"},"packages/plugins/plugin-observability/src/capabilities/client-ready.ts":{"bytes":14154,"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/observability","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-observability/src/capabilities/capabilities.ts","kind":"import-statement","original":"./capabilities"},{"path":"packages/plugins/plugin-observability/src/meta.ts","kind":"import-statement","original":"../meta"},{"path":"packages/plugins/plugin-observability/src/types.ts","kind":"import-statement","original":"../types"}],"format":"esm"},"packages/plugins/plugin-observability/src/capabilities/intents-resolver.ts":{"bytes":8838,"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/observability","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-observability/src/capabilities/capabilities.ts","kind":"import-statement","original":"./capabilities"},{"path":"packages/plugins/plugin-observability/src/meta.ts","kind":"import-statement","original":"../meta"},{"path":"packages/plugins/plugin-observability/src/types.ts","kind":"import-statement","original":"../types"}],"format":"esm"},"packages/plugins/plugin-observability/src/components/ObservabilitySettings.tsx":{"bytes":5178,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-form","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-observability/src/meta.ts","kind":"import-statement","original":"../meta"},{"path":"packages/plugins/plugin-observability/src/types.ts","kind":"import-statement","original":"../types"}],"format":"esm"},"packages/plugins/plugin-observability/src/components/index.ts":{"bytes":553,"imports":[{"path":"packages/plugins/plugin-observability/src/components/ObservabilitySettings.tsx","kind":"import-statement","original":"./ObservabilitySettings"}],"format":"esm"},"packages/plugins/plugin-observability/src/capabilities/react-surface.tsx":{"bytes":3021,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-observability/src/components/index.ts","kind":"import-statement","original":"../components"},{"path":"packages/plugins/plugin-observability/src/meta.ts","kind":"import-statement","original":"../meta"}],"format":"esm"},"packages/plugins/plugin-observability/src/capabilities/settings.ts":{"bytes":2180,"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/live-object","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-observability/src/components/index.ts","kind":"import-statement","original":"../components"},{"path":"packages/plugins/plugin-observability/src/meta.ts","kind":"import-statement","original":"../meta"}],"format":"esm"},"packages/plugins/plugin-observability/src/capabilities/state.ts":{"bytes":3153,"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/local-storage","kind":"import-statement","external":true},{"path":"@dxos/observability","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-observability/src/capabilities/capabilities.ts","kind":"import-statement","original":"./capabilities"},{"path":"packages/plugins/plugin-observability/src/meta.ts","kind":"import-statement","original":"../meta"}],"format":"esm"},"packages/plugins/plugin-observability/src/capabilities/index.ts":{"bytes":1944,"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-observability/src/capabilities/capabilities.ts","kind":"import-statement","original":"./capabilities"},{"path":"packages/plugins/plugin-observability/src/capabilities/client-ready.ts","kind":"dynamic-import","original":"./client-ready"},{"path":"packages/plugins/plugin-observability/src/capabilities/intents-resolver.ts","kind":"dynamic-import","original":"./intents-resolver"},{"path":"packages/plugins/plugin-observability/src/capabilities/react-surface.tsx","kind":"dynamic-import","original":"./react-surface"},{"path":"packages/plugins/plugin-observability/src/capabilities/settings.ts","kind":"dynamic-import","original":"./settings"},{"path":"packages/plugins/plugin-observability/src/capabilities/state.ts","kind":"dynamic-import","original":"./state"}],"format":"esm"},"packages/plugins/plugin-observability/src/events.ts":{"bytes":1845,"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-observability/src/meta.ts","kind":"import-statement","original":"./meta"}],"format":"esm"},"packages/plugins/plugin-observability/src/translations.ts":{"bytes":3430,"imports":[{"path":"packages/plugins/plugin-observability/src/meta.ts","kind":"import-statement","original":"./meta"}],"format":"esm"},"packages/plugins/plugin-observability/src/ObservabilityPlugin.ts":{"bytes":8075,"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-observability/src/capabilities/index.ts","kind":"import-statement","original":"./capabilities"},{"path":"packages/plugins/plugin-observability/src/events.ts","kind":"import-statement","original":"./events"},{"path":"packages/plugins/plugin-observability/src/meta.ts","kind":"import-statement","original":"./meta"},{"path":"packages/plugins/plugin-observability/src/translations.ts","kind":"import-statement","original":"./translations"}],"format":"esm"},"packages/plugins/plugin-observability/src/index.ts":{"bytes":1020,"imports":[{"path":"packages/plugins/plugin-observability/src/capabilities/index.ts","kind":"import-statement","original":"./capabilities"},{"path":"packages/plugins/plugin-observability/src/events.ts","kind":"import-statement","original":"./events"},{"path":"packages/plugins/plugin-observability/src/meta.ts","kind":"import-statement","original":"./meta"},{"path":"packages/plugins/plugin-observability/src/ObservabilityPlugin.ts","kind":"import-statement","original":"./ObservabilityPlugin"}],"format":"esm"}},"outputs":{"packages/plugins/plugin-observability/dist/lib/node-esm/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":6880},"packages/plugins/plugin-observability/dist/lib/node-esm/index.mjs":{"imports":[{"path":"packages/plugins/plugin-observability/dist/lib/node-esm/chunk-SCQR7W6A.mjs","kind":"import-statement"},{"path":"packages/plugins/plugin-observability/dist/lib/node-esm/chunk-YK5MJX7W.mjs","kind":"import-statement"},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-observability/dist/lib/node-esm/client-ready-LPGIUDS2.mjs","kind":"dynamic-import"},{"path":"packages/plugins/plugin-observability/dist/lib/node-esm/intents-resolver-QDAK6TMP.mjs","kind":"dynamic-import"},{"path":"packages/plugins/plugin-observability/dist/lib/node-esm/react-surface-MMGCSPXQ.mjs","kind":"dynamic-import"},{"path":"packages/plugins/plugin-observability/dist/lib/node-esm/settings-WWUULM4T.mjs","kind":"dynamic-import"},{"path":"packages/plugins/plugin-observability/dist/lib/node-esm/state-AM2ICAXU.mjs","kind":"dynamic-import"},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true}],"exports":["OBSERVABILITY_PLUGIN","ObservabilityCapabilities","ObservabilityEvents","ObservabilityPlugin","meta"],"entryPoint":"packages/plugins/plugin-observability/src/index.ts","inputs":{"packages/plugins/plugin-observability/src/capabilities/index.ts":{"bytesInOutput":404},"packages/plugins/plugin-observability/src/index.ts":{"bytesInOutput":0},"packages/plugins/plugin-observability/src/events.ts":{"bytesInOutput":337},"packages/plugins/plugin-observability/src/ObservabilityPlugin.ts":{"bytesInOutput":1607},"packages/plugins/plugin-observability/src/translations.ts":{"bytesInOutput":1031}},"bytes":4087},"packages/plugins/plugin-observability/dist/lib/node-esm/types.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"packages/plugins/plugin-observability/dist/lib/node-esm/types.mjs":{"imports":[{"path":"packages/plugins/plugin-observability/dist/lib/node-esm/chunk-DF2CPSQB.mjs","kind":"import-statement"},{"path":"packages/plugins/plugin-observability/dist/lib/node-esm/chunk-YK5MJX7W.mjs","kind":"import-statement"}],"exports":["ObservabilityAction","UserFeedback"],"entryPoint":"packages/plugins/plugin-observability/src/types.ts","inputs":{},"bytes":286},"packages/plugins/plugin-observability/dist/lib/node-esm/client-ready-LPGIUDS2.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":6901},"packages/plugins/plugin-observability/dist/lib/node-esm/client-ready-LPGIUDS2.mjs":{"imports":[{"path":"packages/plugins/plugin-observability/dist/lib/node-esm/chunk-DF2CPSQB.mjs","kind":"import-statement"},{"path":"packages/plugins/plugin-observability/dist/lib/node-esm/chunk-SCQR7W6A.mjs","kind":"import-statement"},{"path":"packages/plugins/plugin-observability/dist/lib/node-esm/chunk-YK5MJX7W.mjs","kind":"import-statement"},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/observability","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"packages/plugins/plugin-observability/src/capabilities/client-ready.ts","inputs":{"packages/plugins/plugin-observability/src/capabilities/client-ready.ts":{"bytesInOutput":3353}},"bytes":3830},"packages/plugins/plugin-observability/dist/lib/node-esm/intents-resolver-QDAK6TMP.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":4416},"packages/plugins/plugin-observability/dist/lib/node-esm/intents-resolver-QDAK6TMP.mjs":{"imports":[{"path":"packages/plugins/plugin-observability/dist/lib/node-esm/chunk-DF2CPSQB.mjs","kind":"import-statement"},{"path":"packages/plugins/plugin-observability/dist/lib/node-esm/chunk-SCQR7W6A.mjs","kind":"import-statement"},{"path":"packages/plugins/plugin-observability/dist/lib/node-esm/chunk-YK5MJX7W.mjs","kind":"import-statement"},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/observability","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"packages/plugins/plugin-observability/src/capabilities/intents-resolver.ts","inputs":{"packages/plugins/plugin-observability/src/capabilities/intents-resolver.ts":{"bytesInOutput":1765}},"bytes":2254},"packages/plugins/plugin-observability/dist/lib/node-esm/react-surface-MMGCSPXQ.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1555},"packages/plugins/plugin-observability/dist/lib/node-esm/react-surface-MMGCSPXQ.mjs":{"imports":[{"path":"packages/plugins/plugin-observability/dist/lib/node-esm/chunk-PZRWMBEG.mjs","kind":"import-statement"},{"path":"packages/plugins/plugin-observability/dist/lib/node-esm/chunk-DF2CPSQB.mjs","kind":"import-statement"},{"path":"packages/plugins/plugin-observability/dist/lib/node-esm/chunk-YK5MJX7W.mjs","kind":"import-statement"},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"packages/plugins/plugin-observability/src/capabilities/react-surface.tsx","inputs":{"packages/plugins/plugin-observability/src/capabilities/react-surface.tsx":{"bytesInOutput":544}},"bytes":970},"packages/plugins/plugin-observability/dist/lib/node-esm/settings-WWUULM4T.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1086},"packages/plugins/plugin-observability/dist/lib/node-esm/settings-WWUULM4T.mjs":{"imports":[{"path":"packages/plugins/plugin-observability/dist/lib/node-esm/chunk-PZRWMBEG.mjs","kind":"import-statement"},{"path":"packages/plugins/plugin-observability/dist/lib/node-esm/chunk-DF2CPSQB.mjs","kind":"import-statement"},{"path":"packages/plugins/plugin-observability/dist/lib/node-esm/chunk-YK5MJX7W.mjs","kind":"import-statement"},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/live-object","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"packages/plugins/plugin-observability/src/capabilities/settings.ts","inputs":{"packages/plugins/plugin-observability/src/capabilities/settings.ts":{"bytesInOutput":342}},"bytes":758},"packages/plugins/plugin-observability/dist/lib/node-esm/chunk-PZRWMBEG.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":2817},"packages/plugins/plugin-observability/dist/lib/node-esm/chunk-PZRWMBEG.mjs":{"imports":[{"path":"packages/plugins/plugin-observability/dist/lib/node-esm/chunk-DF2CPSQB.mjs","kind":"import-statement"},{"path":"packages/plugins/plugin-observability/dist/lib/node-esm/chunk-YK5MJX7W.mjs","kind":"import-statement"},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-form","kind":"import-statement","external":true}],"exports":["ObservabilitySettings","ObservabilitySettingsSchema"],"inputs":{"packages/plugins/plugin-observability/src/components/ObservabilitySettings.tsx":{"bytesInOutput":1081},"packages/plugins/plugin-observability/src/components/index.ts":{"bytesInOutput":0}},"bytes":1493},"packages/plugins/plugin-observability/dist/lib/node-esm/chunk-DF2CPSQB.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":3576},"packages/plugins/plugin-observability/dist/lib/node-esm/chunk-DF2CPSQB.mjs":{"imports":[{"path":"packages/plugins/plugin-observability/dist/lib/node-esm/chunk-YK5MJX7W.mjs","kind":"import-statement"},{"path":"@dxos/echo-schema","kind":"import-statement","external":true}],"exports":["ObservabilityAction","UserFeedback"],"inputs":{"packages/plugins/plugin-observability/src/types.ts":{"bytesInOutput":1658}},"bytes":1963},"packages/plugins/plugin-observability/dist/lib/node-esm/state-AM2ICAXU.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1587},"packages/plugins/plugin-observability/dist/lib/node-esm/state-AM2ICAXU.mjs":{"imports":[{"path":"packages/plugins/plugin-observability/dist/lib/node-esm/chunk-SCQR7W6A.mjs","kind":"import-statement"},{"path":"packages/plugins/plugin-observability/dist/lib/node-esm/chunk-YK5MJX7W.mjs","kind":"import-statement"},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/local-storage","kind":"import-statement","external":true},{"path":"@dxos/observability","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"packages/plugins/plugin-observability/src/capabilities/state.ts","inputs":{"packages/plugins/plugin-observability/src/capabilities/state.ts":{"bytesInOutput":544}},"bytes":918},"packages/plugins/plugin-observability/dist/lib/node-esm/chunk-SCQR7W6A.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1243},"packages/plugins/plugin-observability/dist/lib/node-esm/chunk-SCQR7W6A.mjs":{"imports":[{"path":"packages/plugins/plugin-observability/dist/lib/node-esm/chunk-YK5MJX7W.mjs","kind":"import-statement"},{"path":"@dxos/app-framework","kind":"import-statement","external":true}],"exports":["ClientCapability","ObservabilityCapabilities"],"inputs":{"packages/plugins/plugin-observability/src/capabilities/capabilities.ts":{"bytesInOutput":493}},"bytes":828},"packages/plugins/plugin-observability/dist/lib/node-esm/chunk-YK5MJX7W.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":495},"packages/plugins/plugin-observability/dist/lib/node-esm/chunk-YK5MJX7W.mjs":{"imports":[],"exports":["OBSERVABILITY_PLUGIN","meta"],"inputs":{"packages/plugins/plugin-observability/src/meta.ts":{"bytesInOutput":124}},"bytes":358}}}
@@ -0,0 +1,27 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ ObservabilitySettings
4
+ } from "./chunk-PZRWMBEG.mjs";
5
+ import "./chunk-DF2CPSQB.mjs";
6
+ import {
7
+ OBSERVABILITY_PLUGIN
8
+ } from "./chunk-YK5MJX7W.mjs";
9
+
10
+ // packages/plugins/plugin-observability/src/capabilities/react-surface.tsx
11
+ import React from "react";
12
+ import { contributes, useCapability, Capabilities, createSurface } from "@dxos/app-framework";
13
+ var react_surface_default = () => contributes(Capabilities.ReactSurface, createSurface({
14
+ id: OBSERVABILITY_PLUGIN,
15
+ role: "settings",
16
+ filter: (data) => data.subject === OBSERVABILITY_PLUGIN,
17
+ component: () => {
18
+ const settings = useCapability(Capabilities.SettingsStore).getStore(OBSERVABILITY_PLUGIN).value;
19
+ return /* @__PURE__ */ React.createElement(ObservabilitySettings, {
20
+ settings
21
+ });
22
+ }
23
+ }));
24
+ export {
25
+ react_surface_default as default
26
+ };
27
+ //# sourceMappingURL=react-surface-MMGCSPXQ.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/react-surface.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { contributes, useCapability, Capabilities, createSurface } from '@dxos/app-framework';\n\nimport { ObservabilitySettings, type ObservabilitySettingsProps } from '../components';\nimport { OBSERVABILITY_PLUGIN } from '../meta';\n\nexport default () =>\n contributes(\n Capabilities.ReactSurface,\n createSurface({\n id: OBSERVABILITY_PLUGIN,\n role: 'settings',\n filter: (data): data is any => data.subject === OBSERVABILITY_PLUGIN,\n component: () => {\n const settings = useCapability(Capabilities.SettingsStore).getStore<ObservabilitySettingsProps>(\n OBSERVABILITY_PLUGIN,\n )!.value;\n return <ObservabilitySettings settings={settings} />;\n },\n }),\n );\n"],
5
+ "mappings": ";;;;;;;;;;AAIA,OAAOA,WAAW;AAElB,SAASC,aAAaC,eAAeC,cAAcC,qBAAqB;AAKxE,IAAA,wBAAe,MACbC,YACEC,aAAaC,cACbC,cAAc;EACZC,IAAIC;EACJC,MAAM;EACNC,QAAQ,CAACC,SAAsBA,KAAKC,YAAYJ;EAChDK,WAAW,MAAA;AACT,UAAMC,WAAWC,cAAcX,aAAaY,aAAa,EAAEC,SACzDT,oBAAAA,EACCU;AACH,WAAO,sBAAA,cAACC,uBAAAA;MAAsBL;;EAChC;AACF,CAAA,CAAA;",
6
+ "names": ["React", "contributes", "useCapability", "Capabilities", "createSurface", "contributes", "Capabilities", "ReactSurface", "createSurface", "id", "OBSERVABILITY_PLUGIN", "role", "filter", "data", "subject", "component", "settings", "useCapability", "SettingsStore", "getStore", "value", "ObservabilitySettings"]
7
+ }
@@ -0,0 +1,26 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ ObservabilitySettingsSchema
4
+ } from "./chunk-PZRWMBEG.mjs";
5
+ import "./chunk-DF2CPSQB.mjs";
6
+ import {
7
+ OBSERVABILITY_PLUGIN
8
+ } from "./chunk-YK5MJX7W.mjs";
9
+
10
+ // packages/plugins/plugin-observability/src/capabilities/settings.ts
11
+ import { Capabilities, contributes } from "@dxos/app-framework";
12
+ import { create } from "@dxos/live-object";
13
+ var settings_default = () => {
14
+ const settings = create({
15
+ enabled: true
16
+ });
17
+ return contributes(Capabilities.Settings, {
18
+ schema: ObservabilitySettingsSchema,
19
+ prefix: OBSERVABILITY_PLUGIN,
20
+ value: settings
21
+ });
22
+ };
23
+ export {
24
+ settings_default as default
25
+ };
26
+ //# sourceMappingURL=settings-WWUULM4T.mjs.map