@dxos/plugin-observability 0.8.1-main.ae460ac → 0.8.1-staging.31c3ee1

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