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
|
@@ -0,0 +1,920 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project Namespacing Migration
|
|
3
|
+
*
|
|
4
|
+
* Adds project_id column to all data tables for multi-project isolation.
|
|
5
|
+
* Uses UPSERT pattern for race-condition-free project registration.
|
|
6
|
+
*
|
|
7
|
+
* Enhanced with SCHEMA-PER-PROJECT isolation:
|
|
8
|
+
* - Each project gets its own PostgreSQL schema: specmem_{8-char-hash}
|
|
9
|
+
* - All tables are created within the project schema
|
|
10
|
+
* - Queries use SET search_path for automatic table resolution
|
|
11
|
+
*
|
|
12
|
+
* Migration version: 29.1
|
|
13
|
+
*/
|
|
14
|
+
import * as fs from 'fs/promises';
|
|
15
|
+
import * as path from 'path';
|
|
16
|
+
import { fileURLToPath } from 'url';
|
|
17
|
+
import { createHash } from 'crypto';
|
|
18
|
+
import { logger } from '../utils/logger.js';
|
|
19
|
+
// MED-17 FIX: Thread-safe mutex for search_path hook registration
|
|
20
|
+
// Prevents race condition where multiple concurrent calls could register duplicate hooks
|
|
21
|
+
const searchPathHookLocks = new Map();
|
|
22
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
23
|
+
const __dirname = path.dirname(__filename);
|
|
24
|
+
// ============================================================================
|
|
25
|
+
// SCHEMA-PER-PROJECT ISOLATION (READABLE!)
|
|
26
|
+
// ============================================================================
|
|
27
|
+
/**
|
|
28
|
+
* Validate schema name matches expected pattern to prevent SQL injection.
|
|
29
|
+
* Schema names must be specmem_ followed by alphanumeric/underscore chars.
|
|
30
|
+
* HIGH-32 FIX: Strict validation before any DDL operations
|
|
31
|
+
*/
|
|
32
|
+
function validateSchemaName(schemaName) {
|
|
33
|
+
if (!/^specmem_[a-z0-9_]+$/i.test(schemaName)) {
|
|
34
|
+
throw new Error('Invalid schema name format - must be specmem_ followed by alphanumeric/underscore chars');
|
|
35
|
+
}
|
|
36
|
+
if (schemaName.length > 63) {
|
|
37
|
+
throw new Error('Schema name too long - PostgreSQL limit is 63 characters');
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Validate table name matches expected pattern to prevent SQL injection.
|
|
42
|
+
* Table names must be alphanumeric/underscore only.
|
|
43
|
+
* HIGH-32 FIX: Strict validation before any DDL operations
|
|
44
|
+
*/
|
|
45
|
+
function validateTableName(tableName) {
|
|
46
|
+
if (!/^[a-z_][a-z0-9_]*$/i.test(tableName)) {
|
|
47
|
+
throw new Error('Invalid table name format - must start with letter/underscore, contain only alphanumeric/underscore');
|
|
48
|
+
}
|
|
49
|
+
if (tableName.length > 63) {
|
|
50
|
+
throw new Error('Table name too long - PostgreSQL limit is 63 characters');
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Get the sanitized project directory name for schema naming.
|
|
55
|
+
* Uses SPECMEM_PROJECT_DIR_NAME env var (set by bootstrap.cjs),
|
|
56
|
+
* or derives from project path if not set.
|
|
57
|
+
* This is MUCH more readable than hashes! e.g., "myproject" not "a1b2c3d4"
|
|
58
|
+
*/
|
|
59
|
+
function getProjectDirName(projectPath) {
|
|
60
|
+
// Use pre-computed dir name from bootstrap.cjs if available
|
|
61
|
+
const envDirName = process.env['SPECMEM_PROJECT_DIR_NAME'];
|
|
62
|
+
if (envDirName && !projectPath) {
|
|
63
|
+
return envDirName;
|
|
64
|
+
}
|
|
65
|
+
const pathToUse = projectPath || process.env['SPECMEM_PROJECT_PATH'] || '/';
|
|
66
|
+
// Handle default/fallback case
|
|
67
|
+
if (pathToUse === '/' || pathToUse === '') {
|
|
68
|
+
return 'default';
|
|
69
|
+
}
|
|
70
|
+
// Derive from path - sanitize to PostgreSQL-safe name
|
|
71
|
+
const dirName = path.basename(pathToUse)
|
|
72
|
+
.toLowerCase()
|
|
73
|
+
.replace(/[^a-z0-9_]/g, '_') // PostgreSQL identifiers use underscores
|
|
74
|
+
.replace(/_+/g, '_')
|
|
75
|
+
.replace(/^_|_$/g, '') || 'default';
|
|
76
|
+
return dirName;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Generate the PostgreSQL schema name for a project.
|
|
80
|
+
* Uses SPECMEM_PROJECT_DIR_NAME env var (set by bootstrap.cjs),
|
|
81
|
+
* or derives from project path if not set.
|
|
82
|
+
*
|
|
83
|
+
* Format: specmem_{dirname} (READABLE!)
|
|
84
|
+
* Example: specmem_myproject
|
|
85
|
+
*
|
|
86
|
+
* @param projectPath - The project path (or undefined for default)
|
|
87
|
+
* @returns Schema name string
|
|
88
|
+
*/
|
|
89
|
+
export function getProjectSchema(projectPath) {
|
|
90
|
+
const dirName = getProjectDirName(projectPath);
|
|
91
|
+
return `specmem_${dirName}`;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Generate the full hash for a project path.
|
|
95
|
+
* Used for detailed logging and debugging.
|
|
96
|
+
*
|
|
97
|
+
* @param projectPath - The project path
|
|
98
|
+
* @returns Full SHA256 hash (64 chars)
|
|
99
|
+
*/
|
|
100
|
+
export function getProjectHashFull(projectPath) {
|
|
101
|
+
const normalizedPath = projectPath.replace(/\/+$/, '').toLowerCase();
|
|
102
|
+
return createHash('sha256').update(normalizedPath).digest('hex');
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Create a project schema if it doesn't exist.
|
|
106
|
+
* Also sets up the search_path to include the new schema.
|
|
107
|
+
*
|
|
108
|
+
* @param db - DatabaseManager instance
|
|
109
|
+
* @param schemaName - Schema name to create (from getProjectSchema)
|
|
110
|
+
* @returns True if schema was created, false if already existed
|
|
111
|
+
*/
|
|
112
|
+
export async function createProjectSchema(db, schemaName) {
|
|
113
|
+
// HIGH-32 FIX: Validate schema name before any SQL operations
|
|
114
|
+
validateSchemaName(schemaName);
|
|
115
|
+
logger.info({ schemaName }, 'Creating project schema if not exists');
|
|
116
|
+
try {
|
|
117
|
+
// Check if schema exists
|
|
118
|
+
const checkResult = await db.query(`
|
|
119
|
+
SELECT schema_name
|
|
120
|
+
FROM information_schema.schemata
|
|
121
|
+
WHERE schema_name = $1
|
|
122
|
+
`, [schemaName]);
|
|
123
|
+
if (checkResult.rows.length > 0) {
|
|
124
|
+
logger.debug({ schemaName }, 'Schema already exists');
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
// HIGH-32 FIX: Use format() with %I for safe identifier quoting
|
|
128
|
+
const formatResult = await db.query(`SELECT format('CREATE SCHEMA IF NOT EXISTS %I', $1::text) as sql`, [schemaName]);
|
|
129
|
+
await db.query(formatResult.rows[0].sql);
|
|
130
|
+
logger.info({ schemaName }, 'Created new project schema');
|
|
131
|
+
return true;
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
const errMsg = error instanceof Error ? error.message : String(error);
|
|
135
|
+
logger.error({ error: errMsg, schemaName }, 'Failed to create project schema');
|
|
136
|
+
throw error;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Set the search_path POOL-WIDE for a database connection to use a project schema.
|
|
141
|
+
* The search_path is set to: specmem_{dirname}, public
|
|
142
|
+
*
|
|
143
|
+
* POOL-WIDE APPROACH:
|
|
144
|
+
* - Sets search_path on the current connection
|
|
145
|
+
* - Registers a connect hook on the pool so NEW connections also get the search_path
|
|
146
|
+
* - This ensures ALL pool connections use the same project schema
|
|
147
|
+
*
|
|
148
|
+
* This ensures:
|
|
149
|
+
* 1. Tables are looked up first in the project schema
|
|
150
|
+
* 2. Falls back to public schema for shared tables/extensions
|
|
151
|
+
* 3. Works for all connections in the pool (not just one!)
|
|
152
|
+
*
|
|
153
|
+
* @param db - DatabaseManager instance
|
|
154
|
+
* @param schemaName - Schema name to set as primary
|
|
155
|
+
*/
|
|
156
|
+
export async function setProjectSearchPath(db, schemaName) {
|
|
157
|
+
// HIGH-32 FIX: Validate schema name before any SQL operations
|
|
158
|
+
validateSchemaName(schemaName);
|
|
159
|
+
const pool = db.getPool();
|
|
160
|
+
// HIGH-19 FIX: Wrap initial query in try-catch with proper pool cleanup on failure
|
|
161
|
+
// If search_path fails, we MUST clean up the pool to prevent lingering connections
|
|
162
|
+
try {
|
|
163
|
+
// HIGH-32 FIX: Use format() with %I for safe identifier quoting
|
|
164
|
+
// Cast $1 to text explicitly so PostgreSQL knows the type
|
|
165
|
+
const formatResult = await db.query(`SELECT format('SET search_path TO %I, public', $1::text) as sql`, [schemaName]);
|
|
166
|
+
await db.query(formatResult.rows[0].sql);
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
// nah fr this is cooked - clean up the pool before re-throwing
|
|
170
|
+
const errMsg = error instanceof Error ? error.message : String(error);
|
|
171
|
+
logger.error({ error: errMsg, schemaName }, 'search_path query failed - cleaning up pool to prevent lingering connections');
|
|
172
|
+
try {
|
|
173
|
+
await pool.end();
|
|
174
|
+
logger.info({ schemaName }, 'Pool ended after search_path failure');
|
|
175
|
+
}
|
|
176
|
+
catch (endErr) {
|
|
177
|
+
logger.warn({ endErr }, 'pool.end() also failed but we tried fr');
|
|
178
|
+
}
|
|
179
|
+
throw error;
|
|
180
|
+
}
|
|
181
|
+
// MED-17 FIX: Thread-safe hook registration using async mutex pattern
|
|
182
|
+
// Wait for any existing registration to complete first
|
|
183
|
+
const existingLock = searchPathHookLocks.get(pool);
|
|
184
|
+
if (existingLock) {
|
|
185
|
+
await existingLock;
|
|
186
|
+
}
|
|
187
|
+
// nah fr we need to make sure this only runs once per pool
|
|
188
|
+
// Check if we already registered by looking for our marker
|
|
189
|
+
const hookMarker = '_specmemSearchPathHookRegistered';
|
|
190
|
+
// MED-17 FIX: Synchronous marker check + set to prevent race window
|
|
191
|
+
// The issue was: check -> (race) -> set. Now it's atomic read-then-write
|
|
192
|
+
if (!pool[hookMarker]) {
|
|
193
|
+
// Set marker IMMEDIATELY before async work to prevent duplicate registration
|
|
194
|
+
pool[hookMarker] = schemaName;
|
|
195
|
+
// Create a lock promise for concurrent calls
|
|
196
|
+
let resolveLock;
|
|
197
|
+
const lockPromise = new Promise((resolve) => {
|
|
198
|
+
resolveLock = resolve;
|
|
199
|
+
});
|
|
200
|
+
searchPathHookLocks.set(pool, lockPromise);
|
|
201
|
+
try {
|
|
202
|
+
pool.on('connect', async (client) => {
|
|
203
|
+
// Set search_path on every new connection
|
|
204
|
+
try {
|
|
205
|
+
// HIGH-32 FIX: Use format() with %I for safe identifier quoting
|
|
206
|
+
const formatResult = await client.query(`SELECT format('SET search_path TO %I, public', $1) as sql`, [schemaName]);
|
|
207
|
+
await client.query(formatResult.rows[0].sql);
|
|
208
|
+
logger.debug({ schemaName }, 'Set search_path on new pool connection');
|
|
209
|
+
}
|
|
210
|
+
catch (error) {
|
|
211
|
+
// HIGH-19 FIX: Log error with more context but don't crash
|
|
212
|
+
// The connection is managed by the pool - it will handle release
|
|
213
|
+
const errMsg = error instanceof Error ? error.message : String(error);
|
|
214
|
+
logger.warn({ error: errMsg, schemaName }, 'Failed to set search_path on new pool connection - connection will be reused but may have wrong schema');
|
|
215
|
+
}
|
|
216
|
+
});
|
|
217
|
+
logger.info({ schemaName }, 'Registered POOL-WIDE search_path hook for project schema');
|
|
218
|
+
}
|
|
219
|
+
finally {
|
|
220
|
+
// Release the lock
|
|
221
|
+
resolveLock();
|
|
222
|
+
searchPathHookLocks.delete(pool);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
// Hook already registered - verify it's for the same schema
|
|
227
|
+
const registeredSchema = pool[hookMarker];
|
|
228
|
+
if (registeredSchema !== schemaName) {
|
|
229
|
+
logger.warn({
|
|
230
|
+
currentSchema: schemaName,
|
|
231
|
+
registeredSchema
|
|
232
|
+
}, 'search_path hook registered for different schema - may cause isolation issues');
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
logger.debug({ schemaName }, 'Set search_path for project schema (pool-wide)');
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Initialize project schema with all required tables.
|
|
239
|
+
* Creates the schema and runs table creation within that schema context.
|
|
240
|
+
*
|
|
241
|
+
* @param db - DatabaseManager instance
|
|
242
|
+
* @param projectPath - Project path (uses env var if not provided)
|
|
243
|
+
* @returns Schema name that was initialized
|
|
244
|
+
*/
|
|
245
|
+
export async function initializeProjectSchema(db, projectPath) {
|
|
246
|
+
const schemaName = getProjectSchema(projectPath);
|
|
247
|
+
logger.info({
|
|
248
|
+
schemaName,
|
|
249
|
+
projectPath: projectPath || process.env['SPECMEM_PROJECT_PATH'] || 'default'
|
|
250
|
+
}, 'Initializing project schema');
|
|
251
|
+
// Create schema if needed
|
|
252
|
+
await createProjectSchema(db, schemaName);
|
|
253
|
+
// Set search path for subsequent operations
|
|
254
|
+
await setProjectSearchPath(db, schemaName);
|
|
255
|
+
// Run schema initialization SQL - CRITICAL for table creation
|
|
256
|
+
const sqlPath = path.join(__dirname, 'projectSchemaInit.sql');
|
|
257
|
+
try {
|
|
258
|
+
const schemaInitSql = await fs.readFile(sqlPath, 'utf-8');
|
|
259
|
+
await db.query(schemaInitSql);
|
|
260
|
+
logger.info({ schemaName, sqlPath }, 'Project schema tables initialized from SQL file');
|
|
261
|
+
}
|
|
262
|
+
catch (error) {
|
|
263
|
+
const errMsg = error instanceof Error ? error.message : String(error);
|
|
264
|
+
// Only ignore ENOENT (file not found) if tables already exist
|
|
265
|
+
if (errMsg.includes('ENOENT')) {
|
|
266
|
+
logger.warn({ sqlPath, error: errMsg }, 'Schema init SQL not found - verify build copied SQL files to dist/');
|
|
267
|
+
}
|
|
268
|
+
else {
|
|
269
|
+
// Re-throw actual SQL errors
|
|
270
|
+
logger.error({ error: errMsg, sqlPath }, 'Failed to initialize schema tables');
|
|
271
|
+
throw error;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
return schemaName;
|
|
275
|
+
}
|
|
276
|
+
// ============================================================================
|
|
277
|
+
// MED-42 FIX: Schema Validation Before Operations
|
|
278
|
+
// ============================================================================
|
|
279
|
+
// Track schema readiness per-project to avoid redundant DB checks
|
|
280
|
+
// goated O(1) lookup for whether schema/tables are ready
|
|
281
|
+
const schemaReadyCache = new Map();
|
|
282
|
+
/**
|
|
283
|
+
* Check if schema exists in the database.
|
|
284
|
+
* Pure existence check - no creation, no side effects.
|
|
285
|
+
*
|
|
286
|
+
* @param db - DatabaseManager instance
|
|
287
|
+
* @param schemaName - Schema name to check
|
|
288
|
+
* @returns True if schema exists, false otherwise
|
|
289
|
+
*/
|
|
290
|
+
export async function schemaExists(db, schemaName) {
|
|
291
|
+
try {
|
|
292
|
+
const checkResult = await db.query(`
|
|
293
|
+
SELECT schema_name
|
|
294
|
+
FROM information_schema.schemata
|
|
295
|
+
WHERE schema_name = $1
|
|
296
|
+
`, [schemaName]);
|
|
297
|
+
return checkResult.rows.length > 0;
|
|
298
|
+
}
|
|
299
|
+
catch (error) {
|
|
300
|
+
logger.warn({ error, schemaName }, 'schemaExists check failed');
|
|
301
|
+
return false;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Check if a table exists in the specified schema.
|
|
306
|
+
* Pure existence check - no creation, no side effects.
|
|
307
|
+
*
|
|
308
|
+
* @param db - DatabaseManager instance
|
|
309
|
+
* @param schemaName - Schema name
|
|
310
|
+
* @param tableName - Table name to check
|
|
311
|
+
* @returns True if table exists, false otherwise
|
|
312
|
+
*/
|
|
313
|
+
export async function tableExists(db, schemaName, tableName) {
|
|
314
|
+
try {
|
|
315
|
+
const result = await db.query(`
|
|
316
|
+
SELECT 1
|
|
317
|
+
FROM information_schema.tables
|
|
318
|
+
WHERE table_schema = $1 AND table_name = $2
|
|
319
|
+
`, [schemaName, tableName]);
|
|
320
|
+
return result.rows.length > 0;
|
|
321
|
+
}
|
|
322
|
+
catch (error) {
|
|
323
|
+
logger.warn({ error, schemaName, tableName }, 'tableExists check failed');
|
|
324
|
+
return false;
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Ensure schema and core tables are ready for operations.
|
|
329
|
+
* This is the VALIDATION function - call before ops that need the schema.
|
|
330
|
+
*
|
|
331
|
+
* MED-42 FIX: Does NOT create anything - just validates and throws if not ready.
|
|
332
|
+
* Use ensureSchemaInitialized() if you need auto-creation.
|
|
333
|
+
*
|
|
334
|
+
* @param db - DatabaseManager instance
|
|
335
|
+
* @param projectPath - Optional project path, uses env var if not provided
|
|
336
|
+
* @throws Error if schema or required tables don't exist
|
|
337
|
+
*/
|
|
338
|
+
export async function ensureSchemaReady(db, projectPath) {
|
|
339
|
+
const schemaName = getProjectSchema(projectPath);
|
|
340
|
+
// O(1) cache check first - avoids redundant DB queries
|
|
341
|
+
if (schemaReadyCache.get(schemaName)) {
|
|
342
|
+
return;
|
|
343
|
+
}
|
|
344
|
+
const exists = await schemaExists(db, schemaName);
|
|
345
|
+
if (!exists) {
|
|
346
|
+
throw new Error(`Schema '${schemaName}' does not exist. Initialize database first.`);
|
|
347
|
+
}
|
|
348
|
+
// Check core table exists (memories is the primary table)
|
|
349
|
+
const hasMemories = await tableExists(db, schemaName, 'memories');
|
|
350
|
+
if (!hasMemories) {
|
|
351
|
+
throw new Error(`Table 'memories' does not exist in schema '${schemaName}'. Run migrations first.`);
|
|
352
|
+
}
|
|
353
|
+
// Cache the ready state so we dont hit DB every time
|
|
354
|
+
schemaReadyCache.set(schemaName, true);
|
|
355
|
+
logger.debug({ schemaName }, 'Schema validated and cached as ready');
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* Ensure schema and tables are initialized - creates if missing.
|
|
359
|
+
* This is the AUTO-CREATION function - use when you want schema setup.
|
|
360
|
+
*
|
|
361
|
+
* MED-42 FIX: Validates first, creates if needed, then validates again.
|
|
362
|
+
*
|
|
363
|
+
* @param db - DatabaseManager instance
|
|
364
|
+
* @param projectPath - Optional project path
|
|
365
|
+
* @returns Schema name that was initialized
|
|
366
|
+
*/
|
|
367
|
+
export async function ensureSchemaInitialized(db, projectPath) {
|
|
368
|
+
const schemaName = getProjectSchema(projectPath);
|
|
369
|
+
// Quick cache check
|
|
370
|
+
if (schemaReadyCache.get(schemaName)) {
|
|
371
|
+
return schemaName;
|
|
372
|
+
}
|
|
373
|
+
// Check if schema exists
|
|
374
|
+
const exists = await schemaExists(db, schemaName);
|
|
375
|
+
if (!exists) {
|
|
376
|
+
logger.info({ schemaName }, 'Schema missing - creating...');
|
|
377
|
+
await createProjectSchema(db, schemaName);
|
|
378
|
+
}
|
|
379
|
+
// Set search path so tables are created in the right schema
|
|
380
|
+
await setProjectSearchPath(db, schemaName);
|
|
381
|
+
// Check if tables exist
|
|
382
|
+
const hasMemories = await tableExists(db, schemaName, 'memories');
|
|
383
|
+
if (!hasMemories) {
|
|
384
|
+
logger.info({ schemaName }, 'Tables missing - initializing...');
|
|
385
|
+
await initializeProjectSchema(db, projectPath);
|
|
386
|
+
}
|
|
387
|
+
// Mark as ready
|
|
388
|
+
schemaReadyCache.set(schemaName, true);
|
|
389
|
+
logger.info({ schemaName }, 'Schema validated/initialized and ready');
|
|
390
|
+
return schemaName;
|
|
391
|
+
}
|
|
392
|
+
/**
|
|
393
|
+
* Invalidate schema cache for a project.
|
|
394
|
+
* Call after schema changes (drop, recreate, etc).
|
|
395
|
+
*
|
|
396
|
+
* @param projectPath - Optional project path, invalidates all if not provided
|
|
397
|
+
*/
|
|
398
|
+
export function invalidateSchemaCache(projectPath) {
|
|
399
|
+
if (projectPath) {
|
|
400
|
+
const schemaName = getProjectSchema(projectPath);
|
|
401
|
+
schemaReadyCache.delete(schemaName);
|
|
402
|
+
logger.debug({ schemaName }, 'Schema cache invalidated');
|
|
403
|
+
}
|
|
404
|
+
else {
|
|
405
|
+
schemaReadyCache.clear();
|
|
406
|
+
logger.debug('All schema caches invalidated');
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
/**
|
|
410
|
+
* Check if schema is cached as ready (without DB check).
|
|
411
|
+
* Useful for fast checks in hot paths.
|
|
412
|
+
*
|
|
413
|
+
* @param projectPath - Optional project path
|
|
414
|
+
* @returns True if cached as ready, false otherwise
|
|
415
|
+
*/
|
|
416
|
+
export function isSchemaReadyCached(projectPath) {
|
|
417
|
+
const schemaName = getProjectSchema(projectPath);
|
|
418
|
+
return schemaReadyCache.get(schemaName) ?? false;
|
|
419
|
+
}
|
|
420
|
+
// ============================================================================
|
|
421
|
+
// END MED-42 FIX
|
|
422
|
+
// ============================================================================
|
|
423
|
+
/**
|
|
424
|
+
* Get all project schemas in the database.
|
|
425
|
+
* Useful for cleanup, debugging, and multi-project management.
|
|
426
|
+
*
|
|
427
|
+
* @param db - DatabaseManager instance
|
|
428
|
+
* @returns Array of schema names matching specmem_* pattern
|
|
429
|
+
*/
|
|
430
|
+
export async function listProjectSchemas(db) {
|
|
431
|
+
const result = await db.query(`
|
|
432
|
+
SELECT schema_name
|
|
433
|
+
FROM information_schema.schemata
|
|
434
|
+
WHERE schema_name LIKE 'specmem_%'
|
|
435
|
+
ORDER BY schema_name
|
|
436
|
+
`);
|
|
437
|
+
return result.rows.map((row) => row.schema_name);
|
|
438
|
+
}
|
|
439
|
+
/**
|
|
440
|
+
* Drop a project schema and all its contents.
|
|
441
|
+
* CAUTION: This is destructive and cannot be undone!
|
|
442
|
+
*
|
|
443
|
+
* @param db - DatabaseManager instance
|
|
444
|
+
* @param schemaName - Schema to drop
|
|
445
|
+
* @param confirm - Must be true to actually drop
|
|
446
|
+
*/
|
|
447
|
+
export async function dropProjectSchema(db, schemaName, confirm = false) {
|
|
448
|
+
if (!confirm) {
|
|
449
|
+
throw new Error('Must set confirm=true to drop a project schema');
|
|
450
|
+
}
|
|
451
|
+
// HIGH-32 FIX: Validate schema name before any SQL operations
|
|
452
|
+
validateSchemaName(schemaName);
|
|
453
|
+
logger.warn({ schemaName }, 'Dropping project schema and all contents');
|
|
454
|
+
// HIGH-32 FIX: Use format() with %I for safe identifier quoting
|
|
455
|
+
const formatResult = await db.query(`SELECT format('DROP SCHEMA IF EXISTS %I CASCADE', $1) as sql`, [schemaName]);
|
|
456
|
+
await db.query(formatResult.rows[0].sql);
|
|
457
|
+
// MED-42 FIX: Invalidate cache since schema is gone
|
|
458
|
+
schemaReadyCache.delete(schemaName);
|
|
459
|
+
logger.info({ schemaName }, 'Project schema dropped');
|
|
460
|
+
}
|
|
461
|
+
// Default project UUID for backfilling existing data
|
|
462
|
+
export const DEFAULT_PROJECT_ID = '00000000-0000-0000-0000-000000000000';
|
|
463
|
+
export const DEFAULT_PROJECT_PATH = '/';
|
|
464
|
+
/**
|
|
465
|
+
* Run the project namespacing migration.
|
|
466
|
+
*
|
|
467
|
+
* This migration:
|
|
468
|
+
* 1. Creates the `projects` registry table
|
|
469
|
+
* 2. Adds `project_id` column to all data tables
|
|
470
|
+
* 3. Creates indexes for efficient project-scoped queries
|
|
471
|
+
* 4. Backfills existing data to the default project
|
|
472
|
+
*
|
|
473
|
+
* Safe to run multiple times (idempotent).
|
|
474
|
+
*
|
|
475
|
+
* @param db - DatabaseManager instance
|
|
476
|
+
* @returns Migration result summary
|
|
477
|
+
*/
|
|
478
|
+
export async function runProjectNamespacingMigration(db) {
|
|
479
|
+
const startTime = Date.now();
|
|
480
|
+
const result = {
|
|
481
|
+
success: false,
|
|
482
|
+
projectsTableCreated: false,
|
|
483
|
+
columnsAdded: [],
|
|
484
|
+
indexesCreated: [],
|
|
485
|
+
backfillResults: [],
|
|
486
|
+
errors: [],
|
|
487
|
+
durationMs: 0
|
|
488
|
+
};
|
|
489
|
+
logger.info('Starting project namespacing migration (version 29)');
|
|
490
|
+
try {
|
|
491
|
+
// Read and execute the SQL migration file
|
|
492
|
+
const sqlPath = path.join(__dirname, 'projectNamespacing.sql');
|
|
493
|
+
const sql = await fs.readFile(sqlPath, 'utf-8');
|
|
494
|
+
// Execute the full SQL script
|
|
495
|
+
await db.query(sql);
|
|
496
|
+
logger.info('SQL migration executed successfully');
|
|
497
|
+
result.projectsTableCreated = true;
|
|
498
|
+
// Verify tables were modified by checking for project_id columns
|
|
499
|
+
const verifyResult = await verifyMigration(db);
|
|
500
|
+
result.columnsAdded = verifyResult.tablesWithProjectId;
|
|
501
|
+
result.indexesCreated = verifyResult.indexes;
|
|
502
|
+
// Get backfill results
|
|
503
|
+
result.backfillResults = await getBackfillStats(db);
|
|
504
|
+
result.success = true;
|
|
505
|
+
logger.info({
|
|
506
|
+
columnsAdded: result.columnsAdded.length,
|
|
507
|
+
indexesCreated: result.indexesCreated.length,
|
|
508
|
+
backfillResults: result.backfillResults
|
|
509
|
+
}, 'Project namespacing migration completed successfully');
|
|
510
|
+
}
|
|
511
|
+
catch (error) {
|
|
512
|
+
const errMsg = error instanceof Error ? error.message : String(error);
|
|
513
|
+
result.errors.push(errMsg);
|
|
514
|
+
logger.error({ error: errMsg }, 'Project namespacing migration failed');
|
|
515
|
+
}
|
|
516
|
+
result.durationMs = Date.now() - startTime;
|
|
517
|
+
return result;
|
|
518
|
+
}
|
|
519
|
+
/**
|
|
520
|
+
* Run migration by reading individual SQL statements.
|
|
521
|
+
* Use this if the full script execution fails.
|
|
522
|
+
*
|
|
523
|
+
* @param db - DatabaseManager instance
|
|
524
|
+
*/
|
|
525
|
+
export async function runProjectNamespacingMigrationStepwise(db) {
|
|
526
|
+
const startTime = Date.now();
|
|
527
|
+
const result = {
|
|
528
|
+
success: false,
|
|
529
|
+
projectsTableCreated: false,
|
|
530
|
+
columnsAdded: [],
|
|
531
|
+
indexesCreated: [],
|
|
532
|
+
backfillResults: [],
|
|
533
|
+
errors: [],
|
|
534
|
+
durationMs: 0
|
|
535
|
+
};
|
|
536
|
+
logger.info('Starting stepwise project namespacing migration');
|
|
537
|
+
try {
|
|
538
|
+
// Step 1: Create projects table
|
|
539
|
+
await createProjectsTable(db);
|
|
540
|
+
result.projectsTableCreated = true;
|
|
541
|
+
// Step 2: Insert default project
|
|
542
|
+
await insertDefaultProject(db);
|
|
543
|
+
// Step 3: Add project_id to each table
|
|
544
|
+
const tables = [
|
|
545
|
+
'memories',
|
|
546
|
+
'codebase_files',
|
|
547
|
+
'code_definitions',
|
|
548
|
+
'code_dependencies',
|
|
549
|
+
'codebase_pointers',
|
|
550
|
+
'team_messages',
|
|
551
|
+
'task_claims',
|
|
552
|
+
'team_channels'
|
|
553
|
+
];
|
|
554
|
+
for (const table of tables) {
|
|
555
|
+
try {
|
|
556
|
+
await addProjectIdColumn(db, table);
|
|
557
|
+
result.columnsAdded.push(table);
|
|
558
|
+
}
|
|
559
|
+
catch (error) {
|
|
560
|
+
// Table might not exist (e.g., team_channels)
|
|
561
|
+
const errMsg = error instanceof Error ? error.message : String(error);
|
|
562
|
+
if (!errMsg.includes('does not exist') && !errMsg.includes('undefined_table')) {
|
|
563
|
+
result.errors.push(`${table}: ${errMsg}`);
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
// Step 4: Create indexes
|
|
568
|
+
const indexResults = await createProjectIndexes(db);
|
|
569
|
+
result.indexesCreated = indexResults;
|
|
570
|
+
// Step 5: Create helper functions
|
|
571
|
+
await createHelperFunctions(db);
|
|
572
|
+
// Step 6: Run backfill
|
|
573
|
+
result.backfillResults = await runBackfill(db);
|
|
574
|
+
result.success = result.errors.length === 0;
|
|
575
|
+
logger.info({
|
|
576
|
+
columnsAdded: result.columnsAdded,
|
|
577
|
+
errors: result.errors
|
|
578
|
+
}, 'Stepwise migration completed');
|
|
579
|
+
}
|
|
580
|
+
catch (error) {
|
|
581
|
+
const errMsg = error instanceof Error ? error.message : String(error);
|
|
582
|
+
result.errors.push(errMsg);
|
|
583
|
+
logger.error({ error: errMsg }, 'Stepwise migration failed');
|
|
584
|
+
}
|
|
585
|
+
result.durationMs = Date.now() - startTime;
|
|
586
|
+
return result;
|
|
587
|
+
}
|
|
588
|
+
/**
|
|
589
|
+
* Create the projects registry table.
|
|
590
|
+
*/
|
|
591
|
+
async function createProjectsTable(db) {
|
|
592
|
+
await db.query(`
|
|
593
|
+
CREATE TABLE IF NOT EXISTS projects (
|
|
594
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
595
|
+
path VARCHAR(500) NOT NULL UNIQUE,
|
|
596
|
+
name VARCHAR(255),
|
|
597
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
598
|
+
last_accessed_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
599
|
+
)
|
|
600
|
+
`);
|
|
601
|
+
await db.query(`CREATE INDEX IF NOT EXISTS idx_projects_path ON projects(path)`);
|
|
602
|
+
await db.query(`CREATE INDEX IF NOT EXISTS idx_projects_created_at ON projects(created_at)`);
|
|
603
|
+
}
|
|
604
|
+
/**
|
|
605
|
+
* Insert the default project for backfilling.
|
|
606
|
+
*/
|
|
607
|
+
async function insertDefaultProject(db) {
|
|
608
|
+
await db.query(`
|
|
609
|
+
INSERT INTO projects (id, path, name, created_at, last_accessed_at)
|
|
610
|
+
VALUES ($1, $2, $3, NOW(), NOW())
|
|
611
|
+
ON CONFLICT (path) DO NOTHING
|
|
612
|
+
`, [DEFAULT_PROJECT_ID, DEFAULT_PROJECT_PATH, 'Default Project']);
|
|
613
|
+
}
|
|
614
|
+
/**
|
|
615
|
+
* Add project_id column to a table with foreign key constraint.
|
|
616
|
+
*/
|
|
617
|
+
async function addProjectIdColumn(db, tableName) {
|
|
618
|
+
// HIGH-32 FIX: Validate table name before any SQL operations
|
|
619
|
+
validateTableName(tableName);
|
|
620
|
+
// HIGH-32 FIX: Use format() with %I for safe identifier quoting
|
|
621
|
+
// Add column
|
|
622
|
+
const addColResult = await db.query(`SELECT format(
|
|
623
|
+
'DO $$ BEGIN ALTER TABLE %I ADD COLUMN IF NOT EXISTS project_id UUID DEFAULT %L::uuid; EXCEPTION WHEN duplicate_column THEN NULL; END $$',
|
|
624
|
+
$1, $2
|
|
625
|
+
) as sql`, [tableName, DEFAULT_PROJECT_ID]);
|
|
626
|
+
await db.query(addColResult.rows[0].sql);
|
|
627
|
+
// Add foreign key (if not exists)
|
|
628
|
+
const constraintName = 'fk_' + tableName + '_project_id';
|
|
629
|
+
const addFkResult = await db.query(`SELECT format(
|
|
630
|
+
'DO $$ BEGIN ALTER TABLE %I ADD CONSTRAINT %I FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE SET DEFAULT; EXCEPTION WHEN duplicate_object THEN NULL; END $$',
|
|
631
|
+
$1, $2
|
|
632
|
+
) as sql`, [tableName, constraintName]);
|
|
633
|
+
await db.query(addFkResult.rows[0].sql);
|
|
634
|
+
}
|
|
635
|
+
/**
|
|
636
|
+
* Create indexes for project_id columns.
|
|
637
|
+
*/
|
|
638
|
+
async function createProjectIndexes(db) {
|
|
639
|
+
const indexes = [];
|
|
640
|
+
const indexStatements = [
|
|
641
|
+
{ name: 'idx_memories_project_id', sql: 'CREATE INDEX IF NOT EXISTS idx_memories_project_id ON memories(project_id)' },
|
|
642
|
+
{ name: 'idx_memories_project_created', sql: 'CREATE INDEX IF NOT EXISTS idx_memories_project_created ON memories(project_id, created_at DESC)' },
|
|
643
|
+
{ name: 'idx_memories_project_importance', sql: 'CREATE INDEX IF NOT EXISTS idx_memories_project_importance ON memories(project_id, importance)' },
|
|
644
|
+
{ name: 'idx_codebase_files_project_id', sql: 'CREATE INDEX IF NOT EXISTS idx_codebase_files_project_id ON codebase_files(project_id)' },
|
|
645
|
+
{ name: 'idx_codebase_files_project_path', sql: 'CREATE INDEX IF NOT EXISTS idx_codebase_files_project_path ON codebase_files(project_id, file_path)' },
|
|
646
|
+
{ name: 'idx_code_definitions_project_id', sql: 'CREATE INDEX IF NOT EXISTS idx_code_definitions_project_id ON code_definitions(project_id)' },
|
|
647
|
+
{ name: 'idx_code_definitions_project_name', sql: 'CREATE INDEX IF NOT EXISTS idx_code_definitions_project_name ON code_definitions(project_id, name)' },
|
|
648
|
+
{ name: 'idx_code_dependencies_project_id', sql: 'CREATE INDEX IF NOT EXISTS idx_code_dependencies_project_id ON code_dependencies(project_id)' },
|
|
649
|
+
{ name: 'idx_codebase_pointers_project_id', sql: 'CREATE INDEX IF NOT EXISTS idx_codebase_pointers_project_id ON codebase_pointers(project_id)' },
|
|
650
|
+
{ name: 'idx_team_messages_project_id', sql: 'CREATE INDEX IF NOT EXISTS idx_team_messages_project_id ON team_messages(project_id)' },
|
|
651
|
+
{ name: 'idx_team_messages_project_channel', sql: 'CREATE INDEX IF NOT EXISTS idx_team_messages_project_channel ON team_messages(project_id, channel_id, created_at DESC)' },
|
|
652
|
+
{ name: 'idx_task_claims_project_id', sql: 'CREATE INDEX IF NOT EXISTS idx_task_claims_project_id ON task_claims(project_id)' },
|
|
653
|
+
{ name: 'idx_task_claims_project_status', sql: 'CREATE INDEX IF NOT EXISTS idx_task_claims_project_status ON task_claims(project_id, status)' }
|
|
654
|
+
];
|
|
655
|
+
for (const { name, sql } of indexStatements) {
|
|
656
|
+
try {
|
|
657
|
+
await db.query(sql);
|
|
658
|
+
indexes.push(name);
|
|
659
|
+
}
|
|
660
|
+
catch (error) {
|
|
661
|
+
// Index might fail if table doesn't exist, that's ok
|
|
662
|
+
logger.debug({ index: name, error }, 'Index creation skipped');
|
|
663
|
+
}
|
|
664
|
+
}
|
|
665
|
+
return indexes;
|
|
666
|
+
}
|
|
667
|
+
/**
|
|
668
|
+
* Create helper SQL functions for project registration.
|
|
669
|
+
*/
|
|
670
|
+
async function createHelperFunctions(db) {
|
|
671
|
+
// register_project function with UPSERT
|
|
672
|
+
await db.query(`
|
|
673
|
+
CREATE OR REPLACE FUNCTION register_project(
|
|
674
|
+
p_path VARCHAR(500),
|
|
675
|
+
p_name VARCHAR(255) DEFAULT NULL
|
|
676
|
+
)
|
|
677
|
+
RETURNS UUID AS $$
|
|
678
|
+
DECLARE
|
|
679
|
+
v_project_id UUID;
|
|
680
|
+
BEGIN
|
|
681
|
+
INSERT INTO projects (path, name)
|
|
682
|
+
VALUES (p_path, COALESCE(p_name, p_path))
|
|
683
|
+
ON CONFLICT (path) DO UPDATE SET
|
|
684
|
+
last_accessed_at = NOW(),
|
|
685
|
+
name = COALESCE(EXCLUDED.name, projects.name)
|
|
686
|
+
RETURNING id INTO v_project_id;
|
|
687
|
+
|
|
688
|
+
RETURN v_project_id;
|
|
689
|
+
END;
|
|
690
|
+
$$ LANGUAGE plpgsql
|
|
691
|
+
`);
|
|
692
|
+
// get_project_id function
|
|
693
|
+
await db.query(`
|
|
694
|
+
CREATE OR REPLACE FUNCTION get_project_id(p_path VARCHAR(500))
|
|
695
|
+
RETURNS UUID AS $$
|
|
696
|
+
DECLARE
|
|
697
|
+
v_project_id UUID;
|
|
698
|
+
BEGIN
|
|
699
|
+
SELECT id INTO v_project_id
|
|
700
|
+
FROM projects
|
|
701
|
+
WHERE path = p_path;
|
|
702
|
+
|
|
703
|
+
IF v_project_id IS NULL THEN
|
|
704
|
+
v_project_id := register_project(p_path);
|
|
705
|
+
ELSE
|
|
706
|
+
UPDATE projects SET last_accessed_at = NOW() WHERE id = v_project_id;
|
|
707
|
+
END IF;
|
|
708
|
+
|
|
709
|
+
RETURN v_project_id;
|
|
710
|
+
END;
|
|
711
|
+
$$ LANGUAGE plpgsql
|
|
712
|
+
`);
|
|
713
|
+
}
|
|
714
|
+
/**
|
|
715
|
+
* Run backfill to assign existing data to default project.
|
|
716
|
+
*/
|
|
717
|
+
async function runBackfill(db) {
|
|
718
|
+
const results = [];
|
|
719
|
+
const tables = [
|
|
720
|
+
'memories',
|
|
721
|
+
'codebase_files',
|
|
722
|
+
'code_definitions',
|
|
723
|
+
'code_dependencies',
|
|
724
|
+
'codebase_pointers',
|
|
725
|
+
'team_messages',
|
|
726
|
+
'task_claims',
|
|
727
|
+
'team_channels'
|
|
728
|
+
];
|
|
729
|
+
for (const table of tables) {
|
|
730
|
+
try {
|
|
731
|
+
// HIGH-32 FIX: Validate table name before any SQL operations
|
|
732
|
+
validateTableName(table);
|
|
733
|
+
// HIGH-32 FIX: Use format() with %I for safe identifier quoting
|
|
734
|
+
const formatResult = await db.query(`SELECT format('UPDATE %I SET project_id = $1 WHERE project_id IS NULL', $1) as sql`, [table]);
|
|
735
|
+
const result = await db.query(formatResult.rows[0].sql, [DEFAULT_PROJECT_ID]);
|
|
736
|
+
results.push({
|
|
737
|
+
tableName: table,
|
|
738
|
+
rowsUpdated: result.rowCount ?? 0
|
|
739
|
+
});
|
|
740
|
+
}
|
|
741
|
+
catch (error) {
|
|
742
|
+
// Table might not exist
|
|
743
|
+
logger.debug({ table, error }, 'Backfill skipped for table');
|
|
744
|
+
}
|
|
745
|
+
}
|
|
746
|
+
return results;
|
|
747
|
+
}
|
|
748
|
+
/**
|
|
749
|
+
* Verify migration by checking for project_id columns.
|
|
750
|
+
*/
|
|
751
|
+
async function verifyMigration(db) {
|
|
752
|
+
// Get current project schema name
|
|
753
|
+
const schemaName = db.getProjectSchemaName();
|
|
754
|
+
// Check which tables have project_id column in the project schema
|
|
755
|
+
const columnCheck = await db.query(`
|
|
756
|
+
SELECT table_name
|
|
757
|
+
FROM information_schema.columns
|
|
758
|
+
WHERE column_name = 'project_id'
|
|
759
|
+
AND table_schema = $1
|
|
760
|
+
ORDER BY table_name
|
|
761
|
+
`, [schemaName]);
|
|
762
|
+
const tablesWithProjectId = columnCheck.rows.map((row) => row.table_name);
|
|
763
|
+
// Check for project-related indexes in the project schema
|
|
764
|
+
const indexCheck = await db.query(`
|
|
765
|
+
SELECT indexname
|
|
766
|
+
FROM pg_indexes
|
|
767
|
+
WHERE indexname LIKE '%project%'
|
|
768
|
+
AND schemaname = $1
|
|
769
|
+
ORDER BY indexname
|
|
770
|
+
`, [schemaName]);
|
|
771
|
+
const indexes = indexCheck.rows.map((row) => row.indexname);
|
|
772
|
+
return { tablesWithProjectId, indexes };
|
|
773
|
+
}
|
|
774
|
+
/**
|
|
775
|
+
* Get current backfill statistics (how many rows per table have default project).
|
|
776
|
+
*/
|
|
777
|
+
async function getBackfillStats(db) {
|
|
778
|
+
const results = [];
|
|
779
|
+
const tables = [
|
|
780
|
+
'memories',
|
|
781
|
+
'codebase_files',
|
|
782
|
+
'code_definitions',
|
|
783
|
+
'code_dependencies',
|
|
784
|
+
'codebase_pointers',
|
|
785
|
+
'team_messages',
|
|
786
|
+
'task_claims'
|
|
787
|
+
];
|
|
788
|
+
for (const table of tables) {
|
|
789
|
+
try {
|
|
790
|
+
// HIGH-32 FIX: Validate table name before any SQL operations
|
|
791
|
+
validateTableName(table);
|
|
792
|
+
// HIGH-32 FIX: Use format() with %I for safe identifier quoting
|
|
793
|
+
const formatResult = await db.query(`SELECT format('SELECT COUNT(*) as count FROM %I WHERE project_id = $1', $1) as sql`, [table]);
|
|
794
|
+
const result = await db.query(formatResult.rows[0].sql, [DEFAULT_PROJECT_ID]);
|
|
795
|
+
results.push({
|
|
796
|
+
tableName: table,
|
|
797
|
+
rowsUpdated: parseInt(result.rows[0]?.count ?? '0', 10)
|
|
798
|
+
});
|
|
799
|
+
}
|
|
800
|
+
catch (error) {
|
|
801
|
+
// Table might not exist or column might not be added yet
|
|
802
|
+
logger.debug({ table, error }, 'Stats check skipped');
|
|
803
|
+
}
|
|
804
|
+
}
|
|
805
|
+
return results;
|
|
806
|
+
}
|
|
807
|
+
/**
|
|
808
|
+
* Register a project using the UPSERT pattern.
|
|
809
|
+
* Race-condition-free: multiple concurrent calls with same path will all succeed.
|
|
810
|
+
*
|
|
811
|
+
* @param db - DatabaseManager instance
|
|
812
|
+
* @param projectPath - The project path to register
|
|
813
|
+
* @param projectName - Optional friendly name
|
|
814
|
+
* @returns The project UUID
|
|
815
|
+
*/
|
|
816
|
+
export async function registerProject(db, projectPath, projectName) {
|
|
817
|
+
const result = await db.query(`
|
|
818
|
+
INSERT INTO projects (path, name)
|
|
819
|
+
VALUES ($1, COALESCE($2, $1))
|
|
820
|
+
ON CONFLICT (path) DO UPDATE SET
|
|
821
|
+
last_accessed_at = NOW(),
|
|
822
|
+
name = COALESCE(EXCLUDED.name, projects.name)
|
|
823
|
+
RETURNING id
|
|
824
|
+
`, [projectPath, projectName]);
|
|
825
|
+
return result.rows[0].id;
|
|
826
|
+
}
|
|
827
|
+
/**
|
|
828
|
+
* Get project ID by path, or register if not exists.
|
|
829
|
+
*
|
|
830
|
+
* @param db - DatabaseManager instance
|
|
831
|
+
* @param projectPath - The project path to lookup
|
|
832
|
+
* @returns The project UUID
|
|
833
|
+
*/
|
|
834
|
+
export async function getOrCreateProjectId(db, projectPath) {
|
|
835
|
+
// First try to get existing
|
|
836
|
+
const existing = await db.query(`
|
|
837
|
+
SELECT id FROM projects WHERE path = $1
|
|
838
|
+
`, [projectPath]);
|
|
839
|
+
if (existing.rows.length > 0) {
|
|
840
|
+
// Update last_accessed
|
|
841
|
+
await db.query(`
|
|
842
|
+
UPDATE projects SET last_accessed_at = NOW() WHERE path = $1
|
|
843
|
+
`, [projectPath]);
|
|
844
|
+
return existing.rows[0].id;
|
|
845
|
+
}
|
|
846
|
+
// Register new project
|
|
847
|
+
return registerProject(db, projectPath);
|
|
848
|
+
}
|
|
849
|
+
/**
|
|
850
|
+
* Get all registered projects.
|
|
851
|
+
*
|
|
852
|
+
* @param db - DatabaseManager instance
|
|
853
|
+
* @returns Array of project records
|
|
854
|
+
*/
|
|
855
|
+
export async function getAllProjects(db) {
|
|
856
|
+
const result = await db.query(`
|
|
857
|
+
SELECT id, path, name, created_at, last_accessed_at
|
|
858
|
+
FROM projects
|
|
859
|
+
ORDER BY last_accessed_at DESC
|
|
860
|
+
`);
|
|
861
|
+
return result.rows.map((row) => ({
|
|
862
|
+
id: row.id,
|
|
863
|
+
path: row.path,
|
|
864
|
+
name: row.name,
|
|
865
|
+
createdAt: row.created_at,
|
|
866
|
+
lastAccessedAt: row.last_accessed_at
|
|
867
|
+
}));
|
|
868
|
+
}
|
|
869
|
+
/**
|
|
870
|
+
* Check if project namespacing migration has been run.
|
|
871
|
+
*
|
|
872
|
+
* NOTE: The projects table is intentionally in the 'public' schema as it's a
|
|
873
|
+
* global registry that tracks all projects across all schemas. This is correct
|
|
874
|
+
* design - do not change it to use per-project schema.
|
|
875
|
+
*
|
|
876
|
+
* @param db - DatabaseManager instance
|
|
877
|
+
* @returns True if projects table exists with data
|
|
878
|
+
*/
|
|
879
|
+
export async function isProjectNamespacingEnabled(db) {
|
|
880
|
+
try {
|
|
881
|
+
// projects table is deliberately in public schema as it's a global registry
|
|
882
|
+
const result = await db.query(`
|
|
883
|
+
SELECT EXISTS (
|
|
884
|
+
SELECT 1 FROM information_schema.tables
|
|
885
|
+
WHERE table_schema = 'public' AND table_name = 'projects'
|
|
886
|
+
) as exists
|
|
887
|
+
`);
|
|
888
|
+
return result.rows[0]?.exists ?? false;
|
|
889
|
+
}
|
|
890
|
+
catch (error) {
|
|
891
|
+
return false;
|
|
892
|
+
}
|
|
893
|
+
}
|
|
894
|
+
export default {
|
|
895
|
+
// Schema-per-project isolation (new)
|
|
896
|
+
getProjectSchema,
|
|
897
|
+
getProjectHashFull,
|
|
898
|
+
createProjectSchema,
|
|
899
|
+
setProjectSearchPath,
|
|
900
|
+
initializeProjectSchema,
|
|
901
|
+
listProjectSchemas,
|
|
902
|
+
dropProjectSchema,
|
|
903
|
+
// MED-42 FIX: Schema validation before operations
|
|
904
|
+
schemaExists,
|
|
905
|
+
tableExists,
|
|
906
|
+
ensureSchemaReady,
|
|
907
|
+
ensureSchemaInitialized,
|
|
908
|
+
invalidateSchemaCache,
|
|
909
|
+
isSchemaReadyCached,
|
|
910
|
+
// Legacy project_id column approach
|
|
911
|
+
runProjectNamespacingMigration,
|
|
912
|
+
runProjectNamespacingMigrationStepwise,
|
|
913
|
+
registerProject,
|
|
914
|
+
getOrCreateProjectId,
|
|
915
|
+
getAllProjects,
|
|
916
|
+
isProjectNamespacingEnabled,
|
|
917
|
+
DEFAULT_PROJECT_ID,
|
|
918
|
+
DEFAULT_PROJECT_PATH
|
|
919
|
+
};
|
|
920
|
+
//# sourceMappingURL=projectNamespacing.js.map
|