@fdcn/sourcefed 0.2.9 → 0.3.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.
package/README.md CHANGED
@@ -33,12 +33,12 @@ OpenCode loads this package as both a server and a TUI plugin:
33
33
 
34
34
  ```json
35
35
  // opencode.json
36
- { "plugin": ["@fdcn/sourcefed@0.2.9"] }
36
+ { "plugin": ["@fdcn/sourcefed@0.3.0"] }
37
37
  ```
38
38
 
39
39
  ```json
40
40
  // tui.json
41
- { "plugin": ["@fdcn/sourcefed@0.2.9"] }
41
+ { "plugin": ["@fdcn/sourcefed@0.3.0"] }
42
42
  ```
43
43
 
44
44
  The package exposes `./server`, `./tui`, `./opencode`, `./opencode/tui`, and `./pi` entrypoints for hosts that load them directly.
@@ -11605,6 +11605,7 @@ var SourcefedDaemon = class {
11605
11605
  if (!monitor) return { ok: false, error: `monitor ${id} was not found for this target` };
11606
11606
  const stopped = await this.service.stop(id);
11607
11607
  if ("error" in stopped) return { ok: false, error: stopped.error };
11608
+ await this.purgeMonitorEvents(monitor.target, id);
11608
11609
  return { ok: true, monitor: monitorView(stopped) };
11609
11610
  }
11610
11611
  async startMonitor(target, id) {
@@ -11618,6 +11619,7 @@ var SourcefedDaemon = class {
11618
11619
  const monitor = await ownedMonitor(this.service, id, target);
11619
11620
  if (!monitor) return { ok: false, error: `monitor ${id} was not found for this target` };
11620
11621
  await this.service.remove(id);
11622
+ await this.purgeMonitorEvents(monitor.target, id);
11621
11623
  return { ok: true, removed: true };
11622
11624
  }
11623
11625
  async readEvents(target) {
@@ -11691,6 +11693,8 @@ var SourcefedDaemon = class {
11691
11693
  async deliver(key, target, listeners) {
11692
11694
  const queued = await this.queue.read(target);
11693
11695
  if (queued.length === 0) return;
11696
+ const enabled = new Set((await this.service.list()).filter((monitor) => monitor.enabled).map((monitor) => monitor.id));
11697
+ await this.dropQueued(target, queued.filter((event) => !enabled.has(event.monitorID)).map((event) => event.id));
11694
11698
  let receivedByListener = this.received.get(key);
11695
11699
  if (!receivedByListener) {
11696
11700
  receivedByListener = /* @__PURE__ */ new Map();
@@ -11700,7 +11704,7 @@ var SourcefedDaemon = class {
11700
11704
  for (const received of receivedByListener.values()) {
11701
11705
  for (const id of received) claimed.add(id);
11702
11706
  }
11703
- const fresh = queued.filter((event) => !claimed.has(event.id));
11707
+ const fresh = queued.filter((event) => enabled.has(event.monitorID) && !claimed.has(event.id));
11704
11708
  if (fresh.length === 0) return;
11705
11709
  for (const listener of [...listeners]) {
11706
11710
  let received = receivedByListener.get(listener);
@@ -11719,6 +11723,20 @@ var SourcefedDaemon = class {
11719
11723
  }
11720
11724
  }
11721
11725
  }
11726
+ async dropQueued(target, eventIDs) {
11727
+ if (eventIDs.length === 0) return;
11728
+ await this.queue.acknowledge(target, eventIDs);
11729
+ const receivedByListener = this.received.get(targetKey(target));
11730
+ if (!receivedByListener) return;
11731
+ const ids = new Set(eventIDs);
11732
+ for (const received of receivedByListener.values()) {
11733
+ for (const id of ids) received.delete(id);
11734
+ }
11735
+ }
11736
+ async purgeMonitorEvents(target, monitorID) {
11737
+ const queued = await this.queue.read(target);
11738
+ await this.dropQueued(target, queued.filter((event) => event.monitorID === monitorID).map((event) => event.id));
11739
+ }
11722
11740
  };
11723
11741
  function monitorView(monitor) {
11724
11742
  const definition = sourceDefinition(monitor.source);
package/dist/cli.js CHANGED
@@ -11528,6 +11528,7 @@ var SourcefedDaemon = class {
11528
11528
  if (!monitor) return { ok: false, error: `monitor ${id} was not found for this target` };
11529
11529
  const stopped = await this.service.stop(id);
11530
11530
  if ("error" in stopped) return { ok: false, error: stopped.error };
11531
+ await this.purgeMonitorEvents(monitor.target, id);
11531
11532
  return { ok: true, monitor: monitorView(stopped) };
11532
11533
  }
11533
11534
  async startMonitor(target, id) {
@@ -11541,6 +11542,7 @@ var SourcefedDaemon = class {
11541
11542
  const monitor = await ownedMonitor(this.service, id, target);
11542
11543
  if (!monitor) return { ok: false, error: `monitor ${id} was not found for this target` };
11543
11544
  await this.service.remove(id);
11545
+ await this.purgeMonitorEvents(monitor.target, id);
11544
11546
  return { ok: true, removed: true };
11545
11547
  }
11546
11548
  async readEvents(target) {
@@ -11614,6 +11616,8 @@ var SourcefedDaemon = class {
11614
11616
  async deliver(key, target, listeners) {
11615
11617
  const queued = await this.queue.read(target);
11616
11618
  if (queued.length === 0) return;
11619
+ const enabled = new Set((await this.service.list()).filter((monitor) => monitor.enabled).map((monitor) => monitor.id));
11620
+ await this.dropQueued(target, queued.filter((event) => !enabled.has(event.monitorID)).map((event) => event.id));
11617
11621
  let receivedByListener = this.received.get(key);
11618
11622
  if (!receivedByListener) {
11619
11623
  receivedByListener = /* @__PURE__ */ new Map();
@@ -11623,7 +11627,7 @@ var SourcefedDaemon = class {
11623
11627
  for (const received of receivedByListener.values()) {
11624
11628
  for (const id of received) claimed.add(id);
11625
11629
  }
11626
- const fresh = queued.filter((event) => !claimed.has(event.id));
11630
+ const fresh = queued.filter((event) => enabled.has(event.monitorID) && !claimed.has(event.id));
11627
11631
  if (fresh.length === 0) return;
11628
11632
  for (const listener of [...listeners]) {
11629
11633
  let received = receivedByListener.get(listener);
@@ -11642,6 +11646,20 @@ var SourcefedDaemon = class {
11642
11646
  }
11643
11647
  }
11644
11648
  }
11649
+ async dropQueued(target, eventIDs) {
11650
+ if (eventIDs.length === 0) return;
11651
+ await this.queue.acknowledge(target, eventIDs);
11652
+ const receivedByListener = this.received.get(targetKey(target));
11653
+ if (!receivedByListener) return;
11654
+ const ids = new Set(eventIDs);
11655
+ for (const received of receivedByListener.values()) {
11656
+ for (const id of ids) received.delete(id);
11657
+ }
11658
+ }
11659
+ async purgeMonitorEvents(target, monitorID) {
11660
+ const queued = await this.queue.read(target);
11661
+ await this.dropQueued(target, queued.filter((event) => event.monitorID === monitorID).map((event) => event.id));
11662
+ }
11645
11663
  };
11646
11664
  function monitorView(monitor) {
11647
11665
  const definition = sourceDefinition(monitor.source);
package/dist/daemon.js CHANGED
@@ -11630,6 +11630,7 @@ var SourcefedDaemon = class {
11630
11630
  if (!monitor) return { ok: false, error: `monitor ${id} was not found for this target` };
11631
11631
  const stopped = await this.service.stop(id);
11632
11632
  if ("error" in stopped) return { ok: false, error: stopped.error };
11633
+ await this.purgeMonitorEvents(monitor.target, id);
11633
11634
  return { ok: true, monitor: monitorView(stopped) };
11634
11635
  }
11635
11636
  async startMonitor(target, id) {
@@ -11643,6 +11644,7 @@ var SourcefedDaemon = class {
11643
11644
  const monitor = await ownedMonitor(this.service, id, target);
11644
11645
  if (!monitor) return { ok: false, error: `monitor ${id} was not found for this target` };
11645
11646
  await this.service.remove(id);
11647
+ await this.purgeMonitorEvents(monitor.target, id);
11646
11648
  return { ok: true, removed: true };
11647
11649
  }
11648
11650
  async readEvents(target) {
@@ -11716,6 +11718,8 @@ var SourcefedDaemon = class {
11716
11718
  async deliver(key, target, listeners) {
11717
11719
  const queued = await this.queue.read(target);
11718
11720
  if (queued.length === 0) return;
11721
+ const enabled = new Set((await this.service.list()).filter((monitor) => monitor.enabled).map((monitor) => monitor.id));
11722
+ await this.dropQueued(target, queued.filter((event) => !enabled.has(event.monitorID)).map((event) => event.id));
11719
11723
  let receivedByListener = this.received.get(key);
11720
11724
  if (!receivedByListener) {
11721
11725
  receivedByListener = /* @__PURE__ */ new Map();
@@ -11725,7 +11729,7 @@ var SourcefedDaemon = class {
11725
11729
  for (const received of receivedByListener.values()) {
11726
11730
  for (const id of received) claimed.add(id);
11727
11731
  }
11728
- const fresh = queued.filter((event) => !claimed.has(event.id));
11732
+ const fresh = queued.filter((event) => enabled.has(event.monitorID) && !claimed.has(event.id));
11729
11733
  if (fresh.length === 0) return;
11730
11734
  for (const listener of [...listeners]) {
11731
11735
  let received = receivedByListener.get(listener);
@@ -11744,6 +11748,20 @@ var SourcefedDaemon = class {
11744
11748
  }
11745
11749
  }
11746
11750
  }
11751
+ async dropQueued(target, eventIDs) {
11752
+ if (eventIDs.length === 0) return;
11753
+ await this.queue.acknowledge(target, eventIDs);
11754
+ const receivedByListener = this.received.get(targetKey(target));
11755
+ if (!receivedByListener) return;
11756
+ const ids = new Set(eventIDs);
11757
+ for (const received of receivedByListener.values()) {
11758
+ for (const id of ids) received.delete(id);
11759
+ }
11760
+ }
11761
+ async purgeMonitorEvents(target, monitorID) {
11762
+ const queued = await this.queue.read(target);
11763
+ await this.dropQueued(target, queued.filter((event) => event.monitorID === monitorID).map((event) => event.id));
11764
+ }
11747
11765
  };
11748
11766
  function monitorView(monitor) {
11749
11767
  const definition = sourceDefinition(monitor.source);
package/dist/mcp.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  decodeTarget,
3
3
  encodeTarget
4
- } from "./chunk-QHT4DCW7.js";
4
+ } from "./chunk-QPDTUNFA.js";
5
5
  import {
6
6
  __export
7
7
  } from "./chunk-MLKGABMK.js";