@gkorepanov/ccodex 0.3.0 → 0.3.4

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 (176) hide show
  1. package/README.md +27 -9
  2. package/RELEASING.md +14 -15
  3. package/SSH_VERIFY.md +11 -0
  4. package/archive/README.md +23 -0
  5. package/compatibility.json +1 -2
  6. package/config.example.toml +12 -4
  7. package/dist/claude/asyncQueue.d.ts +3 -0
  8. package/dist/claude/asyncQueue.js +13 -2
  9. package/dist/claude/asyncQueue.js.map +1 -1
  10. package/dist/claude/commandActions.d.ts +6 -0
  11. package/dist/claude/commandActions.js +57 -0
  12. package/dist/claude/commandActions.js.map +1 -0
  13. package/dist/claude/compactCommand.d.ts +2 -0
  14. package/dist/claude/compactCommand.js +7 -0
  15. package/dist/claude/compactCommand.js.map +1 -0
  16. package/dist/claude/goalTools.d.ts +15 -0
  17. package/dist/claude/goalTools.js +173 -0
  18. package/dist/claude/goalTools.js.map +1 -0
  19. package/dist/claude/hookMapper.d.ts +17 -4
  20. package/dist/claude/hookMapper.js +7 -5
  21. package/dist/claude/hookMapper.js.map +1 -1
  22. package/dist/claude/rateLimits.d.ts +72 -0
  23. package/dist/claude/rateLimits.js +330 -0
  24. package/dist/claude/rateLimits.js.map +1 -0
  25. package/dist/claude/responseItemValidation.d.ts +2 -0
  26. package/dist/claude/responseItemValidation.js +40 -0
  27. package/dist/claude/responseItemValidation.js.map +1 -0
  28. package/dist/claude/resultClassifier.d.ts +8 -2
  29. package/dist/claude/resultClassifier.js +1 -1
  30. package/dist/claude/resultClassifier.js.map +1 -1
  31. package/dist/claude/service.d.ts +108 -28
  32. package/dist/claude/service.js +1276 -668
  33. package/dist/claude/service.js.map +1 -1
  34. package/dist/claude/session/backgroundOutput.d.ts +2 -0
  35. package/dist/claude/session/backgroundOutput.js +29 -0
  36. package/dist/claude/session/backgroundOutput.js.map +1 -0
  37. package/dist/claude/session/commands.d.ts +855 -0
  38. package/dist/claude/session/commands.js +2 -0
  39. package/dist/claude/session/commands.js.map +1 -0
  40. package/dist/claude/session/goalState.d.ts +49 -0
  41. package/dist/claude/session/goalState.js +407 -0
  42. package/dist/claude/session/goalState.js.map +1 -0
  43. package/dist/claude/session/mailbox.d.ts +52 -0
  44. package/dist/claude/session/mailbox.js +190 -0
  45. package/dist/claude/session/mailbox.js.map +1 -0
  46. package/dist/claude/session/outputAdapter.d.ts +11 -0
  47. package/dist/claude/session/outputAdapter.js +31 -0
  48. package/dist/claude/session/outputAdapter.js.map +1 -0
  49. package/dist/claude/session/providerFacts.d.ts +47 -0
  50. package/dist/claude/session/providerFacts.js +84 -0
  51. package/dist/claude/session/providerFacts.js.map +1 -0
  52. package/dist/claude/session/providerRuntime.d.ts +1 -0
  53. package/dist/claude/session/providerRuntime.js +2 -0
  54. package/dist/claude/session/providerRuntime.js.map +1 -0
  55. package/dist/claude/session/providerRuntimeFactory.d.ts +49 -0
  56. package/dist/claude/session/providerRuntimeFactory.js +127 -0
  57. package/dist/claude/session/providerRuntimeFactory.js.map +1 -0
  58. package/dist/claude/session/repository.d.ts +57 -0
  59. package/dist/claude/session/repository.js +161 -0
  60. package/dist/claude/session/repository.js.map +1 -0
  61. package/dist/claude/session/runtime.d.ts +46 -0
  62. package/dist/claude/session/runtime.js +140 -0
  63. package/dist/claude/session/runtime.js.map +1 -0
  64. package/dist/claude/session/scopeState.d.ts +61 -0
  65. package/dist/claude/session/scopeState.js +74 -0
  66. package/dist/claude/session/scopeState.js.map +1 -0
  67. package/dist/claude/session/session.d.ts +281 -0
  68. package/dist/claude/session/session.js +6664 -0
  69. package/dist/claude/session/session.js.map +1 -0
  70. package/dist/claude/session/shellRunner.d.ts +13 -0
  71. package/dist/claude/session/shellRunner.js +103 -0
  72. package/dist/claude/session/shellRunner.js.map +1 -0
  73. package/dist/claude/session/usage.d.ts +2 -0
  74. package/dist/claude/session/usage.js +10 -0
  75. package/dist/claude/session/usage.js.map +1 -0
  76. package/dist/claude/sessionRegistry.d.ts +26 -0
  77. package/dist/claude/sessionRegistry.js +118 -0
  78. package/dist/claude/sessionRegistry.js.map +1 -0
  79. package/dist/claude/shellSupervisor.d.ts +1 -0
  80. package/dist/claude/shellSupervisor.js +69 -0
  81. package/dist/claude/shellSupervisor.js.map +1 -0
  82. package/dist/claude/statusCommand.d.ts +21 -0
  83. package/dist/claude/statusCommand.js +97 -0
  84. package/dist/claude/statusCommand.js.map +1 -0
  85. package/dist/claude/toolMapper.d.ts +9 -1
  86. package/dist/claude/toolMapper.js +92 -16
  87. package/dist/claude/toolMapper.js.map +1 -1
  88. package/dist/claude/transcriptBrancher.d.ts +37 -0
  89. package/dist/claude/transcriptBrancher.js +103 -0
  90. package/dist/claude/transcriptBrancher.js.map +1 -0
  91. package/dist/cli/delegate.js +23 -1
  92. package/dist/cli/delegate.js.map +1 -1
  93. package/dist/cli/main.js +28 -12
  94. package/dist/cli/main.js.map +1 -1
  95. package/dist/codex/generated/ResponseItemRuntimeSchema.d.ts +8 -0
  96. package/dist/codex/generated/ResponseItemRuntimeSchema.js +7 -0
  97. package/dist/codex/generated/ResponseItemRuntimeSchema.js.map +1 -0
  98. package/dist/compatibility/probe.js +11 -6
  99. package/dist/compatibility/probe.js.map +1 -1
  100. package/dist/config/config.d.ts +9 -0
  101. package/dist/config/config.js +80 -11
  102. package/dist/config/config.js.map +1 -1
  103. package/dist/daemon/daemon.js +91 -43
  104. package/dist/daemon/daemon.js.map +1 -1
  105. package/dist/daemon/ownership.d.ts +15 -0
  106. package/dist/daemon/ownership.js +185 -0
  107. package/dist/daemon/ownership.js.map +1 -0
  108. package/dist/daemon/supervisor.d.ts +3 -0
  109. package/dist/daemon/supervisor.js +37 -1
  110. package/dist/daemon/supervisor.js.map +1 -1
  111. package/dist/gateway/clientConnection.d.ts +7 -1
  112. package/dist/gateway/clientConnection.js +435 -48
  113. package/dist/gateway/clientConnection.js.map +1 -1
  114. package/dist/gateway/remoteRelay.js +0 -1
  115. package/dist/gateway/remoteRelay.js.map +1 -1
  116. package/dist/gateway/server.d.ts +1 -1
  117. package/dist/gateway/server.js +37 -9
  118. package/dist/gateway/server.js.map +1 -1
  119. package/dist/gateway/subscriptions.d.ts +9 -2
  120. package/dist/gateway/subscriptions.js +87 -9
  121. package/dist/gateway/subscriptions.js.map +1 -1
  122. package/dist/gateway/transientNotice.d.ts +2 -0
  123. package/dist/gateway/transientNotice.js +42 -1
  124. package/dist/gateway/transientNotice.js.map +1 -1
  125. package/dist/handoff/service.d.ts +32 -3
  126. package/dist/handoff/service.js +304 -26
  127. package/dist/handoff/service.js.map +1 -1
  128. package/dist/handoff/titleGeneration.d.ts +28 -0
  129. package/dist/handoff/titleGeneration.js +151 -0
  130. package/dist/handoff/titleGeneration.js.map +1 -0
  131. package/dist/management/doctor.d.ts +1 -1
  132. package/dist/management/doctor.js +32 -23
  133. package/dist/management/doctor.js.map +1 -1
  134. package/dist/management/lifecycle.js +14 -2
  135. package/dist/management/lifecycle.js.map +1 -1
  136. package/dist/management/remoteShim.d.ts +10 -0
  137. package/dist/management/remoteShim.js +65 -0
  138. package/dist/management/remoteShim.js.map +1 -0
  139. package/dist/management/setup.d.ts +4 -0
  140. package/dist/management/setup.js +108 -39
  141. package/dist/management/setup.js.map +1 -1
  142. package/dist/observability/metrics.d.ts +2 -0
  143. package/dist/observability/metrics.js +6 -0
  144. package/dist/observability/metrics.js.map +1 -1
  145. package/dist/protocol/errors.d.ts +1 -0
  146. package/dist/protocol/errors.js +4 -1
  147. package/dist/protocol/errors.js.map +1 -1
  148. package/dist/runtime/dependencies.js +2 -2
  149. package/dist/runtime/dependencies.js.map +1 -1
  150. package/dist/runtime/providerAvailability.d.ts +24 -0
  151. package/dist/runtime/providerAvailability.js +107 -0
  152. package/dist/runtime/providerAvailability.js.map +1 -0
  153. package/dist/state/stateCommand.d.ts +21 -0
  154. package/dist/state/stateCommand.js +198 -0
  155. package/dist/state/stateCommand.js.map +1 -0
  156. package/dist/state/stockStateTracker.d.ts +14 -0
  157. package/dist/state/stockStateTracker.js +120 -0
  158. package/dist/state/stockStateTracker.js.map +1 -0
  159. package/dist/store/HybridStore.d.ts +118 -2
  160. package/dist/store/HybridStore.js +23 -1
  161. package/dist/store/HybridStore.js.map +1 -1
  162. package/dist/store/memoryStore.d.ts +57 -7
  163. package/dist/store/memoryStore.js +337 -5
  164. package/dist/store/memoryStore.js.map +1 -1
  165. package/dist/store/sqliteStore.d.ts +30 -4
  166. package/dist/store/sqliteStore.js +395 -42
  167. package/dist/store/sqliteStore.js.map +1 -1
  168. package/install.sh +2 -2
  169. package/package.json +18 -10
  170. package/dist/claude/interactions.d.ts +0 -23
  171. package/dist/claude/interactions.js +0 -77
  172. package/dist/claude/interactions.js.map +0 -1
  173. package/dist/claude/sessionRuntime.d.ts +0 -102
  174. package/dist/claude/sessionRuntime.js +0 -1361
  175. package/dist/claude/sessionRuntime.js.map +0 -1
  176. /package/{BUILD_BENCHMARKS.md → archive/BUILD_BENCHMARKS.md} +0 -0
@@ -1,9 +1,13 @@
1
1
  import { existsSync, readFileSync, realpathSync } from "node:fs";
2
2
  import { homedir } from "node:os";
3
- import { delimiter, join, resolve } from "node:path";
3
+ import { delimiter, join, relative, resolve } from "node:path";
4
4
  import { parse } from "smol-toml";
5
5
  import { DEFAULT_CLAUDE_MODEL_ALIASES } from "../claude/modelSelection.js";
6
6
  import { bundledClaudeExecutable, pinnedCodexExecutable } from "../runtime/dependencies.js";
7
+ export const DEFAULT_FEATURES = {
8
+ titleGenerationUx: true,
9
+ statusCommand: true,
10
+ };
7
11
  function expandHome(value) {
8
12
  return value === "~" ? homedir() : value.startsWith("~/") ? join(homedir(), value.slice(2)) : value;
9
13
  }
@@ -27,6 +31,23 @@ function stringMap(value, fallback) {
27
31
  }
28
32
  return Object.fromEntries(entries);
29
33
  }
34
+ function featureConfig(value) {
35
+ if (value === undefined)
36
+ return DEFAULT_FEATURES;
37
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
38
+ throw new Error("[features] must be a TOML table.");
39
+ }
40
+ const table = value;
41
+ for (const key of ["title_generation_ux", "status_command"]) {
42
+ if (table[key] !== undefined && typeof table[key] !== "boolean") {
43
+ throw new Error(`features.${key} must be a boolean.`);
44
+ }
45
+ }
46
+ return {
47
+ titleGenerationUx: table.title_generation_ux ?? true,
48
+ statusCommand: table.status_command ?? true,
49
+ };
50
+ }
30
51
  function environment(primary, legacy) {
31
52
  return process.env[primary] ?? process.env[legacy];
32
53
  }
@@ -55,22 +76,55 @@ function findExecutable(command) {
55
76
  }
56
77
  return undefined;
57
78
  }
58
- function findDelegatedCodex(appServerCodex, dataDir) {
79
+ function insideManagedTree(candidate, productHome) {
80
+ const home = existsSync(productHome) ? realpathSync(productHome) : resolve(productHome);
81
+ const path = realpathSync(candidate);
82
+ const child = relative(home, path);
83
+ return child === "" || (child !== ".." && !child.startsWith(`..${process.platform === "win32" ? "\\" : "/"}`));
84
+ }
85
+ function externalExecutable(configured, label, productHome) {
86
+ const candidate = resolveExecutable(configured, label);
87
+ if (insideManagedTree(candidate, productHome)) {
88
+ throw new Error(`${label} resolves inside managed CCodex home '${productHome}'. Configure an external Codex executable.`);
89
+ }
90
+ return candidate;
91
+ }
92
+ function persistedDelegate(productHome) {
93
+ const path = join(productHome, "install.json");
94
+ if (!existsSync(path))
95
+ return undefined;
96
+ try {
97
+ const value = JSON.parse(readFileSync(path, "utf8"));
98
+ return typeof value.delegateCodex === "string" && value.delegateCodex.length > 0
99
+ ? value.delegateCodex
100
+ : undefined;
101
+ }
102
+ catch {
103
+ return undefined;
104
+ }
105
+ }
106
+ export function findDelegatedCodex(appServerCodex, productHome) {
59
107
  const excluded = new Set();
60
- for (const path of [appServerCodex, process.argv[1], join(dataDir, "bin", "codex")]) {
108
+ for (const path of [
109
+ appServerCodex,
110
+ process.argv[1],
111
+ join(productHome, "bin", "codex"),
112
+ join(productHome, "bin", "ccodex"),
113
+ join(productHome, "current", "node_modules", ".bin", "ccodex"),
114
+ ]) {
61
115
  if (!path || !existsSync(path))
62
116
  continue;
63
117
  excluded.add(realpathSync(path));
64
118
  }
65
119
  for (const directory of (process.env.PATH ?? "").split(delimiter)) {
66
- const candidate = join(directory, "codex");
120
+ const candidate = resolve(directory || ".", "codex");
67
121
  if (!existsSync(candidate))
68
122
  continue;
69
123
  const resolved = realpathSync(candidate);
70
- if (!excluded.has(resolved))
124
+ if (!excluded.has(resolved) && !insideManagedTree(candidate, productHome))
71
125
  return candidate;
72
126
  }
73
- return appServerCodex;
127
+ return undefined;
74
128
  }
75
129
  function resolveExecutable(configured, label) {
76
130
  const candidate = findExecutable(configured);
@@ -87,6 +141,23 @@ function readConfigFile(path) {
87
141
  return {};
88
142
  return parse(readFileSync(path, "utf8"));
89
143
  }
144
+ export function delegatedCodexExecutable(productHome, appServerCodex, configPath = join(productHome, "config.toml")) {
145
+ const file = readConfigFile(configPath);
146
+ const configured = process.env.CCODEX_DELEGATE_CODEX ??
147
+ (typeof file.delegate_codex === "string" ? file.delegate_codex : undefined);
148
+ if (configured)
149
+ return externalExecutable(configured, "Delegated Codex", productHome);
150
+ const persisted = persistedDelegate(productHome);
151
+ if (persisted) {
152
+ try {
153
+ return externalExecutable(persisted, "Persisted delegated Codex", productHome);
154
+ }
155
+ catch {
156
+ // A removed or moved global Codex is rediscovered from the current PATH below.
157
+ }
158
+ }
159
+ return findDelegatedCodex(appServerCodex, productHome);
160
+ }
90
161
  export function loadConfig() {
91
162
  const productHome = expandHome(process.env.CCODEX_HOME ?? join(homedir(), ".ccodex"));
92
163
  const defaultDataDir = join(productHome, "state");
@@ -97,17 +168,14 @@ export function loadConfig() {
97
168
  const configuredAppServerCodex = realCodexOverride ??
98
169
  stringValue(file.app_server_codex, stringValue(file.real_codex, pinnedCodexExecutable()));
99
170
  const realCodex = resolveExecutable(configuredAppServerCodex, "App-server Codex");
100
- const delegateCodexValue = process.env.CCODEX_DELEGATE_CODEX ??
101
- (typeof file.delegate_codex === "string" ? file.delegate_codex : undefined);
102
171
  const logLevel = stringValue(file.log_level, environment("CCODEX_LOG_LEVEL", "CODEX_HYBRID_LOG_LEVEL") ?? "info");
103
172
  if (!["debug", "info", "warn", "error"].includes(logLevel)) {
104
173
  throw new Error(`Invalid log level '${logLevel}'.`);
105
174
  }
175
+ const delegateCodex = delegatedCodexExecutable(productHome, realCodex, configPath);
106
176
  return {
107
177
  realCodex,
108
- delegateCodex: delegateCodexValue
109
- ? resolveExecutable(delegateCodexValue, "Delegated Codex")
110
- : findDelegatedCodex(realCodex, dataDir),
178
+ ...(delegateCodex ? { delegateCodex } : {}),
111
179
  claudeBinary: process.env.CCODEX_CLAUDE_BINARY ?? process.env.CODEX_HYBRID_CLAUDE_BINARY ??
112
180
  stringValue(file.claude_binary, bundledClaudeExecutable()),
113
181
  dataDir,
@@ -124,6 +192,7 @@ export function loadConfig() {
124
192
  rpcCapture: environmentBoolean("CCODEX_RPC_CAPTURE", "CODEX_HYBRID_RPC_CAPTURE", booleanValue(file.rpc_capture, true)),
125
193
  rpcCaptureIncludeContent: environmentBoolean("CCODEX_RPC_CAPTURE_INCLUDE_CONTENT", "CODEX_HYBRID_RPC_CAPTURE_INCLUDE_CONTENT", booleanValue(file.rpc_capture_include_content, true)),
126
194
  rpcCaptureMaxBytes: environmentNumber("CCODEX_RPC_CAPTURE_MAX_BYTES", "CODEX_HYBRID_RPC_CAPTURE_MAX_BYTES", numberValue(file.rpc_capture_max_bytes, 1_073_741_824)),
195
+ features: featureConfig(file.features),
127
196
  };
128
197
  }
129
198
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"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"}
@@ -2,15 +2,15 @@ import { execFile } from "node:child_process";
2
2
  import { promisify } from "node:util";
3
3
  import { chmodSync, existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
4
4
  import { dirname, join, resolve } from "node:path";
5
- import { homedir } from "node:os";
6
5
  import { probeAppServer } from "./probe.js";
7
- import { reconcileManagedProcess, spawnDetachedGateway, stopManagedProcess, withDaemonLock, } from "./supervisor.js";
6
+ import { daemonStateDirectory, killManagedProcess, reconcileManagedProcess, spawnDetachedGateway, stopManagedProcess, withDaemonLock, } from "./supervisor.js";
7
+ import { identifySocketOwner, reconcileOwnedGateway, socketOwnerPids, stopSocketOwner, } from "./ownership.js";
8
8
  const execFileAsync = promisify(execFile);
9
9
  const START_TIMEOUT_MS = 10_000;
10
10
  const POLL_MS = 50;
11
11
  const sleep = (milliseconds) => new Promise((resolve) => setTimeout(resolve, milliseconds));
12
12
  function paths(config, wrapperPath) {
13
- const stateDirectory = join(process.env.CODEX_HOME ?? join(homedir(), ".codex"), "app-server-daemon");
13
+ const stateDirectory = daemonStateDirectory();
14
14
  return {
15
15
  stateDirectory,
16
16
  settingsFile: join(stateDirectory, "settings.json"),
@@ -136,72 +136,117 @@ class HybridDaemon {
136
136
  if (!current || current.pid !== expected.pid || current.processStartTime !== expected.processStartTime) {
137
137
  throw new Error(`managed app server ${expected.pid} lost daemon ownership during readiness`);
138
138
  }
139
+ if (!this.ownsSocket(current)) {
140
+ throw new Error(`managed app server ${expected.pid} does not own ${this.paths.socketPath}`);
141
+ }
139
142
  return { pid: expected.pid, info };
140
143
  }
141
144
  catch (error) {
142
- await stopManagedProcess(this.paths.pidFile, expected).catch(() => undefined);
145
+ const current = reconcileManagedProcess(this.paths.pidFile);
146
+ if (current && current.pid === expected.pid && current.processStartTime === expected.processStartTime) {
147
+ const stop = this.ownsSocket(current) ? stopManagedProcess : killManagedProcess;
148
+ await stop(this.paths.pidFile, current).catch(() => undefined);
149
+ }
143
150
  throw error;
144
151
  }
145
152
  }
153
+ async replaceEndpoint(settings) {
154
+ let failure;
155
+ for (let attempt = 0; attempt < 3; attempt += 1) {
156
+ const managed = reconcileManagedProcess(this.paths.pidFile);
157
+ if (managed) {
158
+ if (this.ownsSocket(managed))
159
+ await stopManagedProcess(this.paths.pidFile, managed);
160
+ else
161
+ await killManagedProcess(this.paths.pidFile, managed);
162
+ }
163
+ const owner = identifySocketOwner(this.paths.socketPath);
164
+ if (owner) {
165
+ const confirmed = await probeMaybe(this.paths.socketPath);
166
+ const afterProbe = identifySocketOwner(this.paths.socketPath, owner);
167
+ // Vacancy is safe under the startup lock; every present owner remains
168
+ // fenced by PID/start-time before it can receive a signal.
169
+ if (afterProbe) {
170
+ if (!confirmed) {
171
+ throw new Error("refusing app-server takeover: owner did not answer app-server identity probe");
172
+ }
173
+ await stopSocketOwner(this.paths.socketPath, afterProbe);
174
+ }
175
+ }
176
+ try {
177
+ return await this.spawnReady(settings);
178
+ }
179
+ catch (error) {
180
+ failure = error;
181
+ // Codex App may have launched once more between handoff and bind. The
182
+ // managed remote shim makes this bounded; only another probed app-server
183
+ // on the exact socket is eligible for the next takeover attempt.
184
+ if (!await probeMaybe(this.paths.socketPath))
185
+ throw error;
186
+ }
187
+ }
188
+ throw new Error("app-server ownership did not stabilize after three takeover attempts", { cause: failure });
189
+ }
190
+ ownsSocket(record) {
191
+ const owners = socketOwnerPids(this.paths.socketPath);
192
+ return owners.length === 1 && owners[0] === record.pid;
193
+ }
146
194
  async start(status) {
147
195
  const settings = loadSettings(this.paths.settingsFile);
148
196
  const info = await probeMaybe(this.paths.socketPath);
149
197
  const managed = reconcileManagedProcess(this.paths.pidFile);
150
- if (info)
151
- return this.lifecycleOutput("alreadyRunning", managed ? "pid" : undefined, undefined, info.appServerVersion);
152
- if (managed) {
198
+ const managedOwnsSocket = managed ? this.ownsSocket(managed) : false;
199
+ if (info && managed && managedOwnsSocket) {
200
+ return this.lifecycleOutput("alreadyRunning", "pid", undefined, info.appServerVersion);
201
+ }
202
+ if (managed && managedOwnsSocket) {
153
203
  const ready = await waitUntilReady(this.paths.socketPath);
154
204
  return this.lifecycleOutput("alreadyRunning", "pid", undefined, ready.appServerVersion);
155
205
  }
156
- try {
157
- const { pid, info: ready } = await this.spawnReady(settings);
158
- return this.lifecycleOutput(status, "pid", pid, ready.appServerVersion);
159
- }
160
- catch (error) {
161
- const raced = await probeMaybe(this.paths.socketPath);
162
- if (raced && !reconcileManagedProcess(this.paths.pidFile)) {
163
- return this.lifecycleOutput("alreadyRunning", undefined, undefined, raced.appServerVersion);
164
- }
165
- throw error;
166
- }
206
+ const { pid, info: ready } = info || managed
207
+ ? await this.replaceEndpoint(settings)
208
+ : await this.spawnReady(settings).catch(async (error) => {
209
+ if (!await probeMaybe(this.paths.socketPath))
210
+ throw error;
211
+ return this.replaceEndpoint(settings);
212
+ });
213
+ return this.lifecycleOutput(status, "pid", pid, ready.appServerVersion);
167
214
  }
168
215
  async restart() {
169
216
  const settings = loadSettings(this.paths.settingsFile);
170
- const info = await probeMaybe(this.paths.socketPath);
171
- const managed = reconcileManagedProcess(this.paths.pidFile);
172
- if (info && !managed)
173
- throw new Error("app server is running but is not managed by codex app-server daemon");
174
- if (managed)
175
- await stopManagedProcess(this.paths.pidFile);
176
- const { pid, info: ready } = await this.spawnReady(settings);
217
+ const { pid, info: ready } = await this.replaceEndpoint(settings);
177
218
  return this.lifecycleOutput("restarted", "pid", pid, ready.appServerVersion);
178
219
  }
179
220
  async stop() {
180
221
  const managed = reconcileManagedProcess(this.paths.pidFile);
181
- if (managed) {
222
+ if (managed && this.ownsSocket(managed)) {
182
223
  await stopManagedProcess(this.paths.pidFile);
183
224
  return this.lifecycleOutput("stopped", "pid");
184
225
  }
226
+ // The recorded group is still ours by PID/start-time, but an unlink/rebind
227
+ // may have handed the pathname to another process. Reap only our stale group
228
+ // and then classify the current endpoint independently.
229
+ if (managed)
230
+ await killManagedProcess(this.paths.pidFile, managed);
231
+ const owned = reconcileOwnedGateway(this.paths.socketPath);
232
+ if (owned) {
233
+ await stopSocketOwner(this.paths.socketPath, owned);
234
+ return this.lifecycleOutput("stopped", "pid");
235
+ }
185
236
  if (await probeMaybe(this.paths.socketPath)) {
186
- throw new Error("app server is running but is not managed by codex app-server daemon");
237
+ return this.lifecycleOutput("notManaged");
187
238
  }
188
- return this.lifecycleOutput("notRunning");
239
+ return this.lifecycleOutput(managed ? "stopped" : "notRunning", managed ? "pid" : undefined);
189
240
  }
190
241
  async versionOutput() {
191
242
  const info = await probeAppServer(this.paths.socketPath);
192
243
  const managed = reconcileManagedProcess(this.paths.pidFile);
193
- return this.lifecycleOutput("running", managed ? "pid" : undefined, undefined, info.appServerVersion);
244
+ return this.lifecycleOutput("running", managed && this.ownsSocket(managed) ? "pid" : undefined, undefined, info.appServerVersion);
194
245
  }
195
246
  async bootstrap(remoteControlEnabled) {
196
247
  const settings = { remoteControlEnabled };
197
- const info = await probeMaybe(this.paths.socketPath);
198
- const managed = reconcileManagedProcess(this.paths.pidFile);
199
- if (info && !managed)
200
- throw new Error("app server is running but is not managed by codex app-server daemon");
201
248
  saveSettings(this.paths.settingsFile, settings);
202
- if (managed)
203
- await stopManagedProcess(this.paths.pidFile);
204
- const { info: ready } = await this.spawnReady(settings);
249
+ const { info: ready } = await this.replaceEndpoint(settings);
205
250
  const version = await this.getVersion();
206
251
  return {
207
252
  status: "bootstrapped",
@@ -218,19 +263,22 @@ class HybridDaemon {
218
263
  async setRemoteControl(enabled) {
219
264
  const previous = loadSettings(this.paths.settingsFile);
220
265
  const managed = reconcileManagedProcess(this.paths.pidFile);
221
- if (!managed && await probeMaybe(this.paths.socketPath)) {
222
- throw new Error("app server is running but is not managed by codex app-server daemon");
223
- }
266
+ const managedOwnsSocket = managed ? this.ownsSocket(managed) : false;
224
267
  if (previous.remoteControlEnabled === enabled) {
225
- const info = managed ? await waitUntilReady(this.paths.socketPath) : undefined;
226
- return this.remoteControlOutput(enabled ? "alreadyEnabled" : "alreadyDisabled", enabled, managed ? "pid" : undefined, info?.appServerVersion);
268
+ const serving = await probeMaybe(this.paths.socketPath);
269
+ const info = managed && managedOwnsSocket
270
+ ? await waitUntilReady(this.paths.socketPath)
271
+ : serving || managed ? (await this.replaceEndpoint(previous)).info : undefined;
272
+ return this.remoteControlOutput(enabled ? "alreadyEnabled" : "alreadyDisabled", enabled, managedOwnsSocket || info ? "pid" : undefined, info?.appServerVersion);
227
273
  }
228
274
  const settings = { remoteControlEnabled: enabled };
229
275
  saveSettings(this.paths.settingsFile, settings);
230
276
  let info;
231
277
  if (managed) {
232
- await stopManagedProcess(this.paths.pidFile);
233
- ({ info } = await this.spawnReady(settings));
278
+ ({ info } = await this.replaceEndpoint(settings));
279
+ }
280
+ else if (await probeMaybe(this.paths.socketPath)) {
281
+ ({ info } = await this.replaceEndpoint(settings));
234
282
  }
235
283
  return this.remoteControlOutput(enabled ? "enabled" : "disabled", enabled, info ? "pid" : undefined, info?.appServerVersion);
236
284
  }
@@ -1 +1 @@
1
- {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../src/daemon/daemon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACpG,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGlC,OAAO,EAAE,cAAc,EAAkB,MAAM,YAAY,CAAC;AAC5D,OAAO,EAEL,uBAAuB,EACvB,oBAAoB,EACpB,kBAAkB,EAClB,cAAc,GACf,MAAM,iBAAiB,CAAC;AAEzB,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC1C,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAChC,MAAM,OAAO,GAAG,EAAE,CAAC;AAsBnB,MAAM,KAAK,GAAG,CAAC,YAAoB,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;AAEpG,SAAS,KAAK,CAAC,MAAoB,EAAE,WAAmB;IACtD,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,EAAE,mBAAmB,CAAC,CAAC;IACtG,OAAO;QACL,cAAc;QACd,YAAY,EAAE,IAAI,CAAC,cAAc,EAAE,eAAe,CAAC;QACnD,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,gBAAgB,CAAC;QAC/C,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,uBAAuB,CAAC;QACxD,UAAU,EAAE,MAAM,CAAC,YAAY;QAC/B,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC;KAClC,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC;IAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAA4B,CAAC;IAChF,IAAI,OAAO,KAAK,CAAC,oBAAoB,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,IAAI,EAAE,CAAC,CAAC;IAChH,OAAO,EAAE,oBAAoB,EAAE,KAAK,CAAC,oBAAoB,EAAE,CAAC;AAC9D,CAAC;AAED,SAAS,YAAY,CAAC,IAAY,EAAE,QAAwB;IAC1D,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3D,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;IAChC,MAAM,SAAS,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,MAAM,CAAC;IAC/C,aAAa,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACpF,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC5B,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACzB,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,SAAiB;IAC3C,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,SAAS,EAAE,CAAC,WAAW,CAAC,EAAE;QAC/D,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,cAAc,EAAE,SAAS,EAAE;KACnD,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/C,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACtF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,UAAkB;IAC1C,IAAI,CAAC;QACH,OAAO,MAAM,cAAc,CAAC,UAAU,CAAC,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,UAAkB;IAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,gBAAgB,CAAC;IAC/C,IAAI,SAAkB,CAAC;IACvB,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,OAAO,MAAM,cAAc,CAAC,UAAU,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,SAAS,GAAG,KAAK,CAAC;YAClB,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,sCAAsC,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;AAC5F,CAAC;AAED,MAAM,YAAY;IAIoB;IAHnB,KAAK,CAAc;IAC5B,OAAO,CAAmB;IAElC,YAAoC,MAAoB,EAAE,WAAmB;QAAzC,WAAM,GAAN,MAAM,CAAc;QACtD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC1C,CAAC;IAEO,UAAU;QAChB,OAAO,IAAI,CAAC,OAAO,KAAK,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC9D,CAAC;IAEM,GAAG,CAAC,UAA4B;QACrC,IAAI,UAAU,CAAC,OAAO,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC;QAClE,OAAO,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,IAAI,EAAE;YAC1D,QAAQ,UAAU,CAAC,OAAO,EAAE,CAAC;gBAC3B,KAAK,WAAW,CAAC,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;gBAClE,KAAK,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBAC3C,KAAK,SAAS,CAAC,CAAC,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;gBACtC,KAAK,MAAM,CAAC,CAAC,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;gBAChC,KAAK,uBAAuB,CAAC,CAAC,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;gBACjE,KAAK,wBAAwB,CAAC,CAAC,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBACnE,KAAK,SAAS,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;YACjD,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,eAAe,CAC3B,MAAc,EACd,OAAe,EACf,GAAY,EACZ,gBAAyB;QAEzB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACxC,OAAO;YACL,MAAM;YACN,OAAO;YACP,GAAG;YACH,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW;YACxC,mBAAmB,EAAE,OAAO;YAC5B,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU;YACjC,UAAU,EAAE,OAAO;YACnB,gBAAgB;SACjB,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAC/B,MAAc,EACd,OAAgB,EAChB,OAAe,EACf,gBAAyB;QAEzB,OAAO;YACL,MAAM;YACN,OAAO;YACP,oBAAoB,EAAE,OAAO;YAC7B,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU;YACjC,UAAU,EAAE,MAAM,IAAI,CAAC,UAAU,EAAE;YACnC,gBAAgB;SACjB,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,KAAK,CAAC,QAAwB;QAC1C,MAAM,GAAG,GAAG,MAAM,oBAAoB,CAAC;YACrC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW;YACnC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO;YAC3B,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS;YAC/B,oBAAoB,EAAE,QAAQ,CAAC,oBAAoB;SACpD,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,KAAK,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,GAAG,uCAAuC,CAAC,CAAC;QACrH,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,QAAwB;QAC/C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YACzD,MAAM,OAAO,GAAG,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5D,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,KAAK,QAAQ,CAAC,GAAG,IAAI,OAAO,CAAC,gBAAgB,KAAK,QAAQ,CAAC,gBAAgB,EAAE,CAAC;gBACvG,MAAM,IAAI,KAAK,CAAC,sBAAsB,QAAQ,CAAC,GAAG,yCAAyC,CAAC,CAAC;YAC/F,CAAC;YACD,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;QACrC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YAC9E,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,KAAK,CAAC,MAA+B;QACjD,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACvD,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACrD,MAAM,OAAO,GAAG,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5D,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACvH,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC1D,OAAO,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAC1F,CAAC;QACD,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC7D,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAC1E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YACtD,IAAI,KAAK,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC1D,OAAO,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAC9F,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,OAAO;QACnB,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACvD,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACrD,MAAM,OAAO,GAAG,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5D,IAAI,IAAI,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;QAC7G,IAAI,OAAO;YAAE,MAAM,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC1D,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAC/E,CAAC;IAEO,KAAK,CAAC,IAAI;QAChB,MAAM,OAAO,GAAG,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5D,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC7C,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,MAAM,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;QACzF,CAAC;QACD,OAAO,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;IAC5C,CAAC;IAEO,KAAK,CAAC,aAAa;QACzB,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACzD,MAAM,OAAO,GAAG,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5D,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACxG,CAAC;IAEO,KAAK,CAAC,SAAS,CAAC,oBAA6B;QACnD,MAAM,QAAQ,GAAG,EAAE,oBAAoB,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACrD,MAAM,OAAO,GAAG,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5D,IAAI,IAAI,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;QAC7G,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;QAChD,IAAI,OAAO;YAAE,MAAM,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC1D,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACxC,OAAO;YACL,MAAM,EAAE,cAAc;YACtB,OAAO,EAAE,KAAK;YACd,iBAAiB,EAAE,KAAK;YACxB,oBAAoB;YACpB,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW;YACxC,mBAAmB,EAAE,OAAO;YAC5B,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU;YACjC,UAAU,EAAE,OAAO;YACnB,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;SACzC,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,OAAgB;QAC7C,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5D,IAAI,CAAC,OAAO,IAAI,MAAM,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YACxD,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;QACzF,CAAC;QACD,IAAI,QAAQ,CAAC,oBAAoB,KAAK,OAAO,EAAE,CAAC;YAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC/E,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,iBAAiB,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC;QAChJ,CAAC;QACD,MAAM,QAAQ,GAAG,EAAE,oBAAoB,EAAE,OAAO,EAAE,CAAC;QACnD,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;QAChD,IAAI,IAA2B,CAAC;QAChC,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC7C,CAAC,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC;IAC/H,CAAC;CACF;AAED,MAAM,UAAU,gBAAgB,CAC9B,MAAoB,EACpB,UAA4B,EAC5B,WAAmB;IAEnB,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;IAC3F,CAAC;IACD,OAAO,IAAI,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AAC/D,CAAC"}
1
+ {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../src/daemon/daemon.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { type PidRecord } from "./supervisor.js";
2
+ export interface SocketOwnershipRuntime {
3
+ readonly ownerPids: (socketPath: string) => number[];
4
+ readonly processStartTime: (pid: number) => string | undefined;
5
+ readonly processMatches: (record: PidRecord) => boolean;
6
+ readonly signal: (pid: number, signal: NodeJS.Signals) => void;
7
+ readonly now: () => number;
8
+ readonly sleep: (milliseconds: number) => Promise<void>;
9
+ }
10
+ export declare function gatewayOwnerFile(socketPath: string): string;
11
+ export declare function socketOwnerPids(socketPath: string): number[];
12
+ export declare function publishGatewayOwner(socketPath: string): () => void;
13
+ export declare function reconcileOwnedGateway(socketPath: string): PidRecord | undefined;
14
+ export declare function identifySocketOwner(socketPath: string, expected?: PidRecord, runtime?: SocketOwnershipRuntime): PidRecord | undefined;
15
+ export declare function stopSocketOwner(socketPath: string, expected: PidRecord, runtime?: SocketOwnershipRuntime): Promise<void>;
@@ -0,0 +1,185 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { spawnSync } from "node:child_process";
3
+ import { chmodSync, existsSync, mkdirSync, readFileSync, readdirSync, readlinkSync, renameSync, rmSync, writeFileSync, } from "node:fs";
4
+ import { dirname } from "node:path";
5
+ import { processMatches, processStartTime } from "./supervisor.js";
6
+ const POLL_MS = 50;
7
+ const STOP_GRACE_MS = 10_000;
8
+ const STOP_TIMEOUT_MS = 15_000;
9
+ const sleep = (milliseconds) => new Promise((resolve) => setTimeout(resolve, milliseconds));
10
+ export function gatewayOwnerFile(socketPath) {
11
+ return `${socketPath}.ccodex-owner.json`;
12
+ }
13
+ function linuxSocketOwners(socketPath) {
14
+ const inodes = new Set(readFileSync("/proc/net/unix", "utf8")
15
+ .split("\n")
16
+ .slice(1)
17
+ .map((line) => /^\S+:\s+\S+\s+\S+\s+\S+\s+\S+\s+\S+\s+(\d+)(?:\s+(.*))?$/u.exec(line.trim()))
18
+ .filter((match) => match?.[2] === socketPath)
19
+ .map((match) => match?.[1])
20
+ .filter((inode) => Boolean(inode)));
21
+ if (inodes.size === 0)
22
+ return [];
23
+ const owners = new Set();
24
+ for (const entry of readdirSync("/proc")) {
25
+ if (!/^\d+$/u.test(entry))
26
+ continue;
27
+ try {
28
+ for (const descriptor of readdirSync(`/proc/${entry}/fd`)) {
29
+ const target = readlinkSync(`/proc/${entry}/fd/${descriptor}`);
30
+ const match = /^socket:\[(\d+)\]$/u.exec(target);
31
+ if (match?.[1] && inodes.has(match[1])) {
32
+ owners.add(Number(entry));
33
+ break;
34
+ }
35
+ }
36
+ }
37
+ catch {
38
+ // Processes can exit, close descriptors, or be inaccessible during the scan.
39
+ }
40
+ }
41
+ return [...owners].sort((left, right) => left - right);
42
+ }
43
+ function lsofSocketOwners(socketPath) {
44
+ const command = process.platform === "darwin" ? "/usr/sbin/lsof" : "lsof";
45
+ const result = spawnSync(command, ["-n", "-P", "-t", "--", socketPath], { encoding: "utf8" });
46
+ if (result.error || (result.status !== 0 && result.status !== 1)) {
47
+ throw result.error ?? new Error(`lsof failed with status ${result.status}: ${result.stderr.trim()}`);
48
+ }
49
+ return [...new Set(result.stdout.split(/\s+/u).filter(Boolean).map(Number).filter(Number.isInteger))]
50
+ .sort((left, right) => left - right);
51
+ }
52
+ export function socketOwnerPids(socketPath) {
53
+ if (process.platform === "linux")
54
+ return linuxSocketOwners(socketPath);
55
+ if (process.platform === "darwin")
56
+ return lsofSocketOwners(socketPath);
57
+ throw new Error(`Unix socket ownership discovery is unsupported on ${process.platform}`);
58
+ }
59
+ const systemOwnershipRuntime = {
60
+ ownerPids: socketOwnerPids,
61
+ processStartTime,
62
+ processMatches,
63
+ signal: (pid, signal) => process.kill(pid, signal),
64
+ now: Date.now,
65
+ sleep,
66
+ };
67
+ function readOwner(path) {
68
+ try {
69
+ const value = JSON.parse(readFileSync(path, "utf8"));
70
+ return value.schemaVersion === 1 && Number.isInteger(value.pid) &&
71
+ typeof value.processStartTime === "string" && typeof value.token === "string"
72
+ ? value
73
+ : undefined;
74
+ }
75
+ catch {
76
+ return undefined;
77
+ }
78
+ }
79
+ function sameOwner(path, expected) {
80
+ const current = readOwner(path);
81
+ return current?.token === expected.token && current.pid === expected.pid &&
82
+ current.processStartTime === expected.processStartTime;
83
+ }
84
+ export function publishGatewayOwner(socketPath) {
85
+ const path = gatewayOwnerFile(socketPath);
86
+ const startTime = processStartTime(process.pid);
87
+ if (!startTime)
88
+ throw new Error(`failed to identify gateway process ${process.pid}`);
89
+ const owner = {
90
+ schemaVersion: 1,
91
+ pid: process.pid,
92
+ processStartTime: startTime,
93
+ token: randomUUID(),
94
+ };
95
+ mkdirSync(dirname(path), { recursive: true, mode: 0o700 });
96
+ const temporary = `${path}.${process.pid}.${owner.token}.tmp`;
97
+ writeFileSync(temporary, JSON.stringify(owner), { mode: 0o600 });
98
+ renameSync(temporary, path);
99
+ chmodSync(path, 0o600);
100
+ return () => {
101
+ if (sameOwner(path, owner))
102
+ rmSync(path, { force: true });
103
+ };
104
+ }
105
+ export function reconcileOwnedGateway(socketPath) {
106
+ const path = gatewayOwnerFile(socketPath);
107
+ if (!existsSync(path))
108
+ return undefined;
109
+ const owner = readOwner(path);
110
+ if (!owner || !processMatches(owner) || !socketOwnerPids(socketPath).includes(owner.pid)) {
111
+ rmSync(path, { force: true });
112
+ return undefined;
113
+ }
114
+ return { pid: owner.pid, processStartTime: owner.processStartTime };
115
+ }
116
+ function exactSocketOwnerPresent(socketPath, expected, runtime) {
117
+ const owners = runtime.ownerPids(socketPath);
118
+ if (owners.length === 0)
119
+ return false;
120
+ if (owners.length !== 1 || owners[0] !== expected.pid) {
121
+ throw new Error(`app-server socket owner changed (expected ${expected.pid}, found ${owners.join(", ") || "none"})`);
122
+ }
123
+ if (runtime.processMatches(expected))
124
+ return true;
125
+ if (runtime.ownerPids(socketPath).length === 0)
126
+ return false;
127
+ throw new Error(`app-server owner ${expected.pid} changed identity`);
128
+ }
129
+ function signalExactSocketOwner(socketPath, expected, signal, runtime) {
130
+ if (!exactSocketOwnerPresent(socketPath, expected, runtime))
131
+ return false;
132
+ try {
133
+ runtime.signal(expected.pid, signal);
134
+ }
135
+ catch (error) {
136
+ if (error.code !== "ESRCH")
137
+ throw error;
138
+ return exactSocketOwnerPresent(socketPath, expected, runtime);
139
+ }
140
+ return true;
141
+ }
142
+ export function identifySocketOwner(socketPath, expected, runtime = systemOwnershipRuntime) {
143
+ const owners = runtime.ownerPids(socketPath);
144
+ if (owners.length === 0)
145
+ return undefined;
146
+ if (owners.length !== 1) {
147
+ throw new Error(`refusing app-server takeover: expected one owner for ${socketPath}, found ${owners.join(", ")}`);
148
+ }
149
+ const pid = owners[0];
150
+ if (expected && pid !== expected.pid) {
151
+ throw new Error(`refusing app-server takeover: socket owner changed from ${expected.pid} to ${pid}`);
152
+ }
153
+ const startTime = runtime.processStartTime(pid);
154
+ if (!startTime) {
155
+ if (runtime.ownerPids(socketPath).length === 0)
156
+ return undefined;
157
+ throw new Error(`refusing app-server takeover: owner ${pid} exited during identification`);
158
+ }
159
+ const record = { pid, processStartTime: startTime };
160
+ if (expected && startTime !== expected.processStartTime) {
161
+ throw new Error(`refusing app-server takeover: owner ${pid} changed identity`);
162
+ }
163
+ if (!exactSocketOwnerPresent(socketPath, record, runtime))
164
+ return undefined;
165
+ return record;
166
+ }
167
+ export async function stopSocketOwner(socketPath, expected, runtime = systemOwnershipRuntime) {
168
+ if (!signalExactSocketOwner(socketPath, expected, "SIGTERM", runtime))
169
+ return;
170
+ const startedAt = runtime.now();
171
+ let forced = false;
172
+ while (runtime.now() - startedAt < STOP_TIMEOUT_MS) {
173
+ if (!exactSocketOwnerPresent(socketPath, expected, runtime))
174
+ return;
175
+ if (!forced && runtime.now() - startedAt >= STOP_GRACE_MS) {
176
+ // Fence PID reuse and socket handoff again immediately before escalation.
177
+ if (!signalExactSocketOwner(socketPath, expected, "SIGKILL", runtime))
178
+ return;
179
+ forced = true;
180
+ }
181
+ await runtime.sleep(POLL_MS);
182
+ }
183
+ throw new Error(`timed out waiting for app-server socket owner ${expected.pid} to stop`);
184
+ }
185
+ //# sourceMappingURL=ownership.js.map