@ckanner/flywheel 0.32.1 → 0.33.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/CHANGELOG.md +20 -1
- package/README.md +7 -0
- package/README.zh-CN.md +5 -0
- package/THIRD_PARTY_NOTICES.md +42 -0
- package/bin/runtime.js +25 -31
- package/cordis.patch.yml +5 -0
- package/dist/bridge.mjs +421 -0
- package/dist/claude-code-pro-bridge.mjs +82 -0
- package/dist/claude-code-pro-worker.mjs +5 -0
- package/dist/client.js +4140 -0
- package/dist/codex-pro-bridge.mjs +75 -0
- package/dist/codex-pro-worker.mjs +5 -0
- package/dist/console-read.mjs +51 -0
- package/dist/control.mjs +218 -0
- package/dist/index.mjs +185 -0
- package/dist/installation.mjs +56 -0
- package/dist/machine-worker.mjs +241 -0
- package/dist/policy.mjs +91 -0
- package/dist/prewarm.mjs +136 -0
- package/dist/protocol.mjs +260 -0
- package/dist/task-association.mjs +127 -0
- package/dist/worker.mjs +52 -0
- package/dist/workspaces.mjs +42 -0
- package/docs/README.md +1 -1
- package/docs/README.zh-CN.md +1 -1
- package/docs/design.md +8 -5
- package/docs/en/configuration.md +1 -1
- package/docs/en/contributing.md +5 -6
- package/docs/en/flow-console.md +2 -2
- package/docs/en/getting-started.md +9 -2
- package/docs/en/releasing.md +132 -174
- package/docs/validation/2026-11-13-release-0.32.1.md +83 -0
- package/docs/validation/2026-11-14-release-0.33.0.md +49 -0
- package/docs/validation/2026-11-14-single-package.md +60 -0
- package/docs/validation/README.md +3 -0
- package/docs/zh-CN/configuration.md +1 -1
- package/docs/zh-CN/contributing.md +4 -5
- package/docs/zh-CN/flow-console.md +2 -2
- package/docs/zh-CN/getting-started.md +7 -3
- package/docs/zh-CN/releasing.md +97 -81
- package/native/darwin-amd64/flywheel +0 -0
- package/native/darwin-arm64/flywheel +0 -0
- package/native/linux-amd64/flywheel +0 -0
- package/native/linux-arm64/flywheel +0 -0
- package/native/manifest.json +22 -0
- package/node_modules/dsh-subagent-codex-pro/CHANGELOG.md +403 -0
- package/node_modules/dsh-subagent-codex-pro/LICENSE +21 -0
- package/node_modules/dsh-subagent-codex-pro/README.md +557 -0
- package/node_modules/dsh-subagent-codex-pro/cordis.patch.yml +30 -0
- package/node_modules/dsh-subagent-codex-pro/docs/README.zh.md +355 -0
- package/node_modules/dsh-subagent-codex-pro/docs/machine-lifecycle-validation.md +65 -0
- package/node_modules/dsh-subagent-codex-pro/docs/machine-lifecycle.md +144 -0
- package/node_modules/dsh-subagent-codex-pro/docs/machine-lifecycle.zh.md +98 -0
- package/node_modules/dsh-subagent-codex-pro/docs/machine.md +194 -0
- package/node_modules/dsh-subagent-codex-pro/docs/orchestration.zh.md +86 -0
- package/node_modules/dsh-subagent-codex-pro/lib/codex-exec.js +68 -0
- package/node_modules/dsh-subagent-codex-pro/lib/codex-exec.js.map +1 -0
- package/node_modules/dsh-subagent-codex-pro/lib/dsh-types.js +15 -0
- package/node_modules/dsh-subagent-codex-pro/lib/dsh-types.js.map +1 -0
- package/node_modules/dsh-subagent-codex-pro/lib/index.js +830 -0
- package/node_modules/dsh-subagent-codex-pro/lib/index.js.map +1 -0
- package/node_modules/dsh-subagent-codex-pro/lib/jobs.js +35 -0
- package/node_modules/dsh-subagent-codex-pro/lib/jobs.js.map +1 -0
- package/node_modules/dsh-subagent-codex-pro/lib/jsonrpc.js +229 -0
- package/node_modules/dsh-subagent-codex-pro/lib/jsonrpc.js.map +1 -0
- package/node_modules/dsh-subagent-codex-pro/lib/machine-cli.js +101 -0
- package/node_modules/dsh-subagent-codex-pro/lib/machine-cli.js.map +1 -0
- package/node_modules/dsh-subagent-codex-pro/lib/machine-local.js +122 -0
- package/node_modules/dsh-subagent-codex-pro/lib/machine-local.js.map +1 -0
- package/node_modules/dsh-subagent-codex-pro/lib/machine-recovery.js +167 -0
- package/node_modules/dsh-subagent-codex-pro/lib/machine-recovery.js.map +1 -0
- package/node_modules/dsh-subagent-codex-pro/lib/machine-supervision.js +141 -0
- package/node_modules/dsh-subagent-codex-pro/lib/machine-supervision.js.map +1 -0
- package/node_modules/dsh-subagent-codex-pro/lib/machine-supervisor.js +128 -0
- package/node_modules/dsh-subagent-codex-pro/lib/machine-supervisor.js.map +1 -0
- package/node_modules/dsh-subagent-codex-pro/lib/machine.js +104 -0
- package/node_modules/dsh-subagent-codex-pro/lib/machine.js.map +1 -0
- package/node_modules/dsh-subagent-codex-pro/lib/process-guardian.js +156 -0
- package/node_modules/dsh-subagent-codex-pro/lib/process-guardian.js.map +1 -0
- package/node_modules/dsh-subagent-codex-pro/lib/run.js +842 -0
- package/node_modules/dsh-subagent-codex-pro/lib/run.js.map +1 -0
- package/node_modules/dsh-subagent-codex-pro/lib/structured.js +329 -0
- package/node_modules/dsh-subagent-codex-pro/lib/structured.js.map +1 -0
- package/node_modules/dsh-subagent-codex-pro/lib/tool.js +295 -0
- package/node_modules/dsh-subagent-codex-pro/lib/tool.js.map +1 -0
- package/node_modules/dsh-subagent-codex-pro/lib/types/codex-exec.d.ts +88 -0
- package/node_modules/dsh-subagent-codex-pro/lib/types/codex-exec.d.ts.map +1 -0
- package/node_modules/dsh-subagent-codex-pro/lib/types/dsh-types.d.ts +179 -0
- package/node_modules/dsh-subagent-codex-pro/lib/types/dsh-types.d.ts.map +1 -0
- package/node_modules/dsh-subagent-codex-pro/lib/types/index.d.ts +266 -0
- package/node_modules/dsh-subagent-codex-pro/lib/types/index.d.ts.map +1 -0
- package/node_modules/dsh-subagent-codex-pro/lib/types/jobs.d.ts +34 -0
- package/node_modules/dsh-subagent-codex-pro/lib/types/jobs.d.ts.map +1 -0
- package/node_modules/dsh-subagent-codex-pro/lib/types/jsonrpc.d.ts +113 -0
- package/node_modules/dsh-subagent-codex-pro/lib/types/jsonrpc.d.ts.map +1 -0
- package/node_modules/dsh-subagent-codex-pro/lib/types/machine-cli.d.ts +3 -0
- package/node_modules/dsh-subagent-codex-pro/lib/types/machine-cli.d.ts.map +1 -0
- package/node_modules/dsh-subagent-codex-pro/lib/types/machine-local.d.ts +4 -0
- package/node_modules/dsh-subagent-codex-pro/lib/types/machine-local.d.ts.map +1 -0
- package/node_modules/dsh-subagent-codex-pro/lib/types/machine-recovery.d.ts +53 -0
- package/node_modules/dsh-subagent-codex-pro/lib/types/machine-recovery.d.ts.map +1 -0
- package/node_modules/dsh-subagent-codex-pro/lib/types/machine-supervision.d.ts +8 -0
- package/node_modules/dsh-subagent-codex-pro/lib/types/machine-supervision.d.ts.map +1 -0
- package/node_modules/dsh-subagent-codex-pro/lib/types/machine-supervisor.d.ts +2 -0
- package/node_modules/dsh-subagent-codex-pro/lib/types/machine-supervisor.d.ts.map +1 -0
- package/node_modules/dsh-subagent-codex-pro/lib/types/machine.d.ts +70 -0
- package/node_modules/dsh-subagent-codex-pro/lib/types/machine.d.ts.map +1 -0
- package/node_modules/dsh-subagent-codex-pro/lib/types/process-guardian.d.ts +22 -0
- package/node_modules/dsh-subagent-codex-pro/lib/types/process-guardian.d.ts.map +1 -0
- package/node_modules/dsh-subagent-codex-pro/lib/types/run.d.ts +386 -0
- package/node_modules/dsh-subagent-codex-pro/lib/types/run.d.ts.map +1 -0
- package/node_modules/dsh-subagent-codex-pro/lib/types/structured.d.ts +35 -0
- package/node_modules/dsh-subagent-codex-pro/lib/types/structured.d.ts.map +1 -0
- package/node_modules/dsh-subagent-codex-pro/lib/types/tool.d.ts +107 -0
- package/node_modules/dsh-subagent-codex-pro/lib/types/tool.d.ts.map +1 -0
- package/node_modules/dsh-subagent-codex-pro/lib/types/usage.d.ts +131 -0
- package/node_modules/dsh-subagent-codex-pro/lib/types/usage.d.ts.map +1 -0
- package/node_modules/dsh-subagent-codex-pro/lib/types/wire.d.ts +321 -0
- package/node_modules/dsh-subagent-codex-pro/lib/types/wire.d.ts.map +1 -0
- package/node_modules/dsh-subagent-codex-pro/lib/usage.js +356 -0
- package/node_modules/dsh-subagent-codex-pro/lib/usage.js.map +1 -0
- package/node_modules/dsh-subagent-codex-pro/lib/wire.js +986 -0
- package/node_modules/dsh-subagent-codex-pro/lib/wire.js.map +1 -0
- package/node_modules/dsh-subagent-codex-pro/package.json +76 -0
- package/npm/install.js +59 -6
- package/package.json +74 -12
- package/plugins/dsh/LICENSE +21 -0
- package/plugins/dsh/PROTOCOL.md +609 -0
- package/plugins/dsh/README.en.md +4 -0
- package/plugins/dsh/README.md +342 -0
- package/plugins/dsh/README.zh-CN.md +279 -0
- package/plugins/dsh/THIRD_PARTY_NOTICES.md +42 -0
- package/plugins/dsh/vendor/README.md +17 -0
- package/plugins/dsh/vendor/codex-pro.json +16 -0
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Private POSIX group guardian for one Codex app-server.
|
|
3
|
+
*
|
|
4
|
+
* The caller creates this process as a group leader and establishes the IPC
|
|
5
|
+
* lifeline in the same spawn operation. Codex inherits this group, but never
|
|
6
|
+
* the IPC descriptor. An abruptly killed caller therefore closes the lifeline
|
|
7
|
+
* even if Codex is hung, before or after initialization. The guardian then
|
|
8
|
+
* terminates only its own group with a finite TERM/KILL sequence.
|
|
9
|
+
*
|
|
10
|
+
* A live caller can request a normal stop with SIGTERM/SIGINT. In that case the
|
|
11
|
+
* caller keeps ownership and confirms the group itself, so this process exits
|
|
12
|
+
* as soon as the app-server exits instead of making every normal delegation
|
|
13
|
+
* sleep the whole dispose grace. A caller death (IPC disconnect) keeps the
|
|
14
|
+
* full grace: there the guardian is the last group owner and must clean up
|
|
15
|
+
* descendants that outlive the app-server.
|
|
16
|
+
*
|
|
17
|
+
* Normal cleanup is confirmed by the surviving caller with kill(-pgid, 0).
|
|
18
|
+
* Emergency cleanup cannot write a final receipt after killing this guardian;
|
|
19
|
+
* missing app-server exit facts must remain unknown in the caller's receipt.
|
|
20
|
+
*/
|
|
21
|
+
import { spawn } from 'node:child_process';
|
|
22
|
+
import { closeSync } from 'node:fs';
|
|
23
|
+
const command = process.argv[2];
|
|
24
|
+
const graceMs = Number(process.argv[3]);
|
|
25
|
+
const posix = process.platform !== 'win32';
|
|
26
|
+
let child;
|
|
27
|
+
let stopping = false;
|
|
28
|
+
let callerGone = false;
|
|
29
|
+
let callerRequestedStop = false;
|
|
30
|
+
let childDone = false;
|
|
31
|
+
let exiting = false;
|
|
32
|
+
function closeProtocolDescriptors() {
|
|
33
|
+
// Let the caller observe EOF after all app-server output has drained. Keep
|
|
34
|
+
// only our private IPC lease; Codex descendants may still hold their copies.
|
|
35
|
+
for (const fd of [0, 1, 2]) {
|
|
36
|
+
try {
|
|
37
|
+
closeSync(fd);
|
|
38
|
+
}
|
|
39
|
+
catch { /* already closed */ }
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function exitAfterCallerStop() {
|
|
43
|
+
if (exiting || callerGone || !callerRequestedStop || !childDone)
|
|
44
|
+
return;
|
|
45
|
+
exiting = true;
|
|
46
|
+
// Let the exit IPC frame reach the caller. The grace timer remains armed:
|
|
47
|
+
// if the caller disappears in this window, the guardian must keep owning
|
|
48
|
+
// the group until the timer's SIGKILL instead of exiting early.
|
|
49
|
+
setImmediate(() => {
|
|
50
|
+
if (callerGone || !callerRequestedStop || !childDone) {
|
|
51
|
+
exiting = false;
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
process.exit(0);
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
function beginShutdown(reason) {
|
|
58
|
+
if (reason === 'caller')
|
|
59
|
+
callerRequestedStop = true;
|
|
60
|
+
else
|
|
61
|
+
callerGone = true;
|
|
62
|
+
if (stopping) {
|
|
63
|
+
exitAfterCallerStop();
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
stopping = true;
|
|
67
|
+
// Set the guard before signaling this group: SIGTERM also reaches us.
|
|
68
|
+
try {
|
|
69
|
+
if (posix)
|
|
70
|
+
process.kill(-process.pid, 'SIGTERM');
|
|
71
|
+
else
|
|
72
|
+
child?.kill('SIGTERM');
|
|
73
|
+
}
|
|
74
|
+
catch { /* The caller independently checks its owned group. */ }
|
|
75
|
+
if (callerRequestedStop && !callerGone && childDone) {
|
|
76
|
+
exitAfterCallerStop();
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
setTimeout(() => {
|
|
80
|
+
try {
|
|
81
|
+
if (posix)
|
|
82
|
+
process.kill(-process.pid, 'SIGKILL');
|
|
83
|
+
else
|
|
84
|
+
child?.kill('SIGKILL');
|
|
85
|
+
}
|
|
86
|
+
finally {
|
|
87
|
+
// SIGKILL above is synchronous on POSIX; Windows has no group guarantee.
|
|
88
|
+
process.exit(1);
|
|
89
|
+
}
|
|
90
|
+
}, graceMs);
|
|
91
|
+
}
|
|
92
|
+
function report(message, afterSend) {
|
|
93
|
+
if (!process.connected || process.send === undefined) {
|
|
94
|
+
afterSend?.();
|
|
95
|
+
beginShutdown('disconnect');
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
try {
|
|
99
|
+
process.send(message, (error) => {
|
|
100
|
+
if (error !== null) {
|
|
101
|
+
beginShutdown('disconnect');
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
afterSend?.();
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
beginShutdown('disconnect');
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// Install the handlers before starting any work. A parent can die before this
|
|
112
|
+
// module starts executing; checking connected also covers that missed event.
|
|
113
|
+
process.on('disconnect', () => { beginShutdown('disconnect'); });
|
|
114
|
+
process.on('SIGTERM', () => { beginShutdown('caller'); });
|
|
115
|
+
process.on('SIGINT', () => { beginShutdown('caller'); });
|
|
116
|
+
if (command === undefined || !Number.isSafeInteger(graceMs) || graceMs < 0 || graceMs > 30_000) {
|
|
117
|
+
childDone = true;
|
|
118
|
+
report({ type: 'spawn-error', message: 'invalid private guardian arguments' });
|
|
119
|
+
beginShutdown('disconnect');
|
|
120
|
+
}
|
|
121
|
+
else if (!process.connected) {
|
|
122
|
+
beginShutdown('disconnect');
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
const env = { ...process.env };
|
|
126
|
+
delete env.NODE_CHANNEL_FD;
|
|
127
|
+
delete env.NODE_CHANNEL_SERIALIZATION_MODE;
|
|
128
|
+
try {
|
|
129
|
+
child = spawn(command, ['app-server', '--stdio'], {
|
|
130
|
+
cwd: process.cwd(), env, stdio: ['inherit', 'inherit', 'inherit'],
|
|
131
|
+
detached: false, windowsHide: true,
|
|
132
|
+
});
|
|
133
|
+
child.once('spawn', () => { report({ type: 'started', pid: child?.pid }); });
|
|
134
|
+
child.once('error', (error) => {
|
|
135
|
+
childDone = true;
|
|
136
|
+
closeProtocolDescriptors();
|
|
137
|
+
report({ type: 'spawn-error', message: error.message }, () => { exitAfterCallerStop(); });
|
|
138
|
+
});
|
|
139
|
+
child.once('exit', (exitCode, signal) => {
|
|
140
|
+
childDone = true;
|
|
141
|
+
closeProtocolDescriptors();
|
|
142
|
+
report({ type: 'exit', exitCode, signal }, () => { exitAfterCallerStop(); });
|
|
143
|
+
});
|
|
144
|
+
// No immediate process.exit here: when the caller is alive it will request
|
|
145
|
+
// cleanup. If the caller dies, the IPC disconnect handler keeps the full
|
|
146
|
+
// grace to own and terminate descendants. A caller-requested stop exits
|
|
147
|
+
// from the exit/error callbacks above once the app-server is gone.
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
childDone = true;
|
|
151
|
+
report({ type: 'spawn-error', message: error instanceof Error ? error.message : String(error) }, () => { exitAfterCallerStop(); });
|
|
152
|
+
}
|
|
153
|
+
if (!process.connected)
|
|
154
|
+
beginShutdown('disconnect');
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=process-guardian.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-guardian.js","sourceRoot":"","sources":["../src/process-guardian.ts"],"names":[],"mappings":"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"}
|