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,292 @@
1
+ import * as clack from '@clack/prompts';
2
+ import { join } from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { configDirectory, configFilePath, loadConfig } from '../config/config.js';
5
+ import { DOCUMENT_AUTHORS } from '../v2/document-import.js';
6
+ import { listProjects, memoryView, registerProject, removeProject, retryJob, runtimeStatus } from './operations.js';
7
+ import { runFlush } from './flush-command.js';
8
+ import { runImport } from './import-command.js';
9
+ import { runNetworkTest } from './network-test.js';
10
+ import { runInteractiveProcess } from './interactive-process.js';
11
+ import { integrationsScreen } from './tui-integrations.js';
12
+ import { checkConfigUnchanged, runAdvancedWizard, runNetworkWizard, runPermissionsWizard, runSetupWizard, statusLines } from './tui-settings.js';
13
+ import { attempt, confirm, expandPath, log, menu, note, requireInteractive, text, unwrap, UserCancelled, viewText } from './tui-prompts.js';
14
+ // Keep the original module's configuration entry points available to local callers.
15
+ export { printStatus, showStatus, runNetworkWizard, runSetupWizard } from './tui-settings.js';
16
+ export { UserCancelled } from './tui-prompts.js';
17
+ function configured() {
18
+ const config = loadConfig();
19
+ if (!config)
20
+ throw new Error('Configure Common Memory first');
21
+ return config;
22
+ }
23
+ function queueSummary(status) {
24
+ if (!status)
25
+ return 'Runtime: not created; no queue inspected. Browsing does not initialize storage.';
26
+ const states = status.observations.map(row => `${row.state}: ${row.count}`).join(' · ') || 'no observations';
27
+ const dead = status.jobs.filter(j => j.state === 'dead').length;
28
+ const retry = status.jobs.filter(j => j.state === 'retry').length;
29
+ return [`Queue: ${states}`, `Jobs: ${dead} dead · ${retry} waiting for retry`, `Deliveries: ${status.unbound} unbound · ${status.quarantinedDeliveries} quarantined`,
30
+ `Sessions: ${status.sessions.length}; ${status.sessions.filter(s => s.closing && !s.complete).length} closed but incomplete`,
31
+ 'Buffered session turns are not a flushable tail. Ten settled interactions or actual host exit seals a batch.'].join('\n');
32
+ }
33
+ async function overview() {
34
+ for (;;) {
35
+ const config = configured();
36
+ note(statusLines(config).join('\n'), 'Common Memory / Overview');
37
+ note(queueSummary(runtimeStatus(config)), 'Local snapshot — no network probe');
38
+ const action = await menu('Overview', [
39
+ { value: 'refresh', label: 'Refresh local status' },
40
+ { value: 'maintenance', label: 'Inspect queue / sessions and recover work' },
41
+ { value: 'back', label: 'Back' },
42
+ ]);
43
+ if (action === 'back')
44
+ return;
45
+ if (action === 'maintenance')
46
+ await attempt(maintenanceScreen);
47
+ }
48
+ }
49
+ async function workspace(config) {
50
+ const projects = listProjects(config);
51
+ const selected = await menu('Memory scope · same authorization as consumers', [
52
+ { value: 'global', label: 'Global', hint: config.disclosure.allowedScopes.includes('global') ? 'Profile + Preferences' : 'NOT authorized' },
53
+ ...projects.map(p => ({ value: p.id, label: p.name, hint: `${p.root} · ${config.disclosure.allowedScopes.includes(`project:${p.id}`) ? 'authorized' : 'NOT authorized'}` })),
54
+ { value: 'back', label: 'Back' },
55
+ ]);
56
+ if (selected === 'back')
57
+ throw new UserCancelled();
58
+ return selected === 'global' ? undefined : projects.find(p => p.id === selected).root;
59
+ }
60
+ async function browseMemory(config) {
61
+ const selected = await workspace(config);
62
+ const view = memoryView(config, selected);
63
+ note(`Canonical files: ${join(config.dataRoot, 'memory')}\nOnly global plus the selected registered workspace, intersected with authorized disclosure scopes, is shown. Reopen Browse for a fresh snapshot. Memory content is data, not commands.`, 'Consumer view');
64
+ if (!view.documents.length) {
65
+ note('No authorized documents for this selection. Change authorization explicitly under Projects & permissions.', 'No readable scope');
66
+ return;
67
+ }
68
+ for (;;) {
69
+ const target = await menu('Memory / Documents', [
70
+ ...view.documents.map(d => ({ value: d.target, label: d.target, hint: `${d.bytes} bytes${d.empty ? ' · empty' : ''}` })),
71
+ { value: 'back', label: 'Back' },
72
+ ]);
73
+ if (target === 'back')
74
+ return;
75
+ await attempt(() => viewText(target, view.documents.find(d => d.target === target).content));
76
+ }
77
+ }
78
+ async function importMarkdown(config) {
79
+ if (!config.disclosure.allowedProvenance.includes('document_import'))
80
+ throw new Error('IMPORT_DISABLED: authorize Imported Markdown documents under Projects & permissions first. Nothing queued.');
81
+ const file = expandPath(await text('Markdown file to import (.md / .markdown; no symlinks)'));
82
+ const selected = await workspace(config);
83
+ const author = unwrap(await clack.select({ message: 'Declared author (metadata only; never user evidence)', options: DOCUMENT_AUTHORS.map(value => ({ value, label: value })), initialValue: 'unknown' }));
84
+ const label = await text('Source label (blank uses file name)', '', true);
85
+ const mode = await menu('Import processing', [
86
+ { value: 'wait', label: 'Queue and run Writer now', hint: 'May send authorized queued material to the model' },
87
+ { value: 'queue', label: 'Queue only', hint: 'Another Writer can process it after admission' },
88
+ ]);
89
+ note(`File: ${file}\nWorkspace: ${selected ?? 'global'}\nAuthor: ${author}\nLabel: ${label || '(file name)'}\nProvenance: document_import\nMode: ${mode}\nImported text stays attributed, never becomes a user statement, and cannot alone authorize forget. Writer may keep nothing. Admission is durable, not undoable by cancelling later.`, 'Review import');
90
+ if (!await confirm('Import this file into the current store?'))
91
+ return;
92
+ checkConfigUnchanged(config);
93
+ const args = [file, '--author', author, ...(selected ? ['--workspace', selected] : []), ...(label ? ['--label', label] : []), ...(mode === 'queue' ? ['--no-wait'] : [])];
94
+ log('Import running. Ctrl+C requests cancellation; already queued evidence remains durable.');
95
+ const { exitCode, outcome } = await runImport(config, args, log);
96
+ if (exitCode)
97
+ clack.log.warn('Incomplete. Inspect Maintenance; dead jobs need explicit retry. No success is inferred from admission.');
98
+ else if (outcome?.complete)
99
+ clack.log.success('Processed. Review retained documents here; processed may mean nothing was retained.');
100
+ else
101
+ clack.log.info('Queued, not yet processed.');
102
+ }
103
+ async function memoryScreen() {
104
+ for (;;) {
105
+ const action = await menu('Common Memory / Memory', [
106
+ { value: 'browse', label: 'Browse what consumers can read' },
107
+ { value: 'import', label: 'Import a local Markdown document' },
108
+ { value: 'back', label: 'Back' },
109
+ ]);
110
+ if (action === 'back')
111
+ return;
112
+ await attempt(() => action === 'browse' ? browseMemory(configured()) : importMarkdown(configured()));
113
+ }
114
+ }
115
+ async function projectsScreen() {
116
+ for (;;) {
117
+ const config = configured();
118
+ const projects = listProjects(config);
119
+ const action = await menu('Common Memory / Projects & permissions', [
120
+ { value: 'register', label: 'Register a project', hint: 'Registration alone grants no permission' },
121
+ { value: 'permissions', label: 'Manage disclosure / write scopes and provenance' },
122
+ ...projects.map(p => ({ value: p.id, label: p.name, hint: `${config.disclosure.allowedScopes.includes(`project:${p.id}`) ? 'read/disclose' : 'no disclosure'} · ${config.writableScopes.includes(`project:${p.id}`) ? 'write' : 'no write'}` })),
123
+ { value: 'back', label: 'Back' },
124
+ ]);
125
+ if (action === 'back')
126
+ return;
127
+ await attempt(async () => {
128
+ if (action === 'permissions') {
129
+ await runPermissionsWizard(config);
130
+ return;
131
+ }
132
+ if (action === 'register') {
133
+ const root = expandPath(await text('Project directory'));
134
+ const name = await text('Display name');
135
+ if (await confirm(`Register ${name} at ${root}? No disclosure or write permission will be added.`)) {
136
+ checkConfigUnchanged(config);
137
+ const project = registerProject(config, root, name);
138
+ note(`Registered: ${project.name}\nID: project:${project.id}\nRoot: ${project.root}\nUse Manage permissions to authorize it separately.`, 'Project registered');
139
+ }
140
+ return;
141
+ }
142
+ const project = projects.find(p => p.id === action);
143
+ note(`Name: ${project.name}\nScope: project:${project.id}\nRoot: ${project.root}\nMarkdown: ${join(config.dataRoot, 'memory/projects', `${project.id}.md`)}`, 'Project details');
144
+ const operation = await menu('Project actions', [{ value: 'permissions', label: 'Manage permissions' }, { value: 'remove', label: 'Remove registration only' }, { value: 'back', label: 'Back' }]);
145
+ if (operation === 'permissions')
146
+ await runPermissionsWizard(config);
147
+ else if (operation === 'remove' && await confirm(`Remove ${project.name} registration? Markdown and scope settings remain intact; running clients must restart.`)) {
148
+ checkConfigUnchanged(config);
149
+ const removed = removeProject(config, project.id);
150
+ note(removed ? 'Registration removed. Markdown retained. Existing scope entries were not silently changed; review permissions separately.' : 'Registration was already absent.', 'Project result');
151
+ }
152
+ });
153
+ }
154
+ }
155
+ async function maintenanceScreen() {
156
+ for (;;) {
157
+ const config = configured();
158
+ const status = runtimeStatus(config);
159
+ note(queueSummary(status), 'Common Memory / Maintenance');
160
+ const action = await menu('Maintenance', [
161
+ { value: 'refresh', label: 'Refresh status' },
162
+ { value: 'jobs', label: 'Inspect jobs / diagnostics / retry a dead job' },
163
+ { value: 'sessions', label: 'Inspect session summaries', hint: 'No raw conversation bodies' },
164
+ { value: 'flush', label: 'Process queued maintenance', hint: 'Does not seal unfinished session turns' },
165
+ { value: 'drain', label: 'Recover durable session handoffs', hint: 'Waits through retry backoff and leases' },
166
+ { value: 'back', label: 'Back' },
167
+ ]);
168
+ if (action === 'back')
169
+ return;
170
+ await attempt(async () => {
171
+ if (action === 'sessions') {
172
+ await viewText('Session summaries', JSON.stringify(status?.sessions ?? [], null, 2));
173
+ return;
174
+ }
175
+ if (action === 'jobs') {
176
+ const jobs = [...(status?.jobs ?? [])].reverse();
177
+ if (!jobs.length) {
178
+ note('No jobs recorded.', 'Jobs');
179
+ return;
180
+ }
181
+ const id = await menu('Jobs (most recent first)', [...jobs.map(j => ({ value: j.id, label: `${j.state} · ${j.id}`, hint: `attempts ${j.attempts}${j.issue ? ` · ${j.issue}` : ''}` })), { value: 'back', label: 'Back' }]);
182
+ if (id === 'back')
183
+ return;
184
+ const job = jobs.find(j => j.id === id);
185
+ note(JSON.stringify(job, null, 2), 'Job diagnostic — no provider body');
186
+ if (job.state === 'dead' && await confirm(`Retry dead job ${id}? It will be queued, not immediately committed.`)) {
187
+ checkConfigUnchanged(config);
188
+ retryJob(config, id);
189
+ clack.log.success('Retry queued. Process maintenance to continue.');
190
+ }
191
+ }
192
+ else if (action === 'flush' && await confirm('Run Writer on queued work? Authorized content may be sent to the configured model.')) {
193
+ checkConfigUnchanged(config);
194
+ log('Processing. Ctrl+C requests cancellation. Pending work, backoff and leases are preserved.');
195
+ const code = await runFlush(config, log);
196
+ if (code)
197
+ clack.log.warn('Incomplete or cancelled. Inspect diagnostics; waiting for backoff/another lease is not completion.');
198
+ else
199
+ clack.log.success('Queued maintenance complete; open session buffers are not sealed by flush.');
200
+ }
201
+ else if (action === 'drain' && await confirm('Recover session handoffs and run Writer? May send authorized content and wait through leases/backoff.')) {
202
+ checkConfigUnchanged(config);
203
+ log('Recovering durable handoffs. Ctrl+C stops this consumer; durable pending work remains recoverable.');
204
+ const code = await runInteractiveProcess(process.execPath, [fileURLToPath(new URL('./main.js', import.meta.url)), 'session-drain', '--home', configDirectory()]);
205
+ if (code)
206
+ clack.log.warn(`Recovery incomplete or cancelled (exit ${code}). Inspect status before retrying.`);
207
+ else
208
+ clack.log.success('Sealed work drained; this does not close still-running host sessions.');
209
+ }
210
+ });
211
+ }
212
+ }
213
+ async function settingsScreen() {
214
+ for (;;) {
215
+ const action = await menu('Common Memory / Settings', [
216
+ { value: 'model', label: 'Model / request API / credentials' },
217
+ { value: 'network', label: 'Model network / proxy / CA' },
218
+ { value: 'probe', label: 'Test model connection', hint: 'Explicit synthetic request; no memory or SQLite' },
219
+ { value: 'permissions', label: 'Disclosure / write permissions' },
220
+ { value: 'advanced', label: 'Advanced tuning / limits / storage' },
221
+ { value: 'back', label: 'Back' },
222
+ ]);
223
+ if (action === 'back')
224
+ return;
225
+ await attempt(async () => {
226
+ const config = configured();
227
+ if (action === 'model')
228
+ await runSetupWizard(config);
229
+ else if (action === 'network')
230
+ await runNetworkWizard(config);
231
+ else if (action === 'permissions')
232
+ await runPermissionsWizard(config);
233
+ else if (action === 'advanced')
234
+ await runAdvancedWizard(config);
235
+ else if (await confirm('Send a small synthetic API request? No memory content is sent and no Writer commit is tested.')) {
236
+ checkConfigUnchanged(config);
237
+ log('Testing model connection (up to 60 seconds; Ctrl+C cancels).');
238
+ const code = await runNetworkTest(config, log);
239
+ if (code)
240
+ clack.log.warn('Connection test failed. See controlled diagnostics above.');
241
+ else
242
+ clack.log.success('Synthetic API test passed; Writer commits and host integration were not tested.');
243
+ }
244
+ });
245
+ }
246
+ }
247
+ export async function runTui() {
248
+ requireInteractive();
249
+ clack.intro('Common Memory');
250
+ note('↑/↓ navigate · Enter select · Space toggles multi-select\nBack returns one level. Esc/Ctrl+C cancels the current form; on Home it exits.\nNothing is sent to a model merely by opening this workbench.', 'Navigation');
251
+ for (;;) {
252
+ const config = loadConfig();
253
+ note(config ? `Model: ${config.remote.model} · ${config.remote.api ?? 'responses'}\nStore: ${config.dataRoot}\nOverview shows queue health; Integrations distinguishes local readiness from host activation.` : `Not configured: ${configFilePath()}\nStart with configuration. Default authorization is global + delivered user expressions; imports/context require separate opt-in.`, 'Common Memory / Home');
254
+ let action;
255
+ try {
256
+ action = await menu('Home', config ? [
257
+ { value: 'overview', label: 'Overview', hint: 'Paths, network selection, queue health' },
258
+ { value: 'memory', label: 'Memory', hint: 'Browse authorized documents / import Markdown' },
259
+ { value: 'projects', label: 'Projects & permissions' },
260
+ { value: 'integrations', label: 'Integrations', hint: 'Pi / Codex / ChatGPT Work / MCP' },
261
+ { value: 'maintenance', label: 'Maintenance', hint: 'Jobs, sessions, flush, recovery' },
262
+ { value: 'settings', label: 'Settings' },
263
+ { value: 'exit', label: 'Exit' },
264
+ ] : [{ value: 'setup', label: 'Configure Common Memory' }, { value: 'exit', label: 'Exit' }]);
265
+ }
266
+ catch (error) {
267
+ if (error instanceof UserCancelled)
268
+ break;
269
+ throw error;
270
+ }
271
+ if (action === 'exit')
272
+ break;
273
+ await attempt(async () => {
274
+ if (action === 'setup')
275
+ await runSetupWizard(null);
276
+ else if (action === 'overview')
277
+ await overview();
278
+ else if (action === 'memory')
279
+ await memoryScreen();
280
+ else if (action === 'projects')
281
+ await projectsScreen();
282
+ else if (action === 'integrations')
283
+ await integrationsScreen();
284
+ else if (action === 'maintenance')
285
+ await maintenanceScreen();
286
+ else
287
+ await settingsScreen();
288
+ });
289
+ }
290
+ clack.outro('Common Memory closed. Durable pending work is retained.');
291
+ }
292
+ //# sourceMappingURL=tui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tui.js","sourceRoot":"","sources":["../../src/cli/tui.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { type CommonMemoryConfig } from '../config/config.js';
2
+ import { type LaunchOptions } from './host-launch.js';
3
+ import type { HostClient } from './codex-session.js';
4
+ /** Generated native bridge retains the long-lived host identity across WSL invocations. */
5
+ export declare function renderWindowsBridge(options: LaunchOptions, env?: NodeJS.ProcessEnv): string;
6
+ export declare function renderHostConfig(client: HostClient, options: LaunchOptions, env?: NodeJS.ProcessEnv, bridgePath?: string): {
7
+ config: string;
8
+ skill: string;
9
+ policy: string;
10
+ bridge?: string;
11
+ };
12
+ export declare function prepareHostBundle(config: CommonMemoryConfig, args: string[], client?: HostClient): {
13
+ output: string;
14
+ bundle: {
15
+ config: string;
16
+ skill: string;
17
+ policy: string;
18
+ bridge?: string;
19
+ };
20
+ };
21
+ /** Preflight the entire bundle before writing. Existing directories remain supported by the CLI. */
22
+ export declare function writeHostBundle(output: string, bundle: ReturnType<typeof renderHostConfig>): void;
23
+ export declare function runWorkConfig(args: string[], client?: HostClient): void;
24
+ //# sourceMappingURL=work-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"work-config.d.ts","sourceRoot":"","sources":["../../src/cli/work-config.ts"],"names":[],"mappings":"AACA,OAAO,EAA+B,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAI3F,OAAO,EAA6B,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGrD,2FAA2F;AAC3F,wBAAgB,mBAAmB,CAAC,OAAO,EAAC,aAAa,EAAC,GAAG,GAAC,MAAM,CAAC,UAAsB,GAAE,MAAM,CAoClG;AACD,wBAAgB,gBAAgB,CAAC,MAAM,EAAC,UAAU,EAAC,OAAO,EAAC,aAAa,EAAC,GAAG,GAAC,MAAM,CAAC,UAAsB,EAAC,UAAU,CAAC,EAAC,MAAM,GAAE;IAAC,MAAM,EAAC,MAAM,CAAC;IAAA,KAAK,EAAC,MAAM,CAAC;IAAA,MAAM,EAAC,MAAM,CAAC;IAAA,MAAM,CAAC,EAAC,MAAM,CAAA;CAAC,CAmBvL;AACD,wBAAgB,iBAAiB,CAAC,MAAM,EAAC,kBAAkB,EAAC,IAAI,EAAC,MAAM,EAAE,EAAC,MAAM,GAAC,UAAyB;;;gBApB6B,MAAM;eAAO,MAAM;gBAAQ,MAAM;iBAAS,MAAM;;EAkCtL;AAED,oGAAoG;AACpG,wBAAgB,eAAe,CAAC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAC,UAAU,CAAC,OAAO,gBAAgB,CAAC,GAAE,IAAI,CAW7F;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAC,MAAM,EAAE,EAAC,MAAM,GAAC,UAAyB,GAAE,IAAI,CAKjF"}
@@ -0,0 +1,147 @@
1
+ import { execFileSync } from 'node:child_process';
2
+ import { loadConfig, configDirectory } from '../config/config.js';
3
+ import { ProjectRegistry } from '../v2/registry.js';
4
+ import { lstatSync, mkdirSync, writeFileSync } from 'node:fs';
5
+ import { dirname, isAbsolute, join, win32 } from 'node:path';
6
+ import { runtimeLaunch, shellQuote } from './host-launch.js';
7
+ const psQuote = (s) => "'" + s.replaceAll("'", "''") + "'";
8
+ /** Generated native bridge retains the long-lived host identity across WSL invocations. */
9
+ export function renderWindowsBridge(options, env = process.env) {
10
+ const r = runtimeLaunch(options, env);
11
+ return `param([ValidateSet('work-hook','codex-hook','session-refresh')][string]$Action='work-hook', [string]$Client='chatgpt-work')
12
+ $ErrorActionPreference='Stop'
13
+ [Console]::InputEncoding=[System.Text.UTF8Encoding]::new($false)
14
+ [Console]::OutputEncoding=[System.Text.UTF8Encoding]::new($false)
15
+ $OutputEncoding=[Console]::OutputEncoding
16
+ $ancestor=Get-CimInstance Win32_Process -Filter "ProcessId=$PID"
17
+ $hostIdentity=$null
18
+ for($depth=0;$depth -lt 32 -and $ancestor.ParentProcessId -gt 0;$depth++) {
19
+ $ancestor=Get-CimInstance Win32_Process -Filter "ProcessId=$($ancestor.ParentProcessId)"
20
+ if($ancestor.Name -match '^codex(?:-|\\.exe$)') {
21
+ $hostIdentity="windows:$($ancestor.ProcessId):$($ancestor.CreationDate.ToUniversalTime().Ticks)"
22
+ break
23
+ }
24
+ }
25
+ if(!$hostIdentity){throw 'CODEX_HOST_PROCESS_UNCONFIRMED'}
26
+ $wsl=${psQuote(r.wslExe)}
27
+ $prefix=@(${['-d', r.distro, '-u', r.user, '-e'].map(psQuote).join(',')})
28
+ $launch=@('/usr/bin/env',${psQuote('COMMON_MEMORY_HOME=' + r.home)},"COMMON_MEMORY_HOST_INSTANCE=$hostIdentity", "CODEX_THREAD_ID=$env:CODEX_THREAD_ID",${psQuote(r.node)},${psQuote(r.cli)},$Action,'--home',${psQuote(r.home)})
29
+ if($Action -eq 'session-refresh') {
30
+ & $wsl @prefix @launch '--client' $Client
31
+ } else {
32
+ $event=[Console]::In.ReadToEnd() | ConvertFrom-Json
33
+ foreach($field in @('cwd','transcript_path')) {
34
+ $path=$event.$field
35
+ if($path -notmatch '^/') {
36
+ $converted=& $wsl @prefix '/usr/bin/wslpath' '-u' $path
37
+ if($LASTEXITCODE -ne 0){throw 'WSL_PATH_CONVERSION_FAILED'}
38
+ $event.$field=$converted.Trim()
39
+ }
40
+ }
41
+ ($event | ConvertTo-Json -Compress -Depth 100) | & $wsl @prefix @launch
42
+ }
43
+ exit $LASTEXITCODE
44
+ `;
45
+ }
46
+ export function renderHostConfig(client, options, env = process.env, bridgePath) {
47
+ if (!options.wsl && !['linux', 'darwin'].includes(process.platform))
48
+ throw new Error('Select a supported POSIX runtime or Windows-to-WSL mode');
49
+ const r = runtimeLaunch(options, env);
50
+ if (options.wsl && (!bridgePath || !win32.isAbsolute(bridgePath) || /["\r\n]/.test(bridgePath)))
51
+ throw new Error('--bridge-path requires the absolute Windows destination of the generated launcher');
52
+ const command = (action) => {
53
+ if (!options.wsl)
54
+ return [r.node, r.cli, action, '--home', r.home, ...(action === 'session-refresh' ? ['--client', client] : [])].map(shellQuote).join(' ');
55
+ // Encode the PowerShell expression so neither cmd nor PowerShell expands path metacharacters.
56
+ const expression = `& ${psQuote(bridgePath)} -Action ${action} -Client ${client}; exit $LASTEXITCODE`;
57
+ return `C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe -NoProfile -EncodedCommand ${Buffer.from(expression, 'utf16le').toString('base64')}`;
58
+ };
59
+ const lines = ['# Review commands and establish host trust with /hooks. Regenerate after moving this runtime.', '[features]', 'hooks = true', ''];
60
+ for (const event of ['SessionStart', 'UserPromptSubmit', 'PostToolUse', 'Stop', 'Interrupt', 'SessionEnd'])
61
+ lines.push(`[[hooks.${event}]]`, `[[hooks.${event}.hooks]]`, 'type = "command"', `command = ${JSON.stringify(command(client === 'codex' ? 'codex-hook' : 'work-hook'))}`, 'async = false', 'timeout = 3', 'additionalContextLimit = 0', '');
62
+ for (const [name, id, capability] of [['common_memory', client === 'codex' ? 'codex-cli' : 'chatgpt-work', 'read'], ['common_memory_init', 'chatgpt-desktop', 'init']]) {
63
+ lines.push(`[mcp_servers.${name}]`);
64
+ if (client === 'codex' && capability === 'init') {
65
+ lines.push('enabled = false', '');
66
+ continue;
67
+ }
68
+ const launch = r.command(['mcp', '--client-id', id, '--capability', capability, '--global', ...(capability === 'read' ? (options.workspaces ?? []).flatMap(w => ['--workspace', w]) : [])]);
69
+ lines.push(`command = ${JSON.stringify(launch.command)}`, `args = ${JSON.stringify(launch.args)}`, ...(launch.env ? [`env = { COMMON_MEMORY_HOME = ${JSON.stringify(r.home)} }`] : []), `default_tools_approval_mode = "${capability === 'init' ? 'approve' : 'auto'}"`, '');
70
+ }
71
+ return { config: lines.join('\n'), skill: `---\nname: memory-refresh\ndescription: Explicitly replace this activation's frozen Common Memory snapshot with currently authorized memory.\n---\n\nRun this exact local command when the user invokes /memory-refresh:\n\n\`\`\`sh\n${command('session-refresh')}\n\`\`\`\n\nReport a command failure. Success queues the new snapshot for PostToolUse or the next UserPromptSubmit. Do not call memory_init or reset session state.\n`, policy: 'policy:\n allow_implicit_invocation: false\n', ...(options.wsl ? { bridge: renderWindowsBridge(options, env) } : {}) };
72
+ }
73
+ export function prepareHostBundle(config, args, client = 'chatgpt-work') {
74
+ let output, mode, bridgePath;
75
+ const options = { wsl: false };
76
+ for (let i = 0; i < args.length; i++) {
77
+ const arg = args[i], value = args[++i];
78
+ if (!value || value.startsWith('--'))
79
+ throw new Error(`${arg} requires a value`);
80
+ if (arg === '--output')
81
+ output = value;
82
+ else if (arg === '--mode')
83
+ mode = value;
84
+ else if (arg === '--distro')
85
+ options.distro = value;
86
+ else if (arg === '--user')
87
+ options.user = value;
88
+ else if (arg === '--bridge-path')
89
+ bridgePath = value;
90
+ else if (arg === '--wsl-exe')
91
+ options.wslExe = value;
92
+ else if (arg === '--workspace') {
93
+ if (!isAbsolute(value))
94
+ throw new Error('--workspace requires an absolute runtime path');
95
+ (options.workspaces ??= []).push(value);
96
+ }
97
+ else
98
+ throw new Error(`Unknown work-config option ${arg}`);
99
+ }
100
+ if (!['posix', 'windows-wsl'].includes(mode ?? ''))
101
+ throw new Error('Select --mode posix (agent and runtime in the same environment) or --mode windows-wsl (native Windows agent); terminal and WSL_DISTRO_NAME do not identify the agent');
102
+ if (!output || !isAbsolute(output))
103
+ throw new Error('--output <absolute-directory> is required');
104
+ for (const workspace of options.workspaces ?? [])
105
+ if (!new ProjectRegistry(config.dataRoot).resolve(workspace))
106
+ throw new Error(`UNREGISTERED_WORKSPACE: ${workspace}`);
107
+ options.wsl = mode === 'windows-wsl';
108
+ if (options.wsl && !bridgePath)
109
+ bridgePath = execFileSync('/usr/bin/wslpath', ['-w', join(output, 'common-memory-bridge.ps1')], { encoding: 'utf8' }).trim();
110
+ const bundle = renderHostConfig(client, options, process.env, bridgePath);
111
+ return { output, bundle };
112
+ }
113
+ /** Preflight the entire bundle before writing. Existing directories remain supported by the CLI. */
114
+ export function writeHostBundle(output, bundle) {
115
+ if (!isAbsolute(output))
116
+ throw new Error('Bundle output must be absolute');
117
+ const files = [['common-memory.config.toml', bundle.config], ['skills/memory-refresh/SKILL.md', bundle.skill], ['skills/memory-refresh/agents/openai.yaml', bundle.policy], ...(bundle.bridge ? [['common-memory-bridge.ps1', bundle.bridge]] : [])];
118
+ const stat = (path) => { try {
119
+ return lstatSync(path);
120
+ }
121
+ catch (error) {
122
+ if (error.code === 'ENOENT')
123
+ return null;
124
+ throw error;
125
+ } };
126
+ for (const directory of [output, join(output, 'skills'), join(output, 'skills/memory-refresh'), join(output, 'skills/memory-refresh/agents')]) {
127
+ const existing = stat(directory);
128
+ if (existing && (!existing.isDirectory() || existing.isSymbolicLink()))
129
+ throw new Error(`Unsafe bundle directory: ${directory}`);
130
+ }
131
+ for (const [path] of files)
132
+ if (stat(join(output, path)))
133
+ throw new Error(`Bundle file already exists: ${join(output, path)}`);
134
+ mkdirSync(dirname(output), { recursive: true, mode: 0o700 });
135
+ mkdirSync(join(output, 'skills/memory-refresh/agents'), { recursive: true, mode: 0o700 });
136
+ for (const [path, body] of files)
137
+ writeFileSync(join(output, path), path.endsWith('.ps1') ? '\ufeff' + body : body, { flag: 'wx', mode: 0o600 });
138
+ }
139
+ export function runWorkConfig(args, client = 'chatgpt-work') {
140
+ const config = loadConfig(join(configDirectory(), 'config.json'));
141
+ if (!config)
142
+ throw new Error('Run common-memory config first');
143
+ const { output, bundle } = prepareHostBundle(config, args, client);
144
+ writeHostBundle(output, bundle);
145
+ process.stdout.write(`Generated configuration and explicit refresh skill in ${output}. Review before installing in the agent configuration directory.\n`);
146
+ }
147
+ //# sourceMappingURL=work-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"work-config.js","sourceRoot":"","sources":["../../src/cli/work-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { type SessionCacheOptions } from '../v2/session.js';
2
+ import type { RemoteDisclosurePolicy } from "../memory-manager/contracts/disclosure.js";
3
+ import { type RemoteApi, type RemoteTuning } from "../memory-manager/openai/options.js";
4
+ import { PRIVATE_NETWORK_KEYS, type ProxyConfig } from "../memory-manager/network/route.js";
5
+ export interface CommonMemoryConfig {
6
+ sessionCache?: SessionCacheOptions;
7
+ schemaVersion: 2;
8
+ dataRoot: string;
9
+ remote: RemoteTuning & {
10
+ api?: RemoteApi;
11
+ proxy?: ProxyConfig;
12
+ caFileEnv?: string;
13
+ provider: "openai-compatible";
14
+ baseUrl: string;
15
+ model: string;
16
+ apiKeyEnv: string;
17
+ };
18
+ disclosure: RemoteDisclosurePolicy;
19
+ writableScopes: string[];
20
+ scheduler: {
21
+ turnThreshold: number;
22
+ byteThreshold: number;
23
+ idleMs: number;
24
+ maxWaitMs: number;
25
+ leaseMs: number;
26
+ maxAttempts: number;
27
+ };
28
+ }
29
+ export declare function configDirectory(env?: NodeJS.ProcessEnv): string;
30
+ export declare function configFilePath(env?: NodeJS.ProcessEnv): string;
31
+ export declare function envFilePath(env?: NodeJS.ProcessEnv): string;
32
+ export declare function defaultConfig(env?: NodeJS.ProcessEnv): CommonMemoryConfig;
33
+ export declare function loadConfig(path?: string): CommonMemoryConfig | null;
34
+ export declare function saveConfig(config: CommonMemoryConfig, path?: string): void;
35
+ export declare function saveApiKeyToEnvFile(apiKeyEnv: string, apiKey: string, path?: string): void;
36
+ export declare function loadLocalEnv(path?: string): void;
37
+ export declare function resolveApiKey(config: CommonMemoryConfig, env?: NodeJS.ProcessEnv): string;
38
+ export declare function validateConfig(value: unknown): CommonMemoryConfig;
39
+ /** New network secrets are reserved and local; even a legacy loader will never export them. */
40
+ export declare function saveNetworkSecret(name: typeof PRIVATE_NETWORK_KEYS[number], value: string, path?: string): void;
41
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAOpF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2CAA2C,CAAC;AAIxF,OAAO,EAAwB,KAAK,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAG9G,OAAO,EAAsC,oBAAoB,EAAE,KAAK,WAAW,EAAE,MAAM,oCAAoC,CAAC;AAKhI,MAAM,WAAW,kBAAkB;IACjC,YAAY,CAAC,EAAE,mBAAmB,CAAC;IACnC,aAAa,EAAE,CAAC,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,YAAY,GAAG;QACrB,GAAG,CAAC,EAAE,SAAS,CAAC;QAChB,KAAK,CAAC,EAAE,WAAW,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,mBAAmB,CAAC;QAC9B,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,UAAU,EAAE,sBAAsB,CAAC;IACnC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,SAAS,EAAE;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;CACtI;AAED,wBAAgB,eAAe,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAE5E;AAED,wBAAgB,cAAc,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAE3E;AAED,wBAAgB,WAAW,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAExE;AAED,wBAAgB,aAAa,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,kBAAkB,CAwBtF;AAED,wBAAgB,UAAU,CAAC,IAAI,SAAmB,GAAG,kBAAkB,GAAG,IAAI,CAM7E;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,kBAAkB,EAAE,IAAI,SAAmB,GAAG,IAAI,CAGpF;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,SAAgB,GAAG,IAAI,CAcjG;AAED,wBAAgB,YAAY,CAAC,IAAI,SAAgB,GAAG,IAAI,CAEvD;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAItG;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,kBAAkB,CAwCjE;AAqBD,+FAA+F;AAC/F,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,oBAAoB,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,SAAgB,GAAG,IAAI,CAQtH"}