gnosys 5.9.5 → 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.
- package/README.md +91 -771
- package/dist/cli.d.ts +0 -1
- package/dist/cli.js +403 -141
- package/dist/index.d.ts +3 -1
- package/dist/index.js +427 -348
- package/dist/lib/archive.d.ts +3 -4
- package/dist/lib/archive.js +0 -1
- package/dist/lib/ask.d.ts +3 -4
- package/dist/lib/ask.js +0 -1
- package/dist/lib/atomicWrite.d.ts +7 -0
- package/dist/lib/atomicWrite.js +46 -0
- package/dist/lib/attachments.d.ts +0 -1
- package/dist/lib/attachments.js +0 -1
- package/dist/lib/audioExtract.d.ts +0 -1
- package/dist/lib/audioExtract.js +0 -1
- package/dist/lib/audit.d.ts +0 -1
- package/dist/lib/audit.js +0 -1
- package/dist/lib/bootstrap.d.ts +1 -2
- package/dist/lib/bootstrap.js +0 -1
- package/dist/lib/centralize.d.ts +20 -0
- package/dist/lib/centralize.js +34 -0
- package/dist/lib/chat/SlashPalette.d.ts +2 -3
- package/dist/lib/chat/SlashPalette.js +0 -1
- package/dist/lib/chat/boot-splash.d.ts +1 -2
- package/dist/lib/chat/boot-splash.js +0 -1
- package/dist/lib/chat/choose.d.ts +0 -1
- package/dist/lib/chat/choose.js +0 -2
- package/dist/lib/chat/commands.d.ts +1 -2
- package/dist/lib/chat/commands.js +0 -1
- package/dist/lib/chat/components/CitationText.d.ts +1 -2
- package/dist/lib/chat/components/CitationText.js +0 -1
- package/dist/lib/chat/components/MarkdownRenderer.d.ts +0 -1
- package/dist/lib/chat/components/MarkdownRenderer.js +0 -1
- package/dist/lib/chat/components/ToolCallCard.d.ts +1 -2
- package/dist/lib/chat/components/ToolCallCard.js +0 -1
- package/dist/lib/chat/focus.d.ts +3 -3
- package/dist/lib/chat/focus.js +0 -1
- package/dist/lib/chat/index.d.ts +3 -4
- package/dist/lib/chat/index.js +2 -2
- package/dist/lib/chat/intent.d.ts +1 -17
- package/dist/lib/chat/intent.js +2 -3
- package/dist/lib/chat/llmTurn.d.ts +5 -6
- package/dist/lib/chat/llmTurn.js +0 -1
- package/dist/lib/chat/recall.d.ts +2 -3
- package/dist/lib/chat/recall.js +1 -2
- package/dist/lib/chat/render.d.ts +2 -3
- package/dist/lib/chat/render.js +0 -1
- package/dist/lib/chat/session.d.ts +0 -1
- package/dist/lib/chat/session.js +0 -1
- package/dist/lib/chat/theme.d.ts +0 -1
- package/dist/lib/chat/theme.js +0 -1
- package/dist/lib/chat/toolFence.d.ts +2 -2
- package/dist/lib/chat/toolFence.js +0 -1
- package/dist/lib/chat/tools.d.ts +0 -1
- package/dist/lib/chat/tools.js +0 -1
- package/dist/lib/chat/types.d.ts +0 -1
- package/dist/lib/chat/types.js +0 -1
- package/dist/lib/chat/write.d.ts +5 -5
- package/dist/lib/chat/write.js +0 -1
- package/dist/lib/chunkSplitter.d.ts +0 -1
- package/dist/lib/chunkSplitter.js +0 -1
- package/dist/lib/cleanup.d.ts +0 -1
- package/dist/lib/cleanup.js +0 -1
- package/dist/lib/config.d.ts +0 -1
- package/dist/lib/config.js +3 -3
- package/dist/lib/dashboard.d.ts +3 -4
- package/dist/lib/dashboard.js +5 -2
- package/dist/lib/db.d.ts +24 -1
- package/dist/lib/db.js +162 -16
- package/dist/lib/dbSearch.d.ts +3 -4
- package/dist/lib/dbSearch.js +0 -1
- package/dist/lib/dbWrite.d.ts +2 -3
- package/dist/lib/dbWrite.js +0 -1
- package/dist/lib/desktopNotify.d.ts +0 -1
- package/dist/lib/desktopNotify.js +0 -1
- package/dist/lib/docxExtract.d.ts +0 -1
- package/dist/lib/docxExtract.js +22 -1
- package/dist/lib/dream.d.ts +2 -3
- package/dist/lib/dream.js +2 -2
- package/dist/lib/embeddings.d.ts +0 -3
- package/dist/lib/embeddings.js +7 -3
- package/dist/lib/export.d.ts +6 -2
- package/dist/lib/export.js +24 -2
- package/dist/lib/exportProject.d.ts +4 -3
- package/dist/lib/exportProject.js +3 -1
- package/dist/lib/federated.d.ts +3 -3
- package/dist/lib/federated.js +6 -4
- package/dist/lib/fileDetect.d.ts +0 -1
- package/dist/lib/fileDetect.js +0 -1
- package/dist/lib/graph.d.ts +4 -4
- package/dist/lib/graph.js +0 -1
- package/dist/lib/heartbeat.d.ts +0 -13
- package/dist/lib/heartbeat.js +1 -2
- package/dist/lib/hybridSearch.d.ts +5 -21
- package/dist/lib/hybridSearch.js +0 -1
- package/dist/lib/idFormat.d.ts +0 -2
- package/dist/lib/idFormat.js +1 -2
- package/dist/lib/imageExtract.d.ts +0 -1
- package/dist/lib/imageExtract.js +0 -1
- package/dist/lib/import.d.ts +6 -5
- package/dist/lib/import.js +3 -33
- package/dist/lib/importProject.d.ts +4 -4
- package/dist/lib/importProject.js +1 -2
- package/dist/lib/ingest.d.ts +3 -4
- package/dist/lib/ingest.js +0 -1
- package/dist/lib/lensing.d.ts +1 -2
- package/dist/lib/lensing.js +0 -1
- package/dist/lib/llm.d.ts +6 -45
- package/dist/lib/llm.js +27 -9
- package/dist/lib/lock.d.ts +0 -1
- package/dist/lib/lock.js +0 -1
- package/dist/lib/log.d.ts +4 -0
- package/dist/lib/log.js +85 -0
- package/dist/lib/machineConfig.d.ts +86 -0
- package/dist/lib/machineConfig.js +157 -0
- package/dist/lib/machineMigrate.d.ts +38 -0
- package/dist/lib/machineMigrate.js +102 -0
- package/dist/lib/maintenance.d.ts +4 -5
- package/dist/lib/maintenance.js +0 -1
- package/dist/lib/mcpClientConfig.d.ts +20 -0
- package/dist/lib/mcpClientConfig.js +62 -0
- package/dist/lib/mcpHttp.d.ts +52 -0
- package/dist/lib/mcpHttp.js +227 -0
- package/dist/lib/migrate.d.ts +1 -2
- package/dist/lib/migrate.js +1 -1
- package/dist/lib/modelValidation.d.ts +0 -1
- package/dist/lib/modelValidation.js +0 -1
- package/dist/lib/multimodalIngest.d.ts +1 -2
- package/dist/lib/multimodalIngest.js +0 -1
- package/dist/lib/packageManager.d.ts +5 -0
- package/dist/lib/packageManager.js +30 -0
- package/dist/lib/paths.d.ts +11 -7
- package/dist/lib/paths.js +14 -2
- package/dist/lib/pdfExtract.d.ts +0 -1
- package/dist/lib/pdfExtract.js +0 -1
- package/dist/lib/portfolio.d.ts +1 -2
- package/dist/lib/portfolio.js +10 -3
- package/dist/lib/portfolioHtml.d.ts +1 -2
- package/dist/lib/portfolioHtml.js +0 -1
- package/dist/lib/preferences.d.ts +6 -2
- package/dist/lib/preferences.js +19 -1
- package/dist/lib/progress.d.ts +2 -2
- package/dist/lib/progress.js +0 -1
- package/dist/lib/projectIdentity.d.ts +1 -2
- package/dist/lib/projectIdentity.js +5 -5
- package/dist/lib/projectPaths.d.ts +60 -0
- package/dist/lib/projectPaths.js +99 -0
- package/dist/lib/projectScan.d.ts +40 -0
- package/dist/lib/projectScan.js +96 -0
- package/dist/lib/recall.d.ts +6 -6
- package/dist/lib/recall.js +0 -1
- package/dist/lib/remote.d.ts +3 -20
- package/dist/lib/remote.js +44 -2
- package/dist/lib/remoteWizard.d.ts +2 -3
- package/dist/lib/remoteWizard.js +0 -1
- package/dist/lib/resolver.d.ts +1 -2
- package/dist/lib/resolver.js +2 -3
- package/dist/lib/retry.d.ts +0 -1
- package/dist/lib/retry.js +1 -2
- package/dist/lib/rulesGen.d.ts +2 -8
- package/dist/lib/rulesGen.js +1 -2
- package/dist/lib/search.d.ts +1 -2
- package/dist/lib/search.js +1 -1
- package/dist/lib/searchTypes.d.ts +18 -0
- package/dist/lib/searchTypes.js +2 -0
- package/dist/lib/setup/coldStart.d.ts +0 -1
- package/dist/lib/setup/coldStart.js +0 -1
- package/dist/lib/setup/configSetRender.d.ts +0 -1
- package/dist/lib/setup/configSetRender.js +0 -1
- package/dist/lib/setup/dreamRender.d.ts +0 -1
- package/dist/lib/setup/dreamRender.js +0 -1
- package/dist/lib/setup/dreamState.d.ts +2 -2
- package/dist/lib/setup/dreamState.js +0 -1
- package/dist/lib/setup/modelsRender.d.ts +0 -1
- package/dist/lib/setup/modelsRender.js +0 -1
- package/dist/lib/setup/remoteRender.d.ts +0 -1
- package/dist/lib/setup/remoteRender.js +0 -1
- package/dist/lib/setup/routingRender.d.ts +0 -1
- package/dist/lib/setup/routingRender.js +0 -1
- package/dist/lib/setup/sections/ides.d.ts +1 -2
- package/dist/lib/setup/sections/ides.js +3 -2
- package/dist/lib/setup/sections/preferences.d.ts +1 -2
- package/dist/lib/setup/sections/preferences.js +3 -2
- package/dist/lib/setup/sections/routing.d.ts +1 -2
- package/dist/lib/setup/sections/routing.js +0 -1
- package/dist/lib/setup/storePath.d.ts +0 -1
- package/dist/lib/setup/storePath.js +0 -1
- package/dist/lib/setup/summary.d.ts +1 -2
- package/dist/lib/setup/summary.js +0 -1
- package/dist/lib/setup/syncProjectsRender.d.ts +0 -1
- package/dist/lib/setup/syncProjectsRender.js +0 -1
- package/dist/lib/setup/ui/diff.d.ts +0 -1
- package/dist/lib/setup/ui/diff.js +0 -1
- package/dist/lib/setup/ui/footer.d.ts +0 -1
- package/dist/lib/setup/ui/footer.js +0 -1
- package/dist/lib/setup/ui/header.d.ts +0 -1
- package/dist/lib/setup/ui/header.js +0 -1
- package/dist/lib/setup/ui/index.d.ts +0 -1
- package/dist/lib/setup/ui/index.js +0 -1
- package/dist/lib/setup/ui/menu.d.ts +0 -1
- package/dist/lib/setup/ui/menu.js +0 -1
- package/dist/lib/setup/ui/panel.d.ts +0 -1
- package/dist/lib/setup/ui/panel.js +0 -1
- package/dist/lib/setup/ui/prompt.d.ts +0 -1
- package/dist/lib/setup/ui/prompt.js +0 -1
- package/dist/lib/setup/ui/safePrompt.d.ts +0 -1
- package/dist/lib/setup/ui/safePrompt.js +0 -1
- package/dist/lib/setup/ui/spinner.d.ts +0 -1
- package/dist/lib/setup/ui/spinner.js +0 -1
- package/dist/lib/setup/ui/status.d.ts +0 -1
- package/dist/lib/setup/ui/status.js +0 -1
- package/dist/lib/setup/ui/table.d.ts +0 -1
- package/dist/lib/setup/ui/table.js +0 -1
- package/dist/lib/setup/ui/title.d.ts +0 -1
- package/dist/lib/setup/ui/title.js +0 -1
- package/dist/lib/setup/ui/tokens.d.ts +0 -1
- package/dist/lib/setup/ui/tokens.js +0 -1
- package/dist/lib/setup.d.ts +2 -31
- package/dist/lib/setup.js +13 -9
- package/dist/lib/staticSearch.d.ts +0 -1
- package/dist/lib/staticSearch.js +0 -1
- package/dist/lib/store.d.ts +0 -1
- package/dist/lib/store.js +0 -1
- package/dist/lib/structuredIngest.d.ts +0 -1
- package/dist/lib/structuredIngest.js +0 -1
- package/dist/lib/tags.d.ts +0 -1
- package/dist/lib/tags.js +0 -1
- package/dist/lib/timeline.d.ts +2 -3
- package/dist/lib/timeline.js +3 -4
- package/dist/lib/trace.d.ts +1 -16
- package/dist/lib/trace.js +0 -1
- package/dist/lib/upgrade.d.ts +0 -1
- package/dist/lib/upgrade.js +0 -1
- package/dist/lib/videoExtract.d.ts +0 -1
- package/dist/lib/videoExtract.js +0 -1
- package/dist/lib/webIndex.d.ts +1 -3
- package/dist/lib/webIndex.js +0 -1
- package/dist/lib/webIngest.d.ts +13 -1
- package/dist/lib/webIngest.js +98 -24
- package/dist/lib/wikilinks.d.ts +3 -3
- package/dist/lib/wikilinks.js +0 -1
- package/dist/postinstall.d.ts +0 -1
- package/dist/postinstall.js +0 -1
- package/dist/sandbox/client.d.ts +0 -1
- package/dist/sandbox/client.js +0 -1
- package/dist/sandbox/helper-template.d.ts +0 -1
- package/dist/sandbox/helper-template.js +0 -1
- package/dist/sandbox/manager.d.ts +0 -9
- package/dist/sandbox/manager.js +2 -3
- package/dist/sandbox/server.d.ts +2 -3
- package/dist/sandbox/server.js +7 -7
- package/docs/logo.svg +25 -0
- package/package.json +18 -6
- package/prompts/synthesize.md +2 -0
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/lib/archive.d.ts.map +0 -1
- package/dist/lib/archive.js.map +0 -1
- package/dist/lib/ask.d.ts.map +0 -1
- package/dist/lib/ask.js.map +0 -1
- package/dist/lib/attachments.d.ts.map +0 -1
- package/dist/lib/attachments.js.map +0 -1
- package/dist/lib/audioExtract.d.ts.map +0 -1
- package/dist/lib/audioExtract.js.map +0 -1
- package/dist/lib/audit.d.ts.map +0 -1
- package/dist/lib/audit.js.map +0 -1
- package/dist/lib/bootstrap.d.ts.map +0 -1
- package/dist/lib/bootstrap.js.map +0 -1
- package/dist/lib/chat/SlashPalette.d.ts.map +0 -1
- package/dist/lib/chat/SlashPalette.js.map +0 -1
- package/dist/lib/chat/boot-splash.d.ts.map +0 -1
- package/dist/lib/chat/boot-splash.js.map +0 -1
- package/dist/lib/chat/choose.d.ts.map +0 -1
- package/dist/lib/chat/choose.js.map +0 -1
- package/dist/lib/chat/commands.d.ts.map +0 -1
- package/dist/lib/chat/commands.js.map +0 -1
- package/dist/lib/chat/components/CitationText.d.ts.map +0 -1
- package/dist/lib/chat/components/CitationText.js.map +0 -1
- package/dist/lib/chat/components/MarkdownRenderer.d.ts.map +0 -1
- package/dist/lib/chat/components/MarkdownRenderer.js.map +0 -1
- package/dist/lib/chat/components/ToolCallCard.d.ts.map +0 -1
- package/dist/lib/chat/components/ToolCallCard.js.map +0 -1
- package/dist/lib/chat/focus.d.ts.map +0 -1
- package/dist/lib/chat/focus.js.map +0 -1
- package/dist/lib/chat/index.d.ts.map +0 -1
- package/dist/lib/chat/index.js.map +0 -1
- package/dist/lib/chat/intent.d.ts.map +0 -1
- package/dist/lib/chat/intent.js.map +0 -1
- package/dist/lib/chat/llmTurn.d.ts.map +0 -1
- package/dist/lib/chat/llmTurn.js.map +0 -1
- package/dist/lib/chat/recall.d.ts.map +0 -1
- package/dist/lib/chat/recall.js.map +0 -1
- package/dist/lib/chat/render.d.ts.map +0 -1
- package/dist/lib/chat/render.js.map +0 -1
- package/dist/lib/chat/session.d.ts.map +0 -1
- package/dist/lib/chat/session.js.map +0 -1
- package/dist/lib/chat/theme.d.ts.map +0 -1
- package/dist/lib/chat/theme.js.map +0 -1
- package/dist/lib/chat/toolFence.d.ts.map +0 -1
- package/dist/lib/chat/toolFence.js.map +0 -1
- package/dist/lib/chat/tools.d.ts.map +0 -1
- package/dist/lib/chat/tools.js.map +0 -1
- package/dist/lib/chat/types.d.ts.map +0 -1
- package/dist/lib/chat/types.js.map +0 -1
- package/dist/lib/chat/write.d.ts.map +0 -1
- package/dist/lib/chat/write.js.map +0 -1
- package/dist/lib/chunkSplitter.d.ts.map +0 -1
- package/dist/lib/chunkSplitter.js.map +0 -1
- package/dist/lib/cleanup.d.ts.map +0 -1
- package/dist/lib/cleanup.js.map +0 -1
- package/dist/lib/config.d.ts.map +0 -1
- package/dist/lib/config.js.map +0 -1
- package/dist/lib/dashboard.d.ts.map +0 -1
- package/dist/lib/dashboard.js.map +0 -1
- package/dist/lib/db.d.ts.map +0 -1
- package/dist/lib/db.js.map +0 -1
- package/dist/lib/dbSearch.d.ts.map +0 -1
- package/dist/lib/dbSearch.js.map +0 -1
- package/dist/lib/dbWrite.d.ts.map +0 -1
- package/dist/lib/dbWrite.js.map +0 -1
- package/dist/lib/desktopNotify.d.ts.map +0 -1
- package/dist/lib/desktopNotify.js.map +0 -1
- package/dist/lib/docxExtract.d.ts.map +0 -1
- package/dist/lib/docxExtract.js.map +0 -1
- package/dist/lib/dream.d.ts.map +0 -1
- package/dist/lib/dream.js.map +0 -1
- package/dist/lib/embeddings.d.ts.map +0 -1
- package/dist/lib/embeddings.js.map +0 -1
- package/dist/lib/export.d.ts.map +0 -1
- package/dist/lib/export.js.map +0 -1
- package/dist/lib/exportProject.d.ts.map +0 -1
- package/dist/lib/exportProject.js.map +0 -1
- package/dist/lib/federated.d.ts.map +0 -1
- package/dist/lib/federated.js.map +0 -1
- package/dist/lib/fileDetect.d.ts.map +0 -1
- package/dist/lib/fileDetect.js.map +0 -1
- package/dist/lib/graph.d.ts.map +0 -1
- package/dist/lib/graph.js.map +0 -1
- package/dist/lib/heartbeat.d.ts.map +0 -1
- package/dist/lib/heartbeat.js.map +0 -1
- package/dist/lib/history.d.ts +0 -39
- package/dist/lib/history.d.ts.map +0 -1
- package/dist/lib/history.js +0 -112
- package/dist/lib/history.js.map +0 -1
- package/dist/lib/hybridSearch.d.ts.map +0 -1
- package/dist/lib/hybridSearch.js.map +0 -1
- package/dist/lib/idFormat.d.ts.map +0 -1
- package/dist/lib/idFormat.js.map +0 -1
- package/dist/lib/imageExtract.d.ts.map +0 -1
- package/dist/lib/imageExtract.js.map +0 -1
- package/dist/lib/import.d.ts.map +0 -1
- package/dist/lib/import.js.map +0 -1
- package/dist/lib/importProject.d.ts.map +0 -1
- package/dist/lib/importProject.js.map +0 -1
- package/dist/lib/ingest.d.ts.map +0 -1
- package/dist/lib/ingest.js.map +0 -1
- package/dist/lib/lensing.d.ts.map +0 -1
- package/dist/lib/lensing.js.map +0 -1
- package/dist/lib/llm.d.ts.map +0 -1
- package/dist/lib/llm.js.map +0 -1
- package/dist/lib/lock.d.ts.map +0 -1
- package/dist/lib/lock.js.map +0 -1
- package/dist/lib/maintenance.d.ts.map +0 -1
- package/dist/lib/maintenance.js.map +0 -1
- package/dist/lib/migrate.d.ts.map +0 -1
- package/dist/lib/migrate.js.map +0 -1
- package/dist/lib/modelValidation.d.ts.map +0 -1
- package/dist/lib/modelValidation.js.map +0 -1
- package/dist/lib/multimodalIngest.d.ts.map +0 -1
- package/dist/lib/multimodalIngest.js.map +0 -1
- package/dist/lib/paths.d.ts.map +0 -1
- package/dist/lib/paths.js.map +0 -1
- package/dist/lib/pdfExtract.d.ts.map +0 -1
- package/dist/lib/pdfExtract.js.map +0 -1
- package/dist/lib/portfolio.d.ts.map +0 -1
- package/dist/lib/portfolio.js.map +0 -1
- package/dist/lib/portfolioHtml.d.ts.map +0 -1
- package/dist/lib/portfolioHtml.js.map +0 -1
- package/dist/lib/preferences.d.ts.map +0 -1
- package/dist/lib/preferences.js.map +0 -1
- package/dist/lib/progress.d.ts.map +0 -1
- package/dist/lib/progress.js.map +0 -1
- package/dist/lib/projectIdentity.d.ts.map +0 -1
- package/dist/lib/projectIdentity.js.map +0 -1
- package/dist/lib/recall.d.ts.map +0 -1
- package/dist/lib/recall.js.map +0 -1
- package/dist/lib/remote.d.ts.map +0 -1
- package/dist/lib/remote.js.map +0 -1
- package/dist/lib/remoteWizard.d.ts.map +0 -1
- package/dist/lib/remoteWizard.js.map +0 -1
- package/dist/lib/resolver.d.ts.map +0 -1
- package/dist/lib/resolver.js.map +0 -1
- package/dist/lib/retry.d.ts.map +0 -1
- package/dist/lib/retry.js.map +0 -1
- package/dist/lib/rulesGen.d.ts.map +0 -1
- package/dist/lib/rulesGen.js.map +0 -1
- package/dist/lib/search.d.ts.map +0 -1
- package/dist/lib/search.js.map +0 -1
- package/dist/lib/setup/coldStart.d.ts.map +0 -1
- package/dist/lib/setup/coldStart.js.map +0 -1
- package/dist/lib/setup/configSetRender.d.ts.map +0 -1
- package/dist/lib/setup/configSetRender.js.map +0 -1
- package/dist/lib/setup/dreamRender.d.ts.map +0 -1
- package/dist/lib/setup/dreamRender.js.map +0 -1
- package/dist/lib/setup/dreamState.d.ts.map +0 -1
- package/dist/lib/setup/dreamState.js.map +0 -1
- package/dist/lib/setup/modelsRender.d.ts.map +0 -1
- package/dist/lib/setup/modelsRender.js.map +0 -1
- package/dist/lib/setup/remoteRender.d.ts.map +0 -1
- package/dist/lib/setup/remoteRender.js.map +0 -1
- package/dist/lib/setup/routingRender.d.ts.map +0 -1
- package/dist/lib/setup/routingRender.js.map +0 -1
- package/dist/lib/setup/sections/ides.d.ts.map +0 -1
- package/dist/lib/setup/sections/ides.js.map +0 -1
- package/dist/lib/setup/sections/preferences.d.ts.map +0 -1
- package/dist/lib/setup/sections/preferences.js.map +0 -1
- package/dist/lib/setup/sections/routing.d.ts.map +0 -1
- package/dist/lib/setup/sections/routing.js.map +0 -1
- package/dist/lib/setup/storePath.d.ts.map +0 -1
- package/dist/lib/setup/storePath.js.map +0 -1
- package/dist/lib/setup/summary.d.ts.map +0 -1
- package/dist/lib/setup/summary.js.map +0 -1
- package/dist/lib/setup/syncProjectsRender.d.ts.map +0 -1
- package/dist/lib/setup/syncProjectsRender.js.map +0 -1
- package/dist/lib/setup/ui/diff.d.ts.map +0 -1
- package/dist/lib/setup/ui/diff.js.map +0 -1
- package/dist/lib/setup/ui/footer.d.ts.map +0 -1
- package/dist/lib/setup/ui/footer.js.map +0 -1
- package/dist/lib/setup/ui/header.d.ts.map +0 -1
- package/dist/lib/setup/ui/header.js.map +0 -1
- package/dist/lib/setup/ui/index.d.ts.map +0 -1
- package/dist/lib/setup/ui/index.js.map +0 -1
- package/dist/lib/setup/ui/menu.d.ts.map +0 -1
- package/dist/lib/setup/ui/menu.js.map +0 -1
- package/dist/lib/setup/ui/panel.d.ts.map +0 -1
- package/dist/lib/setup/ui/panel.js.map +0 -1
- package/dist/lib/setup/ui/prompt.d.ts.map +0 -1
- package/dist/lib/setup/ui/prompt.js.map +0 -1
- package/dist/lib/setup/ui/safePrompt.d.ts.map +0 -1
- package/dist/lib/setup/ui/safePrompt.js.map +0 -1
- package/dist/lib/setup/ui/spinner.d.ts.map +0 -1
- package/dist/lib/setup/ui/spinner.js.map +0 -1
- package/dist/lib/setup/ui/status.d.ts.map +0 -1
- package/dist/lib/setup/ui/status.js.map +0 -1
- package/dist/lib/setup/ui/table.d.ts.map +0 -1
- package/dist/lib/setup/ui/table.js.map +0 -1
- package/dist/lib/setup/ui/title.d.ts.map +0 -1
- package/dist/lib/setup/ui/title.js.map +0 -1
- package/dist/lib/setup/ui/tokens.d.ts.map +0 -1
- package/dist/lib/setup/ui/tokens.js.map +0 -1
- package/dist/lib/setup.d.ts.map +0 -1
- package/dist/lib/setup.js.map +0 -1
- package/dist/lib/staticSearch.d.ts.map +0 -1
- package/dist/lib/staticSearch.js.map +0 -1
- package/dist/lib/store.d.ts.map +0 -1
- package/dist/lib/store.js.map +0 -1
- package/dist/lib/structuredIngest.d.ts.map +0 -1
- package/dist/lib/structuredIngest.js.map +0 -1
- package/dist/lib/tags.d.ts.map +0 -1
- package/dist/lib/tags.js.map +0 -1
- package/dist/lib/timeline.d.ts.map +0 -1
- package/dist/lib/timeline.js.map +0 -1
- package/dist/lib/trace.d.ts.map +0 -1
- package/dist/lib/trace.js.map +0 -1
- package/dist/lib/upgrade.d.ts.map +0 -1
- package/dist/lib/upgrade.js.map +0 -1
- package/dist/lib/videoExtract.d.ts.map +0 -1
- package/dist/lib/videoExtract.js.map +0 -1
- package/dist/lib/webIndex.d.ts.map +0 -1
- package/dist/lib/webIndex.js.map +0 -1
- package/dist/lib/webIngest.d.ts.map +0 -1
- package/dist/lib/webIngest.js.map +0 -1
- package/dist/lib/wikilinks.d.ts.map +0 -1
- package/dist/lib/wikilinks.js.map +0 -1
- package/dist/postinstall.d.ts.map +0 -1
- package/dist/postinstall.js.map +0 -1
- package/dist/sandbox/client.d.ts.map +0 -1
- package/dist/sandbox/client.js.map +0 -1
- package/dist/sandbox/helper-template.d.ts.map +0 -1
- package/dist/sandbox/helper-template.js.map +0 -1
- package/dist/sandbox/index.d.ts +0 -10
- package/dist/sandbox/index.d.ts.map +0 -1
- package/dist/sandbox/index.js +0 -10
- package/dist/sandbox/index.js.map +0 -1
- package/dist/sandbox/manager.d.ts.map +0 -1
- package/dist/sandbox/manager.js.map +0 -1
- package/dist/sandbox/server.d.ts.map +0 -1
- 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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1994
|
-
|
|
1995
|
-
|
|
1996
|
-
|
|
1997
|
-
|
|
1998
|
-
|
|
1999
|
-
|
|
2000
|
-
|
|
2001
|
-
|
|
2002
|
-
|
|
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
|
|
2057
|
+
.description("Show audit history for a memory")
|
|
2009
2058
|
.option("-n, --limit <number>", "Max entries", "20")
|
|
2010
|
-
.option("--
|
|
2059
|
+
.option("--json", "Output as JSON")
|
|
2011
2060
|
.action(async (memPath, opts) => {
|
|
2012
|
-
const
|
|
2013
|
-
|
|
2014
|
-
|
|
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
|
-
|
|
2028
|
-
const
|
|
2029
|
-
if (!
|
|
2030
|
-
console.error(
|
|
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
|
-
|
|
2034
|
-
|
|
2035
|
-
|
|
2036
|
-
|
|
2037
|
-
|
|
2038
|
-
|
|
2039
|
-
|
|
2040
|
-
|
|
2041
|
-
|
|
2042
|
-
|
|
2043
|
-
|
|
2044
|
-
|
|
2045
|
-
});
|
|
2046
|
-
|
|
2047
|
-
|
|
2048
|
-
|
|
2049
|
-
|
|
2050
|
-
|
|
2051
|
-
|
|
2052
|
-
|
|
2053
|
-
|
|
2054
|
-
|
|
2055
|
-
|
|
2056
|
-
|
|
2057
|
-
|
|
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
|
-
|
|
2067
|
-
|
|
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
|
-
|
|
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
|
-
|
|
2096
|
-
|
|
2097
|
-
const
|
|
2098
|
-
|
|
2099
|
-
|
|
2100
|
-
|
|
2101
|
-
|
|
2102
|
-
|
|
2103
|
-
|
|
2104
|
-
|
|
2105
|
-
|
|
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
|
-
.
|
|
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
|
-
|
|
2267
|
-
|
|
2268
|
-
|
|
2269
|
-
|
|
2270
|
-
|
|
2271
|
-
|
|
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
|
-
|
|
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
|
-
|
|
2285
|
-
|
|
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
|
-
.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
2711
|
-
|
|
2712
|
-
|
|
2713
|
-
|
|
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
|
-
|
|
2831
|
-
|
|
2832
|
-
|
|
2833
|
-
|
|
2834
|
-
|
|
2835
|
-
|
|
2836
|
-
|
|
2837
|
-
|
|
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
|
+
}
|
|
2838
2912
|
}
|
|
2839
|
-
|
|
2913
|
+
if (result.deepQueryUsed) {
|
|
2914
|
+
console.log("\n(Deep query was used — a follow-up search expanded the context)");
|
|
2915
|
+
}
|
|
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.
|
|
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
|
|
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
|
-
|
|
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(
|
|
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 '
|
|
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,150 @@ 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
|
+
});
|
|
4864
|
+
const machineCmd = program
|
|
4865
|
+
.command("machine")
|
|
4866
|
+
.description("Manage this machine's local config (machine.json: machineId, roots, remote)");
|
|
4867
|
+
machineCmd
|
|
4868
|
+
.command("show")
|
|
4869
|
+
.description("Show this machine's machine.json")
|
|
4870
|
+
.option("--json", "Output as JSON")
|
|
4871
|
+
.action(async (opts) => {
|
|
4872
|
+
const { readMachineConfig } = await import("./lib/machineConfig.js");
|
|
4873
|
+
const { getMachineConfigPath } = await import("./lib/paths.js");
|
|
4874
|
+
const cfg = readMachineConfig();
|
|
4875
|
+
if (!cfg) {
|
|
4876
|
+
console.log(`No machine.json yet (${getMachineConfigPath()}).`);
|
|
4877
|
+
console.log("Run 'gnosys machine migrate' (existing setup) or 'gnosys scan' to create it.");
|
|
4878
|
+
return;
|
|
4879
|
+
}
|
|
4880
|
+
outputResult(!!opts.json, cfg, () => {
|
|
4881
|
+
console.log(`machine.json: ${getMachineConfigPath()}`);
|
|
4882
|
+
console.log(` machineId: ${cfg.machineId}`);
|
|
4883
|
+
console.log(` hostname: ${cfg.hostname}`);
|
|
4884
|
+
console.log(` roots: ${JSON.stringify(cfg.roots)}`);
|
|
4885
|
+
console.log(` remote: ${cfg.remote.enabled ? (cfg.remote.path ?? "(enabled, no path)") : "(disabled)"}`);
|
|
4886
|
+
});
|
|
4887
|
+
});
|
|
4888
|
+
machineCmd
|
|
4889
|
+
.command("migrate")
|
|
4890
|
+
.description("Move machine-local config (machineId, remote) out of the synced DB into machine.json, set roots, and scan")
|
|
4891
|
+
.option("--root <dir>", "Set the 'dev' root for this machine (default: derived from the registry)")
|
|
4892
|
+
.option("--no-scan", "Skip the project scan after migrating")
|
|
4893
|
+
.action(async (opts) => {
|
|
4894
|
+
const { migrateMachine } = await import("./lib/machineMigrate.js");
|
|
4895
|
+
const { getMachineConfigPath } = await import("./lib/paths.js");
|
|
4896
|
+
const db = GnosysDB.openLocal();
|
|
4897
|
+
if (!db.isAvailable()) {
|
|
4898
|
+
console.error("Central DB not available (better-sqlite3 missing).");
|
|
4899
|
+
process.exit(1);
|
|
4900
|
+
}
|
|
4901
|
+
const res = await migrateMachine(db, { root: opts.root, scan: opts.scan });
|
|
4902
|
+
db.close();
|
|
4903
|
+
console.log(`✓ machine.json written: ${getMachineConfigPath()}`);
|
|
4904
|
+
const idNote = res.adoptedMachineId
|
|
4905
|
+
? " (adopted from synced meta)"
|
|
4906
|
+
: res.regeneratedMachineId ? " (regenerated)" : "";
|
|
4907
|
+
console.log(` machineId: ${res.machineId}${idNote}`);
|
|
4908
|
+
if (res.adoptedRemotePath) {
|
|
4909
|
+
console.log(" remote: adopted remote_path from synced meta (removed from shared DB)");
|
|
4910
|
+
}
|
|
4911
|
+
console.log(` roots: ${JSON.stringify(res.rootsConfigured)}`);
|
|
4912
|
+
if (res.scan) {
|
|
4913
|
+
console.log(` scanned ${res.scan.entries.length} project(s):`);
|
|
4914
|
+
for (const e of res.scan.entries)
|
|
4915
|
+
console.log(` ${e.name} [${e.mode}] ${e.absPath}`);
|
|
4916
|
+
}
|
|
4917
|
+
else {
|
|
4918
|
+
console.log(" (scan skipped — set a root in machine.json, then run 'gnosys scan')");
|
|
4919
|
+
}
|
|
4920
|
+
});
|
|
4921
|
+
program
|
|
4922
|
+
.command("scan")
|
|
4923
|
+
.description("Discover projects under this machine's roots (machine.json) and record their machine-portable locations")
|
|
4924
|
+
.option("--json", "Output as JSON")
|
|
4925
|
+
.action(async (opts) => {
|
|
4926
|
+
const { ensureMachineConfig } = await import("./lib/machineConfig.js");
|
|
4927
|
+
const { getMachineConfigPath } = await import("./lib/paths.js");
|
|
4928
|
+
const { scanProjects } = await import("./lib/projectScan.js");
|
|
4929
|
+
const ens = ensureMachineConfig();
|
|
4930
|
+
const machine = ens.config;
|
|
4931
|
+
if (Object.keys(machine.roots).length === 0) {
|
|
4932
|
+
console.error("No project roots configured for this machine.");
|
|
4933
|
+
console.error(`Add roots to ${getMachineConfigPath()}, e.g.`);
|
|
4934
|
+
console.error(' { "roots": { "dev": "/Users/edward/MSDev/projects" } }');
|
|
4935
|
+
process.exit(1);
|
|
4936
|
+
}
|
|
4937
|
+
const db = GnosysDB.openCentral();
|
|
4938
|
+
if (!db.isAvailable()) {
|
|
4939
|
+
console.error("Central DB not available (better-sqlite3 missing).");
|
|
4940
|
+
process.exit(1);
|
|
4941
|
+
}
|
|
4942
|
+
const result = await scanProjects(db, machine);
|
|
4943
|
+
db.close();
|
|
4944
|
+
outputResult(!!opts.json, {
|
|
4945
|
+
machineId: machine.machineId,
|
|
4946
|
+
roots: result.roots,
|
|
4947
|
+
count: result.entries.length,
|
|
4948
|
+
entries: result.entries,
|
|
4949
|
+
}, () => {
|
|
4950
|
+
if (ens.regenerated) {
|
|
4951
|
+
console.log("⚠ machine.json hostname mismatch — regenerated machineId for this machine.\n");
|
|
4952
|
+
}
|
|
4953
|
+
console.log(`Scanned ${result.roots.length} root(s); registered ${result.entries.length} project(s):`);
|
|
4954
|
+
for (const e of result.entries) {
|
|
4955
|
+
console.log(` ${e.name} [${e.mode}] ${e.absPath}`);
|
|
4956
|
+
}
|
|
4957
|
+
});
|
|
4958
|
+
});
|
|
4718
4959
|
program
|
|
4719
4960
|
.command("projects")
|
|
4720
4961
|
.description("List registered projects from the central DB")
|
|
@@ -4732,6 +4973,16 @@ program
|
|
|
4732
4973
|
process.exit(1);
|
|
4733
4974
|
}
|
|
4734
4975
|
const allProjects = centralDb.getAllProjects();
|
|
4976
|
+
// v5.11: resolve each project's path for THIS machine (machine.json),
|
|
4977
|
+
// falling back to working_directory when machine.json is absent.
|
|
4978
|
+
const { readMachineConfig } = await import("./lib/machineConfig.js");
|
|
4979
|
+
const { effectiveProjectPath } = await import("./lib/projectPaths.js");
|
|
4980
|
+
const machine = readMachineConfig();
|
|
4981
|
+
const resolvedDirOf = (p) => effectiveProjectPath(centralDb, p, machine);
|
|
4982
|
+
const isNotHere = (p) => {
|
|
4983
|
+
const ep = resolvedDirOf(p);
|
|
4984
|
+
return ep === null || !existsSync(ep);
|
|
4985
|
+
};
|
|
4735
4986
|
if (opts.prune) {
|
|
4736
4987
|
// Find dead projects first — never just delete without showing
|
|
4737
4988
|
// them. v5.7.0 adds confirmation by default; --yes skips for
|
|
@@ -4776,10 +5027,10 @@ program
|
|
|
4776
5027
|
});
|
|
4777
5028
|
return;
|
|
4778
5029
|
}
|
|
4779
|
-
// Normal listing — filter dead projects by default
|
|
5030
|
+
// Normal listing — filter dead / not-on-this-machine projects by default
|
|
4780
5031
|
const visibleProjects = opts.all
|
|
4781
5032
|
? allProjects
|
|
4782
|
-
: allProjects.filter((p) => !
|
|
5033
|
+
: allProjects.filter((p) => !isNotHere(p));
|
|
4783
5034
|
if (visibleProjects.length === 0) {
|
|
4784
5035
|
const deadCount = allProjects.length;
|
|
4785
5036
|
outputResult(!!opts.json, {
|
|
@@ -4800,6 +5051,7 @@ program
|
|
|
4800
5051
|
}
|
|
4801
5052
|
const projectData = visibleProjects.map((p) => ({
|
|
4802
5053
|
...p,
|
|
5054
|
+
resolvedDir: resolvedDirOf(p) ?? "(not on this machine)",
|
|
4803
5055
|
memoryCount: centralDb.getMemoriesByProject(p.id).length,
|
|
4804
5056
|
}));
|
|
4805
5057
|
const deadCount = allProjects.length - visibleProjects.length;
|
|
@@ -4816,7 +5068,7 @@ program
|
|
|
4816
5068
|
for (const p of projectData) {
|
|
4817
5069
|
console.log(` ${p.name}`);
|
|
4818
5070
|
console.log(` ID: ${p.id}`);
|
|
4819
|
-
console.log(` Directory: ${p.
|
|
5071
|
+
console.log(` Directory: ${p.resolvedDir}`);
|
|
4820
5072
|
console.log(` Memories: ${p.memoryCount}`);
|
|
4821
5073
|
console.log(` Created: ${p.created}`);
|
|
4822
5074
|
console.log();
|
|
@@ -4848,6 +5100,13 @@ prefCmd
|
|
|
4848
5100
|
console.error("Central DB not available (better-sqlite3 missing).");
|
|
4849
5101
|
process.exit(1);
|
|
4850
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
|
+
}
|
|
4851
5110
|
const tags = opts.tags ? opts.tags.split(",").map((t) => t.trim()) : undefined;
|
|
4852
5111
|
const pref = setPreference(centralDb, key, value, { title: opts.title, tags });
|
|
4853
5112
|
console.log(`Preference set: ${pref.title}`);
|
|
@@ -5288,8 +5547,8 @@ program
|
|
|
5288
5547
|
const dashboardPath = path.join(home, "gnosys-dashboard.html");
|
|
5289
5548
|
const { writeFileSync } = await import("fs");
|
|
5290
5549
|
writeFileSync(dashboardPath, generatePortfolioHtml(report, dashboardPath), "utf-8");
|
|
5291
|
-
const {
|
|
5292
|
-
|
|
5550
|
+
const { execFile } = await import("child_process");
|
|
5551
|
+
execFile("open", [dashboardPath]);
|
|
5293
5552
|
console.log(`Dashboard opened: ${dashboardPath}`);
|
|
5294
5553
|
return;
|
|
5295
5554
|
}
|
|
@@ -5623,7 +5882,7 @@ program
|
|
|
5623
5882
|
const dbDir = GnosysDB.getCentralDbDir();
|
|
5624
5883
|
const db = new GnosysDB(dbDir);
|
|
5625
5884
|
if (!db.isAvailable()) {
|
|
5626
|
-
console.error("Error: GnosysDB not available.
|
|
5885
|
+
console.error("Error: GnosysDB not available. Install it with: npm install better-sqlite3");
|
|
5627
5886
|
process.exit(1);
|
|
5628
5887
|
}
|
|
5629
5888
|
const result = traceCodebase(db, directory, {
|
|
@@ -5668,7 +5927,7 @@ program
|
|
|
5668
5927
|
const dbDir = GnosysDB.getCentralDbDir();
|
|
5669
5928
|
const db = new GnosysDB(dbDir);
|
|
5670
5929
|
if (!db.isAvailable()) {
|
|
5671
|
-
console.error("Error: GnosysDB not available.
|
|
5930
|
+
console.error("Error: GnosysDB not available. Install it with: npm install better-sqlite3");
|
|
5672
5931
|
process.exit(1);
|
|
5673
5932
|
}
|
|
5674
5933
|
const params = {
|
|
@@ -5728,7 +5987,7 @@ program
|
|
|
5728
5987
|
const dbDir = GnosysDB.getCentralDbDir();
|
|
5729
5988
|
const db = new GnosysDB(dbDir);
|
|
5730
5989
|
if (!db.isAvailable()) {
|
|
5731
|
-
console.error("Error: GnosysDB not available.
|
|
5990
|
+
console.error("Error: GnosysDB not available. Install it with: npm install better-sqlite3");
|
|
5732
5991
|
process.exit(1);
|
|
5733
5992
|
}
|
|
5734
5993
|
const params = {
|
|
@@ -6416,7 +6675,11 @@ if (!isTestEnv()) {
|
|
|
6416
6675
|
const centralDb = GnosysDB.openCentral();
|
|
6417
6676
|
if (centralDb.isAvailable()) {
|
|
6418
6677
|
const lastVersion = centralDb.getMeta("app_version");
|
|
6419
|
-
|
|
6678
|
+
// GNOSYS_FORCE_VERSION lets the upgrade-nag tests pin a synthetic
|
|
6679
|
+
// "running" version independent of the real release number, so a .0
|
|
6680
|
+
// minor release can't break the patch/minor scenarios. Production
|
|
6681
|
+
// always falls through to pkg.version.
|
|
6682
|
+
const currentVersion = process.env.GNOSYS_FORCE_VERSION || pkg.version;
|
|
6420
6683
|
const isUpgradeCmd = process.argv.slice(2).some(a => a === "upgrade");
|
|
6421
6684
|
const isSetupSyncCmd = process.argv.slice(2).join(" ").includes("setup sync-projects");
|
|
6422
6685
|
// CRITICAL: `serve` writes JSON-RPC to stdout for MCP transport. Any
|
|
@@ -6461,4 +6724,3 @@ if (!isTestEnv()) {
|
|
|
6461
6724
|
}
|
|
6462
6725
|
}
|
|
6463
6726
|
program.parse();
|
|
6464
|
-
//# sourceMappingURL=cli.js.map
|