gnosys 5.10.0 → 5.11.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 (498) hide show
  1. package/README.md +66 -0
  2. package/dist/cli.d.ts +0 -1
  3. package/dist/cli.js +289 -137
  4. package/dist/index.d.ts +3 -1
  5. package/dist/index.js +427 -348
  6. package/dist/lib/archive.d.ts +3 -4
  7. package/dist/lib/archive.js +0 -1
  8. package/dist/lib/ask.d.ts +3 -4
  9. package/dist/lib/ask.js +0 -1
  10. package/dist/lib/atomicWrite.d.ts +7 -0
  11. package/dist/lib/atomicWrite.js +46 -0
  12. package/dist/lib/attachments.d.ts +0 -1
  13. package/dist/lib/attachments.js +0 -1
  14. package/dist/lib/audioExtract.d.ts +0 -1
  15. package/dist/lib/audioExtract.js +0 -1
  16. package/dist/lib/audit.d.ts +0 -1
  17. package/dist/lib/audit.js +0 -1
  18. package/dist/lib/bootstrap.d.ts +1 -2
  19. package/dist/lib/bootstrap.js +0 -1
  20. package/dist/lib/centralize.d.ts +20 -0
  21. package/dist/lib/centralize.js +34 -0
  22. package/dist/lib/chat/SlashPalette.d.ts +2 -3
  23. package/dist/lib/chat/SlashPalette.js +0 -1
  24. package/dist/lib/chat/boot-splash.d.ts +1 -2
  25. package/dist/lib/chat/boot-splash.js +0 -1
  26. package/dist/lib/chat/choose.d.ts +0 -1
  27. package/dist/lib/chat/choose.js +0 -2
  28. package/dist/lib/chat/commands.d.ts +1 -2
  29. package/dist/lib/chat/commands.js +0 -1
  30. package/dist/lib/chat/components/CitationText.d.ts +1 -2
  31. package/dist/lib/chat/components/CitationText.js +0 -1
  32. package/dist/lib/chat/components/MarkdownRenderer.d.ts +0 -1
  33. package/dist/lib/chat/components/MarkdownRenderer.js +0 -1
  34. package/dist/lib/chat/components/ToolCallCard.d.ts +1 -2
  35. package/dist/lib/chat/components/ToolCallCard.js +0 -1
  36. package/dist/lib/chat/focus.d.ts +3 -3
  37. package/dist/lib/chat/focus.js +0 -1
  38. package/dist/lib/chat/index.d.ts +3 -4
  39. package/dist/lib/chat/index.js +2 -2
  40. package/dist/lib/chat/intent.d.ts +1 -17
  41. package/dist/lib/chat/intent.js +2 -3
  42. package/dist/lib/chat/llmTurn.d.ts +5 -6
  43. package/dist/lib/chat/llmTurn.js +0 -1
  44. package/dist/lib/chat/recall.d.ts +2 -3
  45. package/dist/lib/chat/recall.js +1 -2
  46. package/dist/lib/chat/render.d.ts +2 -3
  47. package/dist/lib/chat/render.js +0 -1
  48. package/dist/lib/chat/session.d.ts +0 -1
  49. package/dist/lib/chat/session.js +0 -1
  50. package/dist/lib/chat/theme.d.ts +0 -1
  51. package/dist/lib/chat/theme.js +0 -1
  52. package/dist/lib/chat/toolFence.d.ts +2 -2
  53. package/dist/lib/chat/toolFence.js +0 -1
  54. package/dist/lib/chat/tools.d.ts +0 -1
  55. package/dist/lib/chat/tools.js +0 -1
  56. package/dist/lib/chat/types.d.ts +0 -1
  57. package/dist/lib/chat/types.js +0 -1
  58. package/dist/lib/chat/write.d.ts +5 -5
  59. package/dist/lib/chat/write.js +0 -1
  60. package/dist/lib/chunkSplitter.d.ts +0 -1
  61. package/dist/lib/chunkSplitter.js +0 -1
  62. package/dist/lib/cleanup.d.ts +0 -1
  63. package/dist/lib/cleanup.js +0 -1
  64. package/dist/lib/config.d.ts +0 -1
  65. package/dist/lib/config.js +3 -3
  66. package/dist/lib/dashboard.d.ts +3 -4
  67. package/dist/lib/dashboard.js +0 -1
  68. package/dist/lib/db.d.ts +0 -1
  69. package/dist/lib/db.js +40 -8
  70. package/dist/lib/dbSearch.d.ts +3 -4
  71. package/dist/lib/dbSearch.js +0 -1
  72. package/dist/lib/dbWrite.d.ts +2 -3
  73. package/dist/lib/dbWrite.js +0 -1
  74. package/dist/lib/desktopNotify.d.ts +0 -1
  75. package/dist/lib/desktopNotify.js +0 -1
  76. package/dist/lib/docxExtract.d.ts +0 -1
  77. package/dist/lib/docxExtract.js +22 -1
  78. package/dist/lib/dream.d.ts +2 -3
  79. package/dist/lib/dream.js +2 -2
  80. package/dist/lib/embeddings.d.ts +0 -3
  81. package/dist/lib/embeddings.js +7 -3
  82. package/dist/lib/export.d.ts +6 -2
  83. package/dist/lib/export.js +24 -2
  84. package/dist/lib/exportProject.d.ts +4 -3
  85. package/dist/lib/exportProject.js +3 -1
  86. package/dist/lib/federated.d.ts +1 -2
  87. package/dist/lib/federated.js +0 -1
  88. package/dist/lib/fileDetect.d.ts +0 -1
  89. package/dist/lib/fileDetect.js +0 -1
  90. package/dist/lib/graph.d.ts +4 -4
  91. package/dist/lib/graph.js +0 -1
  92. package/dist/lib/heartbeat.d.ts +0 -13
  93. package/dist/lib/heartbeat.js +1 -2
  94. package/dist/lib/hybridSearch.d.ts +5 -21
  95. package/dist/lib/hybridSearch.js +0 -1
  96. package/dist/lib/idFormat.d.ts +0 -2
  97. package/dist/lib/idFormat.js +1 -2
  98. package/dist/lib/imageExtract.d.ts +0 -1
  99. package/dist/lib/imageExtract.js +0 -1
  100. package/dist/lib/import.d.ts +6 -5
  101. package/dist/lib/import.js +3 -33
  102. package/dist/lib/importProject.d.ts +4 -4
  103. package/dist/lib/importProject.js +1 -2
  104. package/dist/lib/ingest.d.ts +3 -4
  105. package/dist/lib/ingest.js +0 -1
  106. package/dist/lib/lensing.d.ts +1 -2
  107. package/dist/lib/lensing.js +0 -1
  108. package/dist/lib/llm.d.ts +6 -45
  109. package/dist/lib/llm.js +27 -9
  110. package/dist/lib/lock.d.ts +0 -1
  111. package/dist/lib/lock.js +0 -1
  112. package/dist/lib/log.d.ts +4 -0
  113. package/dist/lib/log.js +85 -0
  114. package/dist/lib/machineConfig.d.ts +2 -3
  115. package/dist/lib/machineConfig.js +14 -3
  116. package/dist/lib/machineMigrate.d.ts +0 -1
  117. package/dist/lib/machineMigrate.js +0 -1
  118. package/dist/lib/maintenance.d.ts +4 -5
  119. package/dist/lib/maintenance.js +0 -1
  120. package/dist/lib/mcpClientConfig.d.ts +20 -0
  121. package/dist/lib/mcpClientConfig.js +62 -0
  122. package/dist/lib/mcpHttp.d.ts +52 -0
  123. package/dist/lib/mcpHttp.js +227 -0
  124. package/dist/lib/migrate.d.ts +1 -2
  125. package/dist/lib/migrate.js +1 -1
  126. package/dist/lib/modelValidation.d.ts +0 -1
  127. package/dist/lib/modelValidation.js +0 -1
  128. package/dist/lib/multimodalIngest.d.ts +1 -2
  129. package/dist/lib/multimodalIngest.js +0 -1
  130. package/dist/lib/packageManager.d.ts +5 -0
  131. package/dist/lib/packageManager.js +30 -0
  132. package/dist/lib/paths.d.ts +0 -7
  133. package/dist/lib/paths.js +1 -2
  134. package/dist/lib/pdfExtract.d.ts +0 -1
  135. package/dist/lib/pdfExtract.js +0 -1
  136. package/dist/lib/portfolio.d.ts +1 -2
  137. package/dist/lib/portfolio.js +0 -1
  138. package/dist/lib/portfolioHtml.d.ts +1 -2
  139. package/dist/lib/portfolioHtml.js +0 -1
  140. package/dist/lib/preferences.d.ts +6 -2
  141. package/dist/lib/preferences.js +19 -1
  142. package/dist/lib/progress.d.ts +2 -2
  143. package/dist/lib/progress.js +0 -1
  144. package/dist/lib/projectIdentity.d.ts +1 -2
  145. package/dist/lib/projectIdentity.js +5 -5
  146. package/dist/lib/projectPaths.d.ts +2 -2
  147. package/dist/lib/projectPaths.js +0 -1
  148. package/dist/lib/projectScan.d.ts +2 -2
  149. package/dist/lib/projectScan.js +0 -1
  150. package/dist/lib/recall.d.ts +6 -6
  151. package/dist/lib/recall.js +0 -1
  152. package/dist/lib/remote.d.ts +3 -20
  153. package/dist/lib/remote.js +37 -2
  154. package/dist/lib/remoteWizard.d.ts +2 -3
  155. package/dist/lib/remoteWizard.js +0 -1
  156. package/dist/lib/resolver.d.ts +1 -2
  157. package/dist/lib/resolver.js +2 -3
  158. package/dist/lib/retry.d.ts +0 -1
  159. package/dist/lib/retry.js +1 -2
  160. package/dist/lib/rulesGen.d.ts +2 -8
  161. package/dist/lib/rulesGen.js +1 -2
  162. package/dist/lib/search.d.ts +1 -2
  163. package/dist/lib/search.js +1 -1
  164. package/dist/lib/searchTypes.d.ts +18 -0
  165. package/dist/lib/searchTypes.js +2 -0
  166. package/dist/lib/setup/coldStart.d.ts +0 -1
  167. package/dist/lib/setup/coldStart.js +0 -1
  168. package/dist/lib/setup/configSetRender.d.ts +0 -1
  169. package/dist/lib/setup/configSetRender.js +0 -1
  170. package/dist/lib/setup/dreamRender.d.ts +0 -1
  171. package/dist/lib/setup/dreamRender.js +0 -1
  172. package/dist/lib/setup/dreamState.d.ts +2 -2
  173. package/dist/lib/setup/dreamState.js +0 -1
  174. package/dist/lib/setup/modelsRender.d.ts +0 -1
  175. package/dist/lib/setup/modelsRender.js +0 -1
  176. package/dist/lib/setup/remoteRender.d.ts +0 -1
  177. package/dist/lib/setup/remoteRender.js +0 -1
  178. package/dist/lib/setup/routingRender.d.ts +0 -1
  179. package/dist/lib/setup/routingRender.js +0 -1
  180. package/dist/lib/setup/sections/ides.d.ts +1 -2
  181. package/dist/lib/setup/sections/ides.js +3 -2
  182. package/dist/lib/setup/sections/preferences.d.ts +1 -2
  183. package/dist/lib/setup/sections/preferences.js +3 -2
  184. package/dist/lib/setup/sections/routing.d.ts +1 -2
  185. package/dist/lib/setup/sections/routing.js +0 -1
  186. package/dist/lib/setup/storePath.d.ts +0 -1
  187. package/dist/lib/setup/storePath.js +0 -1
  188. package/dist/lib/setup/summary.d.ts +1 -2
  189. package/dist/lib/setup/summary.js +0 -1
  190. package/dist/lib/setup/syncProjectsRender.d.ts +0 -1
  191. package/dist/lib/setup/syncProjectsRender.js +0 -1
  192. package/dist/lib/setup/ui/diff.d.ts +0 -1
  193. package/dist/lib/setup/ui/diff.js +0 -1
  194. package/dist/lib/setup/ui/footer.d.ts +0 -1
  195. package/dist/lib/setup/ui/footer.js +0 -1
  196. package/dist/lib/setup/ui/header.d.ts +0 -1
  197. package/dist/lib/setup/ui/header.js +0 -1
  198. package/dist/lib/setup/ui/index.d.ts +0 -1
  199. package/dist/lib/setup/ui/index.js +0 -1
  200. package/dist/lib/setup/ui/menu.d.ts +0 -1
  201. package/dist/lib/setup/ui/menu.js +0 -1
  202. package/dist/lib/setup/ui/panel.d.ts +0 -1
  203. package/dist/lib/setup/ui/panel.js +0 -1
  204. package/dist/lib/setup/ui/prompt.d.ts +0 -1
  205. package/dist/lib/setup/ui/prompt.js +0 -1
  206. package/dist/lib/setup/ui/safePrompt.d.ts +0 -1
  207. package/dist/lib/setup/ui/safePrompt.js +0 -1
  208. package/dist/lib/setup/ui/spinner.d.ts +0 -1
  209. package/dist/lib/setup/ui/spinner.js +0 -1
  210. package/dist/lib/setup/ui/status.d.ts +0 -1
  211. package/dist/lib/setup/ui/status.js +0 -1
  212. package/dist/lib/setup/ui/table.d.ts +0 -1
  213. package/dist/lib/setup/ui/table.js +0 -1
  214. package/dist/lib/setup/ui/title.d.ts +0 -1
  215. package/dist/lib/setup/ui/title.js +0 -1
  216. package/dist/lib/setup/ui/tokens.d.ts +0 -1
  217. package/dist/lib/setup/ui/tokens.js +0 -1
  218. package/dist/lib/setup.d.ts +2 -31
  219. package/dist/lib/setup.js +13 -9
  220. package/dist/lib/staticSearch.d.ts +0 -1
  221. package/dist/lib/staticSearch.js +0 -1
  222. package/dist/lib/store.d.ts +0 -1
  223. package/dist/lib/store.js +0 -1
  224. package/dist/lib/structuredIngest.d.ts +0 -1
  225. package/dist/lib/structuredIngest.js +0 -1
  226. package/dist/lib/tags.d.ts +0 -1
  227. package/dist/lib/tags.js +0 -1
  228. package/dist/lib/timeline.d.ts +2 -3
  229. package/dist/lib/timeline.js +3 -4
  230. package/dist/lib/trace.d.ts +1 -16
  231. package/dist/lib/trace.js +0 -1
  232. package/dist/lib/upgrade.d.ts +0 -1
  233. package/dist/lib/upgrade.js +0 -1
  234. package/dist/lib/videoExtract.d.ts +0 -1
  235. package/dist/lib/videoExtract.js +0 -1
  236. package/dist/lib/webIndex.d.ts +1 -3
  237. package/dist/lib/webIndex.js +0 -1
  238. package/dist/lib/webIngest.d.ts +13 -1
  239. package/dist/lib/webIngest.js +98 -24
  240. package/dist/lib/wikilinks.d.ts +3 -3
  241. package/dist/lib/wikilinks.js +0 -1
  242. package/dist/postinstall.d.ts +0 -1
  243. package/dist/postinstall.js +0 -1
  244. package/dist/sandbox/client.d.ts +0 -1
  245. package/dist/sandbox/client.js +0 -1
  246. package/dist/sandbox/helper-template.d.ts +0 -1
  247. package/dist/sandbox/helper-template.js +0 -1
  248. package/dist/sandbox/manager.d.ts +0 -9
  249. package/dist/sandbox/manager.js +2 -3
  250. package/dist/sandbox/server.d.ts +2 -3
  251. package/dist/sandbox/server.js +7 -7
  252. package/docs/logo.svg +25 -0
  253. package/package.json +18 -6
  254. package/prompts/synthesize.md +2 -0
  255. package/dist/cli.d.ts.map +0 -1
  256. package/dist/cli.js.map +0 -1
  257. package/dist/index.d.ts.map +0 -1
  258. package/dist/index.js.map +0 -1
  259. package/dist/lib/archive.d.ts.map +0 -1
  260. package/dist/lib/archive.js.map +0 -1
  261. package/dist/lib/ask.d.ts.map +0 -1
  262. package/dist/lib/ask.js.map +0 -1
  263. package/dist/lib/attachments.d.ts.map +0 -1
  264. package/dist/lib/attachments.js.map +0 -1
  265. package/dist/lib/audioExtract.d.ts.map +0 -1
  266. package/dist/lib/audioExtract.js.map +0 -1
  267. package/dist/lib/audit.d.ts.map +0 -1
  268. package/dist/lib/audit.js.map +0 -1
  269. package/dist/lib/bootstrap.d.ts.map +0 -1
  270. package/dist/lib/bootstrap.js.map +0 -1
  271. package/dist/lib/chat/SlashPalette.d.ts.map +0 -1
  272. package/dist/lib/chat/SlashPalette.js.map +0 -1
  273. package/dist/lib/chat/boot-splash.d.ts.map +0 -1
  274. package/dist/lib/chat/boot-splash.js.map +0 -1
  275. package/dist/lib/chat/choose.d.ts.map +0 -1
  276. package/dist/lib/chat/choose.js.map +0 -1
  277. package/dist/lib/chat/commands.d.ts.map +0 -1
  278. package/dist/lib/chat/commands.js.map +0 -1
  279. package/dist/lib/chat/components/CitationText.d.ts.map +0 -1
  280. package/dist/lib/chat/components/CitationText.js.map +0 -1
  281. package/dist/lib/chat/components/MarkdownRenderer.d.ts.map +0 -1
  282. package/dist/lib/chat/components/MarkdownRenderer.js.map +0 -1
  283. package/dist/lib/chat/components/ToolCallCard.d.ts.map +0 -1
  284. package/dist/lib/chat/components/ToolCallCard.js.map +0 -1
  285. package/dist/lib/chat/focus.d.ts.map +0 -1
  286. package/dist/lib/chat/focus.js.map +0 -1
  287. package/dist/lib/chat/index.d.ts.map +0 -1
  288. package/dist/lib/chat/index.js.map +0 -1
  289. package/dist/lib/chat/intent.d.ts.map +0 -1
  290. package/dist/lib/chat/intent.js.map +0 -1
  291. package/dist/lib/chat/llmTurn.d.ts.map +0 -1
  292. package/dist/lib/chat/llmTurn.js.map +0 -1
  293. package/dist/lib/chat/recall.d.ts.map +0 -1
  294. package/dist/lib/chat/recall.js.map +0 -1
  295. package/dist/lib/chat/render.d.ts.map +0 -1
  296. package/dist/lib/chat/render.js.map +0 -1
  297. package/dist/lib/chat/session.d.ts.map +0 -1
  298. package/dist/lib/chat/session.js.map +0 -1
  299. package/dist/lib/chat/theme.d.ts.map +0 -1
  300. package/dist/lib/chat/theme.js.map +0 -1
  301. package/dist/lib/chat/toolFence.d.ts.map +0 -1
  302. package/dist/lib/chat/toolFence.js.map +0 -1
  303. package/dist/lib/chat/tools.d.ts.map +0 -1
  304. package/dist/lib/chat/tools.js.map +0 -1
  305. package/dist/lib/chat/types.d.ts.map +0 -1
  306. package/dist/lib/chat/types.js.map +0 -1
  307. package/dist/lib/chat/write.d.ts.map +0 -1
  308. package/dist/lib/chat/write.js.map +0 -1
  309. package/dist/lib/chunkSplitter.d.ts.map +0 -1
  310. package/dist/lib/chunkSplitter.js.map +0 -1
  311. package/dist/lib/cleanup.d.ts.map +0 -1
  312. package/dist/lib/cleanup.js.map +0 -1
  313. package/dist/lib/config.d.ts.map +0 -1
  314. package/dist/lib/config.js.map +0 -1
  315. package/dist/lib/dashboard.d.ts.map +0 -1
  316. package/dist/lib/dashboard.js.map +0 -1
  317. package/dist/lib/db.d.ts.map +0 -1
  318. package/dist/lib/db.js.map +0 -1
  319. package/dist/lib/dbSearch.d.ts.map +0 -1
  320. package/dist/lib/dbSearch.js.map +0 -1
  321. package/dist/lib/dbWrite.d.ts.map +0 -1
  322. package/dist/lib/dbWrite.js.map +0 -1
  323. package/dist/lib/desktopNotify.d.ts.map +0 -1
  324. package/dist/lib/desktopNotify.js.map +0 -1
  325. package/dist/lib/docxExtract.d.ts.map +0 -1
  326. package/dist/lib/docxExtract.js.map +0 -1
  327. package/dist/lib/dream.d.ts.map +0 -1
  328. package/dist/lib/dream.js.map +0 -1
  329. package/dist/lib/embeddings.d.ts.map +0 -1
  330. package/dist/lib/embeddings.js.map +0 -1
  331. package/dist/lib/export.d.ts.map +0 -1
  332. package/dist/lib/export.js.map +0 -1
  333. package/dist/lib/exportProject.d.ts.map +0 -1
  334. package/dist/lib/exportProject.js.map +0 -1
  335. package/dist/lib/federated.d.ts.map +0 -1
  336. package/dist/lib/federated.js.map +0 -1
  337. package/dist/lib/fileDetect.d.ts.map +0 -1
  338. package/dist/lib/fileDetect.js.map +0 -1
  339. package/dist/lib/graph.d.ts.map +0 -1
  340. package/dist/lib/graph.js.map +0 -1
  341. package/dist/lib/heartbeat.d.ts.map +0 -1
  342. package/dist/lib/heartbeat.js.map +0 -1
  343. package/dist/lib/history.d.ts +0 -39
  344. package/dist/lib/history.d.ts.map +0 -1
  345. package/dist/lib/history.js +0 -112
  346. package/dist/lib/history.js.map +0 -1
  347. package/dist/lib/hybridSearch.d.ts.map +0 -1
  348. package/dist/lib/hybridSearch.js.map +0 -1
  349. package/dist/lib/idFormat.d.ts.map +0 -1
  350. package/dist/lib/idFormat.js.map +0 -1
  351. package/dist/lib/imageExtract.d.ts.map +0 -1
  352. package/dist/lib/imageExtract.js.map +0 -1
  353. package/dist/lib/import.d.ts.map +0 -1
  354. package/dist/lib/import.js.map +0 -1
  355. package/dist/lib/importProject.d.ts.map +0 -1
  356. package/dist/lib/importProject.js.map +0 -1
  357. package/dist/lib/ingest.d.ts.map +0 -1
  358. package/dist/lib/ingest.js.map +0 -1
  359. package/dist/lib/lensing.d.ts.map +0 -1
  360. package/dist/lib/lensing.js.map +0 -1
  361. package/dist/lib/llm.d.ts.map +0 -1
  362. package/dist/lib/llm.js.map +0 -1
  363. package/dist/lib/lock.d.ts.map +0 -1
  364. package/dist/lib/lock.js.map +0 -1
  365. package/dist/lib/machineConfig.d.ts.map +0 -1
  366. package/dist/lib/machineConfig.js.map +0 -1
  367. package/dist/lib/machineMigrate.d.ts.map +0 -1
  368. package/dist/lib/machineMigrate.js.map +0 -1
  369. package/dist/lib/maintenance.d.ts.map +0 -1
  370. package/dist/lib/maintenance.js.map +0 -1
  371. package/dist/lib/migrate.d.ts.map +0 -1
  372. package/dist/lib/migrate.js.map +0 -1
  373. package/dist/lib/modelValidation.d.ts.map +0 -1
  374. package/dist/lib/modelValidation.js.map +0 -1
  375. package/dist/lib/multimodalIngest.d.ts.map +0 -1
  376. package/dist/lib/multimodalIngest.js.map +0 -1
  377. package/dist/lib/paths.d.ts.map +0 -1
  378. package/dist/lib/paths.js.map +0 -1
  379. package/dist/lib/pdfExtract.d.ts.map +0 -1
  380. package/dist/lib/pdfExtract.js.map +0 -1
  381. package/dist/lib/portfolio.d.ts.map +0 -1
  382. package/dist/lib/portfolio.js.map +0 -1
  383. package/dist/lib/portfolioHtml.d.ts.map +0 -1
  384. package/dist/lib/portfolioHtml.js.map +0 -1
  385. package/dist/lib/preferences.d.ts.map +0 -1
  386. package/dist/lib/preferences.js.map +0 -1
  387. package/dist/lib/progress.d.ts.map +0 -1
  388. package/dist/lib/progress.js.map +0 -1
  389. package/dist/lib/projectIdentity.d.ts.map +0 -1
  390. package/dist/lib/projectIdentity.js.map +0 -1
  391. package/dist/lib/projectPaths.d.ts.map +0 -1
  392. package/dist/lib/projectPaths.js.map +0 -1
  393. package/dist/lib/projectScan.d.ts.map +0 -1
  394. package/dist/lib/projectScan.js.map +0 -1
  395. package/dist/lib/recall.d.ts.map +0 -1
  396. package/dist/lib/recall.js.map +0 -1
  397. package/dist/lib/remote.d.ts.map +0 -1
  398. package/dist/lib/remote.js.map +0 -1
  399. package/dist/lib/remoteWizard.d.ts.map +0 -1
  400. package/dist/lib/remoteWizard.js.map +0 -1
  401. package/dist/lib/resolver.d.ts.map +0 -1
  402. package/dist/lib/resolver.js.map +0 -1
  403. package/dist/lib/retry.d.ts.map +0 -1
  404. package/dist/lib/retry.js.map +0 -1
  405. package/dist/lib/rulesGen.d.ts.map +0 -1
  406. package/dist/lib/rulesGen.js.map +0 -1
  407. package/dist/lib/search.d.ts.map +0 -1
  408. package/dist/lib/search.js.map +0 -1
  409. package/dist/lib/setup/coldStart.d.ts.map +0 -1
  410. package/dist/lib/setup/coldStart.js.map +0 -1
  411. package/dist/lib/setup/configSetRender.d.ts.map +0 -1
  412. package/dist/lib/setup/configSetRender.js.map +0 -1
  413. package/dist/lib/setup/dreamRender.d.ts.map +0 -1
  414. package/dist/lib/setup/dreamRender.js.map +0 -1
  415. package/dist/lib/setup/dreamState.d.ts.map +0 -1
  416. package/dist/lib/setup/dreamState.js.map +0 -1
  417. package/dist/lib/setup/modelsRender.d.ts.map +0 -1
  418. package/dist/lib/setup/modelsRender.js.map +0 -1
  419. package/dist/lib/setup/remoteRender.d.ts.map +0 -1
  420. package/dist/lib/setup/remoteRender.js.map +0 -1
  421. package/dist/lib/setup/routingRender.d.ts.map +0 -1
  422. package/dist/lib/setup/routingRender.js.map +0 -1
  423. package/dist/lib/setup/sections/ides.d.ts.map +0 -1
  424. package/dist/lib/setup/sections/ides.js.map +0 -1
  425. package/dist/lib/setup/sections/preferences.d.ts.map +0 -1
  426. package/dist/lib/setup/sections/preferences.js.map +0 -1
  427. package/dist/lib/setup/sections/routing.d.ts.map +0 -1
  428. package/dist/lib/setup/sections/routing.js.map +0 -1
  429. package/dist/lib/setup/storePath.d.ts.map +0 -1
  430. package/dist/lib/setup/storePath.js.map +0 -1
  431. package/dist/lib/setup/summary.d.ts.map +0 -1
  432. package/dist/lib/setup/summary.js.map +0 -1
  433. package/dist/lib/setup/syncProjectsRender.d.ts.map +0 -1
  434. package/dist/lib/setup/syncProjectsRender.js.map +0 -1
  435. package/dist/lib/setup/ui/diff.d.ts.map +0 -1
  436. package/dist/lib/setup/ui/diff.js.map +0 -1
  437. package/dist/lib/setup/ui/footer.d.ts.map +0 -1
  438. package/dist/lib/setup/ui/footer.js.map +0 -1
  439. package/dist/lib/setup/ui/header.d.ts.map +0 -1
  440. package/dist/lib/setup/ui/header.js.map +0 -1
  441. package/dist/lib/setup/ui/index.d.ts.map +0 -1
  442. package/dist/lib/setup/ui/index.js.map +0 -1
  443. package/dist/lib/setup/ui/menu.d.ts.map +0 -1
  444. package/dist/lib/setup/ui/menu.js.map +0 -1
  445. package/dist/lib/setup/ui/panel.d.ts.map +0 -1
  446. package/dist/lib/setup/ui/panel.js.map +0 -1
  447. package/dist/lib/setup/ui/prompt.d.ts.map +0 -1
  448. package/dist/lib/setup/ui/prompt.js.map +0 -1
  449. package/dist/lib/setup/ui/safePrompt.d.ts.map +0 -1
  450. package/dist/lib/setup/ui/safePrompt.js.map +0 -1
  451. package/dist/lib/setup/ui/spinner.d.ts.map +0 -1
  452. package/dist/lib/setup/ui/spinner.js.map +0 -1
  453. package/dist/lib/setup/ui/status.d.ts.map +0 -1
  454. package/dist/lib/setup/ui/status.js.map +0 -1
  455. package/dist/lib/setup/ui/table.d.ts.map +0 -1
  456. package/dist/lib/setup/ui/table.js.map +0 -1
  457. package/dist/lib/setup/ui/title.d.ts.map +0 -1
  458. package/dist/lib/setup/ui/title.js.map +0 -1
  459. package/dist/lib/setup/ui/tokens.d.ts.map +0 -1
  460. package/dist/lib/setup/ui/tokens.js.map +0 -1
  461. package/dist/lib/setup.d.ts.map +0 -1
  462. package/dist/lib/setup.js.map +0 -1
  463. package/dist/lib/staticSearch.d.ts.map +0 -1
  464. package/dist/lib/staticSearch.js.map +0 -1
  465. package/dist/lib/store.d.ts.map +0 -1
  466. package/dist/lib/store.js.map +0 -1
  467. package/dist/lib/structuredIngest.d.ts.map +0 -1
  468. package/dist/lib/structuredIngest.js.map +0 -1
  469. package/dist/lib/tags.d.ts.map +0 -1
  470. package/dist/lib/tags.js.map +0 -1
  471. package/dist/lib/timeline.d.ts.map +0 -1
  472. package/dist/lib/timeline.js.map +0 -1
  473. package/dist/lib/trace.d.ts.map +0 -1
  474. package/dist/lib/trace.js.map +0 -1
  475. package/dist/lib/upgrade.d.ts.map +0 -1
  476. package/dist/lib/upgrade.js.map +0 -1
  477. package/dist/lib/videoExtract.d.ts.map +0 -1
  478. package/dist/lib/videoExtract.js.map +0 -1
  479. package/dist/lib/webIndex.d.ts.map +0 -1
  480. package/dist/lib/webIndex.js.map +0 -1
  481. package/dist/lib/webIngest.d.ts.map +0 -1
  482. package/dist/lib/webIngest.js.map +0 -1
  483. package/dist/lib/wikilinks.d.ts.map +0 -1
  484. package/dist/lib/wikilinks.js.map +0 -1
  485. package/dist/postinstall.d.ts.map +0 -1
  486. package/dist/postinstall.js.map +0 -1
  487. package/dist/sandbox/client.d.ts.map +0 -1
  488. package/dist/sandbox/client.js.map +0 -1
  489. package/dist/sandbox/helper-template.d.ts.map +0 -1
  490. package/dist/sandbox/helper-template.js.map +0 -1
  491. package/dist/sandbox/index.d.ts +0 -10
  492. package/dist/sandbox/index.d.ts.map +0 -1
  493. package/dist/sandbox/index.js +0 -10
  494. package/dist/sandbox/index.js.map +0 -1
  495. package/dist/sandbox/manager.d.ts.map +0 -1
  496. package/dist/sandbox/manager.js.map +0 -1
  497. package/dist/sandbox/server.d.ts.map +0 -1
  498. package/dist/sandbox/server.js.map +0 -1
package/dist/cli.js CHANGED
@@ -20,14 +20,14 @@ import { getGnosysHome } from "./lib/paths.js";
20
20
  import { GnosysSearch } from "./lib/search.js";
21
21
  import { GnosysTagRegistry } from "./lib/tags.js";
22
22
  import { applyLens } from "./lib/lensing.js";
23
- import { getFileHistory, rollbackToCommit, hasGitHistory, getFileDiff } from "./lib/history.js";
24
23
  import { computeStats } from "./lib/timeline.js";
25
24
  import { buildLinkGraph, getBacklinks, getOutgoingLinks, formatGraphSummary } from "./lib/wikilinks.js";
26
25
  import { loadConfig, generateConfigTemplate, DEFAULT_CONFIG, writeConfig, resolveTaskModel, ALL_PROVIDERS, getProviderModel } from "./lib/config.js";
27
26
  import { getLLMProvider, isProviderAvailable } from "./lib/llm.js";
28
27
  import { GnosysDB } from "./lib/db.js";
28
+ import { logError } from "./lib/log.js";
29
29
  import { createProjectIdentity, readProjectIdentity, findProjectIdentity, migrateProject } from "./lib/projectIdentity.js";
30
- import { setPreference, getPreference, getAllPreferences, deletePreference } from "./lib/preferences.js";
30
+ import { setPreference, getPreference, getAllPreferences, deletePreference, KNOWN_PREFERENCE_KEYS, suggestPreferenceKey } from "./lib/preferences.js";
31
31
  import { syncToTarget } from "./lib/rulesGen.js";
32
32
  // Lazy-loaded inside action handlers (each ~200ms-2.5s on cold cache):
33
33
  // - ./lib/embeddings.js (@huggingface/transformers — 80MB)
@@ -209,6 +209,45 @@ program
209
209
  .description("Read a specific memory. Supports layer prefix (e.g., project:decisions/auth.md)")
210
210
  .option("--json", "Output as JSON")
211
211
  .action(async (memoryPath, opts) => {
212
+ const centralDb = GnosysDB.openCentral();
213
+ if (centralDb.isAvailable()) {
214
+ const dbMem = centralDb.getMemory(memoryPath);
215
+ if (dbMem) {
216
+ try {
217
+ const tags = dbMem.tags || "[]";
218
+ const headerLines = [
219
+ `---`,
220
+ `id: ${dbMem.id}`,
221
+ `title: '${dbMem.title}'`,
222
+ `category: ${dbMem.category}`,
223
+ `tags: ${tags}`,
224
+ `relevance: ${dbMem.relevance}`,
225
+ `author: ${dbMem.author}`,
226
+ `authority: ${dbMem.authority}`,
227
+ `confidence: ${dbMem.confidence}`,
228
+ `status: ${dbMem.status}`,
229
+ `tier: ${dbMem.tier}`,
230
+ `created: '${dbMem.created}'`,
231
+ `modified: '${dbMem.modified}'`,
232
+ ];
233
+ if (dbMem.source_file) {
234
+ headerLines.push(`source_file: ${dbMem.source_file}${dbMem.source_page != null ? ` (page ${Number(dbMem.source_page)})` : ""}`);
235
+ }
236
+ if (dbMem.source_path)
237
+ headerLines.push(`source_path: ${dbMem.source_path}`);
238
+ headerLines.push(`---`);
239
+ const raw = `[Source: gnosys.db]\n\n${headerLines.join("\n")}\n\n${dbMem.content}`;
240
+ outputResult(!!opts.json, { path: memoryPath, source: "gnosys.db", content: raw, memory: dbMem }, () => {
241
+ console.log(raw);
242
+ });
243
+ return;
244
+ }
245
+ finally {
246
+ centralDb.close();
247
+ }
248
+ }
249
+ }
250
+ centralDb.close();
212
251
  const resolver = await getResolver();
213
252
  const memory = await resolver.readMemory(memoryPath);
214
253
  if (!memory) {
@@ -262,7 +301,7 @@ program
262
301
  });
263
302
  }
264
303
  catch (err) {
265
- console.error(`Error: ${err instanceof Error ? err.message : err}`);
304
+ logError(err, { module: "cli", op: "discover" });
266
305
  process.exit(1);
267
306
  }
268
307
  finally {
@@ -302,7 +341,7 @@ program
302
341
  });
303
342
  }
304
343
  catch (err) {
305
- console.error(`Error: ${err instanceof Error ? err.message : err}`);
344
+ logError(err, { module: "cli", op: "discover" });
306
345
  process.exit(1);
307
346
  }
308
347
  finally {
@@ -354,7 +393,7 @@ program
354
393
  });
355
394
  }
356
395
  catch (err) {
357
- console.error(`Error: ${err instanceof Error ? err.message : err}`);
396
+ logError(err, { module: "cli", op: "search" });
358
397
  process.exit(1);
359
398
  }
360
399
  finally {
@@ -393,7 +432,7 @@ program
393
432
  });
394
433
  }
395
434
  catch (err) {
396
- console.error(`Error: ${err instanceof Error ? err.message : err}`);
435
+ logError(err, { module: "cli", op: "search" });
397
436
  process.exit(1);
398
437
  }
399
438
  finally {
@@ -468,7 +507,7 @@ program
468
507
  });
469
508
  }
470
509
  catch (err) {
471
- console.error(`Error: ${err instanceof Error ? err.message : err}`);
510
+ logError(err, { module: "cli", op: "list" });
472
511
  process.exit(1);
473
512
  }
474
513
  finally {
@@ -1961,6 +2000,7 @@ program
1961
2000
  .option("--modified-after <date>", "Modified after ISO date")
1962
2001
  .option("--modified-before <date>", "Modified before ISO date")
1963
2002
  .option("--or", "Combine filters with OR instead of AND (default: AND)")
2003
+ .option("--json", "Output as JSON")
1964
2004
  .action(async (opts) => {
1965
2005
  const resolver = await getResolver();
1966
2006
  const allMemories = await resolver.getAllMemories();
@@ -1990,82 +2030,73 @@ program
1990
2030
  if (opts.modifiedBefore)
1991
2031
  lens.modifiedBefore = opts.modifiedBefore;
1992
2032
  const result = applyLens(allMemories, lens);
1993
- if (result.length === 0) {
1994
- console.log("No memories match the lens filter.");
1995
- return;
1996
- }
1997
- console.log(`${result.length} memories match:\n`);
1998
- for (const m of result) {
1999
- const src = m.sourceLabel || "";
2000
- console.log(` [${m.frontmatter.status}] ${m.frontmatter.title} (${m.frontmatter.confidence})`);
2001
- console.log(` ${src ? src + ":" : ""}${m.relativePath}`);
2002
- console.log();
2003
- }
2033
+ const items = result.map((m) => ({
2034
+ title: m.frontmatter.title,
2035
+ status: m.frontmatter.status,
2036
+ confidence: m.frontmatter.confidence,
2037
+ sourceLabel: m.sourceLabel || "",
2038
+ relativePath: m.relativePath,
2039
+ }));
2040
+ outputResult(!!opts.json, { count: items.length, items }, () => {
2041
+ if (result.length === 0) {
2042
+ console.log("No memories match the lens filter.");
2043
+ return;
2044
+ }
2045
+ console.log(`${result.length} memories match:\n`);
2046
+ for (const m of result) {
2047
+ const src = m.sourceLabel || "";
2048
+ console.log(` [${m.frontmatter.status}] ${m.frontmatter.title} (${m.frontmatter.confidence})`);
2049
+ console.log(` ${src ? src + ":" : ""}${m.relativePath}`);
2050
+ console.log();
2051
+ }
2052
+ });
2004
2053
  });
2005
2054
  // ─── gnosys history <path> ───────────────────────────────────────────────
2006
2055
  program
2007
2056
  .command("history <memoryPath>")
2008
- .description("Show version history for a memory (git-backed)")
2057
+ .description("Show audit history for a memory")
2009
2058
  .option("-n, --limit <number>", "Max entries", "20")
2010
- .option("--diff <hash>", "Show diff from this commit to current")
2059
+ .option("--json", "Output as JSON")
2011
2060
  .action(async (memPath, opts) => {
2012
- const resolver = await getResolver();
2013
- const memory = await resolver.readMemory(memPath);
2014
- if (!memory) {
2015
- console.error(`Memory not found: ${memPath}`);
2016
- process.exit(1);
2017
- }
2018
- const sourceStore = resolver.getStores().find((s) => s.label === memory.sourceLabel);
2019
- if (!sourceStore) {
2020
- console.error("Could not locate source store.");
2021
- process.exit(1);
2022
- }
2023
- if (!hasGitHistory(sourceStore.path)) {
2024
- console.error("No git history available for this store.");
2061
+ const centralDb = GnosysDB.openCentral();
2062
+ if (!centralDb.isAvailable()) {
2063
+ console.error("Central DB not available.");
2025
2064
  process.exit(1);
2026
2065
  }
2027
- if (opts.diff) {
2028
- const diff = getFileDiff(sourceStore.path, memory.relativePath, opts.diff, "HEAD");
2029
- if (!diff) {
2030
- console.error("Could not generate diff.");
2066
+ try {
2067
+ const dbMem = centralDb.getMemory(memPath);
2068
+ if (!dbMem) {
2069
+ console.error(`Memory not found: ${memPath}`);
2031
2070
  process.exit(1);
2032
2071
  }
2033
- console.log(diff);
2034
- return;
2035
- }
2036
- const history = getFileHistory(sourceStore.path, memory.relativePath, parseInt(opts.limit));
2037
- if (history.length === 0) {
2038
- console.log("No history found for this memory.");
2039
- return;
2040
- }
2041
- console.log(`History for ${memory.frontmatter.title}:\n`);
2042
- for (const entry of history) {
2043
- console.log(` ${entry.commitHash.substring(0, 7)} ${entry.date} ${entry.message}`);
2044
- }
2045
- });
2046
- // ─── gnosys rollback <path> <hash> ──────────────────────────────────────
2047
- program
2048
- .command("rollback <memoryPath> <commitHash>")
2049
- .description("Rollback a memory to its state at a specific commit")
2050
- .action(async (memPath, commitHash) => {
2051
- const resolver = await getResolver();
2052
- const memory = await resolver.readMemory(memPath);
2053
- if (!memory) {
2054
- console.error(`Memory not found: ${memPath}`);
2055
- process.exit(1);
2056
- }
2057
- const sourceStore = resolver.getStores().find((s) => s.label === memory.sourceLabel);
2058
- if (!sourceStore?.writable) {
2059
- console.error("Cannot rollback: store is read-only.");
2060
- process.exit(1);
2061
- }
2062
- const success = rollbackToCommit(sourceStore.path, memory.relativePath, commitHash);
2063
- if (success) {
2064
- console.log(`Rolled back ${memory.frontmatter.title} to commit ${commitHash.substring(0, 7)}.`);
2072
+ const limit = parseInt(opts.limit, 10) || 20;
2073
+ const audits = centralDb.getAuditLog(dbMem.id, limit);
2074
+ outputResult(!!opts.json, {
2075
+ memoryId: dbMem.id,
2076
+ title: dbMem.title,
2077
+ created: dbMem.created,
2078
+ modified: dbMem.modified,
2079
+ entries: audits,
2080
+ }, () => {
2081
+ if (audits.length === 0) {
2082
+ console.log(`Memory: ${dbMem.title} (${dbMem.id})`);
2083
+ console.log(`Created: ${dbMem.created}`);
2084
+ console.log(`Modified: ${dbMem.modified}`);
2085
+ console.log("No audit history recorded.");
2086
+ return;
2087
+ }
2088
+ console.log(`History for ${dbMem.title} (${dbMem.id}, ${audits.length} entries):\n`);
2089
+ console.log(`Created: ${dbMem.created}`);
2090
+ console.log(`Modified: ${dbMem.modified}\n`);
2091
+ for (const entry of audits) {
2092
+ const date = entry.timestamp.split("T")[0];
2093
+ const detail = entry.details ? ` (${entry.details})` : "";
2094
+ console.log(` ${date} ${entry.operation}${detail}`);
2095
+ }
2096
+ });
2065
2097
  }
2066
- else {
2067
- console.error(`Rollback failed. Check that the commit hash is valid.`);
2068
- process.exit(1);
2098
+ finally {
2099
+ centralDb.close();
2069
2100
  }
2070
2101
  });
2071
2102
  // ─── gnosys timeline ────────────────────────────────────────────────────
@@ -2075,6 +2106,7 @@ program
2075
2106
  .option("-p, --period <period>", "Group by: day, week, month (default), year", "month")
2076
2107
  .option("--project <id>", "Filter to a specific project ID (default: all projects)")
2077
2108
  .option("--limit-titles <n>", "Show titles inline when an entry has <= N memories (default 5)", "5")
2109
+ .option("--json", "Output as JSON")
2078
2110
  .action(async (opts) => {
2079
2111
  const { groupDbByPeriod } = await import("./lib/timeline.js");
2080
2112
  const centralDb = GnosysDB.openCentral();
@@ -2087,25 +2119,29 @@ program
2087
2119
  ? centralDb.getMemoriesByProject(opts.project)
2088
2120
  : centralDb.getActiveMemories();
2089
2121
  if (memories.length === 0) {
2090
- console.log("No memories found.");
2122
+ outputResult(!!opts.json, { period: opts.period, count: 0, entries: [] }, () => {
2123
+ console.log("No memories found.");
2124
+ });
2091
2125
  return;
2092
2126
  }
2093
2127
  const entries = groupDbByPeriod(memories, opts.period);
2094
2128
  const titleLimit = Math.max(0, parseInt(opts.limitTitles, 10) || 5);
2095
- console.log(`Knowledge Timeline (by ${opts.period}, ${memories.length} memories):\n`);
2096
- for (const entry of entries) {
2097
- const parts = [];
2098
- if (entry.created > 0)
2099
- parts.push(`${entry.created} created`);
2100
- if (entry.modified > 0)
2101
- parts.push(`${entry.modified} modified`);
2102
- console.log(` ${entry.period}: ${parts.join(", ")}`);
2103
- if (entry.titles.length > 0 && entry.titles.length <= titleLimit) {
2104
- for (const t of entry.titles) {
2105
- console.log(` + ${t}`);
2129
+ outputResult(!!opts.json, { period: opts.period, count: memories.length, entries }, () => {
2130
+ console.log(`Knowledge Timeline (by ${opts.period}, ${memories.length} memories):\n`);
2131
+ for (const entry of entries) {
2132
+ const parts = [];
2133
+ if (entry.created > 0)
2134
+ parts.push(`${entry.created} created`);
2135
+ if (entry.modified > 0)
2136
+ parts.push(`${entry.modified} modified`);
2137
+ console.log(` ${entry.period}: ${parts.join(", ")}`);
2138
+ if (entry.titles.length > 0 && entry.titles.length <= titleLimit) {
2139
+ for (const t of entry.titles) {
2140
+ console.log(` + ${t}`);
2141
+ }
2106
2142
  }
2107
2143
  }
2108
- }
2144
+ });
2109
2145
  }
2110
2146
  finally {
2111
2147
  centralDb.close();
@@ -2253,7 +2289,8 @@ program
2253
2289
  program
2254
2290
  .command("links <memoryPath>")
2255
2291
  .description("Show wikilinks for a memory — both outgoing [[links]] and backlinks from other memories")
2256
- .action(async (memPath) => {
2292
+ .option("--json", "Output as JSON")
2293
+ .action(async (memPath, opts) => {
2257
2294
  const resolver = await getResolver();
2258
2295
  const memory = await resolver.readMemory(memPath);
2259
2296
  if (!memory) {
@@ -2263,33 +2300,41 @@ program
2263
2300
  const allMemories = await resolver.getAllMemories();
2264
2301
  const outgoing = getOutgoingLinks(allMemories, memory.relativePath);
2265
2302
  const backlinks = getBacklinks(allMemories, memory.relativePath);
2266
- console.log(`Links for ${memory.frontmatter.title}:\n`);
2267
- if (outgoing.length > 0) {
2268
- console.log(` Outgoing (${outgoing.length}):`);
2269
- for (const link of outgoing) {
2270
- const display = link.displayText ? ` (${link.displayText})` : "";
2271
- console.log(` [[${link.target}]]${display}`);
2303
+ outputResult(!!opts.json, {
2304
+ memoryPath: memPath,
2305
+ title: memory.frontmatter.title,
2306
+ outgoing,
2307
+ backlinks,
2308
+ }, () => {
2309
+ console.log(`Links for ${memory.frontmatter.title}:\n`);
2310
+ if (outgoing.length > 0) {
2311
+ console.log(` Outgoing (${outgoing.length}):`);
2312
+ for (const link of outgoing) {
2313
+ const display = link.displayText ? ` (${link.displayText})` : "";
2314
+ console.log(` → [[${link.target}]]${display}`);
2315
+ }
2272
2316
  }
2273
- }
2274
- else {
2275
- console.log(" No outgoing links.");
2276
- }
2277
- console.log();
2278
- if (backlinks.length > 0) {
2279
- console.log(` Backlinks (${backlinks.length}):`);
2280
- for (const link of backlinks) {
2281
- console.log(` ← ${link.sourceTitle} (${link.sourcePath})`);
2317
+ else {
2318
+ console.log(" No outgoing links.");
2282
2319
  }
2283
- }
2284
- else {
2285
- console.log(" No backlinks.");
2286
- }
2320
+ console.log();
2321
+ if (backlinks.length > 0) {
2322
+ console.log(` Backlinks (${backlinks.length}):`);
2323
+ for (const link of backlinks) {
2324
+ console.log(` ← ${link.sourceTitle} (${link.sourcePath})`);
2325
+ }
2326
+ }
2327
+ else {
2328
+ console.log(" No backlinks.");
2329
+ }
2330
+ });
2287
2331
  });
2288
2332
  // ─── gnosys graph ───────────────────────────────────────────────────────
2289
2333
  program
2290
2334
  .command("graph")
2291
2335
  .description("Show the [[wikilink]] cross-reference graph between memories. Empty until you start using [[Title]] in memory content — then this shows which memories reference each other.")
2292
- .action(async () => {
2336
+ .option("--json", "Output as JSON")
2337
+ .action(async (opts) => {
2293
2338
  // v5.4.1: Query the central DB directly. Previously this used the
2294
2339
  // filesystem resolver, which returns nothing in v5.x DB-only mode
2295
2340
  // because memories no longer live as markdown files.
@@ -2302,7 +2347,9 @@ program
2302
2347
  }
2303
2348
  const dbMemories = centralDb.getAllMemories();
2304
2349
  if (dbMemories.length === 0) {
2305
- console.log("No memories found.");
2350
+ outputResult(!!opts.json, { totalLinks: 0, orphanedLinks: [], nodes: [] }, () => {
2351
+ console.log("No memories found.");
2352
+ });
2306
2353
  return;
2307
2354
  }
2308
2355
  // Adapt DbMemory → legacy Memory shape that buildLinkGraph expects.
@@ -2339,7 +2386,13 @@ program
2339
2386
  };
2340
2387
  });
2341
2388
  const graph = buildLinkGraph(adapted);
2342
- console.log(formatGraphSummary(graph));
2389
+ outputResult(!!opts.json, {
2390
+ totalLinks: graph.totalLinks,
2391
+ orphanedLinks: graph.orphanedLinks,
2392
+ nodes: Array.from(graph.nodes.values()),
2393
+ }, () => {
2394
+ console.log(formatGraphSummary(graph));
2395
+ });
2343
2396
  }
2344
2397
  finally {
2345
2398
  centralDb?.close();
@@ -2689,6 +2742,7 @@ program
2689
2742
  .command("semantic-search <query>")
2690
2743
  .description("Search using semantic similarity only (requires embeddings)")
2691
2744
  .option("-l, --limit <n>", "Max results", "15")
2745
+ .option("--json", "Output as JSON")
2692
2746
  .action(async (query, opts) => {
2693
2747
  const resolver = await getResolver();
2694
2748
  const stores = resolver.getStores();
@@ -2707,10 +2761,20 @@ program
2707
2761
  const embeddings = new GnosysEmbeddings(storePath);
2708
2762
  const hybridSearch = new GnosysHybridSearch(search, embeddings, resolver, storePath);
2709
2763
  const results = await hybridSearch.hybridSearch(query, parseInt(opts.limit), "semantic");
2710
- if (results.length === 0) {
2711
- console.log(`No semantic results for "${query}". Run gnosys reindex first.`);
2712
- }
2713
- else {
2764
+ outputResult(!!opts.json, {
2765
+ query,
2766
+ count: results.length,
2767
+ results: results.map((r) => ({
2768
+ title: r.title,
2769
+ relativePath: r.relativePath,
2770
+ score: r.score,
2771
+ snippet: r.snippet,
2772
+ })),
2773
+ }, () => {
2774
+ if (results.length === 0) {
2775
+ console.log(`No semantic results for "${query}". Run gnosys reindex first.`);
2776
+ return;
2777
+ }
2714
2778
  console.log(`Found ${results.length} semantic results for "${query}":\n`);
2715
2779
  for (const r of results) {
2716
2780
  console.log(` ${r.title}`);
@@ -2718,7 +2782,7 @@ program
2718
2782
  console.log(` Similarity: ${r.score.toFixed(4)}`);
2719
2783
  console.log(` ${r.snippet.substring(0, 120)}...\n`);
2720
2784
  }
2721
- }
2785
+ });
2722
2786
  search.close();
2723
2787
  embeddings.close();
2724
2788
  });
@@ -2732,6 +2796,7 @@ program
2732
2796
  .option("--federated", "Use federated search with tier boosting (project > user > global)")
2733
2797
  .option("--scope <scope>", "Filter by scope: project, user, global (comma-separated)")
2734
2798
  .option("-d, --directory <dir>", "Project directory for context")
2799
+ .option("--json", "Output as JSON")
2735
2800
  .action(async (question, opts) => {
2736
2801
  const resolver = await getResolver();
2737
2802
  const stores = resolver.getStores();
@@ -2808,7 +2873,7 @@ program
2808
2873
  }
2809
2874
  }
2810
2875
  const mode = opts.mode;
2811
- const useStream = opts.stream !== false;
2876
+ const useStream = opts.stream !== false && !opts.json;
2812
2877
  try {
2813
2878
  const result = await ask.ask(question, {
2814
2879
  limit: parseInt(opts.limit),
@@ -2827,25 +2892,35 @@ program
2827
2892
  }
2828
2893
  : undefined,
2829
2894
  });
2830
- if (!useStream) {
2831
- console.log(result.answer);
2832
- }
2833
- // Print sources
2834
- if (result.sources.length > 0) {
2835
- console.log("\n\n--- Sources ---");
2836
- for (const s of result.sources) {
2837
- console.log(` [[${s.relativePath.split("/").pop()}]] ${s.title}`);
2895
+ outputResult(!!opts.json, {
2896
+ question,
2897
+ answer: result.answer,
2898
+ sources: result.sources.map((s) => ({
2899
+ title: s.title,
2900
+ relativePath: s.relativePath,
2901
+ })),
2902
+ deepQueryUsed: result.deepQueryUsed ?? false,
2903
+ }, () => {
2904
+ if (!useStream) {
2905
+ console.log(result.answer);
2906
+ }
2907
+ if (result.sources.length > 0) {
2908
+ console.log("\n\n--- Sources ---");
2909
+ for (const s of result.sources) {
2910
+ console.log(` [[${s.relativePath.split("/").pop()}]] — ${s.title}`);
2911
+ }
2912
+ }
2913
+ if (result.deepQueryUsed) {
2914
+ console.log("\n(Deep query was used — a follow-up search expanded the context)");
2838
2915
  }
2839
- // Reinforce used memories (best-effort)
2916
+ });
2917
+ if (result.sources.length > 0) {
2840
2918
  const writeTarget = resolver.getWriteTarget();
2841
2919
  if (writeTarget) {
2842
2920
  const { GnosysMaintenanceEngine } = await import("./lib/maintenance.js");
2843
2921
  await GnosysMaintenanceEngine.reinforceBatch(writeTarget.store, result.sources.map((s) => s.relativePath)).catch(() => { });
2844
2922
  }
2845
2923
  }
2846
- if (result.deepQueryUsed) {
2847
- console.log("\n(Deep query was used — a follow-up search expanded the context)");
2848
- }
2849
2924
  }
2850
2925
  catch (err) {
2851
2926
  console.error(`Ask failed: ${err instanceof Error ? err.message : String(err)}`);
@@ -3254,7 +3329,7 @@ program
3254
3329
  }
3255
3330
  const archive = new GnosysArchive(writeTarget.path);
3256
3331
  if (!archive.isAvailable()) {
3257
- console.error("Archive not available. Is better-sqlite3 installed?");
3332
+ console.error("Archive not available. Install it with: npm install better-sqlite3");
3258
3333
  process.exit(1);
3259
3334
  }
3260
3335
  const results = archive.searchArchive(query, parseInt(opts.limit));
@@ -3598,20 +3673,27 @@ program
3598
3673
  // global binary (see src/lib/upgrade.ts).
3599
3674
  program
3600
3675
  .command("upgrade")
3601
- .description("Upgrade gnosys itself (npm install -g gnosys@latest) and signal running MCP servers to restart. After upgrading, suggests running 'gnosys setup sync-projects'.")
3676
+ .description("Upgrade gnosys itself and signal running MCP servers to restart. After upgrading, suggests running 'gnosys setup sync-projects'.")
3602
3677
  .option("--yes", "Skip the post-upgrade sync-projects prompt and exit")
3603
3678
  .option("--no-sync", "Don't suggest running sync-projects afterward")
3604
3679
  .action(async (opts) => {
3605
3680
  const currentVersion = pkg.version;
3606
3681
  console.log(`Gnosys CLI: currently v${currentVersion}`);
3607
- console.log(`Running: npm install -g gnosys@latest ...`);
3682
+ const { detectPackageManager, upgradeCommand } = await import("./lib/packageManager.js");
3683
+ const pm = detectPackageManager();
3684
+ const cmd = upgradeCommand(pm);
3685
+ if (!cmd) {
3686
+ console.log("Running under npx — there's no global install to upgrade. Use `npx gnosys@latest` to run the latest.");
3687
+ return;
3688
+ }
3689
+ console.log(`Running: ${cmd} ...`);
3608
3690
  const { execSync } = await import("child_process");
3609
3691
  try {
3610
- execSync("npm install -g gnosys@latest", { stdio: "inherit" });
3692
+ execSync(cmd, { stdio: "inherit" });
3611
3693
  }
3612
3694
  catch (err) {
3613
3695
  console.error(`\nUpgrade failed: ${err instanceof Error ? err.message : err}`);
3614
- console.error(`Try running 'npm install -g gnosys@latest' manually.`);
3696
+ console.error(`Try running '${cmd}' manually.`);
3615
3697
  process.exit(1);
3616
3698
  }
3617
3699
  // Read the newly-installed version (best-effort — we may still be the
@@ -3898,6 +3980,7 @@ async function isLegacyStoreSafeToRemove(localDbPath) {
3898
3980
  try {
3899
3981
  const Database = (await import("better-sqlite3")).default;
3900
3982
  const localDb = new Database(localDbPath, { readonly: true });
3983
+ localDb.pragma("busy_timeout = 5000");
3901
3984
  let localIds = [];
3902
3985
  try {
3903
3986
  const rows = localDb.prepare("SELECT id FROM memories").all();
@@ -4322,6 +4405,9 @@ exportCmd
4322
4405
  const ratio = (result.compressedBytes / result.uncompressedBytes * 100).toFixed(1);
4323
4406
  console.log(`Exported project ${projectId}`);
4324
4407
  console.log(` Memories: ${result.memoryCount}`);
4408
+ if (result.archivedExcluded > 0) {
4409
+ console.log(` Archived: ${result.archivedExcluded} excluded — re-run with --include-archived for a full backup`);
4410
+ }
4325
4411
  console.log(` Relationships: ${result.relationshipCount}`);
4326
4412
  console.log(` Audit entries: ${result.auditEntryCount}`);
4327
4413
  console.log(` Bundle: ${result.outputPath}`);
@@ -4337,7 +4423,18 @@ program
4337
4423
  .command("serve")
4338
4424
  .description("Start the MCP server (stdio mode). Used by IDE integrations — Claude Code/Desktop, Cursor, Codex, etc. spawn this command in the background to talk to gnosys via the Model Context Protocol. You don't normally invoke this yourself; `gnosys init <ide>` wires it into the IDE config.")
4339
4425
  .option("--with-maintenance", "Run maintenance every 6 hours in background")
4426
+ .option("--transport <mode>", "Transport: 'stdio' (default) or 'http' (central-server topology)", "stdio")
4427
+ .option("--host <addr>", "HTTP bind address — http transport (default 127.0.0.1; use a tailnet addr to share)", "127.0.0.1")
4428
+ .option("--port <n>", "HTTP port — http transport", "7777")
4429
+ .option("--token <token>", "Require 'Authorization: Bearer <token>' — http transport")
4340
4430
  .action(async (opts) => {
4431
+ if (opts.transport === "http") {
4432
+ process.env.GNOSYS_TRANSPORT = "http";
4433
+ process.env.GNOSYS_HTTP_HOST = opts.host || "127.0.0.1";
4434
+ process.env.GNOSYS_HTTP_PORT = String(opts.port || "7777");
4435
+ if (opts.token)
4436
+ process.env.GNOSYS_SERVE_TOKEN = opts.token;
4437
+ }
4341
4438
  if (opts.withMaintenance) {
4342
4439
  // Start background maintenance loop
4343
4440
  const SIX_HOURS = 6 * 60 * 60 * 1000;
@@ -4715,6 +4812,55 @@ program
4715
4812
  function isDeadProjectDir(dir) {
4716
4813
  return !existsSync(dir);
4717
4814
  }
4815
+ program
4816
+ .command("connect")
4817
+ .description("Point an IDE at a remote gnosys server (central-server topology) instead of spawning a local one")
4818
+ .requiredOption("--url <url>", "Remote MCP URL, e.g. http://studio.tailnet.ts.net:7777/mcp")
4819
+ .option("--token <token>", "Bearer token if the server requires auth")
4820
+ .option("--ide <ide>", "IDE config to write: cursor | claude-desktop", "cursor")
4821
+ .option("--dir <dir>", "Project dir for cursor config (default: cwd)")
4822
+ .option("--print", "Print the config snippet instead of writing files")
4823
+ .action(async (opts) => {
4824
+ const m = await import("./lib/mcpClientConfig.js");
4825
+ const remote = { url: opts.url, token: opts.token };
4826
+ if (opts.print) {
4827
+ console.log(JSON.stringify({ mcpServers: { gnosys: m.remoteMcpEntry(remote) } }, null, 2));
4828
+ return;
4829
+ }
4830
+ const ide = opts.ide === "claude-desktop" ? "claude-desktop" : "cursor";
4831
+ try {
4832
+ const file = await m.writeRemoteClientConfig(ide, opts.dir || process.cwd(), remote);
4833
+ console.log(`✓ Pointed ${ide} at ${opts.url}`);
4834
+ console.log(` wrote: ${file}${opts.token ? " (bearer token included)" : ""}`);
4835
+ console.log(" Restart the IDE / MCP servers to pick it up.");
4836
+ }
4837
+ catch (e) {
4838
+ console.error(`connect failed: ${e instanceof Error ? e.message : e}`);
4839
+ process.exit(1);
4840
+ }
4841
+ });
4842
+ program
4843
+ .command("centralize")
4844
+ .description("Copy this machine's local brain (~/.gnosys/gnosys.db) to seed a central server — a Docker volume or another host")
4845
+ .requiredOption("--to <dir>", "Target directory to write gnosys.db into (e.g. a mounted volume)")
4846
+ .option("--from-local", "Source is this machine's local brain (default)")
4847
+ .option("--force", "Overwrite an existing gnosys.db at the target")
4848
+ .action(async (opts) => {
4849
+ const { centralizeDb } = await import("./lib/centralize.js");
4850
+ try {
4851
+ const r = await centralizeDb({ to: opts.to, force: opts.force });
4852
+ const mb = (r.bytes / 1024 / 1024).toFixed(1);
4853
+ console.log("✓ Seeded central brain:");
4854
+ console.log(` from: ${r.source}`);
4855
+ console.log(` to: ${r.target} (${mb} MB)`);
4856
+ console.log("");
4857
+ console.log(`Run the server against it with GNOSYS_HOME=${opts.to}, or mount this dir as the container's /data volume.`);
4858
+ }
4859
+ catch (e) {
4860
+ console.error(`centralize failed: ${e instanceof Error ? e.message : e}`);
4861
+ process.exit(1);
4862
+ }
4863
+ });
4718
4864
  const machineCmd = program
4719
4865
  .command("machine")
4720
4866
  .description("Manage this machine's local config (machine.json: machineId, roots, remote)");
@@ -4954,6 +5100,13 @@ prefCmd
4954
5100
  console.error("Central DB not available (better-sqlite3 missing).");
4955
5101
  process.exit(1);
4956
5102
  }
5103
+ if (!KNOWN_PREFERENCE_KEYS.includes(key)) {
5104
+ const suggestion = suggestPreferenceKey(key);
5105
+ if (suggestion) {
5106
+ console.error(`Unknown preference key \`${key}\` — did you mean \`${suggestion}\`?`);
5107
+ process.exit(1);
5108
+ }
5109
+ }
4957
5110
  const tags = opts.tags ? opts.tags.split(",").map((t) => t.trim()) : undefined;
4958
5111
  const pref = setPreference(centralDb, key, value, { title: opts.title, tags });
4959
5112
  console.log(`Preference set: ${pref.title}`);
@@ -5394,8 +5547,8 @@ program
5394
5547
  const dashboardPath = path.join(home, "gnosys-dashboard.html");
5395
5548
  const { writeFileSync } = await import("fs");
5396
5549
  writeFileSync(dashboardPath, generatePortfolioHtml(report, dashboardPath), "utf-8");
5397
- const { exec } = await import("child_process");
5398
- exec(`open "${dashboardPath}"`);
5550
+ const { execFile } = await import("child_process");
5551
+ execFile("open", [dashboardPath]);
5399
5552
  console.log(`Dashboard opened: ${dashboardPath}`);
5400
5553
  return;
5401
5554
  }
@@ -5729,7 +5882,7 @@ program
5729
5882
  const dbDir = GnosysDB.getCentralDbDir();
5730
5883
  const db = new GnosysDB(dbDir);
5731
5884
  if (!db.isAvailable()) {
5732
- console.error("Error: GnosysDB not available. Is better-sqlite3 installed?");
5885
+ console.error("Error: GnosysDB not available. Install it with: npm install better-sqlite3");
5733
5886
  process.exit(1);
5734
5887
  }
5735
5888
  const result = traceCodebase(db, directory, {
@@ -5774,7 +5927,7 @@ program
5774
5927
  const dbDir = GnosysDB.getCentralDbDir();
5775
5928
  const db = new GnosysDB(dbDir);
5776
5929
  if (!db.isAvailable()) {
5777
- console.error("Error: GnosysDB not available. Is better-sqlite3 installed?");
5930
+ console.error("Error: GnosysDB not available. Install it with: npm install better-sqlite3");
5778
5931
  process.exit(1);
5779
5932
  }
5780
5933
  const params = {
@@ -5834,7 +5987,7 @@ program
5834
5987
  const dbDir = GnosysDB.getCentralDbDir();
5835
5988
  const db = new GnosysDB(dbDir);
5836
5989
  if (!db.isAvailable()) {
5837
- console.error("Error: GnosysDB not available. Is better-sqlite3 installed?");
5990
+ console.error("Error: GnosysDB not available. Install it with: npm install better-sqlite3");
5838
5991
  process.exit(1);
5839
5992
  }
5840
5993
  const params = {
@@ -6571,4 +6724,3 @@ if (!isTestEnv()) {
6571
6724
  }
6572
6725
  }
6573
6726
  program.parse();
6574
- //# sourceMappingURL=cli.js.map