common-memory-core 0.2.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 (284) hide show
  1. package/.env.sample +3 -0
  2. package/CHANGELOG.md +39 -0
  3. package/LICENSE +21 -0
  4. package/README.md +120 -0
  5. package/SECURITY.md +48 -0
  6. package/dist/cli/codex/transcript-0.153.4.d.ts +20 -0
  7. package/dist/cli/codex/transcript-0.153.4.d.ts.map +1 -0
  8. package/dist/cli/codex/transcript-0.153.4.js +78 -0
  9. package/dist/cli/codex/transcript-0.153.4.js.map +1 -0
  10. package/dist/cli/codex-config.d.ts +2 -0
  11. package/dist/cli/codex-config.d.ts.map +1 -0
  12. package/dist/cli/codex-config.js +5 -0
  13. package/dist/cli/codex-config.js.map +1 -0
  14. package/dist/cli/codex-hook.d.ts +18 -0
  15. package/dist/cli/codex-hook.d.ts.map +1 -0
  16. package/dist/cli/codex-hook.js +140 -0
  17. package/dist/cli/codex-hook.js.map +1 -0
  18. package/dist/cli/codex-session.d.ts +3 -0
  19. package/dist/cli/codex-session.d.ts.map +1 -0
  20. package/dist/cli/codex-session.js +3 -0
  21. package/dist/cli/codex-session.js.map +1 -0
  22. package/dist/cli/flush-command.d.ts +6 -0
  23. package/dist/cli/flush-command.d.ts.map +1 -0
  24. package/dist/cli/flush-command.js +30 -0
  25. package/dist/cli/flush-command.js.map +1 -0
  26. package/dist/cli/host-launch.d.ts +28 -0
  27. package/dist/cli/host-launch.d.ts.map +1 -0
  28. package/dist/cli/host-launch.js +16 -0
  29. package/dist/cli/host-launch.js.map +1 -0
  30. package/dist/cli/host-process.d.ts +3 -0
  31. package/dist/cli/host-process.d.ts.map +1 -0
  32. package/dist/cli/host-process.js +35 -0
  33. package/dist/cli/host-process.js.map +1 -0
  34. package/dist/cli/host-session.d.ts +22 -0
  35. package/dist/cli/host-session.d.ts.map +1 -0
  36. package/dist/cli/host-session.js +204 -0
  37. package/dist/cli/host-session.js.map +1 -0
  38. package/dist/cli/import-command.d.ts +20 -0
  39. package/dist/cli/import-command.d.ts.map +1 -0
  40. package/dist/cli/import-command.js +98 -0
  41. package/dist/cli/import-command.js.map +1 -0
  42. package/dist/cli/interactive-process.d.ts +3 -0
  43. package/dist/cli/interactive-process.d.ts.map +1 -0
  44. package/dist/cli/interactive-process.js +15 -0
  45. package/dist/cli/interactive-process.js.map +1 -0
  46. package/dist/cli/main.d.ts +3 -0
  47. package/dist/cli/main.d.ts.map +1 -0
  48. package/dist/cli/main.js +151 -0
  49. package/dist/cli/main.js.map +1 -0
  50. package/dist/cli/mcp-config.d.ts +16 -0
  51. package/dist/cli/mcp-config.d.ts.map +1 -0
  52. package/dist/cli/mcp-config.js +108 -0
  53. package/dist/cli/mcp-config.js.map +1 -0
  54. package/dist/cli/network-test.d.ts +4 -0
  55. package/dist/cli/network-test.d.ts.map +1 -0
  56. package/dist/cli/network-test.js +28 -0
  57. package/dist/cli/network-test.js.map +1 -0
  58. package/dist/cli/operations.d.ts +26 -0
  59. package/dist/cli/operations.d.ts.map +1 -0
  60. package/dist/cli/operations.js +55 -0
  61. package/dist/cli/operations.js.map +1 -0
  62. package/dist/cli/session-drain.d.ts +3 -0
  63. package/dist/cli/session-drain.d.ts.map +1 -0
  64. package/dist/cli/session-drain.js +34 -0
  65. package/dist/cli/session-drain.js.map +1 -0
  66. package/dist/cli/storage-paths.d.ts +4 -0
  67. package/dist/cli/storage-paths.d.ts.map +1 -0
  68. package/dist/cli/storage-paths.js +15 -0
  69. package/dist/cli/storage-paths.js.map +1 -0
  70. package/dist/cli/tui-integrations.d.ts +4 -0
  71. package/dist/cli/tui-integrations.d.ts.map +1 -0
  72. package/dist/cli/tui-integrations.js +143 -0
  73. package/dist/cli/tui-integrations.js.map +1 -0
  74. package/dist/cli/tui-prompts.d.ts +22 -0
  75. package/dist/cli/tui-prompts.d.ts.map +1 -0
  76. package/dist/cli/tui-prompts.js +64 -0
  77. package/dist/cli/tui-prompts.js.map +1 -0
  78. package/dist/cli/tui-settings.d.ts +21 -0
  79. package/dist/cli/tui-settings.d.ts.map +1 -0
  80. package/dist/cli/tui-settings.js +198 -0
  81. package/dist/cli/tui-settings.js.map +1 -0
  82. package/dist/cli/tui.d.ts +4 -0
  83. package/dist/cli/tui.d.ts.map +1 -0
  84. package/dist/cli/tui.js +292 -0
  85. package/dist/cli/tui.js.map +1 -0
  86. package/dist/cli/work-config.d.ts +24 -0
  87. package/dist/cli/work-config.d.ts.map +1 -0
  88. package/dist/cli/work-config.js +147 -0
  89. package/dist/cli/work-config.js.map +1 -0
  90. package/dist/config/config.d.ts +41 -0
  91. package/dist/config/config.d.ts.map +1 -0
  92. package/dist/config/config.js +193 -0
  93. package/dist/config/config.js.map +1 -0
  94. package/dist/config/private-env.d.ts +8 -0
  95. package/dist/config/private-env.d.ts.map +1 -0
  96. package/dist/config/private-env.js +38 -0
  97. package/dist/config/private-env.js.map +1 -0
  98. package/dist/config/runtime.d.ts +32 -0
  99. package/dist/config/runtime.d.ts.map +1 -0
  100. package/dist/config/runtime.js +85 -0
  101. package/dist/config/runtime.js.map +1 -0
  102. package/dist/core/contracts/errors.d.ts +10 -0
  103. package/dist/core/contracts/errors.d.ts.map +1 -0
  104. package/dist/core/contracts/errors.js +23 -0
  105. package/dist/core/contracts/errors.js.map +1 -0
  106. package/dist/core/safety/external-preflight.d.ts +7 -0
  107. package/dist/core/safety/external-preflight.d.ts.map +1 -0
  108. package/dist/core/safety/external-preflight.js +47 -0
  109. package/dist/core/safety/external-preflight.js.map +1 -0
  110. package/dist/core/safety/redaction.d.ts +2 -0
  111. package/dist/core/safety/redaction.d.ts.map +1 -0
  112. package/dist/core/safety/redaction.js +4 -0
  113. package/dist/core/safety/redaction.js.map +1 -0
  114. package/dist/core/safety/rules.d.ts +6 -0
  115. package/dist/core/safety/rules.d.ts.map +1 -0
  116. package/dist/core/safety/rules.js +14 -0
  117. package/dist/core/safety/rules.js.map +1 -0
  118. package/dist/core/safety/scanner.d.ts +11 -0
  119. package/dist/core/safety/scanner.d.ts.map +1 -0
  120. package/dist/core/safety/scanner.js +18 -0
  121. package/dist/core/safety/scanner.js.map +1 -0
  122. package/dist/core/transaction/fsync.d.ts +6 -0
  123. package/dist/core/transaction/fsync.d.ts.map +1 -0
  124. package/dist/core/transaction/fsync.js +41 -0
  125. package/dist/core/transaction/fsync.js.map +1 -0
  126. package/dist/index.d.ts +16 -0
  127. package/dist/index.d.ts.map +1 -0
  128. package/dist/index.js +13 -0
  129. package/dist/index.js.map +1 -0
  130. package/dist/mcp/ingress.d.ts +61 -0
  131. package/dist/mcp/ingress.d.ts.map +1 -0
  132. package/dist/mcp/ingress.js +134 -0
  133. package/dist/mcp/ingress.js.map +1 -0
  134. package/dist/mcp/server.d.ts +4 -0
  135. package/dist/mcp/server.d.ts.map +1 -0
  136. package/dist/mcp/server.js +92 -0
  137. package/dist/mcp/server.js.map +1 -0
  138. package/dist/mcp/stdio.d.ts +5 -0
  139. package/dist/mcp/stdio.d.ts.map +1 -0
  140. package/dist/mcp/stdio.js +115 -0
  141. package/dist/mcp/stdio.js.map +1 -0
  142. package/dist/memory-manager/contracts/diagnostic.d.ts +14 -0
  143. package/dist/memory-manager/contracts/diagnostic.d.ts.map +1 -0
  144. package/dist/memory-manager/contracts/diagnostic.js +17 -0
  145. package/dist/memory-manager/contracts/diagnostic.js.map +1 -0
  146. package/dist/memory-manager/contracts/disclosure.d.ts +12 -0
  147. package/dist/memory-manager/contracts/disclosure.d.ts.map +1 -0
  148. package/dist/memory-manager/contracts/disclosure.js +8 -0
  149. package/dist/memory-manager/contracts/disclosure.js.map +1 -0
  150. package/dist/memory-manager/contracts/errors.d.ts +15 -0
  151. package/dist/memory-manager/contracts/errors.d.ts.map +1 -0
  152. package/dist/memory-manager/contracts/errors.js +25 -0
  153. package/dist/memory-manager/contracts/errors.js.map +1 -0
  154. package/dist/memory-manager/contracts/model-port.d.ts +38 -0
  155. package/dist/memory-manager/contracts/model-port.d.ts.map +1 -0
  156. package/dist/memory-manager/contracts/model-port.js +2 -0
  157. package/dist/memory-manager/contracts/model-port.js.map +1 -0
  158. package/dist/memory-manager/network/client.d.ts +13 -0
  159. package/dist/memory-manager/network/client.d.ts.map +1 -0
  160. package/dist/memory-manager/network/client.js +122 -0
  161. package/dist/memory-manager/network/client.js.map +1 -0
  162. package/dist/memory-manager/network/route.d.ts +31 -0
  163. package/dist/memory-manager/network/route.d.ts.map +1 -0
  164. package/dist/memory-manager/network/route.js +148 -0
  165. package/dist/memory-manager/network/route.js.map +1 -0
  166. package/dist/memory-manager/openai/abort.d.ts +4 -0
  167. package/dist/memory-manager/openai/abort.d.ts.map +1 -0
  168. package/dist/memory-manager/openai/abort.js +19 -0
  169. package/dist/memory-manager/openai/abort.js.map +1 -0
  170. package/dist/memory-manager/openai/bounded-body.d.ts +2 -0
  171. package/dist/memory-manager/openai/bounded-body.d.ts.map +1 -0
  172. package/dist/memory-manager/openai/bounded-body.js +49 -0
  173. package/dist/memory-manager/openai/bounded-body.js.map +1 -0
  174. package/dist/memory-manager/openai/openai-chat-adapter.d.ts +16 -0
  175. package/dist/memory-manager/openai/openai-chat-adapter.d.ts.map +1 -0
  176. package/dist/memory-manager/openai/openai-chat-adapter.js +51 -0
  177. package/dist/memory-manager/openai/openai-chat-adapter.js.map +1 -0
  178. package/dist/memory-manager/openai/openai-responses-adapter.d.ts +15 -0
  179. package/dist/memory-manager/openai/openai-responses-adapter.d.ts.map +1 -0
  180. package/dist/memory-manager/openai/openai-responses-adapter.js +14 -0
  181. package/dist/memory-manager/openai/openai-responses-adapter.js.map +1 -0
  182. package/dist/memory-manager/openai/options.d.ts +14 -0
  183. package/dist/memory-manager/openai/options.d.ts.map +1 -0
  184. package/dist/memory-manager/openai/options.js +29 -0
  185. package/dist/memory-manager/openai/options.js.map +1 -0
  186. package/dist/memory-manager/openai/remote-http.d.ts +33 -0
  187. package/dist/memory-manager/openai/remote-http.d.ts.map +1 -0
  188. package/dist/memory-manager/openai/remote-http.js +207 -0
  189. package/dist/memory-manager/openai/remote-http.js.map +1 -0
  190. package/dist/memory-manager/openai/response-decoder.d.ts +3 -0
  191. package/dist/memory-manager/openai/response-decoder.d.ts.map +1 -0
  192. package/dist/memory-manager/openai/response-decoder.js +57 -0
  193. package/dist/memory-manager/openai/response-decoder.js.map +1 -0
  194. package/dist/memory-manager/openai/retry.d.ts +8 -0
  195. package/dist/memory-manager/openai/retry.d.ts.map +1 -0
  196. package/dist/memory-manager/openai/retry.js +18 -0
  197. package/dist/memory-manager/openai/retry.js.map +1 -0
  198. package/dist/pi-extension/extraction-runtime.d.ts +51 -0
  199. package/dist/pi-extension/extraction-runtime.d.ts.map +1 -0
  200. package/dist/pi-extension/extraction-runtime.js +87 -0
  201. package/dist/pi-extension/extraction-runtime.js.map +1 -0
  202. package/dist/pi-extension/index.d.ts +19 -0
  203. package/dist/pi-extension/index.d.ts.map +1 -0
  204. package/dist/pi-extension/index.js +172 -0
  205. package/dist/pi-extension/index.js.map +1 -0
  206. package/dist/v2/canonical.d.ts +53 -0
  207. package/dist/v2/canonical.d.ts.map +1 -0
  208. package/dist/v2/canonical.js +321 -0
  209. package/dist/v2/canonical.js.map +1 -0
  210. package/dist/v2/contract.d.ts +34 -0
  211. package/dist/v2/contract.d.ts.map +1 -0
  212. package/dist/v2/contract.js +53 -0
  213. package/dist/v2/contract.js.map +1 -0
  214. package/dist/v2/document-import.d.ts +100 -0
  215. package/dist/v2/document-import.d.ts.map +1 -0
  216. package/dist/v2/document-import.js +259 -0
  217. package/dist/v2/document-import.js.map +1 -0
  218. package/dist/v2/errors.d.ts +6 -0
  219. package/dist/v2/errors.d.ts.map +1 -0
  220. package/dist/v2/errors.js +29 -0
  221. package/dist/v2/errors.js.map +1 -0
  222. package/dist/v2/import.d.ts +26 -0
  223. package/dist/v2/import.d.ts.map +1 -0
  224. package/dist/v2/import.js +48 -0
  225. package/dist/v2/import.js.map +1 -0
  226. package/dist/v2/lock.d.ts +3 -0
  227. package/dist/v2/lock.d.ts.map +1 -0
  228. package/dist/v2/lock.js +47 -0
  229. package/dist/v2/lock.js.map +1 -0
  230. package/dist/v2/memory-maintainer.md +38 -0
  231. package/dist/v2/read-guidance.d.ts +3 -0
  232. package/dist/v2/read-guidance.d.ts.map +1 -0
  233. package/dist/v2/read-guidance.js +3 -0
  234. package/dist/v2/read-guidance.js.map +1 -0
  235. package/dist/v2/reader.d.ts +25 -0
  236. package/dist/v2/reader.d.ts.map +1 -0
  237. package/dist/v2/reader.js +38 -0
  238. package/dist/v2/reader.js.map +1 -0
  239. package/dist/v2/registry.d.ts +14 -0
  240. package/dist/v2/registry.d.ts.map +1 -0
  241. package/dist/v2/registry.js +46 -0
  242. package/dist/v2/registry.js.map +1 -0
  243. package/dist/v2/runtime.d.ts +133 -0
  244. package/dist/v2/runtime.d.ts.map +1 -0
  245. package/dist/v2/runtime.js +326 -0
  246. package/dist/v2/runtime.js.map +1 -0
  247. package/dist/v2/session-drain.d.ts +14 -0
  248. package/dist/v2/session-drain.d.ts.map +1 -0
  249. package/dist/v2/session-drain.js +16 -0
  250. package/dist/v2/session-drain.js.map +1 -0
  251. package/dist/v2/session.d.ts +54 -0
  252. package/dist/v2/session.d.ts.map +1 -0
  253. package/dist/v2/session.js +158 -0
  254. package/dist/v2/session.js.map +1 -0
  255. package/dist/v2/writer.d.ts +40 -0
  256. package/dist/v2/writer.d.ts.map +1 -0
  257. package/dist/v2/writer.js +327 -0
  258. package/dist/v2/writer.js.map +1 -0
  259. package/docs/00-index.md +19 -0
  260. package/docs/03-target-architecture.md +49 -0
  261. package/docs/init-v0.1-closeout.md +152 -0
  262. package/docs/init-v0.1-design.md +237 -0
  263. package/docs/init-v0.1-verification.md +303 -0
  264. package/docs/outbound-network-design.md +100 -0
  265. package/docs/outbound-network-verification.json +300 -0
  266. package/docs/provider-verification.md +94 -0
  267. package/docs/releasing.md +138 -0
  268. package/docs/session-integration.md +134 -0
  269. package/docs/tui-workbench.md +173 -0
  270. package/docs/usage.md +815 -0
  271. package/docs/v2-ablation-results.json +12035 -0
  272. package/docs/v2-ablation.md +117 -0
  273. package/docs/v2-evaluation-repeat-results.json +7 -0
  274. package/docs/v2-evaluation-scripted-results.json +67 -0
  275. package/docs/v2-evaluation.md +35 -0
  276. package/docs/v2-optimization-plan.md +23 -0
  277. package/docs/v2-performance-baseline-runtime.js.txt +231 -0
  278. package/docs/v2-performance-baseline.json +338 -0
  279. package/docs/v2-performance-behavior-equivalence.json +17 -0
  280. package/docs/v2-performance-results.json +585 -0
  281. package/docs/v2-performance.md +88 -0
  282. package/docs/v2-replacement-test-map.md +14 -0
  283. package/docs/v2-verification.md +49 -0
  284. package/package.json +87 -0
@@ -0,0 +1,151 @@
1
+ #!/usr/bin/env node
2
+ import { readFileSync } from 'node:fs';
3
+ import { loadConfig } from "../config/config.js";
4
+ import { runFlush } from "./flush-command.js";
5
+ import { listProjects, registerProject, removeProject, retryJob, runtimeStatus, showMemory } from './operations.js';
6
+ import { printStatus, runSetupWizard, runNetworkWizard, runTui, UserCancelled } from "./tui.js";
7
+ async function main() {
8
+ const [command, ...args] = process.argv.slice(2);
9
+ if ((command === '--version' || command === '-v') && !args.length) {
10
+ console.log(JSON.parse(readFileSync(new URL('../../package.json', import.meta.url), 'utf8')).version);
11
+ return;
12
+ }
13
+ if (command === "--help" || command === "-h") {
14
+ console.log("Common Memory V2\n\ncommon-memory Interactive workbench (TTY only)\n Overview / Memory / Projects & permissions / Integrations / Maintenance / Settings\n\nScriptable commands and direct wizard shortcuts:\ncommon-memory [config|status|flush|session-drain]\ncommon-memory config --network\ncommon-memory network-test\ncommon-memory show [--workspace <absolute-path>]\ncommon-memory import <file.md> [--workspace <absolute-path>] [--author user|agent|third_party|mixed|unknown] [--label <text>] [--no-wait]\ncommon-memory project register <root> <name>\ncommon-memory project list\ncommon-memory project remove <id>\ncommon-memory retry <job-id>\ncommon-memory mcp --client-id <id> [--capability relay|init|read]... [--workspace <absolute-path>]... [--global] [--accept-client-reported-user-turns]\ncommon-memory codex-hook --home <absolute-path>\ncommon-memory codex-config [--mode posix|windows-wsl --output <new-directory>] [--workspace <absolute-path>]...\ncommon-memory work-hook --home <absolute-path>\ncommon-memory work-config --mode posix|windows-wsl --output <absolute-directory> [--distro <name>] [--user <name>] [--bridge-path <Windows-path>]\ncommon-memory session-refresh --home <absolute-path> [--client codex|chatgpt-work]\ncommon-memory mcp-config [--wsl] [--distro <name>] [--user <name>] [--workspace <absolute-path>]...");
15
+ return;
16
+ }
17
+ if (command === 'work-config') {
18
+ (await import('./work-config.js')).runWorkConfig(args);
19
+ return;
20
+ }
21
+ if (command === 'work-hook') {
22
+ await (await import('./codex-hook.js')).runCodexHook(args, 'chatgpt-work');
23
+ return;
24
+ }
25
+ if (command === 'session-refresh') {
26
+ (await import('./codex-hook.js')).runSessionRefresh(args);
27
+ return;
28
+ }
29
+ if (command === "session-drain") {
30
+ await (await import("./session-drain.js")).runSessionDrain(args);
31
+ return;
32
+ }
33
+ if (command === "codex-hook") {
34
+ await (await import('./codex-hook.js')).runCodexHook(args);
35
+ return;
36
+ }
37
+ if (command === "codex-config") {
38
+ if (args.length) {
39
+ (await import('./work-config.js')).runWorkConfig(args, 'codex');
40
+ return;
41
+ }
42
+ if (!loadConfig())
43
+ throw new Error("Run common-memory config first");
44
+ process.stdout.write((await import('./codex-config.js')).renderCodexConfig());
45
+ return;
46
+ }
47
+ if (command === "mcp") {
48
+ await (await import('../mcp/stdio.js')).runMcp(args);
49
+ return;
50
+ }
51
+ if (command === "import") {
52
+ const config = loadConfig();
53
+ if (!config)
54
+ throw new Error("Run common-memory config first");
55
+ const { runImport } = await import('./import-command.js');
56
+ const { exitCode } = await runImport(config, args);
57
+ process.exitCode = exitCode;
58
+ return;
59
+ }
60
+ if (command === "mcp-config") {
61
+ const config = loadConfig();
62
+ if (!config)
63
+ throw new Error("Run common-memory config first");
64
+ const { parseMcpConfigArgs, renderMcpConfig } = await import('./mcp-config.js');
65
+ process.stdout.write(renderMcpConfig(config, parseMcpConfigArgs(args)));
66
+ return;
67
+ }
68
+ if (command === "show") {
69
+ // Same read path and authorization as MCP memory_read and the Pi extension: what consumers see.
70
+ const config = loadConfig();
71
+ if (!config)
72
+ throw new Error("Run common-memory config first");
73
+ if (args.length && !(args.length === 2 && args[0] === "--workspace"))
74
+ throw new TypeError("Unknown command or unexpected arguments; use --help");
75
+ showMemory(config, args[1]);
76
+ return;
77
+ }
78
+ if (command === "network-test" && !args.length) {
79
+ const config = loadConfig();
80
+ if (!config)
81
+ throw new Error("Run common-memory config first");
82
+ process.exitCode = await (await import("./network-test.js")).runNetworkTest(config);
83
+ return;
84
+ }
85
+ if (command === "config" && args.length === 1 && args[0] === "--network") {
86
+ await runNetworkWizard();
87
+ return;
88
+ }
89
+ if (command === undefined) {
90
+ if (!process.stdin.isTTY || !process.stdout.isTTY) {
91
+ console.log('Common Memory\n\nRun common-memory in an interactive terminal to open the workbench.\nUse common-memory --help for scriptable commands; no prompts were opened.');
92
+ return;
93
+ }
94
+ await runTui();
95
+ return;
96
+ }
97
+ if (command === "config" && !args.length) {
98
+ await runSetupWizard();
99
+ return;
100
+ }
101
+ if (command === "status" && !args.length) {
102
+ printStatus();
103
+ const config = loadConfig();
104
+ if (config) {
105
+ const status = runtimeStatus(config);
106
+ if (status)
107
+ console.log(JSON.stringify(status, null, 2));
108
+ }
109
+ return;
110
+ }
111
+ const config = loadConfig();
112
+ if (!config)
113
+ throw new Error("Run common-memory config first");
114
+ if (command === "flush" && !args.length) {
115
+ process.exitCode = await runFlush(config);
116
+ return;
117
+ }
118
+ if (command === "retry" && args.length === 1) {
119
+ retryJob(config, args[0]);
120
+ return;
121
+ }
122
+ if (command === "project") {
123
+ const [action, ...rest] = args;
124
+ if (action === "list" && !rest.length) {
125
+ console.log(JSON.stringify(listProjects(config), null, 2));
126
+ return;
127
+ }
128
+ if (action === "register" && rest.length === 2) {
129
+ console.log(JSON.stringify(registerProject(config, rest[0], rest[1]), null, 2));
130
+ console.log("Registration does not grant remote disclosure or write permission; configure project:<id> in each allowed scope list.");
131
+ return;
132
+ }
133
+ if (action === "remove" && rest.length === 1) {
134
+ console.log(removeProject(config, rest[0]) ? "Registration removed; Markdown retained" : "Project not registered");
135
+ return;
136
+ }
137
+ }
138
+ throw new TypeError("Unknown command or unexpected arguments; use --help");
139
+ }
140
+ try {
141
+ await main();
142
+ }
143
+ catch (error) {
144
+ if (error instanceof UserCancelled)
145
+ process.exitCode = 0;
146
+ else {
147
+ console.error(error instanceof Error ? error.message : "Common Memory failed");
148
+ process.exitCode = 1;
149
+ }
150
+ }
151
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { type CommonMemoryConfig } from "../config/config.js";
2
+ export interface McpConfigOptions {
3
+ wsl: boolean;
4
+ distro?: string | undefined;
5
+ user?: string | undefined;
6
+ workspaces: string[];
7
+ }
8
+ export declare function parseMcpConfigArgs(args: string[]): McpConfigOptions;
9
+ /**
10
+ * Print `config.toml` blocks for the Codex host (ChatGPT desktop init-only; Codex CLI read-only) that
11
+ * pin the exact runtime this process is using: node binary, built CLI entry, configuration directory
12
+ * and dataRoot. With `--wsl` the blocks are for a Windows host bridging into this WSL distribution
13
+ * and user through `wsl.exe`, so every host reads the one store this configuration owns.
14
+ */
15
+ export declare function renderMcpConfig(config: CommonMemoryConfig, options: McpConfigOptions, env?: NodeJS.ProcessEnv): string;
16
+ //# sourceMappingURL=mcp-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-config.d.ts","sourceRoot":"","sources":["../../src/cli/mcp-config.ts"],"names":[],"mappings":"AAKA,OAAO,EAAmB,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAG/E,MAAM,WAAW,gBAAgB;IAAG,GAAG,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE;AAEhI,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAanE;AAKD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,kBAAkB,EAAE,OAAO,EAAE,gBAAgB,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAoDnI"}
@@ -0,0 +1,108 @@
1
+ import { runtimeLaunch } from './host-launch.js';
2
+ import { realpathSync } from "node:fs";
3
+ import { userInfo } from "node:os";
4
+ import { isAbsolute, resolve } from "node:path";
5
+ import { fileURLToPath } from "node:url";
6
+ import { configDirectory } from "../config/config.js";
7
+ import { ProjectRegistry } from "../v2/registry.js";
8
+ export function parseMcpConfigArgs(args) {
9
+ const options = { wsl: false, workspaces: [] };
10
+ for (let i = 0; i < args.length; i++) {
11
+ const arg = args[i];
12
+ if (arg === "--wsl")
13
+ options.wsl = true;
14
+ else if (arg === "--distro" || arg === "--user" || arg === "--workspace") {
15
+ const value = args[++i];
16
+ if (value === undefined || value.startsWith("--"))
17
+ throw new TypeError(`${arg} requires a value`);
18
+ if (arg === "--distro")
19
+ options.distro = value;
20
+ else if (arg === "--user")
21
+ options.user = value;
22
+ else {
23
+ if (!isAbsolute(value))
24
+ throw new TypeError("--workspace must be an absolute path");
25
+ options.workspaces.push(value);
26
+ }
27
+ }
28
+ else
29
+ throw new TypeError(`Unknown mcp-config option ${arg}`);
30
+ }
31
+ return options;
32
+ }
33
+ const toml = (value) => JSON.stringify(value);
34
+ const list = (values) => `[${values.map(toml).join(", ")}]`;
35
+ /**
36
+ * Print `config.toml` blocks for the Codex host (ChatGPT desktop init-only; Codex CLI read-only) that
37
+ * pin the exact runtime this process is using: node binary, built CLI entry, configuration directory
38
+ * and dataRoot. With `--wsl` the blocks are for a Windows host bridging into this WSL distribution
39
+ * and user through `wsl.exe`, so every host reads the one store this configuration owns.
40
+ */
41
+ export function renderMcpConfig(config, options, env = process.env) {
42
+ const node = realpathSync(process.execPath);
43
+ // The entry the user actually ran (normally dist/cli/main.js), not a guessed install location.
44
+ const cli = realpathSync(process.argv[1] ?? fileURLToPath(new URL("./main.js", import.meta.url)));
45
+ const home = configDirectory(env);
46
+ const registry = new ProjectRegistry(config.dataRoot);
47
+ const workspaces = options.workspaces.map(workspace => {
48
+ let project;
49
+ try {
50
+ project = registry.resolve(workspace);
51
+ }
52
+ catch {
53
+ project = undefined;
54
+ }
55
+ if (!project)
56
+ throw new Error(`UNREGISTERED_WORKSPACE: ${workspace}`);
57
+ return { workspace: resolve(workspace), contextId: `project:${project.id}`, allowed: config.disclosure.allowedScopes.includes(`project:${project.id}`) };
58
+ });
59
+ const distro = options.distro ?? env.WSL_DISTRO_NAME;
60
+ const user = options.user ?? userInfo().username;
61
+ // The bridge embeds the Linux paths of this runtime; generated from Windows they would point at nothing.
62
+ if (options.wsl && process.platform !== "linux")
63
+ throw new Error("--wsl must run inside the WSL distribution that hosts Common Memory (Linux paths are embedded)");
64
+ if (options.wsl && !distro)
65
+ throw new Error("--wsl needs a distribution: run inside WSL or pass --distro <name>");
66
+ const launch = (clientId, capability, extra) => {
67
+ const inner = [cli, "mcp", "--client-id", clientId, "--capability", capability, "--global", ...extra];
68
+ const command = runtimeLaunch(options, env).command(inner.slice(1));
69
+ return `command = ${toml(command.command)}\nargs = ${list(command.args)}${command.env ? `\nenv = { COMMON_MEMORY_HOME = ${toml(home)} }` : ''}`;
70
+ };
71
+ const lines = [
72
+ `# Common Memory MCP configuration for the Codex host (ChatGPT desktop app, Codex CLI, IDE extension).`,
73
+ `# Generated ${new Date().toISOString()} by the runtime that owns this store; do not mix with another install.`,
74
+ `# ${options.wsl ? `WSL distribution: ${distro}; Linux user: ${user}` : `Host: ${process.platform}`}`,
75
+ `# Configuration directory (COMMON_MEMORY_HOME): ${home}`,
76
+ `# dataRoot (canonical Markdown under <dataRoot>/memory): ${config.dataRoot}`,
77
+ `# node: ${node}`,
78
+ `# CLI entry: ${cli}`,
79
+ `# Every process below shares this one configuration authority and data; none of them is a resident service.`,
80
+ ...(options.wsl ? [`# Pi is supported when it runs inside the same WSL distribution; Windows-native Pi is not covered by this configuration.`] : []),
81
+ ``,
82
+ `# Desktop session with local Codex-host MCP access (including the observed Work-local session): Init only.`,
83
+ `# The host approval setting below covers non-read-only tools; approval does not verify imported claims.`,
84
+ `# Record materials actually visible to the agent; a product/mode name does not establish memory source or coverage.`,
85
+ `# This connection does not export all ChatGPT memory. Review the destination with common-memory show.`,
86
+ `[mcp_servers.common_memory_init]`,
87
+ launch("chatgpt-desktop", "init", []),
88
+ `default_tools_approval_mode = "approve"`,
89
+ ``,
90
+ `# Codex CLI: read only. The process registers only memory_read/memory_status; enabled_tools repeats that host-side.`,
91
+ `[mcp_servers.common_memory]`,
92
+ launch("codex-cli", "read", workspaces.flatMap(w => ["--workspace", w.workspace])),
93
+ `enabled_tools = ["memory_read", "memory_status"]`,
94
+ `default_tools_approval_mode = "auto"`,
95
+ ];
96
+ for (const w of workspaces)
97
+ if (!w.allowed)
98
+ lines.push(`# NOTE: ${w.contextId} (${w.workspace}) is registered but not in disclosure.allowedScopes; it will not be readable until authorized.`);
99
+ if (!config.disclosure.allowedScopes.includes("global"))
100
+ lines.push(`# NOTE: "global" is not in disclosure.allowedScopes; both processes above have no readable/importable global context until authorized.`);
101
+ if (!config.disclosure.allowedProvenance.includes("agent_observation"))
102
+ lines.push(`# NOTE: disclosure.allowedProvenance lacks "agent_observation"; memory_init will answer INIT_DISABLED until common-memory config allows "Agent-reported understanding".`);
103
+ if (options.wsl)
104
+ lines.push(``, `# Workspace paths above are WSL paths. A Windows path (C:\\...) is not a registered project; register the WSL path instead.`);
105
+ lines.push(``, `# Keep Codex CLI from seeing the init server: ~/.codex/memory-reader.config.toml with`, `# [mcp_servers.common_memory_init]`, `# enabled = false`, `# and run: codex --profile memory-reader`);
106
+ return lines.join("\n") + "\n";
107
+ }
108
+ //# sourceMappingURL=mcp-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-config.js","sourceRoot":"","sources":["../../src/cli/mcp-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { CommonMemoryConfig } from '../config/config.js';
2
+ /** Explicit small synthetic API probe. It opens neither the durable queue nor canonical storage. */
3
+ export declare function runNetworkTest(config: CommonMemoryConfig, log?: (line: string) => void): Promise<number>;
4
+ //# sourceMappingURL=network-test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-test.d.ts","sourceRoot":"","sources":["../../src/cli/network-test.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,oGAAoG;AACpG,wBAAsB,cAAc,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAgB3H"}
@@ -0,0 +1,28 @@
1
+ import { createConfiguredMemoryModel, describeConfiguredNetwork } from '../config/runtime.js';
2
+ import { MemoryModelError } from '../memory-manager/contracts/errors.js';
3
+ /** Explicit small synthetic API probe. It opens neither the durable queue nor canonical storage. */
4
+ export async function runNetworkTest(config, log = console.log) {
5
+ let model;
6
+ const controller = new AbortController();
7
+ const cancel = () => controller.abort();
8
+ process.on('SIGINT', cancel);
9
+ process.on('SIGTERM', cancel);
10
+ try {
11
+ log(JSON.stringify({ network: describeConfiguredNetwork(config), test: 'synthetic API request; no memory writes' }));
12
+ model = createConfiguredMemoryModel(config, process.env, { retry: { maxRetries: 0 } });
13
+ const result = await model.analyze({ prompt: 'Return exactly the JSON object {"ok":true}.', projection: { probe: 'Common Memory connection test; synthetic data only' }, schema: { type: 'object', properties: { ok: { type: 'boolean', enum: [true] } }, required: ['ok'], additionalProperties: false } }, { requestId: 'network-test', deadlineMs: 60000, signal: controller.signal });
14
+ const passed = result.kind === 'output' && result.body && typeof result.body === 'object' && 'ok' in result.body && result.body.ok === true;
15
+ log(JSON.stringify({ passed: Boolean(passed), providerResponded: true, validOutput: Boolean(passed), writerCommitTested: false }));
16
+ return passed ? 0 : 1;
17
+ }
18
+ catch (error) {
19
+ log(JSON.stringify({ passed: false, providerResponded: error instanceof MemoryModelError && error.diagnostic?.httpStatus !== undefined, ...(error instanceof MemoryModelError ? { code: error.code, diagnostic: error.diagnostic } : { code: 'CONFIGURATION' }) }));
20
+ return 1;
21
+ }
22
+ finally {
23
+ process.off('SIGINT', cancel);
24
+ process.off('SIGTERM', cancel);
25
+ await model?.close();
26
+ }
27
+ }
28
+ //# sourceMappingURL=network-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-test.js","sourceRoot":"","sources":["../../src/cli/network-test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAE9F,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACzE,oGAAoG;AACpG,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAA0B,EAAE,MAA8B,OAAO,CAAC,GAAG;IACxG,IAAI,KAAiE,CAAC;IACtE,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IACxC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAC5D,IAAI,CAAC;QACH,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAC,OAAO,EAAC,yBAAyB,CAAC,MAAM,CAAC,EAAC,IAAI,EAAC,yCAAyC,EAAC,CAAC,CAAC,CAAC;QAChH,KAAK,GAAG,2BAA2B,CAAC,MAAM,EAAC,OAAO,CAAC,GAAG,EAAC,EAAC,KAAK,EAAC,EAAC,UAAU,EAAC,CAAC,EAAC,EAAC,CAAC,CAAC;QAC/E,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,EAAC,MAAM,EAAC,6CAA6C,EAAC,UAAU,EAAC,EAAC,KAAK,EAAC,oDAAoD,EAAC,EAAC,MAAM,EAAC,EAAC,IAAI,EAAC,QAAQ,EAAC,UAAU,EAAC,EAAC,EAAE,EAAC,EAAC,IAAI,EAAC,SAAS,EAAC,IAAI,EAAC,CAAC,IAAI,CAAC,EAAC,EAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,oBAAoB,EAAC,KAAK,EAAC,EAAC,EAAE,EAAC,SAAS,EAAC,cAAc,EAAC,UAAU,EAAC,KAAK,EAAC,MAAM,EAAC,UAAU,CAAC,MAAM,EAAC,CAAC,CAAC;QACxV,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC;QAC5I,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAC,MAAM,EAAC,OAAO,CAAC,MAAM,CAAC,EAAC,iBAAiB,EAAC,IAAI,EAAC,WAAW,EAAC,OAAO,CAAC,MAAM,CAAC,EAAC,kBAAkB,EAAC,KAAK,EAAC,CAAC,CAAC,CAAC;QAC1H,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAC,MAAM,EAAC,KAAK,EAAC,iBAAiB,EAAC,KAAK,YAAY,gBAAgB,IAAI,KAAK,CAAC,UAAU,EAAE,UAAU,KAAK,SAAS,EAAC,GAAG,CAAC,KAAK,YAAY,gBAAgB,CAAC,CAAC,CAAC,EAAC,IAAI,EAAC,KAAK,CAAC,IAAI,EAAC,UAAU,EAAC,KAAK,CAAC,UAAU,EAAC,CAAC,CAAC,CAAC,EAAC,IAAI,EAAC,eAAe,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC;QACtP,OAAO,CAAC,CAAC;IACX,CAAC;YAAS,CAAC;QAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAAC,MAAM,KAAK,EAAE,KAAK,EAAE,CAAC;IAAC,CAAC;AACpG,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { CommonMemoryConfig } from '../config/config.js';
2
+ /** CLI and TUI use identical scope selection. Reading never opens the queue. */
3
+ export declare function memoryView(config: CommonMemoryConfig, workspace?: string): import("../v2/reader.js").MemoryView;
4
+ export declare function showMemory(config: CommonMemoryConfig, workspace?: string, log?: (line: string) => void): void;
5
+ /** Like the existing status command, opens existing RuntimeStore only; never initializes absent storage. */
6
+ export declare function runtimeStatus(config: CommonMemoryConfig): {
7
+ sessions: {
8
+ closing: boolean;
9
+ complete: boolean;
10
+ pending: number;
11
+ failed: number;
12
+ batches: number;
13
+ id: string;
14
+ }[];
15
+ observations: {
16
+ [x: string]: string | number | null;
17
+ }[];
18
+ jobs: import("../v2/runtime.js").JobStatus[];
19
+ unbound: number;
20
+ quarantinedDeliveries: number;
21
+ } | null;
22
+ export declare function retryJob(config: CommonMemoryConfig, id: string): void;
23
+ export declare function listProjects(config: CommonMemoryConfig): import("../v2/registry.js").ProjectRegistration[];
24
+ export declare function registerProject(config: CommonMemoryConfig, root: string, name: string): import("../v2/registry.js").ProjectRegistration;
25
+ export declare function removeProject(config: CommonMemoryConfig, id: string): boolean;
26
+ //# sourceMappingURL=operations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../src/cli/operations.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAO9D,gFAAgF;AAChF,wBAAgB,UAAU,CAAC,MAAM,EAAE,kBAAkB,EAAE,SAAS,CAAC,EAAE,MAAM,wCAQxE;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,kBAAkB,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAkB,GAAG,IAAI,CAG1H;AAED,4GAA4G;AAC5G,wBAAgB,aAAa,CAAC,MAAM,EAAE,kBAAkB;;;;;;;;;;;;;;;SASvD;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,kBAAkB,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAGrE;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,kBAAkB,qDAAyD;AAChH,wBAAgB,eAAe,CAAC,MAAM,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,mDAErF;AACD,wBAAgB,aAAa,CAAC,MAAM,EAAE,kBAAkB,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAE7E"}
@@ -0,0 +1,55 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { ProjectRegistry } from '../v2/registry.js';
4
+ import { withRepositoryLock } from '../v2/lock.js';
5
+ import { RuntimeStore } from '../v2/runtime.js';
6
+ import { SessionIngress } from '../v2/session.js';
7
+ import { readAuthorizedMemory, renderMemoryView } from '../v2/reader.js';
8
+ /** CLI and TUI use identical scope selection. Reading never opens the queue. */
9
+ export function memoryView(config, workspace) {
10
+ const contexts = ['global'];
11
+ if (workspace !== undefined) {
12
+ const project = new ProjectRegistry(config.dataRoot).resolve(workspace);
13
+ if (!project)
14
+ throw new Error('Workspace is not registered');
15
+ contexts.push(`project:${project.id}`);
16
+ }
17
+ return readAuthorizedMemory({ dataRoot: config.dataRoot, contexts: contexts.filter(scope => config.disclosure.allowedScopes.includes(scope)) });
18
+ }
19
+ export function showMemory(config, workspace, log = console.log) {
20
+ log(`Memory files: ${join(config.dataRoot, 'memory')}`);
21
+ log(renderMemoryView(memoryView(config, workspace)));
22
+ }
23
+ /** Like the existing status command, opens existing RuntimeStore only; never initializes absent storage. */
24
+ export function runtimeStatus(config) {
25
+ if (!existsSync(join(config.dataRoot, 'runtime.sqlite')))
26
+ return null;
27
+ const store = new RuntimeStore(config.dataRoot);
28
+ try {
29
+ const ingress = new SessionIngress(store, config.sessionCache);
30
+ const sessions = store.db.prepare('SELECT id FROM sessions ORDER BY rowid DESC').all()
31
+ .map(row => ({ id: String(row.id), ...ingress.status(String(row.id)) }));
32
+ return { ...store.status(), sessions };
33
+ }
34
+ finally {
35
+ store.close();
36
+ }
37
+ }
38
+ export function retryJob(config, id) {
39
+ const store = new RuntimeStore(config.dataRoot);
40
+ try {
41
+ store.retry(id);
42
+ store.requestFlush();
43
+ }
44
+ finally {
45
+ store.close();
46
+ }
47
+ }
48
+ export function listProjects(config) { return new ProjectRegistry(config.dataRoot).list(); }
49
+ export function registerProject(config, root, name) {
50
+ return withRepositoryLock(config.dataRoot, () => new ProjectRegistry(config.dataRoot).register(root, name));
51
+ }
52
+ export function removeProject(config, id) {
53
+ return withRepositoryLock(config.dataRoot, () => new ProjectRegistry(config.dataRoot).remove(id));
54
+ }
55
+ //# sourceMappingURL=operations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operations.js","sourceRoot":"","sources":["../../src/cli/operations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function launchSessionDrain(home?: string): number | undefined;
2
+ export declare function runSessionDrain(args: string[]): Promise<void>;
3
+ //# sourceMappingURL=session-drain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-drain.d.ts","sourceRoot":"","sources":["../../src/cli/session-drain.ts"],"names":[],"mappings":"AAOA,wBAAgB,kBAAkB,CAAC,IAAI,SAAkB,GAAE,MAAM,GAAC,SAAS,CAK1E;AACD,wBAAsB,eAAe,CAAC,IAAI,EAAC,MAAM,EAAE,GAAE,OAAO,CAAC,IAAI,CAAC,CASjE"}
@@ -0,0 +1,34 @@
1
+ import { spawn } from 'node:child_process';
2
+ import { fileURLToPath } from 'node:url';
3
+ import { join, isAbsolute } from 'node:path';
4
+ import { loadConfig, configDirectory } from '../config/config.js';
5
+ import { createConfiguredWriter } from '../config/runtime.js';
6
+ import { drainSessions } from '../v2/session-drain.js';
7
+ import { consumeCodexInbox } from './codex-session.js';
8
+ export function launchSessionDrain(home = configDirectory()) {
9
+ const child = spawn(process.execPath, [fileURLToPath(new URL('./main.js', import.meta.url)), 'session-drain', '--home', home], { detached: true, stdio: 'ignore', env: { ...process.env, COMMON_MEMORY_HOME: home } });
10
+ child.on('error', () => process.stderr.write('[common-memory] consumer launch failed; run common-memory session-drain.\n'));
11
+ child.unref();
12
+ return child.pid;
13
+ }
14
+ export async function runSessionDrain(args) {
15
+ const home = args.length === 0 ? configDirectory() : args.length === 2 && args[0] === '--home' && isAbsolute(args[1]) ? args[1] : null;
16
+ if (!home)
17
+ throw new Error('session-drain requires --home <absolute-path>');
18
+ process.env.COMMON_MEMORY_HOME = home;
19
+ const config = loadConfig(join(home, 'config.json'));
20
+ if (!config)
21
+ throw new Error('UNCONFIGURED');
22
+ // Run sealed work between inbox admissions so completion watches do not delay maintenance.
23
+ const writer = createConfiguredWriter(config);
24
+ try {
25
+ await consumeCodexInbox(config, async () => { while ((await writer.run()).outcome !== 'idle' && writer.store.hasWork()) { /* next sealed batch */ } });
26
+ const complete = await drainSessions(writer);
27
+ if (!complete)
28
+ process.exitCode = 1;
29
+ }
30
+ finally {
31
+ await writer.close();
32
+ }
33
+ }
34
+ //# sourceMappingURL=session-drain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-drain.js","sourceRoot":"","sources":["../../src/cli/session-drain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,MAAM,UAAU,kBAAkB,CAAC,IAAI,GAAC,eAAe,EAAE;IACvD,MAAM,KAAK,GAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAC,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,WAAW,EAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAC,eAAe,EAAC,QAAQ,EAAC,IAAI,CAAC,EAAC,EAAC,QAAQ,EAAC,IAAI,EAAC,KAAK,EAAC,QAAQ,EAAC,GAAG,EAAC,EAAC,GAAG,OAAO,CAAC,GAAG,EAAC,kBAAkB,EAAC,IAAI,EAAC,EAAC,CAAC,CAAC;IACpM,KAAK,CAAC,EAAE,CAAC,OAAO,EAAC,GAAE,EAAE,CAAA,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4EAA4E,CAAC,CAAC,CAAC;IACzH,KAAK,CAAC,KAAK,EAAE,CAAC;IACd,OAAO,KAAK,CAAC,GAAG,CAAC;AACnB,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAa;IACjD,MAAM,IAAI,GAAC,IAAI,CAAC,MAAM,KAAG,CAAC,CAAA,CAAC,CAAA,eAAe,EAAE,CAAA,CAAC,CAAA,IAAI,CAAC,MAAM,KAAG,CAAC,IAAE,IAAI,CAAC,CAAC,CAAC,KAAG,QAAQ,IAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,CAAA,CAAC,CAAA,IAAI,CAAC,CAAC,CAAE,CAAA,CAAC,CAAA,IAAI,CAAC;IACrH,IAAG,CAAC,IAAI;QAAC,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IAC1E,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAC,IAAI,CAAC;IACpC,MAAM,MAAM,GAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAC,aAAa,CAAC,CAAC,CAAC;IAAA,IAAG,CAAC,MAAM;QAAC,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;IAC7F,2FAA2F;IAC3F,MAAM,MAAM,GAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,CAAC;QAAC,MAAM,iBAAiB,CAAC,MAAM,EAAC,KAAK,IAAE,EAAE,GAAC,OAAM,CAAC,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,KAAG,MAAM,IAAE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAA,CAAC,CAAC,CAAC;QAAC,MAAM,QAAQ,GAAC,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;QAAC,IAAG,CAAC,QAAQ;YAAC,OAAO,CAAC,QAAQ,GAAC,CAAC,CAAC;IAAC,CAAC;YACxN,CAAC;QAAA,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IAAA,CAAC;AACjC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type CommonMemoryConfig } from '../config/config.js';
2
+ /** Read-only path diagnosis: neither realpath failure nor absent storage creates directories. */
3
+ export declare function storagePathLines(config: CommonMemoryConfig): string[];
4
+ //# sourceMappingURL=storage-paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-paths.d.ts","sourceRoot":"","sources":["../../src/cli/storage-paths.ts"],"names":[],"mappings":"AAEA,OAAO,EAAkB,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE9E,iGAAiG;AACjG,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,EAAE,CAGrE"}
@@ -0,0 +1,15 @@
1
+ import { realpathSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { configFilePath } from '../config/config.js';
4
+ function actual(path) { try {
5
+ return realpathSync(path);
6
+ }
7
+ catch {
8
+ return `${path} (unresolved or not created)`;
9
+ } }
10
+ /** Read-only path diagnosis: neither realpath failure nor absent storage creates directories. */
11
+ export function storagePathLines(config) {
12
+ const path = configFilePath(), memory = join(config.dataRoot, 'memory'), runtime = join(config.dataRoot, 'runtime.sqlite');
13
+ return [`Config: ${path}`, `Actual config: ${actual(path)}`, `Data: ${config.dataRoot}`, `Actual data: ${actual(config.dataRoot)}`, `Memory: ${actual(memory)}`, `Runtime: ${actual(runtime)}`];
14
+ }
15
+ //# sourceMappingURL=storage-paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-paths.js","sourceRoot":"","sources":["../../src/cli/storage-paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,cAAc,EAA2B,MAAM,qBAAqB,CAAC;AAC9E,SAAS,MAAM,CAAC,IAAY,IAAY,IAAI,CAAC;IAAC,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;AAAC,CAAC;AAAC,MAAM,CAAC;IAAC,OAAO,GAAG,IAAI,8BAA8B,CAAC;AAAC,CAAC,CAAC,CAAC;AACpI,iGAAiG;AACjG,MAAM,UAAU,gBAAgB,CAAC,MAA0B;IACzD,MAAM,IAAI,GAAG,cAAc,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IAC3H,OAAO,CAAC,WAAW,IAAI,EAAE,EAAC,kBAAkB,MAAM,CAAC,IAAI,CAAC,EAAE,EAAC,SAAS,MAAM,CAAC,QAAQ,EAAE,EAAC,gBAAgB,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAC,WAAW,MAAM,CAAC,MAAM,CAAC,EAAE,EAAC,YAAY,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAC7L,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type CommonMemoryConfig } from '../config/config.js';
2
+ export declare function integrationReadiness(config: CommonMemoryConfig): string;
3
+ export declare function integrationsScreen(): Promise<void>;
4
+ //# sourceMappingURL=tui-integrations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tui-integrations.d.ts","sourceRoot":"","sources":["../../src/cli/tui-integrations.ts"],"names":[],"mappings":"AAIA,OAAO,EAA+B,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAW3F,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAYvE;AAmFD,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAuBxD"}