@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 +15 -0
- package/dist/server.js +21 -1
- package/package.json +1 -1
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.
|
|
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.
|
|
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",
|