@dxos/plugin-observability 0.8.1-staging.391c573 → 0.8.1-staging.97aedb1
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.
- package/dist/lib/browser/app-graph-builder-OCAR3KUZ.mjs +40 -0
- package/dist/lib/browser/app-graph-builder-OCAR3KUZ.mjs.map +7 -0
- package/dist/lib/browser/chunk-6Q6ZJ3N4.mjs +123 -0
- package/dist/lib/browser/chunk-6Q6ZJ3N4.mjs.map +7 -0
- package/dist/lib/browser/{chunk-WEVYEGVJ.mjs → chunk-ECWB7E2O.mjs} +2 -2
- package/dist/lib/browser/chunk-RI4RE346.mjs +178 -0
- package/dist/lib/browser/chunk-RI4RE346.mjs.map +7 -0
- package/dist/lib/browser/{chunk-BMBRX6IW.mjs → chunk-RKH5BBR4.mjs} +1 -1
- package/dist/lib/browser/{chunk-BMBRX6IW.mjs.map → chunk-RKH5BBR4.mjs.map} +2 -2
- package/dist/lib/browser/{client-ready-4TJY6553.mjs → client-ready-LRY24QM5.mjs} +4 -5
- package/dist/lib/browser/{client-ready-4TJY6553.mjs.map → client-ready-LRY24QM5.mjs.map} +3 -3
- package/dist/lib/browser/index.mjs +30 -9
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intents-resolver-YFYWVSTV.mjs → intent-resolver-ZKNJCLDV.mjs} +34 -21
- package/dist/lib/browser/intent-resolver-ZKNJCLDV.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/react-surface-S36FDV7I.mjs +32 -0
- package/dist/lib/browser/react-surface-S36FDV7I.mjs.map +7 -0
- package/dist/lib/browser/{settings-SYYERK6Q.mjs → settings-JFZJTDH7.mjs} +4 -4
- package/dist/lib/browser/{state-LG42JNIS.mjs → state-GHBXMIQI.mjs} +3 -3
- package/dist/lib/browser/types.mjs +2 -2
- package/dist/lib/node/app-graph-builder-JPUTX4LQ.cjs +56 -0
- package/dist/lib/node/app-graph-builder-JPUTX4LQ.cjs.map +7 -0
- package/dist/lib/node/{chunk-7I7D7NBM.cjs → chunk-2ERIOZP3.cjs} +4 -4
- package/dist/lib/node/{chunk-7I7D7NBM.cjs.map → chunk-2ERIOZP3.cjs.map} +2 -2
- package/dist/lib/node/chunk-FIL4BZE2.cjs +148 -0
- package/dist/lib/node/chunk-FIL4BZE2.cjs.map +7 -0
- package/dist/lib/node/chunk-V4ZLLL5M.cjs +198 -0
- package/dist/lib/node/chunk-V4ZLLL5M.cjs.map +7 -0
- package/dist/lib/node/{chunk-X7HWBFE2.cjs → chunk-WJQ2MG7S.cjs} +7 -7
- package/dist/lib/node/{client-ready-VEHK7BIF.cjs → client-ready-KHGLQOQZ.cjs} +18 -19
- package/dist/lib/node/{client-ready-VEHK7BIF.cjs.map → client-ready-KHGLQOQZ.cjs.map} +3 -3
- package/dist/lib/node/index.cjs +43 -23
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/intent-resolver-5SANBSGX.cjs +88 -0
- package/dist/lib/node/intent-resolver-5SANBSGX.cjs.map +7 -0
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/{react-surface-ZIZ3XZRX.cjs → react-surface-MWJS6OMP.cjs} +21 -14
- package/dist/lib/node/react-surface-MWJS6OMP.cjs.map +7 -0
- package/dist/lib/node/{settings-KPALB6TN.cjs → settings-ARLOGCYU.cjs} +9 -9
- package/dist/lib/node/{state-FNK3OBM7.cjs → state-5GZLUTX7.cjs} +8 -8
- package/dist/lib/node/types.cjs +4 -4
- package/dist/lib/node/types.cjs.map +1 -1
- package/dist/lib/node-esm/app-graph-builder-RKURIIFT.mjs +41 -0
- package/dist/lib/node-esm/app-graph-builder-RKURIIFT.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-HTL7V6A2.mjs → chunk-KT5SDFBU.mjs} +1 -1
- package/dist/lib/node-esm/{chunk-HTL7V6A2.mjs.map → chunk-KT5SDFBU.mjs.map} +2 -2
- package/dist/lib/node-esm/chunk-M3MGU3DN.mjs +179 -0
- package/dist/lib/node-esm/chunk-M3MGU3DN.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-MW737PHD.mjs +124 -0
- package/dist/lib/node-esm/chunk-MW737PHD.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-KPH3N6JS.mjs → chunk-U3JYGK3O.mjs} +2 -2
- package/dist/lib/node-esm/{client-ready-HJUJPBUF.mjs → client-ready-4BUMAISA.mjs} +4 -5
- package/dist/lib/node-esm/{client-ready-HJUJPBUF.mjs.map → client-ready-4BUMAISA.mjs.map} +3 -3
- package/dist/lib/node-esm/index.mjs +30 -9
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{intents-resolver-ZX2GS5LN.mjs → intent-resolver-5EFEXLWX.mjs} +34 -21
- package/dist/lib/node-esm/intent-resolver-5EFEXLWX.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/react-surface-VLQBOZTX.mjs +33 -0
- package/dist/lib/node-esm/react-surface-VLQBOZTX.mjs.map +7 -0
- package/dist/lib/node-esm/{settings-F55M56A3.mjs → settings-765HDSFY.mjs} +4 -4
- package/dist/lib/node-esm/{state-UXRA6NQC.mjs → state-R2UVEG7B.mjs} +3 -3
- package/dist/lib/node-esm/types.mjs +2 -2
- package/dist/types/src/ObservabilityPlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts +181 -0
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -0
- package/dist/types/src/capabilities/client-ready.d.ts.map +1 -1
- package/dist/types/src/capabilities/index.d.ts +177 -0
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/{intents-resolver.d.ts → intent-resolver.d.ts} +1 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/components/FeedbackForm.d.ts +6 -0
- package/dist/types/src/components/FeedbackForm.d.ts.map +1 -0
- package/dist/types/src/components/HelpContainer.d.ts +3 -0
- package/dist/types/src/components/HelpContainer.d.ts.map +1 -0
- package/dist/types/src/components/index.d.ts +2 -0
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +1 -0
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +2 -5
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +4 -0
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types.d.ts +141 -15
- package/dist/types/src/types.d.ts.map +1 -1
- package/package.json +21 -20
- package/src/ObservabilityPlugin.ts +6 -0
- package/src/capabilities/app-graph-builder.ts +33 -0
- package/src/capabilities/client-ready.ts +0 -1
- package/src/capabilities/index.ts +2 -1
- package/src/capabilities/{intents-resolver.ts → intent-resolver.ts} +21 -15
- package/src/capabilities/react-surface.tsx +8 -4
- package/src/components/FeedbackForm.tsx +82 -0
- package/src/components/HelpContainer.tsx +23 -0
- package/src/components/index.ts +2 -0
- package/src/index.ts +1 -0
- package/src/meta.ts +2 -2
- package/src/translations.ts +5 -0
- package/src/types.ts +167 -22
- package/dist/lib/browser/chunk-M5IXMQLH.mjs +0 -58
- package/dist/lib/browser/chunk-M5IXMQLH.mjs.map +0 -7
- package/dist/lib/browser/chunk-N5A53Y7I.mjs +0 -37
- package/dist/lib/browser/chunk-N5A53Y7I.mjs.map +0 -7
- package/dist/lib/browser/intents-resolver-YFYWVSTV.mjs.map +0 -7
- package/dist/lib/browser/react-surface-3X7G3DKS.mjs +0 -24
- package/dist/lib/browser/react-surface-3X7G3DKS.mjs.map +0 -7
- package/dist/lib/node/chunk-2Q7DSBI2.cjs +0 -78
- package/dist/lib/node/chunk-2Q7DSBI2.cjs.map +0 -7
- package/dist/lib/node/chunk-MM3VMYBM.cjs +0 -65
- package/dist/lib/node/chunk-MM3VMYBM.cjs.map +0 -7
- package/dist/lib/node/intents-resolver-TWGXEG7H.cjs +0 -75
- package/dist/lib/node/intents-resolver-TWGXEG7H.cjs.map +0 -7
- package/dist/lib/node/react-surface-ZIZ3XZRX.cjs.map +0 -7
- package/dist/lib/node-esm/chunk-543EU376.mjs +0 -59
- package/dist/lib/node-esm/chunk-543EU376.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-COZQZRNU.mjs +0 -38
- package/dist/lib/node-esm/chunk-COZQZRNU.mjs.map +0 -7
- package/dist/lib/node-esm/intents-resolver-ZX2GS5LN.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-L7BIQR3B.mjs +0 -25
- package/dist/lib/node-esm/react-surface-L7BIQR3B.mjs.map +0 -7
- package/dist/types/src/capabilities/intents-resolver.d.ts.map +0 -1
- /package/dist/lib/browser/{chunk-WEVYEGVJ.mjs.map → chunk-ECWB7E2O.mjs.map} +0 -0
- /package/dist/lib/browser/{settings-SYYERK6Q.mjs.map → settings-JFZJTDH7.mjs.map} +0 -0
- /package/dist/lib/browser/{state-LG42JNIS.mjs.map → state-GHBXMIQI.mjs.map} +0 -0
- /package/dist/lib/node/{chunk-X7HWBFE2.cjs.map → chunk-WJQ2MG7S.cjs.map} +0 -0
- /package/dist/lib/node/{settings-KPALB6TN.cjs.map → settings-ARLOGCYU.cjs.map} +0 -0
- /package/dist/lib/node/{state-FNK3OBM7.cjs.map → state-5GZLUTX7.cjs.map} +0 -0
- /package/dist/lib/node-esm/{chunk-KPH3N6JS.mjs.map → chunk-U3JYGK3O.mjs.map} +0 -0
- /package/dist/lib/node-esm/{settings-F55M56A3.mjs.map → settings-765HDSFY.mjs.map} +0 -0
- /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
|
+
}
|
|
@@ -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}
|
|
5
|
-
"mappings": ";;;AAMO,IAAMA,uBAAuB;AAE7B,IAAMC,
|
|
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-
|
|
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-
|
|
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-
|
|
4
|
+
} from "./chunk-M3MGU3DN.mjs";
|
|
5
5
|
import {
|
|
6
6
|
ClientCapability,
|
|
7
7
|
ObservabilityCapabilities
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-U3JYGK3O.mjs";
|
|
9
9
|
import {
|
|
10
10
|
OBSERVABILITY_PLUGIN
|
|
11
|
-
} from "./chunk-
|
|
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-
|
|
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
|
|
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
|
|
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", "
|
|
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-
|
|
11
|
+
} from "./chunk-U3JYGK3O.mjs";
|
|
5
12
|
import {
|
|
6
13
|
OBSERVABILITY_PLUGIN,
|
|
7
14
|
meta
|
|
8
|
-
} from "./chunk-
|
|
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
|
|
13
|
-
var
|
|
14
|
-
var
|
|
15
|
-
var
|
|
16
|
-
var
|
|
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:
|
|
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
|