specmem-hardwicksoftware 3.5.99
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/CHANGELOG.md +299 -0
- package/LICENSE.md +6406 -0
- package/README.md +539 -0
- package/bin/AegisTheme.cjs +1022 -0
- package/bin/AnsiRenderer.cjs +1055 -0
- package/bin/BoxRenderer.cjs +605 -0
- package/bin/ClaudeLiveScreen.cjs +1299 -0
- package/bin/DashboardModules.cjs +733 -0
- package/bin/LiveScreenCapture.cjs +1012 -0
- package/bin/MemoryBrowserScreen.cjs +1595 -0
- package/bin/TabManager.cjs +1414 -0
- package/bin/checkAgentStatus-fix.patch +30 -0
- package/bin/mcp-socket-client.cjs +462 -0
- package/bin/screen-utils.cjs +106 -0
- package/bin/specmem-autoclaude.cjs +663 -0
- package/bin/specmem-cleanup.cjs +421 -0
- package/bin/specmem-cli.cjs +794 -0
- package/bin/specmem-console-teamcomms-class.cjs +428 -0
- package/bin/specmem-console.cjs +8104 -0
- package/bin/specmem-statusbar.cjs +530 -0
- package/bootstrap.cjs +5065 -0
- package/claude-hooks/agent-chooser-hook.js +179 -0
- package/claude-hooks/agent-chooser-inject.js +121 -0
- package/claude-hooks/agent-loading-hook.js +990 -0
- package/claude-hooks/agent-output-fader.cjs +542 -0
- package/claude-hooks/agent-output-interceptor.js +193 -0
- package/claude-hooks/agent-type-matcher.js +419 -0
- package/claude-hooks/auto-bypass.py +74 -0
- package/claude-hooks/background-completion-silencer.js +134 -0
- package/claude-hooks/bash-auto-background.js +182 -0
- package/claude-hooks/build-cedict-dictionary.mjs +167 -0
- package/claude-hooks/bullshit-radar.cjs +323 -0
- package/claude-hooks/cedict-codes.json +270 -0
- package/claude-hooks/cedict-extracted.json +22632 -0
- package/claude-hooks/claude-watchdog.sh +401 -0
- package/claude-hooks/context-dedup.cjs +144 -0
- package/claude-hooks/context-yeeter.cjs +244 -0
- package/claude-hooks/debug-suffix.cjs +15 -0
- package/claude-hooks/debug2.cjs +7 -0
- package/claude-hooks/drilldown-enforcer.js +242 -0
- package/claude-hooks/english-morphology-standalone.cjs +149 -0
- package/claude-hooks/english-morphology.cjs +152 -0
- package/claude-hooks/extract-translations.mjs +193 -0
- package/claude-hooks/file-claim-enforcer.cjs +293 -0
- package/claude-hooks/file-claim-enforcer.js +293 -0
- package/claude-hooks/find-collisions.cjs +39 -0
- package/claude-hooks/fix-abbreviations.cjs +60 -0
- package/claude-hooks/fix-collisions.cjs +60 -0
- package/claude-hooks/fix-decompressor.cjs +79 -0
- package/claude-hooks/fix-suffixes.cjs +66 -0
- package/claude-hooks/grammar-engine.cjs +159 -0
- package/claude-hooks/input-aware-improver.js +231 -0
- package/claude-hooks/is-agent.cjs +64 -0
- package/claude-hooks/mega-test.cjs +213 -0
- package/claude-hooks/merge-dictionaries.mjs +207 -0
- package/claude-hooks/merged-codes.cjs +22675 -0
- package/claude-hooks/merged-codes.json +22676 -0
- package/claude-hooks/output-cleaner.cjs +388 -0
- package/claude-hooks/post-write-memory-hook.cjs +430 -0
- package/claude-hooks/quick-test.cjs +24 -0
- package/claude-hooks/quick-test2.cjs +24 -0
- package/claude-hooks/remove-bad-codes.cjs +23 -0
- package/claude-hooks/search-reminder-hook.js +90 -0
- package/claude-hooks/semantic-test.cjs +93 -0
- package/claude-hooks/settings.json +445 -0
- package/claude-hooks/smart-context-hook.cjs +547 -0
- package/claude-hooks/smart-context-hook.js +539 -0
- package/claude-hooks/smart-search-interceptor.js +364 -0
- package/claude-hooks/socket-connect-helper.cjs +235 -0
- package/claude-hooks/specmem/sockets/session-start.lock +1 -0
- package/claude-hooks/specmem-context-hook.cjs +357 -0
- package/claude-hooks/specmem-context-hook.js +357 -0
- package/claude-hooks/specmem-drilldown-hook.cjs +480 -0
- package/claude-hooks/specmem-drilldown-hook.js +480 -0
- package/claude-hooks/specmem-drilldown-setter.js +210 -0
- package/claude-hooks/specmem-paths.cjs +213 -0
- package/claude-hooks/specmem-precompact.js +183 -0
- package/claude-hooks/specmem-session-init.sh +33 -0
- package/claude-hooks/specmem-session-start.cjs +498 -0
- package/claude-hooks/specmem-stop-hook.cjs +73 -0
- package/claude-hooks/specmem-stop-hook.js +5 -0
- package/claude-hooks/specmem-team-comms.cjs +434 -0
- package/claude-hooks/specmem-team-member-inject.js +271 -0
- package/claude-hooks/specmem-unified-hook.py +670 -0
- package/claude-hooks/subagent-loading-hook.js +194 -0
- package/claude-hooks/sysprompt-squisher.cjs +167 -0
- package/claude-hooks/task-progress-hook.js +204 -0
- package/claude-hooks/team-comms-enforcer.cjs +585 -0
- package/claude-hooks/test-accuracy.cjs +27 -0
- package/claude-hooks/test-big.cjs +28 -0
- package/claude-hooks/test-inflectors.cjs +39 -0
- package/claude-hooks/test-pluralize.cjs +37 -0
- package/claude-hooks/test-quick.cjs +8 -0
- package/claude-hooks/test-wink.cjs +20 -0
- package/claude-hooks/token-compressor.cjs +940 -0
- package/claude-hooks/use-code-pointers.cjs +279 -0
- package/commands/COMMAND_TOOL_MAP.md +299 -0
- package/commands/specmem-agents.md +412 -0
- package/commands/specmem-autoclaude.md +295 -0
- package/commands/specmem-changes.md +247 -0
- package/commands/specmem-code.md +103 -0
- package/commands/specmem-configteammembercomms.md +322 -0
- package/commands/specmem-drilldown.md +208 -0
- package/commands/specmem-find.md +195 -0
- package/commands/specmem-getdashboard.md +243 -0
- package/commands/specmem-hooks.md +219 -0
- package/commands/specmem-pointers.md +149 -0
- package/commands/specmem-progress.md +287 -0
- package/commands/specmem-remember.md +123 -0
- package/commands/specmem-service.md +349 -0
- package/commands/specmem-stats.md +189 -0
- package/commands/specmem-team-member.md +409 -0
- package/commands/specmem-webdev.md +583 -0
- package/commands/specmem.md +363 -0
- package/dist/autoStart/index.d.ts +214 -0
- package/dist/autoStart/index.d.ts.map +1 -0
- package/dist/autoStart/index.js +883 -0
- package/dist/autoStart/index.js.map +1 -0
- package/dist/claude-sessions/contextRestorationParser.d.ts +74 -0
- package/dist/claude-sessions/contextRestorationParser.d.ts.map +1 -0
- package/dist/claude-sessions/contextRestorationParser.js +570 -0
- package/dist/claude-sessions/contextRestorationParser.js.map +1 -0
- package/dist/claude-sessions/index.d.ts +13 -0
- package/dist/claude-sessions/index.d.ts.map +1 -0
- package/dist/claude-sessions/index.js +11 -0
- package/dist/claude-sessions/index.js.map +1 -0
- package/dist/claude-sessions/sessionIntegration.d.ts +48 -0
- package/dist/claude-sessions/sessionIntegration.d.ts.map +1 -0
- package/dist/claude-sessions/sessionIntegration.js +146 -0
- package/dist/claude-sessions/sessionIntegration.js.map +1 -0
- package/dist/claude-sessions/sessionParser.d.ts +293 -0
- package/dist/claude-sessions/sessionParser.d.ts.map +1 -0
- package/dist/claude-sessions/sessionParser.js +1028 -0
- package/dist/claude-sessions/sessionParser.js.map +1 -0
- package/dist/claude-sessions/sessionWatcher.d.ts +139 -0
- package/dist/claude-sessions/sessionWatcher.d.ts.map +1 -0
- package/dist/claude-sessions/sessionWatcher.js +722 -0
- package/dist/claude-sessions/sessionWatcher.js.map +1 -0
- package/dist/cli/deploy-to-claude.d.ts +56 -0
- package/dist/cli/deploy-to-claude.d.ts.map +1 -0
- package/dist/cli/deploy-to-claude.js +576 -0
- package/dist/cli/deploy-to-claude.js.map +1 -0
- package/dist/code-explanations/explainCode.d.ts +86 -0
- package/dist/code-explanations/explainCode.d.ts.map +1 -0
- package/dist/code-explanations/explainCode.js +286 -0
- package/dist/code-explanations/explainCode.js.map +1 -0
- package/dist/code-explanations/feedback.d.ts +87 -0
- package/dist/code-explanations/feedback.d.ts.map +1 -0
- package/dist/code-explanations/feedback.js +212 -0
- package/dist/code-explanations/feedback.js.map +1 -0
- package/dist/code-explanations/getRelatedCode.d.ts +80 -0
- package/dist/code-explanations/getRelatedCode.d.ts.map +1 -0
- package/dist/code-explanations/getRelatedCode.js +262 -0
- package/dist/code-explanations/getRelatedCode.js.map +1 -0
- package/dist/code-explanations/index.d.ts +284 -0
- package/dist/code-explanations/index.d.ts.map +1 -0
- package/dist/code-explanations/index.js +249 -0
- package/dist/code-explanations/index.js.map +1 -0
- package/dist/code-explanations/linkCodeToPrompt.d.ts +79 -0
- package/dist/code-explanations/linkCodeToPrompt.d.ts.map +1 -0
- package/dist/code-explanations/linkCodeToPrompt.js +213 -0
- package/dist/code-explanations/linkCodeToPrompt.js.map +1 -0
- package/dist/code-explanations/recallExplanation.d.ts +88 -0
- package/dist/code-explanations/recallExplanation.d.ts.map +1 -0
- package/dist/code-explanations/recallExplanation.js +218 -0
- package/dist/code-explanations/recallExplanation.js.map +1 -0
- package/dist/code-explanations/schema.d.ts +32 -0
- package/dist/code-explanations/schema.d.ts.map +1 -0
- package/dist/code-explanations/schema.js +221 -0
- package/dist/code-explanations/schema.js.map +1 -0
- package/dist/code-explanations/semanticSearch.d.ts +75 -0
- package/dist/code-explanations/semanticSearch.d.ts.map +1 -0
- package/dist/code-explanations/semanticSearch.js +203 -0
- package/dist/code-explanations/semanticSearch.js.map +1 -0
- package/dist/code-explanations/types.d.ts +328 -0
- package/dist/code-explanations/types.d.ts.map +1 -0
- package/dist/code-explanations/types.js +122 -0
- package/dist/code-explanations/types.js.map +1 -0
- package/dist/codebase/codeAnalyzer.d.ts +272 -0
- package/dist/codebase/codeAnalyzer.d.ts.map +1 -0
- package/dist/codebase/codeAnalyzer.js +1353 -0
- package/dist/codebase/codeAnalyzer.js.map +1 -0
- package/dist/codebase/codebaseIndexer.d.ts +360 -0
- package/dist/codebase/codebaseIndexer.d.ts.map +1 -0
- package/dist/codebase/codebaseIndexer.js +1735 -0
- package/dist/codebase/codebaseIndexer.js.map +1 -0
- package/dist/codebase/codebaseTools.d.ts +853 -0
- package/dist/codebase/codebaseTools.d.ts.map +1 -0
- package/dist/codebase/codebaseTools.js +1279 -0
- package/dist/codebase/codebaseTools.js.map +1 -0
- package/dist/codebase/exclusions.d.ts +111 -0
- package/dist/codebase/exclusions.d.ts.map +1 -0
- package/dist/codebase/exclusions.js +771 -0
- package/dist/codebase/exclusions.js.map +1 -0
- package/dist/codebase/fileWatcher.d.ts +135 -0
- package/dist/codebase/fileWatcher.d.ts.map +1 -0
- package/dist/codebase/fileWatcher.js +309 -0
- package/dist/codebase/fileWatcher.js.map +1 -0
- package/dist/codebase/index.d.ts +33 -0
- package/dist/codebase/index.d.ts.map +1 -0
- package/dist/codebase/index.js +77 -0
- package/dist/codebase/index.js.map +1 -0
- package/dist/codebase/ingestion.d.ts +177 -0
- package/dist/codebase/ingestion.d.ts.map +1 -0
- package/dist/codebase/ingestion.js +690 -0
- package/dist/codebase/ingestion.js.map +1 -0
- package/dist/codebase/languageDetection.d.ts +75 -0
- package/dist/codebase/languageDetection.d.ts.map +1 -0
- package/dist/codebase/languageDetection.js +768 -0
- package/dist/codebase/languageDetection.js.map +1 -0
- package/dist/commands/codebaseCommands.d.ts +101 -0
- package/dist/commands/codebaseCommands.d.ts.map +1 -0
- package/dist/commands/codebaseCommands.js +911 -0
- package/dist/commands/codebaseCommands.js.map +1 -0
- package/dist/commands/commandHandler.d.ts +126 -0
- package/dist/commands/commandHandler.d.ts.map +1 -0
- package/dist/commands/commandHandler.js +296 -0
- package/dist/commands/commandHandler.js.map +1 -0
- package/dist/commands/commandLoader.d.ts +103 -0
- package/dist/commands/commandLoader.d.ts.map +1 -0
- package/dist/commands/commandLoader.js +223 -0
- package/dist/commands/commandLoader.js.map +1 -0
- package/dist/commands/contextCommands.d.ts +83 -0
- package/dist/commands/contextCommands.d.ts.map +1 -0
- package/dist/commands/contextCommands.js +512 -0
- package/dist/commands/contextCommands.js.map +1 -0
- package/dist/commands/index.d.ts +24 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +28 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/mcpResources.d.ts +50 -0
- package/dist/commands/mcpResources.d.ts.map +1 -0
- package/dist/commands/mcpResources.js +372 -0
- package/dist/commands/mcpResources.js.map +1 -0
- package/dist/commands/memoryCommands.d.ts +74 -0
- package/dist/commands/memoryCommands.d.ts.map +1 -0
- package/dist/commands/memoryCommands.js +609 -0
- package/dist/commands/memoryCommands.js.map +1 -0
- package/dist/commands/promptCommands.d.ts +91 -0
- package/dist/commands/promptCommands.d.ts.map +1 -0
- package/dist/commands/promptCommands.js +801 -0
- package/dist/commands/promptCommands.js.map +1 -0
- package/dist/commands/teamMemberCommands.d.ts +21 -0
- package/dist/commands/teamMemberCommands.d.ts.map +1 -0
- package/dist/commands/teamMemberCommands.js +137 -0
- package/dist/commands/teamMemberCommands.js.map +1 -0
- package/dist/comms/fileCommsTransport.d.ts +91 -0
- package/dist/comms/fileCommsTransport.d.ts.map +1 -0
- package/dist/comms/fileCommsTransport.js +244 -0
- package/dist/comms/fileCommsTransport.js.map +1 -0
- package/dist/comms/index.d.ts +7 -0
- package/dist/comms/index.d.ts.map +1 -0
- package/dist/comms/index.js +7 -0
- package/dist/comms/index.js.map +1 -0
- package/dist/config/apiKeyDetection.d.ts +41 -0
- package/dist/config/apiKeyDetection.d.ts.map +1 -0
- package/dist/config/apiKeyDetection.js +211 -0
- package/dist/config/apiKeyDetection.js.map +1 -0
- package/dist/config/autoConfig.d.ts +188 -0
- package/dist/config/autoConfig.d.ts.map +1 -0
- package/dist/config/autoConfig.js +850 -0
- package/dist/config/autoConfig.js.map +1 -0
- package/dist/config/configSync.d.ts +119 -0
- package/dist/config/configSync.d.ts.map +1 -0
- package/dist/config/configSync.js +878 -0
- package/dist/config/configSync.js.map +1 -0
- package/dist/config/embeddingTimeouts.d.ts +145 -0
- package/dist/config/embeddingTimeouts.d.ts.map +1 -0
- package/dist/config/embeddingTimeouts.js +255 -0
- package/dist/config/embeddingTimeouts.js.map +1 -0
- package/dist/config/index.d.ts +5 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +7 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/languageConfig.d.ts +68 -0
- package/dist/config/languageConfig.d.ts.map +1 -0
- package/dist/config/languageConfig.js +473 -0
- package/dist/config/languageConfig.js.map +1 -0
- package/dist/config/password.d.ts +145 -0
- package/dist/config/password.d.ts.map +1 -0
- package/dist/config/password.js +428 -0
- package/dist/config/password.js.map +1 -0
- package/dist/config.d.ts +338 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +1177 -0
- package/dist/config.js.map +1 -0
- package/dist/consolidation.d.ts +44 -0
- package/dist/consolidation.d.ts.map +1 -0
- package/dist/consolidation.js +447 -0
- package/dist/consolidation.js.map +1 -0
- package/dist/constants.d.ts +371 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +552 -0
- package/dist/constants.js.map +1 -0
- package/dist/coordination/TeamMemberRegistry.d.ts +192 -0
- package/dist/coordination/TeamMemberRegistry.d.ts.map +1 -0
- package/dist/coordination/TeamMemberRegistry.js +415 -0
- package/dist/coordination/TeamMemberRegistry.js.map +1 -0
- package/dist/coordination/events.d.ts +369 -0
- package/dist/coordination/events.d.ts.map +1 -0
- package/dist/coordination/events.js +232 -0
- package/dist/coordination/events.js.map +1 -0
- package/dist/coordination/handlers.d.ts +116 -0
- package/dist/coordination/handlers.d.ts.map +1 -0
- package/dist/coordination/handlers.js +400 -0
- package/dist/coordination/handlers.js.map +1 -0
- package/dist/coordination/index.d.ts +14 -0
- package/dist/coordination/index.d.ts.map +1 -0
- package/dist/coordination/index.js +31 -0
- package/dist/coordination/index.js.map +1 -0
- package/dist/coordination/integration.d.ts +260 -0
- package/dist/coordination/integration.d.ts.map +1 -0
- package/dist/coordination/integration.js +472 -0
- package/dist/coordination/integration.js.map +1 -0
- package/dist/coordination/server.d.ts +266 -0
- package/dist/coordination/server.d.ts.map +1 -0
- package/dist/coordination/server.js +995 -0
- package/dist/coordination/server.js.map +1 -0
- package/dist/coordination/serviceProvider.d.ts +70 -0
- package/dist/coordination/serviceProvider.d.ts.map +1 -0
- package/dist/coordination/serviceProvider.js +273 -0
- package/dist/coordination/serviceProvider.js.map +1 -0
- package/dist/dashboard/api/claudeControl.d.ts +44 -0
- package/dist/dashboard/api/claudeControl.d.ts.map +1 -0
- package/dist/dashboard/api/claudeControl.js +650 -0
- package/dist/dashboard/api/claudeControl.js.map +1 -0
- package/dist/dashboard/api/claudeHistory.d.ts +4 -0
- package/dist/dashboard/api/claudeHistory.d.ts.map +1 -0
- package/dist/dashboard/api/claudeHistory.js +319 -0
- package/dist/dashboard/api/claudeHistory.js.map +1 -0
- package/dist/dashboard/api/dataExport.d.ts +23 -0
- package/dist/dashboard/api/dataExport.d.ts.map +1 -0
- package/dist/dashboard/api/dataExport.js +509 -0
- package/dist/dashboard/api/dataExport.js.map +1 -0
- package/dist/dashboard/api/fileManager.d.ts +39 -0
- package/dist/dashboard/api/fileManager.d.ts.map +1 -0
- package/dist/dashboard/api/fileManager.js +814 -0
- package/dist/dashboard/api/fileManager.js.map +1 -0
- package/dist/dashboard/api/hooks.d.ts +16 -0
- package/dist/dashboard/api/hooks.d.ts.map +1 -0
- package/dist/dashboard/api/hooks.js +342 -0
- package/dist/dashboard/api/hooks.js.map +1 -0
- package/dist/dashboard/api/hotReload.d.ts +14 -0
- package/dist/dashboard/api/hotReload.d.ts.map +1 -0
- package/dist/dashboard/api/hotReload.js +219 -0
- package/dist/dashboard/api/hotReload.js.map +1 -0
- package/dist/dashboard/api/liveSessionStream.d.ts +19 -0
- package/dist/dashboard/api/liveSessionStream.d.ts.map +1 -0
- package/dist/dashboard/api/liveSessionStream.js +430 -0
- package/dist/dashboard/api/liveSessionStream.js.map +1 -0
- package/dist/dashboard/api/memoryRecall.d.ts +20 -0
- package/dist/dashboard/api/memoryRecall.d.ts.map +1 -0
- package/dist/dashboard/api/memoryRecall.js +524 -0
- package/dist/dashboard/api/memoryRecall.js.map +1 -0
- package/dist/dashboard/api/promptSend.d.ts +33 -0
- package/dist/dashboard/api/promptSend.d.ts.map +1 -0
- package/dist/dashboard/api/promptSend.js +544 -0
- package/dist/dashboard/api/promptSend.js.map +1 -0
- package/dist/dashboard/api/settings.d.ts +10 -0
- package/dist/dashboard/api/settings.d.ts.map +1 -0
- package/dist/dashboard/api/settings.js +656 -0
- package/dist/dashboard/api/settings.js.map +1 -0
- package/dist/dashboard/api/setup.d.ts +21 -0
- package/dist/dashboard/api/setup.d.ts.map +1 -0
- package/dist/dashboard/api/setup.js +663 -0
- package/dist/dashboard/api/setup.js.map +1 -0
- package/dist/dashboard/api/specmemTools.d.ts +14 -0
- package/dist/dashboard/api/specmemTools.d.ts.map +1 -0
- package/dist/dashboard/api/specmemTools.js +1059 -0
- package/dist/dashboard/api/specmemTools.js.map +1 -0
- package/dist/dashboard/api/taskTeamMembers.d.ts +8 -0
- package/dist/dashboard/api/taskTeamMembers.d.ts.map +1 -0
- package/dist/dashboard/api/taskTeamMembers.js +136 -0
- package/dist/dashboard/api/taskTeamMembers.js.map +1 -0
- package/dist/dashboard/api/teamMemberDeploy.d.ts +15 -0
- package/dist/dashboard/api/teamMemberDeploy.d.ts.map +1 -0
- package/dist/dashboard/api/teamMemberDeploy.js +421 -0
- package/dist/dashboard/api/teamMemberDeploy.js.map +1 -0
- package/dist/dashboard/api/teamMemberHistory.d.ts +38 -0
- package/dist/dashboard/api/teamMemberHistory.d.ts.map +1 -0
- package/dist/dashboard/api/teamMemberHistory.js +583 -0
- package/dist/dashboard/api/teamMemberHistory.js.map +1 -0
- package/dist/dashboard/api/terminal.d.ts +12 -0
- package/dist/dashboard/api/terminal.d.ts.map +1 -0
- package/dist/dashboard/api/terminal.js +344 -0
- package/dist/dashboard/api/terminal.js.map +1 -0
- package/dist/dashboard/api/terminalInject.d.ts +17 -0
- package/dist/dashboard/api/terminalInject.d.ts.map +1 -0
- package/dist/dashboard/api/terminalInject.js +322 -0
- package/dist/dashboard/api/terminalInject.js.map +1 -0
- package/dist/dashboard/api/terminalStream.d.ts +12 -0
- package/dist/dashboard/api/terminalStream.d.ts.map +1 -0
- package/dist/dashboard/api/terminalStream.js +482 -0
- package/dist/dashboard/api/terminalStream.js.map +1 -0
- package/dist/dashboard/index.d.ts +7 -0
- package/dist/dashboard/index.d.ts.map +1 -0
- package/dist/dashboard/index.js +7 -0
- package/dist/dashboard/index.js.map +1 -0
- package/dist/dashboard/ptyStreamer.d.ts +173 -0
- package/dist/dashboard/ptyStreamer.d.ts.map +1 -0
- package/dist/dashboard/ptyStreamer.js +661 -0
- package/dist/dashboard/ptyStreamer.js.map +1 -0
- package/dist/dashboard/public/DASHBOARD-README.md +378 -0
- package/dist/dashboard/public/INTEGRATION-GUIDE.md +395 -0
- package/dist/dashboard/public/codebase-config.html +1247 -0
- package/dist/dashboard/public/dashboard-v2.html +1942 -0
- package/dist/dashboard/public/data-export.html +819 -0
- package/dist/dashboard/public/example-page.html +164 -0
- package/dist/dashboard/public/file-explorer.html +1023 -0
- package/dist/dashboard/public/hooks.html +1103 -0
- package/dist/dashboard/public/index-improvements.css +499 -0
- package/dist/dashboard/public/index.html +5534 -0
- package/dist/dashboard/public/memory-controls.html +1959 -0
- package/dist/dashboard/public/memory-recall.html +1495 -0
- package/dist/dashboard/public/previews/skeleton-memory-graph.html +361 -0
- package/dist/dashboard/public/previews/skeleton-memory-list.html +366 -0
- package/dist/dashboard/public/previews/skeleton-search-results.html +609 -0
- package/dist/dashboard/public/previews/skeleton-stats-dashboard.html +556 -0
- package/dist/dashboard/public/prompt-console.html +2763 -0
- package/dist/dashboard/public/react-dist/assets/index-CkjobT5B.js +871 -0
- package/dist/dashboard/public/react-dist/assets/index-iRclxMst.css +1 -0
- package/dist/dashboard/public/react-dist/index.html +16 -0
- package/dist/dashboard/public/shared-header.js +325 -0
- package/dist/dashboard/public/shared-language-selector.js +626 -0
- package/dist/dashboard/public/shared-logger.js +66 -0
- package/dist/dashboard/public/shared-nav.js +325 -0
- package/dist/dashboard/public/shared-theme-blue.css +331 -0
- package/dist/dashboard/public/shared-theme.css +813 -0
- package/dist/dashboard/public/shared-toast.js +415 -0
- package/dist/dashboard/public/team-member-history.html +1291 -0
- package/dist/dashboard/public/team-member-spy.html +1199 -0
- package/dist/dashboard/public/team-members.html +3756 -0
- package/dist/dashboard/public/terminal-output.html +1013 -0
- package/dist/dashboard/public/terminal.html +372 -0
- package/dist/dashboard/sessionStore.d.ts +86 -0
- package/dist/dashboard/sessionStore.d.ts.map +1 -0
- package/dist/dashboard/sessionStore.js +262 -0
- package/dist/dashboard/sessionStore.js.map +1 -0
- package/dist/dashboard/standalone.d.ts +27 -0
- package/dist/dashboard/standalone.d.ts.map +1 -0
- package/dist/dashboard/standalone.js +380 -0
- package/dist/dashboard/standalone.js.map +1 -0
- package/dist/dashboard/webServer.d.ts +390 -0
- package/dist/dashboard/webServer.d.ts.map +1 -0
- package/dist/dashboard/webServer.js +4297 -0
- package/dist/dashboard/webServer.js.map +1 -0
- package/dist/dashboard/websocket/teamMemberStream.d.ts +87 -0
- package/dist/dashboard/websocket/teamMemberStream.d.ts.map +1 -0
- package/dist/dashboard/websocket/teamMemberStream.js +366 -0
- package/dist/dashboard/websocket/teamMemberStream.js.map +1 -0
- package/dist/dashboard/websocket/terminalStream.d.ts +130 -0
- package/dist/dashboard/websocket/terminalStream.d.ts.map +1 -0
- package/dist/dashboard/websocket/terminalStream.js +456 -0
- package/dist/dashboard/websocket/terminalStream.js.map +1 -0
- package/dist/database/embeddedPostgres.d.ts +187 -0
- package/dist/database/embeddedPostgres.d.ts.map +1 -0
- package/dist/database/embeddedPostgres.js +763 -0
- package/dist/database/embeddedPostgres.js.map +1 -0
- package/dist/database/index.d.ts +12 -0
- package/dist/database/index.d.ts.map +1 -0
- package/dist/database/index.js +20 -0
- package/dist/database/index.js.map +1 -0
- package/dist/database/initEmbeddedPostgres.d.ts +124 -0
- package/dist/database/initEmbeddedPostgres.d.ts.map +1 -0
- package/dist/database/initEmbeddedPostgres.js +855 -0
- package/dist/database/initEmbeddedPostgres.js.map +1 -0
- package/dist/database.d.ts +256 -0
- package/dist/database.d.ts.map +1 -0
- package/dist/database.js +1209 -0
- package/dist/database.js.map +1 -0
- package/dist/db/apiDataManager.d.ts +334 -0
- package/dist/db/apiDataManager.d.ts.map +1 -0
- package/dist/db/apiDataManager.js +631 -0
- package/dist/db/apiDataManager.js.map +1 -0
- package/dist/db/batchOperations.d.ts +154 -0
- package/dist/db/batchOperations.d.ts.map +1 -0
- package/dist/db/batchOperations.js +564 -0
- package/dist/db/batchOperations.js.map +1 -0
- package/dist/db/bigBrainMigrations.d.ts +48 -0
- package/dist/db/bigBrainMigrations.d.ts.map +1 -0
- package/dist/db/bigBrainMigrations.js +4266 -0
- package/dist/db/bigBrainMigrations.js.map +1 -0
- package/dist/db/connectionPoolGoBrrr.d.ts +94 -0
- package/dist/db/connectionPoolGoBrrr.d.ts.map +1 -0
- package/dist/db/connectionPoolGoBrrr.js +548 -0
- package/dist/db/connectionPoolGoBrrr.js.map +1 -0
- package/dist/db/dashboardQueries.d.ts +182 -0
- package/dist/db/dashboardQueries.d.ts.map +1 -0
- package/dist/db/dashboardQueries.js +821 -0
- package/dist/db/dashboardQueries.js.map +1 -0
- package/dist/db/deploymentBootstrap.d.ts +43 -0
- package/dist/db/deploymentBootstrap.d.ts.map +1 -0
- package/dist/db/deploymentBootstrap.js +329 -0
- package/dist/db/deploymentBootstrap.js.map +1 -0
- package/dist/db/dimensionService.d.ts +140 -0
- package/dist/db/dimensionService.d.ts.map +1 -0
- package/dist/db/dimensionService.js +261 -0
- package/dist/db/dimensionService.js.map +1 -0
- package/dist/db/embeddingOverflow.d.ts +69 -0
- package/dist/db/embeddingOverflow.d.ts.map +1 -0
- package/dist/db/embeddingOverflow.js +332 -0
- package/dist/db/embeddingOverflow.js.map +1 -0
- package/dist/db/embeddingOverflow.sql +221 -0
- package/dist/db/findThatShit.d.ts +145 -0
- package/dist/db/findThatShit.d.ts.map +1 -0
- package/dist/db/findThatShit.js +782 -0
- package/dist/db/findThatShit.js.map +1 -0
- package/dist/db/hotPathManager.d.ts +187 -0
- package/dist/db/hotPathManager.d.ts.map +1 -0
- package/dist/db/hotPathManager.js +504 -0
- package/dist/db/hotPathManager.js.map +1 -0
- package/dist/db/index.d.ts +85 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +219 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/memoryDrilldown.sql +99 -0
- package/dist/db/migrate.d.ts +3 -0
- package/dist/db/migrate.d.ts.map +1 -0
- package/dist/db/migrate.js +97 -0
- package/dist/db/migrate.js.map +1 -0
- package/dist/db/migrateJsonToPostgres.d.ts +43 -0
- package/dist/db/migrateJsonToPostgres.d.ts.map +1 -0
- package/dist/db/migrateJsonToPostgres.js +465 -0
- package/dist/db/migrateJsonToPostgres.js.map +1 -0
- package/dist/db/nukeFromOrbit.d.ts +63 -0
- package/dist/db/nukeFromOrbit.d.ts.map +1 -0
- package/dist/db/nukeFromOrbit.js +499 -0
- package/dist/db/nukeFromOrbit.js.map +1 -0
- package/dist/db/processedTraining.sql +60 -0
- package/dist/db/projectNamespacing.d.ts +258 -0
- package/dist/db/projectNamespacing.d.ts.map +1 -0
- package/dist/db/projectNamespacing.js +920 -0
- package/dist/db/projectNamespacing.js.map +1 -0
- package/dist/db/projectNamespacing.sql +374 -0
- package/dist/db/projectSchemaInit.sql +271 -0
- package/dist/db/spatialMemory.d.ts +296 -0
- package/dist/db/spatialMemory.d.ts.map +1 -0
- package/dist/db/spatialMemory.js +818 -0
- package/dist/db/spatialMemory.js.map +1 -0
- package/dist/db/streamingQuery.d.ts +143 -0
- package/dist/db/streamingQuery.d.ts.map +1 -0
- package/dist/db/streamingQuery.js +350 -0
- package/dist/db/streamingQuery.js.map +1 -0
- package/dist/db/teamComms.sql +224 -0
- package/dist/db/yeetStuffInDb.d.ts +72 -0
- package/dist/db/yeetStuffInDb.d.ts.map +1 -0
- package/dist/db/yeetStuffInDb.js +473 -0
- package/dist/db/yeetStuffInDb.js.map +1 -0
- package/dist/embedding-providers/index.d.ts +10 -0
- package/dist/embedding-providers/index.d.ts.map +1 -0
- package/dist/embedding-providers/index.js +12 -0
- package/dist/embedding-providers/index.js.map +1 -0
- package/dist/embeddings/projectionLayer.d.ts +114 -0
- package/dist/embeddings/projectionLayer.d.ts.map +1 -0
- package/dist/embeddings/projectionLayer.js +345 -0
- package/dist/embeddings/projectionLayer.js.map +1 -0
- package/dist/events/Publisher.d.ts +193 -0
- package/dist/events/Publisher.d.ts.map +1 -0
- package/dist/events/Publisher.js +439 -0
- package/dist/events/Publisher.js.map +1 -0
- package/dist/events/config.d.ts +139 -0
- package/dist/events/config.d.ts.map +1 -0
- package/dist/events/config.js +266 -0
- package/dist/events/config.js.map +1 -0
- package/dist/events/index.d.ts +19 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +31 -0
- package/dist/events/index.js.map +1 -0
- package/dist/events/integration.d.ts +206 -0
- package/dist/events/integration.d.ts.map +1 -0
- package/dist/events/integration.js +348 -0
- package/dist/events/integration.js.map +1 -0
- package/dist/events/metrics.d.ts +147 -0
- package/dist/events/metrics.d.ts.map +1 -0
- package/dist/events/metrics.js +343 -0
- package/dist/events/metrics.js.map +1 -0
- package/dist/hooks/cli.d.ts +28 -0
- package/dist/hooks/cli.d.ts.map +1 -0
- package/dist/hooks/cli.js +118 -0
- package/dist/hooks/cli.js.map +1 -0
- package/dist/hooks/contextInjectionHook.d.ts +60 -0
- package/dist/hooks/contextInjectionHook.d.ts.map +1 -0
- package/dist/hooks/contextInjectionHook.js +294 -0
- package/dist/hooks/contextInjectionHook.js.map +1 -0
- package/dist/hooks/drilldownHook.d.ts +125 -0
- package/dist/hooks/drilldownHook.d.ts.map +1 -0
- package/dist/hooks/drilldownHook.js +181 -0
- package/dist/hooks/drilldownHook.js.map +1 -0
- package/dist/hooks/hookManager.d.ts +180 -0
- package/dist/hooks/hookManager.d.ts.map +1 -0
- package/dist/hooks/hookManager.js +782 -0
- package/dist/hooks/hookManager.js.map +1 -0
- package/dist/hooks/index.d.ts +62 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +66 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/lowContextHook.d.ts +71 -0
- package/dist/hooks/lowContextHook.d.ts.map +1 -0
- package/dist/hooks/lowContextHook.js +258 -0
- package/dist/hooks/lowContextHook.js.map +1 -0
- package/dist/hooks/simpleContextHook.d.ts +65 -0
- package/dist/hooks/simpleContextHook.d.ts.map +1 -0
- package/dist/hooks/simpleContextHook.js +194 -0
- package/dist/hooks/simpleContextHook.js.map +1 -0
- package/dist/hooks/teamFramingCli.d.ts +56 -0
- package/dist/hooks/teamFramingCli.d.ts.map +1 -0
- package/dist/hooks/teamFramingCli.js +264 -0
- package/dist/hooks/teamFramingCli.js.map +1 -0
- package/dist/hooks/teamMemberPrepromptHook.d.ts +150 -0
- package/dist/hooks/teamMemberPrepromptHook.d.ts.map +1 -0
- package/dist/hooks/teamMemberPrepromptHook.js +308 -0
- package/dist/hooks/teamMemberPrepromptHook.js.map +1 -0
- package/dist/index.d.ts +42 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4433 -0
- package/dist/index.js.map +1 -0
- package/dist/init/claudeConfigInjector.d.ts +116 -0
- package/dist/init/claudeConfigInjector.d.ts.map +1 -0
- package/dist/init/claudeConfigInjector.js +1154 -0
- package/dist/init/claudeConfigInjector.js.map +1 -0
- package/dist/installer/autoInstall.d.ts +72 -0
- package/dist/installer/autoInstall.d.ts.map +1 -0
- package/dist/installer/autoInstall.js +617 -0
- package/dist/installer/autoInstall.js.map +1 -0
- package/dist/installer/dbSetup.d.ts +84 -0
- package/dist/installer/dbSetup.d.ts.map +1 -0
- package/dist/installer/dbSetup.js +350 -0
- package/dist/installer/dbSetup.js.map +1 -0
- package/dist/installer/firstRun.d.ts +49 -0
- package/dist/installer/firstRun.d.ts.map +1 -0
- package/dist/installer/firstRun.js +207 -0
- package/dist/installer/firstRun.js.map +1 -0
- package/dist/installer/index.d.ts +10 -0
- package/dist/installer/index.d.ts.map +1 -0
- package/dist/installer/index.js +10 -0
- package/dist/installer/index.js.map +1 -0
- package/dist/installer/silentAutoInstall.d.ts +99 -0
- package/dist/installer/silentAutoInstall.d.ts.map +1 -0
- package/dist/installer/silentAutoInstall.js +491 -0
- package/dist/installer/silentAutoInstall.js.map +1 -0
- package/dist/installer/systemDeps.d.ts +54 -0
- package/dist/installer/systemDeps.d.ts.map +1 -0
- package/dist/installer/systemDeps.js +322 -0
- package/dist/installer/systemDeps.js.map +1 -0
- package/dist/mcp/cliNotifications.d.ts +133 -0
- package/dist/mcp/cliNotifications.d.ts.map +1 -0
- package/dist/mcp/cliNotifications.js +289 -0
- package/dist/mcp/cliNotifications.js.map +1 -0
- package/dist/mcp/embeddingServerManager.d.ts +307 -0
- package/dist/mcp/embeddingServerManager.d.ts.map +1 -0
- package/dist/mcp/embeddingServerManager.js +2081 -0
- package/dist/mcp/embeddingServerManager.js.map +1 -0
- package/dist/mcp/healthMonitor.d.ts +196 -0
- package/dist/mcp/healthMonitor.d.ts.map +1 -0
- package/dist/mcp/healthMonitor.js +685 -0
- package/dist/mcp/healthMonitor.js.map +1 -0
- package/dist/mcp/hotReloadManager.d.ts +101 -0
- package/dist/mcp/hotReloadManager.d.ts.map +1 -0
- package/dist/mcp/hotReloadManager.js +251 -0
- package/dist/mcp/hotReloadManager.js.map +1 -0
- package/dist/mcp/index.d.ts +16 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +22 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/mcpProtocolHandler.d.ts +64 -0
- package/dist/mcp/mcpProtocolHandler.d.ts.map +1 -0
- package/dist/mcp/mcpProtocolHandler.js +253 -0
- package/dist/mcp/mcpProtocolHandler.js.map +1 -0
- package/dist/mcp/miniCOTServerManager.d.ts +336 -0
- package/dist/mcp/miniCOTServerManager.d.ts.map +1 -0
- package/dist/mcp/miniCOTServerManager.js +1384 -0
- package/dist/mcp/miniCOTServerManager.js.map +1 -0
- package/dist/mcp/promptExecutor.d.ts +188 -0
- package/dist/mcp/promptExecutor.d.ts.map +1 -0
- package/dist/mcp/promptExecutor.js +469 -0
- package/dist/mcp/promptExecutor.js.map +1 -0
- package/dist/mcp/reloadBroadcast.d.ts +127 -0
- package/dist/mcp/reloadBroadcast.d.ts.map +1 -0
- package/dist/mcp/reloadBroadcast.js +275 -0
- package/dist/mcp/reloadBroadcast.js.map +1 -0
- package/dist/mcp/resilientTransport.d.ts +249 -0
- package/dist/mcp/resilientTransport.d.ts.map +1 -0
- package/dist/mcp/resilientTransport.js +931 -0
- package/dist/mcp/resilientTransport.js.map +1 -0
- package/dist/mcp/samplingHandler.d.ts +129 -0
- package/dist/mcp/samplingHandler.d.ts.map +1 -0
- package/dist/mcp/samplingHandler.js +276 -0
- package/dist/mcp/samplingHandler.js.map +1 -0
- package/dist/mcp/specMemServer.d.ts +305 -0
- package/dist/mcp/specMemServer.d.ts.map +1 -0
- package/dist/mcp/specMemServer.js +2048 -0
- package/dist/mcp/specMemServer.js.map +1 -0
- package/dist/mcp/toolRegistry.d.ts +122 -0
- package/dist/mcp/toolRegistry.d.ts.map +1 -0
- package/dist/mcp/toolRegistry.js +609 -0
- package/dist/mcp/toolRegistry.js.map +1 -0
- package/dist/mcp/tools/embeddingControl.d.ts +114 -0
- package/dist/mcp/tools/embeddingControl.d.ts.map +1 -0
- package/dist/mcp/tools/embeddingControl.js +222 -0
- package/dist/mcp/tools/embeddingControl.js.map +1 -0
- package/dist/mcp/tools/index.d.ts +10 -0
- package/dist/mcp/tools/index.d.ts.map +1 -0
- package/dist/mcp/tools/index.js +17 -0
- package/dist/mcp/tools/index.js.map +1 -0
- package/dist/mcp/tools/teamComms.d.ts +444 -0
- package/dist/mcp/tools/teamComms.d.ts.map +1 -0
- package/dist/mcp/tools/teamComms.js +1953 -0
- package/dist/mcp/tools/teamComms.js.map +1 -0
- package/dist/mcp/triggerSystem.d.ts +129 -0
- package/dist/mcp/triggerSystem.d.ts.map +1 -0
- package/dist/mcp/triggerSystem.js +363 -0
- package/dist/mcp/triggerSystem.js.map +1 -0
- package/dist/mcp/watcherIntegration.d.ts +77 -0
- package/dist/mcp/watcherIntegration.d.ts.map +1 -0
- package/dist/mcp/watcherIntegration.js +428 -0
- package/dist/mcp/watcherIntegration.js.map +1 -0
- package/dist/mcp/watcherToolWrappers.d.ts +89 -0
- package/dist/mcp/watcherToolWrappers.d.ts.map +1 -0
- package/dist/mcp/watcherToolWrappers.js +91 -0
- package/dist/mcp/watcherToolWrappers.js.map +1 -0
- package/dist/memorization/claudeCodeMigration.d.ts +34 -0
- package/dist/memorization/claudeCodeMigration.d.ts.map +1 -0
- package/dist/memorization/claudeCodeMigration.js +210 -0
- package/dist/memorization/claudeCodeMigration.js.map +1 -0
- package/dist/memorization/claudeCodeTracker.d.ts +147 -0
- package/dist/memorization/claudeCodeTracker.d.ts.map +1 -0
- package/dist/memorization/claudeCodeTracker.js +424 -0
- package/dist/memorization/claudeCodeTracker.js.map +1 -0
- package/dist/memorization/codeMemorizer.d.ts +158 -0
- package/dist/memorization/codeMemorizer.d.ts.map +1 -0
- package/dist/memorization/codeMemorizer.js +357 -0
- package/dist/memorization/codeMemorizer.js.map +1 -0
- package/dist/memorization/codeRecall.d.ts +156 -0
- package/dist/memorization/codeRecall.d.ts.map +1 -0
- package/dist/memorization/codeRecall.js +499 -0
- package/dist/memorization/codeRecall.js.map +1 -0
- package/dist/memorization/index.d.ts +55 -0
- package/dist/memorization/index.d.ts.map +1 -0
- package/dist/memorization/index.js +64 -0
- package/dist/memorization/index.js.map +1 -0
- package/dist/memorization/memorizationTools.d.ts +413 -0
- package/dist/memorization/memorizationTools.d.ts.map +1 -0
- package/dist/memorization/memorizationTools.js +513 -0
- package/dist/memorization/memorizationTools.js.map +1 -0
- package/dist/memorization/watcherIntegration.d.ts +100 -0
- package/dist/memorization/watcherIntegration.d.ts.map +1 -0
- package/dist/memorization/watcherIntegration.js +196 -0
- package/dist/memorization/watcherIntegration.js.map +1 -0
- package/dist/memory/humanLikeMemory.d.ts +206 -0
- package/dist/memory/humanLikeMemory.d.ts.map +1 -0
- package/dist/memory/humanLikeMemory.js +603 -0
- package/dist/memory/humanLikeMemory.js.map +1 -0
- package/dist/memory/index.d.ts +22 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +24 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/memoryEvolutionMigration.d.ts +36 -0
- package/dist/memory/memoryEvolutionMigration.d.ts.map +1 -0
- package/dist/memory/memoryEvolutionMigration.js +371 -0
- package/dist/memory/memoryEvolutionMigration.js.map +1 -0
- package/dist/memory/quadrantSearch.d.ts +221 -0
- package/dist/memory/quadrantSearch.d.ts.map +1 -0
- package/dist/memory/quadrantSearch.js +897 -0
- package/dist/memory/quadrantSearch.js.map +1 -0
- package/dist/middleware/apiVersioning.d.ts +83 -0
- package/dist/middleware/apiVersioning.d.ts.map +1 -0
- package/dist/middleware/apiVersioning.js +152 -0
- package/dist/middleware/apiVersioning.js.map +1 -0
- package/dist/middleware/compression.d.ts +48 -0
- package/dist/middleware/compression.d.ts.map +1 -0
- package/dist/middleware/compression.js +240 -0
- package/dist/middleware/compression.js.map +1 -0
- package/dist/middleware/csrf.d.ts +118 -0
- package/dist/middleware/csrf.d.ts.map +1 -0
- package/dist/middleware/csrf.js +300 -0
- package/dist/middleware/csrf.js.map +1 -0
- package/dist/middleware/index.d.ts +13 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +17 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/wsRateLimiter.d.ts +129 -0
- package/dist/middleware/wsRateLimiter.d.ts.map +1 -0
- package/dist/middleware/wsRateLimiter.js +279 -0
- package/dist/middleware/wsRateLimiter.js.map +1 -0
- package/dist/migrations/run.d.ts +2 -0
- package/dist/migrations/run.d.ts.map +1 -0
- package/dist/migrations/run.js +25 -0
- package/dist/migrations/run.js.map +1 -0
- package/dist/migrations/syncDimensions.d.ts +24 -0
- package/dist/migrations/syncDimensions.d.ts.map +1 -0
- package/dist/migrations/syncDimensions.js +140 -0
- package/dist/migrations/syncDimensions.js.map +1 -0
- package/dist/migrations/teamComms.d.ts +16 -0
- package/dist/migrations/teamComms.d.ts.map +1 -0
- package/dist/migrations/teamComms.js +210 -0
- package/dist/migrations/teamComms.js.map +1 -0
- package/dist/openapi/index.d.ts +10 -0
- package/dist/openapi/index.d.ts.map +1 -0
- package/dist/openapi/index.js +10 -0
- package/dist/openapi/index.js.map +1 -0
- package/dist/openapi/spec.d.ts +902 -0
- package/dist/openapi/spec.d.ts.map +1 -0
- package/dist/openapi/spec.js +733 -0
- package/dist/openapi/spec.js.map +1 -0
- package/dist/packages/dependencyHistory.d.ts +113 -0
- package/dist/packages/dependencyHistory.d.ts.map +1 -0
- package/dist/packages/dependencyHistory.js +360 -0
- package/dist/packages/dependencyHistory.js.map +1 -0
- package/dist/packages/index.d.ts +30 -0
- package/dist/packages/index.d.ts.map +1 -0
- package/dist/packages/index.js +65 -0
- package/dist/packages/index.js.map +1 -0
- package/dist/packages/packageTools.d.ts +255 -0
- package/dist/packages/packageTools.d.ts.map +1 -0
- package/dist/packages/packageTools.js +242 -0
- package/dist/packages/packageTools.js.map +1 -0
- package/dist/packages/packageTracker.d.ts +98 -0
- package/dist/packages/packageTracker.d.ts.map +1 -0
- package/dist/packages/packageTracker.js +268 -0
- package/dist/packages/packageTracker.js.map +1 -0
- package/dist/packages/packageWatcher.d.ts +62 -0
- package/dist/packages/packageWatcher.d.ts.map +1 -0
- package/dist/packages/packageWatcher.js +146 -0
- package/dist/packages/packageWatcher.js.map +1 -0
- package/dist/providers/MiniCOTProvider.d.ts +48 -0
- package/dist/providers/MiniCOTProvider.d.ts.map +1 -0
- package/dist/providers/MiniCOTProvider.js +98 -0
- package/dist/providers/MiniCOTProvider.js.map +1 -0
- package/dist/reminders/index.d.ts +5 -0
- package/dist/reminders/index.d.ts.map +1 -0
- package/dist/reminders/index.js +5 -0
- package/dist/reminders/index.js.map +1 -0
- package/dist/reminders/skillReminder.d.ts +131 -0
- package/dist/reminders/skillReminder.d.ts.map +1 -0
- package/dist/reminders/skillReminder.js +386 -0
- package/dist/reminders/skillReminder.js.map +1 -0
- package/dist/search.d.ts +35 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +574 -0
- package/dist/search.js.map +1 -0
- package/dist/security/localhostOnly.d.ts +36 -0
- package/dist/security/localhostOnly.d.ts.map +1 -0
- package/dist/security/localhostOnly.js +101 -0
- package/dist/security/localhostOnly.js.map +1 -0
- package/dist/services/CameraZoomSearch.d.ts +206 -0
- package/dist/services/CameraZoomSearch.d.ts.map +1 -0
- package/dist/services/CameraZoomSearch.js +669 -0
- package/dist/services/CameraZoomSearch.js.map +1 -0
- package/dist/services/DataFlowPipeline.d.ts +111 -0
- package/dist/services/DataFlowPipeline.d.ts.map +1 -0
- package/dist/services/DataFlowPipeline.js +379 -0
- package/dist/services/DataFlowPipeline.js.map +1 -0
- package/dist/services/DimensionAdapter.d.ts +194 -0
- package/dist/services/DimensionAdapter.d.ts.map +1 -0
- package/dist/services/DimensionAdapter.js +566 -0
- package/dist/services/DimensionAdapter.js.map +1 -0
- package/dist/services/DimensionService.d.ts +252 -0
- package/dist/services/DimensionService.d.ts.map +1 -0
- package/dist/services/DimensionService.js +564 -0
- package/dist/services/DimensionService.js.map +1 -0
- package/dist/services/EmbeddingQueue.d.ts +71 -0
- package/dist/services/EmbeddingQueue.d.ts.map +1 -0
- package/dist/services/EmbeddingQueue.js +258 -0
- package/dist/services/EmbeddingQueue.js.map +1 -0
- package/dist/services/MemoryDrilldown.d.ts +226 -0
- package/dist/services/MemoryDrilldown.d.ts.map +1 -0
- package/dist/services/MemoryDrilldown.js +479 -0
- package/dist/services/MemoryDrilldown.js.map +1 -0
- package/dist/services/MiniCOTScorer.d.ts +140 -0
- package/dist/services/MiniCOTScorer.d.ts.map +1 -0
- package/dist/services/MiniCOTScorer.js +292 -0
- package/dist/services/MiniCOTScorer.js.map +1 -0
- package/dist/services/ProjectContext.d.ts +342 -0
- package/dist/services/ProjectContext.d.ts.map +1 -0
- package/dist/services/ProjectContext.js +667 -0
- package/dist/services/ProjectContext.js.map +1 -0
- package/dist/services/ResponseCompactor.d.ts +135 -0
- package/dist/services/ResponseCompactor.d.ts.map +1 -0
- package/dist/services/ResponseCompactor.js +501 -0
- package/dist/services/ResponseCompactor.js.map +1 -0
- package/dist/services/TeamCommsDbService.d.ts +202 -0
- package/dist/services/TeamCommsDbService.d.ts.map +1 -0
- package/dist/services/TeamCommsDbService.js +526 -0
- package/dist/services/TeamCommsDbService.js.map +1 -0
- package/dist/services/UnifiedPasswordService.d.ts +166 -0
- package/dist/services/UnifiedPasswordService.d.ts.map +1 -0
- package/dist/services/UnifiedPasswordService.js +587 -0
- package/dist/services/UnifiedPasswordService.js.map +1 -0
- package/dist/services/adaptiveSearchConfig.d.ts +64 -0
- package/dist/services/adaptiveSearchConfig.d.ts.map +1 -0
- package/dist/services/adaptiveSearchConfig.js +187 -0
- package/dist/services/adaptiveSearchConfig.js.map +1 -0
- package/dist/skills/index.d.ts +8 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +8 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/skillScanner.d.ts +203 -0
- package/dist/skills/skillScanner.d.ts.map +1 -0
- package/dist/skills/skillScanner.js +559 -0
- package/dist/skills/skillScanner.js.map +1 -0
- package/dist/skills/skillsResource.d.ts +69 -0
- package/dist/skills/skillsResource.d.ts.map +1 -0
- package/dist/skills/skillsResource.js +257 -0
- package/dist/skills/skillsResource.js.map +1 -0
- package/dist/startup/index.d.ts +9 -0
- package/dist/startup/index.d.ts.map +1 -0
- package/dist/startup/index.js +12 -0
- package/dist/startup/index.js.map +1 -0
- package/dist/startup/startupIndexing.d.ts +80 -0
- package/dist/startup/startupIndexing.d.ts.map +1 -0
- package/dist/startup/startupIndexing.js +463 -0
- package/dist/startup/startupIndexing.js.map +1 -0
- package/dist/startup/validation.d.ts +89 -0
- package/dist/startup/validation.d.ts.map +1 -0
- package/dist/startup/validation.js +590 -0
- package/dist/startup/validation.js.map +1 -0
- package/dist/storage/index.d.ts +4 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +4 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/overflowManager.d.ts +80 -0
- package/dist/storage/overflowManager.d.ts.map +1 -0
- package/dist/storage/overflowManager.js +317 -0
- package/dist/storage/overflowManager.js.map +1 -0
- package/dist/storage/overflowStorage.d.ts +69 -0
- package/dist/storage/overflowStorage.d.ts.map +1 -0
- package/dist/storage/overflowStorage.js +379 -0
- package/dist/storage/overflowStorage.js.map +1 -0
- package/dist/storage/toonFormat.d.ts +50 -0
- package/dist/storage/toonFormat.d.ts.map +1 -0
- package/dist/storage/toonFormat.js +224 -0
- package/dist/storage/toonFormat.js.map +1 -0
- package/dist/team-members/communication.d.ts +237 -0
- package/dist/team-members/communication.d.ts.map +1 -0
- package/dist/team-members/communication.js +650 -0
- package/dist/team-members/communication.js.map +1 -0
- package/dist/team-members/index.d.ts +14 -0
- package/dist/team-members/index.d.ts.map +1 -0
- package/dist/team-members/index.js +22 -0
- package/dist/team-members/index.js.map +1 -0
- package/dist/team-members/taskOrchestrator.d.ts +224 -0
- package/dist/team-members/taskOrchestrator.d.ts.map +1 -0
- package/dist/team-members/taskOrchestrator.js +574 -0
- package/dist/team-members/taskOrchestrator.js.map +1 -0
- package/dist/team-members/taskTeamMemberLogger.d.ts +157 -0
- package/dist/team-members/taskTeamMemberLogger.d.ts.map +1 -0
- package/dist/team-members/taskTeamMemberLogger.js +478 -0
- package/dist/team-members/taskTeamMemberLogger.js.map +1 -0
- package/dist/team-members/teamCommsService.d.ts +221 -0
- package/dist/team-members/teamCommsService.d.ts.map +1 -0
- package/dist/team-members/teamCommsService.js +628 -0
- package/dist/team-members/teamCommsService.js.map +1 -0
- package/dist/team-members/teamMemberChannels.d.ts +217 -0
- package/dist/team-members/teamMemberChannels.d.ts.map +1 -0
- package/dist/team-members/teamMemberChannels.js +687 -0
- package/dist/team-members/teamMemberChannels.js.map +1 -0
- package/dist/team-members/teamMemberDashboard.d.ts +222 -0
- package/dist/team-members/teamMemberDashboard.d.ts.map +1 -0
- package/dist/team-members/teamMemberDashboard.js +610 -0
- package/dist/team-members/teamMemberDashboard.js.map +1 -0
- package/dist/team-members/teamMemberDeployment.d.ts +60 -0
- package/dist/team-members/teamMemberDeployment.d.ts.map +1 -0
- package/dist/team-members/teamMemberDeployment.js +429 -0
- package/dist/team-members/teamMemberDeployment.js.map +1 -0
- package/dist/team-members/teamMemberDiscovery.d.ts +178 -0
- package/dist/team-members/teamMemberDiscovery.d.ts.map +1 -0
- package/dist/team-members/teamMemberDiscovery.js +446 -0
- package/dist/team-members/teamMemberDiscovery.js.map +1 -0
- package/dist/team-members/teamMemberHistory.d.ts +80 -0
- package/dist/team-members/teamMemberHistory.d.ts.map +1 -0
- package/dist/team-members/teamMemberHistory.js +426 -0
- package/dist/team-members/teamMemberHistory.js.map +1 -0
- package/dist/team-members/teamMemberLimits.d.ts +66 -0
- package/dist/team-members/teamMemberLimits.d.ts.map +1 -0
- package/dist/team-members/teamMemberLimits.js +259 -0
- package/dist/team-members/teamMemberLimits.js.map +1 -0
- package/dist/team-members/teamMemberRegistry.d.ts +199 -0
- package/dist/team-members/teamMemberRegistry.d.ts.map +1 -0
- package/dist/team-members/teamMemberRegistry.js +572 -0
- package/dist/team-members/teamMemberRegistry.js.map +1 -0
- package/dist/team-members/teamMemberTracker.d.ts +148 -0
- package/dist/team-members/teamMemberTracker.d.ts.map +1 -0
- package/dist/team-members/teamMemberTracker.js +828 -0
- package/dist/team-members/teamMemberTracker.js.map +1 -0
- package/dist/team-members/workers/aiWorker.d.ts +53 -0
- package/dist/team-members/workers/aiWorker.d.ts.map +1 -0
- package/dist/team-members/workers/aiWorker.js +322 -0
- package/dist/team-members/workers/aiWorker.js.map +1 -0
- package/dist/team-members/workers/baseWorker.d.ts +101 -0
- package/dist/team-members/workers/baseWorker.d.ts.map +1 -0
- package/dist/team-members/workers/baseWorker.js +179 -0
- package/dist/team-members/workers/baseWorker.js.map +1 -0
- package/dist/team-members/workers/codeReviewWorker.d.ts +3 -0
- package/dist/team-members/workers/codeReviewWorker.d.ts.map +1 -0
- package/dist/team-members/workers/codeReviewWorker.js +144 -0
- package/dist/team-members/workers/codeReviewWorker.js.map +1 -0
- package/dist/team-members/workers/index.d.ts +7 -0
- package/dist/team-members/workers/index.d.ts.map +1 -0
- package/dist/team-members/workers/index.js +7 -0
- package/dist/team-members/workers/index.js.map +1 -0
- package/dist/team-members/workers/repairWorker.d.ts +9 -0
- package/dist/team-members/workers/repairWorker.d.ts.map +1 -0
- package/dist/team-members/workers/repairWorker.js +102 -0
- package/dist/team-members/workers/repairWorker.js.map +1 -0
- package/dist/team-members/workers/sendToTeamMemberB.d.ts +9 -0
- package/dist/team-members/workers/sendToTeamMemberB.d.ts.map +1 -0
- package/dist/team-members/workers/sendToTeamMemberB.js +105 -0
- package/dist/team-members/workers/sendToTeamMemberB.js.map +1 -0
- package/dist/team-members/workers/specmemClient.d.ts +179 -0
- package/dist/team-members/workers/specmemClient.d.ts.map +1 -0
- package/dist/team-members/workers/specmemClient.js +421 -0
- package/dist/team-members/workers/specmemClient.js.map +1 -0
- package/dist/team-members/workers/testCommunication.d.ts +8 -0
- package/dist/team-members/workers/testCommunication.d.ts.map +1 -0
- package/dist/team-members/workers/testCommunication.js +136 -0
- package/dist/team-members/workers/testCommunication.js.map +1 -0
- package/dist/team-members/workers/testCommunicationSuite.d.ts +26 -0
- package/dist/team-members/workers/testCommunicationSuite.d.ts.map +1 -0
- package/dist/team-members/workers/testCommunicationSuite.js +415 -0
- package/dist/team-members/workers/testCommunicationSuite.js.map +1 -0
- package/dist/team-members/workers/testWorker.d.ts +9 -0
- package/dist/team-members/workers/testWorker.d.ts.map +1 -0
- package/dist/team-members/workers/testWorker.js +107 -0
- package/dist/team-members/workers/testWorker.js.map +1 -0
- package/dist/tools/agentDefinitions.d.ts +30 -0
- package/dist/tools/agentDefinitions.d.ts.map +1 -0
- package/dist/tools/agentDefinitions.js +166 -0
- package/dist/tools/agentDefinitions.js.map +1 -0
- package/dist/tools/goofy/checkSyncStatus.d.ts +68 -0
- package/dist/tools/goofy/checkSyncStatus.d.ts.map +1 -0
- package/dist/tools/goofy/checkSyncStatus.js +112 -0
- package/dist/tools/goofy/checkSyncStatus.js.map +1 -0
- package/dist/tools/goofy/codeMemoryLink.d.ts +82 -0
- package/dist/tools/goofy/codeMemoryLink.d.ts.map +1 -0
- package/dist/tools/goofy/codeMemoryLink.js +212 -0
- package/dist/tools/goofy/codeMemoryLink.js.map +1 -0
- package/dist/tools/goofy/compareInstanceMemory.d.ts +97 -0
- package/dist/tools/goofy/compareInstanceMemory.d.ts.map +1 -0
- package/dist/tools/goofy/compareInstanceMemory.js +218 -0
- package/dist/tools/goofy/compareInstanceMemory.js.map +1 -0
- package/dist/tools/goofy/createReasoningChain.d.ts +135 -0
- package/dist/tools/goofy/createReasoningChain.d.ts.map +1 -0
- package/dist/tools/goofy/createReasoningChain.js +257 -0
- package/dist/tools/goofy/createReasoningChain.js.map +1 -0
- package/dist/tools/goofy/deployTeamMember.d.ts +63 -0
- package/dist/tools/goofy/deployTeamMember.d.ts.map +1 -0
- package/dist/tools/goofy/deployTeamMember.js +103 -0
- package/dist/tools/goofy/deployTeamMember.js.map +1 -0
- package/dist/tools/goofy/drillDown.d.ts +143 -0
- package/dist/tools/goofy/drillDown.d.ts.map +1 -0
- package/dist/tools/goofy/drillDown.js +288 -0
- package/dist/tools/goofy/drillDown.js.map +1 -0
- package/dist/tools/goofy/extractClaudeSessions.d.ts +90 -0
- package/dist/tools/goofy/extractClaudeSessions.d.ts.map +1 -0
- package/dist/tools/goofy/extractClaudeSessions.js +277 -0
- package/dist/tools/goofy/extractClaudeSessions.js.map +1 -0
- package/dist/tools/goofy/extractContextRestorations.d.ts +70 -0
- package/dist/tools/goofy/extractContextRestorations.d.ts.map +1 -0
- package/dist/tools/goofy/extractContextRestorations.js +100 -0
- package/dist/tools/goofy/extractContextRestorations.js.map +1 -0
- package/dist/tools/goofy/findCodePointers.d.ts +364 -0
- package/dist/tools/goofy/findCodePointers.d.ts.map +1 -0
- package/dist/tools/goofy/findCodePointers.js +1764 -0
- package/dist/tools/goofy/findCodePointers.js.map +1 -0
- package/dist/tools/goofy/findMemoryGallery.d.ts +40 -0
- package/dist/tools/goofy/findMemoryGallery.d.ts.map +1 -0
- package/dist/tools/goofy/findMemoryGallery.js +66 -0
- package/dist/tools/goofy/findMemoryGallery.js.map +1 -0
- package/dist/tools/goofy/findWhatISaid.d.ts +300 -0
- package/dist/tools/goofy/findWhatISaid.d.ts.map +1 -0
- package/dist/tools/goofy/findWhatISaid.js +2547 -0
- package/dist/tools/goofy/findWhatISaid.js.map +1 -0
- package/dist/tools/goofy/forceResync.d.ts +57 -0
- package/dist/tools/goofy/forceResync.d.ts.map +1 -0
- package/dist/tools/goofy/forceResync.js +100 -0
- package/dist/tools/goofy/forceResync.js.map +1 -0
- package/dist/tools/goofy/getActiveTeamMembers.d.ts +48 -0
- package/dist/tools/goofy/getActiveTeamMembers.d.ts.map +1 -0
- package/dist/tools/goofy/getActiveTeamMembers.js +136 -0
- package/dist/tools/goofy/getActiveTeamMembers.js.map +1 -0
- package/dist/tools/goofy/getMemoryFull.d.ts +34 -0
- package/dist/tools/goofy/getMemoryFull.d.ts.map +1 -0
- package/dist/tools/goofy/getMemoryFull.js +58 -0
- package/dist/tools/goofy/getMemoryFull.js.map +1 -0
- package/dist/tools/goofy/getSessionWatcherStatus.d.ts +43 -0
- package/dist/tools/goofy/getSessionWatcherStatus.d.ts.map +1 -0
- package/dist/tools/goofy/getSessionWatcherStatus.js +92 -0
- package/dist/tools/goofy/getSessionWatcherStatus.js.map +1 -0
- package/dist/tools/goofy/getTeamMemberOutput.d.ts +35 -0
- package/dist/tools/goofy/getTeamMemberOutput.d.ts.map +1 -0
- package/dist/tools/goofy/getTeamMemberOutput.js +62 -0
- package/dist/tools/goofy/getTeamMemberOutput.js.map +1 -0
- package/dist/tools/goofy/getTeamMemberScreen.d.ts +28 -0
- package/dist/tools/goofy/getTeamMemberScreen.d.ts.map +1 -0
- package/dist/tools/goofy/getTeamMemberScreen.js +59 -0
- package/dist/tools/goofy/getTeamMemberScreen.js.map +1 -0
- package/dist/tools/goofy/getTeamMemberStatus.d.ts +33 -0
- package/dist/tools/goofy/getTeamMemberStatus.d.ts.map +1 -0
- package/dist/tools/goofy/getTeamMemberStatus.js +56 -0
- package/dist/tools/goofy/getTeamMemberStatus.js.map +1 -0
- package/dist/tools/goofy/index.d.ts +39 -0
- package/dist/tools/goofy/index.d.ts.map +1 -0
- package/dist/tools/goofy/index.js +51 -0
- package/dist/tools/goofy/index.js.map +1 -0
- package/dist/tools/goofy/interveneTeamMember.d.ts +33 -0
- package/dist/tools/goofy/interveneTeamMember.d.ts.map +1 -0
- package/dist/tools/goofy/interveneTeamMember.js +69 -0
- package/dist/tools/goofy/interveneTeamMember.js.map +1 -0
- package/dist/tools/goofy/killDeployedTeamMember.d.ts +29 -0
- package/dist/tools/goofy/killDeployedTeamMember.d.ts.map +1 -0
- package/dist/tools/goofy/killDeployedTeamMember.js +56 -0
- package/dist/tools/goofy/killDeployedTeamMember.js.map +1 -0
- package/dist/tools/goofy/linkTheVibes.d.ts +125 -0
- package/dist/tools/goofy/linkTheVibes.d.ts.map +1 -0
- package/dist/tools/goofy/linkTheVibes.js +354 -0
- package/dist/tools/goofy/linkTheVibes.js.map +1 -0
- package/dist/tools/goofy/listDeployedTeamMembers.d.ts +26 -0
- package/dist/tools/goofy/listDeployedTeamMembers.d.ts.map +1 -0
- package/dist/tools/goofy/listDeployedTeamMembers.js +52 -0
- package/dist/tools/goofy/listDeployedTeamMembers.js.map +1 -0
- package/dist/tools/goofy/listenForMessages.d.ts +56 -0
- package/dist/tools/goofy/listenForMessages.d.ts.map +1 -0
- package/dist/tools/goofy/listenForMessages.js +122 -0
- package/dist/tools/goofy/listenForMessages.js.map +1 -0
- package/dist/tools/goofy/memoryHealthCheck.d.ts +159 -0
- package/dist/tools/goofy/memoryHealthCheck.d.ts.map +1 -0
- package/dist/tools/goofy/memoryHealthCheck.js +443 -0
- package/dist/tools/goofy/memoryHealthCheck.js.map +1 -0
- package/dist/tools/goofy/rememberThisShit.d.ts +103 -0
- package/dist/tools/goofy/rememberThisShit.d.ts.map +1 -0
- package/dist/tools/goofy/rememberThisShit.js +291 -0
- package/dist/tools/goofy/rememberThisShit.js.map +1 -0
- package/dist/tools/goofy/sayToTeamMember.d.ts +55 -0
- package/dist/tools/goofy/sayToTeamMember.d.ts.map +1 -0
- package/dist/tools/goofy/sayToTeamMember.js +116 -0
- package/dist/tools/goofy/sayToTeamMember.js.map +1 -0
- package/dist/tools/goofy/selfMessage.d.ts +54 -0
- package/dist/tools/goofy/selfMessage.d.ts.map +1 -0
- package/dist/tools/goofy/selfMessage.js +111 -0
- package/dist/tools/goofy/selfMessage.js.map +1 -0
- package/dist/tools/goofy/sendHeartbeat.d.ts +53 -0
- package/dist/tools/goofy/sendHeartbeat.d.ts.map +1 -0
- package/dist/tools/goofy/sendHeartbeat.js +119 -0
- package/dist/tools/goofy/sendHeartbeat.js.map +1 -0
- package/dist/tools/goofy/showMeTheStats.d.ts +216 -0
- package/dist/tools/goofy/showMeTheStats.d.ts.map +1 -0
- package/dist/tools/goofy/showMeTheStats.js +535 -0
- package/dist/tools/goofy/showMeTheStats.js.map +1 -0
- package/dist/tools/goofy/smartRecall.d.ts +136 -0
- package/dist/tools/goofy/smartRecall.d.ts.map +1 -0
- package/dist/tools/goofy/smartRecall.js +286 -0
- package/dist/tools/goofy/smartRecall.js.map +1 -0
- package/dist/tools/goofy/smartSearch.d.ts +64 -0
- package/dist/tools/goofy/smartSearch.d.ts.map +1 -0
- package/dist/tools/goofy/smartSearch.js +89 -0
- package/dist/tools/goofy/smartSearch.js.map +1 -0
- package/dist/tools/goofy/smushMemoriesTogether.d.ts +128 -0
- package/dist/tools/goofy/smushMemoriesTogether.d.ts.map +1 -0
- package/dist/tools/goofy/smushMemoriesTogether.js +536 -0
- package/dist/tools/goofy/smushMemoriesTogether.js.map +1 -0
- package/dist/tools/goofy/spatialSearch.d.ts +198 -0
- package/dist/tools/goofy/spatialSearch.d.ts.map +1 -0
- package/dist/tools/goofy/spatialSearch.js +551 -0
- package/dist/tools/goofy/spatialSearch.js.map +1 -0
- package/dist/tools/goofy/spawnResearchTeamMember.d.ts +104 -0
- package/dist/tools/goofy/spawnResearchTeamMember.d.ts.map +1 -0
- package/dist/tools/goofy/spawnResearchTeamMember.js +290 -0
- package/dist/tools/goofy/spawnResearchTeamMember.js.map +1 -0
- package/dist/tools/goofy/spawnResearchTeamMemberTool.d.ts +121 -0
- package/dist/tools/goofy/spawnResearchTeamMemberTool.d.ts.map +1 -0
- package/dist/tools/goofy/spawnResearchTeamMemberTool.js +215 -0
- package/dist/tools/goofy/spawnResearchTeamMemberTool.js.map +1 -0
- package/dist/tools/goofy/startWatchingTheFiles.d.ts +81 -0
- package/dist/tools/goofy/startWatchingTheFiles.d.ts.map +1 -0
- package/dist/tools/goofy/startWatchingTheFiles.js +161 -0
- package/dist/tools/goofy/startWatchingTheFiles.js.map +1 -0
- package/dist/tools/goofy/stopWatchingTheFiles.d.ts +50 -0
- package/dist/tools/goofy/stopWatchingTheFiles.d.ts.map +1 -0
- package/dist/tools/goofy/stopWatchingTheFiles.js +81 -0
- package/dist/tools/goofy/stopWatchingTheFiles.js.map +1 -0
- package/dist/tools/goofy/whatDidIMean.d.ts +113 -0
- package/dist/tools/goofy/whatDidIMean.d.ts.map +1 -0
- package/dist/tools/goofy/whatDidIMean.js +401 -0
- package/dist/tools/goofy/whatDidIMean.js.map +1 -0
- package/dist/tools/goofy/yeahNahDeleteThat.d.ts +109 -0
- package/dist/tools/goofy/yeahNahDeleteThat.d.ts.map +1 -0
- package/dist/tools/goofy/yeahNahDeleteThat.js +319 -0
- package/dist/tools/goofy/yeahNahDeleteThat.js.map +1 -0
- package/dist/tools/index.d.ts +9 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +9 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/teamMemberDeployer.d.ts +117 -0
- package/dist/tools/teamMemberDeployer.d.ts.map +1 -0
- package/dist/tools/teamMemberDeployer.js +613 -0
- package/dist/tools/teamMemberDeployer.js.map +1 -0
- package/dist/trace/index.d.ts +14 -0
- package/dist/trace/index.d.ts.map +1 -0
- package/dist/trace/index.js +16 -0
- package/dist/trace/index.js.map +1 -0
- package/dist/trace/tools/analyzeImpact.d.ts +90 -0
- package/dist/trace/tools/analyzeImpact.d.ts.map +1 -0
- package/dist/trace/tools/analyzeImpact.js +240 -0
- package/dist/trace/tools/analyzeImpact.js.map +1 -0
- package/dist/trace/tools/exploreDependencies.d.ts +81 -0
- package/dist/trace/tools/exploreDependencies.d.ts.map +1 -0
- package/dist/trace/tools/exploreDependencies.js +161 -0
- package/dist/trace/tools/exploreDependencies.js.map +1 -0
- package/dist/trace/tools/findSimilarBugs.d.ts +112 -0
- package/dist/trace/tools/findSimilarBugs.d.ts.map +1 -0
- package/dist/trace/tools/findSimilarBugs.js +216 -0
- package/dist/trace/tools/findSimilarBugs.js.map +1 -0
- package/dist/trace/tools/index.d.ts +22 -0
- package/dist/trace/tools/index.d.ts.map +1 -0
- package/dist/trace/tools/index.js +39 -0
- package/dist/trace/tools/index.js.map +1 -0
- package/dist/trace/tools/smartExplore.d.ts +126 -0
- package/dist/trace/tools/smartExplore.d.ts.map +1 -0
- package/dist/trace/tools/smartExplore.js +303 -0
- package/dist/trace/tools/smartExplore.js.map +1 -0
- package/dist/trace/tools/traceError.d.ts +101 -0
- package/dist/trace/tools/traceError.d.ts.map +1 -0
- package/dist/trace/tools/traceError.js +175 -0
- package/dist/trace/tools/traceError.js.map +1 -0
- package/dist/trace/traceExploreSystem.d.ts +271 -0
- package/dist/trace/traceExploreSystem.d.ts.map +1 -0
- package/dist/trace/traceExploreSystem.js +789 -0
- package/dist/trace/traceExploreSystem.js.map +1 -0
- package/dist/types/index.d.ts +421 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +118 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/circuitBreaker.d.ts +195 -0
- package/dist/utils/circuitBreaker.d.ts.map +1 -0
- package/dist/utils/circuitBreaker.js +374 -0
- package/dist/utils/circuitBreaker.js.map +1 -0
- package/dist/utils/cleanupHandler.d.ts +108 -0
- package/dist/utils/cleanupHandler.d.ts.map +1 -0
- package/dist/utils/cleanupHandler.js +203 -0
- package/dist/utils/cleanupHandler.js.map +1 -0
- package/dist/utils/compactXmlResponse.d.ts +60 -0
- package/dist/utils/compactXmlResponse.d.ts.map +1 -0
- package/dist/utils/compactXmlResponse.js +209 -0
- package/dist/utils/compactXmlResponse.js.map +1 -0
- package/dist/utils/cotBroadcast.d.ts +56 -0
- package/dist/utils/cotBroadcast.d.ts.map +1 -0
- package/dist/utils/cotBroadcast.js +157 -0
- package/dist/utils/cotBroadcast.js.map +1 -0
- package/dist/utils/debugLogger.d.ts +95 -0
- package/dist/utils/debugLogger.d.ts.map +1 -0
- package/dist/utils/debugLogger.js +610 -0
- package/dist/utils/debugLogger.js.map +1 -0
- package/dist/utils/fileProcessingQueue.d.ts +259 -0
- package/dist/utils/fileProcessingQueue.d.ts.map +1 -0
- package/dist/utils/fileProcessingQueue.js +714 -0
- package/dist/utils/fileProcessingQueue.js.map +1 -0
- package/dist/utils/humanReadableOutput.d.ts +124 -0
- package/dist/utils/humanReadableOutput.d.ts.map +1 -0
- package/dist/utils/humanReadableOutput.js +340 -0
- package/dist/utils/humanReadableOutput.js.map +1 -0
- package/dist/utils/index.d.ts +32 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +71 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/instanceManager.d.ts +530 -0
- package/dist/utils/instanceManager.d.ts.map +1 -0
- package/dist/utils/instanceManager.js +1784 -0
- package/dist/utils/instanceManager.js.map +1 -0
- package/dist/utils/logger.d.ts +6 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +49 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/mapCleanup.d.ts +58 -0
- package/dist/utils/mapCleanup.d.ts.map +1 -0
- package/dist/utils/mapCleanup.js +150 -0
- package/dist/utils/mapCleanup.js.map +1 -0
- package/dist/utils/memoryManager.d.ts +349 -0
- package/dist/utils/memoryManager.d.ts.map +1 -0
- package/dist/utils/memoryManager.js +799 -0
- package/dist/utils/memoryManager.js.map +1 -0
- package/dist/utils/metrics.d.ts +160 -0
- package/dist/utils/metrics.d.ts.map +1 -0
- package/dist/utils/metrics.js +558 -0
- package/dist/utils/metrics.js.map +1 -0
- package/dist/utils/pathValidator.d.ts +96 -0
- package/dist/utils/pathValidator.d.ts.map +1 -0
- package/dist/utils/pathValidator.js +320 -0
- package/dist/utils/pathValidator.js.map +1 -0
- package/dist/utils/portAllocator.d.ts +296 -0
- package/dist/utils/portAllocator.d.ts.map +1 -0
- package/dist/utils/portAllocator.js +768 -0
- package/dist/utils/portAllocator.js.map +1 -0
- package/dist/utils/portUtils.d.ts +97 -0
- package/dist/utils/portUtils.d.ts.map +1 -0
- package/dist/utils/portUtils.js +285 -0
- package/dist/utils/portUtils.js.map +1 -0
- package/dist/utils/postgresAutoSetup.d.ts +55 -0
- package/dist/utils/postgresAutoSetup.d.ts.map +1 -0
- package/dist/utils/postgresAutoSetup.js +406 -0
- package/dist/utils/postgresAutoSetup.js.map +1 -0
- package/dist/utils/processHealthCheck.d.ts +61 -0
- package/dist/utils/processHealthCheck.d.ts.map +1 -0
- package/dist/utils/processHealthCheck.js +313 -0
- package/dist/utils/processHealthCheck.js.map +1 -0
- package/dist/utils/progressReporter.d.ts +151 -0
- package/dist/utils/progressReporter.d.ts.map +1 -0
- package/dist/utils/progressReporter.js +345 -0
- package/dist/utils/progressReporter.js.map +1 -0
- package/dist/utils/projectEnv.d.ts +73 -0
- package/dist/utils/projectEnv.d.ts.map +1 -0
- package/dist/utils/projectEnv.js +137 -0
- package/dist/utils/projectEnv.js.map +1 -0
- package/dist/utils/qoms.d.ts +122 -0
- package/dist/utils/qoms.d.ts.map +1 -0
- package/dist/utils/qoms.js +650 -0
- package/dist/utils/qoms.js.map +1 -0
- package/dist/utils/retryHelper.d.ts +122 -0
- package/dist/utils/retryHelper.d.ts.map +1 -0
- package/dist/utils/retryHelper.js +272 -0
- package/dist/utils/retryHelper.js.map +1 -0
- package/dist/utils/safeProcessTermination.d.ts +206 -0
- package/dist/utils/safeProcessTermination.d.ts.map +1 -0
- package/dist/utils/safeProcessTermination.js +552 -0
- package/dist/utils/safeProcessTermination.js.map +1 -0
- package/dist/utils/sessionInjector.d.ts +68 -0
- package/dist/utils/sessionInjector.d.ts.map +1 -0
- package/dist/utils/sessionInjector.js +189 -0
- package/dist/utils/sessionInjector.js.map +1 -0
- package/dist/utils/statsCache.d.ts +134 -0
- package/dist/utils/statsCache.d.ts.map +1 -0
- package/dist/utils/statsCache.js +285 -0
- package/dist/utils/statsCache.js.map +1 -0
- package/dist/utils/timeoutMiddleware.d.ts +81 -0
- package/dist/utils/timeoutMiddleware.d.ts.map +1 -0
- package/dist/utils/timeoutMiddleware.js +155 -0
- package/dist/utils/timeoutMiddleware.js.map +1 -0
- package/dist/utils/timerRegistry.d.ts +91 -0
- package/dist/utils/timerRegistry.d.ts.map +1 -0
- package/dist/utils/timerRegistry.js +187 -0
- package/dist/utils/timerRegistry.js.map +1 -0
- package/dist/utils/tokenCompressor.d.ts +332 -0
- package/dist/utils/tokenCompressor.d.ts.map +1 -0
- package/dist/utils/tokenCompressor.js +1306 -0
- package/dist/utils/tokenCompressor.js.map +1 -0
- package/dist/utils/tracing.d.ts +236 -0
- package/dist/utils/tracing.d.ts.map +1 -0
- package/dist/utils/tracing.js +378 -0
- package/dist/utils/tracing.js.map +1 -0
- package/dist/watcher/changeHandler.d.ts +123 -0
- package/dist/watcher/changeHandler.d.ts.map +1 -0
- package/dist/watcher/changeHandler.js +623 -0
- package/dist/watcher/changeHandler.js.map +1 -0
- package/dist/watcher/changeQueue.d.ts +133 -0
- package/dist/watcher/changeQueue.d.ts.map +1 -0
- package/dist/watcher/changeQueue.js +355 -0
- package/dist/watcher/changeQueue.js.map +1 -0
- package/dist/watcher/fileWatcher.d.ts +121 -0
- package/dist/watcher/fileWatcher.d.ts.map +1 -0
- package/dist/watcher/fileWatcher.js +531 -0
- package/dist/watcher/fileWatcher.js.map +1 -0
- package/dist/watcher/index.d.ts +94 -0
- package/dist/watcher/index.d.ts.map +1 -0
- package/dist/watcher/index.js +235 -0
- package/dist/watcher/index.js.map +1 -0
- package/dist/watcher/syncChecker.d.ts +93 -0
- package/dist/watcher/syncChecker.d.ts.map +1 -0
- package/dist/watcher/syncChecker.js +401 -0
- package/dist/watcher/syncChecker.js.map +1 -0
- package/dist/watcher/tsCompiler.d.ts +88 -0
- package/dist/watcher/tsCompiler.d.ts.map +1 -0
- package/dist/watcher/tsCompiler.js +212 -0
- package/dist/watcher/tsCompiler.js.map +1 -0
- package/embedding-sandbox/Dockerfile +77 -0
- package/embedding-sandbox/Dockerfile.frankenstein +91 -0
- package/embedding-sandbox/README.md +193 -0
- package/embedding-sandbox/__pycache__/frankenstein-embeddings.cpython-312.pyc +0 -0
- package/embedding-sandbox/__pycache__/frankenstein-embeddings.cpython-313.pyc +0 -0
- package/embedding-sandbox/__pycache__/qqms_v2.cpython-312.pyc +0 -0
- package/embedding-sandbox/__pycache__/qqms_v2.cpython-313.pyc +0 -0
- package/embedding-sandbox/add_js_docs.py +684 -0
- package/embedding-sandbox/build_docs_db.py +239 -0
- package/embedding-sandbox/client.cjs +376 -0
- package/embedding-sandbox/client.ts +913 -0
- package/embedding-sandbox/deploy-frankenstein.sh +240 -0
- package/embedding-sandbox/docker-compose.yml +60 -0
- package/embedding-sandbox/docker-manager.py +325 -0
- package/embedding-sandbox/docs/python_docs.db +0 -0
- package/embedding-sandbox/download-model.mjs +79 -0
- package/embedding-sandbox/download-model.py +28 -0
- package/embedding-sandbox/embedding-supervisor.sh +164 -0
- package/embedding-sandbox/frankenstein-embeddings.py +3940 -0
- package/embedding-sandbox/manage-services.sh +354 -0
- package/embedding-sandbox/overflow_queue.py +345 -0
- package/embedding-sandbox/package.json +17 -0
- package/embedding-sandbox/project_isolation.py +292 -0
- package/embedding-sandbox/qqms_v2.py +967 -0
- package/embedding-sandbox/ram-manager.sh +311 -0
- package/embedding-sandbox/requirements-frankenstein.txt +7 -0
- package/embedding-sandbox/run_js_docs.py +59 -0
- package/embedding-sandbox/seed_docs.py +885 -0
- package/embedding-sandbox/server-batch.mjs +228 -0
- package/embedding-sandbox/server.mjs +389 -0
- package/embedding-sandbox/specmem/sockets/claude-input-state.json +1 -0
- package/embedding-sandbox/specmem/sockets/embedding-death-reason.txt +3 -0
- package/embedding-sandbox/specmem/sockets/seen-sessions.json +1 -0
- package/embedding-sandbox/specmem/sockets/session-start.lock +1 -0
- package/embedding-sandbox/specmem/sockets/session-stops.log +7 -0
- package/embedding-sandbox/start-frankenstein-throttled.sh +98 -0
- package/embedding-sandbox/start-on-demand.sh +116 -0
- package/embedding-sandbox/start-sandbox.sh +237 -0
- package/embedding-sandbox/start-supervised.sh +11 -0
- package/embedding-sandbox/stop-sandbox.sh +51 -0
- package/embedding-sandbox/test-socket.mjs +61 -0
- package/embedding-sandbox/warm-start.sh +353 -0
- package/embedding-sandbox/warm_start_feeder.py +660 -0
- package/legal/README.md +31 -0
- package/legal/anthropic-privacy-center-screenshot-2026-01-30.png +0 -0
- package/legal/anthropic-tos-screenshot-2026-01-30.png +0 -0
- package/lib/codebase-bridge.cjs +308 -0
- package/package.json +136 -0
- package/plugins/specmem-agents/agents/bug-hunter.md +79 -0
- package/plugins/specmem-agents/agents/memory-explorer.md +57 -0
- package/plugins/specmem-agents/agents/team-coordinator.md +82 -0
- package/scripts/auto-updater.cjs +399 -0
- package/scripts/backfill-code-definition-embeddings.ts +440 -0
- package/scripts/backfill-code-embeddings.ts +206 -0
- package/scripts/capture-tos-screenshots.cjs +94 -0
- package/scripts/check-global-install.cjs +67 -0
- package/scripts/cleanup-embedding-servers.sh +25 -0
- package/scripts/dashboard-standalone.sh +369 -0
- package/scripts/deploy-hooks.cjs +1451 -0
- package/scripts/deploy.sh +106 -0
- package/scripts/docker-project-down.sh +83 -0
- package/scripts/docker-project-list.sh +40 -0
- package/scripts/docker-project-up.sh +79 -0
- package/scripts/fast-backfill-embeddings.ts +173 -0
- package/scripts/fast-batch-embedder.cjs +334 -0
- package/scripts/first-run-model-setup.cjs +849 -0
- package/scripts/global-postinstall.cjs +1957 -0
- package/scripts/index-codebase.js +72 -0
- package/scripts/migrate-fix-embeddings.py +110 -0
- package/scripts/migrate-to-project-schemas.ts +525 -0
- package/scripts/optimize-embedding-model.py +324 -0
- package/scripts/optimize-instructions.cjs +530 -0
- package/scripts/pack-docker-images.sh +68 -0
- package/scripts/pack-for-testing.sh +130 -0
- package/scripts/postinstall.cjs +54 -0
- package/scripts/project-env.sh +51 -0
- package/scripts/reset-db.sh +30 -0
- package/scripts/run-indexer.ts +69 -0
- package/scripts/run-migrations.js +47 -0
- package/scripts/setup-db.sh +34 -0
- package/scripts/setup-minimal-schema.sql +143 -0
- package/scripts/skills/code-review.md +44 -0
- package/scripts/skills/debugging.md +56 -0
- package/scripts/skills/specmem-deployteam.md +239 -0
- package/scripts/skills/teammemberskills/EFFICIENT_GREP.md +171 -0
- package/scripts/skills/teammemberskills/task-planning.md +67 -0
- package/scripts/specmem/sockets/session-start.lock +1 -0
- package/scripts/specmem/sockets/session-stops.log +1 -0
- package/scripts/specmem-health.sh +382 -0
- package/scripts/specmem-init.cjs +6935 -0
- package/scripts/strip-debug-logs.cjs +43 -0
- package/scripts/test-mcp-standalone.sh +365 -0
- package/scripts/test-optimized-models.py +166 -0
- package/scripts/verify-embedding-fix.sh +148 -0
- package/skills/code-review.md +44 -0
- package/skills/debugging.md +56 -0
- package/skills/specmem-deployteam.md +239 -0
- package/skills/teammemberskills/EFFICIENT_GREP.md +171 -0
- package/skills/teammemberskills/task-planning.md +67 -0
- package/specmem-health.cjs +522 -0
- package/specmem.env +216 -0
package/dist/config.js
ADDED
|
@@ -0,0 +1,1177 @@
|
|
|
1
|
+
import * as dotenv from 'dotenv';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import * as fs from 'fs';
|
|
4
|
+
import { createHash } from 'crypto';
|
|
5
|
+
import { fileURLToPath } from 'url';
|
|
6
|
+
// Get __dirname equivalent for ES modules
|
|
7
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
8
|
+
const __dirname = path.dirname(__filename);
|
|
9
|
+
// Load config files - dotenv won't override existing env vars, so order matters
|
|
10
|
+
// First try specmem.env from various locations, then fall back to .env
|
|
11
|
+
const specmemEnvPaths = [
|
|
12
|
+
path.resolve(process.cwd(), 'specmem.env'), // From current working directory
|
|
13
|
+
path.resolve(__dirname, '../specmem.env'), // From project root (relative to src)
|
|
14
|
+
path.resolve(__dirname, '../../specmem.env'), // From dist directory
|
|
15
|
+
];
|
|
16
|
+
// Load specmem.env from first location that exists
|
|
17
|
+
for (const envPath of specmemEnvPaths) {
|
|
18
|
+
const result = dotenv.config({ path: envPath });
|
|
19
|
+
if (!result.error) {
|
|
20
|
+
break; // Found and loaded successfully
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
// Also load .env if it exists (won't override specmem.env values)
|
|
24
|
+
dotenv.config();
|
|
25
|
+
// ============================================================================
|
|
26
|
+
// SAFE MKDIR - Dies with clear message if permission denied
|
|
27
|
+
// ============================================================================
|
|
28
|
+
/**
|
|
29
|
+
* Create directory - dies with clear message if permission denied.
|
|
30
|
+
* If specmem can't create dirs, it needs to be run with sudo.
|
|
31
|
+
*/
|
|
32
|
+
export function safeMkdir(dirPath, opts = {}) {
|
|
33
|
+
try {
|
|
34
|
+
fs.mkdirSync(dirPath, { recursive: true, ...opts });
|
|
35
|
+
}
|
|
36
|
+
catch (e) {
|
|
37
|
+
if (e.code === 'EACCES' || e.code === 'EPERM') {
|
|
38
|
+
console.error('\n\x1b[31m\x1b[1m');
|
|
39
|
+
console.error(' ╔═══════════════════════════════════════════════════╗');
|
|
40
|
+
console.error(' ║ Hey, I need sudo! ║');
|
|
41
|
+
console.error(' ║ ║');
|
|
42
|
+
console.error(' ║ SpecMem can\'t create directories without ║');
|
|
43
|
+
console.error(' ║ proper permissions. Run with sudo: ║');
|
|
44
|
+
console.error(' ║ ║');
|
|
45
|
+
console.error(' ║ sudo npx specmem-hardwicksoftware ║');
|
|
46
|
+
console.error(' ║ ║');
|
|
47
|
+
console.error(` ║ Failed path: ${dirPath.slice(0, 35).padEnd(35)} ║`);
|
|
48
|
+
console.error(' ╚═══════════════════════════════════════════════════╝');
|
|
49
|
+
console.error('\x1b[0m');
|
|
50
|
+
process.exit(1);
|
|
51
|
+
}
|
|
52
|
+
throw e;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// ============================================================================
|
|
56
|
+
// ATOMIC DIRECTORY CREATION - Task #17 fix for socket path duplication race
|
|
57
|
+
// This prevents race conditions when multiple MCP servers try to create
|
|
58
|
+
// the same socket directory simultaneously. Uses O_EXCL for true atomicity.
|
|
59
|
+
// ============================================================================
|
|
60
|
+
/**
|
|
61
|
+
* Check if a process with the given PID is still running
|
|
62
|
+
*/
|
|
63
|
+
function isProcessRunningCheck(pid) {
|
|
64
|
+
try {
|
|
65
|
+
process.kill(pid, 0);
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
catch (e) {
|
|
69
|
+
return e.code === 'EPERM';
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Create a directory atomically using O_EXCL lock file
|
|
74
|
+
* Prevents race conditions when multiple processes try to create the same directory
|
|
75
|
+
*
|
|
76
|
+
* @param dirPath - Directory path to create
|
|
77
|
+
* @param mode - Directory permissions (default: 0o755)
|
|
78
|
+
* @returns true if directory was created, false if it already existed
|
|
79
|
+
*/
|
|
80
|
+
function atomicMkdirSync(dirPath, mode = 0o755) {
|
|
81
|
+
// Fast path: if directory already exists, return immediately
|
|
82
|
+
if (fs.existsSync(dirPath)) {
|
|
83
|
+
try {
|
|
84
|
+
const stats = fs.statSync(dirPath);
|
|
85
|
+
if (stats.isDirectory()) {
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
catch (e) {
|
|
90
|
+
// Continue with creation attempt
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
const lockPath = dirPath + '.mkdir.lock';
|
|
94
|
+
const lockTimeoutMs = 5000;
|
|
95
|
+
const maxRetries = 50;
|
|
96
|
+
const retryIntervalMs = 10;
|
|
97
|
+
// Try to acquire lock
|
|
98
|
+
for (let attempt = 0; attempt < maxRetries; attempt++) {
|
|
99
|
+
try {
|
|
100
|
+
// O_EXCL ensures atomic creation - fails if file exists
|
|
101
|
+
const fd = fs.openSync(lockPath, fs.constants.O_CREAT | fs.constants.O_EXCL | fs.constants.O_WRONLY);
|
|
102
|
+
const lockData = JSON.stringify({ pid: process.pid, timestamp: Date.now() });
|
|
103
|
+
fs.writeSync(fd, lockData);
|
|
104
|
+
fs.closeSync(fd);
|
|
105
|
+
try {
|
|
106
|
+
// Double-check inside lock
|
|
107
|
+
if (fs.existsSync(dirPath)) {
|
|
108
|
+
const stats = fs.statSync(dirPath);
|
|
109
|
+
if (stats.isDirectory()) {
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// Create directory
|
|
114
|
+
fs.mkdirSync(dirPath, { recursive: true, mode });
|
|
115
|
+
return true;
|
|
116
|
+
}
|
|
117
|
+
finally {
|
|
118
|
+
// Release lock
|
|
119
|
+
try {
|
|
120
|
+
if (fs.existsSync(lockPath)) {
|
|
121
|
+
const content = fs.readFileSync(lockPath, 'utf-8');
|
|
122
|
+
const data = JSON.parse(content);
|
|
123
|
+
if (data.pid === process.pid) {
|
|
124
|
+
fs.unlinkSync(lockPath);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
catch (e) {
|
|
129
|
+
// Ignore cleanup errors
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
catch (e) {
|
|
134
|
+
if (e.code === 'EEXIST') {
|
|
135
|
+
// Lock file exists - check if stale
|
|
136
|
+
try {
|
|
137
|
+
const content = fs.readFileSync(lockPath, 'utf-8');
|
|
138
|
+
const data = JSON.parse(content);
|
|
139
|
+
const ageMs = Date.now() - data.timestamp;
|
|
140
|
+
if (ageMs > lockTimeoutMs || !isProcessRunningCheck(data.pid)) {
|
|
141
|
+
fs.unlinkSync(lockPath);
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
catch (readErr) {
|
|
146
|
+
try {
|
|
147
|
+
fs.unlinkSync(lockPath);
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
catch { /* ignore */ }
|
|
151
|
+
}
|
|
152
|
+
// Busy-wait
|
|
153
|
+
const waitUntil = Date.now() + retryIntervalMs;
|
|
154
|
+
while (Date.now() < waitUntil) { /* spin */ }
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
// For other errors, fall back to simple mkdir
|
|
158
|
+
break;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
// Fallback: just try mkdirSync (might race but won't crash)
|
|
163
|
+
try {
|
|
164
|
+
if (!fs.existsSync(dirPath)) {
|
|
165
|
+
fs.mkdirSync(dirPath, { recursive: true, mode });
|
|
166
|
+
return true;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
catch (e) {
|
|
170
|
+
if (e.code === 'EACCES' || e.code === 'EPERM') {
|
|
171
|
+
safeMkdir(dirPath); // Will die with "Hey, I need sudo!" message
|
|
172
|
+
}
|
|
173
|
+
// Ignore other errors - another process likely created it
|
|
174
|
+
}
|
|
175
|
+
return false;
|
|
176
|
+
}
|
|
177
|
+
// Cache for loaded rc config per project
|
|
178
|
+
const rcConfigCache = new Map();
|
|
179
|
+
const RC_CACHE_TTL = 60000; // 1 minute
|
|
180
|
+
/**
|
|
181
|
+
* Load .specmemrc from project root if it exists
|
|
182
|
+
* Returns null if file doesn't exist or is invalid
|
|
183
|
+
* Caches result per project path
|
|
184
|
+
*/
|
|
185
|
+
function loadSpecmemRc(projectPath) {
|
|
186
|
+
const cached = rcConfigCache.get(projectPath);
|
|
187
|
+
if (cached && Date.now() - cached.timestamp < RC_CACHE_TTL) {
|
|
188
|
+
return cached.config;
|
|
189
|
+
}
|
|
190
|
+
const rcPath = path.join(projectPath, '.specmemrc');
|
|
191
|
+
let rcConfig = null;
|
|
192
|
+
try {
|
|
193
|
+
if (fs.existsSync(rcPath)) {
|
|
194
|
+
const content = fs.readFileSync(rcPath, 'utf-8');
|
|
195
|
+
rcConfig = JSON.parse(content);
|
|
196
|
+
console.error('[CONFIG] Loaded .specmemrc from ' + rcPath);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
catch (err) {
|
|
200
|
+
console.error('[CONFIG] Failed to load .specmemrc: ' + (err instanceof Error ? err.message : String(err)));
|
|
201
|
+
rcConfig = null;
|
|
202
|
+
}
|
|
203
|
+
rcConfigCache.set(projectPath, { config: rcConfig, timestamp: Date.now() });
|
|
204
|
+
return rcConfig;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Get value from rc config with dot notation path
|
|
208
|
+
* e.g., getRcValue('database.port', 5432) returns rc.database.port or 5432
|
|
209
|
+
*/
|
|
210
|
+
function getRcValue(rcConfig, rcPath, defaultValue) {
|
|
211
|
+
if (!rcConfig)
|
|
212
|
+
return defaultValue;
|
|
213
|
+
const parts = rcPath.split('.');
|
|
214
|
+
let current = rcConfig;
|
|
215
|
+
for (const part of parts) {
|
|
216
|
+
if (current === null || current === undefined || typeof current !== 'object') {
|
|
217
|
+
return defaultValue;
|
|
218
|
+
}
|
|
219
|
+
current = current[part];
|
|
220
|
+
}
|
|
221
|
+
return (current !== undefined && current !== null) ? current : defaultValue;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Clear rc config cache - useful for testing or when rc file changes
|
|
225
|
+
*/
|
|
226
|
+
export function clearRcConfigCache(projectPath) {
|
|
227
|
+
if (projectPath) {
|
|
228
|
+
rcConfigCache.delete(projectPath);
|
|
229
|
+
}
|
|
230
|
+
else {
|
|
231
|
+
rcConfigCache.clear();
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Get the current rc config for the project (useful for debugging)
|
|
236
|
+
*/
|
|
237
|
+
export function getSpecmemRcConfig() {
|
|
238
|
+
const projectPath = process.env['SPECMEM_PROJECT_PATH'] || process.cwd();
|
|
239
|
+
return loadSpecmemRc(projectPath);
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Get the SpecMem root directory
|
|
243
|
+
* This is the main entry point for all path resolution
|
|
244
|
+
* Works whether running from src/, dist/, or installed via npm
|
|
245
|
+
*/
|
|
246
|
+
export function getSpecmemRoot() {
|
|
247
|
+
// If SPECMEM_ROOT is set, use it
|
|
248
|
+
if (process.env['SPECMEM_ROOT']) {
|
|
249
|
+
return process.env['SPECMEM_ROOT'];
|
|
250
|
+
}
|
|
251
|
+
// Default to cwd - specmem should always be run from its root
|
|
252
|
+
return process.cwd();
|
|
253
|
+
}
|
|
254
|
+
// ============================================================================
|
|
255
|
+
// PROJECT PATH UTILITIES - For multi-instance isolation
|
|
256
|
+
// These functions provide project-specific paths and identifiers
|
|
257
|
+
// SPECMEM_PROJECT_PATH is set by Code via MCP config or defaults to cwd
|
|
258
|
+
// ============================================================================
|
|
259
|
+
/**
|
|
260
|
+
* MULTI-PROJECT ISOLATION FIX
|
|
261
|
+
*
|
|
262
|
+
* REMOVED: Marker file /tmp/specmem-current-project.txt
|
|
263
|
+
*
|
|
264
|
+
* The marker file caused race conditions when multiple projects ran simultaneously -
|
|
265
|
+
* whichever hook wrote last would "win", causing other projects to read wrong data.
|
|
266
|
+
*
|
|
267
|
+
* NOW: Each MCP server uses ONLY its SPECMEM_PROJECT_PATH env var (set at startup).
|
|
268
|
+
*/
|
|
269
|
+
/**
|
|
270
|
+
* Get the project path that SpecMem is monitoring
|
|
271
|
+
*
|
|
272
|
+
* PROJECT ISOLATION (priority order):
|
|
273
|
+
* 1. SPECMEM_PROJECT_PATH environment variable (set at MCP server start by bootstrap.cjs)
|
|
274
|
+
* 2. process.cwd() as last fallback
|
|
275
|
+
*
|
|
276
|
+
* Each MCP server instance has its own SPECMEM_PROJECT_PATH set at startup,
|
|
277
|
+
* enabling TRUE multi-project simultaneous isolation.
|
|
278
|
+
*/
|
|
279
|
+
export function getProjectPath() {
|
|
280
|
+
// PRIORITY 2: Environment variable (static, set at startup)
|
|
281
|
+
if (process.env['SPECMEM_PROJECT_PATH']) {
|
|
282
|
+
return process.env['SPECMEM_PROJECT_PATH'];
|
|
283
|
+
}
|
|
284
|
+
// PRIORITY 3: Current working directory (fallback)
|
|
285
|
+
return process.cwd();
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Get the project hash for instance isolation (COLLISION-FREE!)
|
|
289
|
+
* Uses SHA256 hash of FULL project path to ensure different paths get different instances.
|
|
290
|
+
* This prevents collisions between /specmem and ~/specmem.
|
|
291
|
+
* Format: First 16 chars of hash (e.g., "a1b2c3d4e5f6a7b8")
|
|
292
|
+
*/
|
|
293
|
+
export function getProjectDirName() {
|
|
294
|
+
// Check env var first (set by bootstrap.cjs)
|
|
295
|
+
if (process.env['SPECMEM_PROJECT_DIR_NAME']) {
|
|
296
|
+
return process.env['SPECMEM_PROJECT_DIR_NAME'];
|
|
297
|
+
}
|
|
298
|
+
// Compute hash from FULL project path
|
|
299
|
+
const projectPath = getProjectPath();
|
|
300
|
+
const normalizedPath = path.resolve(projectPath).toLowerCase().replace(/\\/g, '/');
|
|
301
|
+
const fullHash = createHash('sha256').update(normalizedPath).digest('hex');
|
|
302
|
+
return fullHash.substring(0, 16);
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* DEPRECATED: Returns project hash
|
|
306
|
+
* Kept for backwards compatibility - now returns the hash
|
|
307
|
+
*/
|
|
308
|
+
export function getProjectHash() {
|
|
309
|
+
return getProjectDirName();
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* DEPRECATED: Returns project hash
|
|
313
|
+
* Kept for backwards compatibility - now returns the hash
|
|
314
|
+
*/
|
|
315
|
+
export function getProjectHashFull() {
|
|
316
|
+
if (process.env['SPECMEM_PROJECT_DIR_NAME']) {
|
|
317
|
+
return process.env['SPECMEM_PROJECT_DIR_NAME'];
|
|
318
|
+
}
|
|
319
|
+
// Fallback - compute hash
|
|
320
|
+
return getProjectDirName();
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Get the per-instance directory for this project
|
|
324
|
+
* ALWAYS uses PROJECT DIRECTORY for complete isolation
|
|
325
|
+
* e.g. /home/user/myproject/specmem/ - NOT ~/.specmem/
|
|
326
|
+
* User requirement: "EVERYTHING LOCALIZED WITHIN THE PROJECT"
|
|
327
|
+
*/
|
|
328
|
+
export function getInstanceDir() {
|
|
329
|
+
// CRITICAL: Use project directory, NOT user home!
|
|
330
|
+
// User explicitly required: "{PROJECT_DIR}/specmem/" for all data
|
|
331
|
+
return path.join(getProjectPath(), 'specmem');
|
|
332
|
+
}
|
|
333
|
+
/**
|
|
334
|
+
* Get project info as a structured object (for logging/debugging)
|
|
335
|
+
*/
|
|
336
|
+
export function getProjectInfo() {
|
|
337
|
+
return {
|
|
338
|
+
path: getProjectPath(),
|
|
339
|
+
hash: getProjectHash(),
|
|
340
|
+
hashFull: getProjectHashFull(),
|
|
341
|
+
instanceDir: getInstanceDir(),
|
|
342
|
+
};
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* Get path to specmem's internal run directory (sockets, PIDs, etc)
|
|
346
|
+
*/
|
|
347
|
+
export function getRunDir() {
|
|
348
|
+
return path.join(getSpecmemRoot(), 'run');
|
|
349
|
+
}
|
|
350
|
+
/**
|
|
351
|
+
* Get the project-scoped socket directory
|
|
352
|
+
* Pattern: {PROJECT_DIR}/specmem/sockets/ - FULLY LOCALIZED
|
|
353
|
+
*/
|
|
354
|
+
export function getProjectSocketDir() {
|
|
355
|
+
return path.join(getInstanceDir(), 'sockets');
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* Get the embedding socket path - PROJECT ISOLATION ENFORCED
|
|
359
|
+
*
|
|
360
|
+
* Socket path resolution (strict project isolation):
|
|
361
|
+
* 1. SPECMEM_EMBEDDING_SOCKET env var (explicit override - HIGHEST PRIORITY)
|
|
362
|
+
* 2. Project directory socket: {PROJECT}/specmem/sockets/embeddings.sock
|
|
363
|
+
*
|
|
364
|
+
* IMPORTANT: No fallbacks to shared paths! Each project MUST have its own socket.
|
|
365
|
+
* This prevents embedding pollution between projects.
|
|
366
|
+
*
|
|
367
|
+
* @returns The path to the embedding socket (existing or default project path)
|
|
368
|
+
*/
|
|
369
|
+
export function getEmbeddingSocketPath() {
|
|
370
|
+
const isDebug = process.env['SPECMEM_DEBUG'] === 'true' || process.env['SPECMEM_DEBUG'] === '1';
|
|
371
|
+
const debugLog = (msg) => {
|
|
372
|
+
if (isDebug)
|
|
373
|
+
console.error(`[Socket Debug] ${msg}`);
|
|
374
|
+
};
|
|
375
|
+
// Check explicit env var first - HIGHEST PRIORITY
|
|
376
|
+
if (process.env['SPECMEM_EMBEDDING_SOCKET']) {
|
|
377
|
+
const explicitPath = process.env['SPECMEM_EMBEDDING_SOCKET'];
|
|
378
|
+
console.error(`[Socket] Using explicit SPECMEM_EMBEDDING_SOCKET: ${explicitPath}`);
|
|
379
|
+
return explicitPath;
|
|
380
|
+
}
|
|
381
|
+
const { existsSync, lstatSync, readlinkSync } = fs;
|
|
382
|
+
// Helper to check if path is an actual socket file (follows symlinks)
|
|
383
|
+
const socketExists = (socketPath) => {
|
|
384
|
+
try {
|
|
385
|
+
// First check if path exists at all
|
|
386
|
+
if (!existsSync(socketPath)) {
|
|
387
|
+
debugLog(`Path does not exist: ${socketPath}`);
|
|
388
|
+
return false;
|
|
389
|
+
}
|
|
390
|
+
// If it's a symlink, follow it and check the target
|
|
391
|
+
const stats = lstatSync(socketPath);
|
|
392
|
+
if (stats.isSymbolicLink()) {
|
|
393
|
+
try {
|
|
394
|
+
const target = readlinkSync(socketPath);
|
|
395
|
+
const resolvedTarget = path.isAbsolute(target) ? target : path.resolve(path.dirname(socketPath), target);
|
|
396
|
+
debugLog(`Symlink ${socketPath} -> ${resolvedTarget}`);
|
|
397
|
+
const targetStats = lstatSync(resolvedTarget);
|
|
398
|
+
if (targetStats.isSocket()) {
|
|
399
|
+
debugLog(`Symlink target is a valid socket: ${resolvedTarget}`);
|
|
400
|
+
return true;
|
|
401
|
+
}
|
|
402
|
+
debugLog(`Symlink target exists but is not a socket: ${resolvedTarget}`);
|
|
403
|
+
return false;
|
|
404
|
+
}
|
|
405
|
+
catch (e) {
|
|
406
|
+
debugLog(`Symlink target check failed: ${e}`);
|
|
407
|
+
return false;
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
// Direct socket file
|
|
411
|
+
if (stats.isSocket()) {
|
|
412
|
+
debugLog(`Direct socket found: ${socketPath}`);
|
|
413
|
+
return true;
|
|
414
|
+
}
|
|
415
|
+
debugLog(`Path exists but is not a socket: ${socketPath}`);
|
|
416
|
+
return false;
|
|
417
|
+
}
|
|
418
|
+
catch (e) {
|
|
419
|
+
debugLog(`Socket check error for ${socketPath}: ${e}`);
|
|
420
|
+
return false;
|
|
421
|
+
}
|
|
422
|
+
};
|
|
423
|
+
// SPECMEM_HOME defaults to SpecMem installation directory, NOT ~/.claude
|
|
424
|
+
// This is critical for multi-project support
|
|
425
|
+
const specmemRoot = getSpecmemRoot();
|
|
426
|
+
const specmemHome = process.env['SPECMEM_HOME'] || specmemRoot;
|
|
427
|
+
// Get project identifiers
|
|
428
|
+
const projectDirName = getProjectDirName();
|
|
429
|
+
const projectHash = getProjectHash();
|
|
430
|
+
// Build comprehensive list of socket locations to check (in priority order)
|
|
431
|
+
// CRITICAL: PROJECT DIRECTORY is ALWAYS checked FIRST - user requirement
|
|
432
|
+
// But we MUST fall back to /tmp/ paths where embedding service may create sockets
|
|
433
|
+
const projectPath = getProjectPath();
|
|
434
|
+
// Socket locations in priority order:
|
|
435
|
+
// 1. Project directory (preferred for isolation)
|
|
436
|
+
// 2. /tmp/ fallbacks (where embedding service may actually create them)
|
|
437
|
+
const socketLocations = [
|
|
438
|
+
// Priority 1: Project-local socket (ideal for isolation)
|
|
439
|
+
{
|
|
440
|
+
path: path.join(projectPath, 'specmem', 'sockets', 'embeddings.sock'),
|
|
441
|
+
description: 'Project socket ({PROJECT}/specmem/sockets)',
|
|
442
|
+
priority: '1-project-dir'
|
|
443
|
+
},
|
|
444
|
+
// Priority 2: /tmp/ with project hash (Docker mounts)
|
|
445
|
+
{
|
|
446
|
+
path: `/tmp/specmem-${projectDirName}/sockets/embeddings.sock`,
|
|
447
|
+
description: '/tmp project-isolated Docker mount',
|
|
448
|
+
priority: '2-tmp-project'
|
|
449
|
+
},
|
|
450
|
+
// Priority 3: SpecMem root run directory
|
|
451
|
+
{
|
|
452
|
+
path: path.join(specmemRoot, 'run', 'embeddings.sock'),
|
|
453
|
+
description: 'SpecMem root/run',
|
|
454
|
+
priority: '3-specmem-run'
|
|
455
|
+
},
|
|
456
|
+
{
|
|
457
|
+
path: path.join(specmemRoot, 'run', 'sockets', 'embeddings.sock'),
|
|
458
|
+
description: 'SpecMem root/run/sockets',
|
|
459
|
+
priority: '4-specmem-run-sockets'
|
|
460
|
+
},
|
|
461
|
+
// Priority 5: Legacy /tmp/ locations (backwards compat)
|
|
462
|
+
{
|
|
463
|
+
path: '/tmp/specmem-embed-0.sock',
|
|
464
|
+
description: '/tmp legacy embed socket',
|
|
465
|
+
priority: '5-tmp-legacy'
|
|
466
|
+
},
|
|
467
|
+
{
|
|
468
|
+
path: '/tmp/specmem-sockets/embeddings.sock',
|
|
469
|
+
description: '/tmp legacy sockets dir',
|
|
470
|
+
priority: '6-tmp-legacy-dir'
|
|
471
|
+
},
|
|
472
|
+
// Priority 7: Container internal path
|
|
473
|
+
{
|
|
474
|
+
path: '/sockets/embeddings.sock',
|
|
475
|
+
description: 'Container internal path',
|
|
476
|
+
priority: '7-container'
|
|
477
|
+
},
|
|
478
|
+
];
|
|
479
|
+
debugLog(`Searching for embedding socket...`);
|
|
480
|
+
debugLog(` specmemRoot: ${specmemRoot}`);
|
|
481
|
+
debugLog(` specmemHome: ${specmemHome}`);
|
|
482
|
+
debugLog(` projectDirName: ${projectDirName}`);
|
|
483
|
+
debugLog(` projectHash: ${projectHash}`);
|
|
484
|
+
// Check each location and return the first one that has an active socket
|
|
485
|
+
for (const loc of socketLocations) {
|
|
486
|
+
debugLog(`Checking ${loc.priority}: ${loc.path}`);
|
|
487
|
+
if (socketExists(loc.path)) {
|
|
488
|
+
console.error(`[Socket] FOUND at: ${loc.path} (${loc.description})`);
|
|
489
|
+
return loc.path;
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
// DEFAULT: Return project directory socket path (where Docker should create it)
|
|
493
|
+
// USER REQUIREMENT: "EVERYTHING LOCALIZED WITHIN THE PROJECT"
|
|
494
|
+
// Pattern: {PROJECT_DIR}/specmem/sockets/embeddings.sock
|
|
495
|
+
const projectSocketDir = path.join(projectPath, 'specmem', 'sockets');
|
|
496
|
+
const defaultSocketPath = path.join(projectSocketDir, 'embeddings.sock');
|
|
497
|
+
// Task #17 FIX: Use atomic mkdir to prevent race condition when multiple
|
|
498
|
+
// MCP servers try to create the socket directory simultaneously
|
|
499
|
+
try {
|
|
500
|
+
const created = atomicMkdirSync(projectSocketDir, 0o755);
|
|
501
|
+
if (created) {
|
|
502
|
+
debugLog(`Created project socket directory atomically: ${projectSocketDir}`);
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
catch (e) {
|
|
506
|
+
// Ignore mkdir errors - directory may be created by Docker
|
|
507
|
+
debugLog(`Failed to create socket directory: ${e}`);
|
|
508
|
+
}
|
|
509
|
+
// Log NOT FOUND with details for troubleshooting
|
|
510
|
+
console.error(`[Socket] NOT FOUND - embedding socket not available`);
|
|
511
|
+
console.error(`[Socket] Default path (will wait for socket): ${defaultSocketPath}`);
|
|
512
|
+
if (isDebug) {
|
|
513
|
+
console.error(`[Socket] Searched locations:`);
|
|
514
|
+
for (const loc of socketLocations) {
|
|
515
|
+
console.error(`[Socket] [${loc.priority}] ${loc.path}`);
|
|
516
|
+
}
|
|
517
|
+
console.error(`[Socket] Set SPECMEM_EMBEDDING_SOCKET env var to override detection.`);
|
|
518
|
+
}
|
|
519
|
+
else {
|
|
520
|
+
console.error(`[Socket] Set SPECMEM_DEBUG=true for detailed socket search info.`);
|
|
521
|
+
}
|
|
522
|
+
return defaultSocketPath;
|
|
523
|
+
}
|
|
524
|
+
/**
|
|
525
|
+
* Get detailed socket search information for debugging
|
|
526
|
+
* Returns socket search results with all checked locations
|
|
527
|
+
*
|
|
528
|
+
* Checks multiple locations in priority order:
|
|
529
|
+
* 1. Project directory (preferred for isolation)
|
|
530
|
+
* 2. /tmp/ fallbacks (where embedding service may create them)
|
|
531
|
+
* 3. SpecMem root and legacy locations
|
|
532
|
+
*/
|
|
533
|
+
export function getSocketSearchInfo() {
|
|
534
|
+
const specmemRoot = getSpecmemRoot();
|
|
535
|
+
const specmemHome = process.env['SPECMEM_HOME'] || specmemRoot;
|
|
536
|
+
const projectDirName = getProjectDirName();
|
|
537
|
+
const projectHash = getProjectHash();
|
|
538
|
+
const { existsSync, lstatSync, readlinkSync } = fs;
|
|
539
|
+
const checkPath = (p) => {
|
|
540
|
+
try {
|
|
541
|
+
if (!existsSync(p))
|
|
542
|
+
return { exists: false, isSocket: false, isSymlink: false };
|
|
543
|
+
const stats = lstatSync(p);
|
|
544
|
+
const isSymlink = stats.isSymbolicLink();
|
|
545
|
+
let symlinkTarget;
|
|
546
|
+
let isSocket = stats.isSocket();
|
|
547
|
+
if (isSymlink) {
|
|
548
|
+
try {
|
|
549
|
+
symlinkTarget = readlinkSync(p);
|
|
550
|
+
const resolvedTarget = path.isAbsolute(symlinkTarget) ? symlinkTarget : path.resolve(path.dirname(p), symlinkTarget);
|
|
551
|
+
const targetStats = lstatSync(resolvedTarget);
|
|
552
|
+
isSocket = targetStats.isSocket();
|
|
553
|
+
}
|
|
554
|
+
catch {
|
|
555
|
+
// Symlink target doesn't exist or is broken
|
|
556
|
+
isSocket = false;
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
return { exists: true, isSocket, isSymlink, symlinkTarget };
|
|
560
|
+
}
|
|
561
|
+
catch {
|
|
562
|
+
return { exists: false, isSocket: false, isSymlink: false };
|
|
563
|
+
}
|
|
564
|
+
};
|
|
565
|
+
// Socket locations with fallbacks (matches getEmbeddingSocketPath)
|
|
566
|
+
const projectPath = getProjectPath();
|
|
567
|
+
const locations = [
|
|
568
|
+
// Priority 1: Project-local socket (ideal for isolation)
|
|
569
|
+
{
|
|
570
|
+
path: path.join(projectPath, 'specmem', 'sockets', 'embeddings.sock'),
|
|
571
|
+
description: 'Project socket ({PROJECT}/specmem/sockets)',
|
|
572
|
+
priority: '1-project-dir'
|
|
573
|
+
},
|
|
574
|
+
// Priority 2: /tmp/ with project hash (Docker mounts)
|
|
575
|
+
{
|
|
576
|
+
path: `/tmp/specmem-${projectDirName}/sockets/embeddings.sock`,
|
|
577
|
+
description: '/tmp project-isolated Docker mount',
|
|
578
|
+
priority: '2-tmp-project'
|
|
579
|
+
},
|
|
580
|
+
// Priority 3: SpecMem root run directory
|
|
581
|
+
{
|
|
582
|
+
path: path.join(specmemRoot, 'run', 'embeddings.sock'),
|
|
583
|
+
description: 'SpecMem root/run',
|
|
584
|
+
priority: '3-specmem-run'
|
|
585
|
+
},
|
|
586
|
+
{
|
|
587
|
+
path: path.join(specmemRoot, 'run', 'sockets', 'embeddings.sock'),
|
|
588
|
+
description: 'SpecMem root/run/sockets',
|
|
589
|
+
priority: '4-specmem-run-sockets'
|
|
590
|
+
},
|
|
591
|
+
// Priority 5: Legacy /tmp/ locations (backwards compat)
|
|
592
|
+
{
|
|
593
|
+
path: '/tmp/specmem-embed-0.sock',
|
|
594
|
+
description: '/tmp legacy embed socket',
|
|
595
|
+
priority: '5-tmp-legacy'
|
|
596
|
+
},
|
|
597
|
+
{
|
|
598
|
+
path: '/tmp/specmem-sockets/embeddings.sock',
|
|
599
|
+
description: '/tmp legacy sockets dir',
|
|
600
|
+
priority: '6-tmp-legacy-dir'
|
|
601
|
+
},
|
|
602
|
+
// Priority 7: Container internal path
|
|
603
|
+
{
|
|
604
|
+
path: '/sockets/embeddings.sock',
|
|
605
|
+
description: 'Container internal path',
|
|
606
|
+
priority: '7-container'
|
|
607
|
+
},
|
|
608
|
+
];
|
|
609
|
+
const searchedLocations = locations.map(loc => {
|
|
610
|
+
const status = checkPath(loc.path);
|
|
611
|
+
return { ...loc, ...status };
|
|
612
|
+
});
|
|
613
|
+
const foundSocket = searchedLocations.find(loc => loc.isSocket)?.path || null;
|
|
614
|
+
const isDocker = existsSync('/.dockerenv') || existsSync('/run/.containerenv');
|
|
615
|
+
return {
|
|
616
|
+
foundSocket,
|
|
617
|
+
searchedLocations,
|
|
618
|
+
projectDirName,
|
|
619
|
+
projectHash,
|
|
620
|
+
specmemRoot,
|
|
621
|
+
specmemHome,
|
|
622
|
+
isDocker,
|
|
623
|
+
};
|
|
624
|
+
}
|
|
625
|
+
function requireEnv(key) {
|
|
626
|
+
const value = process.env[key];
|
|
627
|
+
if (!value) {
|
|
628
|
+
throw new Error(`Missing required environment variable: ${key}`);
|
|
629
|
+
}
|
|
630
|
+
return value;
|
|
631
|
+
}
|
|
632
|
+
function optionalEnv(key, defaultValue) {
|
|
633
|
+
const value = process.env[key];
|
|
634
|
+
// Empty strings treated as "not set" - use default
|
|
635
|
+
// Fixes: SPECMEM_WATCHER_ENABLED="" should use default (true), not false
|
|
636
|
+
if (value === undefined || value === null || value === '') {
|
|
637
|
+
return defaultValue;
|
|
638
|
+
}
|
|
639
|
+
return value;
|
|
640
|
+
}
|
|
641
|
+
function parseBoolean(value, defaultValue = false) {
|
|
642
|
+
// Empty string = use default (critical for env vars like SPECMEM_WATCHER_ENABLED="")
|
|
643
|
+
if (!value || value === '') {
|
|
644
|
+
return defaultValue;
|
|
645
|
+
}
|
|
646
|
+
const lower = value.toLowerCase();
|
|
647
|
+
return lower === 'true' || value === '1';
|
|
648
|
+
}
|
|
649
|
+
/**
|
|
650
|
+
* Parse port number with validation
|
|
651
|
+
* Validates port is a valid number between 1-65535
|
|
652
|
+
* Returns default if invalid or throws with context if throwOnInvalid=true
|
|
653
|
+
*/
|
|
654
|
+
function parsePort(value, defaultValue, envVarName, throwOnInvalid = false) {
|
|
655
|
+
if (!value || value === '') {
|
|
656
|
+
return defaultValue;
|
|
657
|
+
}
|
|
658
|
+
const port = parseInt(value, 10);
|
|
659
|
+
if (isNaN(port) || port < 1 || port > 65535) {
|
|
660
|
+
const context = envVarName ? ' (' + envVarName + ')' : '';
|
|
661
|
+
const errMsg = 'Invalid port "' + value + '"' + context + ': must be number 1-65535';
|
|
662
|
+
if (throwOnInvalid) {
|
|
663
|
+
throw new Error(errMsg);
|
|
664
|
+
}
|
|
665
|
+
console.error('[CONFIG] ' + errMsg + ', using default: ' + defaultValue);
|
|
666
|
+
return defaultValue;
|
|
667
|
+
}
|
|
668
|
+
return port;
|
|
669
|
+
}
|
|
670
|
+
/**
|
|
671
|
+
* Parse DATABASE_URL connection string into components
|
|
672
|
+
* Format: postgres://user:password@host:port/database?sslmode=require
|
|
673
|
+
*
|
|
674
|
+
* Also supports:
|
|
675
|
+
* - postgresql:// prefix (treated same as postgres://)
|
|
676
|
+
* - URL-encoded special chars in password
|
|
677
|
+
* - Optional sslmode query parameter
|
|
678
|
+
*
|
|
679
|
+
* Returns null if DATABASE_URL is not set or invalid
|
|
680
|
+
*/
|
|
681
|
+
function parseDatabaseUrl() {
|
|
682
|
+
const databaseUrl = process.env['DATABASE_URL'];
|
|
683
|
+
if (!databaseUrl) {
|
|
684
|
+
return null;
|
|
685
|
+
}
|
|
686
|
+
try {
|
|
687
|
+
// Handle both postgres:// and postgresql:// prefixes
|
|
688
|
+
const normalizedUrl = databaseUrl.replace(/^postgresql:\/\//, 'postgres://');
|
|
689
|
+
// Use URL constructor for robust parsing
|
|
690
|
+
const url = new URL(normalizedUrl);
|
|
691
|
+
if (url.protocol !== 'postgres:') {
|
|
692
|
+
console.error('[CONFIG] DATABASE_URL has invalid protocol: ' + url.protocol);
|
|
693
|
+
return null;
|
|
694
|
+
}
|
|
695
|
+
// Extract components with URL decoding for special chars in password
|
|
696
|
+
const user = decodeURIComponent(url.username);
|
|
697
|
+
const password = decodeURIComponent(url.password);
|
|
698
|
+
const host = url.hostname;
|
|
699
|
+
const port = url.port ? parsePort(url.port, 5432, 'DATABASE_URL port') : 5432;
|
|
700
|
+
const database = url.pathname.replace(/^\//, ''); // Remove leading slash
|
|
701
|
+
// Check for sslmode in query params
|
|
702
|
+
const sslMode = url.searchParams.get('sslmode');
|
|
703
|
+
const ssl = sslMode === 'require' || sslMode === 'verify-ca' || sslMode === 'verify-full';
|
|
704
|
+
if (!user || !host || !database) {
|
|
705
|
+
console.error('[CONFIG] DATABASE_URL missing required components (user, host, or database)');
|
|
706
|
+
return null;
|
|
707
|
+
}
|
|
708
|
+
console.error('[CONFIG] Parsed DATABASE_URL: host=' + host + ' port=' + port + ' database=' + database + ' user=' + user + ' ssl=' + ssl);
|
|
709
|
+
return { user, password, host, port, database, ssl };
|
|
710
|
+
}
|
|
711
|
+
catch (err) {
|
|
712
|
+
console.error('[CONFIG] Failed to parse DATABASE_URL: ' + err.message);
|
|
713
|
+
return null;
|
|
714
|
+
}
|
|
715
|
+
}
|
|
716
|
+
// ============================================================================
|
|
717
|
+
// PORT ALLOCATION UTILITIES - Project directory name derived ports
|
|
718
|
+
// Uses SPECMEM_PROJECT_DIR_NAME to derive unique ports per project
|
|
719
|
+
// NO MORE HASHES - uses readable project directory name
|
|
720
|
+
// ============================================================================
|
|
721
|
+
/**
|
|
722
|
+
* Get project-specific port from project directory name
|
|
723
|
+
* Derives a unique port in a given range based on project name
|
|
724
|
+
* @param basePort - The base port for the range (e.g., 8500)
|
|
725
|
+
* @param rangeSize - The size of the port range (e.g., 100 gives 8500-8599)
|
|
726
|
+
* @returns Port number derived from project directory name
|
|
727
|
+
*/
|
|
728
|
+
function getProjectPortFromHash(basePort, rangeSize = 100) {
|
|
729
|
+
// Use project directory name instead of hash
|
|
730
|
+
const projectDirName = process.env['SPECMEM_PROJECT_DIR_NAME'] || getProjectDirName();
|
|
731
|
+
// Simple hash from string to number
|
|
732
|
+
let hashNum = 0;
|
|
733
|
+
for (let i = 0; i < projectDirName.length; i++) {
|
|
734
|
+
hashNum = ((hashNum << 5) - hashNum) + projectDirName.charCodeAt(i);
|
|
735
|
+
hashNum = hashNum & 0xFFFF; // Keep it in range
|
|
736
|
+
}
|
|
737
|
+
return basePort + (Math.abs(hashNum) % rangeSize);
|
|
738
|
+
}
|
|
739
|
+
// ============================================================================
|
|
740
|
+
// UNIFIED CREDENTIALS: ZERO CONFIG REQUIRED
|
|
741
|
+
// Everything derives from SPECMEM_PASSWORD or uses smart defaults
|
|
742
|
+
// Per-project isolation via project directory name for database names and ports
|
|
743
|
+
// NO MORE HASHES - uses readable project directory name everywhere
|
|
744
|
+
// ============================================================================
|
|
745
|
+
const UNIFIED_DEFAULT = 'specmem';
|
|
746
|
+
function getUnifiedCredential() {
|
|
747
|
+
return process.env['SPECMEM_PASSWORD'] || UNIFIED_DEFAULT;
|
|
748
|
+
}
|
|
749
|
+
/**
|
|
750
|
+
* Get project-specific database name
|
|
751
|
+
* Uses SPECMEM_PROJECT_DIR_NAME for per-project isolation
|
|
752
|
+
* Format: specmem_{projectname} or custom via SPECMEM_DB_NAME
|
|
753
|
+
*
|
|
754
|
+
* @returns Database name in format specmem_{project_dir_name}
|
|
755
|
+
*/
|
|
756
|
+
export function getProjectDatabaseName() {
|
|
757
|
+
// Explicit override takes precedence
|
|
758
|
+
if (process.env['SPECMEM_DB_NAME']) {
|
|
759
|
+
return process.env['SPECMEM_DB_NAME'];
|
|
760
|
+
}
|
|
761
|
+
// Per-project database using readable project directory name
|
|
762
|
+
const projectDirName = process.env['SPECMEM_PROJECT_DIR_NAME'] || getProjectDirName();
|
|
763
|
+
// Sanitize for PostgreSQL (max 63 chars, alphanumeric + underscore)
|
|
764
|
+
const sanitized = projectDirName.replace(/[^a-z0-9]/g, '_').substring(0, 50);
|
|
765
|
+
return `specmem_${sanitized}`;
|
|
766
|
+
}
|
|
767
|
+
/**
|
|
768
|
+
* Get project-specific database port
|
|
769
|
+
* Uses project directory name to derive unique port in range 5500-5599
|
|
770
|
+
* Falls back to SPECMEM_DB_PORT or default 5432
|
|
771
|
+
*
|
|
772
|
+
* @returns Port number for project-scoped database
|
|
773
|
+
*/
|
|
774
|
+
export function getProjectDatabasePort() {
|
|
775
|
+
// Explicit override takes precedence
|
|
776
|
+
if (process.env['SPECMEM_DB_PORT']) {
|
|
777
|
+
return parsePort(process.env['SPECMEM_DB_PORT'], 5432, 'SPECMEM_DB_PORT');
|
|
778
|
+
}
|
|
779
|
+
// For embedded postgres, derive port from project directory name
|
|
780
|
+
if (process.env['SPECMEM_EMBEDDED_PG_ACTIVE'] === 'true') {
|
|
781
|
+
const projectDirName = process.env['SPECMEM_PROJECT_DIR_NAME'] || getProjectDirName();
|
|
782
|
+
// Simple hash from string to number for port allocation
|
|
783
|
+
let hashNum = 0;
|
|
784
|
+
for (let i = 0; i < projectDirName.length; i++) {
|
|
785
|
+
hashNum = ((hashNum << 5) - hashNum) + projectDirName.charCodeAt(i);
|
|
786
|
+
hashNum = hashNum & 0xFFFF;
|
|
787
|
+
}
|
|
788
|
+
return 5500 + (Math.abs(hashNum) % 100);
|
|
789
|
+
}
|
|
790
|
+
return 5432;
|
|
791
|
+
}
|
|
792
|
+
export function loadConfig() {
|
|
793
|
+
const cred = getUnifiedCredential();
|
|
794
|
+
const projectDbName = getProjectDatabaseName();
|
|
795
|
+
const projectDbPort = getProjectDatabasePort();
|
|
796
|
+
// Load .specmemrc if it exists - provides project-specific overrides
|
|
797
|
+
const projectPath = getProjectPath();
|
|
798
|
+
const rc = loadSpecmemRc(projectPath);
|
|
799
|
+
// DATABASE_URL takes priority if set - parse it and use those values
|
|
800
|
+
const parsedUrl = parseDatabaseUrl();
|
|
801
|
+
// Priority: DATABASE_URL > ENV VAR > .specmemrc > default
|
|
802
|
+
// Per-project isolation still applies if DATABASE_URL not set
|
|
803
|
+
const dbHost = parsedUrl?.host || process.env['SPECMEM_DB_HOST'] || getRcValue(rc, 'database.host', 'localhost');
|
|
804
|
+
const dbPort = parsedUrl?.port || projectDbPort;
|
|
805
|
+
const dbName = parsedUrl?.database || projectDbName;
|
|
806
|
+
const dbUser = parsedUrl?.user || process.env['SPECMEM_DB_USER'] || getRcValue(rc, 'database.user', cred);
|
|
807
|
+
const dbPassword = parsedUrl?.password || process.env['SPECMEM_DB_PASSWORD'] || getRcValue(rc, 'database.password', cred);
|
|
808
|
+
const dbSsl = parsedUrl?.ssl;
|
|
809
|
+
return {
|
|
810
|
+
database: {
|
|
811
|
+
host: dbHost,
|
|
812
|
+
port: dbPort,
|
|
813
|
+
database: dbName,
|
|
814
|
+
user: dbUser,
|
|
815
|
+
password: dbPassword,
|
|
816
|
+
maxConnections: 20,
|
|
817
|
+
idleTimeout: 30000,
|
|
818
|
+
connectionTimeout: 5000,
|
|
819
|
+
ssl: dbSsl
|
|
820
|
+
},
|
|
821
|
+
embedding: {
|
|
822
|
+
// DEPRECATED: dimensions is now auto-detected from the database pgvector column
|
|
823
|
+
// This config value is IGNORED - the system queries pg_attribute for actual dimension
|
|
824
|
+
// Kept for backwards compatibility but will be removed in future versions
|
|
825
|
+
// dimensions: parseInt(optionalEnv('SPECMEM_EMBEDDING_DIMENSIONS', '1536'), 10),
|
|
826
|
+
model: process.env['SPECMEM_EMBEDDING_MODEL'] || getRcValue(rc, 'embedding.model', 'text-embedding-3-small'),
|
|
827
|
+
batchSize: process.env['SPECMEM_EMBEDDING_BATCH_SIZE'] ? parseInt(process.env['SPECMEM_EMBEDDING_BATCH_SIZE'], 10) : getRcValue(rc, 'embedding.batchSize', 100),
|
|
828
|
+
// Docker container CPU limit (in cores, e.g., 1.0 = 1 core, 0.5 = half core)
|
|
829
|
+
cpuLimit: process.env['SPECMEM_EMBEDDING_CPU_LIMIT'] ? parseFloat(process.env['SPECMEM_EMBEDDING_CPU_LIMIT']) : getRcValue(rc, 'embedding.cpuLimit', 1.0)
|
|
830
|
+
},
|
|
831
|
+
consolidation: {
|
|
832
|
+
autoEnabled: parseBoolean(optionalEnv('SPECMEM_AUTO_CONSOLIDATION', 'false')),
|
|
833
|
+
intervalMinutes: parseInt(optionalEnv('SPECMEM_CONSOLIDATION_INTERVAL', '60'), 10),
|
|
834
|
+
minMemoriesForConsolidation: parseInt(optionalEnv('SPECMEM_MIN_MEMORIES_CONSOLIDATION', '5'), 10),
|
|
835
|
+
similarityQueryLimit: parseInt(optionalEnv('SPECMEM_CONSOLIDATION_SIMILARITY_LIMIT', '1000'), 10),
|
|
836
|
+
temporalQueryLimit: parseInt(optionalEnv('SPECMEM_CONSOLIDATION_TEMPORAL_LIMIT', '500'), 10),
|
|
837
|
+
tagBasedQueryLimit: parseInt(optionalEnv('SPECMEM_CONSOLIDATION_TAG_LIMIT', '50'), 10),
|
|
838
|
+
importanceQueryLimit: parseInt(optionalEnv('SPECMEM_CONSOLIDATION_IMPORTANCE_LIMIT', '200'), 10)
|
|
839
|
+
},
|
|
840
|
+
storage: {
|
|
841
|
+
maxImageSizeBytes: parseInt(optionalEnv('SPECMEM_MAX_IMAGE_SIZE', '10485760'), 10),
|
|
842
|
+
allowedImageTypes: optionalEnv('SPECMEM_ALLOWED_IMAGE_TYPES', 'image/png,image/jpeg,image/webp,image/gif').split(',')
|
|
843
|
+
},
|
|
844
|
+
logging: {
|
|
845
|
+
level: (process.env['SPECMEM_LOG_LEVEL'] || getRcValue(rc, 'logging.level', 'info')),
|
|
846
|
+
prettyPrint: process.env['SPECMEM_LOG_PRETTY'] ? parseBoolean(process.env['SPECMEM_LOG_PRETTY']) : getRcValue(rc, 'logging.prettyPrint', false)
|
|
847
|
+
},
|
|
848
|
+
// File watcher - ENABLED BY DEFAULT for live codebase updates
|
|
849
|
+
// CRITICAL: Always an object (never undefined) - use enabled: boolean to control
|
|
850
|
+
// Project path is DYNAMIC - uses getProjectPath() which reads SPECMEM_PROJECT_PATH
|
|
851
|
+
watcher: {
|
|
852
|
+
enabled: process.env['SPECMEM_WATCHER_ENABLED'] ? parseBoolean(process.env['SPECMEM_WATCHER_ENABLED']) : getRcValue(rc, 'watcher.enabled', true),
|
|
853
|
+
rootPath: getProjectPath(), // DYNAMIC: Uses env var or cwd, re-evaluated per call
|
|
854
|
+
ignorePath: process.env['SPECMEM_WATCHER_IGNORE_PATH'],
|
|
855
|
+
debounceMs: process.env['SPECMEM_WATCHER_DEBOUNCE_MS'] ? parseInt(process.env['SPECMEM_WATCHER_DEBOUNCE_MS'], 10) : getRcValue(rc, 'watcher.debounceMs', 1000),
|
|
856
|
+
autoRestart: parseBoolean(optionalEnv('SPECMEM_WATCHER_AUTO_RESTART', 'true')),
|
|
857
|
+
maxRestarts: parseInt(optionalEnv('SPECMEM_WATCHER_MAX_RESTARTS', '5'), 10),
|
|
858
|
+
maxFileSizeBytes: process.env['SPECMEM_WATCHER_MAX_FILE_SIZE'] ? parseInt(process.env['SPECMEM_WATCHER_MAX_FILE_SIZE'], 10) : getRcValue(rc, 'watcher.maxFileSizeBytes', 1048576),
|
|
859
|
+
autoDetectMetadata: parseBoolean(optionalEnv('SPECMEM_WATCHER_AUTO_DETECT_METADATA', 'true')),
|
|
860
|
+
queueMaxSize: parseInt(optionalEnv('SPECMEM_WATCHER_QUEUE_MAX_SIZE', '10000'), 10),
|
|
861
|
+
queueBatchSize: parseInt(optionalEnv('SPECMEM_WATCHER_QUEUE_BATCH_SIZE', '50'), 10),
|
|
862
|
+
queueProcessingIntervalMs: parseInt(optionalEnv('SPECMEM_WATCHER_QUEUE_INTERVAL_MS', '2000'), 10),
|
|
863
|
+
syncCheckIntervalMinutes: parseInt(optionalEnv('SPECMEM_WATCHER_SYNC_CHECK_INTERVAL', '60'), 10)
|
|
864
|
+
},
|
|
865
|
+
// Session watcher - ENABLED BY DEFAULT for live chat history updates
|
|
866
|
+
// CRITICAL: Always an object (never undefined) - use enabled: boolean to control
|
|
867
|
+
sessionWatcher: {
|
|
868
|
+
enabled: process.env['SPECMEM_SESSION_WATCHER_ENABLED'] ? parseBoolean(process.env['SPECMEM_SESSION_WATCHER_ENABLED']) : getRcValue(rc, 'sessionWatcher.enabled', true),
|
|
869
|
+
claudeDir: process.env['SPECMEM_SESSION_CLAUDE_DIR'],
|
|
870
|
+
debounceMs: process.env['SPECMEM_SESSION_DEBOUNCE_MS'] ? parseInt(process.env['SPECMEM_SESSION_DEBOUNCE_MS'], 10) : getRcValue(rc, 'sessionWatcher.debounceMs', 2000),
|
|
871
|
+
importance: (process.env['SPECMEM_SESSION_IMPORTANCE'] || getRcValue(rc, 'sessionWatcher.importance', 'medium')),
|
|
872
|
+
additionalTags: process.env['SPECMEM_SESSION_TAGS'] ? process.env['SPECMEM_SESSION_TAGS'].split(',').filter(t => t.trim()) : getRcValue(rc, 'sessionWatcher.additionalTags', [])
|
|
873
|
+
},
|
|
874
|
+
// Chinese Compactor - token efficiency through Traditional Chinese compression
|
|
875
|
+
// Enabled by default for ~3.5x token savings on verbose outputs
|
|
876
|
+
compression: {
|
|
877
|
+
enabled: process.env['SPECMEM_COMPRESSION_ENABLED'] ? parseBoolean(process.env['SPECMEM_COMPRESSION_ENABLED']) : getRcValue(rc, 'compression.enabled', true),
|
|
878
|
+
minLength: process.env['SPECMEM_COMPRESSION_MIN_LENGTH'] ? parseInt(process.env['SPECMEM_COMPRESSION_MIN_LENGTH'], 10) : getRcValue(rc, 'compression.minLength', 50),
|
|
879
|
+
threshold: process.env['SPECMEM_COMPRESSION_THRESHOLD'] ? parseFloat(process.env['SPECMEM_COMPRESSION_THRESHOLD']) : getRcValue(rc, 'compression.threshold', 0.80),
|
|
880
|
+
compressSearchResults: parseBoolean(optionalEnv('SPECMEM_COMPRESS_SEARCH', 'true')),
|
|
881
|
+
compressSystemOutput: parseBoolean(optionalEnv('SPECMEM_COMPRESS_SYSTEM', 'true')),
|
|
882
|
+
compressHookOutput: parseBoolean(optionalEnv('SPECMEM_COMPRESS_HOOKS', 'true'))
|
|
883
|
+
}
|
|
884
|
+
};
|
|
885
|
+
}
|
|
886
|
+
/**
|
|
887
|
+
* Validate configuration at startup - fail fast if something is wrong fr fr
|
|
888
|
+
*/
|
|
889
|
+
function validateConfig(cfg) {
|
|
890
|
+
const errors = [];
|
|
891
|
+
// Database validation
|
|
892
|
+
if (cfg.database.port < 1 || cfg.database.port > 65535) {
|
|
893
|
+
errors.push(`Invalid database port: ${cfg.database.port}`);
|
|
894
|
+
}
|
|
895
|
+
if (cfg.database.maxConnections < 1 || cfg.database.maxConnections > 1000) {
|
|
896
|
+
errors.push(`Invalid maxConnections: ${cfg.database.maxConnections} (must be 1-1000)`);
|
|
897
|
+
}
|
|
898
|
+
// Embedding validation - dimensions are now auto-detected from database
|
|
899
|
+
// DEPRECATED: This validation is no longer needed as dimensions come from pgvector column
|
|
900
|
+
// if (cfg.embedding.dimensions < 1 || cfg.embedding.dimensions > 10000) {
|
|
901
|
+
// errors.push(`Invalid embedding dimensions: ${cfg.embedding.dimensions}`);
|
|
902
|
+
// }
|
|
903
|
+
// Logging validation
|
|
904
|
+
const validLogLevels = ['fatal', 'error', 'warn', 'info', 'debug', 'trace'];
|
|
905
|
+
if (!validLogLevels.includes(cfg.logging.level)) {
|
|
906
|
+
errors.push(`Invalid log level: ${cfg.logging.level} (must be one of: ${validLogLevels.join(', ')})`);
|
|
907
|
+
}
|
|
908
|
+
// Watcher validation (if enabled)
|
|
909
|
+
if (cfg.watcher) {
|
|
910
|
+
if (cfg.watcher.debounceMs < 0) {
|
|
911
|
+
errors.push(`Invalid watcher debounce: ${cfg.watcher.debounceMs}ms`);
|
|
912
|
+
}
|
|
913
|
+
if (cfg.watcher.maxFileSizeBytes < 1024) {
|
|
914
|
+
errors.push(`Invalid watcher maxFileSize: ${cfg.watcher.maxFileSizeBytes} (min 1024 bytes)`);
|
|
915
|
+
}
|
|
916
|
+
}
|
|
917
|
+
// Log validation results
|
|
918
|
+
if (errors.length > 0) {
|
|
919
|
+
const logger = console; // Can't use pino here since config isn't loaded yet
|
|
920
|
+
logger.error('=== CONFIG VALIDATION FAILED fr fr ===');
|
|
921
|
+
for (const error of errors) {
|
|
922
|
+
logger.error(` - ${error}`);
|
|
923
|
+
}
|
|
924
|
+
logger.error('Fix these issues and restart bruh');
|
|
925
|
+
process.exit(1);
|
|
926
|
+
}
|
|
927
|
+
}
|
|
928
|
+
const configCache = new Map();
|
|
929
|
+
const CACHE_TTL = 60000; // 1 minute
|
|
930
|
+
/**
|
|
931
|
+
* Get config - returns cached if same project and not expired, reloads otherwise
|
|
932
|
+
* This prevents cross-project pollution while maintaining performance
|
|
933
|
+
* Cache is keyed by project path for true multi-project isolation
|
|
934
|
+
*/
|
|
935
|
+
export function getConfig() {
|
|
936
|
+
const projectPath = getProjectPath();
|
|
937
|
+
const cached = configCache.get(projectPath);
|
|
938
|
+
// Return cached if not expired
|
|
939
|
+
if (cached && Date.now() - cached.timestamp < CACHE_TTL) {
|
|
940
|
+
return cached.config;
|
|
941
|
+
}
|
|
942
|
+
// Load fresh config for new project or expired cache
|
|
943
|
+
const config = loadConfig();
|
|
944
|
+
validateConfig(config);
|
|
945
|
+
// Cache with timestamp
|
|
946
|
+
configCache.set(projectPath, { config, timestamp: Date.now() });
|
|
947
|
+
return config;
|
|
948
|
+
}
|
|
949
|
+
/**
|
|
950
|
+
* Force config reload - use when env vars change
|
|
951
|
+
* Clears cache for current project or all projects
|
|
952
|
+
*/
|
|
953
|
+
export function reloadConfig(projectPath) {
|
|
954
|
+
if (projectPath) {
|
|
955
|
+
configCache.delete(projectPath);
|
|
956
|
+
}
|
|
957
|
+
else {
|
|
958
|
+
// Clear current project's cache
|
|
959
|
+
const currentProject = getProjectPath();
|
|
960
|
+
configCache.delete(currentProject);
|
|
961
|
+
}
|
|
962
|
+
return getConfig();
|
|
963
|
+
}
|
|
964
|
+
/**
|
|
965
|
+
* Clear the config cache - useful for testing
|
|
966
|
+
* @param projectPath - Optional project path to clear specific cache, or clear all if not specified
|
|
967
|
+
*/
|
|
968
|
+
export function clearConfigCache(projectPath) {
|
|
969
|
+
if (projectPath) {
|
|
970
|
+
configCache.delete(projectPath);
|
|
971
|
+
}
|
|
972
|
+
else {
|
|
973
|
+
configCache.clear();
|
|
974
|
+
}
|
|
975
|
+
}
|
|
976
|
+
/**
|
|
977
|
+
* Invalidate config cache for a specific project
|
|
978
|
+
* Used when project context changes or env vars are updated
|
|
979
|
+
*/
|
|
980
|
+
export function invalidateConfigCache(projectPath) {
|
|
981
|
+
clearConfigCache(projectPath);
|
|
982
|
+
}
|
|
983
|
+
// BACKWARDS COMPAT: Keep 'config' export but make it call getConfig()
|
|
984
|
+
// This is a Proxy that evaluates lazily on each property access
|
|
985
|
+
// Ensures all existing imports like `import { config } from './config.js'` continue to work
|
|
986
|
+
export const config = new Proxy({}, {
|
|
987
|
+
get(_, prop) {
|
|
988
|
+
return getConfig()[prop];
|
|
989
|
+
},
|
|
990
|
+
// Support spread operator and Object.keys
|
|
991
|
+
ownKeys() {
|
|
992
|
+
return Reflect.ownKeys(getConfig());
|
|
993
|
+
},
|
|
994
|
+
getOwnPropertyDescriptor(_, prop) {
|
|
995
|
+
const cfg = getConfig();
|
|
996
|
+
if (prop in cfg) {
|
|
997
|
+
return {
|
|
998
|
+
value: cfg[prop],
|
|
999
|
+
writable: false,
|
|
1000
|
+
enumerable: true,
|
|
1001
|
+
configurable: true
|
|
1002
|
+
};
|
|
1003
|
+
}
|
|
1004
|
+
return undefined;
|
|
1005
|
+
},
|
|
1006
|
+
has(_, prop) {
|
|
1007
|
+
return prop in getConfig();
|
|
1008
|
+
}
|
|
1009
|
+
});
|
|
1010
|
+
export function loadSkillsConfig() {
|
|
1011
|
+
// Load rc config for skills settings
|
|
1012
|
+
const projectPath = getProjectPath();
|
|
1013
|
+
const rc = loadSpecmemRc(projectPath);
|
|
1014
|
+
// Default skills path relative to current working directory or use __dirname fallback
|
|
1015
|
+
const defaultSkillsPath = (typeof __dirname !== 'undefined' ? `${__dirname}/../skills` : './skills');
|
|
1016
|
+
return {
|
|
1017
|
+
enabled: process.env['SPECMEM_SKILLS_ENABLED'] ? parseBoolean(process.env['SPECMEM_SKILLS_ENABLED']) : getRcValue(rc, 'skills.enabled', true),
|
|
1018
|
+
skillsPath: process.env['SPECMEM_SKILLS_PATH'] || getRcValue(rc, 'skills.skillsPath', defaultSkillsPath),
|
|
1019
|
+
autoReload: parseBoolean(optionalEnv('SPECMEM_SKILLS_AUTO_RELOAD', 'true'))
|
|
1020
|
+
};
|
|
1021
|
+
}
|
|
1022
|
+
export function loadCodebaseConfig() {
|
|
1023
|
+
// Load rc config for codebase settings
|
|
1024
|
+
const projectPath = getProjectPath();
|
|
1025
|
+
const rc = loadSpecmemRc(projectPath);
|
|
1026
|
+
const defaultExcludes = [
|
|
1027
|
+
'node_modules', '.git', 'dist', 'build', '.next', 'coverage',
|
|
1028
|
+
'__pycache__', '.pytest_cache', '.mypy_cache', 'venv', '.venv',
|
|
1029
|
+
'*.pyc', '*.pyo', '*.log', 'package-lock.json', 'yarn.lock'
|
|
1030
|
+
];
|
|
1031
|
+
// Priority: ENV > .specmemrc > defaults
|
|
1032
|
+
const envExcludes = process.env['SPECMEM_CODEBASE_EXCLUDE_PATTERNS'];
|
|
1033
|
+
const excludePatterns = envExcludes
|
|
1034
|
+
? envExcludes.split(',').map(p => p.trim())
|
|
1035
|
+
: getRcValue(rc, 'codebase.excludePatterns', defaultExcludes);
|
|
1036
|
+
// Default codebase path to project path (set by bootstrap.cjs)
|
|
1037
|
+
const defaultCodebasePath = process.env['SPECMEM_CODEBASE_PATH'] || process.env['SPECMEM_PROJECT_PATH'] || process.cwd();
|
|
1038
|
+
return {
|
|
1039
|
+
enabled: process.env['SPECMEM_CODEBASE_ENABLED'] ? parseBoolean(process.env['SPECMEM_CODEBASE_ENABLED']) : getRcValue(rc, 'codebase.enabled', true),
|
|
1040
|
+
codebasePath: optionalEnv('SPECMEM_CODEBASE_PATH', defaultCodebasePath),
|
|
1041
|
+
excludePatterns,
|
|
1042
|
+
watchForChanges: parseBoolean(optionalEnv('SPECMEM_CODEBASE_WATCH', 'true'))
|
|
1043
|
+
};
|
|
1044
|
+
}
|
|
1045
|
+
export function loadCoordinationConfig() {
|
|
1046
|
+
// Use project-hash-derived port: base 8600, range 100 (8600-8699)
|
|
1047
|
+
const defaultPort = String(getProjectPortFromHash(8600, 100));
|
|
1048
|
+
return {
|
|
1049
|
+
enabled: parseBoolean(optionalEnv('SPECMEM_COORDINATION_ENABLED', 'false')),
|
|
1050
|
+
port: parsePort(optionalEnv('SPECMEM_COORDINATION_PORT', defaultPort), parseInt(defaultPort, 10), 'SPECMEM_COORDINATION_PORT'),
|
|
1051
|
+
host: optionalEnv('SPECMEM_COORDINATION_HOST', '127.0.0.1')
|
|
1052
|
+
};
|
|
1053
|
+
}
|
|
1054
|
+
/**
|
|
1055
|
+
* Load dashboard configuration from environment variables
|
|
1056
|
+
*
|
|
1057
|
+
* SPECMEM_DASHBOARD_MODE controls access:
|
|
1058
|
+
* - 'private' (default): Binds to 127.0.0.1, localhost-only access
|
|
1059
|
+
* - 'public': Binds to configured host (0.0.0.0 for all interfaces), network accessible
|
|
1060
|
+
*
|
|
1061
|
+
* SECURITY WARNING: Public mode exposes the dashboard to your network!
|
|
1062
|
+
* Ensure you have a strong password set via SPECMEM_DASHBOARD_PASSWORD
|
|
1063
|
+
*/
|
|
1064
|
+
export function loadDashboardConfig() {
|
|
1065
|
+
// Load rc config for dashboard settings
|
|
1066
|
+
const projectPath = getProjectPath();
|
|
1067
|
+
const rc = loadSpecmemRc(projectPath);
|
|
1068
|
+
// Priority: ENV > .specmemrc > default
|
|
1069
|
+
const mode = (process.env['SPECMEM_DASHBOARD_MODE'] || getRcValue(rc, 'dashboard.mode', 'private'));
|
|
1070
|
+
// Validate mode
|
|
1071
|
+
if (mode !== 'private' && mode !== 'public') {
|
|
1072
|
+
console.warn('Invalid SPECMEM_DASHBOARD_MODE: "' + mode + '", defaulting to "private"');
|
|
1073
|
+
}
|
|
1074
|
+
const validMode = (mode === 'public') ? 'public' : 'private';
|
|
1075
|
+
// In private mode, always use localhost regardless of SPECMEM_DASHBOARD_HOST
|
|
1076
|
+
// In public mode, use configured host (default 0.0.0.0 for all interfaces)
|
|
1077
|
+
const configuredHost = optionalEnv('SPECMEM_DASHBOARD_HOST', '0.0.0.0');
|
|
1078
|
+
const effectiveHost = validMode === 'private' ? '127.0.0.1' : configuredHost;
|
|
1079
|
+
// Use project-hash-derived port: base 8500, range 100 (8500-8599)
|
|
1080
|
+
const defaultPort = getProjectPortFromHash(8500, 100);
|
|
1081
|
+
const rcPort = getRcValue(rc, 'dashboard.port', defaultPort);
|
|
1082
|
+
return {
|
|
1083
|
+
enabled: process.env['SPECMEM_DASHBOARD_ENABLED'] ? parseBoolean(process.env['SPECMEM_DASHBOARD_ENABLED']) : getRcValue(rc, 'dashboard.enabled', true),
|
|
1084
|
+
port: process.env['SPECMEM_DASHBOARD_PORT'] ? parsePort(process.env['SPECMEM_DASHBOARD_PORT'], rcPort, 'SPECMEM_DASHBOARD_PORT') : rcPort,
|
|
1085
|
+
host: effectiveHost,
|
|
1086
|
+
mode: validMode
|
|
1087
|
+
};
|
|
1088
|
+
}
|
|
1089
|
+
/**
|
|
1090
|
+
* Get current port configuration
|
|
1091
|
+
* Uses SPECMEM_PROJECT_HASH for per-project port isolation
|
|
1092
|
+
* Reads from environment or derives from project hash
|
|
1093
|
+
* For async allocation with conflict detection, use getInstancePorts from portAllocator
|
|
1094
|
+
*/
|
|
1095
|
+
export function getPortConfig() {
|
|
1096
|
+
// Dashboard port: base 8500, range 100 (8500-8599)
|
|
1097
|
+
const dashboardPort = process.env['SPECMEM_DASHBOARD_PORT']
|
|
1098
|
+
? parsePort(process.env['SPECMEM_DASHBOARD_PORT'], getProjectPortFromHash(8500, 100), 'SPECMEM_DASHBOARD_PORT')
|
|
1099
|
+
: getProjectPortFromHash(8500, 100);
|
|
1100
|
+
// Coordination port: base 8600, range 100 (8600-8699)
|
|
1101
|
+
const coordinationPort = process.env['SPECMEM_COORDINATION_PORT']
|
|
1102
|
+
? parsePort(process.env['SPECMEM_COORDINATION_PORT'], getProjectPortFromHash(8600, 100), 'SPECMEM_COORDINATION_PORT')
|
|
1103
|
+
: getProjectPortFromHash(8600, 100);
|
|
1104
|
+
return {
|
|
1105
|
+
dashboard: dashboardPort,
|
|
1106
|
+
coordination: coordinationPort,
|
|
1107
|
+
dynamicAllocation: !process.env['SPECMEM_DASHBOARD_PORT'] && !process.env['SPECMEM_COORDINATION_PORT'],
|
|
1108
|
+
projectPath: process.env['SPECMEM_PROJECT_PATH'] || process.cwd()
|
|
1109
|
+
};
|
|
1110
|
+
}
|
|
1111
|
+
export function loadCompressionConfig() {
|
|
1112
|
+
return {
|
|
1113
|
+
enabled: parseBoolean(optionalEnv('SPECMEM_COMPRESSION_ENABLED', 'true')),
|
|
1114
|
+
minLength: parseInt(optionalEnv('SPECMEM_COMPRESSION_MIN_LENGTH', '50'), 10),
|
|
1115
|
+
threshold: parseFloat(optionalEnv('SPECMEM_COMPRESSION_THRESHOLD', '0.80')),
|
|
1116
|
+
compressSearchResults: parseBoolean(optionalEnv('SPECMEM_COMPRESS_SEARCH', 'true')),
|
|
1117
|
+
compressSystemOutput: parseBoolean(optionalEnv('SPECMEM_COMPRESS_SYSTEM', 'true')),
|
|
1118
|
+
compressHookOutput: parseBoolean(optionalEnv('SPECMEM_COMPRESS_HOOKS', 'true'))
|
|
1119
|
+
};
|
|
1120
|
+
}
|
|
1121
|
+
/**
|
|
1122
|
+
* Get the compression config from the main config
|
|
1123
|
+
* Provides safe access with defaults if not set
|
|
1124
|
+
*/
|
|
1125
|
+
export function getCompressionConfig() {
|
|
1126
|
+
return config.compression ?? loadCompressionConfig();
|
|
1127
|
+
}
|
|
1128
|
+
/**
|
|
1129
|
+
* Load embedded PostgreSQL configuration
|
|
1130
|
+
* Uses SPECMEM_PROJECT_DIR_NAME for per-project isolation
|
|
1131
|
+
* NO MORE HASHES - uses readable project directory name
|
|
1132
|
+
*/
|
|
1133
|
+
export function loadEmbeddedPostgresConfig() {
|
|
1134
|
+
const projectPath = process.env['SPECMEM_PROJECT_PATH'] || process.cwd();
|
|
1135
|
+
const projectDirName = process.env['SPECMEM_PROJECT_DIR_NAME'] || getProjectDirName();
|
|
1136
|
+
// Project-specific database name: specmem_{project_dir_name}
|
|
1137
|
+
const sanitized = projectDirName.replace(/[^a-z0-9]/g, '_').substring(0, 50);
|
|
1138
|
+
const defaultDbName = `specmem_${sanitized}`;
|
|
1139
|
+
// Project-specific port derived from directory name (range 5500-5599)
|
|
1140
|
+
let hashNum = 0;
|
|
1141
|
+
for (let i = 0; i < projectDirName.length; i++) {
|
|
1142
|
+
hashNum = ((hashNum << 5) - hashNum) + projectDirName.charCodeAt(i);
|
|
1143
|
+
hashNum = hashNum & 0xFFFF;
|
|
1144
|
+
}
|
|
1145
|
+
const defaultPort = 5500 + (Math.abs(hashNum) % 100);
|
|
1146
|
+
return {
|
|
1147
|
+
enabled: parseBoolean(optionalEnv('SPECMEM_EMBEDDED_PG_ENABLED', 'true')),
|
|
1148
|
+
projectPath,
|
|
1149
|
+
port: process.env['SPECMEM_EMBEDDED_PG_PORT']
|
|
1150
|
+
? parsePort(process.env['SPECMEM_EMBEDDED_PG_PORT'], defaultPort, 'SPECMEM_EMBEDDED_PG_PORT')
|
|
1151
|
+
: defaultPort,
|
|
1152
|
+
database: optionalEnv('SPECMEM_DB_NAME', defaultDbName),
|
|
1153
|
+
user: optionalEnv('SPECMEM_DB_USER', 'specmem_westayunprofessional'),
|
|
1154
|
+
password: process.env['SPECMEM_EMBEDDED_PG_PASSWORD'] || undefined,
|
|
1155
|
+
autoStart: parseBoolean(optionalEnv('SPECMEM_EMBEDDED_PG_AUTOSTART', 'true')),
|
|
1156
|
+
autoStop: parseBoolean(optionalEnv('SPECMEM_EMBEDDED_PG_AUTOSTOP', 'true')),
|
|
1157
|
+
portRangeStart: parsePort(optionalEnv('SPECMEM_EMBEDDED_PG_PORT_START', '5500'), 5500, 'SPECMEM_EMBEDDED_PG_PORT_START'),
|
|
1158
|
+
portRangeEnd: parsePort(optionalEnv('SPECMEM_EMBEDDED_PG_PORT_END', '5600'), 5600, 'SPECMEM_EMBEDDED_PG_PORT_END'),
|
|
1159
|
+
};
|
|
1160
|
+
}
|
|
1161
|
+
/**
|
|
1162
|
+
* Check if embedded PostgreSQL is active
|
|
1163
|
+
* Returns true if:
|
|
1164
|
+
* 1. Embedded mode is enabled
|
|
1165
|
+
* 2. SPECMEM_EMBEDDED_PG_ACTIVE env var is set (set by bootstrap.cjs)
|
|
1166
|
+
*/
|
|
1167
|
+
export function isEmbeddedPostgresActive() {
|
|
1168
|
+
return parseBoolean(optionalEnv('SPECMEM_EMBEDDED_PG_ACTIVE', 'false'));
|
|
1169
|
+
}
|
|
1170
|
+
/**
|
|
1171
|
+
* Get the embedded PostgreSQL data directory path
|
|
1172
|
+
*/
|
|
1173
|
+
export function getEmbeddedPostgresDataDir(projectPath) {
|
|
1174
|
+
const basePath = projectPath || process.env['SPECMEM_PROJECT_PATH'] || process.cwd();
|
|
1175
|
+
return path.join(basePath, '.specmem', 'pgdata');
|
|
1176
|
+
}
|
|
1177
|
+
//# sourceMappingURL=config.js.map
|