@chendpoc/pi-memory 0.1.13 → 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 +66 -258
- 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.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.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 +70 -356
- 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/{consolidation → commands}/types.js.map +1 -1
- 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 -29
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -28
- 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 +161 -520
- 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 -33
- package/dist/preflight/render.d.ts.map +1 -1
- package/dist/preflight/render.js +29 -126
- 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 +28 -10
- 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 +80 -374
- 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 -247
- package/src/init/workspace.ts +44 -0
- package/src/ipc/jsonlFramer.ts +29 -0
- package/src/pi-extension.ts +177 -606
- 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 -180
- 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/cache/memoryCaches.d.ts +0 -32
- package/dist/cache/memoryCaches.d.ts.map +0 -1
- package/dist/cache/memoryCaches.js +0 -59
- package/dist/cache/memoryCaches.js.map +0 -1
- package/dist/config.d.ts +0 -55
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -85
- package/dist/config.js.map +0 -1
- package/dist/consolidation/enqueue.d.ts +0 -33
- package/dist/consolidation/enqueue.d.ts.map +0 -1
- package/dist/consolidation/enqueue.js +0 -145
- package/dist/consolidation/enqueue.js.map +0 -1
- package/dist/consolidation/index.d.ts +0 -19
- package/dist/consolidation/index.d.ts.map +0 -1
- package/dist/consolidation/index.js +0 -15
- package/dist/consolidation/index.js.map +0 -1
- package/dist/consolidation/lock.d.ts +0 -5
- package/dist/consolidation/lock.d.ts.map +0 -1
- package/dist/consolidation/lock.js +0 -33
- package/dist/consolidation/lock.js.map +0 -1
- package/dist/consolidation/log.d.ts +0 -8
- package/dist/consolidation/log.d.ts.map +0 -1
- package/dist/consolidation/log.js +0 -32
- package/dist/consolidation/log.js.map +0 -1
- package/dist/consolidation/memoryIndex.d.ts +0 -18
- package/dist/consolidation/memoryIndex.d.ts.map +0 -1
- package/dist/consolidation/memoryIndex.js +0 -100
- package/dist/consolidation/memoryIndex.js.map +0 -1
- package/dist/consolidation/phase2/runPhase2.d.ts +0 -23
- package/dist/consolidation/phase2/runPhase2.d.ts.map +0 -1
- package/dist/consolidation/phase2/runPhase2.js +0 -196
- package/dist/consolidation/phase2/runPhase2.js.map +0 -1
- package/dist/consolidation/scheduler/launchd.d.ts +0 -5
- package/dist/consolidation/scheduler/launchd.d.ts.map +0 -1
- package/dist/consolidation/scheduler/launchd.js +0 -54
- package/dist/consolidation/scheduler/launchd.js.map +0 -1
- package/dist/consolidation/scheduler/runConsolidate.d.ts +0 -26
- package/dist/consolidation/scheduler/runConsolidate.d.ts.map +0 -1
- package/dist/consolidation/scheduler/runConsolidate.js +0 -83
- package/dist/consolidation/scheduler/runConsolidate.js.map +0 -1
- package/dist/consolidation/scheduler/setupSchedule.d.ts +0 -3
- package/dist/consolidation/scheduler/setupSchedule.d.ts.map +0 -1
- package/dist/consolidation/scheduler/setupSchedule.js +0 -79
- package/dist/consolidation/scheduler/setupSchedule.js.map +0 -1
- package/dist/consolidation/scheduler/systemd.d.ts +0 -9
- package/dist/consolidation/scheduler/systemd.d.ts.map +0 -1
- package/dist/consolidation/scheduler/systemd.js +0 -57
- package/dist/consolidation/scheduler/systemd.js.map +0 -1
- package/dist/consolidation/scheduler/types.d.ts +0 -24
- package/dist/consolidation/scheduler/types.d.ts.map +0 -1
- package/dist/consolidation/scheduler/types.js.map +0 -1
- package/dist/consolidation/scope.d.ts +0 -12
- package/dist/consolidation/scope.d.ts.map +0 -1
- package/dist/consolidation/scope.js +0 -51
- package/dist/consolidation/scope.js.map +0 -1
- package/dist/consolidation/stage1/deltaExtract.d.ts +0 -3
- package/dist/consolidation/stage1/deltaExtract.d.ts.map +0 -1
- package/dist/consolidation/stage1/deltaExtract.js +0 -19
- package/dist/consolidation/stage1/deltaExtract.js.map +0 -1
- package/dist/consolidation/stage1/drainQueue.d.ts +0 -21
- package/dist/consolidation/stage1/drainQueue.d.ts.map +0 -1
- package/dist/consolidation/stage1/drainQueue.js +0 -113
- package/dist/consolidation/stage1/drainQueue.js.map +0 -1
- package/dist/consolidation/stage1/extractSession.d.ts +0 -6
- package/dist/consolidation/stage1/extractSession.d.ts.map +0 -1
- package/dist/consolidation/stage1/extractSession.js +0 -47
- package/dist/consolidation/stage1/extractSession.js.map +0 -1
- package/dist/consolidation/stage1/store.d.ts +0 -45
- package/dist/consolidation/stage1/store.d.ts.map +0 -1
- package/dist/consolidation/stage1/store.js +0 -297
- package/dist/consolidation/stage1/store.js.map +0 -1
- package/dist/consolidation/types.d.ts +0 -49
- package/dist/consolidation/types.d.ts.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 -68
- 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 -239
- 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 -31
- package/dist/local/graphQuery.d.ts.map +0 -1
- package/dist/local/graphQuery.js +0 -195
- 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 -631
- package/dist/preflight/detectIntents.js.map +0 -1
- package/dist/preflight/hook.d.ts +0 -76
- package/dist/preflight/hook.d.ts.map +0 -1
- package/dist/preflight/hook.js +0 -122
- package/dist/preflight/hook.js.map +0 -1
- package/dist/service.d.ts +0 -72
- package/dist/service.d.ts.map +0 -1
- package/dist/service.js +0 -257
- package/dist/service.js.map +0 -1
- package/dist/session/activeBranch.d.ts +0 -17
- package/dist/session/activeBranch.d.ts.map +0 -1
- package/dist/session/activeBranch.js +0 -251
- package/dist/session/activeBranch.js.map +0 -1
- package/dist/settings.d.ts +0 -41
- package/dist/settings.d.ts.map +0 -1
- package/dist/settings.js +0 -85
- 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 -47
- package/dist/tools/memoryAppend.d.ts.map +0 -1
- package/dist/tools/memoryAppend.js +0 -138
- 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 -351
- 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 -33
- package/dist/trainer/scheduler.d.ts.map +0 -1
- package/dist/trainer/scheduler.js +0 -73
- package/dist/trainer/scheduler.js.map +0 -1
- package/dist/trainer/sessionLoader.d.ts +0 -26
- package/dist/trainer/sessionLoader.d.ts.map +0 -1
- package/dist/trainer/sessionLoader.js +0 -145
- 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 -180
- package/src/consolidation/enqueue.ts +0 -205
- package/src/consolidation/index.ts +0 -90
- package/src/consolidation/lock.ts +0 -41
- package/src/consolidation/log.ts +0 -43
- package/src/consolidation/memoryIndex.ts +0 -127
- package/src/consolidation/phase2/runPhase2.ts +0 -255
- package/src/consolidation/scheduler/launchd.ts +0 -62
- package/src/consolidation/scheduler/runConsolidate.ts +0 -115
- package/src/consolidation/scheduler/setupSchedule.ts +0 -106
- package/src/consolidation/scheduler/systemd.ts +0 -78
- package/src/consolidation/scheduler/types.ts +0 -27
- package/src/consolidation/scope.ts +0 -58
- package/src/consolidation/stage1/deltaExtract.ts +0 -29
- package/src/consolidation/stage1/drainQueue.ts +0 -143
- package/src/consolidation/stage1/extractSession.ts +0 -58
- package/src/consolidation/stage1/store.ts +0 -411
- package/src/consolidation/types.ts +0 -52
- 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 -290
- 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 -213
- package/src/service.ts +0 -306
- package/src/session/activeBranch.ts +0 -294
- package/src/settings.ts +0 -161
- package/src/sidecar/bundle.ts +0 -52
- package/src/sidecar/process.ts +0 -160
- package/src/tools/memoryAppend.ts +0 -166
- 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 -176
- package/src/types.ts +0 -168
- /package/dist/{consolidation/scheduler → adapters/embed}/types.js +0 -0
- /package/dist/{consolidation → adapters/llm}/types.js +0 -0
package/README.md
CHANGED
|
@@ -1,296 +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** --- queues explicit user memories into stage1 so Phase2 can merge them safely
|
|
14
|
-
- **Offline consolidation** --- `session_shutdown` only enqueues metadata; `pi-memory consolidate` drains queue, trains graph, and updates memory files
|
|
15
|
-
- **MEMORY.md index** --- session-level cap injection plus scoped project memory files
|
|
16
|
-
- **Local trainer** --- extracts entities, relations, and events from Pi session history (regex or LLM-powered)
|
|
17
|
-
- **FTS5 search** --- SQLite full-text index for keyword fallback
|
|
18
|
-
- **LLM rerank** --- reranks keyword search results using `deepseek-v4-flash` for relevance scoring
|
|
19
|
-
- **Session dedup** --- content-hash deduplication in both trainer and indexer
|
|
20
|
-
- **Zero config** --- works out of the box with `pi install`
|
|
21
|
-
|
|
22
|
-
## Install
|
|
23
|
-
|
|
24
|
-
```bash
|
|
25
|
-
pi install npm:@chendpoc/pi-memory
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
Or for local development:
|
|
29
|
-
|
|
30
|
-
```json
|
|
31
|
-
{
|
|
32
|
-
"packages": ["./extensions/pi-memory"]
|
|
33
|
-
}
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
Pi reads `package.json` > `pi.extensions` and auto-loads the extension via [jiti](https://github.com/unjs/jiti) (TypeScript, no build step needed).
|
|
37
|
-
|
|
38
|
-
## Quick Start
|
|
39
|
-
|
|
40
|
-
```bash
|
|
41
|
-
# 1. Install the package
|
|
42
|
-
pi install npm:@chendpoc/pi-memory
|
|
5
|
+
## Architecture
|
|
43
6
|
|
|
44
|
-
|
|
45
|
-
|
|
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 |
|
|
46
13
|
|
|
47
|
-
|
|
48
|
-
npx pi-memory consolidate
|
|
49
|
-
npx pi-memory setup-schedule
|
|
14
|
+
### Write paths
|
|
50
15
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
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)
|
|
54
19
|
|
|
55
|
-
|
|
56
|
-
- Show `status: ready, mode: local_graph` when you type `/memory`
|
|
57
|
-
- Show queue/index details when you type `/memory --verbose`
|
|
58
|
-
- Automatically inject past context when you ask relationship questions
|
|
59
|
-
- Let the LLM call `memory_recall` for explicit lookups
|
|
20
|
+
**Diagnostics:** **`/memory-status`** in session, or **`pi-memory status`** on the CLI.
|
|
60
21
|
|
|
61
|
-
|
|
22
|
+
**Shutdown Queue** — `session_shutdown` appends metadata to `.memory_shutdown_queue.jsonl`; **`pi-memory maintenance`** (or `drain-shutdown-queue`) ingests missed facts offline.
|
|
62
23
|
|
|
63
|
-
|
|
64
|
-
Pi session files (.jsonl)
|
|
65
|
-
| session_shutdown
|
|
66
|
-
v
|
|
67
|
-
pending_sessions queue (memories.sqlite)
|
|
68
|
-
| daily / manual consolidate
|
|
69
|
-
v
|
|
70
|
-
stage1 outputs + graph train
|
|
71
|
-
|
|
|
72
|
-
v
|
|
73
|
-
MEMORY.md / project memory + graph.json + sessions.db
|
|
74
|
-
|
|
|
75
|
-
v
|
|
76
|
-
memory_recall tool / implicit preflight injection / MEMORY.md cap
|
|
77
|
-
```
|
|
24
|
+
### Data directory
|
|
78
25
|
|
|
79
|
-
|
|
26
|
+
All memory artifacts share one root directory (the **memory agent dir**):
|
|
80
27
|
|
|
81
|
-
|
|
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 |
|
|
82
34
|
|
|
83
|
-
|
|
84
|
-
|----------|---------|----------|
|
|
85
|
-
| 1 | **LocalGraphQuerier** (in-process) | bundle only |
|
|
86
|
-
| 2 | **FTS5 + keyword fallback** | `better-sqlite3` (optional) |
|
|
35
|
+
Resolution order (extension and CLI):
|
|
87
36
|
|
|
88
|
-
|
|
37
|
+
1. `--agent-dir` / `PI_MEMORY_AGENT_DIR` — explicit override
|
|
38
|
+
2. Default — `~/.pi/pi-memory-data` (no env required)
|
|
89
39
|
|
|
90
|
-
|
|
40
|
+
### MEMORY.md format
|
|
91
41
|
|
|
92
|
-
|
|
93
|
-
|---------|-------------|
|
|
94
|
-
| `/memory` | Show service status, query mode, and bundle info |
|
|
95
|
-
| `/memory --verbose` | Show consolidation queue, memory index usage, and recent job logs |
|
|
42
|
+
Canonical scaffold (`templates/MEMORY.md.example`):
|
|
96
43
|
|
|
97
|
-
|
|
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`
|
|
98
48
|
|
|
99
|
-
|
|
100
|
-
# Train a bundle from session history
|
|
101
|
-
npx pi-memory train --full # full rebuild
|
|
102
|
-
npx pi-memory train # incremental (only new sessions)
|
|
103
|
-
npx pi-memory train --extractor llm # use LLM for deeper extraction
|
|
104
|
-
npx pi-memory train --extractor llm --model deepseek/deepseek-v4-flash
|
|
105
|
-
|
|
106
|
-
# Query the knowledge graph
|
|
107
|
-
npx pi-memory query '{"mode":"direct_relation","anchor_mentions":["Alice"]}'
|
|
108
|
-
|
|
109
|
-
# Service diagnostics
|
|
110
|
-
npx pi-memory health
|
|
111
|
-
npx pi-memory status
|
|
112
|
-
npx pi-memory memory-status
|
|
113
|
-
|
|
114
|
-
# Offline consolidation
|
|
115
|
-
npx pi-memory consolidate
|
|
116
|
-
npx pi-memory consolidate --dry-run
|
|
117
|
-
npx pi-memory consolidate --phase1-only
|
|
118
|
-
npx pi-memory consolidate --phase2-only
|
|
119
|
-
|
|
120
|
-
# OS scheduler
|
|
121
|
-
npx pi-memory setup-schedule
|
|
122
|
-
npx pi-memory setup-schedule --hour 4
|
|
123
|
-
npx pi-memory setup-schedule --status
|
|
124
|
-
npx pi-memory setup-schedule --remove
|
|
125
|
-
|
|
126
|
-
# Manage bundles
|
|
127
|
-
npx pi-memory install-bundle ./path/to/bundle
|
|
128
|
-
|
|
129
|
-
# Rebuild FTS5 search index
|
|
130
|
-
npx pi-memory index
|
|
131
|
-
|
|
132
|
-
# Continuous training (watch mode)
|
|
133
|
-
npx pi-memory train --watch
|
|
134
|
-
```
|
|
49
|
+
**Initialization** (never overwrites a non-empty file):
|
|
135
50
|
|
|
136
|
-
`
|
|
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`
|
|
137
54
|
|
|
138
|
-
##
|
|
55
|
+
## Setup
|
|
139
56
|
|
|
140
|
-
|
|
141
|
-
|------|-------------|---------|
|
|
142
|
-
| `--memory-helper-model` | LLM model for intent detection and rerank | `deepseek/deepseek-v4-flash` |
|
|
57
|
+
1. Install dependencies and build:
|
|
143
58
|
|
|
144
59
|
```bash
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
## Data Layout
|
|
149
|
-
|
|
150
|
-
```
|
|
151
|
-
~/.pi/
|
|
152
|
-
├── memory/
|
|
153
|
-
│ ├── current/ # active bundle (symlink)
|
|
154
|
-
│ │ ├── manifest.json
|
|
155
|
-
│ │ └── graph.json # entities, edges, events
|
|
156
|
-
│ ├── bundles/ # historical bundles
|
|
157
|
-
│ ├── sessions.db # FTS5 search index
|
|
158
|
-
│ ├── memories.sqlite # pending queue + stage1 outputs
|
|
159
|
-
│ ├── workspace/ # raw memories + rollout summaries
|
|
160
|
-
│ ├── projects/<hash>/ # project-scoped MEMORY.md files
|
|
161
|
-
│ ├── consolidation.log # structured consolidation logs
|
|
162
|
-
│ └── .train_marker # incremental training timestamp
|
|
163
|
-
├── agent/sessions/ # Pi session files (.jsonl)
|
|
164
|
-
└── MEMORY.md # global memory index
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
## Programmatic API
|
|
168
|
-
|
|
169
|
-
```typescript
|
|
170
|
-
import {
|
|
171
|
-
MemoryService,
|
|
172
|
-
defaultMemoryConfig,
|
|
173
|
-
trainBundle,
|
|
174
|
-
LocalGraphQuerier,
|
|
175
|
-
createLLMFactExtractor,
|
|
176
|
-
createStandaloneLLMClient,
|
|
177
|
-
rerankWithLLM,
|
|
178
|
-
} from "@chendpoc/pi-memory";
|
|
179
|
-
|
|
180
|
-
// --- Query the graph directly ---
|
|
181
|
-
const querier = new LocalGraphQuerier("/Users/you/.pi/memory");
|
|
182
|
-
querier.load();
|
|
183
|
-
const result = querier.query({
|
|
184
|
-
mode: "direct_relation",
|
|
185
|
-
anchor_mentions: ["Alice"],
|
|
186
|
-
});
|
|
187
|
-
|
|
188
|
-
// --- Train a bundle ---
|
|
189
|
-
const result = await trainBundle({
|
|
190
|
-
sessionsDir: "~/.pi/agent/sessions",
|
|
191
|
-
bundleRoot: "~/.pi/memory",
|
|
192
|
-
full: true,
|
|
193
|
-
});
|
|
194
|
-
|
|
195
|
-
// --- Train with LLM extraction ---
|
|
196
|
-
const client = createStandaloneLLMClient("deepseek/deepseek-v4-flash");
|
|
197
|
-
const extractor = createLLMFactExtractor({ client, batchSize: 10 });
|
|
198
|
-
await trainBundle({ extractOpts: { llmExtractor: extractor } });
|
|
199
|
-
|
|
200
|
-
// --- Use as Pi extension ---
|
|
201
|
-
import piMemory from "@chendpoc/pi-memory/extension";
|
|
202
|
-
export default piMemory;
|
|
60
|
+
pnpm install
|
|
61
|
+
pnpm build
|
|
203
62
|
```
|
|
204
63
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
| Module | Purpose |
|
|
208
|
-
|--------|---------|
|
|
209
|
-
| `src/pi-extension.ts` | Pi ExtensionAPI entry point |
|
|
210
|
-
| `src/local/graphQuery.ts` | In-process graph query engine |
|
|
211
|
-
| `src/adapters/piComplete.ts` | LLM adapter via `@earendil-works/pi-ai/compat` |
|
|
212
|
-
| `src/service.ts` | Service lifecycle and query routing |
|
|
213
|
-
| `src/consolidation/` | Queue, stage1, Phase2, scheduler, memory index, scope |
|
|
214
|
-
| `src/trainer/` | Session loader, fact extraction, entity resolution, bundle builder |
|
|
215
|
-
| `src/fallback/` | FTS5 index, keyword search, LLM rerank |
|
|
216
|
-
| `src/preflight/` | Intent detection, private memory render/inject/strip |
|
|
217
|
-
| `src/tools/` | `memory_recall` and `memory_append` tool definitions |
|
|
218
|
-
|
|
219
|
-
## Implicit Preflight
|
|
64
|
+
2. Enable as a Pi extension (see `package.json` → `pi.extensions`).
|
|
220
65
|
|
|
221
|
-
|
|
66
|
+
3. Optional: copy [`.env.example`](./.env.example) to `~/.pi/agent/pi-memory.env` and configure embedder / helper LLM.
|
|
222
67
|
|
|
223
|
-
|
|
224
|
-
2. Optionally calls a helper LLM (`compile_memory_intents` forced tool_use)
|
|
225
|
-
3. Queries the graph for matching entities/relations and greps scoped MEMORY.md in parallel
|
|
226
|
-
4. Injects the session memory index and dynamic recall into `<private_memory>` blocks (deep copy, not persisted to session)
|
|
227
|
-
5. Results are cached per agent loop to avoid redundant queries during multi-tool turns
|
|
68
|
+
## Environment
|
|
228
69
|
|
|
229
|
-
|
|
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) |
|
|
230
78
|
|
|
231
|
-
|
|
79
|
+
See [`.env.example`](./.env.example) for full list.
|
|
232
80
|
|
|
233
|
-
|
|
234
|
-
- `@earendil-works/pi-ai`
|
|
235
|
-
- `@earendil-works/pi-coding-agent`
|
|
236
|
-
- `typebox`
|
|
237
|
-
|
|
238
|
-
## Optional Dependencies
|
|
239
|
-
|
|
240
|
-
- `better-sqlite3` --- enables FTS5 session search index (graceful degradation if absent)
|
|
241
|
-
|
|
242
|
-
## Releasing
|
|
243
|
-
|
|
244
|
-
This repo uses [Changesets](https://github.com/changesets/changesets) for semver bumps and `CHANGELOG.md`, and a **tag-triggered** workflow for GitHub Releases (and optional npm publish).
|
|
245
|
-
|
|
246
|
-
1. After a feature/fix PR, add a changeset: `pnpm changeset`
|
|
247
|
-
2. Merge to `main` — GitHub Actions opens a **Version Packages** PR (bumps version + updates `CHANGELOG.md`)
|
|
248
|
-
3. Merge that PR, then tag and push:
|
|
81
|
+
## CLI
|
|
249
82
|
|
|
250
83
|
```bash
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
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
|
|
254
89
|
```
|
|
255
90
|
|
|
256
|
-
|
|
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.
|
|
257
94
|
|
|
258
|
-
|
|
95
|
+
Templates: [`templates/`](./templates/) (launchd, crontab, schtasks).
|
|
259
96
|
|
|
260
|
-
|
|
97
|
+
## Docs
|
|
261
98
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
2. **Trusted Publisher** → GitHub Actions
|
|
266
|
-
3. Set exactly:
|
|
267
|
-
- Organization or user: `chendpoc`
|
|
268
|
-
- Repository: `pi-memory`
|
|
269
|
-
- Workflow filename: `tag-release.yml`
|
|
270
|
-
- Environment: *(leave blank unless you add a GitHub Environment)*
|
|
271
|
-
|
|
272
|
-
**First publish:** npm requires the package to exist before you can configure trusted publishing. Either:
|
|
273
|
-
|
|
274
|
-
- Publish once locally with `npm login` + `npm publish --access public`, or
|
|
275
|
-
- Use [setup-npm-trusted-publish](https://github.com/azu/setup-npm-trusted-publish) to create a placeholder, configure OIDC, then publish real versions from CI.
|
|
276
|
-
|
|
277
|
-
The workflow already sets `id-token: write` and uses Node 24 (npm ≥ 11.5.1). Provenance is automatic with trusted publishing.
|
|
278
|
-
|
|
279
|
-
**Re-run without deleting a tag:** GitHub → Actions → **Tag Release** → **Run workflow**
|
|
280
|
-
|
|
281
|
-
- `tag`: `v0.1.13`
|
|
282
|
-
- `skip_github_release`: ✅ (release already exists)
|
|
283
|
-
- `publish_npm`: ✅
|
|
284
|
-
|
|
285
|
-
## Development
|
|
286
|
-
|
|
287
|
-
```bash
|
|
288
|
-
pnpm install
|
|
289
|
-
pnpm build
|
|
290
|
-
pnpm test
|
|
291
|
-
pnpm typecheck
|
|
292
|
-
pnpm changeset # before opening a release PR
|
|
293
|
-
```
|
|
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
|
|
294
102
|
|
|
295
103
|
## License
|
|
296
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"}
|