@bojackduy/opencode-loopd 1.13.2 → 1.13.3

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/CHANGELOG.md CHANGED
@@ -17,6 +17,21 @@
17
17
 
18
18
  - Scratch harness (real host + real service): timeout→`terminated/timeout`+notify; until→`terminated/until` with 1 notify and `until-matched` state; pattern read returns ANSI-original lines case-insensitively, rejects `(a+)+`; env value reaches process while state keeps only the name; terminate+remove in one call. 555 tests pass.
19
19
 
20
+ ## 1.13.3 (2026-10-13) — Tracked Worker Notifications
21
+
22
+ ### Fixed
23
+
24
+ - Background notifications addressed to goal workers now use the existing tracked send path instead of injecting uncorrelated messages that change assistant ancestry and cause false unconfirmed/stale diagnostics.
25
+ - Busy workers and workers with live execution reservations queue notifications for a later tracked turn. Idle workers receive a registered prompt; paused workers remain paused and retired workers are not revived.
26
+ - Ordinary parent-session notifications retain their existing delivery and agent identity.
27
+
28
+ ### Verification
29
+
30
+ - 801 tests pass across 71 files, including an end-to-end command watch/exit regression that drains queued notifications once after the original turn completes.
31
+ - All seven notification regressions pass ten repetitions; typecheck and server/TUI builds pass.
32
+
33
+ Provider retry/transport stalls and expired-lease dashboard labels are not changed by this release.
34
+
20
35
  ## 1.13.2 (2026-10-12) — Diagnostic Isolation and Lock Recovery
21
36
 
22
37
  ### Fixed
package/dist/server.js CHANGED
@@ -10461,10 +10461,28 @@ function commandTools(options) {
10461
10461
  init_server_log();
10462
10462
  init_state_repository();
10463
10463
  // package.json
10464
- var version = "1.13.2";
10464
+ var version = "1.13.3";
10465
10465
 
10466
10466
  // src/server/plugin.ts
10467
10467
  init_workspace_execution();
10468
+
10469
+ // src/application/owner-notification.ts
10470
+ init_state_repository();
10471
+ init_server_log();
10472
+ async function deliverOwnerNotification(directory, host, goals, sessionID, message, agent) {
10473
+ const state = await readState(directory);
10474
+ if (state.retiredWorkerSessions?.includes(sessionID))
10475
+ return false;
10476
+ const goal = state.goals.find((item) => item.workerSessionID === sessionID);
10477
+ if (goal) {
10478
+ const result = await goals.sendUserMessage(directory, goal.id, message);
10479
+ await logServerEvent(directory, "worker.notification", { goalID: goal.id, workerSessionID: sessionID, outcome: result.outcome });
10480
+ return result.ok;
10481
+ }
10482
+ return await host.notifyOwner(sessionID, message, agent) !== false;
10483
+ }
10484
+
10485
+ // src/server/plugin.ts
10468
10486
  var PLUGIN_ID = "opencode-loopd.server";
10469
10487
  var server = async ({ client, directory }, pluginOptions) => {
10470
10488
  const defaults = parsePluginDefaults(pluginOptions);
@@ -10474,6 +10492,8 @@ var server = async ({ client, directory }, pluginOptions) => {
10474
10492
  };
10475
10493
  function createServerHooks(directory, host, defaults) {
10476
10494
  const goalService = createGoalService(host);
10495
+ const notificationHost = { notifyOwner: host.notifyOwner.bind(host) };
10496
+ host.notifyOwner = (sessionID, message, agent) => deliverOwnerNotification(directory, notificationHost, goalService, sessionID, message, agent);
10477
10497
  const commandBroker = createCommandEventBroker();
10478
10498
  const commandHost = createCommandHost();
10479
10499
  const commandService = createCommandService(commandHost, {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "@bojackduy/opencode-loopd",
4
- "version": "1.13.2",
4
+ "version": "1.13.3",
5
5
  "description": "Codex-inspired background goal engine for OpenCode — autonomous subagents, engine-driven loop, child worker sessions and modal TUI dashboard. Like Claude Code loop for OpenCode.",
6
6
  "type": "module",
7
7
  "license": "AGPL-3.0-or-later",