@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.
Files changed (134) hide show
  1. package/CHANGELOG.md +20 -1
  2. package/README.md +7 -0
  3. package/README.zh-CN.md +5 -0
  4. package/THIRD_PARTY_NOTICES.md +42 -0
  5. package/bin/runtime.js +25 -31
  6. package/cordis.patch.yml +5 -0
  7. package/dist/bridge.mjs +421 -0
  8. package/dist/claude-code-pro-bridge.mjs +82 -0
  9. package/dist/claude-code-pro-worker.mjs +5 -0
  10. package/dist/client.js +4140 -0
  11. package/dist/codex-pro-bridge.mjs +75 -0
  12. package/dist/codex-pro-worker.mjs +5 -0
  13. package/dist/console-read.mjs +51 -0
  14. package/dist/control.mjs +218 -0
  15. package/dist/index.mjs +185 -0
  16. package/dist/installation.mjs +56 -0
  17. package/dist/machine-worker.mjs +241 -0
  18. package/dist/policy.mjs +91 -0
  19. package/dist/prewarm.mjs +136 -0
  20. package/dist/protocol.mjs +260 -0
  21. package/dist/task-association.mjs +127 -0
  22. package/dist/worker.mjs +52 -0
  23. package/dist/workspaces.mjs +42 -0
  24. package/docs/README.md +1 -1
  25. package/docs/README.zh-CN.md +1 -1
  26. package/docs/design.md +8 -5
  27. package/docs/en/configuration.md +1 -1
  28. package/docs/en/contributing.md +5 -6
  29. package/docs/en/flow-console.md +2 -2
  30. package/docs/en/getting-started.md +9 -2
  31. package/docs/en/releasing.md +132 -174
  32. package/docs/validation/2026-11-13-release-0.32.1.md +83 -0
  33. package/docs/validation/2026-11-14-release-0.33.0.md +49 -0
  34. package/docs/validation/2026-11-14-single-package.md +60 -0
  35. package/docs/validation/README.md +3 -0
  36. package/docs/zh-CN/configuration.md +1 -1
  37. package/docs/zh-CN/contributing.md +4 -5
  38. package/docs/zh-CN/flow-console.md +2 -2
  39. package/docs/zh-CN/getting-started.md +7 -3
  40. package/docs/zh-CN/releasing.md +97 -81
  41. package/native/darwin-amd64/flywheel +0 -0
  42. package/native/darwin-arm64/flywheel +0 -0
  43. package/native/linux-amd64/flywheel +0 -0
  44. package/native/linux-arm64/flywheel +0 -0
  45. package/native/manifest.json +22 -0
  46. package/node_modules/dsh-subagent-codex-pro/CHANGELOG.md +403 -0
  47. package/node_modules/dsh-subagent-codex-pro/LICENSE +21 -0
  48. package/node_modules/dsh-subagent-codex-pro/README.md +557 -0
  49. package/node_modules/dsh-subagent-codex-pro/cordis.patch.yml +30 -0
  50. package/node_modules/dsh-subagent-codex-pro/docs/README.zh.md +355 -0
  51. package/node_modules/dsh-subagent-codex-pro/docs/machine-lifecycle-validation.md +65 -0
  52. package/node_modules/dsh-subagent-codex-pro/docs/machine-lifecycle.md +144 -0
  53. package/node_modules/dsh-subagent-codex-pro/docs/machine-lifecycle.zh.md +98 -0
  54. package/node_modules/dsh-subagent-codex-pro/docs/machine.md +194 -0
  55. package/node_modules/dsh-subagent-codex-pro/docs/orchestration.zh.md +86 -0
  56. package/node_modules/dsh-subagent-codex-pro/lib/codex-exec.js +68 -0
  57. package/node_modules/dsh-subagent-codex-pro/lib/codex-exec.js.map +1 -0
  58. package/node_modules/dsh-subagent-codex-pro/lib/dsh-types.js +15 -0
  59. package/node_modules/dsh-subagent-codex-pro/lib/dsh-types.js.map +1 -0
  60. package/node_modules/dsh-subagent-codex-pro/lib/index.js +830 -0
  61. package/node_modules/dsh-subagent-codex-pro/lib/index.js.map +1 -0
  62. package/node_modules/dsh-subagent-codex-pro/lib/jobs.js +35 -0
  63. package/node_modules/dsh-subagent-codex-pro/lib/jobs.js.map +1 -0
  64. package/node_modules/dsh-subagent-codex-pro/lib/jsonrpc.js +229 -0
  65. package/node_modules/dsh-subagent-codex-pro/lib/jsonrpc.js.map +1 -0
  66. package/node_modules/dsh-subagent-codex-pro/lib/machine-cli.js +101 -0
  67. package/node_modules/dsh-subagent-codex-pro/lib/machine-cli.js.map +1 -0
  68. package/node_modules/dsh-subagent-codex-pro/lib/machine-local.js +122 -0
  69. package/node_modules/dsh-subagent-codex-pro/lib/machine-local.js.map +1 -0
  70. package/node_modules/dsh-subagent-codex-pro/lib/machine-recovery.js +167 -0
  71. package/node_modules/dsh-subagent-codex-pro/lib/machine-recovery.js.map +1 -0
  72. package/node_modules/dsh-subagent-codex-pro/lib/machine-supervision.js +141 -0
  73. package/node_modules/dsh-subagent-codex-pro/lib/machine-supervision.js.map +1 -0
  74. package/node_modules/dsh-subagent-codex-pro/lib/machine-supervisor.js +128 -0
  75. package/node_modules/dsh-subagent-codex-pro/lib/machine-supervisor.js.map +1 -0
  76. package/node_modules/dsh-subagent-codex-pro/lib/machine.js +104 -0
  77. package/node_modules/dsh-subagent-codex-pro/lib/machine.js.map +1 -0
  78. package/node_modules/dsh-subagent-codex-pro/lib/process-guardian.js +156 -0
  79. package/node_modules/dsh-subagent-codex-pro/lib/process-guardian.js.map +1 -0
  80. package/node_modules/dsh-subagent-codex-pro/lib/run.js +842 -0
  81. package/node_modules/dsh-subagent-codex-pro/lib/run.js.map +1 -0
  82. package/node_modules/dsh-subagent-codex-pro/lib/structured.js +329 -0
  83. package/node_modules/dsh-subagent-codex-pro/lib/structured.js.map +1 -0
  84. package/node_modules/dsh-subagent-codex-pro/lib/tool.js +295 -0
  85. package/node_modules/dsh-subagent-codex-pro/lib/tool.js.map +1 -0
  86. package/node_modules/dsh-subagent-codex-pro/lib/types/codex-exec.d.ts +88 -0
  87. package/node_modules/dsh-subagent-codex-pro/lib/types/codex-exec.d.ts.map +1 -0
  88. package/node_modules/dsh-subagent-codex-pro/lib/types/dsh-types.d.ts +179 -0
  89. package/node_modules/dsh-subagent-codex-pro/lib/types/dsh-types.d.ts.map +1 -0
  90. package/node_modules/dsh-subagent-codex-pro/lib/types/index.d.ts +266 -0
  91. package/node_modules/dsh-subagent-codex-pro/lib/types/index.d.ts.map +1 -0
  92. package/node_modules/dsh-subagent-codex-pro/lib/types/jobs.d.ts +34 -0
  93. package/node_modules/dsh-subagent-codex-pro/lib/types/jobs.d.ts.map +1 -0
  94. package/node_modules/dsh-subagent-codex-pro/lib/types/jsonrpc.d.ts +113 -0
  95. package/node_modules/dsh-subagent-codex-pro/lib/types/jsonrpc.d.ts.map +1 -0
  96. package/node_modules/dsh-subagent-codex-pro/lib/types/machine-cli.d.ts +3 -0
  97. package/node_modules/dsh-subagent-codex-pro/lib/types/machine-cli.d.ts.map +1 -0
  98. package/node_modules/dsh-subagent-codex-pro/lib/types/machine-local.d.ts +4 -0
  99. package/node_modules/dsh-subagent-codex-pro/lib/types/machine-local.d.ts.map +1 -0
  100. package/node_modules/dsh-subagent-codex-pro/lib/types/machine-recovery.d.ts +53 -0
  101. package/node_modules/dsh-subagent-codex-pro/lib/types/machine-recovery.d.ts.map +1 -0
  102. package/node_modules/dsh-subagent-codex-pro/lib/types/machine-supervision.d.ts +8 -0
  103. package/node_modules/dsh-subagent-codex-pro/lib/types/machine-supervision.d.ts.map +1 -0
  104. package/node_modules/dsh-subagent-codex-pro/lib/types/machine-supervisor.d.ts +2 -0
  105. package/node_modules/dsh-subagent-codex-pro/lib/types/machine-supervisor.d.ts.map +1 -0
  106. package/node_modules/dsh-subagent-codex-pro/lib/types/machine.d.ts +70 -0
  107. package/node_modules/dsh-subagent-codex-pro/lib/types/machine.d.ts.map +1 -0
  108. package/node_modules/dsh-subagent-codex-pro/lib/types/process-guardian.d.ts +22 -0
  109. package/node_modules/dsh-subagent-codex-pro/lib/types/process-guardian.d.ts.map +1 -0
  110. package/node_modules/dsh-subagent-codex-pro/lib/types/run.d.ts +386 -0
  111. package/node_modules/dsh-subagent-codex-pro/lib/types/run.d.ts.map +1 -0
  112. package/node_modules/dsh-subagent-codex-pro/lib/types/structured.d.ts +35 -0
  113. package/node_modules/dsh-subagent-codex-pro/lib/types/structured.d.ts.map +1 -0
  114. package/node_modules/dsh-subagent-codex-pro/lib/types/tool.d.ts +107 -0
  115. package/node_modules/dsh-subagent-codex-pro/lib/types/tool.d.ts.map +1 -0
  116. package/node_modules/dsh-subagent-codex-pro/lib/types/usage.d.ts +131 -0
  117. package/node_modules/dsh-subagent-codex-pro/lib/types/usage.d.ts.map +1 -0
  118. package/node_modules/dsh-subagent-codex-pro/lib/types/wire.d.ts +321 -0
  119. package/node_modules/dsh-subagent-codex-pro/lib/types/wire.d.ts.map +1 -0
  120. package/node_modules/dsh-subagent-codex-pro/lib/usage.js +356 -0
  121. package/node_modules/dsh-subagent-codex-pro/lib/usage.js.map +1 -0
  122. package/node_modules/dsh-subagent-codex-pro/lib/wire.js +986 -0
  123. package/node_modules/dsh-subagent-codex-pro/lib/wire.js.map +1 -0
  124. package/node_modules/dsh-subagent-codex-pro/package.json +76 -0
  125. package/npm/install.js +59 -6
  126. package/package.json +74 -12
  127. package/plugins/dsh/LICENSE +21 -0
  128. package/plugins/dsh/PROTOCOL.md +609 -0
  129. package/plugins/dsh/README.en.md +4 -0
  130. package/plugins/dsh/README.md +342 -0
  131. package/plugins/dsh/README.zh-CN.md +279 -0
  132. package/plugins/dsh/THIRD_PARTY_NOTICES.md +42 -0
  133. package/plugins/dsh/vendor/README.md +17 -0
  134. 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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"}