@chendpoc/pi-memory 0.1.12 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +67 -187
- package/UBIQUITOUS_LANGUAGE.md +81 -0
- package/dist/adapters/embed/factory.d.ts +7 -0
- package/dist/adapters/embed/factory.d.ts.map +1 -0
- package/dist/adapters/embed/factory.js +44 -0
- package/dist/adapters/embed/factory.js.map +1 -0
- package/dist/adapters/embed/hash.d.ts +3 -0
- package/dist/adapters/embed/hash.d.ts.map +1 -0
- package/dist/adapters/embed/hash.js +26 -0
- package/dist/adapters/embed/hash.js.map +1 -0
- package/dist/adapters/embed/normalize.d.ts +3 -0
- package/dist/adapters/embed/normalize.d.ts.map +1 -0
- package/dist/adapters/embed/normalize.js +15 -0
- package/dist/adapters/embed/normalize.js.map +1 -0
- package/dist/adapters/embed/ollama.d.ts +8 -0
- package/dist/adapters/embed/ollama.d.ts.map +1 -0
- package/dist/adapters/embed/ollama.js +31 -0
- package/dist/adapters/embed/ollama.js.map +1 -0
- package/dist/adapters/embed/openai.d.ts +8 -0
- package/dist/adapters/embed/openai.d.ts.map +1 -0
- package/dist/adapters/embed/openai.js +30 -0
- package/dist/adapters/embed/openai.js.map +1 -0
- package/dist/adapters/embed/types.d.ts +9 -0
- package/dist/adapters/embed/types.d.ts.map +1 -0
- package/dist/adapters/embed/types.js +2 -0
- package/dist/adapters/embed/types.js.map +1 -0
- package/dist/adapters/http.d.ts +13 -0
- package/dist/adapters/http.d.ts.map +1 -0
- package/dist/adapters/http.js +31 -0
- package/dist/adapters/http.js.map +1 -0
- package/dist/adapters/index.d.ts +4 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +4 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/llm/extractText.d.ts +5 -0
- package/dist/adapters/llm/extractText.d.ts.map +1 -0
- package/dist/adapters/llm/extractText.js +7 -0
- package/dist/adapters/llm/extractText.js.map +1 -0
- package/dist/adapters/llm/factory.d.ts +11 -0
- package/dist/adapters/llm/factory.d.ts.map +1 -0
- package/dist/adapters/llm/factory.js +48 -0
- package/dist/adapters/llm/factory.js.map +1 -0
- package/dist/adapters/llm/index.d.ts +8 -0
- package/dist/adapters/llm/index.d.ts.map +1 -0
- package/dist/adapters/llm/index.js +7 -0
- package/dist/adapters/llm/index.js.map +1 -0
- package/dist/adapters/llm/modelSpec.d.ts +10 -0
- package/dist/adapters/llm/modelSpec.d.ts.map +1 -0
- package/dist/adapters/llm/modelSpec.js +21 -0
- package/dist/adapters/llm/modelSpec.js.map +1 -0
- package/dist/adapters/llm/ollama.d.ts +4 -0
- package/dist/adapters/llm/ollama.d.ts.map +1 -0
- package/dist/adapters/llm/ollama.js +32 -0
- package/dist/adapters/llm/ollama.js.map +1 -0
- package/dist/adapters/llm/openai-compat.d.ts +4 -0
- package/dist/adapters/llm/openai-compat.d.ts.map +1 -0
- package/dist/adapters/llm/openai-compat.js +36 -0
- package/dist/adapters/llm/openai-compat.js.map +1 -0
- package/dist/adapters/llm/pi-ai.d.ts +5 -0
- package/dist/adapters/llm/pi-ai.d.ts.map +1 -0
- package/dist/adapters/llm/pi-ai.js +60 -0
- package/dist/adapters/llm/pi-ai.js.map +1 -0
- package/dist/adapters/llm/standalone.d.ts +6 -0
- package/dist/adapters/llm/standalone.d.ts.map +1 -0
- package/dist/adapters/llm/standalone.js +44 -0
- package/dist/adapters/llm/standalone.js.map +1 -0
- package/dist/adapters/llm/types.d.ts +15 -0
- package/dist/adapters/llm/types.d.ts.map +1 -0
- package/dist/adapters/llm/types.js +2 -0
- package/dist/adapters/llm/types.js.map +1 -0
- package/dist/cli/init.d.ts +3 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +13 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/jobs.d.ts +32 -0
- package/dist/cli/jobs.d.ts.map +1 -0
- package/dist/cli/jobs.js +100 -0
- package/dist/cli/jobs.js.map +1 -0
- package/dist/cli/log.d.ts +14 -0
- package/dist/cli/log.d.ts.map +1 -0
- package/dist/cli/log.js +32 -0
- package/dist/cli/log.js.map +1 -0
- package/dist/cli/parseArgs.d.ts +35 -0
- package/dist/cli/parseArgs.d.ts.map +1 -0
- package/dist/cli/parseArgs.js +127 -0
- package/dist/cli/parseArgs.js.map +1 -0
- package/dist/cli/status.d.ts +44 -0
- package/dist/cli/status.d.ts.map +1 -0
- package/dist/cli/status.js +238 -0
- package/dist/cli/status.js.map +1 -0
- package/dist/cli/theme.d.ts +14 -0
- package/dist/cli/theme.d.ts.map +1 -0
- package/dist/cli/theme.js +20 -0
- package/dist/cli/theme.js.map +1 -0
- package/dist/cli.js +68 -231
- package/dist/cli.js.map +1 -1
- package/dist/commands/index.d.ts +6 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +14 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/parseMemoryStatusArgs.d.ts +3 -0
- package/dist/commands/parseMemoryStatusArgs.d.ts.map +1 -0
- package/dist/commands/parseMemoryStatusArgs.js +15 -0
- package/dist/commands/parseMemoryStatusArgs.js.map +1 -0
- package/dist/commands/parseRememberArgs.d.ts +10 -0
- package/dist/commands/parseRememberArgs.d.ts.map +1 -0
- package/dist/commands/parseRememberArgs.js +46 -0
- package/dist/commands/parseRememberArgs.js.map +1 -0
- package/dist/commands/remember.d.ts +8 -0
- package/dist/commands/remember.d.ts.map +1 -0
- package/dist/commands/remember.js +30 -0
- package/dist/commands/remember.js.map +1 -0
- package/dist/commands/status.d.ts +10 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +81 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/types.d.ts +10 -0
- package/dist/commands/types.d.ts.map +1 -0
- package/dist/commands/types.js +2 -0
- package/dist/commands/types.js.map +1 -0
- package/dist/compact/index.d.ts +5 -0
- package/dist/compact/index.d.ts.map +1 -0
- package/dist/compact/index.js +5 -0
- package/dist/compact/index.js.map +1 -0
- package/dist/compact/parseMemoryExport.d.ts +6 -0
- package/dist/compact/parseMemoryExport.d.ts.map +1 -0
- package/dist/compact/parseMemoryExport.js +62 -0
- package/dist/compact/parseMemoryExport.js.map +1 -0
- package/dist/compact/register.d.ts +10 -0
- package/dist/compact/register.d.ts.map +1 -0
- package/dist/compact/register.js +47 -0
- package/dist/compact/register.js.map +1 -0
- package/dist/compact/runSummary.d.ts +6 -0
- package/dist/compact/runSummary.d.ts.map +1 -0
- package/dist/compact/runSummary.js +29 -0
- package/dist/compact/runSummary.js.map +1 -0
- package/dist/compact/subagentDelta.d.ts +6 -0
- package/dist/compact/subagentDelta.d.ts.map +1 -0
- package/dist/compact/subagentDelta.js +13 -0
- package/dist/compact/subagentDelta.js.map +1 -0
- package/dist/compact/summaryPrompt.d.ts +3 -0
- package/dist/compact/summaryPrompt.d.ts.map +1 -0
- package/dist/compact/summaryPrompt.js +41 -0
- package/dist/compact/summaryPrompt.js.map +1 -0
- package/dist/config/agentDir.d.ts +11 -0
- package/dist/config/agentDir.d.ts.map +1 -0
- package/dist/config/agentDir.js +21 -0
- package/dist/config/agentDir.js.map +1 -0
- package/dist/config/chunking.d.ts +7 -0
- package/dist/config/chunking.d.ts.map +1 -0
- package/dist/config/chunking.js +20 -0
- package/dist/config/chunking.js.map +1 -0
- package/dist/config/env.d.ts +28 -0
- package/dist/config/env.d.ts.map +1 -0
- package/dist/config/env.js +43 -0
- package/dist/config/env.js.map +1 -0
- package/dist/config/index.d.ts +7 -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/loadEnv.d.ts +10 -0
- package/dist/config/loadEnv.d.ts.map +1 -0
- package/dist/config/loadEnv.js +25 -0
- package/dist/config/loadEnv.js.map +1 -0
- package/dist/config/preflightBudget.d.ts +9 -0
- package/dist/config/preflightBudget.d.ts.map +1 -0
- package/dist/config/preflightBudget.js +16 -0
- package/dist/config/preflightBudget.js.map +1 -0
- package/dist/config/retrieval.d.ts +10 -0
- package/dist/config/retrieval.d.ts.map +1 -0
- package/dist/config/retrieval.js +31 -0
- package/dist/config/retrieval.js.map +1 -0
- package/dist/consolidate/entryKey.d.ts +6 -0
- package/dist/consolidate/entryKey.d.ts.map +1 -0
- package/dist/consolidate/entryKey.js +5 -0
- package/dist/consolidate/entryKey.js.map +1 -0
- package/dist/consolidate/index.d.ts +5 -0
- package/dist/consolidate/index.d.ts.map +1 -0
- package/dist/consolidate/index.js +5 -0
- package/dist/consolidate/index.js.map +1 -0
- package/dist/consolidate/mergeEntries.d.ts +4 -0
- package/dist/consolidate/mergeEntries.d.ts.map +1 -0
- package/dist/consolidate/mergeEntries.js +17 -0
- package/dist/consolidate/mergeEntries.js.map +1 -0
- package/dist/consolidate/mergePrompt.d.ts +4 -0
- package/dist/consolidate/mergePrompt.d.ts.map +1 -0
- package/dist/consolidate/mergePrompt.js +40 -0
- package/dist/consolidate/mergePrompt.js.map +1 -0
- package/dist/consolidate/mergeWithLlm.d.ts +4 -0
- package/dist/consolidate/mergeWithLlm.d.ts.map +1 -0
- package/dist/consolidate/mergeWithLlm.js +27 -0
- package/dist/consolidate/mergeWithLlm.js.map +1 -0
- package/dist/consolidate/runJob.d.ts +29 -0
- package/dist/consolidate/runJob.d.ts.map +1 -0
- package/dist/consolidate/runJob.js +48 -0
- package/dist/consolidate/runJob.js.map +1 -0
- package/dist/consolidate/scheduler.d.ts +18 -0
- package/dist/consolidate/scheduler.d.ts.map +1 -0
- package/dist/consolidate/scheduler.js +32 -0
- package/dist/consolidate/scheduler.js.map +1 -0
- package/dist/constants/chunking.d.ts +7 -0
- package/dist/constants/chunking.d.ts.map +1 -0
- package/dist/constants/chunking.js +7 -0
- package/dist/constants/chunking.js.map +1 -0
- package/dist/constants/env.d.ts +44 -0
- package/dist/constants/env.d.ts.map +1 -0
- package/dist/constants/env.js +49 -0
- package/dist/constants/env.js.map +1 -0
- package/dist/constants/index.d.ts +8 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/constants/index.js +8 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/constants/memory.d.ts +17 -0
- package/dist/constants/memory.d.ts.map +1 -0
- package/dist/constants/memory.js +16 -0
- package/dist/constants/memory.js.map +1 -0
- package/dist/constants/paths.d.ts +23 -0
- package/dist/constants/paths.d.ts.map +1 -0
- package/dist/constants/paths.js +23 -0
- package/dist/constants/paths.js.map +1 -0
- package/dist/constants/preflight.d.ts +10 -0
- package/dist/constants/preflight.d.ts.map +1 -0
- package/dist/constants/preflight.js +10 -0
- package/dist/constants/preflight.js.map +1 -0
- package/dist/constants/retrieval.d.ts +10 -0
- package/dist/constants/retrieval.d.ts.map +1 -0
- package/dist/constants/retrieval.js +10 -0
- package/dist/constants/retrieval.js.map +1 -0
- package/dist/constants/security.d.ts +5 -0
- package/dist/constants/security.d.ts.map +1 -0
- package/dist/constants/security.js +5 -0
- package/dist/constants/security.js.map +1 -0
- package/dist/constants/timing.d.ts +36 -0
- package/dist/constants/timing.d.ts.map +1 -0
- package/dist/constants/timing.js +36 -0
- package/dist/constants/timing.js.map +1 -0
- package/dist/index.d.ts +11 -28
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -27
- package/dist/index.js.map +1 -1
- package/dist/init/workspace.d.ts +15 -0
- package/dist/init/workspace.d.ts.map +1 -0
- package/dist/init/workspace.js +32 -0
- package/dist/init/workspace.js.map +1 -0
- package/dist/ipc/jsonlFramer.d.ts +9 -0
- package/dist/ipc/jsonlFramer.d.ts.map +1 -0
- package/dist/ipc/jsonlFramer.js +26 -0
- package/dist/ipc/jsonlFramer.js.map +1 -0
- package/dist/pi-extension.d.ts +0 -2
- package/dist/pi-extension.d.ts.map +1 -1
- package/dist/pi-extension.js +194 -219
- package/dist/pi-extension.js.map +1 -1
- package/dist/preflight/episodic.d.ts +20 -0
- package/dist/preflight/episodic.d.ts.map +1 -0
- package/dist/preflight/episodic.js +109 -0
- package/dist/preflight/episodic.js.map +1 -0
- package/dist/preflight/queryCache.d.ts +15 -0
- package/dist/preflight/queryCache.d.ts.map +1 -0
- package/dist/preflight/queryCache.js +46 -0
- package/dist/preflight/queryCache.js.map +1 -0
- package/dist/preflight/queryIntent.d.ts +20 -0
- package/dist/preflight/queryIntent.d.ts.map +1 -0
- package/dist/preflight/queryIntent.js +75 -0
- package/dist/preflight/queryIntent.js.map +1 -0
- package/dist/preflight/render.d.ts +8 -19
- package/dist/preflight/render.d.ts.map +1 -1
- package/dist/preflight/render.js +29 -106
- package/dist/preflight/render.js.map +1 -1
- package/dist/preflight/session.d.ts +3 -0
- package/dist/preflight/session.d.ts.map +1 -0
- package/dist/preflight/session.js +6 -0
- package/dist/preflight/session.js.map +1 -0
- package/dist/preflight/strip.d.ts +0 -8
- package/dist/preflight/strip.d.ts.map +1 -1
- package/dist/preflight/strip.js +2 -11
- package/dist/preflight/strip.js.map +1 -1
- package/dist/shutdown/enqueue.d.ts +12 -0
- package/dist/shutdown/enqueue.d.ts.map +1 -0
- package/dist/shutdown/enqueue.js +14 -0
- package/dist/shutdown/enqueue.js.map +1 -0
- package/dist/shutdown/extractPrompt.d.ts +4 -0
- package/dist/shutdown/extractPrompt.d.ts.map +1 -0
- package/dist/shutdown/extractPrompt.js +29 -0
- package/dist/shutdown/extractPrompt.js.map +1 -0
- package/dist/shutdown/processed.d.ts +9 -0
- package/dist/shutdown/processed.d.ts.map +1 -0
- package/dist/shutdown/processed.js +28 -0
- package/dist/shutdown/processed.js.map +1 -0
- package/dist/shutdown/readQueue.d.ts +4 -0
- package/dist/shutdown/readQueue.d.ts.map +1 -0
- package/dist/shutdown/readQueue.js +26 -0
- package/dist/shutdown/readQueue.js.map +1 -0
- package/dist/shutdown/runDrainJob.d.ts +26 -0
- package/dist/shutdown/runDrainJob.d.ts.map +1 -0
- package/dist/shutdown/runDrainJob.js +143 -0
- package/dist/shutdown/runDrainJob.js.map +1 -0
- package/dist/shutdown/sessionReader.d.ts +6 -0
- package/dist/shutdown/sessionReader.d.ts.map +1 -0
- package/dist/shutdown/sessionReader.js +44 -0
- package/dist/shutdown/sessionReader.js.map +1 -0
- package/dist/sidecar/client.d.ts +17 -16
- package/dist/sidecar/client.d.ts.map +1 -1
- package/dist/sidecar/client.js +64 -100
- package/dist/sidecar/client.js.map +1 -1
- package/dist/sidecar/paths.d.ts +8 -0
- package/dist/sidecar/paths.d.ts.map +1 -0
- package/dist/sidecar/paths.js +23 -0
- package/dist/sidecar/paths.js.map +1 -0
- package/dist/sidecar/protocol.d.ts +54 -0
- package/dist/sidecar/protocol.d.ts.map +1 -0
- package/dist/sidecar/protocol.js +4 -0
- package/dist/sidecar/protocol.js.map +1 -0
- package/dist/sidecar/reindexBridge.d.ts +13 -0
- package/dist/sidecar/reindexBridge.d.ts.map +1 -0
- package/dist/sidecar/reindexBridge.js +37 -0
- package/dist/sidecar/reindexBridge.js.map +1 -0
- package/dist/sidecar/server/process.d.ts +2 -0
- package/dist/sidecar/server/process.d.ts.map +1 -0
- package/dist/sidecar/server/process.js +22 -0
- package/dist/sidecar/server/process.js.map +1 -0
- package/dist/sidecar/server/query.d.ts +8 -0
- package/dist/sidecar/server/query.d.ts.map +1 -0
- package/dist/sidecar/server/query.js +7 -0
- package/dist/sidecar/server/query.js.map +1 -0
- package/dist/sidecar/server/reindex.d.ts +8 -0
- package/dist/sidecar/server/reindex.d.ts.map +1 -0
- package/dist/sidecar/server/reindex.js +12 -0
- package/dist/sidecar/server/reindex.js.map +1 -0
- package/dist/sidecar/server/server.d.ts +11 -0
- package/dist/sidecar/server/server.d.ts.map +1 -0
- package/dist/sidecar/server/server.js +76 -0
- package/dist/sidecar/server/server.js.map +1 -0
- package/dist/sidecar/server/stats.d.ts +8 -0
- package/dist/sidecar/server/stats.d.ts.map +1 -0
- package/dist/sidecar/server/stats.js +18 -0
- package/dist/sidecar/server/stats.js.map +1 -0
- package/dist/sidecar/server/vec/embedder.d.ts +2 -0
- package/dist/sidecar/server/vec/embedder.d.ts.map +1 -0
- package/dist/sidecar/server/vec/embedder.js +2 -0
- package/dist/sidecar/server/vec/embedder.js.map +1 -0
- package/dist/sidecar/server/vec/mmr.d.ts +13 -0
- package/dist/sidecar/server/vec/mmr.d.ts.map +1 -0
- package/dist/sidecar/server/vec/mmr.js +36 -0
- package/dist/sidecar/server/vec/mmr.js.map +1 -0
- package/dist/sidecar/server/vec/store.d.ts +30 -0
- package/dist/sidecar/server/vec/store.d.ts.map +1 -0
- package/dist/sidecar/server/vec/store.js +179 -0
- package/dist/sidecar/server/vec/store.js.map +1 -0
- package/dist/sidecar/sidecarManager.d.ts +10 -0
- package/dist/sidecar/sidecarManager.d.ts.map +1 -0
- package/dist/sidecar/sidecarManager.js +111 -0
- package/dist/sidecar/sidecarManager.js.map +1 -0
- package/dist/sidecar/utils.d.ts +3 -0
- package/dist/sidecar/utils.d.ts.map +1 -0
- package/dist/sidecar/utils.js +27 -0
- package/dist/sidecar/utils.js.map +1 -0
- package/dist/store/backend.d.ts +12 -0
- package/dist/store/backend.d.ts.map +1 -0
- package/dist/store/backend.js +47 -0
- package/dist/store/backend.js.map +1 -0
- package/dist/store/index.d.ts +6 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/index.js +6 -0
- package/dist/store/index.js.map +1 -0
- package/dist/store/indexChunks.d.ts +9 -0
- package/dist/store/indexChunks.d.ts.map +1 -0
- package/dist/store/indexChunks.js +78 -0
- package/dist/store/indexChunks.js.map +1 -0
- package/dist/store/markdown/format.d.ts +5 -0
- package/dist/store/markdown/format.d.ts.map +1 -0
- package/dist/store/markdown/format.js +14 -0
- package/dist/store/markdown/format.js.map +1 -0
- package/dist/store/markdown/parse.d.ts +5 -0
- package/dist/store/markdown/parse.d.ts.map +1 -0
- package/dist/store/markdown/parse.js +57 -0
- package/dist/store/markdown/parse.js.map +1 -0
- package/dist/store/markdown/template.d.ts +3 -0
- package/dist/store/markdown/template.d.ts.map +1 -0
- package/dist/store/markdown/template.js +22 -0
- package/dist/store/markdown/template.js.map +1 -0
- package/dist/store/memoryStore.d.ts +69 -0
- package/dist/store/memoryStore.d.ts.map +1 -0
- package/dist/store/memoryStore.js +421 -0
- package/dist/store/memoryStore.js.map +1 -0
- package/dist/store/paths.d.ts +10 -0
- package/dist/store/paths.d.ts.map +1 -0
- package/dist/store/paths.js +19 -0
- package/dist/store/paths.js.map +1 -0
- package/dist/store/types.d.ts +38 -0
- package/dist/store/types.d.ts.map +1 -0
- package/dist/store/types.js +3 -0
- package/dist/store/types.js.map +1 -0
- package/dist/ui/memoryStatusWidget.d.ts +20 -0
- package/dist/ui/memoryStatusWidget.d.ts.map +1 -0
- package/dist/ui/memoryStatusWidget.js +51 -0
- package/dist/ui/memoryStatusWidget.js.map +1 -0
- package/dist/utils/debugLog.d.ts +4 -0
- package/dist/utils/debugLog.d.ts.map +1 -0
- package/dist/utils/debugLog.js +14 -0
- package/dist/utils/debugLog.js.map +1 -0
- package/dist/utils/fs.d.ts +26 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/fs.js +101 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/index.d.ts +8 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +8 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/paths.d.ts +22 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +51 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/platform.d.ts +7 -0
- package/dist/utils/platform.d.ts.map +1 -0
- package/dist/utils/platform.js +18 -0
- package/dist/utils/platform.js.map +1 -0
- package/dist/utils/scheduler.d.ts +33 -0
- package/dist/utils/scheduler.d.ts.map +1 -0
- package/dist/utils/scheduler.js +63 -0
- package/dist/utils/scheduler.js.map +1 -0
- package/dist/utils/socket.d.ts +7 -0
- package/dist/utils/socket.d.ts.map +1 -0
- package/dist/utils/socket.js +35 -0
- package/dist/utils/socket.js.map +1 -0
- package/dist/utils/time.d.ts +22 -0
- package/dist/utils/time.d.ts.map +1 -0
- package/dist/utils/time.js +42 -0
- package/dist/utils/time.js.map +1 -0
- package/package.json +40 -12
- package/scripts/init-memory-workspace.mjs +62 -0
- package/scripts/path-utils.mjs +12 -0
- package/scripts/platform-fs.mjs +65 -0
- package/scripts/postinstall.mjs +17 -0
- package/src/adapters/embed/factory.ts +50 -0
- package/src/adapters/embed/hash.ts +29 -0
- package/src/adapters/embed/normalize.ts +13 -0
- package/src/adapters/embed/ollama.ts +49 -0
- package/src/adapters/embed/openai.ts +46 -0
- package/src/adapters/embed/types.ts +9 -0
- package/src/adapters/http.ts +42 -0
- package/src/adapters/index.ts +16 -0
- package/src/adapters/llm/extractText.ts +6 -0
- package/src/adapters/llm/factory.ts +60 -0
- package/src/adapters/llm/index.ts +7 -0
- package/src/adapters/llm/modelSpec.ts +39 -0
- package/src/adapters/llm/ollama.ts +42 -0
- package/src/adapters/llm/openai-compat.ts +46 -0
- package/src/adapters/llm/pi-ai.ts +75 -0
- package/src/adapters/llm/standalone.ts +60 -0
- package/src/adapters/llm/types.ts +16 -0
- package/src/cli/init.ts +18 -0
- package/src/cli/jobs.ts +144 -0
- package/src/cli/log.ts +46 -0
- package/src/cli/parseArgs.ts +175 -0
- package/src/cli/status.ts +323 -0
- package/src/cli/theme.ts +26 -0
- package/src/cli.ts +82 -232
- package/src/commands/index.ts +20 -0
- package/src/commands/parseMemoryStatusArgs.ts +11 -0
- package/src/commands/parseRememberArgs.ts +55 -0
- package/src/commands/remember.ts +43 -0
- package/src/commands/status.ts +112 -0
- package/src/commands/types.ts +12 -0
- package/src/compact/index.ts +4 -0
- package/src/compact/parseMemoryExport.ts +71 -0
- package/src/compact/register.ts +57 -0
- package/src/compact/runSummary.ts +42 -0
- package/src/compact/subagentDelta.ts +22 -0
- package/src/compact/summaryPrompt.ts +45 -0
- package/src/config/agentDir.ts +24 -0
- package/src/config/chunking.ts +36 -0
- package/src/config/env.ts +97 -0
- package/src/config/index.ts +6 -0
- package/src/config/loadEnv.ts +26 -0
- package/src/config/preflightBudget.ts +33 -0
- package/src/config/retrieval.ts +50 -0
- package/src/consolidate/entryKey.ts +4 -0
- package/src/consolidate/index.ts +4 -0
- package/src/consolidate/mergeEntries.ts +22 -0
- package/src/consolidate/mergePrompt.ts +46 -0
- package/src/consolidate/mergeWithLlm.ts +39 -0
- package/src/consolidate/runJob.ts +81 -0
- package/src/consolidate/scheduler.ts +54 -0
- package/src/constants/chunking.ts +8 -0
- package/src/constants/env.ts +56 -0
- package/src/constants/index.ts +7 -0
- package/src/constants/memory.ts +22 -0
- package/src/constants/paths.ts +26 -0
- package/src/constants/preflight.ts +13 -0
- package/src/constants/retrieval.ts +10 -0
- package/src/constants/security.ts +5 -0
- package/src/constants/timing.ts +46 -0
- package/src/index.ts +11 -241
- package/src/init/workspace.ts +44 -0
- package/src/ipc/jsonlFramer.ts +29 -0
- package/src/pi-extension.ts +186 -316
- package/src/preflight/episodic.ts +159 -0
- package/src/preflight/queryCache.ts +59 -0
- package/src/preflight/queryIntent.ts +92 -0
- package/src/preflight/render.ts +34 -173
- package/src/preflight/session.ts +7 -0
- package/src/preflight/strip.ts +4 -11
- package/src/shutdown/enqueue.ts +29 -0
- package/src/shutdown/extractPrompt.ts +27 -0
- package/src/shutdown/processed.ts +45 -0
- package/src/shutdown/readQueue.ts +26 -0
- package/src/shutdown/runDrainJob.ts +202 -0
- package/src/shutdown/sessionReader.ts +61 -0
- package/src/sidecar/client.ts +98 -150
- package/src/sidecar/paths.ts +31 -0
- package/src/sidecar/protocol.ts +38 -0
- package/src/sidecar/reindexBridge.ts +52 -0
- package/src/sidecar/server/process.ts +27 -0
- package/src/sidecar/server/query.ts +16 -0
- package/src/sidecar/server/reindex.ts +21 -0
- package/src/sidecar/server/server.ts +105 -0
- package/src/sidecar/server/stats.ts +23 -0
- package/src/sidecar/server/vec/embedder.ts +1 -0
- package/src/sidecar/server/vec/mmr.ts +55 -0
- package/src/sidecar/server/vec/store.ts +232 -0
- package/src/sidecar/sidecarManager.ts +134 -0
- package/src/sidecar/utils.ts +28 -0
- package/src/store/backend.ts +66 -0
- package/src/store/index.ts +5 -0
- package/src/store/indexChunks.ts +89 -0
- package/src/store/markdown/format.ts +16 -0
- package/src/store/markdown/parse.ts +63 -0
- package/src/store/markdown/template.ts +24 -0
- package/src/store/memoryStore.ts +518 -0
- package/src/store/paths.ts +33 -0
- package/src/store/proper-lockfile.d.ts +3 -0
- package/src/store/types.ts +46 -0
- package/src/ui/memoryStatusWidget.ts +80 -0
- package/src/utils/debugLog.ts +22 -0
- package/src/utils/fs.ts +115 -0
- package/src/utils/index.ts +68 -0
- package/src/utils/paths.ts +67 -0
- package/src/utils/platform.ts +20 -0
- package/src/utils/scheduler.ts +98 -0
- package/src/utils/socket.ts +33 -0
- package/src/utils/time.ts +51 -0
- package/templates/MEMORY.md.example +22 -0
- package/dist/adapters/ollamaClient.d.ts +0 -11
- package/dist/adapters/ollamaClient.d.ts.map +0 -1
- package/dist/adapters/ollamaClient.js +0 -122
- package/dist/adapters/ollamaClient.js.map +0 -1
- package/dist/adapters/openaiCompatClient.d.ts +0 -11
- package/dist/adapters/openaiCompatClient.d.ts.map +0 -1
- package/dist/adapters/openaiCompatClient.js +0 -118
- package/dist/adapters/openaiCompatClient.js.map +0 -1
- package/dist/adapters/piComplete.d.ts +0 -17
- package/dist/adapters/piComplete.d.ts.map +0 -1
- package/dist/adapters/piComplete.js +0 -169
- package/dist/adapters/piComplete.js.map +0 -1
- package/dist/bundle/install.d.ts +0 -34
- package/dist/bundle/install.d.ts.map +0 -1
- package/dist/bundle/install.js +0 -183
- package/dist/bundle/install.js.map +0 -1
- package/dist/config.d.ts +0 -27
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -49
- package/dist/config.js.map +0 -1
- package/dist/errclass.d.ts +0 -7
- package/dist/errclass.d.ts.map +0 -1
- package/dist/errclass.js +0 -32
- package/dist/errclass.js.map +0 -1
- package/dist/extension.d.ts +0 -24
- package/dist/extension.d.ts.map +0 -1
- package/dist/extension.js +0 -7
- package/dist/extension.js.map +0 -1
- package/dist/fallback/index.d.ts +0 -11
- package/dist/fallback/index.d.ts.map +0 -1
- package/dist/fallback/index.js +0 -16
- package/dist/fallback/index.js.map +0 -1
- package/dist/fallback/llmRerank.d.ts +0 -19
- package/dist/fallback/llmRerank.d.ts.map +0 -1
- package/dist/fallback/llmRerank.js +0 -60
- package/dist/fallback/llmRerank.js.map +0 -1
- package/dist/fallback/memoryMd.d.ts +0 -6
- package/dist/fallback/memoryMd.d.ts.map +0 -1
- package/dist/fallback/memoryMd.js +0 -35
- package/dist/fallback/memoryMd.js.map +0 -1
- package/dist/fallback/sessionIndex.d.ts +0 -35
- package/dist/fallback/sessionIndex.d.ts.map +0 -1
- package/dist/fallback/sessionIndex.js +0 -287
- package/dist/fallback/sessionIndex.js.map +0 -1
- package/dist/fallback/sessionSearch.d.ts +0 -18
- package/dist/fallback/sessionSearch.d.ts.map +0 -1
- package/dist/fallback/sessionSearch.js +0 -234
- package/dist/fallback/sessionSearch.js.map +0 -1
- package/dist/local/graphQuery.d.ts +0 -21
- package/dist/local/graphQuery.d.ts.map +0 -1
- package/dist/local/graphQuery.js +0 -170
- package/dist/local/graphQuery.js.map +0 -1
- package/dist/paths.d.ts +0 -7
- package/dist/paths.d.ts.map +0 -1
- package/dist/paths.js +0 -26
- package/dist/paths.js.map +0 -1
- package/dist/preflight/detectIntents.d.ts +0 -102
- package/dist/preflight/detectIntents.d.ts.map +0 -1
- package/dist/preflight/detectIntents.js +0 -624
- package/dist/preflight/detectIntents.js.map +0 -1
- package/dist/preflight/hook.d.ts +0 -58
- package/dist/preflight/hook.d.ts.map +0 -1
- package/dist/preflight/hook.js +0 -77
- package/dist/preflight/hook.js.map +0 -1
- package/dist/service.d.ts +0 -56
- package/dist/service.d.ts.map +0 -1
- package/dist/service.js +0 -200
- package/dist/service.js.map +0 -1
- package/dist/settings.d.ts +0 -38
- package/dist/settings.d.ts.map +0 -1
- package/dist/settings.js +0 -68
- package/dist/settings.js.map +0 -1
- package/dist/sidecar/bundle.d.ts +0 -19
- package/dist/sidecar/bundle.d.ts.map +0 -1
- package/dist/sidecar/bundle.js +0 -39
- package/dist/sidecar/bundle.js.map +0 -1
- package/dist/sidecar/process.d.ts +0 -14
- package/dist/sidecar/process.d.ts.map +0 -1
- package/dist/sidecar/process.js +0 -138
- package/dist/sidecar/process.js.map +0 -1
- package/dist/tools/memoryAppend.d.ts +0 -37
- package/dist/tools/memoryAppend.d.ts.map +0 -1
- package/dist/tools/memoryAppend.js +0 -99
- package/dist/tools/memoryAppend.js.map +0 -1
- package/dist/tools/memoryRecall.d.ts +0 -113
- package/dist/tools/memoryRecall.d.ts.map +0 -1
- package/dist/tools/memoryRecall.js +0 -325
- package/dist/tools/memoryRecall.js.map +0 -1
- package/dist/trainer/bundleBuilder.d.ts +0 -30
- package/dist/trainer/bundleBuilder.d.ts.map +0 -1
- package/dist/trainer/bundleBuilder.js +0 -106
- package/dist/trainer/bundleBuilder.js.map +0 -1
- package/dist/trainer/bundleLoader.d.ts +0 -12
- package/dist/trainer/bundleLoader.d.ts.map +0 -1
- package/dist/trainer/bundleLoader.js +0 -59
- package/dist/trainer/bundleLoader.js.map +0 -1
- package/dist/trainer/deltaMerge.d.ts +0 -38
- package/dist/trainer/deltaMerge.d.ts.map +0 -1
- package/dist/trainer/deltaMerge.js +0 -183
- package/dist/trainer/deltaMerge.js.map +0 -1
- package/dist/trainer/entityResolver.d.ts +0 -27
- package/dist/trainer/entityResolver.d.ts.map +0 -1
- package/dist/trainer/entityResolver.js +0 -92
- package/dist/trainer/entityResolver.js.map +0 -1
- package/dist/trainer/extractFacts.d.ts +0 -67
- package/dist/trainer/extractFacts.d.ts.map +0 -1
- package/dist/trainer/extractFacts.js +0 -213
- package/dist/trainer/extractFacts.js.map +0 -1
- package/dist/trainer/index.d.ts +0 -54
- package/dist/trainer/index.d.ts.map +0 -1
- package/dist/trainer/index.js +0 -82
- package/dist/trainer/index.js.map +0 -1
- package/dist/trainer/llmExtractor.d.ts +0 -16
- package/dist/trainer/llmExtractor.d.ts.map +0 -1
- package/dist/trainer/llmExtractor.js +0 -146
- package/dist/trainer/llmExtractor.js.map +0 -1
- package/dist/trainer/marker.d.ts +0 -10
- package/dist/trainer/marker.d.ts.map +0 -1
- package/dist/trainer/marker.js +0 -28
- package/dist/trainer/marker.js.map +0 -1
- package/dist/trainer/scheduler.d.ts +0 -31
- package/dist/trainer/scheduler.d.ts.map +0 -1
- package/dist/trainer/scheduler.js +0 -72
- package/dist/trainer/scheduler.js.map +0 -1
- package/dist/trainer/sessionLoader.d.ts +0 -23
- package/dist/trainer/sessionLoader.d.ts.map +0 -1
- package/dist/trainer/sessionLoader.js +0 -182
- package/dist/trainer/sessionLoader.js.map +0 -1
- package/dist/types.d.ts +0 -135
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -8
- package/dist/types.js.map +0 -1
- package/src/adapters/ollamaClient.ts +0 -179
- package/src/adapters/openaiCompatClient.ts +0 -155
- package/src/adapters/piComplete.ts +0 -233
- package/src/bundle/install.ts +0 -206
- package/src/cache/memoryCaches.ts +0 -72
- package/src/config.ts +0 -92
- package/src/errclass.ts +0 -37
- package/src/extension.ts +0 -23
- package/src/fallback/index.ts +0 -24
- package/src/fallback/llmRerank.ts +0 -97
- package/src/fallback/memoryMd.ts +0 -36
- package/src/fallback/sessionIndex.ts +0 -327
- package/src/fallback/sessionSearch.ts +0 -261
- package/src/local/graphQuery.ts +0 -252
- package/src/paths.ts +0 -28
- package/src/preflight/detectIntents.ts +0 -660
- package/src/preflight/hook.ts +0 -199
- package/src/service.ts +0 -306
- package/src/settings.ts +0 -126
- package/src/sidecar/bundle.ts +0 -52
- package/src/sidecar/process.ts +0 -160
- package/src/tools/memoryAppend.ts +0 -113
- package/src/tools/memoryRecall.ts +0 -388
- package/src/trainer/bundleBuilder.ts +0 -192
- package/src/trainer/bundleLoader.ts +0 -105
- package/src/trainer/deltaMerge.ts +0 -221
- package/src/trainer/entityResolver.ts +0 -140
- package/src/trainer/extractFacts.ts +0 -312
- package/src/trainer/index.ts +0 -147
- package/src/trainer/llmExtractor.ts +0 -206
- package/src/trainer/marker.ts +0 -30
- package/src/trainer/scheduler.ts +0 -107
- package/src/trainer/sessionLoader.ts +0 -225
- package/src/types.ts +0 -168
package/README.md
CHANGED
|
@@ -1,224 +1,104 @@
|
|
|
1
|
-
#
|
|
1
|
+
# pi-memory
|
|
2
2
|
|
|
3
|
-
[
|
|
3
|
+
Cross-session episodic memory for the [Pi coding agent](https://pi.dev): **MEMORY.md** as ground truth, a JSONL Sidecar for vector retrieval, and Preflight injection before each user turn.
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
**No external binaries required** --- pure TypeScript, runs entirely inside Pi.
|
|
8
|
-
|
|
9
|
-
## Features
|
|
10
|
-
|
|
11
|
-
- **Implicit memory preflight** --- automatically detects memory-relevant questions (Chinese/English/Japanese) and injects `<private_memory>` context before each LLM call
|
|
12
|
-
- **`memory_recall` tool** --- LLM can explicitly query the knowledge graph by entity/relationship
|
|
13
|
-
- **`memory_append` tool** --- persist user preferences and facts to `MEMORY.md`
|
|
14
|
-
- **Local trainer** --- extracts entities, relations, and events from Pi session history (regex or LLM-powered)
|
|
15
|
-
- **FTS5 search** --- SQLite full-text index for keyword fallback
|
|
16
|
-
- **LLM rerank** --- reranks keyword search results using `deepseek-v4-flash` for relevance scoring
|
|
17
|
-
- **Session dedup** --- content-hash deduplication in both trainer and indexer
|
|
18
|
-
- **Zero config** --- works out of the box with `pi install`
|
|
19
|
-
|
|
20
|
-
## Install
|
|
21
|
-
|
|
22
|
-
```bash
|
|
23
|
-
pi install npm:@chendpoc/pi-memory
|
|
24
|
-
```
|
|
5
|
+
## Architecture
|
|
25
6
|
|
|
26
|
-
|
|
7
|
+
| Layer | Role |
|
|
8
|
+
|-------|------|
|
|
9
|
+
| **Ground Truth** | `MEMORY.md` + `auto-*.md` overflow files |
|
|
10
|
+
| **Vector Index** | `memory.vec.sqlite` (derived; cosine scan + MMR; default top-3, min relevance 0.4) |
|
|
11
|
+
| **Sidecar** | Separate Node process over UDS JSONL (`query`, `reindex`, `ping`) |
|
|
12
|
+
| **Preflight** | QueryIntent → Sidecar → Fallback to MEMORY.md → silent empty inject |
|
|
27
13
|
|
|
28
|
-
|
|
29
|
-
{
|
|
30
|
-
"packages": ["./extensions/pi-memory"]
|
|
31
|
-
}
|
|
32
|
-
```
|
|
14
|
+
### Write paths
|
|
33
15
|
|
|
34
|
-
|
|
16
|
+
1. **`/remember`** — sync user-authored append
|
|
17
|
+
2. **Compaction** — dual-purpose summary → `appendFromCompaction` (Compact Delta for subagents)
|
|
18
|
+
3. **Consolidate** — OR trigger (overflow ≥12 / 7 days / daily 03:00 cron)
|
|
35
19
|
|
|
36
|
-
|
|
20
|
+
**Diagnostics:** **`/memory-status`** in session, or **`pi-memory status`** on the CLI.
|
|
37
21
|
|
|
38
|
-
|
|
39
|
-
# 1. Install the package
|
|
40
|
-
pi install npm:@chendpoc/pi-memory
|
|
22
|
+
**Shutdown Queue** — `session_shutdown` appends metadata to `.memory_shutdown_queue.jsonl`; **`pi-memory maintenance`** (or `drain-shutdown-queue`) ingests missed facts offline.
|
|
41
23
|
|
|
42
|
-
|
|
43
|
-
npx pi-memory train --full
|
|
24
|
+
### Data directory
|
|
44
25
|
|
|
45
|
-
|
|
46
|
-
# Try asking: "What projects have I worked on?"
|
|
47
|
-
```
|
|
26
|
+
All memory artifacts share one root directory (the **memory agent dir**):
|
|
48
27
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
28
|
+
| File | Purpose |
|
|
29
|
+
|------|---------|
|
|
30
|
+
| `MEMORY.md` | Ground truth |
|
|
31
|
+
| `auto-*.md` | Overflow entries |
|
|
32
|
+
| `memory.vec.sqlite` | Vector index (derived) |
|
|
33
|
+
| `memory.sock` | Sidecar UDS |
|
|
53
34
|
|
|
54
|
-
|
|
35
|
+
Resolution order (extension and CLI):
|
|
55
36
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
|
59
|
-
v
|
|
60
|
-
Trainer (regex or LLM extraction)
|
|
61
|
-
|
|
|
62
|
-
v
|
|
63
|
-
graph.json bundle (entities + relations + events)
|
|
64
|
-
|
|
|
65
|
-
v
|
|
66
|
-
LocalGraphQuerier (in-memory graph query)
|
|
67
|
-
|
|
|
68
|
-
v
|
|
69
|
-
memory_recall tool / implicit preflight injection
|
|
70
|
-
```
|
|
37
|
+
1. `--agent-dir` / `PI_MEMORY_AGENT_DIR` — explicit override
|
|
38
|
+
2. Default — `~/.pi/pi-memory-data` (no env required)
|
|
71
39
|
|
|
72
|
-
###
|
|
40
|
+
### MEMORY.md format
|
|
73
41
|
|
|
74
|
-
|
|
42
|
+
Canonical scaffold (`templates/MEMORY.md.example`):
|
|
75
43
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
44
|
+
- Title `# Memory` + HTML comment describing entry format
|
|
45
|
+
- Four sections: **Preferences**, **Conventions**, **Findings**, **Todos**
|
|
46
|
+
- Entries: `- [user] note <!-- id:... user ts:... -->` (via `/remember`) or `- note <!-- id:... ts:... -->`
|
|
47
|
+
- 150-line cap; overflow spills to `auto-*.md`
|
|
80
48
|
|
|
81
|
-
|
|
49
|
+
**Initialization** (never overwrites a non-empty file):
|
|
82
50
|
|
|
83
|
-
|
|
51
|
+
1. `pnpm install` → `postinstall` seeds `MEMORY.md` in the memory agent dir
|
|
52
|
+
2. First Pi session → `MemoryStore.ensureInitialized()` on `session_start`
|
|
53
|
+
3. Manual: `pi-memory init`
|
|
84
54
|
|
|
85
|
-
|
|
86
|
-
|---------|-------------|
|
|
87
|
-
| `/memory` | Show service status, query mode, and bundle info |
|
|
55
|
+
## Setup
|
|
88
56
|
|
|
89
|
-
|
|
57
|
+
1. Install dependencies and build:
|
|
90
58
|
|
|
91
59
|
```bash
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
npx pi-memory train --extractor llm # use LLM for deeper extraction
|
|
96
|
-
npx pi-memory train --extractor llm --model deepseek/deepseek-v4-flash
|
|
97
|
-
|
|
98
|
-
# Query the knowledge graph
|
|
99
|
-
npx pi-memory query '{"mode":"direct_relation","anchor_mentions":["Alice"]}'
|
|
60
|
+
pnpm install
|
|
61
|
+
pnpm build
|
|
62
|
+
```
|
|
100
63
|
|
|
101
|
-
|
|
102
|
-
npx pi-memory health
|
|
103
|
-
npx pi-memory status
|
|
64
|
+
2. Enable as a Pi extension (see `package.json` → `pi.extensions`).
|
|
104
65
|
|
|
105
|
-
|
|
106
|
-
npx pi-memory install-bundle ./path/to/bundle
|
|
66
|
+
3. Optional: copy [`.env.example`](./.env.example) to `~/.pi/agent/pi-memory.env` and configure embedder / helper LLM.
|
|
107
67
|
|
|
108
|
-
|
|
109
|
-
npx pi-memory index
|
|
68
|
+
## Environment
|
|
110
69
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
70
|
+
| Variable | Purpose |
|
|
71
|
+
|----------|---------|
|
|
72
|
+
| `PI_MEMORY_AGENT_DIR` | Memory data root (see [Data directory](#data-directory)) |
|
|
73
|
+
| `PI_MEMORY_EMBEDDER` | `hash` (default, offline) \| `ollama` \| `openai` |
|
|
74
|
+
| `PI_MEMORY_HELPER_MODEL` | Helper LLM for QueryIntent + consolidate |
|
|
75
|
+
| `PI_MEMORY_PREFLIGHT_BUDGET_MS` | Preflight shared budget (default 800ms: ~240 intent + ~560 sidecar) |
|
|
76
|
+
| `PI_MEMORY_REINDEX_DEBOUNCE_MS` | Debounced reindex after writes |
|
|
77
|
+
| `PI_MEMORY_DEBUG` | `1` enables debug stderr logs (preflight timings) |
|
|
114
78
|
|
|
115
|
-
|
|
79
|
+
See [`.env.example`](./.env.example) for full list.
|
|
116
80
|
|
|
117
|
-
|
|
118
|
-
|------|-------------|---------|
|
|
119
|
-
| `--memory-helper-model` | LLM model for intent detection and rerank | `deepseek/deepseek-v4-flash` |
|
|
81
|
+
## CLI
|
|
120
82
|
|
|
121
83
|
```bash
|
|
122
|
-
pi
|
|
84
|
+
pi-memory init
|
|
85
|
+
pi-memory status
|
|
86
|
+
pi-memory maintenance --cron --verbose
|
|
87
|
+
pi-memory consolidate --force --verbose
|
|
88
|
+
pi-memory drain-shutdown-queue --verbose
|
|
123
89
|
```
|
|
124
90
|
|
|
125
|
-
|
|
91
|
+
`maintenance` runs **consolidate → drain-shutdown-queue** in one cron window (recommended for OS schedulers).
|
|
92
|
+
`status` prints MEMORY.md, sidecar, and vector index diagnostics (colored on TTY stderr).
|
|
93
|
+
Set `PI_MEMORY_DEBUG=1` for preflight timing logs during agent sessions.
|
|
126
94
|
|
|
127
|
-
|
|
128
|
-
~/.pi/
|
|
129
|
-
├── memory/
|
|
130
|
-
│ ├── current/ # active bundle (symlink)
|
|
131
|
-
│ │ ├── manifest.json
|
|
132
|
-
│ │ └── graph.json # entities, edges, events
|
|
133
|
-
│ ├── bundles/ # historical bundles
|
|
134
|
-
│ ├── sessions.db # FTS5 search index
|
|
135
|
-
│ └── .train_marker # incremental training timestamp
|
|
136
|
-
├── agent/sessions/ # Pi session files (.jsonl)
|
|
137
|
-
└── MEMORY.md # persistent notes (memory_append target)
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
## Programmatic API
|
|
141
|
-
|
|
142
|
-
```typescript
|
|
143
|
-
import {
|
|
144
|
-
MemoryService,
|
|
145
|
-
defaultMemoryConfig,
|
|
146
|
-
trainBundle,
|
|
147
|
-
LocalGraphQuerier,
|
|
148
|
-
createLLMFactExtractor,
|
|
149
|
-
createStandaloneLLMClient,
|
|
150
|
-
rerankWithLLM,
|
|
151
|
-
} from "@chendpoc/pi-memory";
|
|
152
|
-
|
|
153
|
-
// --- Query the graph directly ---
|
|
154
|
-
const querier = new LocalGraphQuerier("/Users/you/.pi/memory");
|
|
155
|
-
querier.load();
|
|
156
|
-
const result = querier.query({
|
|
157
|
-
mode: "direct_relation",
|
|
158
|
-
anchor_mentions: ["Alice"],
|
|
159
|
-
});
|
|
160
|
-
|
|
161
|
-
// --- Train a bundle ---
|
|
162
|
-
const result = await trainBundle({
|
|
163
|
-
sessionsDir: "~/.pi/agent/sessions",
|
|
164
|
-
bundleRoot: "~/.pi/memory",
|
|
165
|
-
full: true,
|
|
166
|
-
});
|
|
167
|
-
|
|
168
|
-
// --- Train with LLM extraction ---
|
|
169
|
-
const client = createStandaloneLLMClient("deepseek/deepseek-v4-flash");
|
|
170
|
-
const extractor = createLLMFactExtractor({ client, batchSize: 10 });
|
|
171
|
-
await trainBundle({ extractOpts: { llmExtractor: extractor } });
|
|
172
|
-
|
|
173
|
-
// --- Use as Pi extension ---
|
|
174
|
-
import piMemory from "@chendpoc/pi-memory/extension";
|
|
175
|
-
export default piMemory;
|
|
176
|
-
```
|
|
177
|
-
|
|
178
|
-
## Architecture
|
|
179
|
-
|
|
180
|
-
| Module | Purpose |
|
|
181
|
-
|--------|---------|
|
|
182
|
-
| `src/pi-extension.ts` | Pi ExtensionAPI entry point |
|
|
183
|
-
| `src/local/graphQuery.ts` | In-process graph query engine |
|
|
184
|
-
| `src/adapters/piComplete.ts` | LLM adapter via `@earendil-works/pi-ai/compat` |
|
|
185
|
-
| `src/service.ts` | Service lifecycle and query routing |
|
|
186
|
-
| `src/trainer/` | Session loader, fact extraction, entity resolution, bundle builder |
|
|
187
|
-
| `src/fallback/` | FTS5 index, keyword search, LLM rerank |
|
|
188
|
-
| `src/preflight/` | Intent detection, private memory render/inject/strip |
|
|
189
|
-
| `src/tools/` | `memory_recall` and `memory_append` tool definitions |
|
|
190
|
-
|
|
191
|
-
## Implicit Preflight
|
|
192
|
-
|
|
193
|
-
On every LLM call, the `context` event:
|
|
95
|
+
Templates: [`templates/`](./templates/) (launchd, crontab, schtasks).
|
|
194
96
|
|
|
195
|
-
|
|
196
|
-
2. Optionally calls a helper LLM (`compile_memory_intents` forced tool_use)
|
|
197
|
-
3. Queries the graph for matching entities/relations
|
|
198
|
-
4. Injects a `<private_memory>` block into the user message (deep copy, not persisted to session)
|
|
199
|
-
5. Results are cached per agent loop to avoid redundant queries during multi-tool turns
|
|
97
|
+
## Docs
|
|
200
98
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
- `@earendil-works/pi-agent-core`
|
|
206
|
-
- `@earendil-works/pi-ai`
|
|
207
|
-
- `@earendil-works/pi-coding-agent`
|
|
208
|
-
- `typebox`
|
|
209
|
-
|
|
210
|
-
## Optional Dependencies
|
|
211
|
-
|
|
212
|
-
- `better-sqlite3` --- enables FTS5 session search index (graceful degradation if absent)
|
|
213
|
-
|
|
214
|
-
## Development
|
|
215
|
-
|
|
216
|
-
```bash
|
|
217
|
-
npm install
|
|
218
|
-
npm run build
|
|
219
|
-
npm test # 129 tests
|
|
220
|
-
npm run typecheck
|
|
221
|
-
```
|
|
99
|
+
- [sidecar-local-memory-design.md](./sidecar-local-memory-design.md) — full design
|
|
100
|
+
- [kocoro-memory-pi-agent-guide.md](./kocoro-memory-pi-agent-guide.md) — Kocoro → Pi translation
|
|
101
|
+
- [UBIQUITOUS_LANGUAGE.md](./UBIQUITOUS_LANGUAGE.md) — domain glossary
|
|
222
102
|
|
|
223
103
|
## License
|
|
224
104
|
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# Ubiquitous Language
|
|
2
|
+
|
|
3
|
+
> pi-memory 扩展的领域术语表。实现与文档以本表 canonical 名称为准。
|
|
4
|
+
|
|
5
|
+
## Storage
|
|
6
|
+
|
|
7
|
+
| Term | Definition | Aliases to avoid |
|
|
8
|
+
| ---- | ---------- | ---------------- |
|
|
9
|
+
| **Ground Truth** | The durable cross-session fact store: `MEMORY.md` plus overflow `auto-*.md` files. | memory.db, chat backup |
|
|
10
|
+
| **Vector Index** | A derived SQLite file (`memory.vec.sqlite`) holding embeddings for episodic retrieval. | memory.db, sqlite-vec ANN |
|
|
11
|
+
| **Memory Entry** | One bullet fact in Ground Truth under Preferences, Conventions, Findings, or Todos. | note, fact, bullet |
|
|
12
|
+
| **Overflow File** | An `auto-*.md` spill file created when `MEMORY.md` exceeds the line cap. | auto file, spill |
|
|
13
|
+
|
|
14
|
+
## Read path
|
|
15
|
+
|
|
16
|
+
| Term | Definition | Aliases to avoid |
|
|
17
|
+
| ---- | ---------- | ---------------- |
|
|
18
|
+
| **Preflight** | Best-effort retrieval and injection before the main model sees each user message. | memory recall, pre-fetch |
|
|
19
|
+
| **QueryIntent** | Structured retrieval hints (what/who/where or raw_query) extracted by a helper LLM. | search intent |
|
|
20
|
+
| **Memory Cap** | Session-scoped static summary of Ground Truth injected without episodic query. | turnMemoryIndex, static cap |
|
|
21
|
+
| **Episodic Preflight** | QueryIntent → Sidecar query → optional Fallback for query-dependent recall. | full preflight |
|
|
22
|
+
| **Fallback** | Silent read of Ground Truth when Sidecar returns nothing or errors. | md fallback |
|
|
23
|
+
| **Private Memory** | The `<private_memory>` block prefixed to in-flight user messages only. | injected context |
|
|
24
|
+
|
|
25
|
+
## Write path
|
|
26
|
+
|
|
27
|
+
| Term | Definition | Aliases to avoid |
|
|
28
|
+
| ---- | ---------- | ---------------- |
|
|
29
|
+
| **Memory Export** | The cross-session facts section inside a dual-purpose compact summary. | memoryQueue, export block |
|
|
30
|
+
| **Compact Delta** | New Memory Export facts filtered against existing Ground Truth before append (subagent). | Stage1, shutdown extract |
|
|
31
|
+
| **Dual-Purpose Summary** | One LLM compact output with Session Context and Memory Export sections. | compact summary |
|
|
32
|
+
| **Consolidate** | Periodic LLM merge/dedupe of Ground Truth; not a source of new facts. | GC, merge |
|
|
33
|
+
| **Shutdown Queue** | Append-only JSONL file (`.memory_shutdown_queue.jsonl`) of session metadata on shutdown; drained by `pi-memory maintenance`. | session enqueue pipeline |
|
|
34
|
+
|
|
35
|
+
## Infrastructure
|
|
36
|
+
|
|
37
|
+
| Term | Definition | Aliases to avoid |
|
|
38
|
+
| ---- | ---------- | ---------------- |
|
|
39
|
+
| **Sidecar** | Separate Node process for embed, vector scan, MMR, and reindex over UDS. | tlm, daemon |
|
|
40
|
+
| **JSONL Framing** | One JSON object per line over UDS IPC. | NDJSON, ndjson |
|
|
41
|
+
| **Index Generation** | Monotonic counter bumped on reindex; invalidates query cache. | indexGeneration |
|
|
42
|
+
| **onSyncToSidecar** | Callback fired after Ground Truth writes to schedule debounced reindex. | onDirty |
|
|
43
|
+
| **onConsolidateCheck** | Callback fired after writes to schedule debounced consolidate evaluation. | onDirty |
|
|
44
|
+
|
|
45
|
+
## Session types
|
|
46
|
+
|
|
47
|
+
| Term | Definition | Aliases to avoid |
|
|
48
|
+
| ---- | ---------- | ---------------- |
|
|
49
|
+
| **Root Session** | A top-level Pi agent session without a parent session header. | main session |
|
|
50
|
+
| **Subagent Session** | A forked session whose header includes `parentSession` or `parent_session`. | child session, fork |
|
|
51
|
+
|
|
52
|
+
## Relationships
|
|
53
|
+
|
|
54
|
+
- **Ground Truth** is the source; the **Vector Index** is derived and may lag.
|
|
55
|
+
- **Preflight** reads **Ground Truth** via **Sidecar** first, then **Fallback**.
|
|
56
|
+
- **Root Session** runs **Episodic Preflight** plus **Memory Cap** each turn; **Subagent Session** runs **Memory Cap** only.
|
|
57
|
+
- **Memory Export** from compaction flows through **Compact Delta** for **Subagent Session**, then **appendIfAbsent**.
|
|
58
|
+
- **Shutdown Queue** records metadata only; it does not write **Ground Truth**.
|
|
59
|
+
- **Consolidate** rewrites **Ground Truth** and triggers **onSyncToSidecar**.
|
|
60
|
+
|
|
61
|
+
## Example dialogue
|
|
62
|
+
|
|
63
|
+
> **Dev:** "When a **Subagent Session** compacts, do we run **Episodic Preflight** on its turns?"
|
|
64
|
+
>
|
|
65
|
+
> **Domain expert:** "No. Subagents get **Memory Cap** at **session_start** and skip **Episodic Preflight**. New durable facts still arrive via **Memory Export**, but **Compact Delta** filters out anything already in parent **Ground Truth**."
|
|
66
|
+
>
|
|
67
|
+
> **Dev:** "What happens on **session_shutdown**?"
|
|
68
|
+
>
|
|
69
|
+
> **Domain expert:** "We append one line to the **Shutdown Queue**—session file, parent path, reason. No LLM on shutdown. **`pi-memory maintenance`** drains the queue offline (after consolidate), reusing **Compact Delta** rules for subagents."
|
|
70
|
+
>
|
|
71
|
+
> **Dev:** "If **Sidecar** is down, does **Preflight** fail?"
|
|
72
|
+
>
|
|
73
|
+
> **Domain expert:** "It **Fallback**s to **Ground Truth** or **Private Memory** stays empty. The user never sees an error."
|
|
74
|
+
|
|
75
|
+
## Flagged ambiguities
|
|
76
|
+
|
|
77
|
+
- **memory.db** was used for the vector file — canonical name is **Vector Index** file `memory.vec.sqlite`.
|
|
78
|
+
- **sqlite-vec** implied ANN search — MVP uses **better-sqlite3 + full-table cosine scan**; ANN is future work.
|
|
79
|
+
- **NDJSON / ndjson** — canonical term is **JSONL Framing** (one JSON object per line).
|
|
80
|
+
- **memoryQueue / onDirty / Stage1** — replaced by **appendFromCompaction**, **onSyncToSidecar**, and **Compact Delta**.
|
|
81
|
+
- **MVP chunking**:**1 Memory Entry = 1+ vector chunks**;超过 `PI_MEMORY_CHUNK_MAX_CHARS`(默认 512)按段落/句界拆分,`chunk_id = entry.id` 或 `entry.id#N`;embed 文本带 `[Section]` 前缀。Ground Truth 仍为 1 bullet = 1 entry。
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Embedder } from "./types.js";
|
|
2
|
+
export declare function createEmbedder(env?: import("../../config/env.js").PiMemoryEnv): Embedder;
|
|
3
|
+
export declare function getEmbedder(): Embedder;
|
|
4
|
+
/** @internal test hook */
|
|
5
|
+
export declare function resetEmbedderForTests(): void;
|
|
6
|
+
export type { Embedder } from "./types.js";
|
|
7
|
+
//# sourceMappingURL=factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/adapters/embed/factory.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAI3C,wBAAgB,cAAc,CAAC,GAAG,4CAAoB,GAAG,QAAQ,CA4BhE;AAED,wBAAgB,WAAW,IAAI,QAAQ,CAGtC;AAED,0BAA0B;AAC1B,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAED,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { DEFAULT_HASH_EMBED_DIM } from "../../constants/env.js";
|
|
2
|
+
import { readPiMemoryEnv, resolveEmbedDim } from "../../config/env.js";
|
|
3
|
+
import { createHashEmbedder } from "./hash.js";
|
|
4
|
+
import { createOllamaEmbedder } from "./ollama.js";
|
|
5
|
+
import { createOpenAiEmbedder } from "./openai.js";
|
|
6
|
+
let cachedEmbedder;
|
|
7
|
+
export function createEmbedder(env = readPiMemoryEnv()) {
|
|
8
|
+
switch (env.embedder) {
|
|
9
|
+
case "openai": {
|
|
10
|
+
if (!env.openaiApiKey) {
|
|
11
|
+
throw new Error("PI_MEMORY_EMBEDDER=openai requires PI_MEMORY_OPENAI_API_KEY or OPENAI_API_KEY");
|
|
12
|
+
}
|
|
13
|
+
const dim = resolveEmbedDim(env.openaiEmbedModel, env.embedDimOverride);
|
|
14
|
+
return createOpenAiEmbedder({
|
|
15
|
+
apiKey: env.openaiApiKey,
|
|
16
|
+
model: env.openaiEmbedModel,
|
|
17
|
+
dim,
|
|
18
|
+
timeoutMs: env.httpTimeoutMs,
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
case "ollama": {
|
|
22
|
+
const dim = resolveEmbedDim(env.ollamaEmbedModel, env.embedDimOverride);
|
|
23
|
+
return createOllamaEmbedder({
|
|
24
|
+
baseUrl: env.ollamaBaseUrl,
|
|
25
|
+
model: env.ollamaEmbedModel,
|
|
26
|
+
dim,
|
|
27
|
+
timeoutMs: env.httpTimeoutMs,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
default: {
|
|
31
|
+
const dim = env.embedDimOverride ?? DEFAULT_HASH_EMBED_DIM;
|
|
32
|
+
return createHashEmbedder(dim);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export function getEmbedder() {
|
|
37
|
+
cachedEmbedder ??= createEmbedder();
|
|
38
|
+
return cachedEmbedder;
|
|
39
|
+
}
|
|
40
|
+
/** @internal test hook */
|
|
41
|
+
export function resetEmbedderForTests() {
|
|
42
|
+
cachedEmbedder = undefined;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../src/adapters/embed/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAGnD,IAAI,cAAoC,CAAC;AAEzC,MAAM,UAAU,cAAc,CAAC,GAAG,GAAG,eAAe,EAAE;IACpD,QAAQ,GAAG,CAAC,QAAQ,EAAE,CAAC;QACrB,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CAAC,+EAA+E,CAAC,CAAC;YACnG,CAAC;YACD,MAAM,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,gBAAgB,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;YACxE,OAAO,oBAAoB,CAAC;gBAC1B,MAAM,EAAE,GAAG,CAAC,YAAY;gBACxB,KAAK,EAAE,GAAG,CAAC,gBAAgB;gBAC3B,GAAG;gBACH,SAAS,EAAE,GAAG,CAAC,aAAa;aAC7B,CAAC,CAAC;QACL,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,gBAAgB,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;YACxE,OAAO,oBAAoB,CAAC;gBAC1B,OAAO,EAAE,GAAG,CAAC,aAAa;gBAC1B,KAAK,EAAE,GAAG,CAAC,gBAAgB;gBAC3B,GAAG;gBACH,SAAS,EAAE,GAAG,CAAC,aAAa;aAC7B,CAAC,CAAC;QACL,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,GAAG,GAAG,GAAG,CAAC,gBAAgB,IAAI,sBAAsB,CAAC;YAC3D,OAAO,kBAAkB,CAAC,GAAG,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,cAAc,KAAK,cAAc,EAAE,CAAC;IACpC,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,0BAA0B;AAC1B,MAAM,UAAU,qBAAqB;IACnC,cAAc,GAAG,SAAS,CAAC;AAC7B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../../src/adapters/embed/hash.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG3C,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAuBxD"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { normalizeEmbedding } from "./normalize.js";
|
|
3
|
+
export function createHashEmbedder(dim) {
|
|
4
|
+
const embedSync = (text) => {
|
|
5
|
+
const vec = new Float32Array(dim);
|
|
6
|
+
const digest = createHash("sha256").update(text).digest();
|
|
7
|
+
for (let i = 0; i < dim; i++) {
|
|
8
|
+
const byte = digest[i % digest.length];
|
|
9
|
+
const sign = digest[(i + 7) % digest.length] & 1 ? 1 : -1;
|
|
10
|
+
vec[i] = sign * (byte / 255);
|
|
11
|
+
}
|
|
12
|
+
return normalizeEmbedding(vec);
|
|
13
|
+
};
|
|
14
|
+
return {
|
|
15
|
+
provider: "hash",
|
|
16
|
+
model: "hash/dev",
|
|
17
|
+
dim,
|
|
18
|
+
async embed(text) {
|
|
19
|
+
return embedSync(text);
|
|
20
|
+
},
|
|
21
|
+
async embedBatch(texts) {
|
|
22
|
+
return texts.map(embedSync);
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=hash.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash.js","sourceRoot":"","sources":["../../../src/adapters/embed/hash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEpD,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,MAAM,SAAS,GAAG,CAAC,IAAY,EAAgB,EAAE;QAC/C,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;QAC1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAE,CAAC;YACxC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3D,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC,CAAC;IAEF,OAAO;QACL,QAAQ,EAAE,MAAM;QAChB,KAAK,EAAE,UAAU;QACjB,GAAG;QACH,KAAK,CAAC,KAAK,CAAC,IAAI;YACd,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;QACD,KAAK,CAAC,UAAU,CAAC,KAAK;YACpB,OAAO,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC9B,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../../src/adapters/embed/normalize.ts"],"names":[],"mappings":"AAAA,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,YAAY,GAAG,YAAY,CAMlE;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAIpG"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export function normalizeEmbedding(vec) {
|
|
2
|
+
let norm = 0;
|
|
3
|
+
for (let i = 0; i < vec.length; i++)
|
|
4
|
+
norm += vec[i] * vec[i];
|
|
5
|
+
norm = Math.sqrt(norm) || 1;
|
|
6
|
+
for (let i = 0; i < vec.length; i++)
|
|
7
|
+
vec[i] /= norm;
|
|
8
|
+
return vec;
|
|
9
|
+
}
|
|
10
|
+
export function assertEmbeddingDim(embedding, expectedDim, label) {
|
|
11
|
+
if (embedding.length !== expectedDim) {
|
|
12
|
+
throw new Error(`${label} dimension mismatch: expected ${expectedDim}, got ${embedding.length}`);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=normalize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../../src/adapters/embed/normalize.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,kBAAkB,CAAC,GAAiB;IAClD,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,IAAI,IAAI,GAAG,CAAC,CAAC,CAAE,GAAG,GAAG,CAAC,CAAC,CAAE,CAAC;IAC/D,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,GAAG,CAAC,CAAC,CAAE,IAAI,IAAI,CAAC;IACrD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,SAAuB,EAAE,WAAmB,EAAE,KAAa;IAC5F,IAAI,SAAS,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,iCAAiC,WAAW,SAAS,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;IACnG,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../../../src/adapters/embed/ollama.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAW3C,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,QAAQ,CA8BX"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { postJson } from "../http.js";
|
|
2
|
+
import { assertEmbeddingDim, normalizeEmbedding } from "./normalize.js";
|
|
3
|
+
function joinUrl(baseUrl, path) {
|
|
4
|
+
return `${baseUrl.replace(/\/+$/, "")}${path}`;
|
|
5
|
+
}
|
|
6
|
+
export function createOllamaEmbedder(opts) {
|
|
7
|
+
const url = joinUrl(opts.baseUrl, "/api/embed");
|
|
8
|
+
const embedRemote = async (texts) => {
|
|
9
|
+
const json = await postJson(url, { model: opts.model, input: texts.length === 1 ? texts[0] : texts }, { timeoutMs: opts.timeoutMs });
|
|
10
|
+
return json.embeddings.map((row, index) => {
|
|
11
|
+
const embedding = normalizeEmbedding(new Float32Array(row));
|
|
12
|
+
assertEmbeddingDim(embedding, opts.dim, `Ollama ${opts.model} row ${index}`);
|
|
13
|
+
return embedding;
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
return {
|
|
17
|
+
provider: "ollama",
|
|
18
|
+
model: opts.model,
|
|
19
|
+
dim: opts.dim,
|
|
20
|
+
async embed(text) {
|
|
21
|
+
const [embedding] = await embedRemote([text]);
|
|
22
|
+
return embedding;
|
|
23
|
+
},
|
|
24
|
+
async embedBatch(texts) {
|
|
25
|
+
if (texts.length === 0)
|
|
26
|
+
return [];
|
|
27
|
+
return embedRemote(texts);
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=ollama.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../../src/adapters/embed/ollama.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAQxE,SAAS,OAAO,CAAC,OAAe,EAAE,IAAY;IAC5C,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAKpC;IACC,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAEhD,MAAM,WAAW,GAAG,KAAK,EAAE,KAAe,EAA2B,EAAE;QACrE,MAAM,IAAI,GAAG,MAAM,QAAQ,CACzB,GAAG,EACH,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EACnE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAC9B,CAAC;QAEF,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;YACxC,MAAM,SAAS,GAAG,kBAAkB,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5D,kBAAkB,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,UAAU,IAAI,CAAC,KAAK,QAAQ,KAAK,EAAE,CAAC,CAAC;YAC7E,OAAO,SAAS,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,OAAO;QACL,QAAQ,EAAE,QAAQ;QAClB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,KAAK,CAAC,KAAK,CAAC,IAAI;YACd,MAAM,CAAC,SAAS,CAAC,GAAG,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9C,OAAO,SAAU,CAAC;QACpB,CAAC;QACD,KAAK,CAAC,UAAU,CAAC,KAAK;YACpB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,EAAE,CAAC;YAClC,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/adapters/embed/openai.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAM3C,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,QAAQ,CAgCX"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { postJson } from "../http.js";
|
|
2
|
+
import { assertEmbeddingDim, normalizeEmbedding } from "./normalize.js";
|
|
3
|
+
export function createOpenAiEmbedder(opts) {
|
|
4
|
+
const embedRemote = async (texts) => {
|
|
5
|
+
const json = await postJson("https://api.openai.com/v1/embeddings", { model: opts.model, input: texts }, {
|
|
6
|
+
headers: { Authorization: `Bearer ${opts.apiKey}` },
|
|
7
|
+
timeoutMs: opts.timeoutMs,
|
|
8
|
+
});
|
|
9
|
+
return json.data
|
|
10
|
+
.sort((a, b) => a.index - b.index)
|
|
11
|
+
.map((row) => {
|
|
12
|
+
const embedding = normalizeEmbedding(new Float32Array(row.embedding));
|
|
13
|
+
assertEmbeddingDim(embedding, opts.dim, `OpenAI ${opts.model}`);
|
|
14
|
+
return embedding;
|
|
15
|
+
});
|
|
16
|
+
};
|
|
17
|
+
return {
|
|
18
|
+
provider: "openai",
|
|
19
|
+
model: opts.model,
|
|
20
|
+
dim: opts.dim,
|
|
21
|
+
async embed(text) {
|
|
22
|
+
const [embedding] = await embedRemote([text]);
|
|
23
|
+
return embedding;
|
|
24
|
+
},
|
|
25
|
+
async embedBatch(texts) {
|
|
26
|
+
return embedRemote(texts);
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=openai.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/adapters/embed/openai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAOxE,MAAM,UAAU,oBAAoB,CAAC,IAKpC;IACC,MAAM,WAAW,GAAG,KAAK,EAAE,KAAe,EAA2B,EAAE;QACrE,MAAM,IAAI,GAAG,MAAM,QAAQ,CACzB,sCAAsC,EACtC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EACnC;YACE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE,EAAE;YACnD,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CACF,CAAC;QAEF,OAAO,IAAI,CAAC,IAAI;aACb,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;aACjC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YACX,MAAM,SAAS,GAAG,kBAAkB,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;YACtE,kBAAkB,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,UAAU,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YAChE,OAAO,SAAS,CAAC;QACnB,CAAC,CAAC,CAAC;IACP,CAAC,CAAC;IAEF,OAAO;QACL,QAAQ,EAAE,QAAQ;QAClB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,KAAK,CAAC,KAAK,CAAC,IAAI;YACd,MAAM,CAAC,SAAS,CAAC,GAAG,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9C,OAAO,SAAU,CAAC;QACpB,CAAC;QACD,KAAK,CAAC,UAAU,CAAC,KAAK;YACpB,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { EmbedderProvider } from "../../config/env.js";
|
|
2
|
+
export type Embedder = {
|
|
3
|
+
provider: EmbedderProvider;
|
|
4
|
+
model: string;
|
|
5
|
+
dim: number;
|
|
6
|
+
embed(text: string): Promise<Float32Array>;
|
|
7
|
+
embedBatch(texts: string[]): Promise<Float32Array[]>;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/adapters/embed/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC3C,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;CACtD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/adapters/embed/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type PostJsonOptions = {
|
|
2
|
+
headers?: Record<string, string>;
|
|
3
|
+
timeoutMs?: number;
|
|
4
|
+
signal?: AbortSignal;
|
|
5
|
+
};
|
|
6
|
+
export declare class HttpRequestError extends Error {
|
|
7
|
+
readonly url: string;
|
|
8
|
+
readonly status: number;
|
|
9
|
+
readonly body: string;
|
|
10
|
+
constructor(url: string, status: number, body: string);
|
|
11
|
+
}
|
|
12
|
+
export declare function postJson<T>(url: string, body: unknown, opts?: PostJsonOptions): Promise<T>;
|
|
13
|
+
//# sourceMappingURL=http.d.ts.map
|