@dxos/plugin-observability 0.8.4-main.3a94e84 → 0.8.4-main.3c1ae3b

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 (117) hide show
  1. package/dist/lib/browser/{app-graph-builder-DCOBBL5B.mjs → app-graph-builder-3I6HZ5AR.mjs} +12 -11
  2. package/dist/lib/browser/app-graph-builder-3I6HZ5AR.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-UUOBAWT2.mjs → chunk-EC7HTFA5.mjs} +5 -5
  4. package/dist/lib/browser/chunk-EC7HTFA5.mjs.map +7 -0
  5. package/dist/lib/browser/chunk-RLY6UZDS.mjs +123 -0
  6. package/dist/lib/browser/chunk-RLY6UZDS.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-AL5RST75.mjs → chunk-RRMLEY35.mjs} +56 -29
  8. package/dist/lib/browser/chunk-RRMLEY35.mjs.map +7 -0
  9. package/dist/lib/browser/chunk-W7QWKVS3.mjs +16 -0
  10. package/dist/lib/browser/chunk-W7QWKVS3.mjs.map +7 -0
  11. package/dist/lib/browser/{client-ready-TAII5PYS.mjs → client-ready-XT27JB7J.mjs} +15 -15
  12. package/dist/lib/browser/client-ready-XT27JB7J.mjs.map +7 -0
  13. package/dist/lib/browser/index.mjs +21 -49
  14. package/dist/lib/browser/index.mjs.map +4 -4
  15. package/dist/lib/browser/{intent-resolver-5SA443WX.mjs → intent-resolver-QRKGLMMT.mjs} +10 -10
  16. package/dist/lib/browser/intent-resolver-QRKGLMMT.mjs.map +7 -0
  17. package/dist/lib/browser/meta.json +1 -1
  18. package/dist/lib/browser/{react-surface-GQC3M7XY.mjs → react-surface-F5GY7AAC.mjs} +11 -11
  19. package/dist/lib/browser/react-surface-F5GY7AAC.mjs.map +7 -0
  20. package/dist/lib/browser/{settings-BG3S45SS.mjs → settings-SAFMS6TG.mjs} +6 -6
  21. package/dist/lib/browser/{settings-BG3S45SS.mjs.map → settings-SAFMS6TG.mjs.map} +1 -1
  22. package/dist/lib/browser/{state-VIOQS2IL.mjs → state-FJD6K3ZZ.mjs} +7 -7
  23. package/dist/lib/browser/state-FJD6K3ZZ.mjs.map +7 -0
  24. package/dist/lib/browser/types/index.mjs +2 -2
  25. package/dist/lib/node-esm/{app-graph-builder-6JT2RPVM.mjs → app-graph-builder-KH2GA6G7.mjs} +12 -11
  26. package/dist/lib/node-esm/app-graph-builder-KH2GA6G7.mjs.map +7 -0
  27. package/dist/lib/node-esm/chunk-AVJTLRX5.mjs +18 -0
  28. package/dist/lib/node-esm/chunk-AVJTLRX5.mjs.map +7 -0
  29. package/dist/lib/node-esm/{chunk-JTKEM7PT.mjs → chunk-HACSZKXD.mjs} +5 -5
  30. package/dist/lib/node-esm/chunk-HACSZKXD.mjs.map +7 -0
  31. package/dist/lib/node-esm/chunk-JJBWCCSZ.mjs +124 -0
  32. package/dist/lib/node-esm/chunk-JJBWCCSZ.mjs.map +7 -0
  33. package/dist/lib/node-esm/{chunk-5W5V4TVX.mjs → chunk-T5OWY73X.mjs} +56 -29
  34. package/dist/lib/node-esm/chunk-T5OWY73X.mjs.map +7 -0
  35. package/dist/lib/node-esm/{client-ready-KER2HNME.mjs → client-ready-AXZXR5EX.mjs} +15 -15
  36. package/dist/lib/node-esm/client-ready-AXZXR5EX.mjs.map +7 -0
  37. package/dist/lib/node-esm/index.mjs +21 -49
  38. package/dist/lib/node-esm/index.mjs.map +4 -4
  39. package/dist/lib/node-esm/{intent-resolver-YYBRI4TZ.mjs → intent-resolver-WXZEG7SP.mjs} +10 -10
  40. package/dist/lib/node-esm/intent-resolver-WXZEG7SP.mjs.map +7 -0
  41. package/dist/lib/node-esm/meta.json +1 -1
  42. package/dist/lib/node-esm/{react-surface-ZYMR7TMY.mjs → react-surface-DNASLRFA.mjs} +11 -11
  43. package/dist/lib/node-esm/react-surface-DNASLRFA.mjs.map +7 -0
  44. package/dist/lib/node-esm/{settings-HSLQO3OC.mjs → settings-22NXJMTF.mjs} +6 -6
  45. package/dist/lib/node-esm/{settings-HSLQO3OC.mjs.map → settings-22NXJMTF.mjs.map} +1 -1
  46. package/dist/lib/node-esm/{state-J2WS6L64.mjs → state-XNBMNLB7.mjs} +7 -7
  47. package/dist/lib/node-esm/state-XNBMNLB7.mjs.map +7 -0
  48. package/dist/lib/node-esm/types/index.mjs +2 -2
  49. package/dist/types/src/ObservabilityPlugin.d.ts +3 -2
  50. package/dist/types/src/ObservabilityPlugin.d.ts.map +1 -1
  51. package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -1
  52. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  53. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  54. package/dist/types/src/capabilities/client-ready.d.ts +1 -1
  55. package/dist/types/src/capabilities/client-ready.d.ts.map +1 -1
  56. package/dist/types/src/capabilities/index.d.ts +6 -6
  57. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  58. package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
  59. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  60. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  61. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  62. package/dist/types/src/capabilities/settings.d.ts +1 -1
  63. package/dist/types/src/capabilities/state.d.ts +1 -1
  64. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  65. package/dist/types/src/components/FeedbackForm.d.ts +3 -3
  66. package/dist/types/src/components/FeedbackForm.d.ts.map +1 -1
  67. package/dist/types/src/components/FeedbackForm.stories.d.ts +34 -0
  68. package/dist/types/src/components/FeedbackForm.stories.d.ts.map +1 -0
  69. package/dist/types/src/components/HelpContainer.d.ts.map +1 -1
  70. package/dist/types/src/components/ObservabilitySettings.d.ts +1 -1
  71. package/dist/types/src/components/ObservabilitySettings.d.ts.map +1 -1
  72. package/dist/types/src/events.d.ts.map +1 -1
  73. package/dist/types/src/meta.d.ts +0 -1
  74. package/dist/types/src/meta.d.ts.map +1 -1
  75. package/dist/types/src/translations.d.ts +3 -2
  76. package/dist/types/src/translations.d.ts.map +1 -1
  77. package/dist/types/src/types/schema.d.ts +112 -112
  78. package/dist/types/src/types/schema.d.ts.map +1 -1
  79. package/dist/types/tsconfig.tsbuildinfo +1 -1
  80. package/package.json +33 -32
  81. package/src/ObservabilityPlugin.ts +52 -49
  82. package/src/capabilities/app-graph-builder.ts +12 -10
  83. package/src/capabilities/capabilities.ts +4 -3
  84. package/src/capabilities/client-ready.ts +14 -13
  85. package/src/capabilities/intent-resolver.ts +5 -4
  86. package/src/capabilities/react-surface.tsx +5 -5
  87. package/src/capabilities/state.ts +3 -2
  88. package/src/components/FeedbackForm.stories.tsx +33 -0
  89. package/src/components/FeedbackForm.tsx +13 -69
  90. package/src/components/HelpContainer.tsx +10 -8
  91. package/src/components/ObservabilitySettings.tsx +21 -20
  92. package/src/events.ts +3 -3
  93. package/src/meta.ts +6 -3
  94. package/src/translations.ts +3 -2
  95. package/src/types/schema.ts +30 -26
  96. package/dist/lib/browser/app-graph-builder-DCOBBL5B.mjs.map +0 -7
  97. package/dist/lib/browser/chunk-57RVSKYP.mjs +0 -13
  98. package/dist/lib/browser/chunk-57RVSKYP.mjs.map +0 -7
  99. package/dist/lib/browser/chunk-AL5RST75.mjs.map +0 -7
  100. package/dist/lib/browser/chunk-UUOBAWT2.mjs.map +0 -7
  101. package/dist/lib/browser/chunk-YVKMVVGP.mjs +0 -175
  102. package/dist/lib/browser/chunk-YVKMVVGP.mjs.map +0 -7
  103. package/dist/lib/browser/client-ready-TAII5PYS.mjs.map +0 -7
  104. package/dist/lib/browser/intent-resolver-5SA443WX.mjs.map +0 -7
  105. package/dist/lib/browser/react-surface-GQC3M7XY.mjs.map +0 -7
  106. package/dist/lib/browser/state-VIOQS2IL.mjs.map +0 -7
  107. package/dist/lib/node-esm/app-graph-builder-6JT2RPVM.mjs.map +0 -7
  108. package/dist/lib/node-esm/chunk-5W5V4TVX.mjs.map +0 -7
  109. package/dist/lib/node-esm/chunk-7XR7KMAA.mjs +0 -15
  110. package/dist/lib/node-esm/chunk-7XR7KMAA.mjs.map +0 -7
  111. package/dist/lib/node-esm/chunk-JTKEM7PT.mjs.map +0 -7
  112. package/dist/lib/node-esm/chunk-TYZLSIA4.mjs +0 -176
  113. package/dist/lib/node-esm/chunk-TYZLSIA4.mjs.map +0 -7
  114. package/dist/lib/node-esm/client-ready-KER2HNME.mjs.map +0 -7
  115. package/dist/lib/node-esm/intent-resolver-YYBRI4TZ.mjs.map +0 -7
  116. package/dist/lib/node-esm/react-surface-ZYMR7TMY.mjs.map +0 -7
  117. package/dist/lib/node-esm/state-J2WS6L64.mjs.map +0 -7
@@ -1,18 +1,19 @@
1
1
  import {
2
- OBSERVABILITY_PLUGIN
3
- } from "./chunk-57RVSKYP.mjs";
2
+ meta
3
+ } from "./chunk-W7QWKVS3.mjs";
4
4
 
5
5
  // src/capabilities/app-graph-builder.ts
6
- import { Rx } from "@effect-rx/rx-react";
7
- import { Option, pipe } from "effect";
6
+ import { Atom } from "@effect-atom/atom-react";
7
+ import * as Function from "effect/Function";
8
+ import * as Option from "effect/Option";
8
9
  import { Capabilities, contributes } from "@dxos/app-framework";
9
- import { createExtension, ROOT_ID } from "@dxos/plugin-graph";
10
+ import { ROOT_ID, createExtension } from "@dxos/plugin-graph";
10
11
  var ATTENDABLE_PATH_SEPARATOR = "~";
11
12
  var DECK_COMPANION_TYPE = "dxos.org/plugin/deck/deck-companion";
12
- var app_graph_builder_default = (context) => contributes(Capabilities.AppGraphBuilder, [
13
+ var app_graph_builder_default = ((_context) => contributes(Capabilities.AppGraphBuilder, [
13
14
  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) => {
15
+ id: `${meta.id}/help`,
16
+ connector: (node) => Atom.make((get) => Function.pipe(get(node), Option.flatMap((node2) => node2.id === ROOT_ID ? Option.some(node2) : Option.none()), Option.map((node2) => {
16
17
  return [
17
18
  {
18
19
  id: [
@@ -25,7 +26,7 @@ var app_graph_builder_default = (context) => contributes(Capabilities.AppGraphBu
25
26
  label: [
26
27
  "help label",
27
28
  {
28
- ns: OBSERVABILITY_PLUGIN
29
+ ns: meta.id
29
30
  }
30
31
  ],
31
32
  icon: "ph--question--regular",
@@ -36,8 +37,8 @@ var app_graph_builder_default = (context) => contributes(Capabilities.AppGraphBu
36
37
  ];
37
38
  }), Option.getOrElse(() => [])))
38
39
  })
39
- ]);
40
+ ]));
40
41
  export {
41
42
  app_graph_builder_default as default
42
43
  };
43
- //# sourceMappingURL=app-graph-builder-DCOBBL5B.mjs.map
44
+ //# sourceMappingURL=app-graph-builder-3I6HZ5AR.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 { Atom } from '@effect-atom/atom-react';\nimport * as Function from 'effect/Function';\nimport * as Option from 'effect/Option';\n\nimport { Capabilities, type PluginContext, contributes } from '@dxos/app-framework';\nimport { ROOT_ID, createExtension } from '@dxos/plugin-graph';\n\nimport { meta } from '../meta';\n\n// NOTE: Copied from @dxos/plugin-deck to break circular dependency.\nconst ATTENDABLE_PATH_SEPARATOR = '~';\n\nconst DECK_COMPANION_TYPE = 'dxos.org/plugin/deck/deck-companion';\n\nexport default (_context: PluginContext) =>\n contributes(Capabilities.AppGraphBuilder, [\n createExtension({\n id: `${meta.id}/help`,\n connector: (node) =>\n Atom.make((get) =>\n Function.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: meta.id }],\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,YAAY;AACrB,YAAYC,cAAc;AAC1B,YAAYC,YAAY;AAExB,SAASC,cAAkCC,mBAAmB;AAC9D,SAASC,SAASC,uBAAuB;AAKzC,IAAMC,4BAA4B;AAElC,IAAMC,sBAAsB;AAE5B,IAAA,6BAAe,CAACC,aACdC,YAAYC,aAAaC,iBAAiB;EACxCC,gBAAgB;IACdC,IAAI,GAAGC,KAAKD,EAAE;IACdE,WAAW,CAACC,SACVC,KAAKC,KAAK,CAACC,QACAC,cACPD,IAAIH,IAAAA,GACGK,eAAQ,CAACL,UAAUA,MAAKH,OAAOS,UAAiBC,YAAKP,KAAAA,IAAeQ,YAAI,CAAA,GACxEC,WAAI,CAACT,UAAAA;AACV,aAAO;QACL;UACEH,IAAI;YAACG,MAAKH;YAAI;YAAQa,KAAKpB,yBAAAA;UAC3BqB,MAAMpB;UACNqB,MAAM;UACNC,YAAY;YACVC,OAAO;cAAC;cAAc;gBAAEC,IAAIjB,KAAKD;cAAG;;YACpCmB,MAAM;YACNC,aAAa;YACbC,UAAU;UACZ;QACF;;IAEJ,CAAA,GACOC,iBAAU,MAAM,CAAA,CAAE,CAAA,CAAA;EAGjC,CAAA;CACD;",
6
+ "names": ["Atom", "Function", "Option", "Capabilities", "contributes", "ROOT_ID", "createExtension", "ATTENDABLE_PATH_SEPARATOR", "DECK_COMPANION_TYPE", "_context", "contributes", "Capabilities", "AppGraphBuilder", "createExtension", "id", "meta", "connector", "node", "Atom", "make", "get", "pipe", "flatMap", "ROOT_ID", "some", "none", "map", "join", "type", "data", "properties", "label", "ns", "icon", "disposition", "position", "getOrElse"]
7
+ }
@@ -1,12 +1,12 @@
1
1
  import {
2
- OBSERVABILITY_PLUGIN
3
- } from "./chunk-57RVSKYP.mjs";
2
+ meta
3
+ } from "./chunk-W7QWKVS3.mjs";
4
4
 
5
5
  // src/capabilities/capabilities.ts
6
6
  import { defineCapability } from "@dxos/app-framework";
7
7
  (function(ObservabilityCapabilities2) {
8
- ObservabilityCapabilities2.State = defineCapability(`${OBSERVABILITY_PLUGIN}/capability/state`);
9
- ObservabilityCapabilities2.Observability = defineCapability(`${OBSERVABILITY_PLUGIN}/capability/observability`);
8
+ ObservabilityCapabilities2.State = defineCapability(`${meta.id}/capability/state`);
9
+ ObservabilityCapabilities2.Observability = defineCapability(`${meta.id}/capability/observability`);
10
10
  })(ObservabilityCapabilities || (ObservabilityCapabilities = {}));
11
11
  var ClientCapability = defineCapability("dxos.org/plugin/client/capability/client");
12
12
  var ObservabilityCapabilities;
@@ -15,4 +15,4 @@ export {
15
15
  ClientCapability,
16
16
  ObservabilityCapabilities
17
17
  };
18
- //# sourceMappingURL=chunk-UUOBAWT2.mjs.map
18
+ //# sourceMappingURL=chunk-EC7HTFA5.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/capabilities.ts"],
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 { meta } from '../meta';\n\nexport namespace ObservabilityCapabilities {\n export type State = {\n group?: string;\n notified?: boolean;\n };\n export const State = defineCapability<State>(`${meta.id}/capability/state`);\n\n export const Observability = defineCapability<Observability>(`${meta.id}/capability/observability`);\n}\n\n// NOTE: This is cloned from the client plugin to avoid circular dependencies.\n// TODO(burdon): Figure out how to share defs.\nexport const ClientCapability = defineCapability<Client>('dxos.org/plugin/client/capability/client');\n"],
5
+ "mappings": ";;;;;AAIA,SAASA,wBAAwB;UAMhBC,4BAAAA;6BAKFC,QAAQC,iBAAwB,GAAGC,KAAKC,EAAE,mBAAmB;6BAE7DC,gBAAgBH,iBAAgC,GAAGC,KAAKC,EAAE,2BAA2B;AACpG,GARiBJ,8BAAAA,4BAAAA,CAAAA,EAAAA;AAYV,IAAMM,mBAAmBJ,iBAAyB,0CAAA;;",
6
+ "names": ["defineCapability", "ObservabilityCapabilities", "State", "defineCapability", "meta", "id", "Observability", "ClientCapability"]
7
+ }
@@ -0,0 +1,123 @@
1
+ import {
2
+ ObservabilityAction,
3
+ UserFeedback
4
+ } from "./chunk-RRMLEY35.mjs";
5
+ import {
6
+ meta
7
+ } from "./chunk-W7QWKVS3.mjs";
8
+
9
+ // src/components/FeedbackForm.tsx
10
+ import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
11
+ import React from "react";
12
+ import { useTranslation } from "@dxos/react-ui";
13
+ import { Form } from "@dxos/react-ui-form";
14
+ var FeedbackForm = ({ onSave }) => {
15
+ var _effect = _useSignals();
16
+ try {
17
+ const { t } = useTranslation(meta.id);
18
+ return /* @__PURE__ */ React.createElement(Form.Root, {
19
+ schema: UserFeedback,
20
+ onSave
21
+ }, /* @__PURE__ */ React.createElement(Form.Content, null, /* @__PURE__ */ React.createElement(Form.FieldSet, null), /* @__PURE__ */ React.createElement(Form.Submit, {
22
+ icon: "ph--paper-plane-tilt--regular",
23
+ label: t("send feedback label")
24
+ })));
25
+ } finally {
26
+ _effect.f();
27
+ }
28
+ };
29
+
30
+ // src/components/HelpContainer.tsx
31
+ import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
32
+ import * as Function from "effect/Function";
33
+ import React2, { useCallback } from "react";
34
+ import { LayoutAction, chain, createIntent } from "@dxos/app-framework";
35
+ import { useIntentDispatcher } from "@dxos/app-framework/react";
36
+ var HelpContainer = () => {
37
+ var _effect = _useSignals2();
38
+ try {
39
+ const { dispatchPromise: dispatch } = useIntentDispatcher();
40
+ const handleSave = useCallback((values) => dispatch(Function.pipe(createIntent(ObservabilityAction.CaptureUserFeedback, values), chain(LayoutAction.UpdateComplementary, {
41
+ part: "complementary",
42
+ options: {
43
+ state: "collapsed"
44
+ }
45
+ }), chain(LayoutAction.AddToast, {
46
+ part: "toast",
47
+ subject: {
48
+ id: `${meta.id}/feedback-success`,
49
+ icon: "ph--paper-plane-tilt--regular",
50
+ duration: 3e3,
51
+ title: [
52
+ "feedback toast label",
53
+ {
54
+ ns: meta.id
55
+ }
56
+ ],
57
+ description: [
58
+ "feedback toast description",
59
+ {
60
+ ns: meta.id
61
+ }
62
+ ],
63
+ closeLabel: [
64
+ "close label",
65
+ {
66
+ ns: "os"
67
+ }
68
+ ]
69
+ }
70
+ }))), [
71
+ dispatch
72
+ ]);
73
+ return /* @__PURE__ */ React2.createElement(FeedbackForm, {
74
+ onSave: handleSave
75
+ });
76
+ } finally {
77
+ _effect.f();
78
+ }
79
+ };
80
+
81
+ // src/components/ObservabilitySettings.tsx
82
+ import { useSignals as _useSignals3 } from "@preact-signals/safe-react/tracking";
83
+ import * as Schema from "effect/Schema";
84
+ import React3 from "react";
85
+ import { createIntent as createIntent2 } from "@dxos/app-framework";
86
+ import { useIntentDispatcher as useIntentDispatcher2 } from "@dxos/app-framework/react";
87
+ import { Input, Message, useTranslation as useTranslation2 } from "@dxos/react-ui";
88
+ import { ControlGroup, ControlItemInput, ControlPage, ControlSection } from "@dxos/react-ui-form";
89
+ var ObservabilitySettingsSchema = Schema.mutable(Schema.Struct({
90
+ enabled: Schema.Boolean
91
+ }));
92
+ var ObservabilitySettings = ({ settings }) => {
93
+ var _effect = _useSignals3();
94
+ try {
95
+ const { t } = useTranslation2(meta.id);
96
+ const { dispatchPromise: dispatch } = useIntentDispatcher2();
97
+ return /* @__PURE__ */ React3.createElement(ControlPage, null, /* @__PURE__ */ React3.createElement(ControlSection, {
98
+ title: t("settings title", {
99
+ ns: meta.id
100
+ })
101
+ }, /* @__PURE__ */ React3.createElement(Message.Root, {
102
+ valence: "info",
103
+ classNames: "container-max-width mbe-cardSpacingBlock"
104
+ }, /* @__PURE__ */ React3.createElement(Message.Content, null, t("observability description"))), /* @__PURE__ */ React3.createElement(ControlGroup, null, /* @__PURE__ */ React3.createElement(ControlItemInput, {
105
+ title: t("observability enabled label")
106
+ }, /* @__PURE__ */ React3.createElement(Input.Switch, {
107
+ checked: settings.enabled,
108
+ onCheckedChange: (checked) => dispatch(createIntent2(ObservabilityAction.Toggle, {
109
+ state: !!checked
110
+ }))
111
+ })))));
112
+ } finally {
113
+ _effect.f();
114
+ }
115
+ };
116
+
117
+ export {
118
+ FeedbackForm,
119
+ HelpContainer,
120
+ ObservabilitySettingsSchema,
121
+ ObservabilitySettings
122
+ };
123
+ //# sourceMappingURL=chunk-RLY6UZDS.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/FeedbackForm.tsx", "../../../src/components/HelpContainer.tsx", "../../../src/components/ObservabilitySettings.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { useTranslation } from '@dxos/react-ui';\nimport { Form, type FormRootProps } from '@dxos/react-ui-form';\n\nimport { meta } from '../meta';\nimport { UserFeedback } from '../types';\n\nexport type FeedbackFormProps = Pick<FormRootProps<UserFeedback>, 'onSave'>;\n\nexport const FeedbackForm = ({ onSave }: FeedbackFormProps) => {\n const { t } = useTranslation(meta.id);\n\n return (\n <Form.Root schema={UserFeedback} onSave={onSave}>\n <Form.Content>\n <Form.FieldSet />\n <Form.Submit icon='ph--paper-plane-tilt--regular' label={t('send feedback label')} />\n </Form.Content>\n </Form.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Function from 'effect/Function';\nimport React, { useCallback } from 'react';\n\nimport { LayoutAction, chain, createIntent } from '@dxos/app-framework';\nimport { useIntentDispatcher } from '@dxos/app-framework/react';\n\nimport { meta } from '../meta';\nimport { ObservabilityAction, type UserFeedback } from '../types';\n\nimport { FeedbackForm } from './FeedbackForm';\n\nexport const HelpContainer = () => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n\n const handleSave = useCallback(\n (values: UserFeedback) =>\n dispatch(\n Function.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: `${meta.id}/feedback-success`,\n icon: 'ph--paper-plane-tilt--regular',\n duration: 3000,\n title: ['feedback toast label', { ns: meta.id }],\n description: ['feedback toast description', { ns: meta.id }],\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 * as Schema from 'effect/Schema';\nimport React from 'react';\n\nimport { createIntent } from '@dxos/app-framework';\nimport { useIntentDispatcher } from '@dxos/app-framework/react';\nimport { Input, Message, useTranslation } from '@dxos/react-ui';\nimport { ControlGroup, ControlItemInput, ControlPage, ControlSection } from '@dxos/react-ui-form';\n\nimport { meta } 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(meta.id);\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n\n return (\n <ControlPage>\n <ControlSection title={t('settings title', { ns: meta.id })}>\n <Message.Root valence='info' classNames='container-max-width mbe-cardSpacingBlock'>\n <Message.Content>{t('observability description')}</Message.Content>\n </Message.Root>\n <ControlGroup>\n <ControlItemInput title={t('observability enabled label')}>\n <Input.Switch\n checked={settings.enabled}\n onCheckedChange={(checked) => dispatch(createIntent(ObservabilityAction.Toggle, { state: !!checked }))}\n />\n </ControlItemInput>\n </ControlGroup>\n </ControlSection>\n </ControlPage>\n );\n};\n"],
5
+ "mappings": ";;;;;;;;;;AAIA,OAAOA,WAAW;AAElB,SAASC,sBAAsB;AAC/B,SAASC,YAAgC;AAOlC,IAAMC,eAAe,CAAC,EAAEC,OAAM,MAAqB;;;AACxD,UAAM,EAAEC,EAAC,IAAKC,eAAeC,KAAKC,EAAE;AAEpC,WACE,sBAAA,cAACC,KAAKC,MAAI;MAACC,QAAQC;MAAcR;OAC/B,sBAAA,cAACK,KAAKI,SAAO,MACX,sBAAA,cAACJ,KAAKK,UAAQ,IAAA,GACd,sBAAA,cAACL,KAAKM,QAAM;MAACC,MAAK;MAAgCC,OAAOZ,EAAE,qBAAA;;;;;AAInE;;;;ACrBA,YAAYa,cAAc;AAC1B,OAAOC,UAASC,mBAAmB;AAEnC,SAASC,cAAcC,OAAOC,oBAAoB;AAClD,SAASC,2BAA2B;AAO7B,IAAMC,gBAAgB,MAAA;;;AAC3B,UAAM,EAAEC,iBAAiBC,SAAQ,IAAKC,oBAAAA;AAEtC,UAAMC,aAAaC,YACjB,CAACC,WACCJ,SACWK,cACPC,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,KAAKD,EAAE;QACdE,MAAM;QACNC,UAAU;QACVC,OAAO;UAAC;UAAwB;YAAEC,IAAIJ,KAAKD;UAAG;;QAC9CM,aAAa;UAAC;UAA8B;YAAED,IAAIJ,KAAKD;UAAG;;QAC1DO,YAAY;UAAC;UAAe;YAAEF,IAAI;UAAK;;MACzC;IACF,CAAA,CAAA,CAAA,GAGN;MAACtB;KAAS;AAGZ,WAAO,gBAAAyB,OAAA,cAACC,cAAAA;MAAaC,QAAQzB;;;;;AAC/B;;;;ACrCA,YAAY0B,YAAY;AACxB,OAAOC,YAAW;AAElB,SAASC,gBAAAA,qBAAoB;AAC7B,SAASC,uBAAAA,4BAA2B;AACpC,SAASC,OAAOC,SAASC,kBAAAA,uBAAsB;AAC/C,SAASC,cAAcC,kBAAkBC,aAAaC,sBAAsB;AAKrE,IAAMC,8BAAqCC,eACzCC,cAAO;EACZC,SAAgBC;AAKlB,CAAA,CAAA;AAKK,IAAMC,wBAAwB,CAAC,EAAEC,SAAQ,MAA4C;;;AAC1F,UAAM,EAAEC,EAAC,IAAKC,gBAAeC,KAAKC,EAAE;AACpC,UAAM,EAAEC,iBAAiBC,SAAQ,IAAKC,qBAAAA;AAEtC,WACE,gBAAAC,OAAA,cAACC,aAAAA,MACC,gBAAAD,OAAA,cAACE,gBAAAA;MAAeC,OAAOV,EAAE,kBAAkB;QAAEW,IAAIT,KAAKC;MAAG,CAAA;OACvD,gBAAAI,OAAA,cAACK,QAAQC,MAAI;MAACC,SAAQ;MAAOC,YAAW;OACtC,gBAAAR,OAAA,cAACK,QAAQI,SAAO,MAAEhB,EAAE,2BAAA,CAAA,CAAA,GAEtB,gBAAAO,OAAA,cAACU,cAAAA,MACC,gBAAAV,OAAA,cAACW,kBAAAA;MAAiBR,OAAOV,EAAE,6BAAA;OACzB,gBAAAO,OAAA,cAACY,MAAMC,QAAM;MACXC,SAAStB,SAASH;MAClB0B,iBAAiB,CAACD,YAAYhB,SAASkB,cAAaC,oBAAoBC,QAAQ;QAAEC,OAAO,CAAC,CAACL;MAAQ,CAAA,CAAA;;;;;AAOjH;",
6
+ "names": ["React", "useTranslation", "Form", "FeedbackForm", "onSave", "t", "useTranslation", "meta", "id", "Form", "Root", "schema", "UserFeedback", "Content", "FieldSet", "Submit", "icon", "label", "Function", "React", "useCallback", "LayoutAction", "chain", "createIntent", "useIntentDispatcher", "HelpContainer", "dispatchPromise", "dispatch", "useIntentDispatcher", "handleSave", "useCallback", "values", "pipe", "createIntent", "ObservabilityAction", "CaptureUserFeedback", "chain", "LayoutAction", "UpdateComplementary", "part", "options", "state", "AddToast", "subject", "id", "meta", "icon", "duration", "title", "ns", "description", "closeLabel", "React", "FeedbackForm", "onSave", "Schema", "React", "createIntent", "useIntentDispatcher", "Input", "Message", "useTranslation", "ControlGroup", "ControlItemInput", "ControlPage", "ControlSection", "ObservabilitySettingsSchema", "mutable", "Struct", "enabled", "Boolean", "ObservabilitySettings", "settings", "t", "useTranslation", "meta", "id", "dispatchPromise", "dispatch", "useIntentDispatcher", "React", "ControlPage", "ControlSection", "title", "ns", "Message", "Root", "valence", "classNames", "Content", "ControlGroup", "ControlItemInput", "Input", "Switch", "checked", "onCheckedChange", "createIntent", "ObservabilityAction", "Toggle", "state"]
7
+ }
@@ -1,18 +1,44 @@
1
1
  import {
2
2
  meta
3
- } from "./chunk-57RVSKYP.mjs";
3
+ } from "./chunk-W7QWKVS3.mjs";
4
4
 
5
5
  // src/types/schema.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
- });
6
+ import * as Schema from "effect/Schema";
7
+ import { Format, Key } from "@dxos/echo";
8
+
9
+ // src/translations.ts
10
+ var translations = [
11
+ {
12
+ "en-US": {
13
+ [meta.id]: {
14
+ "plugin name": "Telemetry",
15
+ "settings title": "Telemetry settings",
16
+ "observability toast label": "Privacy Notice",
17
+ "observability toast description": "Composer collects usage and performance metrics to improve the product. No user data is collected.",
18
+ "observability toast action label": "Settings",
19
+ "observability toast action alt": "Open settings to learn more or to disable.",
20
+ "observability toast close label": "Okay",
21
+ "observability enabled label": "Enable telemetry",
22
+ // TODO: Add link about telemetry privacy. Make it clearer that user data is not collected.
23
+ "observability description": "When enabled, basic usage data will used to improve the product. This may include performance metrics, error logs, and usage data. No personally identifiable information, other than your public key, is included with this data and no private data ever leaves your devices.",
24
+ "help label": "Feedback & Support",
25
+ "feedback textarea label": "Feedback",
26
+ "feedback textarea placeholder": "Please enter your feedback, technical issue, or feature request.",
27
+ "send feedback label": "Send Feedback",
28
+ "feedback toast label": "Thank you for your feedback!",
29
+ "feedback toast description": "We will review your feedback and get back to you as soon as possible."
30
+ }
31
+ }
32
+ }
33
+ ];
34
+
35
+ // src/types/schema.ts
36
+ var t = translations[0]["en-US"][meta.id];
14
37
  var UserFeedback = Schema.Struct({
15
- message: Schema.String.pipe(nonEmpty("Feedback"), maxLength("Feedback", 32768))
38
+ message: Format.Text.pipe(Schema.nonEmptyString(), Schema.maxLength(4096), Schema.annotations({
39
+ title: t["feedback textarea label"],
40
+ description: t["feedback textarea placeholder"]
41
+ }))
16
42
  });
17
43
  (function(ObservabilityAction2) {
18
44
  class Toggle extends Schema.TaggedClass()(`${meta.id}/action/toggle`, {
@@ -68,76 +94,76 @@ var UserFeedback = Schema.Struct({
68
94
  }), Schema.Struct({
69
95
  name: Schema.Literal("space.create"),
70
96
  properties: Schema.Struct({
71
- spaceId: Type.SpaceId
97
+ spaceId: Key.SpaceId
72
98
  })
73
99
  }), Schema.Struct({
74
100
  name: Schema.Literal("space.join"),
75
101
  properties: Schema.Struct({
76
- spaceId: Type.SpaceId
102
+ spaceId: Key.SpaceId
77
103
  })
78
104
  }), Schema.Struct({
79
105
  name: Schema.Literal("space.limit"),
80
106
  properties: Schema.Struct({
81
- spaceId: Type.SpaceId
107
+ spaceId: Key.SpaceId
82
108
  })
83
109
  }), Schema.Struct({
84
110
  name: Schema.Literal("space.lock"),
85
111
  properties: Schema.Struct({
86
- spaceId: Type.SpaceId
112
+ spaceId: Key.SpaceId
87
113
  })
88
114
  }), Schema.Struct({
89
115
  name: Schema.Literal("space.migrate"),
90
116
  properties: Schema.Struct({
91
- spaceId: Type.SpaceId,
117
+ spaceId: Key.SpaceId,
92
118
  targetVersion: Schema.optional(Schema.String),
93
119
  version: Schema.optional(Schema.String)
94
120
  })
95
121
  }), Schema.Struct({
96
122
  name: Schema.Literal("space.schema.use"),
97
123
  properties: Schema.Struct({
98
- spaceId: Type.SpaceId,
124
+ spaceId: Key.SpaceId,
99
125
  typename: Schema.String
100
126
  })
101
127
  }), Schema.Struct({
102
128
  name: Schema.Literal("space.schema.add"),
103
129
  properties: Schema.Struct({
104
- spaceId: Type.SpaceId,
130
+ spaceId: Key.SpaceId,
105
131
  objectId: Schema.String,
106
132
  typename: Schema.String
107
133
  })
108
134
  }), Schema.Struct({
109
135
  name: Schema.Literal("space.object.add"),
110
136
  properties: Schema.Struct({
111
- spaceId: Type.SpaceId,
137
+ spaceId: Key.SpaceId,
112
138
  objectId: Schema.String,
113
139
  typename: Schema.optional(Schema.String)
114
140
  })
115
141
  }), Schema.Struct({
116
142
  name: Schema.Literal("space.share"),
117
143
  properties: Schema.Struct({
118
- spaceId: Type.SpaceId
144
+ spaceId: Key.SpaceId
119
145
  })
120
146
  }), Schema.Struct({
121
147
  name: Schema.Literal("space.unlock"),
122
148
  properties: Schema.Struct({
123
- spaceId: Type.SpaceId
149
+ spaceId: Key.SpaceId
124
150
  })
125
151
  }), Schema.Struct({
126
152
  name: Schema.Literal("threads.create"),
127
153
  properties: Schema.Struct({
128
- spaceId: Type.SpaceId,
154
+ spaceId: Key.SpaceId,
129
155
  threadId: Schema.String
130
156
  })
131
157
  }), Schema.Struct({
132
158
  name: Schema.Literal("threads.delete"),
133
159
  properties: Schema.Struct({
134
- spaceId: Type.SpaceId,
160
+ spaceId: Key.SpaceId,
135
161
  threadId: Schema.String
136
162
  })
137
163
  }), Schema.Struct({
138
164
  name: Schema.Literal("threads.message.add"),
139
165
  properties: Schema.Struct({
140
- spaceId: Type.SpaceId,
166
+ spaceId: Key.SpaceId,
141
167
  threadId: Schema.String,
142
168
  threadLength: Schema.Number,
143
169
  messageId: Schema.String,
@@ -146,34 +172,34 @@ var UserFeedback = Schema.Struct({
146
172
  }), Schema.Struct({
147
173
  name: Schema.Literal("threads.message.delete"),
148
174
  properties: Schema.Struct({
149
- spaceId: Type.SpaceId,
175
+ spaceId: Key.SpaceId,
150
176
  threadId: Schema.String,
151
177
  messageId: Schema.String
152
178
  })
153
179
  }), Schema.Struct({
154
180
  name: Schema.Literal("threads.message.undo-delete"),
155
181
  properties: Schema.Struct({
156
- spaceId: Type.SpaceId,
182
+ spaceId: Key.SpaceId,
157
183
  threadId: Schema.String,
158
184
  messageId: Schema.String
159
185
  })
160
186
  }), Schema.Struct({
161
187
  name: Schema.Literal("threads.message.update"),
162
188
  properties: Schema.Struct({
163
- spaceId: Type.SpaceId,
189
+ spaceId: Key.SpaceId,
164
190
  messageId: Schema.String,
165
191
  messageLength: Schema.Number
166
192
  })
167
193
  }), Schema.Struct({
168
194
  name: Schema.Literal("threads.toggle-resolved"),
169
195
  properties: Schema.Struct({
170
- spaceId: Type.SpaceId,
196
+ spaceId: Key.SpaceId,
171
197
  threadId: Schema.String
172
198
  })
173
199
  }), Schema.Struct({
174
200
  name: Schema.Literal("threads.undo-delete"),
175
201
  properties: Schema.Struct({
176
- spaceId: Type.SpaceId,
202
+ spaceId: Key.SpaceId,
177
203
  threadId: Schema.String
178
204
  })
179
205
  })),
@@ -185,7 +211,8 @@ var UserFeedback = Schema.Struct({
185
211
  var ObservabilityAction;
186
212
 
187
213
  export {
214
+ translations,
188
215
  UserFeedback,
189
216
  ObservabilityAction
190
217
  };
191
- //# sourceMappingURL=chunk-AL5RST75.mjs.map
218
+ //# sourceMappingURL=chunk-RRMLEY35.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/types/schema.ts", "../../../src/translations.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { Format, Key } from '@dxos/echo';\n\nimport { meta } from '../meta';\nimport { translations } from '../translations';\n\nconst t = translations[0]['en-US'][meta.id];\n\nexport const UserFeedback = Schema.Struct({\n message: Format.Text.pipe(\n Schema.nonEmptyString(),\n Schema.maxLength(4_096),\n Schema.annotations({\n title: t['feedback textarea label'],\n description: t['feedback textarea placeholder'],\n }),\n ),\n});\n\nexport type UserFeedback = Schema.Schema.Type<typeof UserFeedback>;\n\nexport namespace ObservabilityAction {\n export class Toggle extends Schema.TaggedClass<Toggle>()(`${meta.id}/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 `${meta.id}/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>()(`${meta.id}/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>()(`${meta.id}/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: Key.SpaceId,\n }),\n }),\n Schema.Struct({\n name: Schema.Literal('space.join'),\n properties: Schema.Struct({\n spaceId: Key.SpaceId,\n }),\n }),\n Schema.Struct({\n name: Schema.Literal('space.limit'),\n properties: Schema.Struct({\n spaceId: Key.SpaceId,\n }),\n }),\n Schema.Struct({\n name: Schema.Literal('space.lock'),\n properties: Schema.Struct({\n spaceId: Key.SpaceId,\n }),\n }),\n Schema.Struct({\n name: Schema.Literal('space.migrate'),\n properties: Schema.Struct({\n spaceId: Key.SpaceId,\n targetVersion: Schema.optional(Schema.String),\n version: Schema.optional(Schema.String),\n }),\n }),\n Schema.Struct({\n name: Schema.Literal('space.schema.use'),\n properties: Schema.Struct({\n spaceId: Key.SpaceId,\n typename: Schema.String,\n }),\n }),\n Schema.Struct({\n name: Schema.Literal('space.schema.add'),\n properties: Schema.Struct({\n spaceId: Key.SpaceId,\n objectId: Schema.String,\n typename: Schema.String,\n }),\n }),\n Schema.Struct({\n name: Schema.Literal('space.object.add'),\n properties: Schema.Struct({\n spaceId: Key.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: Key.SpaceId,\n }),\n }),\n Schema.Struct({\n name: Schema.Literal('space.unlock'),\n properties: Schema.Struct({\n spaceId: Key.SpaceId,\n }),\n }),\n Schema.Struct({\n name: Schema.Literal('threads.create'),\n properties: Schema.Struct({\n spaceId: Key.SpaceId,\n threadId: Schema.String,\n }),\n }),\n Schema.Struct({\n name: Schema.Literal('threads.delete'),\n properties: Schema.Struct({\n spaceId: Key.SpaceId,\n threadId: Schema.String,\n }),\n }),\n Schema.Struct({\n name: Schema.Literal('threads.message.add'),\n properties: Schema.Struct({\n spaceId: Key.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: Key.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: Key.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: Key.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: Key.SpaceId,\n threadId: Schema.String,\n }),\n }),\n Schema.Struct({\n name: Schema.Literal('threads.undo-delete'),\n properties: Schema.Struct({\n spaceId: Key.SpaceId,\n threadId: Schema.String,\n }),\n }),\n ),\n output: Schema.Void,\n }) {}\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Resource } from '@dxos/react-ui';\n\nimport { meta } from './meta';\n\nexport const translations = [\n {\n 'en-US': {\n [meta.id]: {\n 'plugin name': 'Telemetry',\n 'settings title': 'Telemetry settings',\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 used to improve the product. This may include performance metrics, error logs, and usage data. No personally identifiable information, other than your public key, is included with this data and no private data ever leaves your devices.',\n\n 'help label': 'Feedback & Support',\n 'feedback textarea label': 'Feedback',\n 'feedback textarea placeholder': 'Please enter your feedback, technical issue, or feature request.',\n 'send feedback label': 'Send Feedback',\n 'feedback toast label': 'Thank you for your feedback!',\n 'feedback toast description': 'We will review your feedback and get back to you as soon as possible.',\n },\n },\n },\n] as const satisfies Resource[];\n"],
5
+ "mappings": "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",
6
+ "names": ["Schema", "Format", "Key", "translations", "meta", "id", "t", "translations", "meta", "id", "UserFeedback", "Struct", "message", "Format", "Text", "pipe", "nonEmptyString", "maxLength", "annotations", "title", "description", "ObservabilityAction", "Toggle", "TaggedClass", "input", "state", "optional", "Boolean", "output", "CaptureUserFeedback", "Void", "BaseSendEvent", "name", "String", "properties", "Object", "SendEvent", "Union", "Literal", "subjectId", "typename", "loadDuration", "Number", "plugin", "enabled", "spaceId", "Key", "SpaceId", "targetVersion", "version", "objectId", "threadId", "threadLength", "messageId", "messageLength"]
7
+ }
@@ -0,0 +1,16 @@
1
+ // src/meta.ts
2
+ import { trim } from "@dxos/util";
3
+ var meta = {
4
+ id: "dxos.org/plugin/observability",
5
+ name: "Telemetry",
6
+ description: trim`
7
+ Application observability and telemetry collection for monitoring performance and usage patterns.
8
+ Track metrics, logs, and traces for system health and analytics.
9
+ `,
10
+ icon: "ph--eye--regular"
11
+ };
12
+
13
+ export {
14
+ meta
15
+ };
16
+ //# sourceMappingURL=chunk-W7QWKVS3.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/meta.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\nimport { trim } from '@dxos/util';\n\nexport const meta: PluginMeta = {\n id: 'dxos.org/plugin/observability',\n name: 'Telemetry',\n description: trim`\n Application observability and telemetry collection for monitoring performance and usage patterns.\n Track metrics, logs, and traces for system health and analytics.\n `,\n icon: 'ph--eye--regular',\n};\n"],
5
+ "mappings": ";AAKA,SAASA,YAAY;AAEd,IAAMC,OAAmB;EAC9BC,IAAI;EACJC,MAAM;EACNC,aAAaC;;;;EAIbC,MAAM;AACR;",
6
+ "names": ["trim", "meta", "id", "name", "description", "trim", "icon"]
7
+ }
@@ -1,18 +1,18 @@
1
1
  import {
2
2
  ObservabilityAction
3
- } from "./chunk-AL5RST75.mjs";
3
+ } from "./chunk-RRMLEY35.mjs";
4
4
  import {
5
5
  ClientCapability,
6
6
  ObservabilityCapabilities
7
- } from "./chunk-UUOBAWT2.mjs";
7
+ } from "./chunk-EC7HTFA5.mjs";
8
8
  import {
9
- OBSERVABILITY_PLUGIN
10
- } from "./chunk-57RVSKYP.mjs";
9
+ meta
10
+ } from "./chunk-W7QWKVS3.mjs";
11
11
 
12
12
  // src/capabilities/client-ready.ts
13
- import { Capabilities, contributes, createIntent, LayoutAction, SettingsAction } from "@dxos/app-framework";
13
+ import { Capabilities, LayoutAction, SettingsAction, contributes, createIntent } from "@dxos/app-framework";
14
14
  import { setupTelemetryListeners } from "@dxos/observability";
15
- var client_ready_default = async ({ context, namespace, observability }) => {
15
+ var client_ready_default = (async ({ context, namespace, observability }) => {
16
16
  const manager = context.getCapability(Capabilities.PluginManager);
17
17
  const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);
18
18
  const state = context.getCapability(ObservabilityCapabilities.State);
@@ -24,17 +24,17 @@ var client_ready_default = async ({ context, namespace, observability }) => {
24
24
  await dispatch(createIntent(LayoutAction.AddToast, {
25
25
  part: "toast",
26
26
  subject: {
27
- id: `${OBSERVABILITY_PLUGIN}/notice`,
27
+ id: `${meta.id}/notice`,
28
28
  title: [
29
29
  "observability toast label",
30
30
  {
31
- ns: OBSERVABILITY_PLUGIN
31
+ ns: meta.id
32
32
  }
33
33
  ],
34
34
  description: [
35
35
  "observability toast description",
36
36
  {
37
- ns: OBSERVABILITY_PLUGIN
37
+ ns: meta.id
38
38
  }
39
39
  ],
40
40
  duration: Infinity,
@@ -42,23 +42,23 @@ var client_ready_default = async ({ context, namespace, observability }) => {
42
42
  actionLabel: [
43
43
  "observability toast action label",
44
44
  {
45
- ns: OBSERVABILITY_PLUGIN
45
+ ns: meta.id
46
46
  }
47
47
  ],
48
48
  actionAlt: [
49
49
  "observability toast action alt",
50
50
  {
51
- ns: OBSERVABILITY_PLUGIN
51
+ ns: meta.id
52
52
  }
53
53
  ],
54
54
  closeLabel: [
55
55
  "observability toast close label",
56
56
  {
57
- ns: OBSERVABILITY_PLUGIN
57
+ ns: meta.id
58
58
  }
59
59
  ],
60
60
  onAction: () => dispatch(createIntent(SettingsAction.Open, {
61
- plugin: OBSERVABILITY_PLUGIN
61
+ plugin: meta.id
62
62
  }))
63
63
  }
64
64
  }));
@@ -95,8 +95,8 @@ var client_ready_default = async ({ context, namespace, observability }) => {
95
95
  cleanup();
96
96
  await observability.close();
97
97
  });
98
- };
98
+ });
99
99
  export {
100
100
  client_ready_default as default
101
101
  };
102
- //# sourceMappingURL=client-ready-TAII5PYS.mjs.map
102
+ //# sourceMappingURL=client-ready-XT27JB7J.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 LayoutAction,\n type PluginContext,\n SettingsAction,\n contributes,\n createIntent,\n} from '@dxos/app-framework';\nimport { type Observability, setupTelemetryListeners } from '@dxos/observability';\n\nimport { meta } from '../meta';\nimport { ObservabilityAction } from '../types';\n\nimport { ClientCapability, ObservabilityCapabilities } from './capabilities';\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: `${meta.id}/notice`,\n title: ['observability toast label', { ns: meta.id }],\n description: ['observability toast description', { ns: meta.id }],\n duration: Infinity,\n icon: 'ph--info--regular',\n actionLabel: ['observability toast action label', { ns: meta.id }],\n actionAlt: ['observability toast action alt', { ns: meta.id }],\n closeLabel: ['observability toast close label', { ns: meta.id }],\n onAction: () => dispatch(createIntent(SettingsAction.Open, { plugin: meta.id })),\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,cAEAC,gBACAC,aACAC,oBACK;AACP,SAA6BC,+BAA+B;AAa5D,IAAA,wBAAe,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,KAAKD,EAAE;UACdE,OAAO;YAAC;YAA6B;cAAEC,IAAIF,KAAKD;YAAG;;UACnDI,aAAa;YAAC;YAAmC;cAAED,IAAIF,KAAKD;YAAG;;UAC/DK,UAAUC;UACVC,MAAM;UACNC,aAAa;YAAC;YAAoC;cAAEL,IAAIF,KAAKD;YAAG;;UAChES,WAAW;YAAC;YAAkC;cAAEN,IAAIF,KAAKD;YAAG;;UAC5DU,YAAY;YAAC;YAAmC;cAAEP,IAAIF,KAAKD;YAAG;;UAC9DW,UAAU,MAAMlC,SAASkB,aAAaiB,eAAeC,MAAM;YAAEC,QAAQb,KAAKD;UAAG,CAAA,CAAA;QAC/E;MACF,CAAA,CAAA;AAGFrB,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", "LayoutAction", "SettingsAction", "contributes", "createIntent", "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", "meta", "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
+ }