@excitedjs/dreamux 0.8.0 → 0.9.1
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/admin/socket.js +18 -20
- package/dist/admin/socket.js.map +1 -1
- package/dist/channel/chat-bots-store.js +26 -28
- package/dist/channel/chat-bots-store.js.map +1 -1
- package/dist/channel/feishu-gate.js +16 -9
- package/dist/channel/feishu-gate.js.map +1 -1
- package/dist/cli/doctor.js +56 -17
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/dreamux.js +112 -5
- package/dist/cli/dreamux.js.map +1 -1
- package/dist/cli/server.js +7 -7
- package/dist/cli/server.js.map +1 -1
- package/dist/codex/supervisor.js +31 -32
- package/dist/codex/supervisor.js.map +1 -1
- package/dist/daemon/install.js +80 -0
- package/dist/daemon/install.js.map +1 -0
- package/dist/daemon/restart-intent.js +166 -0
- package/dist/daemon/restart-intent.js.map +1 -0
- package/dist/daemon/service-control.js +56 -0
- package/dist/daemon/service-control.js.map +1 -0
- package/dist/dispatcher/runtime.js +53 -17
- package/dist/dispatcher/runtime.js.map +1 -1
- package/dist/dispatcher/turn-manager.js +42 -0
- package/dist/dispatcher/turn-manager.js.map +1 -1
- package/dist/onboard/dispatcher-skill.js +13 -8
- package/dist/onboard/dispatcher-skill.js.map +1 -1
- package/dist/onboard/ledger.js +33 -23
- package/dist/onboard/ledger.js.map +1 -1
- package/dist/onboard/run.js +29 -19
- package/dist/onboard/run.js.map +1 -1
- package/dist/onboard/service.js +101 -16
- package/dist/onboard/service.js.map +1 -1
- package/dist/onboard/uninstall.js +43 -55
- package/dist/onboard/uninstall.js.map +1 -1
- package/dist/runtime/config.js +32 -22
- package/dist/runtime/config.js.map +1 -1
- package/dist/runtime/dispatcher-codex-home.js +22 -12
- package/dist/runtime/dispatcher-codex-home.js.map +1 -1
- package/dist/runtime/dispatcher-store.js +48 -21
- package/dist/runtime/dispatcher-store.js.map +1 -1
- package/dist/runtime/logger.js +36 -11
- package/dist/runtime/logger.js.map +1 -1
- package/dist/runtime/paths.js +9 -0
- package/dist/runtime/paths.js.map +1 -1
- package/dist/server.js +47 -14
- package/dist/server.js.map +1 -1
- package/package.json +6 -3
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Restart-notice marker — the one-shot signal that turns a plain service
|
|
3
|
+
* restart into "after you come back up, tell these resumed dispatchers the
|
|
4
|
+
* restart finished".
|
|
5
|
+
*
|
|
6
|
+
* Contract (issue #78):
|
|
7
|
+
* - `dreamux daemon restart --notify-resumed --dispatcher <id>` writes the
|
|
8
|
+
* marker to dreamux state *before* it asks the service manager to restart.
|
|
9
|
+
* Writing first means the marker survives even when the calling CLI is a
|
|
10
|
+
* child of the Codex process group that the restart reaps (the dispatcher
|
|
11
|
+
* self-update case): the caller may be killed before `systemctl` returns,
|
|
12
|
+
* so it must not depend on observing an exit code.
|
|
13
|
+
* - The freshly started server loads the marker exactly once, deletes it
|
|
14
|
+
* immediately (snapshot-in-memory semantics), then hands the announce text
|
|
15
|
+
* to each named dispatcher as it comes up resumed. Deleting on load is what
|
|
16
|
+
* stops a later cold boot / crash auto-heal from replaying the notice.
|
|
17
|
+
* - A TTL bounds staleness: a marker older than its TTL is ignored (and the
|
|
18
|
+
* file removed). The TTL is re-checked at claim time too, so a dispatcher
|
|
19
|
+
* that only starts long after boot (e.g. via a later admin `dispatcher
|
|
20
|
+
* start`) does not claim a stale notice.
|
|
21
|
+
*/
|
|
22
|
+
import { mkdir, readFile, rm, writeFile } from 'node:fs/promises';
|
|
23
|
+
import { dirname } from 'node:path';
|
|
24
|
+
import { restartIntentPath } from '../runtime/paths.js';
|
|
25
|
+
/** Default English notice injected into a resumed dispatcher after restart. */
|
|
26
|
+
export const DEFAULT_RESTART_ANNOUNCE = 'Restart completed.';
|
|
27
|
+
/**
|
|
28
|
+
* How long a restart marker stays valid. A `daemon restart` is a service
|
|
29
|
+
* restart (seconds), not a machine reboot, so ten minutes is comfortably
|
|
30
|
+
* longer than any healthy restart+resume while still bounding a stale marker
|
|
31
|
+
* left behind by a crash mid-restart.
|
|
32
|
+
*/
|
|
33
|
+
export const DEFAULT_RESTART_INTENT_TTL_MS = 10 * 60_000;
|
|
34
|
+
/**
|
|
35
|
+
* Persist the restart marker. Must be called *before* triggering the service
|
|
36
|
+
* manager restart so the marker is durable if the caller is killed.
|
|
37
|
+
*/
|
|
38
|
+
export async function writeRestartIntent(options) {
|
|
39
|
+
const path = options.path ?? restartIntentPath();
|
|
40
|
+
const file = {
|
|
41
|
+
version: 1,
|
|
42
|
+
created_at_ms: options.now,
|
|
43
|
+
ttl_ms: options.ttlMs ?? DEFAULT_RESTART_INTENT_TTL_MS,
|
|
44
|
+
announce: options.announce !== undefined && options.announce.trim() !== ''
|
|
45
|
+
? options.announce
|
|
46
|
+
: DEFAULT_RESTART_ANNOUNCE,
|
|
47
|
+
targets: dedupeNonEmpty(options.targets),
|
|
48
|
+
};
|
|
49
|
+
await mkdir(dirname(path), { recursive: true });
|
|
50
|
+
await writeFile(path, `${JSON.stringify(file, null, 2)}\n`, { mode: 0o600 });
|
|
51
|
+
return path;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Best-effort removal of the restart marker. Used to roll back a marker after
|
|
55
|
+
* the restart command itself fails synchronously while this process is still
|
|
56
|
+
* alive — leaving it would let the next ordinary `serve` start (within the TTL)
|
|
57
|
+
* falsely consume it and inject a notice for a restart that never happened. The
|
|
58
|
+
* self-update path where the caller is reaped before reaching here keeps the
|
|
59
|
+
* marker (durability), which is the intended behaviour (issue #78).
|
|
60
|
+
*/
|
|
61
|
+
export async function clearRestartIntent(path = restartIntentPath()) {
|
|
62
|
+
try {
|
|
63
|
+
await rm(path, { force: true });
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
/* best effort */
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Drop the restart marker, then trigger the restart. The marker is written
|
|
71
|
+
* first so it survives a self-update restart that reaps the caller. If the
|
|
72
|
+
* restart command instead fails synchronously (caller still alive), roll the
|
|
73
|
+
* marker back so a later ordinary `serve` start cannot falsely consume it
|
|
74
|
+
* within the TTL. See issue #78.
|
|
75
|
+
*/
|
|
76
|
+
export async function notifyResumedRestart(options) {
|
|
77
|
+
const path = await writeRestartIntent({
|
|
78
|
+
targets: options.targets,
|
|
79
|
+
...(options.announce !== undefined ? { announce: options.announce } : {}),
|
|
80
|
+
now: options.now,
|
|
81
|
+
...(options.path !== undefined ? { path: options.path } : {}),
|
|
82
|
+
});
|
|
83
|
+
try {
|
|
84
|
+
await options.runControl();
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
await clearRestartIntent(path);
|
|
88
|
+
throw err;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* In-memory snapshot of the restart marker. Constructed once at server start;
|
|
93
|
+
* `claim` hands out the announce text per target exactly once.
|
|
94
|
+
*/
|
|
95
|
+
export class RestartIntentConsumer {
|
|
96
|
+
announce;
|
|
97
|
+
expiresAtMs;
|
|
98
|
+
remaining;
|
|
99
|
+
constructor(announce, expiresAtMs, remaining) {
|
|
100
|
+
this.announce = announce;
|
|
101
|
+
this.expiresAtMs = expiresAtMs;
|
|
102
|
+
this.remaining = remaining;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Read the marker (if any), delete it from disk, and return a consumer. A
|
|
106
|
+
* missing / malformed / expired marker yields an empty consumer (and the
|
|
107
|
+
* stale file is removed). This is the only reader of the marker file.
|
|
108
|
+
*/
|
|
109
|
+
static async load(options = { now: 0 }) {
|
|
110
|
+
const path = options.path ?? restartIntentPath();
|
|
111
|
+
const empty = new RestartIntentConsumer('', 0, new Set());
|
|
112
|
+
let parsed = null;
|
|
113
|
+
try {
|
|
114
|
+
parsed = JSON.parse(await readFile(path, 'utf8'));
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
parsed = null;
|
|
118
|
+
}
|
|
119
|
+
// Single reader: drop the file regardless of validity so it never replays.
|
|
120
|
+
try {
|
|
121
|
+
await rm(path, { force: true });
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
/* best effort */
|
|
125
|
+
}
|
|
126
|
+
if (parsed === null || parsed.version !== 1)
|
|
127
|
+
return empty;
|
|
128
|
+
const expiresAtMs = parsed.created_at_ms + parsed.ttl_ms;
|
|
129
|
+
if (options.now > expiresAtMs)
|
|
130
|
+
return empty;
|
|
131
|
+
const announce = typeof parsed.announce === 'string' && parsed.announce.trim() !== ''
|
|
132
|
+
? parsed.announce
|
|
133
|
+
: DEFAULT_RESTART_ANNOUNCE;
|
|
134
|
+
return new RestartIntentConsumer(announce, expiresAtMs, new Set(dedupeNonEmpty(parsed.targets ?? [])));
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Claim the notice for one dispatcher. Returns the announce text the first
|
|
138
|
+
* time a still-valid target is seen, then null forever after (single
|
|
139
|
+
* consume). Re-checks the TTL so a late starter cannot claim a stale notice.
|
|
140
|
+
*/
|
|
141
|
+
claim(dispatcherId, now) {
|
|
142
|
+
if (!this.remaining.has(dispatcherId))
|
|
143
|
+
return null;
|
|
144
|
+
if (now > this.expiresAtMs) {
|
|
145
|
+
this.remaining.delete(dispatcherId);
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
this.remaining.delete(dispatcherId);
|
|
149
|
+
return this.announce;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
function dedupeNonEmpty(values) {
|
|
153
|
+
const out = [];
|
|
154
|
+
const seen = new Set();
|
|
155
|
+
for (const value of values) {
|
|
156
|
+
if (typeof value !== 'string')
|
|
157
|
+
continue;
|
|
158
|
+
const trimmed = value.trim();
|
|
159
|
+
if (trimmed === '' || seen.has(trimmed))
|
|
160
|
+
continue;
|
|
161
|
+
seen.add(trimmed);
|
|
162
|
+
out.push(trimmed);
|
|
163
|
+
}
|
|
164
|
+
return out;
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=restart-intent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restart-intent.js","sourceRoot":"","sources":["../../src/daemon/restart-intent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Service-manager lifecycle wrappers for the `dreamux daemon` command group.
|
|
3
|
+
*
|
|
4
|
+
* These talk to the native user-level service manager directly (Linux
|
|
5
|
+
* `systemctl --user`, macOS `launchctl`) — not the admin socket — so they work
|
|
6
|
+
* even when the server is down. Each verb maps to the platform's idiom:
|
|
7
|
+
*
|
|
8
|
+
* verb | systemd --user | launchd (gui/<uid>/<label>)
|
|
9
|
+
* ---------|--------------------------------------|----------------------------
|
|
10
|
+
* start | start dreamux.service | kickstart (bootstrap if unloaded)
|
|
11
|
+
* stop | stop dreamux.service | bootout (KeepAlive would relaunch a kill)
|
|
12
|
+
* restart | restart dreamux.service | kickstart -k (bootstrap if unloaded)
|
|
13
|
+
*
|
|
14
|
+
* launchd's KeepAlive=true relaunches a plain `kill`, so a stop that *stays*
|
|
15
|
+
* stopped is a `bootout`; start/restart then re-bootstrap when needed.
|
|
16
|
+
*/
|
|
17
|
+
import { homedir } from 'node:os';
|
|
18
|
+
import { LAUNCHD_LABEL, serviceUnitPath, SYSTEMD_UNIT } from '../onboard/service.js';
|
|
19
|
+
export async function controlUserService(verb, options) {
|
|
20
|
+
const homeDir = options.homeDir ?? homedir();
|
|
21
|
+
const unit = serviceUnitPath(options.platform, homeDir);
|
|
22
|
+
const dryRun = options.dryRun ?? false;
|
|
23
|
+
const commands = [];
|
|
24
|
+
if (unit.platform === 'systemd') {
|
|
25
|
+
const args = ['--user', verb, SYSTEMD_UNIT];
|
|
26
|
+
await options.runner.run('systemctl', args, { dryRun });
|
|
27
|
+
commands.push({ command: 'systemctl', args });
|
|
28
|
+
return { platform: 'systemd', verb, commands };
|
|
29
|
+
}
|
|
30
|
+
const uid = options.uid ?? process.getuid?.();
|
|
31
|
+
if (uid === undefined) {
|
|
32
|
+
throw new Error('launchd user service control requires a numeric uid');
|
|
33
|
+
}
|
|
34
|
+
const target = `gui/${uid}/${LAUNCHD_LABEL}`;
|
|
35
|
+
const loaded = await options.runner.check('launchctl', ['print', target], { dryRun });
|
|
36
|
+
if (verb === 'stop') {
|
|
37
|
+
if (loaded) {
|
|
38
|
+
const args = ['bootout', target];
|
|
39
|
+
await options.runner.run('launchctl', args, { dryRun });
|
|
40
|
+
commands.push({ command: 'launchctl', args });
|
|
41
|
+
}
|
|
42
|
+
return { platform: 'launchd', verb, commands };
|
|
43
|
+
}
|
|
44
|
+
if (!loaded) {
|
|
45
|
+
const args = ['bootstrap', `gui/${uid}`, unit.path];
|
|
46
|
+
await options.runner.run('launchctl', args, { dryRun });
|
|
47
|
+
commands.push({ command: 'launchctl', args });
|
|
48
|
+
if (verb === 'start')
|
|
49
|
+
return { platform: 'launchd', verb, commands };
|
|
50
|
+
}
|
|
51
|
+
const args = verb === 'restart' ? ['kickstart', '-k', target] : ['kickstart', target];
|
|
52
|
+
await options.runner.run('launchctl', args, { dryRun });
|
|
53
|
+
commands.push({ command: 'launchctl', args });
|
|
54
|
+
return { platform: 'launchd', verb, commands };
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=service-control.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-control.js","sourceRoot":"","sources":["../../src/daemon/service-control.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* start a fresh thread, record the lost one in last_lost_thread_id,
|
|
16
16
|
* and post a visible warning to the next source chat.
|
|
17
17
|
*/
|
|
18
|
-
import {
|
|
18
|
+
import { mkdir } from 'node:fs/promises';
|
|
19
19
|
import { dirname } from 'node:path';
|
|
20
20
|
import { CodexProcess, } from '../codex/supervisor.js';
|
|
21
21
|
import { CodexWsClient } from '../codex/rpc.js';
|
|
@@ -34,6 +34,13 @@ export class DispatcherRuntime {
|
|
|
34
34
|
client = null;
|
|
35
35
|
turnManager = null;
|
|
36
36
|
threadId = null;
|
|
37
|
+
/**
|
|
38
|
+
* Whether the most recent thread resolution resumed an existing Codex thread
|
|
39
|
+
* (true) rather than starting a fresh one or recovering from a failed resume.
|
|
40
|
+
* Consulted by the server right after the slot is ready to decide whether a
|
|
41
|
+
* `daemon restart` notice should be injected (issue #78).
|
|
42
|
+
*/
|
|
43
|
+
threadResumed = false;
|
|
37
44
|
status = 'declared';
|
|
38
45
|
log;
|
|
39
46
|
stopping = false;
|
|
@@ -61,6 +68,26 @@ export class DispatcherRuntime {
|
|
|
61
68
|
getThreadId() {
|
|
62
69
|
return this.threadId;
|
|
63
70
|
}
|
|
71
|
+
/** True when the live thread was resumed (not freshly started/recovered). */
|
|
72
|
+
wasThreadResumed() {
|
|
73
|
+
return this.threadResumed;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Inject a best-effort one-shot restart notice into the resumed thread. The
|
|
77
|
+
* server calls this only after the dispatcher slot is ready (so the resumed
|
|
78
|
+
* turn can reply through Feishu). Never throws — failures are logged.
|
|
79
|
+
*/
|
|
80
|
+
async injectRestartNotice(text) {
|
|
81
|
+
if (this.turnManager === null)
|
|
82
|
+
return;
|
|
83
|
+
const result = await this.turnManager.injectNotice(text);
|
|
84
|
+
if (result.status === 'submitted') {
|
|
85
|
+
this.log('info', 'restart notice injected into resumed thread');
|
|
86
|
+
}
|
|
87
|
+
else if (result.status === 'skipped') {
|
|
88
|
+
this.log('info', 'restart notice skipped; a live inbound already arrived');
|
|
89
|
+
}
|
|
90
|
+
}
|
|
64
91
|
/**
|
|
65
92
|
* Bring the dispatcher up. Order:
|
|
66
93
|
* 1. spawn codex app-server child
|
|
@@ -75,18 +102,18 @@ export class DispatcherRuntime {
|
|
|
75
102
|
this.restarting = false;
|
|
76
103
|
this.clearRestartTimer();
|
|
77
104
|
this.setStatus('starting');
|
|
78
|
-
this.deps.dispatchers.setStatus(this.dispatcherId, 'starting', {
|
|
105
|
+
await this.deps.dispatchers.setStatus(this.dispatcherId, 'starting', {
|
|
79
106
|
last_started_at: Date.now(),
|
|
80
107
|
});
|
|
81
108
|
try {
|
|
82
109
|
await this.startCodexRuntime();
|
|
83
|
-
this.markReady();
|
|
110
|
+
await this.markReady();
|
|
84
111
|
}
|
|
85
112
|
catch (err) {
|
|
86
113
|
const msg = err instanceof Error ? err.message : String(err);
|
|
87
114
|
this.log('error', `start failed: ${msg}`, err);
|
|
88
115
|
this.setStatus('degraded');
|
|
89
|
-
this.deps.dispatchers.setStatus(this.dispatcherId, 'degraded', {
|
|
116
|
+
await this.deps.dispatchers.setStatus(this.dispatcherId, 'degraded', {
|
|
90
117
|
last_error: msg,
|
|
91
118
|
});
|
|
92
119
|
await this.cleanupOnFailure();
|
|
@@ -119,7 +146,7 @@ export class DispatcherRuntime {
|
|
|
119
146
|
return;
|
|
120
147
|
this.handleChildExit(exit);
|
|
121
148
|
});
|
|
122
|
-
|
|
149
|
+
await mkdir(dirname(socketPath), { recursive: true });
|
|
123
150
|
await process.start();
|
|
124
151
|
const clientFactory = this.deps.codexClientFactory ?? ((sock) => new CodexWsClient({ socketPath: sock }));
|
|
125
152
|
const client = clientFactory(socketPath);
|
|
@@ -156,12 +183,15 @@ export class DispatcherRuntime {
|
|
|
156
183
|
async resolveThread() {
|
|
157
184
|
if (this.client === null)
|
|
158
185
|
throw new Error('client not initialized');
|
|
186
|
+
// Each resolution recomputes whether we resumed; a fresh start or a
|
|
187
|
+
// resume-failure recovery must not look like a resume to the notice gate.
|
|
188
|
+
this.threadResumed = false;
|
|
159
189
|
const existing = this.threadId ?? this.row.thread_id;
|
|
160
190
|
if (existing === null) {
|
|
161
191
|
// Fresh thread.
|
|
162
192
|
const res = await this.client.request('thread/start', {});
|
|
163
193
|
this.threadId = res.thread.id;
|
|
164
|
-
this.deps.dispatchers.setThreadId(this.dispatcherId, this.threadId);
|
|
194
|
+
await this.deps.dispatchers.setThreadId(this.dispatcherId, this.threadId);
|
|
165
195
|
this.log('info', `started fresh thread ${this.threadId}`);
|
|
166
196
|
return;
|
|
167
197
|
}
|
|
@@ -170,6 +200,7 @@ export class DispatcherRuntime {
|
|
|
170
200
|
threadId: existing,
|
|
171
201
|
});
|
|
172
202
|
this.threadId = existing;
|
|
203
|
+
this.threadResumed = true;
|
|
173
204
|
this.log('info', `resumed thread ${this.threadId}`);
|
|
174
205
|
}
|
|
175
206
|
catch (err) {
|
|
@@ -178,7 +209,7 @@ export class DispatcherRuntime {
|
|
|
178
209
|
this.log('warn', `thread/resume failed for ${existing}: ${msg}; starting fresh thread`);
|
|
179
210
|
const res = await this.client.request('thread/start', {});
|
|
180
211
|
this.threadId = res.thread.id;
|
|
181
|
-
this.deps.dispatchers.recordLostThread(this.dispatcherId, existing, this.threadId, `thread/resume failed: ${msg}`);
|
|
212
|
+
await this.deps.dispatchers.recordLostThread(this.dispatcherId, existing, this.threadId, `thread/resume failed: ${msg}`);
|
|
182
213
|
// Park a warning to be delivered with the next outbound — best-effort
|
|
183
214
|
// queue note. For MVP we just log; full user-visible delivery on next
|
|
184
215
|
// inbound is a follow-up (see PR review).
|
|
@@ -199,10 +230,10 @@ export class DispatcherRuntime {
|
|
|
199
230
|
this.stopping = true;
|
|
200
231
|
this.clearRestartTimer();
|
|
201
232
|
this.setStatus('stopping');
|
|
202
|
-
this.deps.dispatchers.setStatus(this.dispatcherId, 'stopping');
|
|
233
|
+
await this.deps.dispatchers.setStatus(this.dispatcherId, 'stopping');
|
|
203
234
|
await this.teardownCodexRuntime();
|
|
204
235
|
this.setStatus('stopped');
|
|
205
|
-
this.deps.dispatchers.setStatus(this.dispatcherId, 'stopped');
|
|
236
|
+
await this.deps.dispatchers.setStatus(this.dispatcherId, 'stopped');
|
|
206
237
|
}
|
|
207
238
|
async cleanupOnFailure() {
|
|
208
239
|
this.clearRestartTimer();
|
|
@@ -251,9 +282,14 @@ export class DispatcherRuntime {
|
|
|
251
282
|
const delay = this.restartDelayMs(attempt);
|
|
252
283
|
this.log('warn', `${reason}; restarting in ${delay}ms`);
|
|
253
284
|
this.setStatus('degraded');
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
285
|
+
// scheduleRestart runs from synchronous event handlers (ws close, child
|
|
286
|
+
// exit); the durable status write is best-effort here — persist it without
|
|
287
|
+
// blocking, logging (never throwing) on failure. The restart timer's later
|
|
288
|
+
// 'starting'/'ready' writes are awaited, so they cannot be reordered behind
|
|
289
|
+
// this one within the backoff delay.
|
|
290
|
+
void this.deps.dispatchers
|
|
291
|
+
.setStatus(this.dispatcherId, 'degraded', { last_error: reason })
|
|
292
|
+
.catch((err) => this.log('warn', 'failed to persist degraded status', err));
|
|
257
293
|
this.restartTimer = setTimeout(() => {
|
|
258
294
|
this.restartTimer = null;
|
|
259
295
|
void this.restartCodexRuntime(reason);
|
|
@@ -265,7 +301,7 @@ export class DispatcherRuntime {
|
|
|
265
301
|
this.restarting = true;
|
|
266
302
|
let retryReason = null;
|
|
267
303
|
this.setStatus('starting');
|
|
268
|
-
this.deps.dispatchers.setStatus(this.dispatcherId, 'starting', {
|
|
304
|
+
await this.deps.dispatchers.setStatus(this.dispatcherId, 'starting', {
|
|
269
305
|
last_started_at: Date.now(),
|
|
270
306
|
});
|
|
271
307
|
try {
|
|
@@ -278,14 +314,14 @@ export class DispatcherRuntime {
|
|
|
278
314
|
return;
|
|
279
315
|
}
|
|
280
316
|
this.restartAttempts = 0;
|
|
281
|
-
this.markReady();
|
|
317
|
+
await this.markReady();
|
|
282
318
|
this.log('info', `restarted codex app-server after: ${reason}`);
|
|
283
319
|
}
|
|
284
320
|
catch (err) {
|
|
285
321
|
const msg = err instanceof Error ? err.message : String(err);
|
|
286
322
|
this.log('error', `restart failed: ${msg}`, err);
|
|
287
323
|
this.setStatus('degraded');
|
|
288
|
-
this.deps.dispatchers.setStatus(this.dispatcherId, 'degraded', {
|
|
324
|
+
await this.deps.dispatchers.setStatus(this.dispatcherId, 'degraded', {
|
|
289
325
|
last_error: msg,
|
|
290
326
|
});
|
|
291
327
|
await this.teardownCodexRuntime();
|
|
@@ -308,9 +344,9 @@ export class DispatcherRuntime {
|
|
|
308
344
|
clearTimeout(this.restartTimer);
|
|
309
345
|
this.restartTimer = null;
|
|
310
346
|
}
|
|
311
|
-
markReady() {
|
|
347
|
+
async markReady() {
|
|
312
348
|
this.setStatus('ready');
|
|
313
|
-
this.deps.dispatchers.setStatus(this.dispatcherId, 'ready', {
|
|
349
|
+
await this.deps.dispatchers.setStatus(this.dispatcherId, 'ready', {
|
|
314
350
|
last_ready_at: Date.now(),
|
|
315
351
|
last_error: null,
|
|
316
352
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/dispatcher/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,OAAO,EACL,YAAY,GAGb,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAKnE,OAAO,EACL,WAAW,GAIZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,6BAA6B,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,gCAAgC,GAEjC,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,MAAM,+BAA+B,GAAG,IAAI,CAAC;AAC7C,MAAM,8BAA8B,GAAG,MAAM,CAAC;AAyB9C,MAAM,OAAO,iBAAiB;IAaV;IACC;IAbX,OAAO,GAAwB,IAAI,CAAC;IACpC,MAAM,GAAyB,IAAI,CAAC;IACpC,WAAW,GAAuB,IAAI,CAAC;IACvC,QAAQ,GAAkB,IAAI,CAAC;IAC/B,MAAM,GAAqB,UAAU,CAAC;IAC7B,GAAG,CAA4C;IACxD,QAAQ,GAAG,KAAK,CAAC;IACjB,UAAU,GAAG,KAAK,CAAC;IACnB,eAAe,GAAG,CAAC,CAAC;IACpB,YAAY,GAA0B,IAAI,CAAC;IAEnD,YACkB,GAAkB,EACjB,IAA2B;QAD5B,QAAG,GAAH,GAAG,CAAe;QACjB,SAAI,GAAJ,IAAI,CAAuB;QAE5C,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;YACxC,MAAM,MAAM,GAAG,eAAe,GAAG,CAAC,aAAa,KAAK,GAAG,EAAE,CAAC;YAC1D,IAAI,GAAG,KAAK,SAAS;gBAAE,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;;gBAClD,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,SAAS,CAAC;IAChC,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC;IAChC,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,EAAE;YAC7D,eAAe,EAAE,IAAI,CAAC,GAAG,EAAE;SAC5B,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC/B,IAAI,CAAC,SAAS,EAAE,CAAC;QAEnB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,iBAAiB,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC;YAC/C,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,EAAE;gBAC7D,UAAU,EAAE,GAAG;aAChB,CAAC,CAAC;YACH,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC9B,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,iBAAiB;QAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,IAAI,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACxE,MAAM,UAAU,GAAG,oBAAoB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAC/D,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;YAC5C,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,CAC7B,gCAAgC,CAAC,IAAI,CAAC,YAAY,EAAE;gBAClD,YAAY,EAAE,SAAS;gBACvB,aAAa,EAAE,GAAG;aACnB,CAAC,CACH,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9E,MAAM,OAAO,GAAG,OAAO,CAAC;YACtB,UAAU;YACV,GAAG;YACH,aAAa,EAAE,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC;YACrD,aAAa,EAAE,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC;YACrD,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY;YAC/B,SAAS;YACT,GAAG,EAAE,oBAAoB,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;SAC5E,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;YACtB,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO;gBAAE,OAAO;YACrC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QACH,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QAEtB,MAAM,aAAa,GACjB,IAAI,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,aAAa,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACtF,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YACxB,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM;gBAAE,OAAO;YACnC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QAErB,MAAM,eAAe,GAAG,6BAA6B,CAAC;YACpD,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;gBACtB,IAAI,CAAC,GAAG,CACN,MAAM,EACN,oCAAoC,GAAG,CAAC,MAAM,sCAAsC,CACrF,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,eAAe,CAAC,CAAC;QAErD,kEAAkE;QAClE,yDAAyD;QACzD,kDAAkD;QAClD,MAAM,YAAY,GAAG,MAAM,0BAA0B,CAAC,IAAI,CAAC,MAAM,EAAE;YACjE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,KAAK,SAAS;gBAC5C,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;gBAC7C,CAAC,CAAC,EAAE,CAAC;SACR,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CACN,MAAM,EACN,sBAAsB,YAAY,CAAC,SAAS,UAAU,YAAY,CAAC,SAAS,KAAK,YAAY,CAAC,UAAU,GAAG,CAC5G,CAAC;QAEF,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAE3B,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC;YACjC,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ;YAChC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,GAAG,EAAE,IAAI,CAAC,GAAG;SACd,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,aAAa;QACzB,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;QACrD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,gBAAgB;YAChB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CACnC,cAAc,EACd,EAAE,CACH,CAAC;YACF,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YACpE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,wBAAwB,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC1D,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAuB,eAAe,EAAE;gBAC/D,QAAQ,EAAE,QAAQ;aACnB,CAAC,CAAC;YACH,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;YACzB,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,kBAAkB,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,yEAAyE;YACzE,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,IAAI,CAAC,GAAG,CACN,MAAM,EACN,4BAA4B,QAAQ,KAAK,GAAG,yBAAyB,CACtE,CAAC;YACF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CACnC,cAAc,EACd,EAAE,CACH,CAAC;YACF,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CACpC,IAAI,CAAC,YAAY,EACjB,QAAQ,EACR,IAAI,CAAC,QAAQ,EACb,yBAAyB,GAAG,EAAE,CAC/B,CAAC;YACF,sEAAsE;YACtE,sEAAsE;YACtE,0CAA0C;QAC5C,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,cAAc,CAClB,KAAuB,EACvB,QAA8B,EAAE;QAEhC,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;YAC9B,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,8BAA8B,CAAC,EAAE,CAAC;QAChF,CAAC;QACD,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAChD,CAAC;IAED,4DAA4D;IAC5D,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAC/D,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAClC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IAChE,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC5B,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC;QAClC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACpC,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC;QAC9B,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,oBAAoB;QAChC,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACrC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,WAAW,KAAK,IAAI;YAAE,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC;QAEnD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,IAAI,CAAC;gBACH,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,CAAC;YAAC,MAAM,CAAC;gBACP,KAAK;YACP,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACrB,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;IAEO,eAAe,CAAC,IAAsB;QAC5C,MAAM,OAAO,GACX,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,IAAI,IAAI,MAAM,EAAE,CAAC;QACjF,IAAI,CAAC,eAAe,CAAC,kCAAkC,OAAO,GAAG,CAAC,CAAC;IACrE,CAAC;IAEO,iBAAiB,CAAC,MAAa;QACrC,IAAI,CAAC,eAAe,CAAC,sCAAsC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAC/E,CAAC;IAEO,eAAe,CAAC,MAAc;QACpC,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO;QAC3E,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;QACzC,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,MAAM,mBAAmB,KAAK,IAAI,CAAC,CAAC;QACxD,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,EAAE;YAC7D,UAAU,EAAE,MAAM;SACnB,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE;YAClC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,KAAK,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC,EAAE,KAAK,CAAC,CAAC;IACZ,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAAC,MAAc;QAC9C,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,WAAW,GAAkB,IAAI,CAAC;QACtC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,EAAE;YAC7D,eAAe,EAAE,IAAI,CAAC,GAAG,EAAE;SAC5B,CAAC,CAAC;QACH,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAClC,IAAI,IAAI,CAAC,QAAQ;gBAAE,OAAO;YAC1B,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC/B,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAClC,OAAO;YACT,CAAC;YACD,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;YACzB,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,qCAAqC,MAAM,EAAE,CAAC,CAAC;QAClE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,mBAAmB,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC;YACjD,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,EAAE;gBAC7D,UAAU,EAAE,GAAG;aAChB,CAAC,CAAC;YACH,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAClC,WAAW,GAAG,oCAAoC,GAAG,EAAE,CAAC;QAC1D,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QAC1B,CAAC;QACD,IAAI,WAAW,KAAK,IAAI;YAAE,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;IAC9D,CAAC;IAEO,cAAc,CAAC,OAAe;QACpC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CACnB,CAAC,EACD,IAAI,CAAC,IAAI,CAAC,oBAAoB,IAAI,+BAA+B,CAClE,CAAC;QACF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAClB,IAAI,EACJ,IAAI,CAAC,IAAI,CAAC,mBAAmB,IAAI,8BAA8B,CAChE,CAAC;QACF,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC;IAEO,iBAAiB;QACvB,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI;YAAE,OAAO;QACvC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAChC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;IAC3B,CAAC;IAEO,SAAS;QACf,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE;YAC1D,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE;YACzB,UAAU,EAAE,IAAI;SACjB,CAAC,CAAC;IACL,CAAC;IAEO,SAAS,CAAC,CAAmB;QACnC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAClB,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/dispatcher/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,13 @@ export class TurnManager {
|
|
|
14
14
|
seenMessageIds = new Set();
|
|
15
15
|
seenMessageIdOrder = [];
|
|
16
16
|
stopped = false;
|
|
17
|
+
/**
|
|
18
|
+
* Set once any real inbound has been accepted and handed to Codex. There is
|
|
19
|
+
* no FIFO queue here — inbound submission folds onto Codex's active turn — so
|
|
20
|
+
* this flag is what lets a best-effort restart-notice injection detect an
|
|
21
|
+
* in-flight inbound and skip rather than wake the thread twice (issue #78).
|
|
22
|
+
*/
|
|
23
|
+
inboundSubmitted = false;
|
|
17
24
|
log;
|
|
18
25
|
messageIdDedupeWindow;
|
|
19
26
|
constructor(opts) {
|
|
@@ -37,6 +44,9 @@ export class TurnManager {
|
|
|
37
44
|
if (!this.rememberMessageId(input.source_message_id)) {
|
|
38
45
|
return { status: 'duplicate' };
|
|
39
46
|
}
|
|
47
|
+
// Mark before any await so a concurrent restart-notice injection observes
|
|
48
|
+
// that a real inbound is in flight and skips itself.
|
|
49
|
+
this.inboundSubmitted = true;
|
|
40
50
|
await this.notifyAccepted(input, hooks);
|
|
41
51
|
const threadId = this.opts.getThreadId();
|
|
42
52
|
if (threadId === null) {
|
|
@@ -54,6 +64,38 @@ export class TurnManager {
|
|
|
54
64
|
return { status: 'failed', error };
|
|
55
65
|
}
|
|
56
66
|
}
|
|
67
|
+
/**
|
|
68
|
+
* Best-effort one-shot notice injected after a `daemon restart --notify-
|
|
69
|
+
* resumed` resumes this dispatcher's thread. Skips if the manager is stopped,
|
|
70
|
+
* if a real inbound has already woken the thread, or if no thread is bound.
|
|
71
|
+
* A submission failure is reported, never thrown — it must not fail the
|
|
72
|
+
* dispatcher's start or the restart.
|
|
73
|
+
*/
|
|
74
|
+
async injectNotice(text) {
|
|
75
|
+
if (this.stopped)
|
|
76
|
+
return { status: 'stopped' };
|
|
77
|
+
if (this.inboundSubmitted)
|
|
78
|
+
return { status: 'skipped' };
|
|
79
|
+
const threadId = this.opts.getThreadId();
|
|
80
|
+
if (threadId === null) {
|
|
81
|
+
const error = new Error('restart notice injected without thread_id');
|
|
82
|
+
this.log('error', error.message);
|
|
83
|
+
return { status: 'failed', error };
|
|
84
|
+
}
|
|
85
|
+
// Mark before submitting so a racing real inbound is not double-counted and
|
|
86
|
+
// a second injection cannot fire.
|
|
87
|
+
this.inboundSubmitted = true;
|
|
88
|
+
try {
|
|
89
|
+
const res = await submitTurnStart(this.opts.client, threadId, text, this.opts.turnCwd ?? null);
|
|
90
|
+
this.log('info', `injected restart notice into thread ${threadId}`);
|
|
91
|
+
return { status: 'submitted', turnId: res.turn.id };
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
95
|
+
this.log('warn', `restart notice injection failed: ${error.message}`, error);
|
|
96
|
+
return { status: 'failed', error };
|
|
97
|
+
}
|
|
98
|
+
}
|
|
57
99
|
async stop() {
|
|
58
100
|
this.stopped = true;
|
|
59
101
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"turn-manager.js","sourceRoot":"","sources":["../../src/dispatcher/turn-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGrD,MAAM,CAAC,MAAM,gCAAgC,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"turn-manager.js","sourceRoot":"","sources":["../../src/dispatcher/turn-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGrD,MAAM,CAAC,MAAM,gCAAgC,GAAG,IAAI,CAAC;AAqDrD,MAAM,OAAO,WAAW;IAcO;IAbZ,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,kBAAkB,GAAa,EAAE,CAAC;IAC3C,OAAO,GAAG,KAAK,CAAC;IACxB;;;;;OAKG;IACK,gBAAgB,GAAG,KAAK,CAAC;IAChB,GAAG,CAAyC;IAC5C,qBAAqB,CAAS;IAE/C,YAA6B,IAAwB;QAAxB,SAAI,GAAJ,IAAI,CAAoB;QACnD,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;YACxC,MAAM,MAAM,GAAG,iBAAiB,IAAI,CAAC,YAAY,KAAK,GAAG,EAAE,CAAC;YAC5D,IAAI,GAAG,KAAK,SAAS;gBAAE,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;;gBAClD,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,GAAG,CACnC,CAAC,EACD,IAAI,CAAC,qBAAqB,IAAI,gCAAgC,CAC/D,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAO,CACX,KAAuB,EACvB,QAA8B,EAAE;QAEhC,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QAC/C,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACrD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;QACjC,CAAC;QACD,0EAA0E;QAC1E,qDAAqD;QACrD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAE7B,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAExC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACzC,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;YAC/D,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACjC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QACrC,CAAC;QAED,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,eAAe,CAC/B,IAAI,CAAC,IAAI,CAAC,MAAM,EAChB,QAAQ,EACR,KAAK,CAAC,WAAW,EACjB,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAC1B,CAAC;YACF,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACtD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAClE,IAAI,CAAC,GAAG,CACN,OAAO,EACP,4CAA4C,KAAK,CAAC,iBAAiB,IAAI,QAAQ,KAAK,KAAK,CAAC,OAAO,EAAE,EACnG,KAAK,CACN,CAAC;YACF,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QACrC,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,YAAY,CAAC,IAAY;QAC7B,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QAC/C,IAAI,IAAI,CAAC,gBAAgB;YAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QAExD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACzC,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;YACrE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACjC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QACrC,CAAC;QAED,4EAA4E;QAC5E,kCAAkC;QAClC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,eAAe,CAC/B,IAAI,CAAC,IAAI,CAAC,MAAM,EAChB,QAAQ,EACR,IAAI,EACJ,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAC1B,CAAC;YACF,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,uCAAuC,QAAQ,EAAE,CAAC,CAAC;YACpE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACtD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAClE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,oCAAoC,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC;YAC7E,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QACrC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACtB,CAAC;IAEO,KAAK,CAAC,cAAc,CAC1B,KAAuB,EACvB,KAA2B;QAE3B,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS;YAAE,OAAO;QAC3C,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CACN,MAAM,EACN,4CAA4C,KAAK,CAAC,iBAAiB,IAAI,QAAQ,EAAE,EACjF,GAAG,CACJ,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,iBAAiB,CAAC,SAAwB;QAChD,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,EAAE;YAAE,OAAO,IAAI,CAAC;QACxD,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,OAAO,KAAK,CAAC;QACrD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACnC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;YACnE,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;YAChD,IAAI,OAAO,KAAK,SAAS;gBAAE,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
|
|
@@ -1,18 +1,23 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
2
|
import { dirname, join } from 'node:path';
|
|
3
3
|
import { fileURLToPath } from 'node:url';
|
|
4
4
|
import { writeTextFile } from './ledger.js';
|
|
5
5
|
const HERE = dirname(fileURLToPath(import.meta.url));
|
|
6
6
|
const PACKAGE_ROOT = dirname(dirname(HERE));
|
|
7
7
|
const DISPATCHER_SKILL_SOURCE = join(PACKAGE_ROOT, 'skills', 'dispatcher', 'SKILL.md');
|
|
8
|
-
export function installDispatcherSkill(options) {
|
|
9
|
-
const content = readDispatcherSkill();
|
|
10
|
-
writeTextFile(options.skillPath, content, options.ledger, 'workspace-local dispatcher skill', { mode: 0o600, dryRun: options.dryRun });
|
|
8
|
+
export async function installDispatcherSkill(options) {
|
|
9
|
+
const content = await readDispatcherSkill();
|
|
10
|
+
await writeTextFile(options.skillPath, content, options.ledger, 'workspace-local dispatcher skill', { mode: 0o600, dryRun: options.dryRun });
|
|
11
11
|
}
|
|
12
|
-
function readDispatcherSkill() {
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
async function readDispatcherSkill() {
|
|
13
|
+
try {
|
|
14
|
+
return await readFile(DISPATCHER_SKILL_SOURCE, 'utf8');
|
|
15
|
+
}
|
|
16
|
+
catch (err) {
|
|
17
|
+
if (err.code === 'ENOENT') {
|
|
18
|
+
throw new Error(`missing bundled dispatcher skill: ${DISPATCHER_SKILL_SOURCE}`);
|
|
19
|
+
}
|
|
20
|
+
throw err;
|
|
15
21
|
}
|
|
16
|
-
return readFileSync(DISPATCHER_SKILL_SOURCE, 'utf8');
|
|
17
22
|
}
|
|
18
23
|
//# sourceMappingURL=dispatcher-skill.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatcher-skill.js","sourceRoot":"","sources":["../../src/onboard/dispatcher-skill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"dispatcher-skill.js","sourceRoot":"","sources":["../../src/onboard/dispatcher-skill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACrD,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5C,MAAM,uBAAuB,GAAG,IAAI,CAClC,YAAY,EACZ,QAAQ,EACR,YAAY,EACZ,UAAU,CACX,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,OAI5C;IACC,MAAM,OAAO,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAC5C,MAAM,aAAa,CACjB,OAAO,CAAC,SAAS,EACjB,OAAO,EACP,OAAO,CAAC,MAAM,EACd,kCAAkC,EAClC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CACxC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,mBAAmB;IAChC,IAAI,CAAC;QACH,OAAO,MAAM,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC;IACzD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrD,MAAM,IAAI,KAAK,CACb,qCAAqC,uBAAuB,EAAE,CAC/D,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
|