omp-fabric 1.0.5 → 1.2.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 (69) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/README.md +1 -0
  3. package/dist/agents/handoff.d.ts +1 -1
  4. package/dist/agents/handoff.d.ts.map +1 -1
  5. package/dist/agents/types.d.ts +1 -1
  6. package/dist/agents/types.d.ts.map +1 -1
  7. package/dist/chunks/{chunk-TLSJXU4F.js → chunk-5YGOVBOZ.js} +179 -10
  8. package/dist/chunks/chunk-5YGOVBOZ.js.map +7 -0
  9. package/dist/chunks/{chunk-HAJPYJPY.js → chunk-EQNNENN6.js} +3 -3
  10. package/dist/chunks/{chunk-YPYVUGON.js → chunk-JOWMM3EX.js} +6 -6
  11. package/dist/chunks/chunk-JOWMM3EX.js.map +7 -0
  12. package/dist/chunks/{chunk-L2FNMIOW.js → chunk-QNRGTJGE.js} +2 -1
  13. package/dist/chunks/chunk-QNRGTJGE.js.map +7 -0
  14. package/dist/chunks/{chunk-FFWALVBN.js → chunk-TQL7FKMG.js} +3 -3
  15. package/dist/chunks/{chunk-Z6HEQPXX.js → chunk-WGFHMECI.js} +47 -1
  16. package/dist/chunks/{chunk-Z6HEQPXX.js.map → chunk-WGFHMECI.js.map} +2 -2
  17. package/dist/chunks/{chunk-IFNDRFW7.js → chunk-XRJYPNTI.js} +63 -2
  18. package/dist/chunks/chunk-XRJYPNTI.js.map +7 -0
  19. package/dist/chunks/{chunk-KIREBD2V.js → chunk-ZP3S74LW.js} +2 -1
  20. package/dist/codemap/budget.d.ts +3 -0
  21. package/dist/codemap/budget.d.ts.map +1 -0
  22. package/dist/codemap/cascade.d.ts +3 -0
  23. package/dist/codemap/cascade.d.ts.map +1 -0
  24. package/dist/codemap/symbols.d.ts +3 -0
  25. package/dist/codemap/symbols.d.ts.map +1 -0
  26. package/dist/codemap/types.d.ts +58 -0
  27. package/dist/codemap/types.d.ts.map +1 -0
  28. package/dist/compaction/hook.js +1 -1
  29. package/dist/config.d.ts +15 -0
  30. package/dist/config.d.ts.map +1 -1
  31. package/dist/core/system-guidance.d.ts.map +1 -1
  32. package/dist/fabric-runtime-state.d.ts.map +1 -1
  33. package/dist/fabric-runtime-state.js +1605 -344
  34. package/dist/fabric-runtime-state.js.map +4 -4
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +159 -19
  37. package/dist/index.js.map +4 -4
  38. package/dist/prewalk/handoff.d.ts +2 -1
  39. package/dist/prewalk/handoff.d.ts.map +1 -1
  40. package/dist/prewalk/retirement.d.ts +35 -0
  41. package/dist/prewalk/retirement.d.ts.map +1 -0
  42. package/dist/providers/codemap-provider.d.ts +14 -0
  43. package/dist/providers/codemap-provider.d.ts.map +1 -0
  44. package/dist/residency/host.js +5 -5
  45. package/dist/residency/omp-entry.js +5 -5
  46. package/dist/runtime/core-override-guest-types.js +1 -1
  47. package/dist/runtime/guest-types.d.ts +1 -1
  48. package/dist/runtime/guest-types.d.ts.map +1 -1
  49. package/dist/runtime/guest-types.js +1 -1
  50. package/dist/runtime/node-process-runtime.js +1 -1
  51. package/dist/runtime/quickjs-runtime.d.ts +1 -1
  52. package/dist/runtime/quickjs-runtime.d.ts.map +1 -1
  53. package/dist/runtime/quickjs-runtime.js +1 -1
  54. package/dist/ui/settings.d.ts.map +1 -1
  55. package/dist/ui/settings.js +94 -1
  56. package/dist/ui/settings.js.map +2 -2
  57. package/dist/update/check.d.ts +33 -0
  58. package/dist/update/check.d.ts.map +1 -0
  59. package/docs/architecture.md +1 -1
  60. package/docs/codemap.md +89 -0
  61. package/docs/configuration.md +15 -1
  62. package/package.json +4 -1
  63. package/dist/chunks/chunk-IFNDRFW7.js.map +0 -7
  64. package/dist/chunks/chunk-L2FNMIOW.js.map +0 -7
  65. package/dist/chunks/chunk-TLSJXU4F.js.map +0 -7
  66. package/dist/chunks/chunk-YPYVUGON.js.map +0 -7
  67. /package/dist/chunks/{chunk-HAJPYJPY.js.map → chunk-EQNNENN6.js.map} +0 -0
  68. /package/dist/chunks/{chunk-FFWALVBN.js.map → chunk-TQL7FKMG.js.map} +0 -0
  69. /package/dist/chunks/{chunk-KIREBD2V.js.map → chunk-ZP3S74LW.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,YAAY,EAEb,MAAM,2BAA2B,CAAC;AAgKnC,wBAA8B,SAAS,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA6sBxE;AAED,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,YAAY,EAEb,MAAM,2BAA2B,CAAC;AAiKnC,wBAA8B,SAAS,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAqtBxE;AAED,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC"}
package/dist/index.js CHANGED
@@ -67,7 +67,7 @@ import {
67
67
  resolveFabricIdentity,
68
68
  settleInPlacePrewalk,
69
69
  streamedToolCallName
70
- } from "./chunks/chunk-TLSJXU4F.js";
70
+ } from "./chunks/chunk-5YGOVBOZ.js";
71
71
  import "./chunks/chunk-7VIQNUPS.js";
72
72
  import {
73
73
  AgentTranscriptReader
@@ -76,7 +76,7 @@ import "./chunks/chunk-DLXPTBPL.js";
76
76
  import {
77
77
  GUEST_TYPE_DECLARATIONS,
78
78
  OMP_CORE_COMPATIBILITY_ARGUMENT_TYPE_NAMES
79
- } from "./chunks/chunk-Z6HEQPXX.js";
79
+ } from "./chunks/chunk-WGFHMECI.js";
80
80
  import {
81
81
  NESTED_TOOL_CALL_ID_PREFIX,
82
82
  getActiveRepairCompiler,
@@ -188,7 +188,7 @@ import {
188
188
  import {
189
189
  awaitPeerSettle,
190
190
  buildPeerCards
191
- } from "./chunks/chunk-YPYVUGON.js";
191
+ } from "./chunks/chunk-JOWMM3EX.js";
192
192
  import {
193
193
  DEFAULT_FABRIC_CONFIG,
194
194
  effectiveToolCaptureConfig,
@@ -196,7 +196,7 @@ import {
196
196
  loadFabricConfigForScope,
197
197
  resolveAgentDir,
198
198
  saveFabricConfig
199
- } from "./chunks/chunk-IFNDRFW7.js";
199
+ } from "./chunks/chunk-XRJYPNTI.js";
200
200
  import {
201
201
  FABRIC_ACTOR_OMP_HOST_EVENTS
202
202
  } from "./chunks/chunk-UOSJZXJV.js";
@@ -213,13 +213,15 @@ import {
213
213
  resolveFabricModelGuidance
214
214
  } from "./chunks/chunk-77FQHHZD.js";
215
215
  import "./chunks/chunk-7363CD5A.js";
216
- import "./chunks/chunk-KAD7UWT2.js";
216
+ import {
217
+ writeJsonAtomic
218
+ } from "./chunks/chunk-KAD7UWT2.js";
217
219
  import {
218
220
  compactAtConfiguredThreshold,
219
221
  fabricExecTitleHintCached,
220
222
  normalizeRunDisplay,
221
223
  registerCompactionHook
222
- } from "./chunks/chunk-KIREBD2V.js";
224
+ } from "./chunks/chunk-ZP3S74LW.js";
223
225
  import {
224
226
  fabricWriteBindings
225
227
  } from "./chunks/chunk-3J7BKUNG.js";
@@ -2115,7 +2117,7 @@ var fabricExecutionKernelGuidance = (fullCodeMode) => [
2115
2117
  // caches stay warm.
2116
2118
  `Read every file the user provides (images, screenshots, code, text) with the ${fullCodeMode ? "`omp.read`" : "`read`"} tool before responding \u2014 never assume its contents.`
2117
2119
  ].join(" ");
2118
- var defaultFabricExecutionGuidance = (fullCodeMode) => fullCodeMode ? "Examples and returns: `omp.read('/x')`, `omp.grep('TODO','src')` / `omp.grep({pattern:'TODO', path:'src', ignoreCase:true, context:2})`, `omp.find({pattern:'*.ts', path:'src', limit:20})`, and `omp.ls('src')` return strings; `omp.bash({cmd:'ls'})`, `omp.edit({path:'/x', old:'a', new:'b'})`, and `omp.write({path:'/y', text:'z'})` return `{ok, output, details}` (read `.output`); failed core calls reject, including shell tools on an ordinary nonzero exit; pass `settle: true` to `omp.bash` to get `{ ok: false, exitCode, output, error }` instead. Timeout, cancellation, approval, and security failures still reject.\n`tools` is discovery + generic calls only (`providers`/`catalog`/`list`/`search`/`describe`/`call`/`models`). Call known MCP tools as `mcp.<sanitized_server>.<sanitized_tool>(args)`, captured tools as `extensions.<tool>(args)`, and stable providers as `memory.*`, `state.*`, `schema.*`, or `compact.*`. Use `tools.call({ref,args})` for computed refs. `omp` is the core tools; `omp.<key>` reads a named `payloads` value (not a tool)." : "Call known actions through `mcp.<sanitized_server>.<sanitized_tool>(args)`, `memory.*`, `state.*`, `schema.*`, `components.*`, `compact.*`, `agents.*`, or `mesh.*`; use `tools.catalog`/`search`/`describe`/`list` for discovery and `tools.call({ref,args})` for computed refs. Other surfaces are opt-in via user-loaded skills.";
2120
+ var defaultFabricExecutionGuidance = (fullCodeMode) => fullCodeMode ? "Examples and returns: `omp.read('/x')`, `omp.grep('TODO','src')` / `omp.grep({pattern:'TODO', path:'src', ignoreCase:true, context:2})`, `omp.find({pattern:'*.ts', path:'src', limit:20})`, and `omp.ls('src')` return strings; `omp.bash({cmd:'ls'})`, `omp.edit({path:'/x', old:'a', new:'b'})`, and `omp.write({path:'/y', text:'z'})` return `{ok, output, details}` (read `.output`); failed core calls reject, including shell tools on an ordinary nonzero exit; pass `settle: true` to `omp.bash` to get `{ ok: false, exitCode, output, error }` instead. Timeout, cancellation, approval, and security failures still reject.\n`tools` is discovery + generic calls only (`providers`/`catalog`/`list`/`search`/`describe`/`call`/`models`). Call known MCP tools as `mcp.<sanitized_server>.<sanitized_tool>(args)`, captured tools as `extensions.<tool>(args)`, and stable providers as `memory.*`, `state.*`, `schema.*`, or `compact.*`. Use `tools.call({ref,args})` for computed refs. `omp` is the core tools; `omp.<key>` reads a named `payloads` value (not a tool)." : "Call known actions through `mcp.<sanitized_server>.<sanitized_tool>(args)`, `memory.*`, `state.*`, `schema.*`, `components.*`, `compact.*`, `codemap.*`, `agents.*`, or `mesh.*`; use `tools.catalog`/`search`/`describe`/`list` for discovery and `tools.call({ref,args})` for computed refs. Other surfaces are opt-in via user-loaded skills.";
2119
2121
  var manifestNameCache = /* @__PURE__ */ new Map();
2120
2122
  var packageNameFromManifest = (startPath) => {
2121
2123
  if (!startPath) return void 0;
@@ -2401,8 +2403,8 @@ var formatFailureProgress = (trace) => {
2401
2403
  );
2402
2404
  if (completed.length === 0) return void 0;
2403
2405
  const summaries = completed.slice(0, MAX_COMPLETED_CALLS).map((operation) => {
2404
- const path10 = operation.args.path;
2405
- return typeof path10 === "string" ? `${operation.ref}(${compactPath(path10)})` : operation.ref;
2406
+ const path11 = operation.args.path;
2407
+ return typeof path11 === "string" ? `${operation.ref}(${compactPath(path11)})` : operation.ref;
2406
2408
  });
2407
2409
  const omitted = completed.length - summaries.length;
2408
2410
  return [
@@ -2825,7 +2827,7 @@ var createFabricExecTool = (state, codePreviewSettings, pendingHandoffs, decorat
2825
2827
  // Keep nested payloads bounded and let prepareArguments normalize provider input.
2826
2828
  parameters: Type.Object({
2827
2829
  code: Type.String({
2828
- description: "TypeScript function body. Top-level await and return are supported. Globals include `tools`, `mcp`, `memory`, `state`, `schema`, `compact`, `agents`, `mesh`, `print`, and `omp`; full-code mode adds `omp` and `extensions`. Payloads contains only the exact keys supplied by this call."
2830
+ description: "TypeScript function body. Top-level await and return are supported. Globals include `tools`, `mcp`, `memory`, `state`, `schema`, `compact`, `codemap`, `agents`, `mesh`, `print`, and `omp`; full-code mode adds `omp` and `extensions`. Payloads contains only the exact keys supplied by this call."
2829
2831
  }),
2830
2832
  payloads: Type.Optional(
2831
2833
  Type.Record(Type.String(), Type.String(), {
@@ -4107,8 +4109,138 @@ var ompHostCompatibilityWarning = (version = detectOmpHostVersion()) => {
4107
4109
  return `OMP Fabric requires OMP >= ${MINIMUM_OMP_HOST_VERSION}; detected ${version}. Upgrade OMP before relying on Fabric continuation behavior.`;
4108
4110
  };
4109
4111
 
4110
- // src/ui/controller.ts
4112
+ // src/update/check.ts
4113
+ import fs3 from "node:fs";
4111
4114
  import path8 from "node:path";
4115
+ import { fileURLToPath } from "node:url";
4116
+ var PACKAGE_NAME = "omp-fabric";
4117
+ var REGISTRY_URL = `https://registry.npmjs.org/${PACKAGE_NAME}/latest`;
4118
+ var UPGRADE_COMMAND = `omp plugin install ${PACKAGE_NAME}`;
4119
+ var REQUEST_TIMEOUT_MS = 4e3;
4120
+ var UPDATE_STATUS_KEY = "fabric-update";
4121
+ var UPDATE_CHECK_TTL_MS = 24 * 60 * 60 * 1e3;
4122
+ var updateCheckCachePath = (agentDir) => path8.join(agentDir, "fabric", "update-check.json");
4123
+ var installedVersionFromManifest = () => {
4124
+ let directory = path8.dirname(fileURLToPath(import.meta.url));
4125
+ while (true) {
4126
+ try {
4127
+ const manifest = JSON.parse(
4128
+ fs3.readFileSync(path8.join(directory, "package.json"), "utf8")
4129
+ );
4130
+ if (manifest.name === PACKAGE_NAME && typeof manifest.version === "string") {
4131
+ return manifest.version;
4132
+ }
4133
+ } catch {
4134
+ }
4135
+ const parent = path8.dirname(directory);
4136
+ if (parent === directory) return void 0;
4137
+ directory = parent;
4138
+ }
4139
+ };
4140
+ var readCache = (cachePath) => {
4141
+ try {
4142
+ const parsed = JSON.parse(fs3.readFileSync(cachePath, "utf8"));
4143
+ if (typeof parsed.checkedAt !== "number" || !Number.isFinite(parsed.checkedAt)) return void 0;
4144
+ if (typeof parsed.latest !== "string" || parsed.latest.length === 0) return void 0;
4145
+ return {
4146
+ format: 1,
4147
+ checkedAt: parsed.checkedAt,
4148
+ latest: parsed.latest,
4149
+ ...typeof parsed.notified === "string" ? { notified: parsed.notified } : {}
4150
+ };
4151
+ } catch {
4152
+ return void 0;
4153
+ }
4154
+ };
4155
+ var writeCache = (cachePath, value) => {
4156
+ try {
4157
+ writeJsonAtomic(cachePath, value, { space: 2, newline: true });
4158
+ } catch {
4159
+ }
4160
+ };
4161
+ var fetchLatestVersion = async (fetchImpl, timeoutMs) => {
4162
+ const controller = new AbortController();
4163
+ const timer = setTimeout(() => controller.abort(), timeoutMs);
4164
+ timer.unref?.();
4165
+ try {
4166
+ const response = await fetchImpl(REGISTRY_URL, {
4167
+ signal: controller.signal,
4168
+ headers: { accept: "application/json" }
4169
+ });
4170
+ if (!response.ok) return void 0;
4171
+ const payload = await response.json();
4172
+ const version = payload?.version;
4173
+ return typeof version === "string" && version.length > 0 ? version : void 0;
4174
+ } catch {
4175
+ return void 0;
4176
+ } finally {
4177
+ clearTimeout(timer);
4178
+ }
4179
+ };
4180
+ var checkFabricUpdate = async (options) => {
4181
+ try {
4182
+ const installed = options.installedVersion ?? installedVersionFromManifest();
4183
+ if (installed === void 0) return void 0;
4184
+ const now = options.now ?? Date.now();
4185
+ const cachePath = updateCheckCachePath(options.agentDir);
4186
+ const cached = readCache(cachePath);
4187
+ const age = cached === void 0 ? void 0 : now - cached.checkedAt;
4188
+ const fresh = cached !== void 0 && age !== void 0 && age >= 0 && age < UPDATE_CHECK_TTL_MS;
4189
+ let record;
4190
+ if (fresh && cached !== void 0) {
4191
+ record = cached;
4192
+ } else {
4193
+ const latest = await fetchLatestVersion(
4194
+ options.fetchImpl ?? globalThis.fetch,
4195
+ options.timeoutMs ?? REQUEST_TIMEOUT_MS
4196
+ );
4197
+ if (latest === void 0) return void 0;
4198
+ record = {
4199
+ format: 1,
4200
+ checkedAt: now,
4201
+ latest,
4202
+ ...cached?.notified === void 0 ? {} : { notified: cached.notified }
4203
+ };
4204
+ }
4205
+ const behind = compareVersions(record.latest, installed) === 1;
4206
+ const announce = behind && record.notified !== record.latest;
4207
+ if (!fresh || announce) {
4208
+ writeCache(cachePath, announce ? { ...record, notified: record.latest } : record);
4209
+ }
4210
+ if (!announce) return void 0;
4211
+ return {
4212
+ installed,
4213
+ latest: record.latest,
4214
+ message: `${PACKAGE_NAME} ${installed} \u2192 ${record.latest} \xB7 ${UPGRADE_COMMAND}`
4215
+ };
4216
+ } catch {
4217
+ return void 0;
4218
+ }
4219
+ };
4220
+ var scheduleFabricUpdateCheck = async (context, options) => {
4221
+ if (!options.enabled || !context.hasUI) return;
4222
+ let sessionId;
4223
+ try {
4224
+ sessionId = context.sessionManager.getSessionId();
4225
+ } catch {
4226
+ return;
4227
+ }
4228
+ if (resolveFabricIdentity(sessionId).identity.kind !== "main") return;
4229
+ const notice = await checkFabricUpdate({
4230
+ agentDir: options.agentDir,
4231
+ ...options.installedVersion === void 0 ? {} : { installedVersion: options.installedVersion },
4232
+ ...options.fetchImpl === void 0 ? {} : { fetchImpl: options.fetchImpl },
4233
+ ...options.now === void 0 ? {} : { now: options.now }
4234
+ });
4235
+ if (notice === void 0) return;
4236
+ try {
4237
+ context.ui.setStatus(UPDATE_STATUS_KEY, notice.message);
4238
+ } catch {
4239
+ }
4240
+ };
4241
+
4242
+ // src/ui/controller.ts
4243
+ import path9 from "node:path";
4112
4244
 
4113
4245
  // src/ui/snapshot.ts
4114
4246
  var MAX_UI_AGENTS = 240;
@@ -4965,7 +5097,7 @@ var FabricUiController = class {
4965
5097
  logFile: actor.worker.logFile
4966
5098
  };
4967
5099
  }
4968
- const retained = actor.lastRunId && actor.logDir ? path8.join(actor.logDir, actor.lastRunId, "events.jsonl") : void 0;
5100
+ const retained = actor.lastRunId && actor.logDir ? path9.join(actor.logDir, actor.lastRunId, "events.jsonl") : void 0;
4969
5101
  if (retained) return { id: actor.id, status: actor.status, logFile: retained };
4970
5102
  if (actor.sessionFile) {
4971
5103
  return { id: actor.id, status: actor.status, logFile: actor.sessionFile };
@@ -5124,15 +5256,15 @@ var REFRESH_CARDS_PER_TICK = 3;
5124
5256
 
5125
5257
  // src/index.ts
5126
5258
  import { existsSync as existsSync4 } from "node:fs";
5127
- import path9 from "node:path";
5128
- import { fileURLToPath } from "node:url";
5129
- var FABRIC_EXTENSION_ENTRY_PATH = path9.resolve(fileURLToPath(import.meta.url));
5130
- var FABRIC_ENTRY_DIR = path9.dirname(FABRIC_EXTENSION_ENTRY_PATH);
5259
+ import path10 from "node:path";
5260
+ import { fileURLToPath as fileURLToPath2 } from "node:url";
5261
+ var FABRIC_EXTENSION_ENTRY_PATH = path10.resolve(fileURLToPath2(import.meta.url));
5262
+ var FABRIC_ENTRY_DIR = path10.dirname(FABRIC_EXTENSION_ENTRY_PATH);
5131
5263
  var FABRIC_RUNTIME_PATHS = {
5132
5264
  extension: FABRIC_EXTENSION_ENTRY_PATH,
5133
- worker: path9.join(FABRIC_ENTRY_DIR, "worker.js"),
5134
- residentHost: path9.join(FABRIC_ENTRY_DIR, "residency", "launcher.js"),
5135
- skills: path9.resolve(FABRIC_ENTRY_DIR, "..", "skills")
5265
+ worker: path10.join(FABRIC_ENTRY_DIR, "worker.js"),
5266
+ residentHost: path10.join(FABRIC_ENTRY_DIR, "residency", "launcher.js"),
5267
+ skills: path10.resolve(FABRIC_ENTRY_DIR, "..", "skills")
5136
5268
  };
5137
5269
  var FABRIC_SKILLS_DIR = FABRIC_RUNTIME_PATHS.skills;
5138
5270
  var componentRegistrationFrom = (value) => {
@@ -5158,6 +5290,7 @@ async function ompFabric(omp) {
5158
5290
  const codePreviewSettings = defaultCodePreviewSettings();
5159
5291
  const decorateShell = withCodePreviewShell;
5160
5292
  let compatibilityWarningShown = false;
5293
+ let updateCheckStarted = false;
5161
5294
  configureHighlighting(
5162
5295
  codePreviewSettings.shikiTheme,
5163
5296
  codePreviewSettings.syntaxHighlighting
@@ -5437,6 +5570,13 @@ async function ompFabric(omp) {
5437
5570
  await state.bootstrap(context);
5438
5571
  refreshCodePreviewSettings();
5439
5572
  applyFabricMode();
5573
+ if (!updateCheckStarted) {
5574
+ updateCheckStarted = true;
5575
+ void scheduleFabricUpdateCheck(context, {
5576
+ enabled: state.config.update.check,
5577
+ agentDir: resolveAgentDir()
5578
+ });
5579
+ }
5440
5580
  if (state.shouldEagerlyActivate(context)) await state.ensure(context);
5441
5581
  });
5442
5582
  omp.on("session_tree", async (_event, context) => {