@dxos/plugin-observability 0.10.0 → 0.11.0

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 (109) hide show
  1. package/dist/lib/ObservabilityPlugin.mjs +48 -0
  2. package/dist/lib/ObservabilityPlugin.mjs.map +1 -0
  3. package/dist/lib/ObservabilityPlugin.node.mjs +14 -0
  4. package/dist/lib/ObservabilityPlugin.node.mjs.map +1 -0
  5. package/dist/lib/ObservabilityPlugin.workerd.mjs +14 -0
  6. package/dist/lib/ObservabilityPlugin.workerd.mjs.map +1 -0
  7. package/dist/lib/capabilities.mjs +12 -0
  8. package/dist/lib/capabilities.mjs.map +1 -0
  9. package/dist/lib/chunk-ObservabilitySettings.mjs +41 -0
  10. package/dist/lib/chunk-ObservabilitySettings.mjs.map +1 -0
  11. package/dist/lib/chunk-client-ready.mjs +99 -0
  12. package/dist/lib/chunk-client-ready.mjs.map +1 -0
  13. package/dist/lib/{neutral/chunk-PZDS6BXC.mjs → chunk-meta.mjs} +14 -23
  14. package/dist/lib/chunk-meta.mjs.map +1 -0
  15. package/dist/lib/chunk-operation-handler.mjs +11 -0
  16. package/dist/lib/chunk-operation-handler.mjs.map +1 -0
  17. package/dist/lib/chunk-privacy-notice.mjs +41 -0
  18. package/dist/lib/chunk-privacy-notice.mjs.map +1 -0
  19. package/dist/lib/chunk-react-surface.mjs +17 -0
  20. package/dist/lib/chunk-react-surface.mjs.map +1 -0
  21. package/dist/lib/chunk-send-event.mjs +14 -0
  22. package/dist/lib/chunk-send-event.mjs.map +1 -0
  23. package/dist/lib/chunk-settings.mjs +23 -0
  24. package/dist/lib/chunk-settings.mjs.map +1 -0
  25. package/dist/lib/chunk-state.mjs +25 -0
  26. package/dist/lib/chunk-state.mjs.map +1 -0
  27. package/dist/lib/chunk-toggle.mjs +31 -0
  28. package/dist/lib/chunk-toggle.mjs.map +1 -0
  29. package/dist/lib/chunk-types.mjs +89 -0
  30. package/dist/lib/chunk-types.mjs.map +1 -0
  31. package/dist/lib/containers.mjs +7 -0
  32. package/dist/lib/containers.mjs.map +1 -0
  33. package/dist/lib/index.mjs +3 -0
  34. package/dist/lib/meta.mjs +2 -0
  35. package/dist/lib/operations.mjs +7 -0
  36. package/dist/lib/operations.mjs.map +1 -0
  37. package/dist/lib/plugin.mjs +9 -0
  38. package/dist/lib/plugin.mjs.map +1 -0
  39. package/dist/lib/translations.mjs +16 -0
  40. package/dist/lib/translations.mjs.map +1 -0
  41. package/dist/lib/types.mjs +2 -0
  42. package/dist/types/src/capabilities/client-ready.d.ts +1 -1
  43. package/dist/types/src/capabilities/operation-handler.d.ts +1 -1
  44. package/dist/types/src/capabilities/privacy-notice.d.ts +1 -1
  45. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  46. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  47. package/dist/types/src/capabilities/settings.d.ts +1 -1
  48. package/dist/types/src/capabilities/state.d.ts +1 -1
  49. package/dist/types/src/containers/ObservabilitySettings/ObservabilitySettings.d.ts +5 -3
  50. package/dist/types/src/containers/ObservabilitySettings/ObservabilitySettings.d.ts.map +1 -1
  51. package/dist/types/src/containers/ObservabilitySettings/ObservabilitySettings.stories.d.ts +6 -1
  52. package/dist/types/src/containers/ObservabilitySettings/ObservabilitySettings.stories.d.ts.map +1 -1
  53. package/dist/types/src/types/ObservabilityCapabilities.d.ts +1 -1
  54. package/dist/types/src/types/ObservabilityCapabilities.d.ts.map +1 -1
  55. package/dist/types/tsconfig.tsbuildinfo +1 -1
  56. package/package.json +32 -32
  57. package/src/capabilities/react-surface.ts +25 -0
  58. package/src/containers/ObservabilitySettings/ObservabilitySettings.stories.tsx +29 -7
  59. package/src/containers/ObservabilitySettings/ObservabilitySettings.tsx +16 -6
  60. package/src/types/ObservabilityCapabilities.ts +1 -1
  61. package/dist/lib/neutral/ObservabilityPlugin.mjs +0 -63
  62. package/dist/lib/neutral/ObservabilityPlugin.mjs.map +0 -7
  63. package/dist/lib/neutral/ObservabilityPlugin.node.mjs +0 -22
  64. package/dist/lib/neutral/ObservabilityPlugin.node.mjs.map +0 -7
  65. package/dist/lib/neutral/ObservabilityPlugin.workerd.mjs +0 -22
  66. package/dist/lib/neutral/ObservabilityPlugin.workerd.mjs.map +0 -7
  67. package/dist/lib/neutral/ObservabilitySettings-6CEN3VYH.mjs +0 -31
  68. package/dist/lib/neutral/ObservabilitySettings-6CEN3VYH.mjs.map +0 -7
  69. package/dist/lib/neutral/capabilities/index.mjs +0 -19
  70. package/dist/lib/neutral/capabilities/index.mjs.map +0 -7
  71. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +0 -10
  72. package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +0 -7
  73. package/dist/lib/neutral/chunk-PGTCGVCX.mjs +0 -8
  74. package/dist/lib/neutral/chunk-PGTCGVCX.mjs.map +0 -7
  75. package/dist/lib/neutral/chunk-PZDS6BXC.mjs.map +0 -7
  76. package/dist/lib/neutral/chunk-QR2GBZZK.mjs +0 -109
  77. package/dist/lib/neutral/chunk-QR2GBZZK.mjs.map +0 -7
  78. package/dist/lib/neutral/client-ready-DN3L5DIM.mjs +0 -50
  79. package/dist/lib/neutral/client-ready-DN3L5DIM.mjs.map +0 -7
  80. package/dist/lib/neutral/containers/index.mjs +0 -9
  81. package/dist/lib/neutral/containers/index.mjs.map +0 -7
  82. package/dist/lib/neutral/index.mjs +0 -18
  83. package/dist/lib/neutral/index.mjs.map +0 -7
  84. package/dist/lib/neutral/meta.json +0 -1
  85. package/dist/lib/neutral/meta.mjs +0 -8
  86. package/dist/lib/neutral/meta.mjs.map +0 -7
  87. package/dist/lib/neutral/operation-handler-4WWRXOHR.mjs +0 -13
  88. package/dist/lib/neutral/operation-handler-4WWRXOHR.mjs.map +0 -7
  89. package/dist/lib/neutral/operations/index.mjs +0 -8
  90. package/dist/lib/neutral/operations/index.mjs.map +0 -7
  91. package/dist/lib/neutral/plugin.mjs +0 -16
  92. package/dist/lib/neutral/plugin.mjs.map +0 -7
  93. package/dist/lib/neutral/privacy-notice-I5PEPWGW.mjs +0 -66
  94. package/dist/lib/neutral/privacy-notice-I5PEPWGW.mjs.map +0 -7
  95. package/dist/lib/neutral/react-surface-GX2JB3AY.mjs +0 -35
  96. package/dist/lib/neutral/react-surface-GX2JB3AY.mjs.map +0 -7
  97. package/dist/lib/neutral/send-event-B6HNLGKK.mjs +0 -20
  98. package/dist/lib/neutral/send-event-B6HNLGKK.mjs.map +0 -7
  99. package/dist/lib/neutral/settings-647UAWX4.mjs +0 -30
  100. package/dist/lib/neutral/settings-647UAWX4.mjs.map +0 -7
  101. package/dist/lib/neutral/state-WZ55UZ6I.mjs +0 -27
  102. package/dist/lib/neutral/state-WZ55UZ6I.mjs.map +0 -7
  103. package/dist/lib/neutral/toggle-76BUKEAI.mjs +0 -45
  104. package/dist/lib/neutral/toggle-76BUKEAI.mjs.map +0 -7
  105. package/dist/lib/neutral/translations.mjs +0 -25
  106. package/dist/lib/neutral/translations.mjs.map +0 -7
  107. package/dist/lib/neutral/types/index.mjs +0 -14
  108. package/dist/lib/neutral/types/index.mjs.map +0 -7
  109. package/src/capabilities/react-surface.tsx +0 -35
@@ -0,0 +1,48 @@
1
+ import { ActivationEvent, ActivationEvents, Capability, Plugin } from "@dxos/app-framework";
2
+ import { meta } from "#meta";
3
+ import { AppActivationEvents, AppPlugin } from "@dxos/app-toolkit";
4
+ import * as Effect from "effect/Effect";
5
+ import { ClientReady, ObservabilitySettings, ObservabilityState, OperationHandler, PrivacyNotice, ReactSurface } from "#capabilities";
6
+ import { translations } from "#translations";
7
+ import { ObservabilityCapabilities, ObservabilityEvents } from "#types";
8
+ //#region src/ObservabilityPlugin.ts
9
+ var ObservabilityPlugin = Plugin.define(meta).pipe(AppPlugin.addSurfaceModule({ activate: ReactSurface }), AppPlugin.addTranslationsModule({ translations }), Plugin.addModule(({ observability }) => ({
10
+ id: "observability",
11
+ activatesOn: ActivationEvents.Startup,
12
+ activate: () => Effect.gen(function* () {
13
+ const obs = yield* Effect.tryPromise(() => observability());
14
+ return Capability.contributes(ObservabilityCapabilities.Observability, obs);
15
+ })
16
+ })), Plugin.addModule({
17
+ activatesOn: AppActivationEvents.SetupSettings,
18
+ activate: ObservabilitySettings
19
+ }), Plugin.addModule(({ namespace }) => ({
20
+ id: Capability.getModuleTag(ObservabilityState),
21
+ activatesOn: ActivationEvents.Startup,
22
+ firesAfterActivation: [ObservabilityEvents.StateReady],
23
+ activate: () => ObservabilityState({ namespace })
24
+ })), Plugin.addModule(({ namespace }) => ({
25
+ id: "namespace",
26
+ activatesOn: ActivationEvents.Startup,
27
+ activate: () => Effect.succeed(Capability.contributes(ObservabilityCapabilities.Namespace, namespace))
28
+ })), Plugin.addModule(({ downloadLogs }) => ({
29
+ id: "log-downloader",
30
+ activatesOn: ActivationEvents.Startup,
31
+ activate: () => Effect.succeed(downloadLogs !== void 0 ? Capability.contributes(ObservabilityCapabilities.LogDownloader, downloadLogs) : [])
32
+ })), AppPlugin.addOperationHandlerModule({ activate: OperationHandler }), Plugin.addModule({
33
+ activatesOn: ActivationEvent.make("org.dxos.plugin.client.event.identityCreated"),
34
+ activate: PrivacyNotice
35
+ }), Plugin.addModule(({ namespace, observability }) => ({
36
+ id: Capability.getModuleTag(ClientReady),
37
+ activatesOn: ActivationEvent.allOf(ActivationEvents.ProcessManagerReady, ObservabilityEvents.StateReady, ObservabilityEvents.ClientReadyEvent),
38
+ activate: () => Effect.gen(function* () {
39
+ return yield* ClientReady({
40
+ namespace,
41
+ observability: yield* Effect.tryPromise(() => observability())
42
+ });
43
+ })
44
+ })), Plugin.make);
45
+ //#endregion
46
+ export { ObservabilityPlugin, ObservabilityPlugin as default };
47
+
48
+ //# sourceMappingURL=ObservabilityPlugin.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ObservabilityPlugin.mjs","names":[],"sources":["../../src/ObservabilityPlugin.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { ActivationEvent, ActivationEvents, Capability, Plugin } from '@dxos/app-framework';\nimport { AppActivationEvents, AppPlugin } from '@dxos/app-toolkit';\nimport { type Observability } from '@dxos/observability';\n\nimport {\n ClientReady,\n ObservabilitySettings,\n ObservabilityState,\n OperationHandler,\n PrivacyNotice,\n ReactSurface,\n} from '#capabilities';\nimport { meta } from '#meta';\nimport { translations } from '#translations';\nimport { ObservabilityCapabilities, ObservabilityEvents } from '#types';\n\nexport type ObservabilityPluginOptions = {\n namespace: string;\n observability: () => Promise<Observability.Observability>;\n /**\n * Optional callback invoked by the help/feedback UI to download captured logs.\n * When omitted the \"Download logs\" action is hidden.\n */\n downloadLogs?: () => void | Promise<void>;\n};\n\nexport const ObservabilityPlugin = Plugin.define<ObservabilityPluginOptions>(meta).pipe(\n AppPlugin.addSurfaceModule({ activate: ReactSurface }),\n AppPlugin.addTranslationsModule({ translations }),\n Plugin.addModule(({ observability }) => ({\n id: 'observability',\n activatesOn: ActivationEvents.Startup,\n activate: () =>\n Effect.gen(function* () {\n const obs = yield* Effect.tryPromise(() => observability());\n return Capability.contributes(ObservabilityCapabilities.Observability, obs);\n }),\n })),\n Plugin.addModule({\n activatesOn: AppActivationEvents.SetupSettings,\n activate: ObservabilitySettings,\n }),\n Plugin.addModule(({ namespace }) => ({\n id: Capability.getModuleTag(ObservabilityState),\n activatesOn: ActivationEvents.Startup,\n firesAfterActivation: [ObservabilityEvents.StateReady],\n activate: () => ObservabilityState({ namespace }),\n })),\n Plugin.addModule(({ namespace }) => ({\n id: 'namespace',\n activatesOn: ActivationEvents.Startup,\n activate: () => Effect.succeed(Capability.contributes(ObservabilityCapabilities.Namespace, namespace)),\n })),\n Plugin.addModule(({ downloadLogs }) => ({\n id: 'log-downloader',\n activatesOn: ActivationEvents.Startup,\n activate: () =>\n Effect.succeed(\n downloadLogs !== undefined ? Capability.contributes(ObservabilityCapabilities.LogDownloader, downloadLogs) : [],\n ),\n })),\n AppPlugin.addOperationHandlerModule({ activate: OperationHandler }),\n Plugin.addModule({\n activatesOn: ActivationEvent.make('org.dxos.plugin.client.event.identityCreated'),\n activate: PrivacyNotice,\n }),\n Plugin.addModule(({ namespace, observability }) => ({\n id: Capability.getModuleTag(ClientReady),\n activatesOn: ActivationEvent.allOf(\n ActivationEvents.ProcessManagerReady,\n ObservabilityEvents.StateReady,\n ObservabilityEvents.ClientReadyEvent,\n ),\n activate: () =>\n Effect.gen(function* () {\n const obs = yield* Effect.tryPromise(() => observability());\n return yield* ClientReady({ namespace, observability: obs });\n }),\n })),\n Plugin.make,\n);\n\nexport default ObservabilityPlugin;\n"],"mappings":";;;;;;;;AAgCA,IAAa,sBAAsB,OAAO,OAAmC,IAAI,CAAC,CAAC,KACjF,UAAU,iBAAiB,EAAE,UAAU,aAAa,CAAC,GACrD,UAAU,sBAAsB,EAAE,aAAa,CAAC,GAChD,OAAO,WAAW,EAAE,qBAAqB;CACvC,IAAI;CACJ,aAAa,iBAAiB;CAC9B,gBACE,OAAO,IAAI,aAAa;EACtB,MAAM,MAAM,OAAO,OAAO,iBAAiB,cAAc,CAAC;EAC1D,OAAO,WAAW,YAAY,0BAA0B,eAAe,GAAG;CAC5E,CAAC;AACL,EAAE,GACF,OAAO,UAAU;CACf,aAAa,oBAAoB;CACjC,UAAU;AACZ,CAAC,GACD,OAAO,WAAW,EAAE,iBAAiB;CACnC,IAAI,WAAW,aAAa,kBAAkB;CAC9C,aAAa,iBAAiB;CAC9B,sBAAsB,CAAC,oBAAoB,UAAU;CACrD,gBAAgB,mBAAmB,EAAE,UAAU,CAAC;AAClD,EAAE,GACF,OAAO,WAAW,EAAE,iBAAiB;CACnC,IAAI;CACJ,aAAa,iBAAiB;CAC9B,gBAAgB,OAAO,QAAQ,WAAW,YAAY,0BAA0B,WAAW,SAAS,CAAC;AACvG,EAAE,GACF,OAAO,WAAW,EAAE,oBAAoB;CACtC,IAAI;CACJ,aAAa,iBAAiB;CAC9B,gBACE,OAAO,QACL,iBAAiB,KAAA,IAAY,WAAW,YAAY,0BAA0B,eAAe,YAAY,IAAI,CAAC,CAChH;AACJ,EAAE,GACF,UAAU,0BAA0B,EAAE,UAAU,iBAAiB,CAAC,GAClE,OAAO,UAAU;CACf,aAAa,gBAAgB,KAAK,8CAA8C;CAChF,UAAU;AACZ,CAAC,GACD,OAAO,WAAW,EAAE,WAAW,qBAAqB;CAClD,IAAI,WAAW,aAAa,WAAW;CACvC,aAAa,gBAAgB,MAC3B,iBAAiB,qBACjB,oBAAoB,YACpB,oBAAoB,gBACtB;CACA,gBACE,OAAO,IAAI,aAAa;EAEtB,OAAO,OAAO,YAAY;GAAE;GAAW,eAAe,OADnC,OAAO,iBAAiB,cAAc,CAAC;EACA,CAAC;CAC7D,CAAC;AACL,EAAE,GACF,OAAO,IACT"}
@@ -0,0 +1,14 @@
1
+ import { Capabilities, Capability, Plugin } from "@dxos/app-framework";
2
+ import { meta } from "#meta";
3
+ import { AppPlugin } from "@dxos/app-toolkit";
4
+ import { Operation, OperationHandlerSet } from "@dxos/compute";
5
+ import * as Effect from "effect/Effect";
6
+ import { ObservabilityOperation } from "#types";
7
+ //#region src/ObservabilityPlugin.node.ts
8
+ var ObservabilityPlugin = Plugin.define(meta).pipe(AppPlugin.addOperationHandlerModule({ activate: Capability.lazy("OperationHandler", () => Promise.resolve({ default: Capability.makeModule(Effect.fnUntraced(function* () {
9
+ return Capability.contributes(Capabilities.OperationHandler, OperationHandlerSet.make(Operation.withHandler(ObservabilityOperation.SendEvent, () => Effect.void)));
10
+ })) })) }), Plugin.make);
11
+ //#endregion
12
+ export { ObservabilityPlugin, ObservabilityPlugin as default };
13
+
14
+ //# sourceMappingURL=ObservabilityPlugin.node.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ObservabilityPlugin.node.mjs","names":[],"sources":["../../src/ObservabilityPlugin.node.ts"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities, Capability, Plugin } from '@dxos/app-framework';\nimport { AppPlugin } from '@dxos/app-toolkit';\nimport { Operation, OperationHandlerSet } from '@dxos/compute';\n\nimport { meta } from '#meta';\nimport { ObservabilityOperation } from '#types';\n\n// TODO(wittjosiah): Hook up.\nexport const ObservabilityPlugin = Plugin.define(meta).pipe(\n AppPlugin.addOperationHandlerModule({\n activate: Capability.lazy('OperationHandler', () =>\n Promise.resolve({\n default: Capability.makeModule<OperationHandlerSet.OperationHandlerSet>(\n Effect.fnUntraced(function* () {\n return Capability.contributes(\n Capabilities.OperationHandler,\n OperationHandlerSet.make(Operation.withHandler(ObservabilityOperation.SendEvent, () => Effect.void)),\n );\n }),\n ),\n }),\n ),\n }),\n Plugin.make,\n);\n\nexport default ObservabilityPlugin;\n"],"mappings":";;;;;;;AAcA,IAAa,sBAAsB,OAAO,OAAO,IAAI,CAAC,CAAC,KACrD,UAAU,0BAA0B,EAClC,UAAU,WAAW,KAAK,0BACxB,QAAQ,QAAQ,EACd,SAAS,WAAW,WAClB,OAAO,WAAW,aAAa;CAC7B,OAAO,WAAW,YAChB,aAAa,kBACb,oBAAoB,KAAK,UAAU,YAAY,uBAAuB,iBAAiB,OAAO,IAAI,CAAC,CACrG;AACF,CAAC,CACH,EACF,CAAC,CACH,EACF,CAAC,GACD,OAAO,IACT"}
@@ -0,0 +1,14 @@
1
+ import { Capabilities, Capability, Plugin } from "@dxos/app-framework";
2
+ import { meta } from "#meta";
3
+ import { AppPlugin } from "@dxos/app-toolkit";
4
+ import { Operation, OperationHandlerSet } from "@dxos/compute";
5
+ import * as Effect from "effect/Effect";
6
+ import { ObservabilityOperation } from "#types";
7
+ //#region src/ObservabilityPlugin.workerd.ts
8
+ var ObservabilityPlugin = Plugin.define(meta).pipe(AppPlugin.addOperationHandlerModule({ activate: Capability.lazy("OperationHandler", () => Promise.resolve({ default: Capability.makeModule(Effect.fnUntraced(function* () {
9
+ return Capability.contributes(Capabilities.OperationHandler, OperationHandlerSet.make(Operation.withHandler(ObservabilityOperation.SendEvent, () => Effect.void)));
10
+ })) })) }), Plugin.make);
11
+ //#endregion
12
+ export { ObservabilityPlugin, ObservabilityPlugin as default };
13
+
14
+ //# sourceMappingURL=ObservabilityPlugin.workerd.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ObservabilityPlugin.workerd.mjs","names":[],"sources":["../../src/ObservabilityPlugin.workerd.ts"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities, Capability, Plugin } from '@dxos/app-framework';\nimport { AppPlugin } from '@dxos/app-toolkit';\nimport { Operation, OperationHandlerSet } from '@dxos/compute';\n\nimport { meta } from '#meta';\nimport { ObservabilityOperation } from '#types';\n\nexport const ObservabilityPlugin = Plugin.define(meta).pipe(\n AppPlugin.addOperationHandlerModule({\n activate: Capability.lazy('OperationHandler', () =>\n Promise.resolve({\n default: Capability.makeModule<OperationHandlerSet.OperationHandlerSet>(\n Effect.fnUntraced(function* () {\n return Capability.contributes(\n Capabilities.OperationHandler,\n OperationHandlerSet.make(Operation.withHandler(ObservabilityOperation.SendEvent, () => Effect.void)),\n );\n }),\n ),\n }),\n ),\n }),\n Plugin.make,\n);\n\nexport default ObservabilityPlugin;\n"],"mappings":";;;;;;;AAaA,IAAa,sBAAsB,OAAO,OAAO,IAAI,CAAC,CAAC,KACrD,UAAU,0BAA0B,EAClC,UAAU,WAAW,KAAK,0BACxB,QAAQ,QAAQ,EACd,SAAS,WAAW,WAClB,OAAO,WAAW,aAAa;CAC7B,OAAO,WAAW,YAChB,aAAa,kBACb,oBAAoB,KAAK,UAAU,YAAY,uBAAuB,iBAAiB,OAAO,IAAI,CAAC,CACrG;AACF,CAAC,CACH,EACF,CAAC,CACH,EACF,CAAC,GACD,OAAO,IACT"}
@@ -0,0 +1,12 @@
1
+ import { Capability } from "@dxos/app-framework";
2
+ //#region src/capabilities/index.ts
3
+ var ClientReady = Capability.lazy("ClientReady", () => import("./chunk-client-ready.mjs"));
4
+ var PrivacyNotice = Capability.lazy("PrivacyNotice", () => import("./chunk-privacy-notice.mjs"));
5
+ var OperationHandler = Capability.lazy("OperationHandler", () => import("./chunk-operation-handler.mjs"));
6
+ var ReactSurface = Capability.lazy("ReactSurface", () => import("./chunk-react-surface.mjs"));
7
+ var ObservabilitySettings = Capability.lazy("ObservabilitySettings", () => import("./chunk-settings.mjs"));
8
+ var ObservabilityState = Capability.lazy("ObservabilityState", () => import("./chunk-state.mjs"));
9
+ //#endregion
10
+ export { ClientReady, ObservabilitySettings, ObservabilityState, OperationHandler, PrivacyNotice, ReactSurface };
11
+
12
+ //# sourceMappingURL=capabilities.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.mjs","names":[],"sources":["../../src/capabilities/index.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capability } from '@dxos/app-framework';\nimport { OperationHandlerSet } from '@dxos/compute';\n\nimport type { ClientReadyOptions } from './client-ready';\n\nexport const ClientReady = Capability.lazy<ClientReadyOptions>('ClientReady', () => import('./client-ready'));\nexport const PrivacyNotice = Capability.lazy('PrivacyNotice', () => import('./privacy-notice'));\nexport const OperationHandler = Capability.lazy<OperationHandlerSet.OperationHandlerSet>(\n 'OperationHandler',\n () => import('./operation-handler'),\n);\nexport const ReactSurface = Capability.lazy('ReactSurface', () => import('./react-surface'));\nexport const ObservabilitySettings = Capability.lazy('ObservabilitySettings', () => import('./settings'));\nexport const ObservabilityState = Capability.lazy('ObservabilityState', () => import('./state'));\n"],"mappings":";;AASA,IAAa,cAAc,WAAW,KAAyB,qBAAqB,OAAO,2BAAiB;AAC5G,IAAa,gBAAgB,WAAW,KAAK,uBAAuB,OAAO,6BAAmB;AAC9F,IAAa,mBAAmB,WAAW,KACzC,0BACM,OAAO,gCACf;AACA,IAAa,eAAe,WAAW,KAAK,sBAAsB,OAAO,4BAAkB;AAC3F,IAAa,wBAAwB,WAAW,KAAK,+BAA+B,OAAO,uBAAa;AACxG,IAAa,qBAAqB,WAAW,KAAK,4BAA4B,OAAO,oBAAU"}
@@ -0,0 +1,41 @@
1
+ import { meta } from "#meta";
2
+ import { ObservabilityOperation, Settings } from "#types";
3
+ import "react";
4
+ import { useOperationInvoker, useSettingsState } from "@dxos/app-framework/ui";
5
+ import { Message, useTranslation } from "@dxos/react-ui";
6
+ import { Form } from "@dxos/react-ui-form";
7
+ import { jsx, jsxs } from "react/jsx-runtime";
8
+ //#region src/containers/ObservabilitySettings/ObservabilitySettings.tsx
9
+ /**
10
+ * Edits are routed through {@link ObservabilityOperation.Toggle} rather than written to the atom
11
+ * directly, so enabling/disabling observability takes effect on the running services.
12
+ */
13
+ var ObservabilitySettings = ({ subject }) => {
14
+ const { t } = useTranslation(meta.profile.key);
15
+ const { settings } = useSettingsState(subject.atom);
16
+ const { invokePromise } = useOperationInvoker();
17
+ return /* @__PURE__ */ jsx(Form.Root, {
18
+ schema: Settings.Settings,
19
+ values: settings,
20
+ variant: "settings",
21
+ onValuesChanged: (values) => void invokePromise(ObservabilityOperation.Toggle, { state: {
22
+ ...settings,
23
+ ...values
24
+ }.enabled }),
25
+ children: /* @__PURE__ */ jsx(Form.Viewport, {
26
+ scroll: true,
27
+ children: /* @__PURE__ */ jsx(Form.Content, { children: /* @__PURE__ */ jsxs(Form.Section, {
28
+ title: meta.profile.name ?? meta.profile.key,
29
+ children: [/* @__PURE__ */ jsx(Message.Root, {
30
+ valence: "info",
31
+ children: /* @__PURE__ */ jsx(Message.Body, { children: t("observability.description") })
32
+ }), /* @__PURE__ */ jsx(Form.FieldSet, {})]
33
+ }) })
34
+ })
35
+ });
36
+ };
37
+ ObservabilitySettings.displayName = "ObservabilitySettings";
38
+ //#endregion
39
+ export { ObservabilitySettings as default };
40
+
41
+ //# sourceMappingURL=chunk-ObservabilitySettings.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-ObservabilitySettings.mjs","names":[],"sources":["../../src/containers/ObservabilitySettings/ObservabilitySettings.tsx"],"sourcesContent":["//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { useOperationInvoker, useSettingsState } from '@dxos/app-framework/ui';\nimport { type AppSurface } from '@dxos/app-toolkit/ui';\nimport { Message, useTranslation } from '@dxos/react-ui';\nimport { Form } from '@dxos/react-ui-form';\n\nimport { meta } from '#meta';\nimport { ObservabilityOperation, Settings } from '#types';\n\nexport type ObservabilitySettingsProps = AppSurface.SettingsData;\n\n/**\n * Edits are routed through {@link ObservabilityOperation.Toggle} rather than written to the atom\n * directly, so enabling/disabling observability takes effect on the running services.\n */\nexport const ObservabilitySettings = ({ subject }: ObservabilitySettingsProps) => {\n const { t } = useTranslation(meta.profile.key);\n const { settings } = useSettingsState<Settings.Settings>(subject.atom);\n const { invokePromise } = useOperationInvoker();\n\n return (\n <Form.Root\n schema={Settings.Settings}\n values={settings}\n variant='settings'\n onValuesChanged={(values) =>\n void invokePromise(ObservabilityOperation.Toggle, { state: { ...settings, ...values }.enabled })\n }\n >\n <Form.Viewport scroll>\n <Form.Content>\n <Form.Section title={meta.profile.name ?? meta.profile.key}>\n <Message.Root valence='info'>\n <Message.Body>{t('observability.description')}</Message.Body>\n </Message.Root>\n <Form.FieldSet />\n </Form.Section>\n </Form.Content>\n </Form.Viewport>\n </Form.Root>\n );\n};\n\nObservabilitySettings.displayName = 'ObservabilitySettings';\n"],"mappings":";;;;;;;;;;;;AAoBA,IAAa,yBAAyB,EAAE,cAA0C;CAChF,MAAM,EAAE,MAAM,eAAe,KAAK,QAAQ,GAAG;CAC7C,MAAM,EAAE,aAAa,iBAAoC,QAAQ,IAAI;CACrE,MAAM,EAAE,kBAAkB,oBAAoB;CAE9C,OACE,oBAAC,KAAK,MAAN;EACE,QAAQ,SAAS;EACjB,QAAQ;EACR,SAAQ;EACR,kBAAkB,WAChB,KAAK,cAAc,uBAAuB,QAAQ,EAAE,OAAO;GAAE,GAAG;GAAU,GAAG;EAAO,EAAE,QAAQ,CAAC;YAGjG,oBAAC,KAAK,UAAN;GAAe,QAAA;aACb,oBAAC,KAAK,SAAN,EAAA,UACE,qBAAC,KAAK,SAAN;IAAc,OAAO,KAAK,QAAQ,QAAQ,KAAK,QAAQ;cAAvD,CACE,oBAAC,QAAQ,MAAT;KAAc,SAAQ;eACpB,oBAAC,QAAQ,MAAT,EAAA,UAAe,EAAE,2BAA2B,EAAgB,CAAA;IAChD,CAAA,GACd,oBAAC,KAAK,UAAN,CAAgB,CAAA,CACJ;MACF,CAAA;EACD,CAAA;CACN,CAAA;AAEf;AAEA,sBAAsB,cAAc"}
@@ -0,0 +1,99 @@
1
+ import { Capabilities, Capability } from "@dxos/app-framework";
2
+ import * as Effect from "effect/Effect";
3
+ import { ObservabilityCapabilities, ObservabilityOperation } from "#types";
4
+ import { log } from "@dxos/log";
5
+ import { ObservabilityProvider } from "@dxos/observability";
6
+ //#region src/capabilities/client-ready.ts
7
+ var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-observability/src/capabilities/client-ready.ts";
8
+ var client_ready_default = Capability.makeModule(Effect.fnUntraced(function* ({ observability }) {
9
+ const manager = yield* Capability.get(Capabilities.PluginManager);
10
+ const { invokePromise } = yield* Capability.get(Capabilities.OperationInvoker);
11
+ const client = yield* Capability.get(ObservabilityCapabilities.ClientCapability);
12
+ const enabledPlugins = manager.getEnabled();
13
+ log("client-ready: tagging enabled plugins", { count: enabledPlugins.length }, {
14
+ "~LogMeta": "~LogMeta",
15
+ F: __dxlog_file,
16
+ L: 26,
17
+ S: this
18
+ });
19
+ for (const plugin of enabledPlugins) observability.setTags({ [`pluginEnabled-${plugin}`]: "true" }, "errors");
20
+ log("client-ready: sending page.load event", void 0, {
21
+ "~LogMeta": "~LogMeta",
22
+ F: __dxlog_file,
23
+ L: 31,
24
+ S: this
25
+ });
26
+ yield* Effect.tryPromise(() => invokePromise(ObservabilityOperation.SendEvent, {
27
+ name: "page.load",
28
+ properties: { loadDuration: window.performance.timing.loadEventEnd - window.performance.timing.loadEventStart }
29
+ }));
30
+ log("client-ready: page.load event sent", void 0, {
31
+ "~LogMeta": "~LogMeta",
32
+ F: __dxlog_file,
33
+ L: 41,
34
+ S: this
35
+ });
36
+ log("client-ready: adding identity data provider", void 0, {
37
+ "~LogMeta": "~LogMeta",
38
+ F: __dxlog_file,
39
+ L: 47,
40
+ S: this
41
+ });
42
+ yield* observability.addDataProvider(ObservabilityProvider.Client.identityProvider(client.services.services));
43
+ log("client-ready: identity data provider added", void 0, {
44
+ "~LogMeta": "~LogMeta",
45
+ F: __dxlog_file,
46
+ L: 49,
47
+ S: this
48
+ });
49
+ log("client-ready: adding network metrics data provider", void 0, {
50
+ "~LogMeta": "~LogMeta",
51
+ F: __dxlog_file,
52
+ L: 51,
53
+ S: this
54
+ });
55
+ yield* observability.addDataProvider(ObservabilityProvider.Client.networkMetricsProvider(client.services.services));
56
+ log("client-ready: network metrics data provider added", void 0, {
57
+ "~LogMeta": "~LogMeta",
58
+ F: __dxlog_file,
59
+ L: 53,
60
+ S: this
61
+ });
62
+ log("client-ready: adding runtime metrics data provider", void 0, {
63
+ "~LogMeta": "~LogMeta",
64
+ F: __dxlog_file,
65
+ L: 55,
66
+ S: this
67
+ });
68
+ yield* observability.addDataProvider(ObservabilityProvider.Client.runtimeMetricsProvider(client.services.services));
69
+ log("client-ready: runtime metrics data provider added", void 0, {
70
+ "~LogMeta": "~LogMeta",
71
+ F: __dxlog_file,
72
+ L: 57,
73
+ S: this
74
+ });
75
+ log("client-ready: adding space metrics data provider", void 0, {
76
+ "~LogMeta": "~LogMeta",
77
+ F: __dxlog_file,
78
+ L: 59,
79
+ S: this
80
+ });
81
+ yield* observability.addDataProvider(ObservabilityProvider.Client.spacesMetricsProvider(client));
82
+ log("client-ready: space metrics data provider added", void 0, {
83
+ "~LogMeta": "~LogMeta",
84
+ F: __dxlog_file,
85
+ L: 61,
86
+ S: this
87
+ });
88
+ log("client-ready: contributing observability capability", void 0, {
89
+ "~LogMeta": "~LogMeta",
90
+ F: __dxlog_file,
91
+ L: 63,
92
+ S: this
93
+ });
94
+ return Capability.contributes(ObservabilityCapabilities.Observability, observability, () => observability.close());
95
+ }));
96
+ //#endregion
97
+ export { client_ready_default as default };
98
+
99
+ //# sourceMappingURL=chunk-client-ready.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-client-ready.mjs","names":[],"sources":["../../src/capabilities/client-ready.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport { log } from '@dxos/log';\nimport { type Observability, ObservabilityProvider } from '@dxos/observability';\n\nimport { ObservabilityCapabilities, ObservabilityOperation } from '#types';\n\nexport type ClientReadyOptions = {\n namespace: string;\n observability: Observability.Observability;\n};\n\nexport default Capability.makeModule(\n Effect.fnUntraced(function* ({ observability }: ClientReadyOptions) {\n const manager = yield* Capability.get(Capabilities.PluginManager);\n const { invokePromise } = yield* Capability.get(Capabilities.OperationInvoker);\n const client = yield* Capability.get(ObservabilityCapabilities.ClientCapability);\n\n // Ensure errors are tagged with enabled plugins to help with reproductions.\n const enabledPlugins = manager.getEnabled();\n log('client-ready: tagging enabled plugins', { count: enabledPlugins.length });\n for (const plugin of enabledPlugins) {\n observability.setTags({ [`pluginEnabled-${plugin}`]: 'true' }, 'errors');\n }\n\n log('client-ready: sending page.load event');\n yield* Effect.tryPromise(() =>\n invokePromise(ObservabilityOperation.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 log('client-ready: page.load event sent');\n\n // Each provider is logged individually because some provider setups perform\n // RPC calls (e.g. runtimeMetricsProvider awaits SystemService.getPlatform());\n // a hung worker pipe surfaces as a missing \"added\" log, so the last\n // \"adding ...\" line points to the stall.\n log('client-ready: adding identity data provider');\n yield* observability.addDataProvider(ObservabilityProvider.Client.identityProvider(client.services.services));\n log('client-ready: identity data provider added');\n\n log('client-ready: adding network metrics data provider');\n yield* observability.addDataProvider(ObservabilityProvider.Client.networkMetricsProvider(client.services.services));\n log('client-ready: network metrics data provider added');\n\n log('client-ready: adding runtime metrics data provider');\n yield* observability.addDataProvider(ObservabilityProvider.Client.runtimeMetricsProvider(client.services.services));\n log('client-ready: runtime metrics data provider added');\n\n log('client-ready: adding space metrics data provider');\n yield* observability.addDataProvider(ObservabilityProvider.Client.spacesMetricsProvider(client));\n log('client-ready: space metrics data provider added');\n\n log('client-ready: contributing observability capability');\n return Capability.contributes(ObservabilityCapabilities.Observability, observability, () => observability.close());\n }),\n);\n"],"mappings":";;;;;;;AAiBA,IAAA,uBAAe,WAAW,WACxB,OAAO,WAAW,WAAW,EAAE,iBAAqC;CAClE,MAAM,UAAU,OAAO,WAAW,IAAI,aAAa,aAAa;CAChE,MAAM,EAAE,kBAAkB,OAAO,WAAW,IAAI,aAAa,gBAAgB;CAC7E,MAAM,SAAS,OAAO,WAAW,IAAI,0BAA0B,gBAAgB;CAG/E,MAAM,iBAAiB,QAAQ,WAAW;CAC1C,IAAI,yCAAyC,EAAE,OAAO,eAAe,OAAO,GAAA;EAAA,YAAA;EAAA,GAAA;EAAA,GAAA;EAAA,GAAA;CAAA,CAAC;CAC7E,KAAK,MAAM,UAAU,gBACnB,cAAc,QAAQ,GAAG,iBAAiB,WAAW,OAAO,GAAG,QAAQ;CAGzE,IAAI,yCAAsC,KAAA,GAAA;EAAA,YAAA;EAAA,GAAA;EAAA,GAAA;EAAA,GAAA;CAAA,CAAC;CAC3C,OAAO,OAAO,iBACZ,cAAc,uBAAuB,WAAW;EAC9C,MAAM;EACN,YAAY,EAEV,cAAc,OAAO,YAAY,OAAO,eAAe,OAAO,YAAY,OAAO,eACnF;CACF,CAAC,CACH;CACA,IAAI,sCAAmC,KAAA,GAAA;EAAA,YAAA;EAAA,GAAA;EAAA,GAAA;EAAA,GAAA;CAAA,CAAC;CAMxC,IAAI,+CAA4C,KAAA,GAAA;EAAA,YAAA;EAAA,GAAA;EAAA,GAAA;EAAA,GAAA;CAAA,CAAC;CACjD,OAAO,cAAc,gBAAgB,sBAAsB,OAAO,iBAAiB,OAAO,SAAS,QAAQ,CAAC;CAC5G,IAAI,8CAA2C,KAAA,GAAA;EAAA,YAAA;EAAA,GAAA;EAAA,GAAA;EAAA,GAAA;CAAA,CAAC;CAEhD,IAAI,sDAAmD,KAAA,GAAA;EAAA,YAAA;EAAA,GAAA;EAAA,GAAA;EAAA,GAAA;CAAA,CAAC;CACxD,OAAO,cAAc,gBAAgB,sBAAsB,OAAO,uBAAuB,OAAO,SAAS,QAAQ,CAAC;CAClH,IAAI,qDAAkD,KAAA,GAAA;EAAA,YAAA;EAAA,GAAA;EAAA,GAAA;EAAA,GAAA;CAAA,CAAC;CAEvD,IAAI,sDAAmD,KAAA,GAAA;EAAA,YAAA;EAAA,GAAA;EAAA,GAAA;EAAA,GAAA;CAAA,CAAC;CACxD,OAAO,cAAc,gBAAgB,sBAAsB,OAAO,uBAAuB,OAAO,SAAS,QAAQ,CAAC;CAClH,IAAI,qDAAkD,KAAA,GAAA;EAAA,YAAA;EAAA,GAAA;EAAA,GAAA;EAAA,GAAA;CAAA,CAAC;CAEvD,IAAI,oDAAiD,KAAA,GAAA;EAAA,YAAA;EAAA,GAAA;EAAA,GAAA;EAAA,GAAA;CAAA,CAAC;CACtD,OAAO,cAAc,gBAAgB,sBAAsB,OAAO,sBAAsB,MAAM,CAAC;CAC/F,IAAI,mDAAgD,KAAA,GAAA;EAAA,YAAA;EAAA,GAAA;EAAA,GAAA;EAAA,GAAA;CAAA,CAAC;CAErD,IAAI,uDAAoD,KAAA,GAAA;EAAA,YAAA;EAAA,GAAA;EAAA,GAAA;EAAA,GAAA;CAAA,CAAC;CACzD,OAAO,WAAW,YAAY,0BAA0B,eAAe,qBAAqB,cAAc,MAAM,CAAC;AACnH,CAAC,CACH"}
@@ -1,31 +1,22 @@
1
- // src/meta.ts
2
1
  import { Plugin } from "@dxos/app-framework";
3
-
4
- // dx.config.ts
5
2
  import { Config2 } from "@dxos/app-framework/config";
6
3
  import { trim } from "@dxos/util";
7
- var dx_config_default = Config2.make({
8
- plugin: {
9
- key: "org.dxos.plugin.observability",
10
- name: "Telemetry",
11
- author: "DXOS",
12
- description: trim`
4
+ //#region dx.config.ts
5
+ var dx_config_default = Config2.make({ plugin: {
6
+ key: "org.dxos.plugin.observability",
7
+ name: "Telemetry",
8
+ author: "DXOS",
9
+ description: trim`
13
10
  Application observability and telemetry collection for monitoring performance and usage patterns.
14
11
  Track metrics, logs, and traces for system health and analytics.
15
12
  `,
16
- icon: {
17
- key: "ph--eye--regular"
18
- },
19
- tags: [
20
- "system"
21
- ]
22
- }
23
- });
24
-
25
- // src/meta.ts
13
+ icon: { key: "ph--eye--regular" },
14
+ tags: ["system"]
15
+ } });
16
+ //#endregion
17
+ //#region src/meta.ts
26
18
  var meta = Plugin.getMetaFromConfig(dx_config_default);
19
+ //#endregion
20
+ export { meta as t };
27
21
 
28
- export {
29
- meta
30
- };
31
- //# sourceMappingURL=chunk-PZDS6BXC.mjs.map
22
+ //# sourceMappingURL=chunk-meta.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-meta.mjs","names":[],"sources":["../../dx.config.ts","../../src/meta.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Config2 } from '@dxos/app-framework/config';\nimport { trim } from '@dxos/util';\n\nexport default Config2.make({\n plugin: {\n key: 'org.dxos.plugin.observability',\n name: 'Telemetry',\n author: 'DXOS',\n description: trim`\n Application observability and telemetry collection for monitoring performance and usage patterns.\n Track metrics, logs, and traces for system health and analytics.\n `,\n icon: { key: 'ph--eye--regular' },\n tags: ['system'],\n },\n});\n","//\n// Copyright 2023 DXOS.org\n//\n\nimport { Plugin } from '@dxos/app-framework';\n\nimport config from '../dx.config';\n\nexport const meta = Plugin.getMetaFromConfig(config);\n"],"mappings":";;;;AAOA,IAAA,oBAAe,QAAQ,KAAK,EAC1B,QAAQ;CACN,KAAK;CACL,MAAM;CACN,QAAQ;CACR,aAAa,IAAI;;;;CAIjB,MAAM,EAAE,KAAK,mBAAmB;CAChC,MAAM,CAAC,QAAQ;AACjB,EACF,CAAC;;;ACXD,IAAa,OAAO,OAAO,kBAAkB,iBAAM"}
@@ -0,0 +1,11 @@
1
+ import { Capabilities, Capability } from "@dxos/app-framework";
2
+ import * as Effect from "effect/Effect";
3
+ import { ObservabilityOperationHandlerSet } from "#operations";
4
+ //#region src/capabilities/operation-handler.ts
5
+ var operation_handler_default = Capability.makeModule(Effect.fnUntraced(function* () {
6
+ return Capability.contributes(Capabilities.OperationHandler, ObservabilityOperationHandlerSet);
7
+ }));
8
+ //#endregion
9
+ export { operation_handler_default as default };
10
+
11
+ //# sourceMappingURL=chunk-operation-handler.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-operation-handler.mjs","names":[],"sources":["../../src/capabilities/operation-handler.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport type { OperationHandlerSet } from '@dxos/compute';\n\nimport { ObservabilityOperationHandlerSet } from '#operations';\n\nexport default Capability.makeModule<OperationHandlerSet.OperationHandlerSet>(\n Effect.fnUntraced(function* () {\n return Capability.contributes(Capabilities.OperationHandler, ObservabilityOperationHandlerSet);\n }),\n);\n"],"mappings":";;;;AAWA,IAAA,4BAAe,WAAW,WACxB,OAAO,WAAW,aAAa;CAC7B,OAAO,WAAW,YAAY,aAAa,kBAAkB,gCAAgC;AAC/F,CAAC,CACH"}
@@ -0,0 +1,41 @@
1
+ import { Capabilities, Capability } from "@dxos/app-framework";
2
+ import { meta } from "#meta";
3
+ import { LayoutOperation, SettingsOperation } from "@dxos/app-toolkit";
4
+ import * as Effect from "effect/Effect";
5
+ import { ObservabilityCapabilities } from "#types";
6
+ //#region src/capabilities/privacy-notice.ts
7
+ /**
8
+ * Shows the privacy notice toast once when an identity is first created.
9
+ * Activates on `ClientEvents.IdentityCreated` — which only fires for genuinely
10
+ * new identities, not for recovered or joined ones — so no HALO device-count
11
+ * checks or session-storage flags are needed.
12
+ */
13
+ var privacy_notice_default = Capability.makeModule(Effect.fnUntraced(function* () {
14
+ const { invokePromise } = yield* Capability.get(Capabilities.OperationInvoker);
15
+ const registry = yield* Capability.get(Capabilities.AtomRegistry);
16
+ const stateAtom = yield* Capability.get(ObservabilityCapabilities.State);
17
+ const environment = (yield* Capability.get(ObservabilityCapabilities.ClientCapability))?.config?.values.runtime?.app?.env?.DX_ENVIRONMENT;
18
+ const notify = environment && environment !== "ci" && !environment.endsWith(".local") && !environment.endsWith(".lan");
19
+ if (!registry.get(stateAtom).notified && notify) {
20
+ yield* Effect.tryPromise(() => invokePromise(LayoutOperation.AddToast, {
21
+ id: `${meta.profile.key}.notice`,
22
+ title: ["observability-toast.label", { ns: meta.profile.key }],
23
+ description: ["observability-toast.description", { ns: meta.profile.key }],
24
+ duration: Infinity,
25
+ icon: "ph--info--regular",
26
+ actionLabel: ["observability-toast-action.label", { ns: meta.profile.key }],
27
+ actionAlt: ["observability-toast-action.alt", { ns: meta.profile.key }],
28
+ closeLabel: ["observability-toast-close.label", { ns: meta.profile.key }],
29
+ onAction: () => invokePromise(SettingsOperation.Open, { plugin: meta.profile.key })
30
+ }));
31
+ registry.set(stateAtom, {
32
+ ...registry.get(stateAtom),
33
+ notified: true
34
+ });
35
+ }
36
+ return [];
37
+ }));
38
+ //#endregion
39
+ export { privacy_notice_default as default };
40
+
41
+ //# sourceMappingURL=chunk-privacy-notice.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-privacy-notice.mjs","names":[],"sources":["../../src/capabilities/privacy-notice.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport { LayoutOperation, SettingsOperation } from '@dxos/app-toolkit';\n\nimport { meta } from '#meta';\nimport { ObservabilityCapabilities } from '#types';\n\n/**\n * Shows the privacy notice toast once when an identity is first created.\n * Activates on `ClientEvents.IdentityCreated` — which only fires for genuinely\n * new identities, not for recovered or joined ones — so no HALO device-count\n * checks or session-storage flags are needed.\n */\nexport default Capability.makeModule(\n Effect.fnUntraced(function* () {\n const { invokePromise } = yield* Capability.get(Capabilities.OperationInvoker);\n const registry = yield* Capability.get(Capabilities.AtomRegistry);\n const stateAtom = yield* Capability.get(ObservabilityCapabilities.State);\n const client = yield* Capability.get(ObservabilityCapabilities.ClientCapability);\n\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\n const state = registry.get(stateAtom);\n if (!state.notified && notify) {\n yield* Effect.tryPromise(() =>\n invokePromise(LayoutOperation.AddToast, {\n id: `${meta.profile.key}.notice`,\n title: ['observability-toast.label', { ns: meta.profile.key }],\n description: ['observability-toast.description', { ns: meta.profile.key }],\n duration: Infinity,\n icon: 'ph--info--regular',\n actionLabel: ['observability-toast-action.label', { ns: meta.profile.key }],\n actionAlt: ['observability-toast-action.alt', { ns: meta.profile.key }],\n closeLabel: ['observability-toast-close.label', { ns: meta.profile.key }],\n onAction: () => invokePromise(SettingsOperation.Open, { plugin: meta.profile.key }),\n }),\n );\n registry.set(stateAtom, { ...registry.get(stateAtom), notified: true });\n }\n\n return [];\n }),\n);\n"],"mappings":";;;;;;;;;;;;AAkBA,IAAA,yBAAe,WAAW,WACxB,OAAO,WAAW,aAAa;CAC7B,MAAM,EAAE,kBAAkB,OAAO,WAAW,IAAI,aAAa,gBAAgB;CAC7E,MAAM,WAAW,OAAO,WAAW,IAAI,aAAa,YAAY;CAChE,MAAM,YAAY,OAAO,WAAW,IAAI,0BAA0B,KAAK;CAGvE,MAAM,eAAc,OAFE,WAAW,IAAI,0BAA0B,gBAAgB,EAAA,EAEnD,QAAQ,OAAO,SAAS,KAAK,KAAK;CAC9D,MAAM,SACJ,eAAe,gBAAgB,QAAQ,CAAC,YAAY,SAAS,QAAQ,KAAK,CAAC,YAAY,SAAS,MAAM;CAGxG,IAAI,CADU,SAAS,IAAI,SACtB,CAAA,CAAM,YAAY,QAAQ;EAC7B,OAAO,OAAO,iBACZ,cAAc,gBAAgB,UAAU;GACtC,IAAI,GAAG,KAAK,QAAQ,IAAI;GACxB,OAAO,CAAC,6BAA6B,EAAE,IAAI,KAAK,QAAQ,IAAI,CAAC;GAC7D,aAAa,CAAC,mCAAmC,EAAE,IAAI,KAAK,QAAQ,IAAI,CAAC;GACzE,UAAU;GACV,MAAM;GACN,aAAa,CAAC,oCAAoC,EAAE,IAAI,KAAK,QAAQ,IAAI,CAAC;GAC1E,WAAW,CAAC,kCAAkC,EAAE,IAAI,KAAK,QAAQ,IAAI,CAAC;GACtE,YAAY,CAAC,mCAAmC,EAAE,IAAI,KAAK,QAAQ,IAAI,CAAC;GACxE,gBAAgB,cAAc,kBAAkB,MAAM,EAAE,QAAQ,KAAK,QAAQ,IAAI,CAAC;EACpF,CAAC,CACH;EACA,SAAS,IAAI,WAAW;GAAE,GAAG,SAAS,IAAI,SAAS;GAAG,UAAU;EAAK,CAAC;CACxE;CAEA,OAAO,CAAC;AACV,CAAC,CACH"}
@@ -0,0 +1,17 @@
1
+ import { Capabilities, Capability } from "@dxos/app-framework";
2
+ import { meta } from "#meta";
3
+ import * as Effect from "effect/Effect";
4
+ import { Surface } from "@dxos/app-framework/ui";
5
+ import { AppSurface } from "@dxos/app-toolkit/ui";
6
+ import { ObservabilitySettings } from "#containers";
7
+ //#region src/capabilities/react-surface.ts
8
+ var react_surface_default = Capability.makeModule(() => Effect.succeed(Capability.contributes(Capabilities.ReactSurface, [Surface.create({
9
+ id: "root",
10
+ filter: AppSurface.settings(AppSurface.Article, meta.profile.key),
11
+ component: ObservabilitySettings,
12
+ props: ({ data: { subject } }) => ({ subject })
13
+ })])));
14
+ //#endregion
15
+ export { react_surface_default as default };
16
+
17
+ //# sourceMappingURL=chunk-react-surface.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-react-surface.mjs","names":[],"sources":["../../src/capabilities/react-surface.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport { Surface } from '@dxos/app-framework/ui';\nimport { AppSurface } from '@dxos/app-toolkit/ui';\n\nimport { ObservabilitySettings } from '#containers';\nimport { meta } from '#meta';\n\nexport default Capability.makeModule(() =>\n Effect.succeed(\n Capability.contributes(Capabilities.ReactSurface, [\n Surface.create({\n id: 'root',\n filter: AppSurface.settings(AppSurface.Article, meta.profile.key),\n component: ObservabilitySettings,\n props: ({ data: { subject } }) => ({ subject }),\n }),\n ]),\n ),\n);\n"],"mappings":";;;;;;;AAaA,IAAA,wBAAe,WAAW,iBACxB,OAAO,QACL,WAAW,YAAY,aAAa,cAAc,CAChD,QAAQ,OAAO;CACb,IAAI;CACJ,QAAQ,WAAW,SAAS,WAAW,SAAS,KAAK,QAAQ,GAAG;CAChE,WAAW;CACX,QAAQ,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ;AAC/C,CAAC,CACH,CAAC,CACH,CACF"}
@@ -0,0 +1,14 @@
1
+ import { r as SendEvent, s as Observability } from "./chunk-types.mjs";
2
+ import { Capability } from "@dxos/app-framework";
3
+ import { Operation } from "@dxos/compute";
4
+ import * as Effect from "effect/Effect";
5
+ //#region src/operations/send-event.ts
6
+ var handler = SendEvent.pipe(Operation.withHandler(Effect.fnUntraced(function* (input) {
7
+ const observability = yield* Capability.waitFor(Observability);
8
+ const properties = input.properties ?? {};
9
+ observability.events.captureEvent(input.name, properties);
10
+ })));
11
+ //#endregion
12
+ export { handler as default };
13
+
14
+ //# sourceMappingURL=chunk-send-event.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-send-event.mjs","names":[],"sources":["../../src/operations/send-event.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capability } from '@dxos/app-framework';\nimport { Operation } from '@dxos/compute';\n\nimport { ObservabilityCapabilities, ObservabilityOperation } from '../types';\n\nconst handler: Operation.WithHandler<typeof ObservabilityOperation.SendEvent> = ObservabilityOperation.SendEvent.pipe(\n Operation.withHandler(\n Effect.fnUntraced(function* (input) {\n // NOTE: This is to ensure that events fired before observability is ready are still sent.\n const observability = yield* Capability.waitFor(ObservabilityCapabilities.Observability);\n const properties = input.properties ?? {};\n observability.events.captureEvent(input.name, properties);\n }),\n ),\n);\n\nexport default handler;\n"],"mappings":";;;;;AAWA,IAAM,UAAA,UAA2G,KAC/G,UAAU,YACR,OAAO,WAAW,WAAW,OAAO;CAElC,MAAM,gBAAgB,OAAO,WAAW,QAAQ,aAAuC;CACvF,MAAM,aAAa,MAAM,cAAc,CAAC;CACxC,cAAc,OAAO,aAAa,MAAM,MAAM,UAAU;AAC1D,CAAC,CACH,CACF"}
@@ -0,0 +1,23 @@
1
+ import { Capability } from "@dxos/app-framework";
2
+ import { meta } from "#meta";
3
+ import { AppCapabilities } from "@dxos/app-toolkit";
4
+ import * as Effect from "effect/Effect";
5
+ import { ObservabilityCapabilities, Settings } from "#types";
6
+ import { createKvsStore } from "@dxos/effect";
7
+ //#region src/capabilities/settings.ts
8
+ var settings_default = Capability.makeModule(() => Effect.sync(() => {
9
+ const settingsAtom = createKvsStore({
10
+ key: meta.profile.key,
11
+ schema: Settings.Settings,
12
+ defaultValue: () => ({ enabled: true })
13
+ });
14
+ return [Capability.contributes(ObservabilityCapabilities.Settings, settingsAtom), Capability.contributes(AppCapabilities.Settings, {
15
+ prefix: meta.profile.key,
16
+ schema: Settings.Settings,
17
+ atom: settingsAtom
18
+ })];
19
+ }));
20
+ //#endregion
21
+ export { settings_default as default };
22
+
23
+ //# sourceMappingURL=chunk-settings.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-settings.mjs","names":[],"sources":["../../src/capabilities/settings.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capability } from '@dxos/app-framework';\nimport { AppCapabilities } from '@dxos/app-toolkit';\nimport { createKvsStore } from '@dxos/effect';\n\nimport { meta } from '#meta';\nimport { ObservabilityCapabilities, Settings } from '#types';\n\nexport default Capability.makeModule(() =>\n Effect.sync(() => {\n const settingsAtom = createKvsStore({\n key: meta.profile.key,\n schema: Settings.Settings,\n defaultValue: () => ({\n enabled: true,\n }),\n });\n\n return [\n Capability.contributes(ObservabilityCapabilities.Settings, settingsAtom),\n Capability.contributes(AppCapabilities.Settings, {\n prefix: meta.profile.key,\n schema: Settings.Settings,\n atom: settingsAtom,\n }),\n ];\n }),\n);\n"],"mappings":";;;;;;;AAaA,IAAA,mBAAe,WAAW,iBACxB,OAAO,WAAW;CAChB,MAAM,eAAe,eAAe;EAClC,KAAK,KAAK,QAAQ;EAClB,QAAQ,SAAS;EACjB,qBAAqB,EACnB,SAAS,KACX;CACF,CAAC;CAED,OAAO,CACL,WAAW,YAAY,0BAA0B,UAAU,YAAY,GACvE,WAAW,YAAY,gBAAgB,UAAU;EAC/C,QAAQ,KAAK,QAAQ;EACrB,QAAQ,SAAS;EACjB,MAAM;CACR,CAAC,CACH;AACF,CAAC,CACH"}
@@ -0,0 +1,25 @@
1
+ import { Capabilities, Capability } from "@dxos/app-framework";
2
+ import { meta } from "#meta";
3
+ import * as Effect from "effect/Effect";
4
+ import { ObservabilityCapabilities } from "#types";
5
+ import { Observability } from "@dxos/observability";
6
+ import { createKvsStore } from "@dxos/effect";
7
+ //#region src/capabilities/state.ts
8
+ var state_default = Capability.makeModule(Effect.fnUntraced(function* ({ namespace }) {
9
+ const stateAtom = createKvsStore({
10
+ key: meta.profile.key,
11
+ schema: ObservabilityCapabilities.StateSchema,
12
+ defaultValue: () => ({})
13
+ });
14
+ const group = yield* Effect.tryPromise(() => Observability.getObservabilityGroup(namespace));
15
+ const registry = yield* Capability.get(Capabilities.AtomRegistry);
16
+ registry.set(stateAtom, {
17
+ ...registry.get(stateAtom),
18
+ group
19
+ });
20
+ return Capability.contributes(ObservabilityCapabilities.State, stateAtom);
21
+ }));
22
+ //#endregion
23
+ export { state_default as default };
24
+
25
+ //# sourceMappingURL=chunk-state.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-state.mjs","names":[],"sources":["../../src/capabilities/state.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport { createKvsStore } from '@dxos/effect';\nimport { Observability } from '@dxos/observability';\n\nimport { meta } from '#meta';\nimport { ObservabilityCapabilities } from '#types';\n\nexport default Capability.makeModule(\n Effect.fnUntraced(function* ({ namespace }: { namespace: string }) {\n const stateAtom = createKvsStore({\n key: meta.profile.key,\n schema: ObservabilityCapabilities.StateSchema,\n defaultValue: () => ({}),\n });\n\n // NOTE: Group is set at runtime, not persisted.\n const group = yield* Effect.tryPromise(() => Observability.getObservabilityGroup(namespace));\n const registry = yield* Capability.get(Capabilities.AtomRegistry);\n registry.set(stateAtom, { ...registry.get(stateAtom), group });\n\n return Capability.contributes(ObservabilityCapabilities.State, stateAtom);\n }),\n);\n"],"mappings":";;;;;;;AAaA,IAAA,gBAAe,WAAW,WACxB,OAAO,WAAW,WAAW,EAAE,aAAoC;CACjE,MAAM,YAAY,eAAe;EAC/B,KAAK,KAAK,QAAQ;EAClB,QAAQ,0BAA0B;EAClC,qBAAqB,CAAC;CACxB,CAAC;CAGD,MAAM,QAAQ,OAAO,OAAO,iBAAiB,cAAc,sBAAsB,SAAS,CAAC;CAC3F,MAAM,WAAW,OAAO,WAAW,IAAI,aAAa,YAAY;CAChE,SAAS,IAAI,WAAW;EAAE,GAAG,SAAS,IAAI,SAAS;EAAG;CAAM,CAAC;CAE7D,OAAO,WAAW,YAAY,0BAA0B,OAAO,SAAS;AAC1E,CAAC,CACH"}
@@ -0,0 +1,31 @@
1
+ import { i as Toggle, o as Namespace, s as Observability$1 } from "./chunk-types.mjs";
2
+ import { Capabilities, Capability } from "@dxos/app-framework";
3
+ import { meta } from "#meta";
4
+ import { AppCapabilities } from "@dxos/app-toolkit";
5
+ import { Operation } from "@dxos/compute";
6
+ import * as Effect from "effect/Effect";
7
+ import { Observability } from "@dxos/observability";
8
+ //#region src/operations/toggle.ts
9
+ var handler = Toggle.pipe(Operation.withHandler(Effect.fnUntraced(function* (input) {
10
+ const namespace = yield* Capability.get(Namespace);
11
+ const observability = yield* Capability.get(Observability$1);
12
+ const capabilities = yield* Capability.Service;
13
+ const registry = capabilities.get(Capabilities.AtomRegistry);
14
+ const settingsObj = capabilities.getAll(AppCapabilities.Settings).find((s) => s.prefix === meta.profile.key);
15
+ if (!settingsObj) return false;
16
+ const settings = registry.get(settingsObj.atom);
17
+ const newEnabled = input.state ?? !settings.enabled;
18
+ registry.set(settingsObj.atom, {
19
+ ...settings,
20
+ enabled: newEnabled
21
+ });
22
+ observability.events.captureEvent("observability.toggle", { enabled: newEnabled });
23
+ if (newEnabled) yield* observability.enable();
24
+ else yield* observability.disable();
25
+ yield* Effect.promise(() => Observability.storeObservabilityDisabled(namespace, !newEnabled));
26
+ return newEnabled;
27
+ })));
28
+ //#endregion
29
+ export { handler as default };
30
+
31
+ //# sourceMappingURL=chunk-toggle.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-toggle.mjs","names":[],"sources":["../../src/operations/toggle.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport { AppCapabilities } from '@dxos/app-toolkit';\nimport { Operation } from '@dxos/compute';\nimport { Observability } from '@dxos/observability';\n\nimport { meta } from '#meta';\n\nimport { ObservabilityCapabilities, ObservabilityOperation, type Settings } from '../types';\n\nconst handler: Operation.WithHandler<typeof ObservabilityOperation.Toggle> = ObservabilityOperation.Toggle.pipe(\n Operation.withHandler(\n Effect.fnUntraced(function* (input) {\n const namespace = yield* Capability.get(ObservabilityCapabilities.Namespace);\n const observability = yield* Capability.get(ObservabilityCapabilities.Observability);\n const capabilities = yield* Capability.Service;\n const registry = capabilities.get(Capabilities.AtomRegistry);\n const allSettings = capabilities.getAll(AppCapabilities.Settings);\n const settingsObj = allSettings.find((s: AppCapabilities.Settings) => s.prefix === meta.profile.key);\n if (!settingsObj) {\n return false;\n }\n const settings = registry.get(settingsObj.atom) as Settings.Settings;\n const newEnabled = input.state ?? !settings.enabled;\n registry.set(settingsObj.atom, { ...settings, enabled: newEnabled });\n observability.events.captureEvent('observability.toggle', {\n enabled: newEnabled,\n });\n\n if (newEnabled) {\n yield* observability.enable();\n } else {\n yield* observability.disable();\n }\n yield* Effect.promise(() => Observability.storeObservabilityDisabled(namespace, !newEnabled));\n return newEnabled;\n }),\n ),\n);\n\nexport default handler;\n"],"mappings":";;;;;;;;AAeA,IAAM,UAAA,OAAqG,KACzG,UAAU,YACR,OAAO,WAAW,WAAW,OAAO;CAClC,MAAM,YAAY,OAAO,WAAW,IAAI,SAAmC;CAC3E,MAAM,gBAAgB,OAAO,WAAW,IAAI,eAAuC;CACnF,MAAM,eAAe,OAAO,WAAW;CACvC,MAAM,WAAW,aAAa,IAAI,aAAa,YAAY;CAE3D,MAAM,cADc,aAAa,OAAO,gBAAgB,QACpC,CAAA,CAAY,MAAM,MAAgC,EAAE,WAAW,KAAK,QAAQ,GAAG;CACnG,IAAI,CAAC,aACH,OAAO;CAET,MAAM,WAAW,SAAS,IAAI,YAAY,IAAI;CAC9C,MAAM,aAAa,MAAM,SAAS,CAAC,SAAS;CAC5C,SAAS,IAAI,YAAY,MAAM;EAAE,GAAG;EAAU,SAAS;CAAW,CAAC;CACnE,cAAc,OAAO,aAAa,wBAAwB,EACxD,SAAS,WACX,CAAC;CAED,IAAI,YACF,OAAO,cAAc,OAAO;MAE5B,OAAO,cAAc,QAAQ;CAE/B,OAAO,OAAO,cAAc,cAAc,2BAA2B,WAAW,CAAC,UAAU,CAAC;CAC5F,OAAO;AACT,CAAC,CACH,CACF"}