@pcircle/memesh 4.8.5 → 4.9.0

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 (226) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/.codex-plugin/mcp.json +6 -4
  4. package/.codex-plugin/plugin.json +1 -1
  5. package/AGENTS.md +60 -14
  6. package/README.de.md +83 -556
  7. package/README.md +83 -582
  8. package/README.zh-TW.md +84 -573
  9. package/dashboard/dist/index.html +10 -10
  10. package/dist/cli/view-live.d.ts.map +1 -1
  11. package/dist/cli/view-live.js +154 -384
  12. package/dist/cli/view-live.js.map +1 -1
  13. package/dist/core/agent-router.d.ts +11 -10
  14. package/dist/core/agent-router.d.ts.map +1 -1
  15. package/dist/core/agent-router.js +29 -14
  16. package/dist/core/agent-router.js.map +1 -1
  17. package/dist/core/agent-scope-id.d.ts.map +1 -1
  18. package/dist/core/agent-scope-id.js.map +1 -1
  19. package/dist/core/analytics.d.ts.map +1 -1
  20. package/dist/core/analytics.js.map +1 -1
  21. package/dist/core/config.d.ts +4 -40
  22. package/dist/core/config.d.ts.map +1 -1
  23. package/dist/core/config.js +75 -141
  24. package/dist/core/config.js.map +1 -1
  25. package/dist/core/demo.d.ts.map +1 -1
  26. package/dist/core/demo.js +6 -6
  27. package/dist/core/demo.js.map +1 -1
  28. package/dist/core/doctor.d.ts +1 -6
  29. package/dist/core/doctor.d.ts.map +1 -1
  30. package/dist/core/doctor.js +55 -227
  31. package/dist/core/doctor.js.map +1 -1
  32. package/dist/core/dreamer.d.ts +32 -47
  33. package/dist/core/dreamer.d.ts.map +1 -1
  34. package/dist/core/dreamer.js +211 -703
  35. package/dist/core/dreamer.js.map +1 -1
  36. package/dist/core/install-channel.d.ts.map +1 -1
  37. package/dist/core/install-channel.js +4 -47
  38. package/dist/core/install-channel.js.map +1 -1
  39. package/dist/core/install-id.d.ts.map +1 -1
  40. package/dist/core/install-id.js.map +1 -1
  41. package/dist/core/kg-backfill.d.ts.map +1 -1
  42. package/dist/core/kg-backfill.js.map +1 -1
  43. package/dist/core/lesson-engine.d.ts +0 -5
  44. package/dist/core/lesson-engine.d.ts.map +1 -1
  45. package/dist/core/lesson-engine.js +0 -25
  46. package/dist/core/lesson-engine.js.map +1 -1
  47. package/dist/core/lifecycle.d.ts.map +1 -1
  48. package/dist/core/lifecycle.js +54 -48
  49. package/dist/core/lifecycle.js.map +1 -1
  50. package/dist/core/memory-tool.d.ts.map +1 -1
  51. package/dist/core/memory-tool.js +17 -17
  52. package/dist/core/memory-tool.js.map +1 -1
  53. package/dist/core/operations.d.ts +2 -26
  54. package/dist/core/operations.d.ts.map +1 -1
  55. package/dist/core/operations.js +9 -244
  56. package/dist/core/operations.js.map +1 -1
  57. package/dist/core/paths.d.ts +4 -1
  58. package/dist/core/paths.d.ts.map +1 -1
  59. package/dist/core/paths.js +88 -14
  60. package/dist/core/paths.js.map +1 -1
  61. package/dist/core/product-improvements.js +2 -2
  62. package/dist/core/product-improvements.js.map +1 -1
  63. package/dist/core/schema-export.d.ts.map +1 -1
  64. package/dist/core/schema-export.js +10 -0
  65. package/dist/core/schema-export.js.map +1 -1
  66. package/dist/core/semver.d.ts +7 -0
  67. package/dist/core/semver.d.ts.map +1 -0
  68. package/dist/core/semver.js +49 -0
  69. package/dist/core/semver.js.map +1 -0
  70. package/dist/core/serializer.d.ts.map +1 -1
  71. package/dist/core/serializer.js +69 -57
  72. package/dist/core/serializer.js.map +1 -1
  73. package/dist/core/signal-scorer.d.ts.map +1 -1
  74. package/dist/core/signal-scorer.js.map +1 -1
  75. package/dist/core/transcript-extractor.d.ts +1 -85
  76. package/dist/core/transcript-extractor.d.ts.map +1 -1
  77. package/dist/core/transcript-extractor.js +5 -364
  78. package/dist/core/transcript-extractor.js.map +1 -1
  79. package/dist/core/transcript-source.d.ts +22 -6
  80. package/dist/core/transcript-source.d.ts.map +1 -1
  81. package/dist/core/transcript-source.js +108 -69
  82. package/dist/core/transcript-source.js.map +1 -1
  83. package/dist/core/types.d.ts +1 -17
  84. package/dist/core/types.d.ts.map +1 -1
  85. package/dist/core/version-check.d.ts.map +1 -1
  86. package/dist/core/version-check.js +11 -1
  87. package/dist/core/version-check.js.map +1 -1
  88. package/dist/db.d.ts +0 -34
  89. package/dist/db.d.ts.map +1 -1
  90. package/dist/db.js +3 -287
  91. package/dist/db.js.map +1 -1
  92. package/dist/host-runtime/acp.d.ts.map +1 -1
  93. package/dist/host-runtime/acp.js +2 -2
  94. package/dist/host-runtime/acp.js.map +1 -1
  95. package/dist/host-runtime/claude.d.ts.map +1 -1
  96. package/dist/host-runtime/claude.js +9 -7
  97. package/dist/host-runtime/claude.js.map +1 -1
  98. package/dist/host-runtime/codex-session.d.ts +9 -1
  99. package/dist/host-runtime/codex-session.d.ts.map +1 -1
  100. package/dist/host-runtime/codex-session.js +474 -29
  101. package/dist/host-runtime/codex-session.js.map +1 -1
  102. package/dist/host-runtime/codex.d.ts.map +1 -1
  103. package/dist/host-runtime/codex.js +2 -2
  104. package/dist/host-runtime/codex.js.map +1 -1
  105. package/dist/host-runtime/config.d.ts +1 -0
  106. package/dist/host-runtime/config.d.ts.map +1 -1
  107. package/dist/host-runtime/config.js +4 -0
  108. package/dist/host-runtime/config.js.map +1 -1
  109. package/dist/host-runtime/router-client.d.ts.map +1 -1
  110. package/dist/host-runtime/router-client.js +62 -15
  111. package/dist/host-runtime/router-client.js.map +1 -1
  112. package/dist/host-runtime/router.js +2 -2
  113. package/dist/host-runtime/router.js.map +1 -1
  114. package/dist/knowledge-graph.d.ts.map +1 -1
  115. package/dist/knowledge-graph.js +54 -45
  116. package/dist/knowledge-graph.js.map +1 -1
  117. package/dist/mcp/THIRD_PARTY_NOTICES.txt +217 -0
  118. package/dist/mcp/server.js +30685 -38
  119. package/dist/mcp/server.js.map +6 -1
  120. package/dist/skills-manifest.json +22 -22
  121. package/dist/storage/entity-index.d.ts +0 -1
  122. package/dist/storage/entity-index.d.ts.map +1 -1
  123. package/dist/storage/entity-index.js +0 -7
  124. package/dist/storage/entity-index.js.map +1 -1
  125. package/dist/storage/fts-index.d.ts.map +1 -1
  126. package/dist/storage/fts-index.js +6 -7
  127. package/dist/storage/fts-index.js.map +1 -1
  128. package/dist/storage/graph-repairs.d.ts +0 -5
  129. package/dist/storage/graph-repairs.d.ts.map +1 -1
  130. package/dist/storage/graph-repairs.js +4 -91
  131. package/dist/storage/graph-repairs.js.map +1 -1
  132. package/dist/storage/schema.d.ts +1 -1
  133. package/dist/storage/schema.d.ts.map +1 -1
  134. package/dist/storage/schema.js +1 -2
  135. package/dist/storage/schema.js.map +1 -1
  136. package/dist/storage/sqlite.d.ts +0 -1
  137. package/dist/storage/sqlite.d.ts.map +1 -1
  138. package/dist/storage/sqlite.js.map +1 -1
  139. package/dist/transports/agent-messaging.d.ts.map +1 -1
  140. package/dist/transports/agent-messaging.js +5 -7
  141. package/dist/transports/agent-messaging.js.map +1 -1
  142. package/dist/transports/cli/cli.d.ts.map +1 -1
  143. package/dist/transports/cli/cli.js +52 -674
  144. package/dist/transports/cli/cli.js.map +1 -1
  145. package/dist/transports/http/retired-routes.js +1 -1
  146. package/dist/transports/http/retired-routes.js.map +1 -1
  147. package/dist/transports/http/server.d.ts.map +1 -1
  148. package/dist/transports/http/server.js +13 -232
  149. package/dist/transports/http/server.js.map +1 -1
  150. package/dist/transports/mcp/handlers.d.ts +127 -1
  151. package/dist/transports/mcp/handlers.d.ts.map +1 -1
  152. package/dist/transports/mcp/handlers.js +53 -4
  153. package/dist/transports/mcp/handlers.js.map +1 -1
  154. package/dist/transports/schemas.d.ts +52 -0
  155. package/dist/transports/schemas.d.ts.map +1 -1
  156. package/dist/transports/schemas.js +39 -0
  157. package/dist/transports/schemas.js.map +1 -1
  158. package/docs/platforms/README.md +5 -4
  159. package/docs/platforms/agent-messaging.md +124 -60
  160. package/hooks/hooks.json +13 -2
  161. package/llms-install.md +62 -30
  162. package/package.json +4 -5
  163. package/scripts/hooks/_generated/core-paths.js +88 -14
  164. package/scripts/hooks/_generated/fts-index.js +6 -7
  165. package/scripts/hooks/_generated/schema.js +1 -2
  166. package/scripts/hooks/_shared.js +14 -20
  167. package/scripts/hooks/session-start.js +8 -6
  168. package/scripts/hooks/session-summary.js +19 -374
  169. package/skills/memesh/SKILL.md +19 -14
  170. package/skills/memesh-review/SKILL.md +7 -6
  171. package/dist/core/auto-tagger.d.ts +0 -10
  172. package/dist/core/auto-tagger.d.ts.map +0 -1
  173. package/dist/core/auto-tagger.js +0 -63
  174. package/dist/core/auto-tagger.js.map +0 -1
  175. package/dist/core/conflict-candidates.d.ts +0 -20
  176. package/dist/core/conflict-candidates.d.ts.map +0 -1
  177. package/dist/core/conflict-candidates.js +0 -71
  178. package/dist/core/conflict-candidates.js.map +0 -1
  179. package/dist/core/conflict-judge.d.ts +0 -58
  180. package/dist/core/conflict-judge.d.ts.map +0 -1
  181. package/dist/core/conflict-judge.js +0 -189
  182. package/dist/core/conflict-judge.js.map +0 -1
  183. package/dist/core/digest-validator.d.ts +0 -18
  184. package/dist/core/digest-validator.d.ts.map +0 -1
  185. package/dist/core/digest-validator.js +0 -85
  186. package/dist/core/digest-validator.js.map +0 -1
  187. package/dist/core/embedder.d.ts +0 -20
  188. package/dist/core/embedder.d.ts.map +0 -1
  189. package/dist/core/embedder.js +0 -245
  190. package/dist/core/embedder.js.map +0 -1
  191. package/dist/core/failure-analyzer.d.ts +0 -19
  192. package/dist/core/failure-analyzer.d.ts.map +0 -1
  193. package/dist/core/failure-analyzer.js +0 -83
  194. package/dist/core/failure-analyzer.js.map +0 -1
  195. package/dist/core/json-utils.d.ts +0 -3
  196. package/dist/core/json-utils.d.ts.map +0 -1
  197. package/dist/core/json-utils.js +0 -46
  198. package/dist/core/json-utils.js.map +0 -1
  199. package/dist/core/llm-client.d.ts +0 -22
  200. package/dist/core/llm-client.d.ts.map +0 -1
  201. package/dist/core/llm-client.js +0 -203
  202. package/dist/core/llm-client.js.map +0 -1
  203. package/dist/core/llm-telemetry.d.ts +0 -47
  204. package/dist/core/llm-telemetry.d.ts.map +0 -1
  205. package/dist/core/llm-telemetry.js +0 -117
  206. package/dist/core/llm-telemetry.js.map +0 -1
  207. package/dist/core/llm-validator.d.ts +0 -20
  208. package/dist/core/llm-validator.d.ts.map +0 -1
  209. package/dist/core/llm-validator.js +0 -231
  210. package/dist/core/llm-validator.js.map +0 -1
  211. package/dist/core/ollama-host.d.ts +0 -6
  212. package/dist/core/ollama-host.d.ts.map +0 -1
  213. package/dist/core/ollama-host.js +0 -62
  214. package/dist/core/ollama-host.js.map +0 -1
  215. package/dist/core/output-language.d.ts +0 -6
  216. package/dist/core/output-language.d.ts.map +0 -1
  217. package/dist/core/output-language.js +0 -25
  218. package/dist/core/output-language.js.map +0 -1
  219. package/dist/core/prompt-safety.d.ts +0 -4
  220. package/dist/core/prompt-safety.d.ts.map +0 -1
  221. package/dist/core/prompt-safety.js +0 -20
  222. package/dist/core/prompt-safety.js.map +0 -1
  223. package/dist/storage/vector-index.d.ts +0 -3
  224. package/dist/storage/vector-index.d.ts.map +0 -1
  225. package/dist/storage/vector-index.js +0 -13
  226. package/dist/storage/vector-index.js.map +0 -1
@@ -1,49 +1,374 @@
1
1
  #!/usr/bin/env node
2
2
  import fs from 'node:fs';
3
+ import net from 'node:net';
3
4
  import path from 'node:path';
5
+ import { createHash, randomBytes } from 'node:crypto';
6
+ import { spawn } from 'node:child_process';
4
7
  import { fileURLToPath } from 'node:url';
5
- import { getMemeshDirFromDbPath } from '../core/paths.js';
6
- import { readHostConfigFile, readTokenFile, requiredString } from './config.js';
8
+ import { canonicalAgentScopeId } from '../core/agent-scope-id.js';
9
+ import { getAgentRouterSocketPath, getMemeshDirFromDbPath, getProjectName } from '../core/paths.js';
10
+ import { assertSecureLocalHostRuntimeSupported, ensureRouterTokenFile, readHostConfigFile, readTokenFile, normalizeConfiguredRouterSocket, requiredString, } from './config.js';
7
11
  import { connectRouterHost } from './router-client.js';
8
12
  const MAX_HOOK_INPUT_BYTES = 64 * 1024;
9
13
  const CODEX_THREAD_ID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
14
+ const CONTROL_TIMEOUT_MS = 2_000;
15
+ const SESSION_END_GRACE_MS = 45_000;
16
+ function lifecycleDirectory(dataDir) {
17
+ const directory = path.join(dataDir, 'runtime', 'codex-session');
18
+ fs.mkdirSync(directory, { recursive: true, mode: 0o700 });
19
+ const stat = fs.lstatSync(directory);
20
+ if (!stat.isDirectory() || stat.isSymbolicLink())
21
+ throw new Error('Codex companion lifecycle directory must be a real private directory.');
22
+ fs.chmodSync(directory, 0o700);
23
+ return directory;
24
+ }
25
+ export function codexCompanionStatePath(dataDir, threadId) {
26
+ return path.join(lifecycleDirectory(dataDir), `${threadId}.json`);
27
+ }
28
+ export function codexCompanionControlSocketPath(dataDir, threadId) {
29
+ const digest = createHash('sha256').update(threadId).digest('hex').slice(0, 8);
30
+ return path.join(dataDir, `c-${digest}.sock`);
31
+ }
32
+ function readCompanionState(statePath) {
33
+ let fd;
34
+ try {
35
+ fd = fs.openSync(statePath, fs.constants.O_RDONLY | fs.constants.O_NOFOLLOW | fs.constants.O_NONBLOCK);
36
+ const stat = fs.fstatSync(fd);
37
+ if (!stat.isFile() || (stat.mode & 0o077) !== 0)
38
+ return null;
39
+ const parsed = JSON.parse(fs.readFileSync(fd, 'utf8'));
40
+ if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed))
41
+ return null;
42
+ const state = parsed;
43
+ if (state.version !== 1 || typeof state.pid !== 'number' || !Number.isSafeInteger(state.pid) || state.pid <= 1
44
+ || typeof state.thread_id !== 'string' || !CODEX_THREAD_ID.test(state.thread_id)
45
+ || typeof state.workspace !== 'string' || !path.isAbsolute(state.workspace)
46
+ || typeof state.token !== 'string' || !/^[0-9a-f]{32}$/.test(state.token)
47
+ || typeof state.control_socket !== 'string' || !path.isAbsolute(state.control_socket))
48
+ return null;
49
+ return state;
50
+ }
51
+ catch (error) {
52
+ if (['ENOENT', 'ELOOP'].includes(error.code ?? ''))
53
+ return null;
54
+ if (error instanceof SyntaxError)
55
+ return null;
56
+ throw error;
57
+ }
58
+ finally {
59
+ if (fd !== undefined)
60
+ fs.closeSync(fd);
61
+ }
62
+ }
63
+ function writeCompanionState(statePath, state) {
64
+ const temporary = `${statePath}.${process.pid}.${randomBytes(6).toString('hex')}.tmp`;
65
+ const descriptor = fs.openSync(temporary, 'wx', 0o600);
66
+ try {
67
+ fs.writeFileSync(descriptor, `${JSON.stringify(state)}\n`, 'utf8');
68
+ fs.fsyncSync(descriptor);
69
+ }
70
+ finally {
71
+ fs.closeSync(descriptor);
72
+ }
73
+ fs.renameSync(temporary, statePath);
74
+ fs.chmodSync(statePath, 0o600);
75
+ }
76
+ function writePrivateJson(file, value) {
77
+ const descriptor = fs.openSync(file, 'wx', 0o600);
78
+ try {
79
+ fs.writeFileSync(descriptor, `${JSON.stringify(value)}\n`, 'utf8');
80
+ fs.fsyncSync(descriptor);
81
+ }
82
+ finally {
83
+ fs.closeSync(descriptor);
84
+ }
85
+ }
86
+ async function launchDetachedCompanion(dataDir, session, input) {
87
+ const directory = lifecycleDirectory(dataDir);
88
+ const launchFile = path.join(directory, `launch-${process.pid}-${randomBytes(8).toString('hex')}.json`);
89
+ writePrivateJson(launchFile, input);
90
+ let child = null;
91
+ try {
92
+ child = spawn(process.execPath, [fileURLToPath(import.meta.url), '--companion', launchFile], {
93
+ detached: true,
94
+ stdio: 'ignore',
95
+ env: process.env,
96
+ });
97
+ if (!Number.isSafeInteger(child.pid))
98
+ throw new Error('Detached Codex companion did not receive a process identity.');
99
+ child.unref();
100
+ const statePath = codexCompanionStatePath(dataDir, session.threadId);
101
+ const deadline = Date.now() + CONTROL_TIMEOUT_MS;
102
+ while (Date.now() < deadline) {
103
+ if (readCompanionState(statePath)?.pid === child.pid)
104
+ return;
105
+ await new Promise(resolve => setTimeout(resolve, 25));
106
+ }
107
+ throw new Error('Detached Codex companion did not publish its lifecycle state before the hook timeout.');
108
+ }
109
+ catch (error) {
110
+ child?.kill('SIGTERM');
111
+ try {
112
+ fs.unlinkSync(launchFile);
113
+ }
114
+ catch (unlinkError) {
115
+ if (unlinkError.code !== 'ENOENT')
116
+ throw unlinkError;
117
+ }
118
+ throw error;
119
+ }
120
+ }
121
+ function readDetachedLaunchInput(dataDir, launchFile) {
122
+ const directory = lifecycleDirectory(dataDir);
123
+ const resolved = fs.realpathSync(launchFile);
124
+ if (path.dirname(resolved) !== fs.realpathSync(directory)) {
125
+ throw new Error('Codex companion launch input resolved outside its private lifecycle directory.');
126
+ }
127
+ const fd = fs.openSync(launchFile, fs.constants.O_RDONLY | fs.constants.O_NOFOLLOW | fs.constants.O_NONBLOCK);
128
+ try {
129
+ const stat = fs.fstatSync(fd);
130
+ if (!stat.isFile() || (stat.mode & 0o077) !== 0
131
+ || (typeof process.getuid === 'function' && stat.uid !== process.getuid())) {
132
+ throw new Error('Codex companion launch input must be an owner-private regular file.');
133
+ }
134
+ try {
135
+ const parsed = JSON.parse(fs.readFileSync(fd, 'utf8'));
136
+ if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
137
+ throw new Error('Codex companion launch input must be an object.');
138
+ }
139
+ return parsed;
140
+ }
141
+ finally {
142
+ fs.unlinkSync(launchFile);
143
+ }
144
+ }
145
+ finally {
146
+ fs.closeSync(fd);
147
+ }
148
+ }
149
+ function removeOwnState(statePath, token) {
150
+ const state = readCompanionState(statePath);
151
+ if (state?.token === token)
152
+ fs.unlinkSync(statePath);
153
+ }
154
+ function pidIsGone(pid) {
155
+ try {
156
+ process.kill(pid, 0);
157
+ return false;
158
+ }
159
+ catch (error) {
160
+ return error.code === 'ESRCH';
161
+ }
162
+ }
163
+ function removeStaleState(statePath, state) {
164
+ if (!pidIsGone(state.pid))
165
+ return;
166
+ removeOwnState(statePath, state.token);
167
+ try {
168
+ const stat = fs.lstatSync(state.control_socket);
169
+ if (stat.isSocket())
170
+ fs.unlinkSync(state.control_socket);
171
+ }
172
+ catch (error) {
173
+ if (error.code !== 'ENOENT')
174
+ throw error;
175
+ }
176
+ }
177
+ async function requestExactCompanionControl(state, action) {
178
+ return new Promise((resolve) => {
179
+ const socket = net.createConnection(state.control_socket);
180
+ let response = '';
181
+ let settled = false;
182
+ const finish = (value) => {
183
+ if (settled)
184
+ return;
185
+ settled = true;
186
+ socket.destroy();
187
+ resolve(value);
188
+ };
189
+ socket.setTimeout(CONTROL_TIMEOUT_MS, () => finish(false));
190
+ socket.once('error', () => finish(false));
191
+ socket.on('data', (chunk) => { response += chunk.toString(); });
192
+ socket.once('close', () => finish(response.trim() === 'terminated'));
193
+ socket.once('connect', () => socket.end(`${JSON.stringify({ action, token: state.token })}\n`));
194
+ });
195
+ }
196
+ async function terminatePriorExactCompanion(dataDir, session) {
197
+ const statePath = codexCompanionStatePath(dataDir, session.threadId);
198
+ const state = readCompanionState(statePath);
199
+ if (!state) {
200
+ if (fs.existsSync(statePath))
201
+ throw new Error('Codex companion lifecycle state is malformed; refusing to replace it.');
202
+ return;
203
+ }
204
+ if (state.thread_id !== session.threadId || state.workspace !== session.workspace) {
205
+ throw new Error('Codex companion lifecycle state belongs to another exact session; refusing cross-thread termination.');
206
+ }
207
+ if (!await requestExactCompanionControl(state, 'terminate')) {
208
+ removeStaleState(statePath, state);
209
+ if (fs.existsSync(statePath)) {
210
+ throw new Error('Prior exact Codex companion did not prove its identity over its control socket; refusing PID-based termination.');
211
+ }
212
+ return;
213
+ }
214
+ const deadline = Date.now() + CONTROL_TIMEOUT_MS;
215
+ while (fs.existsSync(statePath) && Date.now() < deadline) {
216
+ await new Promise(resolve => setTimeout(resolve, 25));
217
+ }
218
+ if (fs.existsSync(statePath))
219
+ throw new Error('Prior exact Codex companion acknowledged termination but did not remove its lifecycle state.');
220
+ }
221
+ export async function supersedeCodexSessionCompanion(dataDir, hookInput, environment, realpath = fs.realpathSync) {
222
+ const session = validateCodexSessionStart(hookInput, environment, realpath);
223
+ if (!session)
224
+ return false;
225
+ await terminatePriorExactCompanion(dataDir, session);
226
+ return true;
227
+ }
228
+ function createCompanionControlServer(socketPath, token, control) {
229
+ return new Promise((resolve, reject) => {
230
+ const server = net.createServer((socket) => {
231
+ let input = '';
232
+ socket.setEncoding('utf8');
233
+ socket.on('data', (chunk) => { input += chunk; });
234
+ socket.once('end', () => {
235
+ try {
236
+ const message = JSON.parse(input.trim());
237
+ const record = message;
238
+ if ((record.action !== 'terminate' && record.action !== 'retire') || record.token !== token) {
239
+ socket.end('rejected\n');
240
+ return;
241
+ }
242
+ socket.end('terminated\n');
243
+ queueMicrotask(() => control(record.action));
244
+ }
245
+ catch {
246
+ socket.end('rejected\n');
247
+ }
248
+ });
249
+ });
250
+ server.once('error', reject);
251
+ server.listen(socketPath, () => resolve(server));
252
+ });
253
+ }
10
254
  export async function startCodexSessionCompanion(config, hookInput, environment, dependencies = {}) {
11
- if (hookInput.hook_event_name !== undefined && hookInput.hook_event_name !== 'SessionStart')
12
- return null;
13
- if (hookInput.source === 'compact')
14
- return null;
15
- if (typeof environment.PLUGIN_ROOT !== 'string' || environment.PLUGIN_ROOT.length === 0)
16
- return null;
17
- const threadId = hookInput.session_id;
18
- if (typeof threadId !== 'string' || !CODEX_THREAD_ID.test(threadId))
19
- return null;
20
255
  const realpath = dependencies.realpath ?? fs.realpathSync;
21
- const workspace = realpath(requiredAbsolutePath(config.workspace, 'workspace'));
22
- const cwd = realpath(requiredAbsolutePath(hookInput.cwd, 'cwd'));
23
- if (workspace !== cwd)
256
+ const session = validateCodexSessionStart(hookInput, environment, realpath);
257
+ if (!session)
24
258
  return null;
25
- return (dependencies.connect ?? connectRouterHost)({
26
- socket_path: requiredString(config.router_socket, 'router_socket'),
27
- auth_token: readTokenFile(config.token_file),
259
+ return connectCodexSessionCompanion(config, session, realpath, dependencies.connect ?? connectRouterHost);
260
+ }
261
+ function connectCodexSessionCompanion(config, session, realpath, connect) {
262
+ const selected = config === undefined
263
+ ? automaticCodexSessionConfig(session)
264
+ : configuredCodexSessionConfig(config, session, realpath);
265
+ return connect({
266
+ socket_path: selected.router_socket,
267
+ auth_token: selected.auth_token,
28
268
  identity: {
29
- project: requiredString(config.project, 'project'),
30
- principal_id: requiredString(config.principal_id, 'principal_id'),
31
- session_instance_id: threadId,
269
+ project: selected.project,
270
+ principal_id: selected.principal_id,
271
+ session_instance_id: session.threadId,
32
272
  adapter_kind: 'codex-cli-queue',
33
- ...(config.model == null ? {} : { model: requiredString(config.model, 'model') }),
34
- ...(config.work_summary == null ? {} : { work_summary: requiredString(config.work_summary, 'work_summary') }),
273
+ ...(selected.model === undefined ? {} : { model: selected.model }),
274
+ ...(selected.work_summary === undefined ? {} : { work_summary: selected.work_summary }),
35
275
  },
36
276
  async deliver() {
37
277
  throw new Error('Codex CLI queue delivery is owned by the router adapter.');
38
278
  },
39
279
  });
40
280
  }
281
+ function validateCodexSessionStart(hookInput, environment, realpath) {
282
+ if (hookInput.hook_event_name !== 'SessionStart')
283
+ return null;
284
+ if (hookInput.source !== 'startup' && hookInput.source !== 'resume')
285
+ return null;
286
+ if (typeof environment.PLUGIN_ROOT !== 'string' || environment.PLUGIN_ROOT.length === 0)
287
+ return null;
288
+ const threadId = hookInput.session_id;
289
+ if (typeof threadId !== 'string' || !CODEX_THREAD_ID.test(threadId))
290
+ return null;
291
+ return {
292
+ threadId,
293
+ workspace: requiredExistingDirectory(hookInput.cwd, 'cwd', realpath),
294
+ };
295
+ }
296
+ function validateCodexSessionEnd(hookInput, environment, realpath) {
297
+ if (hookInput.hook_event_name !== 'SessionEnd')
298
+ return null;
299
+ if (typeof environment.PLUGIN_ROOT !== 'string' || environment.PLUGIN_ROOT.length === 0)
300
+ return null;
301
+ const threadId = hookInput.session_id;
302
+ if (typeof threadId !== 'string' || !CODEX_THREAD_ID.test(threadId))
303
+ return null;
304
+ return { threadId, workspace: requiredExistingDirectory(hookInput.cwd, 'cwd', realpath) };
305
+ }
306
+ function configuredCodexSessionConfig(config, session, realpath) {
307
+ const configuredWorkspace = resolveConfiguredWorkspace(config.workspace, realpath);
308
+ if (configuredWorkspace === null || configuredWorkspace !== session.workspace) {
309
+ return automaticCodexSessionConfig(session);
310
+ }
311
+ const resolved = {
312
+ router_socket: normalizeConfiguredRouterSocket(config.router_socket),
313
+ auth_token: readTokenFile(config.token_file),
314
+ project: requiredString(config.project, 'project'),
315
+ principal_id: requiredString(config.principal_id, 'principal_id'),
316
+ ...(config.model == null ? {} : { model: requiredString(config.model, 'model') }),
317
+ ...(config.work_summary == null ? {} : { work_summary: requiredString(config.work_summary, 'work_summary') }),
318
+ };
319
+ return resolved;
320
+ }
321
+ function resolveConfiguredWorkspace(value, realpath) {
322
+ const workspace = requiredAbsolutePath(value, 'workspace');
323
+ try {
324
+ const resolved = realpath(workspace);
325
+ if (!fs.statSync(resolved).isDirectory())
326
+ throw new Error('workspace must be a directory.');
327
+ return resolved;
328
+ }
329
+ catch (error) {
330
+ if (error.code === 'ENOENT')
331
+ return null;
332
+ throw error;
333
+ }
334
+ }
335
+ function automaticCodexSessionConfig(session) {
336
+ assertSecureLocalHostRuntimeSupported();
337
+ const dataDir = getMemeshDirFromDbPath();
338
+ ensureOwnerPrivateDataDirectory(dataDir);
339
+ return {
340
+ router_socket: getAgentRouterSocketPath(),
341
+ auth_token: ensureRouterTokenFile(path.join(dataDir, 'agent-router.token')),
342
+ project: canonicalAgentScopeId(getProjectName(session.workspace)),
343
+ principal_id: `codex-thread-${session.threadId}`,
344
+ };
345
+ }
346
+ function ensureOwnerPrivateDataDirectory(dataDir) {
347
+ fs.mkdirSync(dataDir, { recursive: true, mode: 0o700 });
348
+ const stat = fs.lstatSync(dataDir);
349
+ if (!stat.isDirectory() || stat.isSymbolicLink()) {
350
+ throw new Error('The MeMesh data directory must be a real owner-private directory.');
351
+ }
352
+ if (typeof process.getuid === 'function' && stat.uid !== process.getuid()) {
353
+ throw new Error('The MeMesh data directory must be owned by the current user.');
354
+ }
355
+ fs.chmodSync(dataDir, 0o700);
356
+ if ((fs.lstatSync(dataDir).mode & 0o077) !== 0) {
357
+ throw new Error('The MeMesh data directory must be owner-private.');
358
+ }
359
+ }
41
360
  function requiredAbsolutePath(value, field) {
42
361
  const result = requiredString(value, field);
43
362
  if (!path.isAbsolute(result))
44
363
  throw new Error(`${field} must be an absolute path.`);
45
364
  return result;
46
365
  }
366
+ function requiredExistingDirectory(value, field, realpath) {
367
+ const resolved = realpath(requiredAbsolutePath(value, field));
368
+ if (!fs.statSync(resolved).isDirectory())
369
+ throw new Error(`${field} must be a directory.`);
370
+ return resolved;
371
+ }
47
372
  async function readHookInput() {
48
373
  let input = '';
49
374
  process.stdin.setEncoding('utf8');
@@ -59,24 +384,144 @@ async function readHookInput() {
59
384
  }
60
385
  return value;
61
386
  }
62
- async function main() {
63
- const configPath = path.join(getMemeshDirFromDbPath(), 'hosts', 'codex-session.json');
64
- if (!fs.existsSync(configPath))
387
+ async function endExactCodexSessionCompanion(dataDir, session) {
388
+ const statePath = codexCompanionStatePath(dataDir, session.threadId);
389
+ const state = readCompanionState(statePath);
390
+ if (!state) {
391
+ if (fs.existsSync(statePath))
392
+ throw new Error('Codex companion lifecycle state is malformed; refusing SessionEnd cleanup.');
65
393
  return;
66
- const input = await readHookInput();
67
- const connection = await startCodexSessionCompanion(readHostConfigFile(configPath), input, { PLUGIN_ROOT: process.env.PLUGIN_ROOT });
68
- if (!connection)
394
+ }
395
+ if (state.thread_id !== session.threadId || state.workspace !== session.workspace) {
396
+ throw new Error('Codex SessionEnd does not match the stored companion identity; refusing cross-thread termination.');
397
+ }
398
+ if (await requestExactCompanionControl(state, 'retire'))
399
+ return;
400
+ removeStaleState(statePath, state);
401
+ if (fs.existsSync(statePath)) {
402
+ throw new Error('Codex SessionEnd could not prove the stored companion identity; refusing PID-based termination.');
403
+ }
404
+ }
405
+ export async function endCodexSessionCompanion(dataDir, hookInput, environment, realpath = fs.realpathSync) {
406
+ const session = validateCodexSessionEnd(hookInput, environment, realpath);
407
+ if (!session)
408
+ return false;
409
+ await endExactCodexSessionCompanion(dataDir, session);
410
+ return true;
411
+ }
412
+ async function runDetachedCompanion(dataDir, input) {
413
+ const session = validateCodexSessionStart(input, { PLUGIN_ROOT: process.env.PLUGIN_ROOT }, fs.realpathSync);
414
+ if (!session)
69
415
  return;
416
+ ensureOwnerPrivateDataDirectory(dataDir);
417
+ await terminatePriorExactCompanion(dataDir, session);
418
+ const statePath = codexCompanionStatePath(dataDir, session.threadId);
419
+ const token = randomBytes(16).toString('hex');
420
+ const socketPath = codexCompanionControlSocketPath(dataDir, session.threadId);
421
+ if (fs.existsSync(socketPath))
422
+ throw new Error('Codex companion control socket already exists; refusing to replace it.');
70
423
  let closing = false;
424
+ let retirement = null;
425
+ let connection = null;
426
+ let control = null;
71
427
  const close = () => {
72
428
  if (closing)
73
429
  return;
74
430
  closing = true;
75
- void connection.close().finally(() => process.exit(0));
431
+ void (async () => {
432
+ let failed = false;
433
+ try {
434
+ await connection?.close();
435
+ }
436
+ catch {
437
+ failed = true;
438
+ }
439
+ await new Promise((resolve) => control?.close(() => resolve()) ?? resolve());
440
+ try {
441
+ const stat = fs.lstatSync(socketPath);
442
+ if (stat.isSocket())
443
+ fs.unlinkSync(socketPath);
444
+ }
445
+ catch (error) {
446
+ if (error.code !== 'ENOENT')
447
+ failed = true;
448
+ }
449
+ removeOwnState(statePath, token);
450
+ process.exit(failed ? 1 : 0);
451
+ })();
452
+ };
453
+ const controlLifecycle = (action) => {
454
+ if (action === 'terminate') {
455
+ if (retirement)
456
+ clearTimeout(retirement);
457
+ close();
458
+ return;
459
+ }
460
+ if (retirement || closing)
461
+ return;
462
+ retirement = setTimeout(close, SESSION_END_GRACE_MS);
76
463
  };
464
+ try {
465
+ control = await createCompanionControlServer(socketPath, token, controlLifecycle);
466
+ connection = await connectCodexSessionCompanion(readCodexSessionConfigIfPresent(path.join(dataDir, 'hosts', 'codex-session.json')), session, fs.realpathSync, connectRouterHost);
467
+ writeCompanionState(statePath, {
468
+ version: 1,
469
+ pid: process.pid,
470
+ thread_id: session.threadId,
471
+ workspace: session.workspace,
472
+ token,
473
+ control_socket: socketPath,
474
+ });
475
+ }
476
+ catch (error) {
477
+ await connection?.close();
478
+ await new Promise((resolve) => control?.close(() => resolve()) ?? resolve());
479
+ try {
480
+ fs.unlinkSync(socketPath);
481
+ }
482
+ catch (unlinkError) {
483
+ if (unlinkError.code !== 'ENOENT')
484
+ throw unlinkError;
485
+ }
486
+ removeOwnState(statePath, token);
487
+ throw error;
488
+ }
77
489
  process.once('SIGINT', close);
78
490
  process.once('SIGTERM', close);
79
491
  }
492
+ async function main() {
493
+ const dataDir = getMemeshDirFromDbPath();
494
+ if (process.argv[2] === '--companion') {
495
+ const launchFile = process.argv[3];
496
+ if (typeof launchFile !== 'string')
497
+ throw new Error('Codex companion launch input is required.');
498
+ await runDetachedCompanion(dataDir, readDetachedLaunchInput(dataDir, launchFile));
499
+ return;
500
+ }
501
+ const input = await readHookInput();
502
+ const ending = validateCodexSessionEnd(input, { PLUGIN_ROOT: process.env.PLUGIN_ROOT }, fs.realpathSync);
503
+ if (ending) {
504
+ ensureOwnerPrivateDataDirectory(dataDir);
505
+ await endExactCodexSessionCompanion(dataDir, ending);
506
+ return;
507
+ }
508
+ const session = validateCodexSessionStart(input, { PLUGIN_ROOT: process.env.PLUGIN_ROOT }, fs.realpathSync);
509
+ if (!session)
510
+ return;
511
+ ensureOwnerPrivateDataDirectory(dataDir);
512
+ await launchDetachedCompanion(dataDir, session, input);
513
+ }
514
+ function readCodexSessionConfigIfPresent(configPath) {
515
+ try {
516
+ fs.lstatSync(configPath);
517
+ }
518
+ catch (error) {
519
+ if (error.code === 'ENOENT')
520
+ return undefined;
521
+ throw error;
522
+ }
523
+ return readHostConfigFile(configPath);
524
+ }
80
525
  function isMainModule() {
81
526
  const entrypoint = process.argv[1];
82
527
  if (!entrypoint)
@@ -1 +1 @@
1
- {"version":3,"file":"codex-session.js","sourceRoot":"","sources":["../../src/host-runtime/codex-session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codex-session.js","sourceRoot":"","sources":["../../src/host-runtime/codex-session.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../src/host-runtime/codex.ts"],"names":[],"mappings":";AAEA,OAAO,EAAS,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAKjF,OAAO,EAGL,2BAA2B,EAE3B,KAAK,4BAA4B,EACjC,KAAK,oBAAoB,EACzB,KAAK,8BAA8B,EACpC,MAAM,sCAAsC,CAAC;AAQ9C,OAAO,EAAE,iBAAiB,EAA6B,MAAM,oBAAoB,CAAC;AAKlF,KAAK,iBAAiB,GAAG,CACvB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE,YAAY,KAClB,YAAY,CAAC;AAElB,KAAK,kBAAkB,GAAG,CACxB,KAAK,EAAE,8BAA8B,EACrC,OAAO,CAAC,EAAE,4BAA4B,KACnC,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAEnC,MAAM,WAAW,sBAAuB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACrE,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;IAEtB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,cAAc,EAAE,OAAO,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,4BAA4B;IAC3C,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,cAAc,CAAC,EAAE,OAAO,2BAA2B,CAAC;IACpD,mBAAmB,CAAC,EAAE,OAAO,iBAAiB,CAAC;IAC/C,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAChD;AAqBD,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,sBAAsB,EAC9B,YAAY,GAAE,4BAAiC,GAC9C,OAAO,CAAC,gBAAgB,CAAC,CAyF3B"}
1
+ {"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../src/host-runtime/codex.ts"],"names":[],"mappings":";AAEA,OAAO,EAAS,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAKjF,OAAO,EAGL,2BAA2B,EAE3B,KAAK,4BAA4B,EACjC,KAAK,oBAAoB,EACzB,KAAK,8BAA8B,EACpC,MAAM,sCAAsC,CAAC;AAS9C,OAAO,EAAE,iBAAiB,EAA6B,MAAM,oBAAoB,CAAC;AAKlF,KAAK,iBAAiB,GAAG,CACvB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE,YAAY,KAClB,YAAY,CAAC;AAElB,KAAK,kBAAkB,GAAG,CACxB,KAAK,EAAE,8BAA8B,EACrC,OAAO,CAAC,EAAE,4BAA4B,KACnC,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAEnC,MAAM,WAAW,sBAAuB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACrE,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;IAEtB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,cAAc,EAAE,OAAO,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,4BAA4B;IAC3C,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,cAAc,CAAC,EAAE,OAAO,2BAA2B,CAAC;IACpD,mBAAmB,CAAC,EAAE,OAAO,iBAAiB,CAAC;IAC/C,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAChD;AAqBD,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,sBAAsB,EAC9B,YAAY,GAAE,4BAAiC,GAC9C,OAAO,CAAC,gBAAgB,CAAC,CAyF3B"}
@@ -5,7 +5,7 @@ import fs from 'node:fs';
5
5
  import path from 'node:path';
6
6
  import { fileURLToPath } from 'node:url';
7
7
  import { CodexAppServerDisconnectedError, CodexAppServerTimeoutError, createCodexAppServerAdapter, startCodexAppServerThread, } from '../host-adapters/codex-app-server.js';
8
- import { assertSecureLocalHostRuntimeSupported, readHostConfig, readTokenFile, requiredString, } from './config.js';
8
+ import { assertSecureLocalHostRuntimeSupported, normalizeConfiguredRouterSocket, readHostConfig, readTokenFile, requiredString, } from './config.js';
9
9
  import { runHostEntry } from './entry.js';
10
10
  import { connectRouterHost } from './router-client.js';
11
11
  const DEFAULT_STARTUP_TIMEOUT_MS = 15_000;
@@ -133,7 +133,7 @@ function normalizeConfig(config) {
133
133
  if (!fs.statSync(workspace).isDirectory())
134
134
  throw new Error('workspace must be an existing directory.');
135
135
  return {
136
- routerSocket: requiredString(config.router_socket, 'router_socket'),
136
+ routerSocket: normalizeConfiguredRouterSocket(config.router_socket),
137
137
  tokenFile: config.token_file,
138
138
  project: requiredString(config.project, 'project'),
139
139
  principalId: requiredString(config.principal_id, 'principal_id'),