@adhdev/daemon-core 0.9.82-rc.415 → 0.9.82-rc.417

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -384,10 +384,10 @@ function readInjected(value) {
384
384
  }
385
385
  function getDaemonBuildInfo() {
386
386
  if (cached) return cached;
387
- const commit = readInjected(true ? "eeb6bb4fcd32cf1844ed87bb4a7c2760e132e69d" : void 0) ?? "unknown";
388
- const commitShort = readInjected(true ? "eeb6bb4f" : void 0) ?? (commit !== "unknown" ? commit.slice(0, 7) : "unknown");
389
- const version = readInjected(true ? "0.9.82-rc.415" : void 0) ?? readInjected(typeof process !== "undefined" ? process.env?.ADHDEV_PKG_VERSION : void 0) ?? "unknown";
390
- const builtAt = readInjected(true ? "2026-06-28T13:43:23.868Z" : void 0);
387
+ const commit = readInjected(true ? "aebe69a58bc80d5e1db908141ea4d03792bd0b5d" : void 0) ?? "unknown";
388
+ const commitShort = readInjected(true ? "aebe69a5" : void 0) ?? (commit !== "unknown" ? commit.slice(0, 7) : "unknown");
389
+ const version = readInjected(true ? "0.9.82-rc.417" : void 0) ?? readInjected(typeof process !== "undefined" ? process.env?.ADHDEV_PKG_VERSION : void 0) ?? "unknown";
390
+ const builtAt = readInjected(true ? "2026-06-28T16:29:44.906Z" : void 0);
391
391
  cached = builtAt ? { commit, commitShort, version, builtAt } : { commit, commitShort, version };
392
392
  return cached;
393
393
  }
@@ -2562,6 +2562,7 @@ __export(mesh_config_exports, {
2562
2562
  listMagiPanels: () => listMagiPanels,
2563
2563
  listMeshes: () => listMeshes,
2564
2564
  markMeshHostPairingJoined: () => markMeshHostPairingJoined,
2565
+ normalizeMagiPanel: () => normalizeMagiPanel,
2565
2566
  normalizeRepoIdentity: () => normalizeRepoIdentity,
2566
2567
  removeMagiPanel: () => removeMagiPanel,
2567
2568
  removeNode: () => removeNode,
@@ -10268,7 +10269,7 @@ var init_mesh_scheduling_runtime = __esm({
10268
10269
  function readNonEmptyString2(value) {
10269
10270
  return typeof value === "string" && value.trim() ? value.trim() : "";
10270
10271
  }
10271
- function readRecord4(value) {
10272
+ function readRecord5(value) {
10272
10273
  return value && typeof value === "object" && !Array.isArray(value) ? value : void 0;
10273
10274
  }
10274
10275
  function buildMeshWorkerRelayStamp(currentSettings, meshContext) {
@@ -10296,17 +10297,17 @@ function resolveEventSessionId(event, fallback) {
10296
10297
  return readNonEmptyString2(event.targetSessionId) || readNonEmptyString2(event.sessionId) || readNonEmptyString2(event.instanceId) || readNonEmptyString2(fallback);
10297
10298
  }
10298
10299
  function readRefineJobId(event) {
10299
- const metadata = readRecord4(event.metadataEvent) || event;
10300
- const result = readRecord4(metadata.result);
10301
- const refineJob = readRecord4(result?.refineJob);
10300
+ const metadata = readRecord5(event.metadataEvent) || event;
10301
+ const result = readRecord5(metadata.result);
10302
+ const refineJob = readRecord5(result?.refineJob);
10302
10303
  return readNonEmptyString2(metadata.jobId) || readNonEmptyString2(refineJob?.jobId);
10303
10304
  }
10304
10305
  function readWorkerResultMetadata(event) {
10305
- return readRecord4(event.workerResult) || readRecord4(event.meshWorkerResult) || readRecord4(event.structuredResult);
10306
+ return readRecord5(event.workerResult) || readRecord5(event.meshWorkerResult) || readRecord5(event.structuredResult);
10306
10307
  }
10307
10308
  function readMeshCompletionSummary(metadataEvent) {
10308
10309
  const workerResult = readWorkerResultMetadata(metadataEvent);
10309
- const resultRecord = readRecord4(metadataEvent.result);
10310
+ const resultRecord = readRecord5(metadataEvent.result);
10310
10311
  return readNonEmptyString2(metadataEvent.finalSummary) || readNonEmptyString2(workerResult?.summary) || readNonEmptyString2(workerResult?.finalSummary) || readNonEmptyString2(resultRecord?.summary) || readNonEmptyString2(resultRecord?.finalSummary);
10311
10312
  }
10312
10313
  function truncateSurfacedPreview(text) {
@@ -10344,7 +10345,7 @@ function readEventTimestampValue(value) {
10344
10345
  return 0;
10345
10346
  }
10346
10347
  function isMissingFinalAssistantDiagnostic(record) {
10347
- const diag = readRecord4(record?.completionDiagnostic);
10348
+ const diag = readRecord5(record?.completionDiagnostic);
10348
10349
  return diag?.finalAssistantPresent === false || diag?.blockReason === "missing_final_assistant";
10349
10350
  }
10350
10351
  function isFalseIdleCompletion(record) {
@@ -10453,10 +10454,10 @@ Do NOT retry on this node. Consider reassigning to a different node or asking th
10453
10454
  }
10454
10455
  if (args.event === "refine:completed") {
10455
10456
  const jobId = readRefineJobId({ metadataEvent: args.metadataEvent });
10456
- const result = readRecord4(args.metadataEvent.result);
10457
- const validationSummary = readRecord4(result?.validationSummary);
10458
- const patchEquivalence = readRecord4(result?.patchEquivalence);
10459
- const finalConvergence = readRecord4(result?.finalBranchConvergenceState);
10457
+ const result = readRecord5(args.metadataEvent.result);
10458
+ const validationSummary = readRecord5(result?.validationSummary);
10459
+ const patchEquivalence = readRecord5(result?.patchEquivalence);
10460
+ const finalConvergence = readRecord5(result?.finalBranchConvergenceState);
10460
10461
  const validationStatus = readNonEmptyString2(validationSummary?.status);
10461
10462
  const patchStatus = readNonEmptyString2(patchEquivalence?.status) || (patchEquivalence?.equivalent === true ? "passed" : "");
10462
10463
  const into = readNonEmptyString2(result?.into);
@@ -10477,10 +10478,10 @@ Next step: ${nextStep}`;
10477
10478
  }
10478
10479
  if (args.event === "refine:failed") {
10479
10480
  const jobId = readRefineJobId({ metadataEvent: args.metadataEvent });
10480
- const result = readRecord4(args.metadataEvent.result);
10481
- const validationSummary = readRecord4(result?.validationSummary);
10482
- const patchEquivalence = readRecord4(result?.patchEquivalence);
10483
- const finalConvergence = readRecord4(result?.finalBranchConvergenceState);
10481
+ const result = readRecord5(args.metadataEvent.result);
10482
+ const validationSummary = readRecord5(result?.validationSummary);
10483
+ const patchEquivalence = readRecord5(result?.patchEquivalence);
10484
+ const finalConvergence = readRecord5(result?.finalBranchConvergenceState);
10484
10485
  const code = readNonEmptyString2(result?.code);
10485
10486
  const error = readNonEmptyString2(result?.error);
10486
10487
  const validationStatus = readNonEmptyString2(validationSummary?.status);
@@ -10523,9 +10524,9 @@ function normalizeCoordinatorDaemonIds(coordinatorDaemonId) {
10523
10524
  return expandDaemonIdForms(coordinatorDaemonId);
10524
10525
  }
10525
10526
  function readRefineJobId2(event) {
10526
- const metadata = readRecord4(event.metadataEvent) || event;
10527
- const result = readRecord4(metadata.result);
10528
- const refineJob = readRecord4(result?.refineJob);
10527
+ const metadata = readRecord5(event.metadataEvent) || event;
10528
+ const result = readRecord5(metadata.result);
10529
+ const refineJob = readRecord5(result?.refineJob);
10529
10530
  return readNonEmptyString2(metadata.jobId) || readNonEmptyString2(refineJob?.jobId);
10530
10531
  }
10531
10532
  function hasPendingRefineTerminalEventDuplicate(event) {
@@ -10537,12 +10538,12 @@ function hasPendingRefineTerminalEventDuplicate(event) {
10537
10538
  );
10538
10539
  }
10539
10540
  function buildPendingEventFingerprint(event) {
10540
- const metadata = readRecord4(event.metadataEvent) || {};
10541
+ const metadata = readRecord5(event.metadataEvent) || {};
10541
10542
  if (event.event === "worktree_bootstrap_complete" || event.event === "worktree_bootstrap_failed") {
10542
10543
  return [event.meshId, event.event, event.nodeId || ""].join("::");
10543
10544
  }
10544
10545
  if (TERMINAL_COMPLETION_EVENTS.has(event.event)) {
10545
- const terminalTaskId = readNonEmptyString2(metadata.taskId) || readNonEmptyString2(readRecord4(metadata.payload)?.taskId);
10546
+ const terminalTaskId = readNonEmptyString2(metadata.taskId) || readNonEmptyString2(readRecord5(metadata.payload)?.taskId);
10546
10547
  if (terminalTaskId) {
10547
10548
  return [
10548
10549
  event.meshId,
@@ -10552,14 +10553,14 @@ function buildPendingEventFingerprint(event) {
10552
10553
  ].join("::");
10553
10554
  }
10554
10555
  }
10555
- const consensusGroupId = readNonEmptyString2(metadata.consensusGroupId) || readNonEmptyString2(readRecord4(metadata.payload)?.consensusGroupId);
10556
+ const consensusGroupId = readNonEmptyString2(metadata.consensusGroupId) || readNonEmptyString2(readRecord5(metadata.payload)?.consensusGroupId);
10556
10557
  if (consensusGroupId) {
10557
- const groupTaskId = readNonEmptyString2(metadata.taskId) || readNonEmptyString2(readRecord4(metadata.payload)?.taskId);
10558
+ const groupTaskId = readNonEmptyString2(metadata.taskId) || readNonEmptyString2(readRecord5(metadata.payload)?.taskId);
10558
10559
  return [event.meshId, event.event, groupTaskId || "", consensusGroupId, "group"].join("::");
10559
10560
  }
10560
10561
  const sessionId = resolveEventSessionId(metadata);
10561
10562
  const providerSessionId = readNonEmptyString2(metadata.providerSessionId);
10562
- const taskId = readNonEmptyString2(metadata.taskId) || readNonEmptyString2(readRecord4(metadata.payload)?.taskId);
10563
+ const taskId = readNonEmptyString2(metadata.taskId) || readNonEmptyString2(readRecord5(metadata.payload)?.taskId);
10563
10564
  const jobId = readRefineJobId2(event);
10564
10565
  const timestamp = metadata.timestamp !== void 0 && metadata.timestamp !== null ? String(metadata.timestamp) : "";
10565
10566
  return [
@@ -10627,15 +10628,15 @@ function refineTerminalEventFromLedger(meshId, pending) {
10627
10628
  for (let i = entries.length - 1; i >= 0; i--) {
10628
10629
  const entry = entries[i];
10629
10630
  if (entry.kind !== "task_completed" && entry.kind !== "task_failed") continue;
10630
- const payload = readRecord4(entry.payload);
10631
+ const payload = readRecord5(entry.payload);
10631
10632
  if (payload?.source !== "refine_mesh_node_async_job") continue;
10632
- const refineJob = readRecord4(payload.refineJob);
10633
+ const refineJob = readRecord5(payload.refineJob);
10633
10634
  const jobId = readNonEmptyString2(refineJob?.jobId);
10634
10635
  if (!jobId || !acceptedJobIds.has(jobId)) continue;
10635
10636
  const eventName = entry.kind === "task_completed" ? "refine:completed" : "refine:failed";
10636
10637
  if (existingTerminalJobIds.has(`${eventName}:${jobId}`)) continue;
10637
10638
  existingTerminalJobIds.add(`${eventName}:${jobId}`);
10638
- const result = readRecord4(payload.result);
10639
+ const result = readRecord5(payload.result);
10639
10640
  const metadataEvent = {
10640
10641
  source: "refine_mesh_node_async_job",
10641
10642
  jobId,
@@ -11140,7 +11141,7 @@ function buildNoProgressCompletionReconciliation(args) {
11140
11141
  const providerType = readNonEmptyString2(args.metadataEvent.providerType);
11141
11142
  const providerSessionId = readNonEmptyString2(args.metadataEvent.providerSessionId);
11142
11143
  const workerResult = readWorkerResultMetadata(args.metadataEvent);
11143
- const completionDiagnostic = readRecord4(args.metadataEvent.completionDiagnostic);
11144
+ const completionDiagnostic = readRecord5(args.metadataEvent.completionDiagnostic);
11144
11145
  const finalSummary = readNonEmptyString2(args.metadataEvent.finalSummary);
11145
11146
  const status = readNonEmptyString2(args.metadataEvent.status).toLowerCase();
11146
11147
  const explicitCompletionEvidence = Boolean(
@@ -24438,6 +24439,124 @@ function buildMeshLedgerReconciliationEvidence(meshId, replicas) {
24438
24439
  init_mesh_work_queue();
24439
24440
  init_mesh_active_work();
24440
24441
  init_mesh_refine_status();
24442
+
24443
+ // src/mesh/mesh-magi-status.ts
24444
+ function readString7(value) {
24445
+ return typeof value === "string" && value.trim() ? value.trim() : void 0;
24446
+ }
24447
+ function readRecord4(value) {
24448
+ return value && typeof value === "object" && !Array.isArray(value) ? value : void 0;
24449
+ }
24450
+ function readNumber2(value) {
24451
+ return typeof value === "number" && Number.isFinite(value) ? value : void 0;
24452
+ }
24453
+ var MAGI_NEEDS_VERIFICATION_PREVIEW_CAP = 8;
24454
+ function summarizeNeedsVerification(synthesis) {
24455
+ const list = Array.isArray(synthesis?.needsVerification) ? synthesis.needsVerification : void 0;
24456
+ if (!list) return void 0;
24457
+ const items = [];
24458
+ for (const raw of list.slice(0, MAGI_NEEDS_VERIFICATION_PREVIEW_CAP)) {
24459
+ const r = readRecord4(raw);
24460
+ const claim = readString7(r?.claim);
24461
+ if (!claim) continue;
24462
+ items.push({ claim, category: readString7(r?.category) || "needs_verification" });
24463
+ }
24464
+ return items;
24465
+ }
24466
+ function mergeGroup(groups, patch) {
24467
+ const consensusGroupId = readString7(patch.consensusGroupId);
24468
+ if (!consensusGroupId) return;
24469
+ const previous = groups.get(consensusGroupId);
24470
+ const status = patch.status === "synthesized" || previous?.status === "synthesized" ? "synthesized" : "running";
24471
+ const definedPatch = Object.fromEntries(
24472
+ Object.entries(patch).filter(([, v]) => v !== void 0)
24473
+ );
24474
+ groups.set(consensusGroupId, { ...previous, ...definedPatch, consensusGroupId, status });
24475
+ }
24476
+ function buildMeshMagiActivity(args) {
24477
+ const groups = /* @__PURE__ */ new Map();
24478
+ for (const entry of args.ledgerEntries || []) {
24479
+ const payload = readRecord4(entry.payload);
24480
+ if (payload?.source !== "magi") continue;
24481
+ const consensusGroupId = readString7(payload.consensusGroupId);
24482
+ if (!consensusGroupId) continue;
24483
+ if (entry.kind === "magi_synthesis") {
24484
+ const synthesis = readRecord4(payload.synthesis);
24485
+ mergeGroup(groups, {
24486
+ consensusGroupId,
24487
+ status: "synthesized",
24488
+ missionId: readString7(payload.missionId),
24489
+ panel: readString7(payload.panel),
24490
+ question: readString7(payload.question),
24491
+ replicaCount: readNumber2(synthesis?.replicasExpected) ?? readNumber2(payload.replicaCount),
24492
+ answered: readNumber2(synthesis?.replicasAnswered),
24493
+ missing: readNumber2(synthesis?.replicasMissing),
24494
+ staleReplicas: readNumber2(payload.staleReplicas) ?? readNumber2(synthesis?.staleReplicas),
24495
+ needsVerificationCount: Array.isArray(synthesis?.needsVerification) ? synthesis.needsVerification.length : void 0,
24496
+ agreedCount: Array.isArray(synthesis?.agreed) ? synthesis.agreed.length : void 0,
24497
+ independenceBanner: synthesis && "independenceBanner" in synthesis ? synthesis.independenceBanner : void 0,
24498
+ gitSkew: readRecord4(synthesis?.gitSkew),
24499
+ needsVerification: summarizeNeedsVerification(synthesis),
24500
+ openQuestions: Array.isArray(synthesis?.openQuestions) ? synthesis.openQuestions.slice(0, 10) : void 0,
24501
+ lastLedgerKind: entry.kind,
24502
+ lastUpdatedAt: entry.timestamp
24503
+ });
24504
+ } else if (entry.kind === "magi_dispatched") {
24505
+ mergeGroup(groups, {
24506
+ consensusGroupId,
24507
+ status: "running",
24508
+ missionId: readString7(payload.missionId),
24509
+ panel: readString7(payload.panel),
24510
+ question: readString7(payload.question),
24511
+ replicaCount: readNumber2(payload.replicaCount),
24512
+ lastLedgerKind: entry.kind,
24513
+ lastUpdatedAt: entry.timestamp
24514
+ });
24515
+ }
24516
+ }
24517
+ return Array.from(groups.values()).sort((a, b) => {
24518
+ const at = new Date(a.lastUpdatedAt || "").getTime();
24519
+ const bt = new Date(b.lastUpdatedAt || "").getTime();
24520
+ return (Number.isFinite(bt) ? bt : 0) - (Number.isFinite(at) ? at : 0);
24521
+ });
24522
+ }
24523
+ var STALE_MAGI_WINDOW_MS = 6 * 60 * 60 * 1e3;
24524
+ var RECENT_MAGI_CAP = 6;
24525
+ function activityTime(g) {
24526
+ const t = new Date(g.lastUpdatedAt || "").getTime();
24527
+ return Number.isFinite(t) ? t : 0;
24528
+ }
24529
+ function summarizeMeshMagiActivity(activity) {
24530
+ const running = [];
24531
+ const synthesized = [];
24532
+ for (const g of activity) {
24533
+ if (g.status === "synthesized") synthesized.push(g);
24534
+ else running.push(g);
24535
+ }
24536
+ let newest = 0;
24537
+ for (const g of activity) newest = Math.max(newest, activityTime(g));
24538
+ const cutoff = newest - STALE_MAGI_WINDOW_MS;
24539
+ const synthesizedByRecency = [...synthesized].sort((a, b) => activityTime(b) - activityTime(a));
24540
+ const freshSynthesized = synthesizedByRecency.filter((g) => activityTime(g) >= cutoff).slice(0, RECENT_MAGI_CAP);
24541
+ const byStatus = {};
24542
+ for (const g of [...running, ...freshSynthesized]) {
24543
+ byStatus[g.status] = (byStatus[g.status] ?? 0) + 1;
24544
+ }
24545
+ const runningByRecency = [...running].sort((a, b) => activityTime(b) - activityTime(a));
24546
+ return {
24547
+ total: running.length + freshSynthesized.length,
24548
+ byStatus,
24549
+ staleSynthesized: synthesized.length - freshSynthesized.length,
24550
+ groups: [...runningByRecency, ...freshSynthesized]
24551
+ };
24552
+ }
24553
+ function getMeshMagiActivityByGroup(ledgerEntries, consensusGroupId) {
24554
+ const key2 = readString7(consensusGroupId);
24555
+ if (!key2) return void 0;
24556
+ return buildMeshMagiActivity({ ledgerEntries }).find((g) => g.consensusGroupId === key2);
24557
+ }
24558
+
24559
+ // src/index.ts
24441
24560
  init_mesh_scheduling_runtime();
24442
24561
  init_mesh_host_ownership();
24443
24562
  init_mesh_events();
@@ -37610,10 +37729,15 @@ var FsmDriver = class {
37610
37729
  this.win32SubmitTimer = null;
37611
37730
  }
37612
37731
  const startedAt = Date.now();
37613
- const probe = normalizeForEcho(body).slice(-WIN32_ECHO_PROBE_CHARS);
37732
+ const normBody = normalizeForEcho(body);
37733
+ const headProbe = normBody.slice(0, WIN32_ECHO_PROBE_CHARS);
37734
+ const tailProbe = normBody.slice(-WIN32_ECHO_PROBE_CHARS);
37614
37735
  const bodyEchoed = () => {
37615
- if (!probe) return true;
37616
- return normalizeForEcho(this.adapter.snapshot()).includes(probe);
37736
+ if (!normBody) return true;
37737
+ const visible = normalizeForEcho(this.adapter.snapshot());
37738
+ if (!visible.includes(tailProbe)) return false;
37739
+ const full = normalizeForEcho(this.adapter.snapshotWithScrollback());
37740
+ return full.includes(headProbe);
37617
37741
  };
37618
37742
  const fire = (attempt) => {
37619
37743
  this.win32SubmitTimer = null;
@@ -50350,7 +50474,7 @@ function runGit2(repoRoot, args) {
50350
50474
  return "";
50351
50475
  }
50352
50476
  }
50353
- function readRecord5(repoRoot) {
50477
+ function readRecord6(repoRoot) {
50354
50478
  const path43 = resolve19(repoRoot, PREVIEW_DEPLOY_RECORD);
50355
50479
  if (!existsSync40(path43)) return null;
50356
50480
  try {
@@ -50390,7 +50514,7 @@ function readCurrentMainCommit(repoRoot) {
50390
50514
  }
50391
50515
  function buildPreviewFreshness(repoRoot) {
50392
50516
  const current = readCurrentMainCommit(repoRoot);
50393
- const record = readRecord5(repoRoot);
50517
+ const record = readRecord6(repoRoot);
50394
50518
  const lastPreviewCommit = normalizeCommit(record?.lastPreviewCommit);
50395
50519
  const targets = readTargetFreshness(record, current.currentMainCommit);
50396
50520
  let status = "unknown";
@@ -64251,6 +64375,7 @@ export {
64251
64375
  IdeProviderInstance,
64252
64376
  InMemoryGitSnapshotStore,
64253
64377
  LOG,
64378
+ MAGI_NEEDS_VERIFICATION_PREVIEW_CAP,
64254
64379
  MAX_LEDGER_SLICE_LIMIT,
64255
64380
  MESH_CONVERGE_FAST_FORWARD_TAG,
64256
64381
  MESH_CONVERGE_REFINE_TAG,
@@ -64272,8 +64397,10 @@ export {
64272
64397
  ProviderCliAdapter,
64273
64398
  ProviderInstanceManager,
64274
64399
  ProviderLoader,
64400
+ RECENT_MAGI_CAP,
64275
64401
  RECENT_TERMINAL_REFINE_CAP,
64276
64402
  RawTerminalAttachment,
64403
+ STALE_MAGI_WINDOW_MS,
64277
64404
  STALE_TERMINAL_REFINE_WINDOW_MS,
64278
64405
  STANDALONE_CDP_SCAN_INTERVAL_MS,
64279
64406
  SessionHostPtyTransportFactory,
@@ -64303,6 +64430,7 @@ export {
64303
64430
  buildMeshHostRequiredFailure,
64304
64431
  buildMeshLedgerReconciliationEvidence,
64305
64432
  buildMeshLedgerReplicaEvidence,
64433
+ buildMeshMagiActivity,
64306
64434
  buildMeshNodeCapabilityTags,
64307
64435
  buildMeshNodeDataFreshness,
64308
64436
  buildMeshNodeProbeFreshness,
@@ -64392,6 +64520,7 @@ export {
64392
64520
  getMagiPanel,
64393
64521
  getMesh,
64394
64522
  getMeshByRepo,
64523
+ getMeshMagiActivityByGroup,
64395
64524
  getMeshMission,
64396
64525
  getMeshMissions,
64397
64526
  getMeshQueueRevision,
@@ -64476,6 +64605,7 @@ export {
64476
64605
  normalizeInputEnvelope,
64477
64606
  normalizeInteractivePrompt,
64478
64607
  normalizeInteractivePromptResponse,
64608
+ normalizeMagiPanel,
64479
64609
  normalizeManagedStatus,
64480
64610
  normalizeMeshCapabilityTags,
64481
64611
  normalizeMeshDaemonRole,
@@ -64557,6 +64687,7 @@ export {
64557
64687
  suggestMeshRefineConfig,
64558
64688
  summarizeGitStatus,
64559
64689
  summarizeMeshAsyncRefineJobs,
64690
+ summarizeMeshMagiActivity,
64560
64691
  summarizeMeshMission,
64561
64692
  summarizeMissionTasks,
64562
64693
  triggerMeshQueue,