@dxos/plugin-observability 0.12.0-next-73daef452f1464b62efdbca75fb0067c1066f264 → 0.13.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 (123) hide show
  1. package/dist/lib/ObservabilityCapabilities.mjs.map +1 -1
  2. package/dist/lib/ObservabilityOptions.mjs.map +1 -1
  3. package/dist/lib/capabilities.browser.mjs +87 -0
  4. package/dist/lib/capabilities.browser.mjs.map +1 -0
  5. package/dist/lib/capabilities.mjs +30 -8
  6. package/dist/lib/capabilities.mjs.map +1 -1
  7. package/dist/lib/capabilities.node.mjs +37 -5
  8. package/dist/lib/capabilities.node.mjs.map +1 -1
  9. package/dist/lib/capabilities.tauri.mjs +87 -0
  10. package/dist/lib/capabilities.tauri.mjs.map +1 -0
  11. package/dist/lib/capabilities.workerd.mjs +4 -3
  12. package/dist/lib/capabilities.workerd.mjs.map +1 -1
  13. package/dist/lib/chunk-ObservabilitySettings.mjs +12 -9
  14. package/dist/lib/chunk-ObservabilitySettings.mjs.map +1 -1
  15. package/dist/lib/chunk-client-ready.mjs +15 -15
  16. package/dist/lib/chunk-client-ready.mjs.map +1 -1
  17. package/dist/lib/chunk-invocation-listener.mjs +1 -1
  18. package/dist/lib/chunk-privacy-notice.mjs +1 -1
  19. package/dist/lib/chunk-react-surface.mjs +2 -2
  20. package/dist/lib/chunk-react-surface.mjs.map +1 -1
  21. package/dist/lib/chunk-send-event.mjs +1 -1
  22. package/dist/lib/chunk-set-enabled.mjs +11 -10
  23. package/dist/lib/chunk-set-enabled.mjs.map +1 -1
  24. package/dist/lib/chunk-settings.mjs +3 -3
  25. package/dist/lib/chunk-settings.mjs.map +1 -1
  26. package/dist/lib/chunk-state.mjs +5 -5
  27. package/dist/lib/chunk-state.mjs.map +1 -1
  28. package/dist/lib/commands.mjs +6 -0
  29. package/dist/lib/commands.mjs.map +1 -0
  30. package/dist/lib/commands.node.mjs +47 -0
  31. package/dist/lib/commands.node.mjs.map +1 -0
  32. package/dist/lib/containers.mjs.map +1 -1
  33. package/dist/lib/index.mjs +0 -1
  34. package/dist/lib/meta.mjs.map +1 -1
  35. package/dist/lib/{operation-handler.headless.mjs → operation-handler.workerd.mjs} +5 -5
  36. package/dist/lib/operation-handler.workerd.mjs.map +1 -0
  37. package/dist/lib/operations.mjs.map +1 -1
  38. package/dist/lib/plugin.mjs +3 -3
  39. package/dist/lib/plugin.mjs.map +1 -1
  40. package/dist/lib/privacy-banner.mjs +14 -0
  41. package/dist/lib/privacy-banner.mjs.map +1 -0
  42. package/dist/lib/privacy-banner.noop.mjs +8 -0
  43. package/dist/lib/privacy-banner.noop.mjs.map +1 -0
  44. package/dist/lib/translations.mjs.map +1 -1
  45. package/dist/types/src/capabilities/commands.d.ts +3 -0
  46. package/dist/types/src/capabilities/commands.d.ts.map +1 -0
  47. package/dist/types/src/capabilities/commands.node.d.ts +3 -0
  48. package/dist/types/src/capabilities/commands.node.d.ts.map +1 -0
  49. package/dist/types/src/capabilities/gen/browser.d.ts +15 -0
  50. package/dist/types/src/capabilities/gen/browser.d.ts.map +1 -0
  51. package/dist/types/src/capabilities/gen/node.d.ts +6 -3
  52. package/dist/types/src/capabilities/gen/node.d.ts.map +1 -1
  53. package/dist/types/src/capabilities/gen/tauri.d.ts +15 -0
  54. package/dist/types/src/capabilities/gen/tauri.d.ts.map +1 -0
  55. package/dist/types/src/capabilities/gen/workerd.d.ts +3 -1
  56. package/dist/types/src/capabilities/gen/workerd.d.ts.map +1 -1
  57. package/dist/types/src/capabilities/index.d.ts +2 -0
  58. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  59. package/dist/types/src/capabilities/{operation-handler.headless.d.ts → operation-handler.workerd.d.ts} +1 -1
  60. package/dist/types/src/capabilities/operation-handler.workerd.d.ts.map +1 -0
  61. package/dist/types/src/capabilities/privacy-banner.d.ts +5 -0
  62. package/dist/types/src/capabilities/privacy-banner.d.ts.map +1 -0
  63. package/dist/types/src/capabilities/privacy-banner.noop.d.ts +4 -0
  64. package/dist/types/src/capabilities/privacy-banner.noop.d.ts.map +1 -0
  65. package/dist/types/src/commands/index.d.ts +2 -0
  66. package/dist/types/src/commands/index.d.ts.map +1 -0
  67. package/dist/types/src/commands/telemetry.d.ts +5 -0
  68. package/dist/types/src/commands/telemetry.d.ts.map +1 -0
  69. package/dist/types/src/containers/ObservabilitySettings/ObservabilitySettings.d.ts +1 -1
  70. package/dist/types/src/containers/ObservabilitySettings/ObservabilitySettings.d.ts.map +1 -1
  71. package/dist/types/src/containers/ObservabilitySettings/index.d.ts +1 -1
  72. package/dist/types/src/containers/ObservabilitySettings/index.d.ts.map +1 -1
  73. package/dist/types/src/containers/index.d.ts.map +1 -1
  74. package/dist/types/src/errors.d.ts +33 -0
  75. package/dist/types/src/errors.d.ts.map +1 -0
  76. package/dist/types/src/index.d.ts +1 -2
  77. package/dist/types/src/index.d.ts.map +1 -1
  78. package/dist/types/src/operations/set-enabled.d.ts.map +1 -1
  79. package/dist/types/src/plugin.d.ts.map +1 -1
  80. package/dist/types/src/translations.d.ts.map +1 -1
  81. package/dist/types/src/types/ObservabilityCapabilities.d.ts +3 -3
  82. package/dist/types/src/types/ObservabilityCapabilities.d.ts.map +1 -1
  83. package/dist/types/src/types/ObservabilityOptions.d.ts +1 -1
  84. package/dist/types/src/types/ObservabilityOptions.d.ts.map +1 -1
  85. package/dist/types/src/types/index.d.ts +5 -5
  86. package/dist/types/src/types/index.d.ts.map +1 -1
  87. package/dist/types/tsconfig.tsbuildinfo +1 -1
  88. package/package.json +51 -31
  89. package/src/capabilities/client-ready.ts +11 -7
  90. package/src/capabilities/commands.node.ts +9 -0
  91. package/src/capabilities/commands.ts +8 -0
  92. package/src/capabilities/gen/browser.ts +128 -0
  93. package/src/capabilities/gen/node.ts +43 -9
  94. package/src/capabilities/gen/tauri.ts +128 -0
  95. package/src/capabilities/gen/workerd.ts +6 -8
  96. package/src/capabilities/index.ts +24 -15
  97. package/src/capabilities/invocation-listener.test.ts +76 -22
  98. package/src/capabilities/operation-handler.workerd.ts +24 -0
  99. package/src/capabilities/privacy-banner.noop.ts +9 -0
  100. package/src/capabilities/privacy-banner.ts +20 -0
  101. package/src/capabilities/react-surface.ts +2 -2
  102. package/src/capabilities/settings.ts +2 -2
  103. package/src/capabilities/state.ts +4 -4
  104. package/src/commands/index.ts +5 -0
  105. package/src/commands/telemetry.ts +71 -0
  106. package/src/containers/ObservabilitySettings/ObservabilitySettings.stories.tsx +4 -4
  107. package/src/containers/ObservabilitySettings/ObservabilitySettings.tsx +15 -12
  108. package/src/containers/ObservabilitySettings/index.ts +1 -1
  109. package/src/containers/index.ts +1 -1
  110. package/src/errors.ts +11 -0
  111. package/src/index.ts +1 -2
  112. package/src/meta.ts +1 -1
  113. package/src/operations/index.ts +2 -2
  114. package/src/operations/set-enabled.ts +12 -9
  115. package/src/plugin.test.ts +2 -2
  116. package/src/plugin.ts +4 -0
  117. package/src/translations.ts +2 -2
  118. package/src/types/ObservabilityCapabilities.ts +3 -3
  119. package/src/types/ObservabilityOptions.ts +1 -1
  120. package/src/types/index.ts +5 -5
  121. package/dist/lib/operation-handler.headless.mjs.map +0 -1
  122. package/dist/types/src/capabilities/operation-handler.headless.d.ts.map +0 -1
  123. package/src/capabilities/operation-handler.headless.ts +0 -36
@@ -1 +1 @@
1
- {"version":3,"file":"ObservabilityCapabilities.mjs","names":[],"sources":["../../src/types/ObservabilityCapabilities.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\n// @import-as-namespace\n\nimport * as Schema from 'effect/Schema';\nimport * as Struct from 'effect/Struct';\nimport type * as Atom from 'effect/unstable/reactivity/Atom';\n\nimport * as ActivationEvent from '@dxos/app-framework/ActivationEvent';\nimport * as Capability from '@dxos/app-framework/Capability';\nimport { type Client } from '@dxos/client';\nimport { type Observability as ObservabilityNs } from '@dxos/observability';\n\nimport { meta } from '#meta';\n\nexport const Namespace = Capability.makeSingleton<string>()(`${meta.profile.key}.capability.namespace`);\n\nexport const Settings = Capability.makeSingleton<Atom.Writable<import('./Settings').Settings>>()(\n `${meta.profile.key}.capability.settings`,\n);\n\nexport const StateSchema = Schema.Struct({\n group: Schema.optional(Schema.String),\n notified: Schema.optional(Schema.Boolean),\n}).mapFields(Struct.map(Schema.mutableKey));\n\nexport type State = Schema.Schema.Type<typeof StateSchema>;\n\nexport const State = Capability.makeSingleton<Atom.Writable<State>>()(`${meta.profile.key}.capability.state`);\n\nexport const Observability = Capability.makeSingleton<ObservabilityNs.Observability>()(\n `${meta.profile.key}.capability.observability`,\n);\n\n/**\n * Optional capability — when contributed, the help/feedback UI exposes a \"Download logs\" action.\n * The callback is responsible for the entire download (read store, encode, save file).\n */\nexport type LogDownloader = () => void | Promise<void>;\nexport const LogDownloader = Capability.makeSingleton<LogDownloader>()(`${meta.profile.key}.capability.logDownloader`);\n\n// NOTE: This is cloned from the client plugin to avoid circular dependencies.\n// TODO(burdon): Figure out how to share defs.\nexport const ClientCapability = Capability.makeSingleton<Client>()('org.dxos.plugin.client.capability.client');\n\n// Cloned from the client plugin for the same reason: fired once its forked initialize()\n// completes; modules reading initialized-only client APIs (`services`, `halo`, `spaces`)\n// at activation ride this instead of the startup pass.\nexport const ClientInitialized = ActivationEvent.make('org.dxos.plugin.client.event.initialized');\n"],"mappings":";;;;;;;;;;;;;;;;;AAiBA,IAAa,YAAY,WAAW,cAAsB,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,sBAAsB;AAEtG,IAAa,WAAW,WAAW,cAA4D,CAAC,CAC9F,GAAG,KAAK,QAAQ,IAAI,qBACtB;AAEA,IAAa,cAAc,OAAO,OAAO;CACvC,OAAO,OAAO,SAAS,OAAO,MAAM;CACpC,UAAU,OAAO,SAAS,OAAO,OAAO;AAC1C,CAAC,CAAC,CAAC,UAAU,OAAO,IAAI,OAAO,UAAU,CAAC;AAI1C,IAAa,QAAQ,WAAW,cAAoC,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,kBAAkB;AAE5G,IAAa,gBAAgB,WAAW,cAA6C,CAAC,CACpF,GAAG,KAAK,QAAQ,IAAI,0BACtB;AAOA,IAAa,gBAAgB,WAAW,cAA6B,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,0BAA0B;AAIrH,IAAa,mBAAmB,WAAW,cAAsB,CAAC,CAAC,0CAA0C;AAK7G,IAAa,oBAAoB,gBAAgB,KAAK,0CAA0C"}
1
+ {"version":3,"file":"ObservabilityCapabilities.mjs","names":[],"sources":["../../src/types/ObservabilityCapabilities.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\n// @import-as-namespace\n\nimport type * as Atom from 'effect/reactivity/Atom';\nimport * as Schema from 'effect/Schema';\nimport * as Struct from 'effect/Struct';\n\nimport * as ActivationEvent from '@dxos/app-framework/ActivationEvent';\nimport * as Capability from '@dxos/app-framework/Capability';\nimport { type Client } from '@dxos/client';\nimport type * as ObservabilityNs from '@dxos/observability/Observability';\n\nimport { meta } from '#meta';\n\nexport const Namespace = Capability.makeSingleton<string>()(`${meta.profile.key}.capability.namespace`);\n\nexport const Settings = Capability.makeSingleton<Atom.Writable<import('./Settings.ts').Settings>>()(\n `${meta.profile.key}.capability.settings`,\n);\n\nexport const StateSchema = Schema.Struct({\n group: Schema.optional(Schema.String),\n notified: Schema.optional(Schema.Boolean),\n}).mapFields(Struct.map(Schema.mutableKey));\n\nexport type State = Schema.Schema.Type<typeof StateSchema>;\n\nexport const State = Capability.makeSingleton<Atom.Writable<State>>()(`${meta.profile.key}.capability.state`);\n\nexport const Observability = Capability.makeSingleton<ObservabilityNs.Observability>()(\n `${meta.profile.key}.capability.observability`,\n);\n\n/**\n * Optional capability — when contributed, the help/feedback UI exposes a \"Download logs\" action.\n * The callback is responsible for the entire download (read store, encode, save file).\n */\nexport type LogDownloader = () => void | Promise<void>;\nexport const LogDownloader = Capability.makeSingleton<LogDownloader>()(`${meta.profile.key}.capability.logDownloader`);\n\n// NOTE: This is cloned from the client plugin to avoid circular dependencies.\n// TODO(burdon): Figure out how to share defs.\nexport const ClientCapability = Capability.makeSingleton<Client>()('org.dxos.plugin.client.capability.client');\n\n// Cloned from the client plugin for the same reason: fired once its forked initialize()\n// completes; modules reading initialized-only client APIs (`services`, `halo`, `spaces`)\n// at activation ride this instead of the startup pass.\nexport const ClientInitialized = ActivationEvent.make('org.dxos.plugin.client.event.initialized');\n"],"mappings":";;;;;;;;;;;;;;;;;AAiBA,IAAa,YAAY,WAAW,cAAsB,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,sBAAsB;AAEtG,IAAa,WAAW,WAAW,cAA+D,CAAC,CACjG,GAAG,KAAK,QAAQ,IAAI,qBACtB;AAEA,IAAa,cAAc,OAAO,OAAO;CACvC,OAAO,OAAO,SAAS,OAAO,MAAM;CACpC,UAAU,OAAO,SAAS,OAAO,OAAO;AAC1C,CAAC,CAAC,CAAC,UAAU,OAAO,IAAI,OAAO,UAAU,CAAC;AAI1C,IAAa,QAAQ,WAAW,cAAoC,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,kBAAkB;AAE5G,IAAa,gBAAgB,WAAW,cAA6C,CAAC,CACpF,GAAG,KAAK,QAAQ,IAAI,0BACtB;AAOA,IAAa,gBAAgB,WAAW,cAA6B,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,0BAA0B;AAIrH,IAAa,mBAAmB,WAAW,cAAsB,CAAC,CAAC,0CAA0C;AAK7G,IAAa,oBAAoB,gBAAgB,KAAK,0CAA0C"}
@@ -1 +1 @@
1
- {"version":3,"file":"ObservabilityOptions.mjs","names":[],"sources":["../../src/types/ObservabilityOptions.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Observability } from '@dxos/observability';\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"],"mappings":""}
1
+ {"version":3,"file":"ObservabilityOptions.mjs","names":[],"sources":["../../src/types/ObservabilityOptions.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as Observability from '@dxos/observability/Observability';\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"],"mappings":""}
@@ -0,0 +1,87 @@
1
+ import * as ActivationEvents from "@dxos/app-framework/ActivationEvents";
2
+ import * as Capabilities from "@dxos/app-framework/Capabilities";
3
+ import * as Capability from "@dxos/app-framework/Capability";
4
+ import * as AppCapabilities from "@dxos/app-toolkit/AppCapabilities";
5
+ import * as AppCapability from "@dxos/app-toolkit/AppCapability";
6
+ import { translations } from "#translations";
7
+ import * as Effect from "effect/Effect";
8
+ import { ObservabilityCapabilities, ObservabilityEvents } from "#types";
9
+ //#region src/capabilities/gen/browser.ts
10
+ var ClientReady = Capability.lazyModule("ClientReady", {
11
+ environments: ["browser", "tauri"],
12
+ requires: [
13
+ Capabilities.PluginManager,
14
+ Capabilities.OperationInvoker,
15
+ ObservabilityCapabilities.ClientCapability,
16
+ ObservabilityCapabilities.Observability,
17
+ ObservabilityCapabilities.State
18
+ ],
19
+ provides: [],
20
+ activatesOn: ObservabilityCapabilities.ClientInitialized
21
+ }, () => import("./chunk-client-ready.mjs"));
22
+ var InvocationListener = Capability.lazyModule("InvocationListener", {
23
+ requires: [Capabilities.OperationInvoker, AppCapabilities.ObservabilityMapping],
24
+ provides: [],
25
+ activatesOn: ActivationEvents.Idle
26
+ }, () => import("./chunk-invocation-listener.mjs"));
27
+ var PrivacyNotice = Capability.lazyModule("PrivacyNotice", {
28
+ environments: ["browser", "tauri"],
29
+ requires: [
30
+ Capabilities.OperationInvoker,
31
+ Capabilities.AtomRegistry,
32
+ ObservabilityCapabilities.State,
33
+ ObservabilityCapabilities.ClientCapability
34
+ ],
35
+ provides: [],
36
+ activatesOn: ObservabilityEvents.IdentityCreatedEvent
37
+ }, () => import("./chunk-privacy-notice.mjs"));
38
+ var PrivacyBanner = Capability.lazyModule("PrivacyBanner", {
39
+ environments: [
40
+ "browser",
41
+ "node",
42
+ "tauri"
43
+ ],
44
+ requires: [ObservabilityCapabilities.Namespace],
45
+ provides: [],
46
+ activatesOn: ObservabilityEvents.IdentityCreatedEvent
47
+ }, () => import("#privacy-banner"));
48
+ var Commands = AppCapability.commands(() => import("#commands"));
49
+ var Namespace = Capability.inlineModule("namespace", {
50
+ environments: [
51
+ "browser",
52
+ "node",
53
+ "tauri"
54
+ ],
55
+ provides: [ObservabilityCapabilities.Namespace],
56
+ props: (options) => options.namespace
57
+ }, (namespace) => Effect.succeed([Capability.contribute(ObservabilityCapabilities.Namespace, namespace)]));
58
+ var Observability = Capability.inlineModule("observability", {
59
+ environments: [
60
+ "browser",
61
+ "node",
62
+ "tauri"
63
+ ],
64
+ provides: [ObservabilityCapabilities.Observability],
65
+ props: (options) => options.observability
66
+ }, (observability) => Effect.gen(function* () {
67
+ const obs = yield* Effect.tryPromise(() => observability());
68
+ yield* Effect.addFinalizer(() => obs.close());
69
+ return [Capability.contribute(ObservabilityCapabilities.Observability, obs)];
70
+ }));
71
+ var OperationHandler = AppCapability.operationHandler(() => import("#operation-handler"));
72
+ var ReactSurface = AppCapability.surface(() => import("./chunk-react-surface.mjs"), { roles: ["org.dxos.role.article"] });
73
+ var ObservabilitySettings = AppCapability.settings(() => import("./chunk-settings.mjs"), {
74
+ provides: [ObservabilityCapabilities.Settings],
75
+ environments: ["browser", "tauri"]
76
+ });
77
+ var ObservabilityState = Capability.lazyModule("ObservabilityState", {
78
+ environments: ["browser", "tauri"],
79
+ requires: [Capabilities.AtomRegistry],
80
+ provides: [ObservabilityCapabilities.State],
81
+ props: ({ namespace }) => ({ namespace })
82
+ }, () => import("./chunk-state.mjs"));
83
+ var Translations = AppCapability.translations(translations);
84
+ //#endregion
85
+ export { ClientReady, Commands, InvocationListener, Namespace, Observability, ObservabilitySettings, ObservabilityState, OperationHandler, PrivacyBanner, PrivacyNotice, ReactSurface, Translations };
86
+
87
+ //# sourceMappingURL=capabilities.browser.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.browser.mjs","names":[],"sources":["../../src/capabilities/gen/browser.ts"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\n// GENERATED by dx-plugin — do not edit. Sliced from ../index.ts for the 'browser' condition.\n\nimport * as Effect from 'effect/Effect';\n\nimport * as ActivationEvents from '@dxos/app-framework/ActivationEvents';\nimport * as Capabilities from '@dxos/app-framework/Capabilities';\nimport * as Capability from '@dxos/app-framework/Capability';\nimport * as AppCapabilities from '@dxos/app-toolkit/AppCapabilities';\nimport * as AppCapability from '@dxos/app-toolkit/AppCapability';\n\nimport { translations } from '#translations';\nimport { ObservabilityCapabilities, ObservabilityEvents, ObservabilityOptions } from '#types';\n\nexport const ClientReady = Capability.lazyModule(\n 'ClientReady',\n {\n environments: ['browser', 'tauri'],\n requires: [\n Capabilities.PluginManager,\n Capabilities.OperationInvoker,\n ObservabilityCapabilities.ClientCapability,\n ObservabilityCapabilities.Observability,\n ObservabilityCapabilities.State,\n ],\n provides: [],\n // Reads `client.services` (initialized-only) to wire metrics providers, so it needs the\n // forked client initialization to have completed.\n activatesOn: ObservabilityCapabilities.ClientInitialized,\n },\n () => import('../client-ready.ts'),\n);\n\nexport const InvocationListener = Capability.lazyModule(\n 'InvocationListener',\n {\n requires: [Capabilities.OperationInvoker, AppCapabilities.ObservabilityMapping],\n provides: [],\n // Idle rather than Startup: contributed mappings are read live, so the listener only has to be\n // running before the first user action, not before the plugins that register events.\n activatesOn: ActivationEvents.Idle,\n },\n () => import('../invocation-listener.ts'),\n);\n\nexport const PrivacyNotice = Capability.lazyModule(\n 'PrivacyNotice',\n {\n environments: ['browser', 'tauri'],\n requires: [\n Capabilities.OperationInvoker,\n Capabilities.AtomRegistry,\n ObservabilityCapabilities.State,\n ObservabilityCapabilities.ClientCapability,\n ],\n provides: [],\n // Genuine runtime event: fired imperatively by `plugin-client`'s create-identity operation\n // (mirrored by identifier — see `ObservabilityEvents.IdentityCreatedEvent`).\n activatesOn: ObservabilityEvents.IdentityCreatedEvent,\n },\n () => import('../privacy-notice.ts'),\n);\n\nexport const PrivacyBanner = Capability.lazyModule(\n 'PrivacyBanner',\n {\n environments: ['browser', 'node', 'tauri'],\n requires: [ObservabilityCapabilities.Namespace],\n provides: [],\n activatesOn: ObservabilityEvents.IdentityCreatedEvent,\n },\n () => import('#privacy-banner'),\n);\n\n// `#commands` resolves per condition: only a host with a CLI has anywhere to put them.\nexport const Commands = AppCapability.commands(() => import('#commands'));\n\nexport const Namespace = Capability.inlineModule(\n 'namespace',\n {\n environments: ['browser', 'node', 'tauri'],\n provides: [ObservabilityCapabilities.Namespace],\n props: (options: ObservabilityOptions.ObservabilityPluginOptions) => options.namespace,\n },\n (namespace) => Effect.succeed([Capability.contribute(ObservabilityCapabilities.Namespace, namespace)]),\n);\n\nexport const Observability = Capability.inlineModule(\n 'observability',\n {\n environments: ['browser', 'node', 'tauri'],\n provides: [ObservabilityCapabilities.Observability],\n props: (options: ObservabilityOptions.ObservabilityPluginOptions) => options.observability,\n },\n (observability) =>\n Effect.gen(function* () {\n const obs = yield* Effect.tryPromise(() => observability());\n yield* Effect.addFinalizer(() => obs.close());\n return [Capability.contribute(ObservabilityCapabilities.Observability, obs)];\n }),\n);\n\nexport const OperationHandler = AppCapability.operationHandler(() => import('#operation-handler'));\n\nexport const ReactSurface = AppCapability.surface(() => import('../react-surface.ts'), {\n roles: ['org.dxos.role.article'],\n});\n\nexport const ObservabilitySettings = AppCapability.settings(() => import('../settings.ts'), {\n provides: [ObservabilityCapabilities.Settings],\n environments: ['browser', 'tauri'],\n});\n\nexport const ObservabilityState = Capability.lazyModule(\n 'ObservabilityState',\n {\n environments: ['browser', 'tauri'],\n requires: [Capabilities.AtomRegistry],\n provides: [ObservabilityCapabilities.State],\n props: ({ namespace }: ObservabilityOptions.ObservabilityPluginOptions) => ({ namespace }),\n },\n () => import('../state.ts'),\n);\n\nexport const Translations = AppCapability.translations(translations);\n"],"mappings":";;;;;;;;;AAiBA,IAAa,cAAc,WAAW,WACpC,eACA;CACE,cAAc,CAAC,WAAW,OAAO;CACjC,UAAU;EACR,aAAa;EACb,aAAa;EACb,0BAA0B;EAC1B,0BAA0B;EAC1B,0BAA0B;CAC5B;CACA,UAAU,CAAC;CAGX,aAAa,0BAA0B;AACzC,SACM,OAAO,2BACf;AAEA,IAAa,qBAAqB,WAAW,WAC3C,sBACA;CACE,UAAU,CAAC,aAAa,kBAAkB,gBAAgB,oBAAoB;CAC9E,UAAU,CAAC;CAGX,aAAa,iBAAiB;AAChC,SACM,OAAO,kCACf;AAEA,IAAa,gBAAgB,WAAW,WACtC,iBACA;CACE,cAAc,CAAC,WAAW,OAAO;CACjC,UAAU;EACR,aAAa;EACb,aAAa;EACb,0BAA0B;EAC1B,0BAA0B;CAC5B;CACA,UAAU,CAAC;CAGX,aAAa,oBAAoB;AACnC,SACM,OAAO,6BACf;AAEA,IAAa,gBAAgB,WAAW,WACtC,iBACA;CACE,cAAc;EAAC;EAAW;EAAQ;CAAO;CACzC,UAAU,CAAC,0BAA0B,SAAS;CAC9C,UAAU,CAAC;CACX,aAAa,oBAAoB;AACnC,SACM,OAAO,kBACf;AAGA,IAAa,WAAW,cAAc,eAAe,OAAO,YAAY;AAExE,IAAa,YAAY,WAAW,aAClC,aACA;CACE,cAAc;EAAC;EAAW;EAAQ;CAAO;CACzC,UAAU,CAAC,0BAA0B,SAAS;CAC9C,QAAQ,YAA6D,QAAQ;AAC/E,IACC,cAAc,OAAO,QAAQ,CAAC,WAAW,WAAW,0BAA0B,WAAW,SAAS,CAAC,CAAC,CACvG;AAEA,IAAa,gBAAgB,WAAW,aACtC,iBACA;CACE,cAAc;EAAC;EAAW;EAAQ;CAAO;CACzC,UAAU,CAAC,0BAA0B,aAAa;CAClD,QAAQ,YAA6D,QAAQ;AAC/E,IACC,kBACC,OAAO,IAAI,aAAa;CACtB,MAAM,MAAM,OAAO,OAAO,iBAAiB,cAAc,CAAC;CAC1D,OAAO,OAAO,mBAAmB,IAAI,MAAM,CAAC;CAC5C,OAAO,CAAC,WAAW,WAAW,0BAA0B,eAAe,GAAG,CAAC;AAC7E,CAAC,CACL;AAEA,IAAa,mBAAmB,cAAc,uBAAuB,OAAO,qBAAqB;AAEjG,IAAa,eAAe,cAAc,cAAc,OAAO,8BAAwB,EACrF,OAAO,CAAC,uBAAuB,EACjC,CAAC;AAED,IAAa,wBAAwB,cAAc,eAAe,OAAO,yBAAmB;CAC1F,UAAU,CAAC,0BAA0B,QAAQ;CAC7C,cAAc,CAAC,WAAW,OAAO;AACnC,CAAC;AAED,IAAa,qBAAqB,WAAW,WAC3C,sBACA;CACE,cAAc,CAAC,WAAW,OAAO;CACjC,UAAU,CAAC,aAAa,YAAY;CACpC,UAAU,CAAC,0BAA0B,KAAK;CAC1C,QAAQ,EAAE,iBAAkE,EAAE,UAAU;AAC1F,SACM,OAAO,oBACf;AAEA,IAAa,eAAe,cAAc,aAAa,YAAY"}
@@ -4,11 +4,11 @@ import * as Capability from "@dxos/app-framework/Capability";
4
4
  import * as AppCapabilities from "@dxos/app-toolkit/AppCapabilities";
5
5
  import * as AppCapability from "@dxos/app-toolkit/AppCapability";
6
6
  import { translations } from "#translations";
7
- import { ObservabilityCapabilities, ObservabilityEvents } from "#types";
8
7
  import * as Effect from "effect/Effect";
8
+ import { ObservabilityCapabilities, ObservabilityEvents } from "#types";
9
9
  //#region src/capabilities/index.ts
10
10
  var ClientReady = Capability.lazyModule("ClientReady", {
11
- environments: [],
11
+ environments: ["browser", "tauri"],
12
12
  requires: [
13
13
  Capabilities.PluginManager,
14
14
  Capabilities.OperationInvoker,
@@ -25,7 +25,7 @@ var InvocationListener = Capability.lazyModule("InvocationListener", {
25
25
  activatesOn: ActivationEvents.Idle
26
26
  }, () => import("./chunk-invocation-listener.mjs"));
27
27
  var PrivacyNotice = Capability.lazyModule("PrivacyNotice", {
28
- environments: [],
28
+ environments: ["browser", "tauri"],
29
29
  requires: [
30
30
  Capabilities.OperationInvoker,
31
31
  Capabilities.AtomRegistry,
@@ -35,13 +35,32 @@ var PrivacyNotice = Capability.lazyModule("PrivacyNotice", {
35
35
  provides: [],
36
36
  activatesOn: ObservabilityEvents.IdentityCreatedEvent
37
37
  }, () => import("./chunk-privacy-notice.mjs"));
38
+ var PrivacyBanner = Capability.lazyModule("PrivacyBanner", {
39
+ environments: [
40
+ "browser",
41
+ "node",
42
+ "tauri"
43
+ ],
44
+ requires: [ObservabilityCapabilities.Namespace],
45
+ provides: [],
46
+ activatesOn: ObservabilityEvents.IdentityCreatedEvent
47
+ }, () => import("#privacy-banner"));
48
+ var Commands = AppCapability.commands(() => import("#commands"));
38
49
  var Namespace = Capability.inlineModule("namespace", {
39
- environments: [],
50
+ environments: [
51
+ "browser",
52
+ "node",
53
+ "tauri"
54
+ ],
40
55
  provides: [ObservabilityCapabilities.Namespace],
41
56
  props: (options) => options.namespace
42
57
  }, (namespace) => Effect.succeed([Capability.contribute(ObservabilityCapabilities.Namespace, namespace)]));
43
58
  var Observability = Capability.inlineModule("observability", {
44
- environments: [],
59
+ environments: [
60
+ "browser",
61
+ "node",
62
+ "tauri"
63
+ ],
45
64
  provides: [ObservabilityCapabilities.Observability],
46
65
  props: (options) => options.observability
47
66
  }, (observability) => Effect.gen(function* () {
@@ -51,15 +70,18 @@ var Observability = Capability.inlineModule("observability", {
51
70
  }));
52
71
  var OperationHandler = AppCapability.operationHandler(() => import("#operation-handler"));
53
72
  var ReactSurface = AppCapability.surface(() => import("./chunk-react-surface.mjs"), { roles: ["org.dxos.role.article"] });
54
- var ObservabilitySettings = AppCapability.settings(() => import("./chunk-settings.mjs"), { provides: [ObservabilityCapabilities.Settings] });
73
+ var ObservabilitySettings = AppCapability.settings(() => import("./chunk-settings.mjs"), {
74
+ provides: [ObservabilityCapabilities.Settings],
75
+ environments: ["browser", "tauri"]
76
+ });
55
77
  var ObservabilityState = Capability.lazyModule("ObservabilityState", {
56
- environments: [],
78
+ environments: ["browser", "tauri"],
57
79
  requires: [Capabilities.AtomRegistry],
58
80
  provides: [ObservabilityCapabilities.State],
59
81
  props: ({ namespace }) => ({ namespace })
60
82
  }, () => import("./chunk-state.mjs"));
61
83
  var Translations = AppCapability.translations(translations);
62
84
  //#endregion
63
- export { ClientReady, InvocationListener, Namespace, Observability, ObservabilitySettings, ObservabilityState, OperationHandler, PrivacyNotice, ReactSurface, Translations };
85
+ export { ClientReady, Commands, InvocationListener, Namespace, Observability, ObservabilitySettings, ObservabilityState, OperationHandler, PrivacyBanner, PrivacyNotice, ReactSurface, Translations };
64
86
 
65
87
  //# sourceMappingURL=capabilities.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"capabilities.mjs","names":[],"sources":["../../src/capabilities/index.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport * as ActivationEvents from '@dxos/app-framework/ActivationEvents';\nimport * as Capabilities from '@dxos/app-framework/Capabilities';\nimport * as Capability from '@dxos/app-framework/Capability';\nimport * as AppCapabilities from '@dxos/app-toolkit/AppCapabilities';\nimport * as AppCapability from '@dxos/app-toolkit/AppCapability';\n\nimport { translations } from '#translations';\nimport { ObservabilityCapabilities, ObservabilityEvents, ObservabilityOptions } from '#types';\n\n// The telemetry pipeline reads browser storage and the user's telemetry preference, neither of\n// which exists headlessly; only `OperationHandler` ships to headless runtimes.\nexport const ClientReady = Capability.lazyModule(\n 'ClientReady',\n {\n environments: [],\n requires: [\n Capabilities.PluginManager,\n Capabilities.OperationInvoker,\n ObservabilityCapabilities.ClientCapability,\n ObservabilityCapabilities.Observability,\n ObservabilityCapabilities.State,\n ],\n provides: [],\n // Reads `client.services` (initialized-only) to wire metrics providers, so it needs the\n // forked client initialization to have completed.\n activatesOn: ObservabilityCapabilities.ClientInitialized,\n },\n () => import('./client-ready'),\n);\nexport const InvocationListener = Capability.lazyModule(\n 'InvocationListener',\n {\n requires: [Capabilities.OperationInvoker, AppCapabilities.ObservabilityMapping],\n provides: [],\n // Idle rather than Startup: contributed mappings are read live, so the listener only has to be\n // running before the first user action, not before the plugins that register events.\n activatesOn: ActivationEvents.Idle,\n },\n () => import('./invocation-listener'),\n);\nexport const PrivacyNotice = Capability.lazyModule(\n 'PrivacyNotice',\n {\n environments: [],\n requires: [\n Capabilities.OperationInvoker,\n Capabilities.AtomRegistry,\n ObservabilityCapabilities.State,\n ObservabilityCapabilities.ClientCapability,\n ],\n provides: [],\n // Genuine runtime event: fired imperatively by `plugin-client`'s create-identity operation\n // (mirrored by identifier — see `ObservabilityEvents.IdentityCreatedEvent`).\n activatesOn: ObservabilityEvents.IdentityCreatedEvent,\n },\n () => import('./privacy-notice'),\n);\nexport const Namespace = Capability.inlineModule(\n 'namespace',\n {\n environments: [],\n provides: [ObservabilityCapabilities.Namespace],\n props: (options: ObservabilityOptions.ObservabilityPluginOptions) => options.namespace,\n },\n (namespace) => Effect.succeed([Capability.contribute(ObservabilityCapabilities.Namespace, namespace)]),\n);\nexport const Observability = Capability.inlineModule(\n 'observability',\n {\n environments: [],\n provides: [ObservabilityCapabilities.Observability],\n props: (options: ObservabilityOptions.ObservabilityPluginOptions) => options.observability,\n },\n (observability) =>\n Effect.gen(function* () {\n const obs = yield* Effect.tryPromise(() => observability());\n yield* Effect.addFinalizer(() => obs.close());\n return [Capability.contribute(ObservabilityCapabilities.Observability, obs)];\n }),\n);\n// `#operation-handler` resolves per condition: no headless host can send real telemetry (see\n// `operation-handler.headless.ts` for why), so they get a no-op `SendEvent` handler.\nexport const OperationHandler = AppCapability.operationHandler(() => import('#operation-handler'));\nexport const ReactSurface = AppCapability.surface(() => import('./react-surface'), {\n roles: ['org.dxos.role.article'],\n});\nexport const ObservabilitySettings = AppCapability.settings(() => import('./settings'), {\n provides: [ObservabilityCapabilities.Settings],\n});\nexport const ObservabilityState = Capability.lazyModule(\n 'ObservabilityState',\n {\n environments: [],\n requires: [Capabilities.AtomRegistry],\n provides: [ObservabilityCapabilities.State],\n props: ({ namespace }: ObservabilityOptions.ObservabilityPluginOptions) => ({ namespace }),\n },\n () => import('./state'),\n);\nexport const Translations = AppCapability.translations(translations);\n"],"mappings":";;;;;;;;;AAiBA,IAAa,cAAc,WAAW,WACpC,eACA;CACE,cAAc,CAAC;CACf,UAAU;EACR,aAAa;EACb,aAAa;EACb,0BAA0B;EAC1B,0BAA0B;EAC1B,0BAA0B;CAC5B;CACA,UAAU,CAAC;CAGX,aAAa,0BAA0B;AACzC,SACM,OAAO,2BACf;AACA,IAAa,qBAAqB,WAAW,WAC3C,sBACA;CACE,UAAU,CAAC,aAAa,kBAAkB,gBAAgB,oBAAoB;CAC9E,UAAU,CAAC;CAGX,aAAa,iBAAiB;AAChC,SACM,OAAO,kCACf;AACA,IAAa,gBAAgB,WAAW,WACtC,iBACA;CACE,cAAc,CAAC;CACf,UAAU;EACR,aAAa;EACb,aAAa;EACb,0BAA0B;EAC1B,0BAA0B;CAC5B;CACA,UAAU,CAAC;CAGX,aAAa,oBAAoB;AACnC,SACM,OAAO,6BACf;AACA,IAAa,YAAY,WAAW,aAClC,aACA;CACE,cAAc,CAAC;CACf,UAAU,CAAC,0BAA0B,SAAS;CAC9C,QAAQ,YAA6D,QAAQ;AAC/E,IACC,cAAc,OAAO,QAAQ,CAAC,WAAW,WAAW,0BAA0B,WAAW,SAAS,CAAC,CAAC,CACvG;AACA,IAAa,gBAAgB,WAAW,aACtC,iBACA;CACE,cAAc,CAAC;CACf,UAAU,CAAC,0BAA0B,aAAa;CAClD,QAAQ,YAA6D,QAAQ;AAC/E,IACC,kBACC,OAAO,IAAI,aAAa;CACtB,MAAM,MAAM,OAAO,OAAO,iBAAiB,cAAc,CAAC;CAC1D,OAAO,OAAO,mBAAmB,IAAI,MAAM,CAAC;CAC5C,OAAO,CAAC,WAAW,WAAW,0BAA0B,eAAe,GAAG,CAAC;AAC7E,CAAC,CACL;AAGA,IAAa,mBAAmB,cAAc,uBAAuB,OAAO,qBAAqB;AACjG,IAAa,eAAe,cAAc,cAAc,OAAO,8BAAoB,EACjF,OAAO,CAAC,uBAAuB,EACjC,CAAC;AACD,IAAa,wBAAwB,cAAc,eAAe,OAAO,yBAAe,EACtF,UAAU,CAAC,0BAA0B,QAAQ,EAC/C,CAAC;AACD,IAAa,qBAAqB,WAAW,WAC3C,sBACA;CACE,cAAc,CAAC;CACf,UAAU,CAAC,aAAa,YAAY;CACpC,UAAU,CAAC,0BAA0B,KAAK;CAC1C,QAAQ,EAAE,iBAAkE,EAAE,UAAU;AAC1F,SACM,OAAO,oBACf;AACA,IAAa,eAAe,cAAc,aAAa,YAAY"}
1
+ {"version":3,"file":"capabilities.mjs","names":[],"sources":["../../src/capabilities/index.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport * as ActivationEvents from '@dxos/app-framework/ActivationEvents';\nimport * as Capabilities from '@dxos/app-framework/Capabilities';\nimport * as Capability from '@dxos/app-framework/Capability';\nimport * as AppCapabilities from '@dxos/app-toolkit/AppCapabilities';\nimport * as AppCapability from '@dxos/app-toolkit/AppCapability';\n\nimport { translations } from '#translations';\nimport { ObservabilityCapabilities, ObservabilityEvents, ObservabilityOptions } from '#types';\n\nexport const ClientReady = Capability.lazyModule(\n 'ClientReady',\n {\n environments: ['browser', 'tauri'],\n requires: [\n Capabilities.PluginManager,\n Capabilities.OperationInvoker,\n ObservabilityCapabilities.ClientCapability,\n ObservabilityCapabilities.Observability,\n ObservabilityCapabilities.State,\n ],\n provides: [],\n // Reads `client.services` (initialized-only) to wire metrics providers, so it needs the\n // forked client initialization to have completed.\n activatesOn: ObservabilityCapabilities.ClientInitialized,\n },\n () => import('./client-ready.ts'),\n);\nexport const InvocationListener = Capability.lazyModule(\n 'InvocationListener',\n {\n requires: [Capabilities.OperationInvoker, AppCapabilities.ObservabilityMapping],\n provides: [],\n // Idle rather than Startup: contributed mappings are read live, so the listener only has to be\n // running before the first user action, not before the plugins that register events.\n activatesOn: ActivationEvents.Idle,\n },\n () => import('./invocation-listener.ts'),\n);\nexport const PrivacyNotice = Capability.lazyModule(\n 'PrivacyNotice',\n {\n environments: ['browser', 'tauri'],\n requires: [\n Capabilities.OperationInvoker,\n Capabilities.AtomRegistry,\n ObservabilityCapabilities.State,\n ObservabilityCapabilities.ClientCapability,\n ],\n provides: [],\n // Genuine runtime event: fired imperatively by `plugin-client`'s create-identity operation\n // (mirrored by identifier — see `ObservabilityEvents.IdentityCreatedEvent`).\n activatesOn: ObservabilityEvents.IdentityCreatedEvent,\n },\n () => import('./privacy-notice.ts'),\n);\nexport const PrivacyBanner = Capability.lazyModule(\n 'PrivacyBanner',\n {\n environments: ['browser', 'node', 'tauri'],\n requires: [ObservabilityCapabilities.Namespace],\n provides: [],\n activatesOn: ObservabilityEvents.IdentityCreatedEvent,\n },\n () => import('#privacy-banner'),\n);\n// `#commands` resolves per condition: only a host with a CLI has anywhere to put them.\nexport const Commands = AppCapability.commands(() => import('#commands'));\nexport const Namespace = Capability.inlineModule(\n 'namespace',\n {\n environments: ['browser', 'node', 'tauri'],\n provides: [ObservabilityCapabilities.Namespace],\n props: (options: ObservabilityOptions.ObservabilityPluginOptions) => options.namespace,\n },\n (namespace) => Effect.succeed([Capability.contribute(ObservabilityCapabilities.Namespace, namespace)]),\n);\nexport const Observability = Capability.inlineModule(\n 'observability',\n {\n environments: ['browser', 'node', 'tauri'],\n provides: [ObservabilityCapabilities.Observability],\n props: (options: ObservabilityOptions.ObservabilityPluginOptions) => options.observability,\n },\n (observability) =>\n Effect.gen(function* () {\n const obs = yield* Effect.tryPromise(() => observability());\n yield* Effect.addFinalizer(() => obs.close());\n return [Capability.contribute(ObservabilityCapabilities.Observability, obs)];\n }),\n);\nexport const OperationHandler = AppCapability.operationHandler(() => import('#operation-handler'));\nexport const ReactSurface = AppCapability.surface(() => import('./react-surface.ts'), {\n roles: ['org.dxos.role.article'],\n});\nexport const ObservabilitySettings = AppCapability.settings(() => import('./settings.ts'), {\n provides: [ObservabilityCapabilities.Settings],\n environments: ['browser', 'tauri'],\n});\nexport const ObservabilityState = Capability.lazyModule(\n 'ObservabilityState',\n {\n environments: ['browser', 'tauri'],\n requires: [Capabilities.AtomRegistry],\n provides: [ObservabilityCapabilities.State],\n props: ({ namespace }: ObservabilityOptions.ObservabilityPluginOptions) => ({ namespace }),\n },\n () => import('./state.ts'),\n);\nexport const Translations = AppCapability.translations(translations);\n"],"mappings":";;;;;;;;;AAeA,IAAa,cAAc,WAAW,WACpC,eACA;CACE,cAAc,CAAC,WAAW,OAAO;CACjC,UAAU;EACR,aAAa;EACb,aAAa;EACb,0BAA0B;EAC1B,0BAA0B;EAC1B,0BAA0B;CAC5B;CACA,UAAU,CAAC;CAGX,aAAa,0BAA0B;AACzC,SACM,OAAO,2BACf;AACA,IAAa,qBAAqB,WAAW,WAC3C,sBACA;CACE,UAAU,CAAC,aAAa,kBAAkB,gBAAgB,oBAAoB;CAC9E,UAAU,CAAC;CAGX,aAAa,iBAAiB;AAChC,SACM,OAAO,kCACf;AACA,IAAa,gBAAgB,WAAW,WACtC,iBACA;CACE,cAAc,CAAC,WAAW,OAAO;CACjC,UAAU;EACR,aAAa;EACb,aAAa;EACb,0BAA0B;EAC1B,0BAA0B;CAC5B;CACA,UAAU,CAAC;CAGX,aAAa,oBAAoB;AACnC,SACM,OAAO,6BACf;AACA,IAAa,gBAAgB,WAAW,WACtC,iBACA;CACE,cAAc;EAAC;EAAW;EAAQ;CAAO;CACzC,UAAU,CAAC,0BAA0B,SAAS;CAC9C,UAAU,CAAC;CACX,aAAa,oBAAoB;AACnC,SACM,OAAO,kBACf;AAEA,IAAa,WAAW,cAAc,eAAe,OAAO,YAAY;AACxE,IAAa,YAAY,WAAW,aAClC,aACA;CACE,cAAc;EAAC;EAAW;EAAQ;CAAO;CACzC,UAAU,CAAC,0BAA0B,SAAS;CAC9C,QAAQ,YAA6D,QAAQ;AAC/E,IACC,cAAc,OAAO,QAAQ,CAAC,WAAW,WAAW,0BAA0B,WAAW,SAAS,CAAC,CAAC,CACvG;AACA,IAAa,gBAAgB,WAAW,aACtC,iBACA;CACE,cAAc;EAAC;EAAW;EAAQ;CAAO;CACzC,UAAU,CAAC,0BAA0B,aAAa;CAClD,QAAQ,YAA6D,QAAQ;AAC/E,IACC,kBACC,OAAO,IAAI,aAAa;CACtB,MAAM,MAAM,OAAO,OAAO,iBAAiB,cAAc,CAAC;CAC1D,OAAO,OAAO,mBAAmB,IAAI,MAAM,CAAC;CAC5C,OAAO,CAAC,WAAW,WAAW,0BAA0B,eAAe,GAAG,CAAC;AAC7E,CAAC,CACL;AACA,IAAa,mBAAmB,cAAc,uBAAuB,OAAO,qBAAqB;AACjG,IAAa,eAAe,cAAc,cAAc,OAAO,8BAAuB,EACpF,OAAO,CAAC,uBAAuB,EACjC,CAAC;AACD,IAAa,wBAAwB,cAAc,eAAe,OAAO,yBAAkB;CACzF,UAAU,CAAC,0BAA0B,QAAQ;CAC7C,cAAc,CAAC,WAAW,OAAO;AACnC,CAAC;AACD,IAAa,qBAAqB,WAAW,WAC3C,sBACA;CACE,cAAc,CAAC,WAAW,OAAO;CACjC,UAAU,CAAC,aAAa,YAAY;CACpC,UAAU,CAAC,0BAA0B,KAAK;CAC1C,QAAQ,EAAE,iBAAkE,EAAE,UAAU;AAC1F,SACM,OAAO,oBACf;AACA,IAAa,eAAe,cAAc,aAAa,YAAY"}
@@ -4,23 +4,55 @@ import * as Capability from "@dxos/app-framework/Capability";
4
4
  import * as AppCapabilities from "@dxos/app-toolkit/AppCapabilities";
5
5
  import * as AppCapability from "@dxos/app-toolkit/AppCapability";
6
6
  import { translations } from "#translations";
7
- import { ObservabilityCapabilities } from "#types";
7
+ import * as Effect from "effect/Effect";
8
+ import { ObservabilityCapabilities, ObservabilityEvents } from "#types";
8
9
  //#region src/capabilities/gen/node.ts
9
10
  var InvocationListener = Capability.lazyModule("InvocationListener", {
10
11
  requires: [Capabilities.OperationInvoker, AppCapabilities.ObservabilityMapping],
11
12
  provides: [],
12
13
  activatesOn: ActivationEvents.Idle
13
14
  }, () => import("./chunk-invocation-listener.mjs"));
15
+ var PrivacyBanner = Capability.lazyModule("PrivacyBanner", {
16
+ environments: [
17
+ "browser",
18
+ "node",
19
+ "tauri"
20
+ ],
21
+ requires: [ObservabilityCapabilities.Namespace],
22
+ provides: [],
23
+ activatesOn: ObservabilityEvents.IdentityCreatedEvent
24
+ }, () => import("#privacy-banner"));
25
+ var Commands = AppCapability.commands(() => import("#commands"));
26
+ var Namespace = Capability.inlineModule("namespace", {
27
+ environments: [
28
+ "browser",
29
+ "node",
30
+ "tauri"
31
+ ],
32
+ provides: [ObservabilityCapabilities.Namespace],
33
+ props: (options) => options.namespace
34
+ }, (namespace) => Effect.succeed([Capability.contribute(ObservabilityCapabilities.Namespace, namespace)]));
35
+ var Observability = Capability.inlineModule("observability", {
36
+ environments: [
37
+ "browser",
38
+ "node",
39
+ "tauri"
40
+ ],
41
+ provides: [ObservabilityCapabilities.Observability],
42
+ props: (options) => options.observability
43
+ }, (observability) => Effect.gen(function* () {
44
+ const obs = yield* Effect.tryPromise(() => observability());
45
+ yield* Effect.addFinalizer(() => obs.close());
46
+ return [Capability.contribute(ObservabilityCapabilities.Observability, obs)];
47
+ }));
14
48
  var OperationHandler = AppCapability.operationHandler(() => import("#operation-handler"));
15
- var ObservabilitySettings = AppCapability.settings(() => import("./chunk-settings.mjs"), { provides: [ObservabilityCapabilities.Settings] });
16
49
  var Translations = AppCapability.translations(translations);
17
50
  var ClientReady = void 0;
18
- var Namespace = void 0;
19
- var Observability = void 0;
51
+ var ObservabilitySettings = void 0;
20
52
  var ObservabilityState = void 0;
21
53
  var PrivacyNotice = void 0;
22
54
  var ReactSurface = void 0;
23
55
  //#endregion
24
- export { ClientReady, InvocationListener, Namespace, Observability, ObservabilitySettings, ObservabilityState, OperationHandler, PrivacyNotice, ReactSurface, Translations };
56
+ export { ClientReady, Commands, InvocationListener, Namespace, Observability, ObservabilitySettings, ObservabilityState, OperationHandler, PrivacyBanner, PrivacyNotice, ReactSurface, Translations };
25
57
 
26
58
  //# sourceMappingURL=capabilities.node.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"capabilities.node.mjs","names":[],"sources":["../../src/capabilities/gen/node.ts"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\n// GENERATED by dx-plugin — do not edit. Sliced from ../index.ts for the 'node' condition.\n\nimport * as ActivationEvents from '@dxos/app-framework/ActivationEvents';\nimport * as Capabilities from '@dxos/app-framework/Capabilities';\nimport * as Capability from '@dxos/app-framework/Capability';\nimport * as AppCapabilities from '@dxos/app-toolkit/AppCapabilities';\nimport * as AppCapability from '@dxos/app-toolkit/AppCapability';\n\nimport { translations } from '#translations';\nimport { ObservabilityCapabilities, ObservabilityEvents, ObservabilityOptions } from '#types';\n\nexport const InvocationListener = Capability.lazyModule(\n 'InvocationListener',\n {\n requires: [Capabilities.OperationInvoker, AppCapabilities.ObservabilityMapping],\n provides: [],\n // Idle rather than Startup: contributed mappings are read live, so the listener only has to be\n // running before the first user action, not before the plugins that register events.\n activatesOn: ActivationEvents.Idle,\n },\n () => import('../invocation-listener'),\n);\n\n// `#operation-handler` resolves per condition: no headless host can send real telemetry (see\n// `operation-handler.headless.ts` for why), so they get a no-op `SendEvent` handler.\nexport const OperationHandler = AppCapability.operationHandler(() => import('#operation-handler'));\n\nexport const ObservabilitySettings = AppCapability.settings(() => import('../settings'), {\n provides: [ObservabilityCapabilities.Settings],\n});\n\nexport const Translations = AppCapability.translations(translations);\n\nexport const ClientReady = undefined;\nexport const Namespace = undefined;\nexport const Observability = undefined;\nexport const ObservabilityState = undefined;\nexport const PrivacyNotice = undefined;\nexport const ReactSurface = undefined;\n"],"mappings":";;;;;;;;AAeA,IAAa,qBAAqB,WAAW,WAC3C,sBACA;CACE,UAAU,CAAC,aAAa,kBAAkB,gBAAgB,oBAAoB;CAC9E,UAAU,CAAC;CAGX,aAAa,iBAAiB;AAChC,SACM,OAAO,kCACf;AAIA,IAAa,mBAAmB,cAAc,uBAAuB,OAAO,qBAAqB;AAEjG,IAAa,wBAAwB,cAAc,eAAe,OAAO,yBAAgB,EACvF,UAAU,CAAC,0BAA0B,QAAQ,EAC/C,CAAC;AAED,IAAa,eAAe,cAAc,aAAa,YAAY;AAEnE,IAAa,cAAc,KAAA;AAC3B,IAAa,YAAY,KAAA;AACzB,IAAa,gBAAgB,KAAA;AAC7B,IAAa,qBAAqB,KAAA;AAClC,IAAa,gBAAgB,KAAA;AAC7B,IAAa,eAAe,KAAA"}
1
+ {"version":3,"file":"capabilities.node.mjs","names":[],"sources":["../../src/capabilities/gen/node.ts"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\n// GENERATED by dx-plugin — do not edit. Sliced from ../index.ts for the 'node' condition.\n\nimport * as Effect from 'effect/Effect';\n\nimport * as ActivationEvents from '@dxos/app-framework/ActivationEvents';\nimport * as Capabilities from '@dxos/app-framework/Capabilities';\nimport * as Capability from '@dxos/app-framework/Capability';\nimport * as AppCapabilities from '@dxos/app-toolkit/AppCapabilities';\nimport * as AppCapability from '@dxos/app-toolkit/AppCapability';\n\nimport { translations } from '#translations';\nimport { ObservabilityCapabilities, ObservabilityEvents, ObservabilityOptions } from '#types';\n\nexport const InvocationListener = Capability.lazyModule(\n 'InvocationListener',\n {\n requires: [Capabilities.OperationInvoker, AppCapabilities.ObservabilityMapping],\n provides: [],\n // Idle rather than Startup: contributed mappings are read live, so the listener only has to be\n // running before the first user action, not before the plugins that register events.\n activatesOn: ActivationEvents.Idle,\n },\n () => import('../invocation-listener.ts'),\n);\n\nexport const PrivacyBanner = Capability.lazyModule(\n 'PrivacyBanner',\n {\n environments: ['browser', 'node', 'tauri'],\n requires: [ObservabilityCapabilities.Namespace],\n provides: [],\n activatesOn: ObservabilityEvents.IdentityCreatedEvent,\n },\n () => import('#privacy-banner'),\n);\n\n// `#commands` resolves per condition: only a host with a CLI has anywhere to put them.\nexport const Commands = AppCapability.commands(() => import('#commands'));\n\nexport const Namespace = Capability.inlineModule(\n 'namespace',\n {\n environments: ['browser', 'node', 'tauri'],\n provides: [ObservabilityCapabilities.Namespace],\n props: (options: ObservabilityOptions.ObservabilityPluginOptions) => options.namespace,\n },\n (namespace) => Effect.succeed([Capability.contribute(ObservabilityCapabilities.Namespace, namespace)]),\n);\n\nexport const Observability = Capability.inlineModule(\n 'observability',\n {\n environments: ['browser', 'node', 'tauri'],\n provides: [ObservabilityCapabilities.Observability],\n props: (options: ObservabilityOptions.ObservabilityPluginOptions) => options.observability,\n },\n (observability) =>\n Effect.gen(function* () {\n const obs = yield* Effect.tryPromise(() => observability());\n yield* Effect.addFinalizer(() => obs.close());\n return [Capability.contribute(ObservabilityCapabilities.Observability, obs)];\n }),\n);\n\nexport const OperationHandler = AppCapability.operationHandler(() => import('#operation-handler'));\n\nexport const Translations = AppCapability.translations(translations);\n\nexport const ClientReady = undefined;\nexport const ObservabilitySettings = undefined;\nexport const ObservabilityState = undefined;\nexport const PrivacyNotice = undefined;\nexport const ReactSurface = undefined;\n"],"mappings":";;;;;;;;;AAiBA,IAAa,qBAAqB,WAAW,WAC3C,sBACA;CACE,UAAU,CAAC,aAAa,kBAAkB,gBAAgB,oBAAoB;CAC9E,UAAU,CAAC;CAGX,aAAa,iBAAiB;AAChC,SACM,OAAO,kCACf;AAEA,IAAa,gBAAgB,WAAW,WACtC,iBACA;CACE,cAAc;EAAC;EAAW;EAAQ;CAAO;CACzC,UAAU,CAAC,0BAA0B,SAAS;CAC9C,UAAU,CAAC;CACX,aAAa,oBAAoB;AACnC,SACM,OAAO,kBACf;AAGA,IAAa,WAAW,cAAc,eAAe,OAAO,YAAY;AAExE,IAAa,YAAY,WAAW,aAClC,aACA;CACE,cAAc;EAAC;EAAW;EAAQ;CAAO;CACzC,UAAU,CAAC,0BAA0B,SAAS;CAC9C,QAAQ,YAA6D,QAAQ;AAC/E,IACC,cAAc,OAAO,QAAQ,CAAC,WAAW,WAAW,0BAA0B,WAAW,SAAS,CAAC,CAAC,CACvG;AAEA,IAAa,gBAAgB,WAAW,aACtC,iBACA;CACE,cAAc;EAAC;EAAW;EAAQ;CAAO;CACzC,UAAU,CAAC,0BAA0B,aAAa;CAClD,QAAQ,YAA6D,QAAQ;AAC/E,IACC,kBACC,OAAO,IAAI,aAAa;CACtB,MAAM,MAAM,OAAO,OAAO,iBAAiB,cAAc,CAAC;CAC1D,OAAO,OAAO,mBAAmB,IAAI,MAAM,CAAC;CAC5C,OAAO,CAAC,WAAW,WAAW,0BAA0B,eAAe,GAAG,CAAC;AAC7E,CAAC,CACL;AAEA,IAAa,mBAAmB,cAAc,uBAAuB,OAAO,qBAAqB;AAEjG,IAAa,eAAe,cAAc,aAAa,YAAY;AAEnE,IAAa,cAAc,KAAA;AAC3B,IAAa,wBAAwB,KAAA;AACrC,IAAa,qBAAqB,KAAA;AAClC,IAAa,gBAAgB,KAAA;AAC7B,IAAa,eAAe,KAAA"}
@@ -0,0 +1,87 @@
1
+ import * as ActivationEvents from "@dxos/app-framework/ActivationEvents";
2
+ import * as Capabilities from "@dxos/app-framework/Capabilities";
3
+ import * as Capability from "@dxos/app-framework/Capability";
4
+ import * as AppCapabilities from "@dxos/app-toolkit/AppCapabilities";
5
+ import * as AppCapability from "@dxos/app-toolkit/AppCapability";
6
+ import { translations } from "#translations";
7
+ import * as Effect from "effect/Effect";
8
+ import { ObservabilityCapabilities, ObservabilityEvents } from "#types";
9
+ //#region src/capabilities/gen/tauri.ts
10
+ var ClientReady = Capability.lazyModule("ClientReady", {
11
+ environments: ["browser", "tauri"],
12
+ requires: [
13
+ Capabilities.PluginManager,
14
+ Capabilities.OperationInvoker,
15
+ ObservabilityCapabilities.ClientCapability,
16
+ ObservabilityCapabilities.Observability,
17
+ ObservabilityCapabilities.State
18
+ ],
19
+ provides: [],
20
+ activatesOn: ObservabilityCapabilities.ClientInitialized
21
+ }, () => import("./chunk-client-ready.mjs"));
22
+ var InvocationListener = Capability.lazyModule("InvocationListener", {
23
+ requires: [Capabilities.OperationInvoker, AppCapabilities.ObservabilityMapping],
24
+ provides: [],
25
+ activatesOn: ActivationEvents.Idle
26
+ }, () => import("./chunk-invocation-listener.mjs"));
27
+ var PrivacyNotice = Capability.lazyModule("PrivacyNotice", {
28
+ environments: ["browser", "tauri"],
29
+ requires: [
30
+ Capabilities.OperationInvoker,
31
+ Capabilities.AtomRegistry,
32
+ ObservabilityCapabilities.State,
33
+ ObservabilityCapabilities.ClientCapability
34
+ ],
35
+ provides: [],
36
+ activatesOn: ObservabilityEvents.IdentityCreatedEvent
37
+ }, () => import("./chunk-privacy-notice.mjs"));
38
+ var PrivacyBanner = Capability.lazyModule("PrivacyBanner", {
39
+ environments: [
40
+ "browser",
41
+ "node",
42
+ "tauri"
43
+ ],
44
+ requires: [ObservabilityCapabilities.Namespace],
45
+ provides: [],
46
+ activatesOn: ObservabilityEvents.IdentityCreatedEvent
47
+ }, () => import("#privacy-banner"));
48
+ var Commands = AppCapability.commands(() => import("#commands"));
49
+ var Namespace = Capability.inlineModule("namespace", {
50
+ environments: [
51
+ "browser",
52
+ "node",
53
+ "tauri"
54
+ ],
55
+ provides: [ObservabilityCapabilities.Namespace],
56
+ props: (options) => options.namespace
57
+ }, (namespace) => Effect.succeed([Capability.contribute(ObservabilityCapabilities.Namespace, namespace)]));
58
+ var Observability = Capability.inlineModule("observability", {
59
+ environments: [
60
+ "browser",
61
+ "node",
62
+ "tauri"
63
+ ],
64
+ provides: [ObservabilityCapabilities.Observability],
65
+ props: (options) => options.observability
66
+ }, (observability) => Effect.gen(function* () {
67
+ const obs = yield* Effect.tryPromise(() => observability());
68
+ yield* Effect.addFinalizer(() => obs.close());
69
+ return [Capability.contribute(ObservabilityCapabilities.Observability, obs)];
70
+ }));
71
+ var OperationHandler = AppCapability.operationHandler(() => import("#operation-handler"));
72
+ var ReactSurface = AppCapability.surface(() => import("./chunk-react-surface.mjs"), { roles: ["org.dxos.role.article"] });
73
+ var ObservabilitySettings = AppCapability.settings(() => import("./chunk-settings.mjs"), {
74
+ provides: [ObservabilityCapabilities.Settings],
75
+ environments: ["browser", "tauri"]
76
+ });
77
+ var ObservabilityState = Capability.lazyModule("ObservabilityState", {
78
+ environments: ["browser", "tauri"],
79
+ requires: [Capabilities.AtomRegistry],
80
+ provides: [ObservabilityCapabilities.State],
81
+ props: ({ namespace }) => ({ namespace })
82
+ }, () => import("./chunk-state.mjs"));
83
+ var Translations = AppCapability.translations(translations);
84
+ //#endregion
85
+ export { ClientReady, Commands, InvocationListener, Namespace, Observability, ObservabilitySettings, ObservabilityState, OperationHandler, PrivacyBanner, PrivacyNotice, ReactSurface, Translations };
86
+
87
+ //# sourceMappingURL=capabilities.tauri.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.tauri.mjs","names":[],"sources":["../../src/capabilities/gen/tauri.ts"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\n// GENERATED by dx-plugin — do not edit. Sliced from ../index.ts for the 'tauri' condition.\n\nimport * as Effect from 'effect/Effect';\n\nimport * as ActivationEvents from '@dxos/app-framework/ActivationEvents';\nimport * as Capabilities from '@dxos/app-framework/Capabilities';\nimport * as Capability from '@dxos/app-framework/Capability';\nimport * as AppCapabilities from '@dxos/app-toolkit/AppCapabilities';\nimport * as AppCapability from '@dxos/app-toolkit/AppCapability';\n\nimport { translations } from '#translations';\nimport { ObservabilityCapabilities, ObservabilityEvents, ObservabilityOptions } from '#types';\n\nexport const ClientReady = Capability.lazyModule(\n 'ClientReady',\n {\n environments: ['browser', 'tauri'],\n requires: [\n Capabilities.PluginManager,\n Capabilities.OperationInvoker,\n ObservabilityCapabilities.ClientCapability,\n ObservabilityCapabilities.Observability,\n ObservabilityCapabilities.State,\n ],\n provides: [],\n // Reads `client.services` (initialized-only) to wire metrics providers, so it needs the\n // forked client initialization to have completed.\n activatesOn: ObservabilityCapabilities.ClientInitialized,\n },\n () => import('../client-ready.ts'),\n);\n\nexport const InvocationListener = Capability.lazyModule(\n 'InvocationListener',\n {\n requires: [Capabilities.OperationInvoker, AppCapabilities.ObservabilityMapping],\n provides: [],\n // Idle rather than Startup: contributed mappings are read live, so the listener only has to be\n // running before the first user action, not before the plugins that register events.\n activatesOn: ActivationEvents.Idle,\n },\n () => import('../invocation-listener.ts'),\n);\n\nexport const PrivacyNotice = Capability.lazyModule(\n 'PrivacyNotice',\n {\n environments: ['browser', 'tauri'],\n requires: [\n Capabilities.OperationInvoker,\n Capabilities.AtomRegistry,\n ObservabilityCapabilities.State,\n ObservabilityCapabilities.ClientCapability,\n ],\n provides: [],\n // Genuine runtime event: fired imperatively by `plugin-client`'s create-identity operation\n // (mirrored by identifier — see `ObservabilityEvents.IdentityCreatedEvent`).\n activatesOn: ObservabilityEvents.IdentityCreatedEvent,\n },\n () => import('../privacy-notice.ts'),\n);\n\nexport const PrivacyBanner = Capability.lazyModule(\n 'PrivacyBanner',\n {\n environments: ['browser', 'node', 'tauri'],\n requires: [ObservabilityCapabilities.Namespace],\n provides: [],\n activatesOn: ObservabilityEvents.IdentityCreatedEvent,\n },\n () => import('#privacy-banner'),\n);\n\n// `#commands` resolves per condition: only a host with a CLI has anywhere to put them.\nexport const Commands = AppCapability.commands(() => import('#commands'));\n\nexport const Namespace = Capability.inlineModule(\n 'namespace',\n {\n environments: ['browser', 'node', 'tauri'],\n provides: [ObservabilityCapabilities.Namespace],\n props: (options: ObservabilityOptions.ObservabilityPluginOptions) => options.namespace,\n },\n (namespace) => Effect.succeed([Capability.contribute(ObservabilityCapabilities.Namespace, namespace)]),\n);\n\nexport const Observability = Capability.inlineModule(\n 'observability',\n {\n environments: ['browser', 'node', 'tauri'],\n provides: [ObservabilityCapabilities.Observability],\n props: (options: ObservabilityOptions.ObservabilityPluginOptions) => options.observability,\n },\n (observability) =>\n Effect.gen(function* () {\n const obs = yield* Effect.tryPromise(() => observability());\n yield* Effect.addFinalizer(() => obs.close());\n return [Capability.contribute(ObservabilityCapabilities.Observability, obs)];\n }),\n);\n\nexport const OperationHandler = AppCapability.operationHandler(() => import('#operation-handler'));\n\nexport const ReactSurface = AppCapability.surface(() => import('../react-surface.ts'), {\n roles: ['org.dxos.role.article'],\n});\n\nexport const ObservabilitySettings = AppCapability.settings(() => import('../settings.ts'), {\n provides: [ObservabilityCapabilities.Settings],\n environments: ['browser', 'tauri'],\n});\n\nexport const ObservabilityState = Capability.lazyModule(\n 'ObservabilityState',\n {\n environments: ['browser', 'tauri'],\n requires: [Capabilities.AtomRegistry],\n provides: [ObservabilityCapabilities.State],\n props: ({ namespace }: ObservabilityOptions.ObservabilityPluginOptions) => ({ namespace }),\n },\n () => import('../state.ts'),\n);\n\nexport const Translations = AppCapability.translations(translations);\n"],"mappings":";;;;;;;;;AAiBA,IAAa,cAAc,WAAW,WACpC,eACA;CACE,cAAc,CAAC,WAAW,OAAO;CACjC,UAAU;EACR,aAAa;EACb,aAAa;EACb,0BAA0B;EAC1B,0BAA0B;EAC1B,0BAA0B;CAC5B;CACA,UAAU,CAAC;CAGX,aAAa,0BAA0B;AACzC,SACM,OAAO,2BACf;AAEA,IAAa,qBAAqB,WAAW,WAC3C,sBACA;CACE,UAAU,CAAC,aAAa,kBAAkB,gBAAgB,oBAAoB;CAC9E,UAAU,CAAC;CAGX,aAAa,iBAAiB;AAChC,SACM,OAAO,kCACf;AAEA,IAAa,gBAAgB,WAAW,WACtC,iBACA;CACE,cAAc,CAAC,WAAW,OAAO;CACjC,UAAU;EACR,aAAa;EACb,aAAa;EACb,0BAA0B;EAC1B,0BAA0B;CAC5B;CACA,UAAU,CAAC;CAGX,aAAa,oBAAoB;AACnC,SACM,OAAO,6BACf;AAEA,IAAa,gBAAgB,WAAW,WACtC,iBACA;CACE,cAAc;EAAC;EAAW;EAAQ;CAAO;CACzC,UAAU,CAAC,0BAA0B,SAAS;CAC9C,UAAU,CAAC;CACX,aAAa,oBAAoB;AACnC,SACM,OAAO,kBACf;AAGA,IAAa,WAAW,cAAc,eAAe,OAAO,YAAY;AAExE,IAAa,YAAY,WAAW,aAClC,aACA;CACE,cAAc;EAAC;EAAW;EAAQ;CAAO;CACzC,UAAU,CAAC,0BAA0B,SAAS;CAC9C,QAAQ,YAA6D,QAAQ;AAC/E,IACC,cAAc,OAAO,QAAQ,CAAC,WAAW,WAAW,0BAA0B,WAAW,SAAS,CAAC,CAAC,CACvG;AAEA,IAAa,gBAAgB,WAAW,aACtC,iBACA;CACE,cAAc;EAAC;EAAW;EAAQ;CAAO;CACzC,UAAU,CAAC,0BAA0B,aAAa;CAClD,QAAQ,YAA6D,QAAQ;AAC/E,IACC,kBACC,OAAO,IAAI,aAAa;CACtB,MAAM,MAAM,OAAO,OAAO,iBAAiB,cAAc,CAAC;CAC1D,OAAO,OAAO,mBAAmB,IAAI,MAAM,CAAC;CAC5C,OAAO,CAAC,WAAW,WAAW,0BAA0B,eAAe,GAAG,CAAC;AAC7E,CAAC,CACL;AAEA,IAAa,mBAAmB,cAAc,uBAAuB,OAAO,qBAAqB;AAEjG,IAAa,eAAe,cAAc,cAAc,OAAO,8BAAwB,EACrF,OAAO,CAAC,uBAAuB,EACjC,CAAC;AAED,IAAa,wBAAwB,cAAc,eAAe,OAAO,yBAAmB;CAC1F,UAAU,CAAC,0BAA0B,QAAQ;CAC7C,cAAc,CAAC,WAAW,OAAO;AACnC,CAAC;AAED,IAAa,qBAAqB,WAAW,WAC3C,sBACA;CACE,cAAc,CAAC,WAAW,OAAO;CACjC,UAAU,CAAC,aAAa,YAAY;CACpC,UAAU,CAAC,0BAA0B,KAAK;CAC1C,QAAQ,EAAE,iBAAkE,EAAE,UAAU;AAC1F,SACM,OAAO,oBACf;AAEA,IAAa,eAAe,cAAc,aAAa,YAAY"}
@@ -4,23 +4,24 @@ import * as Capability from "@dxos/app-framework/Capability";
4
4
  import * as AppCapabilities from "@dxos/app-toolkit/AppCapabilities";
5
5
  import * as AppCapability from "@dxos/app-toolkit/AppCapability";
6
6
  import { translations } from "#translations";
7
- import { ObservabilityCapabilities } from "#types";
8
7
  //#region src/capabilities/gen/workerd.ts
9
8
  var InvocationListener = Capability.lazyModule("InvocationListener", {
10
9
  requires: [Capabilities.OperationInvoker, AppCapabilities.ObservabilityMapping],
11
10
  provides: [],
12
11
  activatesOn: ActivationEvents.Idle
13
12
  }, () => import("./chunk-invocation-listener.mjs"));
13
+ var Commands = AppCapability.commands(() => import("#commands"));
14
14
  var OperationHandler = AppCapability.operationHandler(() => import("#operation-handler"));
15
- var ObservabilitySettings = AppCapability.settings(() => import("./chunk-settings.mjs"), { provides: [ObservabilityCapabilities.Settings] });
16
15
  var Translations = AppCapability.translations(translations);
17
16
  var ClientReady = void 0;
18
17
  var Namespace = void 0;
19
18
  var Observability = void 0;
19
+ var ObservabilitySettings = void 0;
20
20
  var ObservabilityState = void 0;
21
+ var PrivacyBanner = void 0;
21
22
  var PrivacyNotice = void 0;
22
23
  var ReactSurface = void 0;
23
24
  //#endregion
24
- export { ClientReady, InvocationListener, Namespace, Observability, ObservabilitySettings, ObservabilityState, OperationHandler, PrivacyNotice, ReactSurface, Translations };
25
+ export { ClientReady, Commands, InvocationListener, Namespace, Observability, ObservabilitySettings, ObservabilityState, OperationHandler, PrivacyBanner, PrivacyNotice, ReactSurface, Translations };
25
26
 
26
27
  //# sourceMappingURL=capabilities.workerd.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"capabilities.workerd.mjs","names":[],"sources":["../../src/capabilities/gen/workerd.ts"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\n// GENERATED by dx-plugin — do not edit. Sliced from ../index.ts for the 'workerd' condition.\n\nimport * as ActivationEvents from '@dxos/app-framework/ActivationEvents';\nimport * as Capabilities from '@dxos/app-framework/Capabilities';\nimport * as Capability from '@dxos/app-framework/Capability';\nimport * as AppCapabilities from '@dxos/app-toolkit/AppCapabilities';\nimport * as AppCapability from '@dxos/app-toolkit/AppCapability';\n\nimport { translations } from '#translations';\nimport { ObservabilityCapabilities, ObservabilityEvents, ObservabilityOptions } from '#types';\n\nexport const InvocationListener = Capability.lazyModule(\n 'InvocationListener',\n {\n requires: [Capabilities.OperationInvoker, AppCapabilities.ObservabilityMapping],\n provides: [],\n // Idle rather than Startup: contributed mappings are read live, so the listener only has to be\n // running before the first user action, not before the plugins that register events.\n activatesOn: ActivationEvents.Idle,\n },\n () => import('../invocation-listener'),\n);\n\n// `#operation-handler` resolves per condition: no headless host can send real telemetry (see\n// `operation-handler.headless.ts` for why), so they get a no-op `SendEvent` handler.\nexport const OperationHandler = AppCapability.operationHandler(() => import('#operation-handler'));\n\nexport const ObservabilitySettings = AppCapability.settings(() => import('../settings'), {\n provides: [ObservabilityCapabilities.Settings],\n});\n\nexport const Translations = AppCapability.translations(translations);\n\nexport const ClientReady = undefined;\nexport const Namespace = undefined;\nexport const Observability = undefined;\nexport const ObservabilityState = undefined;\nexport const PrivacyNotice = undefined;\nexport const ReactSurface = undefined;\n"],"mappings":";;;;;;;;AAeA,IAAa,qBAAqB,WAAW,WAC3C,sBACA;CACE,UAAU,CAAC,aAAa,kBAAkB,gBAAgB,oBAAoB;CAC9E,UAAU,CAAC;CAGX,aAAa,iBAAiB;AAChC,SACM,OAAO,kCACf;AAIA,IAAa,mBAAmB,cAAc,uBAAuB,OAAO,qBAAqB;AAEjG,IAAa,wBAAwB,cAAc,eAAe,OAAO,yBAAgB,EACvF,UAAU,CAAC,0BAA0B,QAAQ,EAC/C,CAAC;AAED,IAAa,eAAe,cAAc,aAAa,YAAY;AAEnE,IAAa,cAAc,KAAA;AAC3B,IAAa,YAAY,KAAA;AACzB,IAAa,gBAAgB,KAAA;AAC7B,IAAa,qBAAqB,KAAA;AAClC,IAAa,gBAAgB,KAAA;AAC7B,IAAa,eAAe,KAAA"}
1
+ {"version":3,"file":"capabilities.workerd.mjs","names":[],"sources":["../../src/capabilities/gen/workerd.ts"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\n// GENERATED by dx-plugin — do not edit. Sliced from ../index.ts for the 'workerd' condition.\n\nimport * as ActivationEvents from '@dxos/app-framework/ActivationEvents';\nimport * as Capabilities from '@dxos/app-framework/Capabilities';\nimport * as Capability from '@dxos/app-framework/Capability';\nimport * as AppCapabilities from '@dxos/app-toolkit/AppCapabilities';\nimport * as AppCapability from '@dxos/app-toolkit/AppCapability';\n\nimport { translations } from '#translations';\n\nexport const InvocationListener = Capability.lazyModule(\n 'InvocationListener',\n {\n requires: [Capabilities.OperationInvoker, AppCapabilities.ObservabilityMapping],\n provides: [],\n // Idle rather than Startup: contributed mappings are read live, so the listener only has to be\n // running before the first user action, not before the plugins that register events.\n activatesOn: ActivationEvents.Idle,\n },\n () => import('../invocation-listener.ts'),\n);\n\n// `#commands` resolves per condition: only a host with a CLI has anywhere to put them.\nexport const Commands = AppCapability.commands(() => import('#commands'));\n\nexport const OperationHandler = AppCapability.operationHandler(() => import('#operation-handler'));\n\nexport const Translations = AppCapability.translations(translations);\n\nexport const ClientReady = undefined;\nexport const Namespace = undefined;\nexport const Observability = undefined;\nexport const ObservabilitySettings = undefined;\nexport const ObservabilityState = undefined;\nexport const PrivacyBanner = undefined;\nexport const PrivacyNotice = undefined;\nexport const ReactSurface = undefined;\n"],"mappings":";;;;;;;AAcA,IAAa,qBAAqB,WAAW,WAC3C,sBACA;CACE,UAAU,CAAC,aAAa,kBAAkB,gBAAgB,oBAAoB;CAC9E,UAAU,CAAC;CAGX,aAAa,iBAAiB;AAChC,SACM,OAAO,kCACf;AAGA,IAAa,WAAW,cAAc,eAAe,OAAO,YAAY;AAExE,IAAa,mBAAmB,cAAc,uBAAuB,OAAO,qBAAqB;AAEjG,IAAa,eAAe,cAAc,aAAa,YAAY;AAEnE,IAAa,cAAc,KAAA;AAC3B,IAAa,YAAY,KAAA;AACzB,IAAa,gBAAgB,KAAA;AAC7B,IAAa,wBAAwB,KAAA;AACrC,IAAa,qBAAqB,KAAA;AAClC,IAAa,gBAAgB,KAAA;AAC7B,IAAa,gBAAgB,KAAA;AAC7B,IAAa,eAAe,KAAA"}
@@ -1,9 +1,11 @@
1
1
  import { ObservabilityOperation, Settings } from "#types";
2
2
  import { meta } from "#meta";
3
3
  import "react";
4
- import { useOperationInvoker, useSettingsState } from "@dxos/app-framework/ui";
5
- import { Banner, useTranslation } from "@dxos/react-ui";
4
+ import * as Hooks from "@dxos/app-framework/Hooks";
5
+ import * as SettingsScope from "@dxos/app-toolkit/SettingsScope";
6
6
  import { Form } from "@dxos/react-ui-form";
7
+ import * as Banner from "@dxos/react-ui/Banner";
8
+ import * as UiHooks from "@dxos/react-ui/Hooks";
7
9
  import { jsx, jsxs } from "react/jsx-runtime";
8
10
  //#region src/containers/ObservabilitySettings/ObservabilitySettings.tsx
9
11
  /**
@@ -11,9 +13,9 @@ import { jsx, jsxs } from "react/jsx-runtime";
11
13
  * directly, so enabling/disabling observability takes effect on the running services.
12
14
  */
13
15
  var ObservabilitySettings = ({ subject }) => {
14
- const { t } = useTranslation(meta.profile.key);
15
- const { settings } = useSettingsState(subject.atom);
16
- const { invokePromise } = useOperationInvoker();
16
+ const { t } = UiHooks.useTranslation(meta.profile.key);
17
+ const { settings } = Hooks.useSettingsState(subject.atom);
18
+ const { invokePromise } = Hooks.useOperationInvoker();
17
19
  return /* @__PURE__ */ jsx(Form.Root, {
18
20
  schema: Settings.Settings,
19
21
  values: settings,
@@ -24,12 +26,13 @@ var ObservabilitySettings = ({ subject }) => {
24
26
  }.enabled }),
25
27
  children: /* @__PURE__ */ jsx(Form.Viewport, {
26
28
  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(Form.Content, { children: /* @__PURE__ */ jsxs(Form.FieldSet, {
30
+ label: meta.profile.name ?? meta.profile.key,
31
+ actions: /* @__PURE__ */ jsx(SettingsScope.Root, { prefix: meta.profile.key }),
29
32
  children: [/* @__PURE__ */ jsx(Banner.Root, {
30
33
  valence: "info",
31
- children: /* @__PURE__ */ jsx(Banner.Content, { children: /* @__PURE__ */ jsx(Banner.Body, { children: t("observability.description") }) })
32
- }), /* @__PURE__ */ jsx(Form.FieldSet, {})]
34
+ children: /* @__PURE__ */ jsx(Banner.Body, { children: t("observability.description") })
35
+ }), /* @__PURE__ */ jsx(Form.Fields, {})]
33
36
  }) })
34
37
  })
35
38
  });
@@ -1 +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 { Banner, 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.SetEnabled} 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.SetEnabled, { state: { ...settings, ...values }.enabled })\n }\n >\n <Form.Viewport scroll>\n <Form.Content>\n <Form.Section title={meta.profile.name ?? meta.profile.key}>\n <Banner.Root valence='info'>\n <Banner.Content>\n <Banner.Body>{t('observability.description')}</Banner.Body>\n </Banner.Content>\n </Banner.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,YAAY,EAAE,OAAO;GAAE,GAAG;GAAU,GAAG;EAAO,EAAE,QAAQ,CAAC;EAGrG,UAAA,oBAAC,KAAK,UAAN;GAAe,QAAA;GACb,UAAA,oBAAC,KAAK,SAAN,EAAA,UACE,qBAAC,KAAK,SAAN;IAAc,OAAO,KAAK,QAAQ,QAAQ,KAAK,QAAQ;IAAvD,UAAA,CACE,oBAAC,OAAO,MAAR;KAAa,SAAQ;KACnB,UAAA,oBAAC,OAAO,SAAR,EAAA,UACE,oBAAC,OAAO,MAAR,EAAA,UAAc,EAAE,2BAA2B,EAAe,CAAA,EAC5C,CAAA;IACL,CAAA,GACb,oBAAC,KAAK,UAAN,CAAgB,CAAA,CACJ;GACF,CAAA,EAAA,CAAA;EACD,CAAA;CACN,CAAA;AAEf;AAEA,sBAAsB,cAAc"}
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 * as Hooks from '@dxos/app-framework/Hooks';\nimport type * as AppSurface from '@dxos/app-toolkit/AppSurface';\nimport * as SettingsScope from '@dxos/app-toolkit/SettingsScope';\nimport { Form } from '@dxos/react-ui-form';\nimport * as Banner from '@dxos/react-ui/Banner';\nimport * as UiHooks from '@dxos/react-ui/Hooks';\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.SetEnabled} 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 } = UiHooks.useTranslation(meta.profile.key);\n const { settings } = Hooks.useSettingsState<Settings.Settings>(subject.atom);\n const { invokePromise } = Hooks.useOperationInvoker();\n\n return (\n <Form.Root\n schema={Settings.Settings}\n values={settings}\n variant='settings'\n onValuesChanged={(values) =>\n void invokePromise(ObservabilityOperation.SetEnabled, { state: { ...settings, ...values }.enabled })\n }\n >\n <Form.Viewport scroll>\n <Form.Content>\n <Form.FieldSet\n label={meta.profile.name ?? meta.profile.key}\n actions={<SettingsScope.Root prefix={meta.profile.key} />}\n >\n <Banner.Root valence='info'>\n <Banner.Body>{t('observability.description')}</Banner.Body>\n </Banner.Root>\n <Form.Fields />\n </Form.FieldSet>\n </Form.Content>\n </Form.Viewport>\n </Form.Root>\n );\n};\n\nObservabilitySettings.displayName = 'ObservabilitySettings';\n"],"mappings":";;;;;;;;;;;;;;AAsBA,IAAa,yBAAyB,EAAE,cAA0C;CAChF,MAAM,EAAE,MAAM,QAAQ,eAAe,KAAK,QAAQ,GAAG;CACrD,MAAM,EAAE,aAAa,MAAM,iBAAoC,QAAQ,IAAI;CAC3E,MAAM,EAAE,kBAAkB,MAAM,oBAAoB;CAEpD,OACE,oBAAC,KAAK,MAAN;EACE,QAAQ,SAAS;EACjB,QAAQ;EACR,SAAQ;EACR,kBAAkB,WAChB,KAAK,cAAc,uBAAuB,YAAY,EAAE,OAAO;GAAE,GAAG;GAAU,GAAG;EAAO,EAAE,QAAQ,CAAC;EAGrG,UAAA,oBAAC,KAAK,UAAN;GAAe,QAAA;GACb,UAAA,oBAAC,KAAK,SAAN,EAAA,UACE,qBAAC,KAAK,UAAN;IACE,OAAO,KAAK,QAAQ,QAAQ,KAAK,QAAQ;IACzC,SAAS,oBAAC,cAAc,MAAf,EAAoB,QAAQ,KAAK,QAAQ,IAAM,CAAA;IAF1D,UAAA,CAIE,oBAAC,OAAO,MAAR;KAAa,SAAQ;KACnB,UAAA,oBAAC,OAAO,MAAR,EAAA,UAAc,EAAE,2BAA2B,EAAe,CAAA;IAC/C,CAAA,GACb,oBAAC,KAAK,QAAN,CAAc,CAAA,CACD;GACH,CAAA,EAAA,CAAA;EACD,CAAA;CACN,CAAA;AAEf;AAEA,sBAAsB,cAAc"}
@@ -1,9 +1,9 @@
1
1
  import * as Capabilities from "@dxos/app-framework/Capabilities";
2
2
  import * as Capability from "@dxos/app-framework/Capability";
3
- import { ObservabilityCapabilities, ObservabilityOperation } from "#types";
4
3
  import * as Effect from "effect/Effect";
4
+ import { ObservabilityCapabilities, ObservabilityOperation } from "#types";
5
5
  import { log } from "@dxos/log";
6
- import { ObservabilityProvider } from "@dxos/observability";
6
+ import * as ObservabilityClientProvider from "@dxos/observability/ObservabilityClientProvider";
7
7
  //#region src/capabilities/client-ready.ts
8
8
  var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-observability/src/capabilities/client-ready.ts";
9
9
  var client_ready_default = Capability.makeModule(Effect.fnUntraced(function* () {
@@ -41,7 +41,7 @@ var client_ready_default = Capability.makeModule(Effect.fnUntraced(function* ()
41
41
  L: 47,
42
42
  S: this
43
43
  });
44
- yield* observability.addDataProvider(ObservabilityProvider.Client.identityProvider(client.services.services));
44
+ yield* observability.addDataProvider(ObservabilityClientProvider.Client.identityProvider(client.services.services));
45
45
  log("client-ready: identity data provider added", void 0, {
46
46
  "~LogMeta": "~LogMeta",
47
47
  F: __dxlog_file,
@@ -54,51 +54,51 @@ var client_ready_default = Capability.makeModule(Effect.fnUntraced(function* ()
54
54
  L: 51,
55
55
  S: this
56
56
  });
57
- yield* observability.addDataProvider(ObservabilityProvider.Client.networkMetricsProvider(client.services.services));
57
+ yield* observability.addDataProvider(ObservabilityClientProvider.Client.networkMetricsProvider(client.services.services));
58
58
  log("client-ready: network metrics data provider added", void 0, {
59
59
  "~LogMeta": "~LogMeta",
60
60
  F: __dxlog_file,
61
- L: 53,
61
+ L: 55,
62
62
  S: this
63
63
  });
64
64
  log("client-ready: adding runtime metrics data provider", void 0, {
65
65
  "~LogMeta": "~LogMeta",
66
66
  F: __dxlog_file,
67
- L: 55,
67
+ L: 57,
68
68
  S: this
69
69
  });
70
- yield* observability.addDataProvider(ObservabilityProvider.Client.runtimeMetricsProvider(client.services.services));
70
+ yield* observability.addDataProvider(ObservabilityClientProvider.Client.runtimeMetricsProvider(client.services.services));
71
71
  log("client-ready: runtime metrics data provider added", void 0, {
72
72
  "~LogMeta": "~LogMeta",
73
73
  F: __dxlog_file,
74
- L: 57,
74
+ L: 61,
75
75
  S: this
76
76
  });
77
77
  log("client-ready: adding space metrics data provider", void 0, {
78
78
  "~LogMeta": "~LogMeta",
79
79
  F: __dxlog_file,
80
- L: 59,
80
+ L: 63,
81
81
  S: this
82
82
  });
83
- yield* observability.addDataProvider(ObservabilityProvider.Client.spacesMetricsProvider(client));
83
+ yield* observability.addDataProvider(ObservabilityClientProvider.Client.spacesMetricsProvider(client));
84
84
  log("client-ready: space metrics data provider added", void 0, {
85
85
  "~LogMeta": "~LogMeta",
86
86
  F: __dxlog_file,
87
- L: 61,
87
+ L: 65,
88
88
  S: this
89
89
  });
90
90
  log("client-ready: adding document metrics data provider", void 0, {
91
91
  "~LogMeta": "~LogMeta",
92
92
  F: __dxlog_file,
93
- L: 63,
93
+ L: 67,
94
94
  S: this
95
95
  });
96
- yield* observability.addDataProvider(ObservabilityProvider.Client.documentsMetricsProvider(client));
97
- yield* observability.addDataProvider(ObservabilityProvider.Client.syncMetricsProvider(client));
96
+ yield* observability.addDataProvider(ObservabilityClientProvider.Client.documentsMetricsProvider(client));
97
+ yield* observability.addDataProvider(ObservabilityClientProvider.Client.syncMetricsProvider(client));
98
98
  log("client-ready: document metrics data provider added", void 0, {
99
99
  "~LogMeta": "~LogMeta",
100
100
  F: __dxlog_file,
101
- L: 66,
101
+ L: 70,
102
102
  S: this
103
103
  });
104
104
  return [];