@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
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { chmodSync, unlinkSync } from "node:fs";
|
|
2
|
+
import { secureFileMode } from "./paths.js";
|
|
3
|
+
import { isUnixLike } from "./platform.js";
|
|
4
|
+
/** Remove stale socket file before bind (Unix domain sockets only). */
|
|
5
|
+
export function removeSocketFile(socketPath) {
|
|
6
|
+
if (!isUnixLike())
|
|
7
|
+
return;
|
|
8
|
+
try {
|
|
9
|
+
unlinkSync(socketPath);
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
// ENOENT or in-use; listen() will surface real errors
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
/** Restrict socket permissions after bind (Unix only). */
|
|
16
|
+
export function secureSocketPath(socketPath) {
|
|
17
|
+
const mode = secureFileMode();
|
|
18
|
+
if (mode === undefined)
|
|
19
|
+
return;
|
|
20
|
+
chmodSync(socketPath, mode);
|
|
21
|
+
}
|
|
22
|
+
/** Remove socket and pid companion files on shutdown. */
|
|
23
|
+
export function cleanupSocketFiles(socketPath, pidPath) {
|
|
24
|
+
for (const path of [socketPath, pidPath]) {
|
|
25
|
+
if (!path)
|
|
26
|
+
continue;
|
|
27
|
+
try {
|
|
28
|
+
unlinkSync(path);
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
// already gone
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=socket.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"socket.js","sourceRoot":"","sources":["../../src/utils/socket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAEhD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,uEAAuE;AACvE,MAAM,UAAU,gBAAgB,CAAC,UAAkB;IACjD,IAAI,CAAC,UAAU,EAAE;QAAE,OAAO;IAC1B,IAAI,CAAC;QACH,UAAU,CAAC,UAAU,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,sDAAsD;IACxD,CAAC;AACH,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,gBAAgB,CAAC,UAAkB;IACjD,MAAM,IAAI,GAAG,cAAc,EAAE,CAAC;IAC9B,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO;IAC/B,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,kBAAkB,CAAC,UAAkB,EAAE,OAAgB;IACrE,KAAK,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC;QACzC,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,IAAI,CAAC;YACH,UAAU,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;QAAC,MAAM,CAAC;YACP,eAAe;QACjB,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type ConfigType, type Dayjs } from "dayjs";
|
|
2
|
+
export type TimeInput = ConfigType;
|
|
3
|
+
/** Current local time. */
|
|
4
|
+
export declare function now(): Dayjs;
|
|
5
|
+
/** Unix epoch ms (deadlines, lock files, external APIs). */
|
|
6
|
+
export declare function nowMs(): number;
|
|
7
|
+
/** Parse stored or external input; invalid values fall back to epoch. */
|
|
8
|
+
export declare function parseTime(input: TimeInput): Dayjs;
|
|
9
|
+
/**
|
|
10
|
+
* Local timestamp for MEMORY entries, GC markers, shutdown queue.
|
|
11
|
+
* Format: YYYY-MM-DDTHH:mm:ss.SSS (local wall clock, no Z suffix).
|
|
12
|
+
*/
|
|
13
|
+
export declare function formatTimestamp(input?: TimeInput): string;
|
|
14
|
+
/** Local calendar date (e.g. auto-YYYY-MM-DD-*.md). */
|
|
15
|
+
export declare function formatLocalDate(input?: TimeInput): string;
|
|
16
|
+
/** Fallback timestamp when entry metadata is missing. */
|
|
17
|
+
export declare function epochTimestamp(): string;
|
|
18
|
+
/** Whole calendar days from `from` until `to` (local; default `to` = now). */
|
|
19
|
+
export declare function daysSince(from: TimeInput, to?: TimeInput): number;
|
|
20
|
+
/** Milliseconds left until `deadlineMs` (default clock: now). */
|
|
21
|
+
export declare function remainingMs(deadlineMs: number, atMs?: number): number;
|
|
22
|
+
//# sourceMappingURL=time.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"time.d.ts","sourceRoot":"","sources":["../../src/utils/time.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,UAAU,EAAE,KAAK,KAAK,EAAE,MAAM,OAAO,CAAC;AAE3D,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC;AAEnC,0BAA0B;AAC1B,wBAAgB,GAAG,IAAI,KAAK,CAE3B;AAED,4DAA4D;AAC5D,wBAAgB,KAAK,IAAI,MAAM,CAE9B;AAED,yEAAyE;AACzE,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,KAAK,CAGjD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,CAAC,EAAE,SAAS,GAAG,MAAM,CAGzD;AAED,uDAAuD;AACvD,wBAAgB,eAAe,CAAC,KAAK,CAAC,EAAE,SAAS,GAAG,MAAM,CAGzD;AAED,yDAAyD;AACzD,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,8EAA8E;AAC9E,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,EAAE,SAAS,GAAG,MAAM,CAIjE;AAED,iEAAiE;AACjE,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,GAAE,MAAgB,GAAG,MAAM,CAE9E"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import dayjs from "dayjs";
|
|
2
|
+
/** Current local time. */
|
|
3
|
+
export function now() {
|
|
4
|
+
return dayjs();
|
|
5
|
+
}
|
|
6
|
+
/** Unix epoch ms (deadlines, lock files, external APIs). */
|
|
7
|
+
export function nowMs() {
|
|
8
|
+
return dayjs().valueOf();
|
|
9
|
+
}
|
|
10
|
+
/** Parse stored or external input; invalid values fall back to epoch. */
|
|
11
|
+
export function parseTime(input) {
|
|
12
|
+
const parsed = dayjs(input);
|
|
13
|
+
return parsed.isValid() ? parsed : dayjs(0);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Local timestamp for MEMORY entries, GC markers, shutdown queue.
|
|
17
|
+
* Format: YYYY-MM-DDTHH:mm:ss.SSS (local wall clock, no Z suffix).
|
|
18
|
+
*/
|
|
19
|
+
export function formatTimestamp(input) {
|
|
20
|
+
const t = input === undefined ? dayjs() : parseTime(input);
|
|
21
|
+
return t.format("YYYY-MM-DDTHH:mm:ss.SSS");
|
|
22
|
+
}
|
|
23
|
+
/** Local calendar date (e.g. auto-YYYY-MM-DD-*.md). */
|
|
24
|
+
export function formatLocalDate(input) {
|
|
25
|
+
const t = input === undefined ? dayjs() : parseTime(input);
|
|
26
|
+
return t.format("YYYY-MM-DD");
|
|
27
|
+
}
|
|
28
|
+
/** Fallback timestamp when entry metadata is missing. */
|
|
29
|
+
export function epochTimestamp() {
|
|
30
|
+
return formatTimestamp(0);
|
|
31
|
+
}
|
|
32
|
+
/** Whole calendar days from `from` until `to` (local; default `to` = now). */
|
|
33
|
+
export function daysSince(from, to) {
|
|
34
|
+
const end = to === undefined ? dayjs() : parseTime(to);
|
|
35
|
+
const start = parseTime(from);
|
|
36
|
+
return end.startOf("day").diff(start.startOf("day"), "day");
|
|
37
|
+
}
|
|
38
|
+
/** Milliseconds left until `deadlineMs` (default clock: now). */
|
|
39
|
+
export function remainingMs(deadlineMs, atMs = nowMs()) {
|
|
40
|
+
return Math.max(0, deadlineMs - atMs);
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=time.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"time.js","sourceRoot":"","sources":["../../src/utils/time.ts"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAI3D,0BAA0B;AAC1B,MAAM,UAAU,GAAG;IACjB,OAAO,KAAK,EAAE,CAAC;AACjB,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,KAAK;IACnB,OAAO,KAAK,EAAE,CAAC,OAAO,EAAE,CAAC;AAC3B,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,SAAS,CAAC,KAAgB;IACxC,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IAC5B,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,KAAiB;IAC/C,MAAM,CAAC,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC3D,OAAO,CAAC,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC;AAC7C,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,eAAe,CAAC,KAAiB;IAC/C,MAAM,CAAC,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC3D,OAAO,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AAChC,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,cAAc;IAC5B,OAAO,eAAe,CAAC,CAAC,CAAC,CAAC;AAC5B,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,SAAS,CAAC,IAAe,EAAE,EAAc;IACvD,MAAM,GAAG,GAAG,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;AAC9D,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,WAAW,CAAC,UAAkB,EAAE,OAAe,KAAK,EAAE;IACpE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC,CAAC;AACxC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chendpoc/pi-memory",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "Cross-session episodic memory for Pi agent — MEMORY.md ground truth, JSONL sidecar retrieval, and Preflight injection",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"types": "./dist/index.d.ts",
|
|
@@ -16,22 +16,39 @@
|
|
|
16
16
|
}
|
|
17
17
|
},
|
|
18
18
|
"bin": {
|
|
19
|
-
"pi-memory": "./dist/cli.js"
|
|
19
|
+
"pi-memory": "./dist/cli.js",
|
|
20
|
+
"pi-memory-sidecar": "./dist/sidecar/server/process.js"
|
|
20
21
|
},
|
|
21
22
|
"scripts": {
|
|
22
|
-
"
|
|
23
|
+
"clean": "rm -rf dist",
|
|
24
|
+
"build": "rm -rf dist && tsc",
|
|
25
|
+
"postinstall": "node ./scripts/postinstall.mjs",
|
|
23
26
|
"test": "vitest run",
|
|
24
27
|
"test:watch": "vitest",
|
|
25
|
-
"typecheck": "tsc --noEmit"
|
|
28
|
+
"typecheck": "tsc --noEmit",
|
|
29
|
+
"rebuild:native": "pnpm rebuild better-sqlite3",
|
|
30
|
+
"changeset": "changeset",
|
|
31
|
+
"version-packages": "changeset version",
|
|
32
|
+
"release": "pnpm build && changeset publish"
|
|
33
|
+
},
|
|
34
|
+
"publishConfig": {
|
|
35
|
+
"access": "public",
|
|
36
|
+
"provenance": true
|
|
26
37
|
},
|
|
27
38
|
"files": [
|
|
28
39
|
"dist",
|
|
29
40
|
"src/**/*.ts",
|
|
30
41
|
"!src/**/*.test.ts",
|
|
31
|
-
"
|
|
42
|
+
"templates/MEMORY.md.example",
|
|
43
|
+
"scripts/path-utils.mjs",
|
|
44
|
+
"scripts/init-memory-workspace.mjs",
|
|
45
|
+
"scripts/platform-fs.mjs",
|
|
46
|
+
"scripts/postinstall.mjs",
|
|
47
|
+
"README.md",
|
|
48
|
+
"UBIQUITOUS_LANGUAGE.md"
|
|
32
49
|
],
|
|
33
50
|
"engines": {
|
|
34
|
-
"node": ">=
|
|
51
|
+
"node": ">=24.0.0 <25"
|
|
35
52
|
},
|
|
36
53
|
"packageManager": "pnpm@10.12.1",
|
|
37
54
|
"keywords": [
|
|
@@ -39,7 +56,7 @@
|
|
|
39
56
|
"pi-extension",
|
|
40
57
|
"pi-agent",
|
|
41
58
|
"episodic-memory",
|
|
42
|
-
"
|
|
59
|
+
"recent-memory",
|
|
43
60
|
"memory-recall"
|
|
44
61
|
],
|
|
45
62
|
"license": "MIT",
|
|
@@ -58,18 +75,23 @@
|
|
|
58
75
|
"@earendil-works/pi-agent-core": "*",
|
|
59
76
|
"@earendil-works/pi-ai": "*",
|
|
60
77
|
"@earendil-works/pi-coding-agent": "*",
|
|
61
|
-
"
|
|
78
|
+
"@earendil-works/pi-tui": "*",
|
|
79
|
+
"typebox": "^1.1.38"
|
|
62
80
|
},
|
|
63
81
|
"optionalDependencies": {
|
|
64
82
|
"better-sqlite3": "^12.10.0"
|
|
65
83
|
},
|
|
66
84
|
"devDependencies": {
|
|
85
|
+
"@changesets/changelog-github": "^0.5.1",
|
|
86
|
+
"@changesets/cli": "^2.29.5",
|
|
67
87
|
"@earendil-works/pi-agent-core": "*",
|
|
68
88
|
"@earendil-works/pi-ai": "*",
|
|
69
89
|
"@earendil-works/pi-coding-agent": "*",
|
|
90
|
+
"@earendil-works/pi-tui": "*",
|
|
70
91
|
"@types/better-sqlite3": "^7.6.0",
|
|
71
|
-
"@types/
|
|
72
|
-
"
|
|
92
|
+
"@types/lodash": "^4.17.24",
|
|
93
|
+
"@types/node": "^24.0.0",
|
|
94
|
+
"typebox": "^1.3.3",
|
|
73
95
|
"typescript": "^5.7.2",
|
|
74
96
|
"vitest": "^3.0.0"
|
|
75
97
|
},
|
|
@@ -77,6 +99,12 @@
|
|
|
77
99
|
"better-sqlite3@12.11.1": true
|
|
78
100
|
},
|
|
79
101
|
"dependencies": {
|
|
80
|
-
"
|
|
102
|
+
"chalk": "^5.6.2",
|
|
103
|
+
"dayjs": "^1.11.21",
|
|
104
|
+
"dotenv": "^17.4.2",
|
|
105
|
+
"execa": "^9.6.1",
|
|
106
|
+
"lodash": "^4.18.1",
|
|
107
|
+
"lru-cache": "^11.5.1",
|
|
108
|
+
"proper-lockfile": "^4.1.2"
|
|
81
109
|
}
|
|
82
110
|
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* postinstall: seed MEMORY.md in the memory agent dir when missing or empty.
|
|
4
|
+
*/
|
|
5
|
+
import { CONFIG_DIR_NAME } from "@earendil-works/pi-coding-agent";
|
|
6
|
+
import { readFile } from "node:fs/promises";
|
|
7
|
+
import { homedir } from "node:os";
|
|
8
|
+
import { dirname } from "node:path";
|
|
9
|
+
import { fileURLToPath } from "node:url";
|
|
10
|
+
import { config } from "dotenv";
|
|
11
|
+
|
|
12
|
+
import {
|
|
13
|
+
ensureDir,
|
|
14
|
+
joinPath,
|
|
15
|
+
readText,
|
|
16
|
+
writeText,
|
|
17
|
+
} from "./platform-fs.mjs";
|
|
18
|
+
import { expandHomePath } from "./path-utils.mjs";
|
|
19
|
+
|
|
20
|
+
const packageRoot = joinPath(dirname(fileURLToPath(import.meta.url)), "..");
|
|
21
|
+
|
|
22
|
+
function resolveMemoryAgentDir(env) {
|
|
23
|
+
const fromMemory = env.PI_MEMORY_AGENT_DIR?.trim();
|
|
24
|
+
if (fromMemory) return expandHomePath(fromMemory);
|
|
25
|
+
return joinPath(homedir(), CONFIG_DIR_NAME, "pi-memory-data");
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
async function loadEnvFiles() {
|
|
29
|
+
const paths = [
|
|
30
|
+
joinPath(process.cwd(), ".env"),
|
|
31
|
+
joinPath(process.cwd(), ".env.local"),
|
|
32
|
+
joinPath(homedir(), CONFIG_DIR_NAME, "agent", "pi-memory.env"),
|
|
33
|
+
];
|
|
34
|
+
if (process.env.PI_MEMORY_ENV_FILE?.trim()) {
|
|
35
|
+
paths.unshift(process.env.PI_MEMORY_ENV_FILE.trim());
|
|
36
|
+
}
|
|
37
|
+
for (const path of paths) {
|
|
38
|
+
try {
|
|
39
|
+
await readFile(expandHomePath(path), "utf8");
|
|
40
|
+
config({ path: expandHomePath(path), override: false, quiet: true });
|
|
41
|
+
} catch {
|
|
42
|
+
// missing file
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
async function main() {
|
|
48
|
+
await loadEnvFiles();
|
|
49
|
+
const agentDir = resolveMemoryAgentDir(process.env);
|
|
50
|
+
const memoryFile = joinPath(agentDir, "MEMORY.md");
|
|
51
|
+
|
|
52
|
+
const existing = await readText(memoryFile);
|
|
53
|
+
if (existing.trim()) return;
|
|
54
|
+
|
|
55
|
+
const template = await readText(joinPath(packageRoot, "templates", "MEMORY.md.example"));
|
|
56
|
+
await ensureDir(agentDir);
|
|
57
|
+
await writeText(memoryFile, template);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
main().catch(() => {
|
|
61
|
+
process.exitCode = 0;
|
|
62
|
+
});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Postinstall mirror of src/utils/paths.ts expandHomePath — keep in sync. */
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
|
|
5
|
+
export function expandHomePath(input) {
|
|
6
|
+
const trimmed = input.trim();
|
|
7
|
+
if (trimmed === "~") return homedir();
|
|
8
|
+
if (trimmed.startsWith("~/") || trimmed.startsWith("~\\")) {
|
|
9
|
+
return join(homedir(), trimmed.slice(2));
|
|
10
|
+
}
|
|
11
|
+
return trimmed;
|
|
12
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Postinstall-safe fs helpers when dist/ is not built yet.
|
|
3
|
+
* Path expansion: scripts/path-utils.mjs expandHomePath (mirrors src/utils/paths.ts).
|
|
4
|
+
* After build, scripts/postinstall.mjs prefers `pi-memory init` (compiled src/utils/fs.ts).
|
|
5
|
+
*/
|
|
6
|
+
import { expandHomePath } from "./path-utils.mjs";
|
|
7
|
+
import { mkdirSync } from "node:fs";
|
|
8
|
+
import { appendFile, mkdir, readFile, writeFile } from "node:fs/promises";
|
|
9
|
+
import { basename, dirname, join } from "node:path";
|
|
10
|
+
|
|
11
|
+
export { expandHomePath };
|
|
12
|
+
|
|
13
|
+
export function joinPath(...segments) {
|
|
14
|
+
return join(...segments);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function pathDirname(filePath) {
|
|
18
|
+
return dirname(filePath);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function isWindows() {
|
|
22
|
+
return process.platform === "win32";
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export function mkdirOptions() {
|
|
26
|
+
if (isWindows()) return { recursive: true };
|
|
27
|
+
return { recursive: true, mode: 0o700 };
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function isENOENT(error) {
|
|
31
|
+
return error?.code === "ENOENT";
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export async function ensureDir(dirPath) {
|
|
35
|
+
await mkdir(expandHomePath(dirPath), mkdirOptions());
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export function ensureDirSync(dirPath) {
|
|
39
|
+
mkdirSync(expandHomePath(dirPath), mkdirOptions());
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export async function readText(filePath) {
|
|
43
|
+
try {
|
|
44
|
+
return await readFile(expandHomePath(filePath), "utf8");
|
|
45
|
+
} catch (error) {
|
|
46
|
+
if (isENOENT(error)) return "";
|
|
47
|
+
throw error;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export async function writeText(filePath, content) {
|
|
52
|
+
const resolved = expandHomePath(filePath);
|
|
53
|
+
await ensureDir(dirname(resolved));
|
|
54
|
+
await writeFile(resolved, content, "utf8");
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export async function appendText(filePath, content) {
|
|
58
|
+
const resolved = expandHomePath(filePath);
|
|
59
|
+
await ensureDir(dirname(resolved));
|
|
60
|
+
await appendFile(resolved, content, "utf8");
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export function pathBasename(filePath) {
|
|
64
|
+
return basename(filePath);
|
|
65
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Prefer compiled `pi-memory init` when dist exists; otherwise pre-build JS fallback.
|
|
4
|
+
*/
|
|
5
|
+
import { existsSync } from "node:fs";
|
|
6
|
+
import { spawnSync } from "node:child_process";
|
|
7
|
+
import { dirname, join } from "node:path";
|
|
8
|
+
import { fileURLToPath } from "node:url";
|
|
9
|
+
|
|
10
|
+
const packageRoot = join(dirname(fileURLToPath(import.meta.url)), "..");
|
|
11
|
+
const cli = join(packageRoot, "dist", "cli.js");
|
|
12
|
+
|
|
13
|
+
if (existsSync(cli)) {
|
|
14
|
+
spawnSync(process.execPath, [cli, "init"], { cwd: packageRoot, stdio: "ignore" });
|
|
15
|
+
} else {
|
|
16
|
+
await import("./init-memory-workspace.mjs");
|
|
17
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
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
|
+
import type { Embedder } from "./types.js";
|
|
7
|
+
|
|
8
|
+
let cachedEmbedder: Embedder | undefined;
|
|
9
|
+
|
|
10
|
+
export function createEmbedder(env = readPiMemoryEnv()): Embedder {
|
|
11
|
+
switch (env.embedder) {
|
|
12
|
+
case "openai": {
|
|
13
|
+
if (!env.openaiApiKey) {
|
|
14
|
+
throw new Error("PI_MEMORY_EMBEDDER=openai requires PI_MEMORY_OPENAI_API_KEY or OPENAI_API_KEY");
|
|
15
|
+
}
|
|
16
|
+
const dim = resolveEmbedDim(env.openaiEmbedModel, env.embedDimOverride);
|
|
17
|
+
return createOpenAiEmbedder({
|
|
18
|
+
apiKey: env.openaiApiKey,
|
|
19
|
+
model: env.openaiEmbedModel,
|
|
20
|
+
dim,
|
|
21
|
+
timeoutMs: env.httpTimeoutMs,
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
case "ollama": {
|
|
25
|
+
const dim = resolveEmbedDim(env.ollamaEmbedModel, env.embedDimOverride);
|
|
26
|
+
return createOllamaEmbedder({
|
|
27
|
+
baseUrl: env.ollamaBaseUrl,
|
|
28
|
+
model: env.ollamaEmbedModel,
|
|
29
|
+
dim,
|
|
30
|
+
timeoutMs: env.httpTimeoutMs,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
default: {
|
|
34
|
+
const dim = env.embedDimOverride ?? DEFAULT_HASH_EMBED_DIM;
|
|
35
|
+
return createHashEmbedder(dim);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export function getEmbedder(): Embedder {
|
|
41
|
+
cachedEmbedder ??= createEmbedder();
|
|
42
|
+
return cachedEmbedder;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/** @internal test hook */
|
|
46
|
+
export function resetEmbedderForTests(): void {
|
|
47
|
+
cachedEmbedder = undefined;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export type { Embedder } from "./types.js";
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
|
|
3
|
+
import type { Embedder } from "./types.js";
|
|
4
|
+
import { normalizeEmbedding } from "./normalize.js";
|
|
5
|
+
|
|
6
|
+
export function createHashEmbedder(dim: number): Embedder {
|
|
7
|
+
const embedSync = (text: string): Float32Array => {
|
|
8
|
+
const vec = new Float32Array(dim);
|
|
9
|
+
const digest = createHash("sha256").update(text).digest();
|
|
10
|
+
for (let i = 0; i < dim; i++) {
|
|
11
|
+
const byte = digest[i % digest.length]!;
|
|
12
|
+
const sign = digest[(i + 7) % digest.length]! & 1 ? 1 : -1;
|
|
13
|
+
vec[i] = sign * (byte / 255);
|
|
14
|
+
}
|
|
15
|
+
return normalizeEmbedding(vec);
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
return {
|
|
19
|
+
provider: "hash",
|
|
20
|
+
model: "hash/dev",
|
|
21
|
+
dim,
|
|
22
|
+
async embed(text) {
|
|
23
|
+
return embedSync(text);
|
|
24
|
+
},
|
|
25
|
+
async embedBatch(texts) {
|
|
26
|
+
return texts.map(embedSync);
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export function normalizeEmbedding(vec: Float32Array): Float32Array {
|
|
2
|
+
let norm = 0;
|
|
3
|
+
for (let i = 0; i < vec.length; i++) norm += vec[i]! * vec[i]!;
|
|
4
|
+
norm = Math.sqrt(norm) || 1;
|
|
5
|
+
for (let i = 0; i < vec.length; i++) vec[i]! /= norm;
|
|
6
|
+
return vec;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export function assertEmbeddingDim(embedding: Float32Array, expectedDim: number, label: string): void {
|
|
10
|
+
if (embedding.length !== expectedDim) {
|
|
11
|
+
throw new Error(`${label} dimension mismatch: expected ${expectedDim}, got ${embedding.length}`);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { postJson } from "../http.js";
|
|
2
|
+
import { assertEmbeddingDim, normalizeEmbedding } from "./normalize.js";
|
|
3
|
+
import type { Embedder } from "./types.js";
|
|
4
|
+
|
|
5
|
+
type OllamaEmbedResponse = {
|
|
6
|
+
model: string;
|
|
7
|
+
embeddings: number[][];
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
function joinUrl(baseUrl: string, path: string): string {
|
|
11
|
+
return `${baseUrl.replace(/\/+$/, "")}${path}`;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export function createOllamaEmbedder(opts: {
|
|
15
|
+
baseUrl: string;
|
|
16
|
+
model: string;
|
|
17
|
+
dim: number;
|
|
18
|
+
timeoutMs: number;
|
|
19
|
+
}): Embedder {
|
|
20
|
+
const url = joinUrl(opts.baseUrl, "/api/embed");
|
|
21
|
+
|
|
22
|
+
const embedRemote = async (texts: string[]): Promise<Float32Array[]> => {
|
|
23
|
+
const json = await postJson<OllamaEmbedResponse>(
|
|
24
|
+
url,
|
|
25
|
+
{ model: opts.model, input: texts.length === 1 ? texts[0] : texts },
|
|
26
|
+
{ timeoutMs: opts.timeoutMs },
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
return json.embeddings.map((row, index) => {
|
|
30
|
+
const embedding = normalizeEmbedding(new Float32Array(row));
|
|
31
|
+
assertEmbeddingDim(embedding, opts.dim, `Ollama ${opts.model} row ${index}`);
|
|
32
|
+
return embedding;
|
|
33
|
+
});
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
return {
|
|
37
|
+
provider: "ollama",
|
|
38
|
+
model: opts.model,
|
|
39
|
+
dim: opts.dim,
|
|
40
|
+
async embed(text) {
|
|
41
|
+
const [embedding] = await embedRemote([text]);
|
|
42
|
+
return embedding!;
|
|
43
|
+
},
|
|
44
|
+
async embedBatch(texts) {
|
|
45
|
+
if (texts.length === 0) return [];
|
|
46
|
+
return embedRemote(texts);
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { postJson } from "../http.js";
|
|
2
|
+
import { assertEmbeddingDim, normalizeEmbedding } from "./normalize.js";
|
|
3
|
+
import type { Embedder } from "./types.js";
|
|
4
|
+
|
|
5
|
+
type OpenAiEmbedResponse = {
|
|
6
|
+
data: Array<{ embedding: number[]; index: number }>;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
export function createOpenAiEmbedder(opts: {
|
|
10
|
+
apiKey: string;
|
|
11
|
+
model: string;
|
|
12
|
+
dim: number;
|
|
13
|
+
timeoutMs: number;
|
|
14
|
+
}): Embedder {
|
|
15
|
+
const embedRemote = async (texts: string[]): Promise<Float32Array[]> => {
|
|
16
|
+
const json = await postJson<OpenAiEmbedResponse>(
|
|
17
|
+
"https://api.openai.com/v1/embeddings",
|
|
18
|
+
{ model: opts.model, input: texts },
|
|
19
|
+
{
|
|
20
|
+
headers: { Authorization: `Bearer ${opts.apiKey}` },
|
|
21
|
+
timeoutMs: opts.timeoutMs,
|
|
22
|
+
},
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
return json.data
|
|
26
|
+
.sort((a, b) => a.index - b.index)
|
|
27
|
+
.map((row) => {
|
|
28
|
+
const embedding = normalizeEmbedding(new Float32Array(row.embedding));
|
|
29
|
+
assertEmbeddingDim(embedding, opts.dim, `OpenAI ${opts.model}`);
|
|
30
|
+
return embedding;
|
|
31
|
+
});
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
return {
|
|
35
|
+
provider: "openai",
|
|
36
|
+
model: opts.model,
|
|
37
|
+
dim: opts.dim,
|
|
38
|
+
async embed(text) {
|
|
39
|
+
const [embedding] = await embedRemote([text]);
|
|
40
|
+
return embedding!;
|
|
41
|
+
},
|
|
42
|
+
async embedBatch(texts) {
|
|
43
|
+
return embedRemote(texts);
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export type PostJsonOptions = {
|
|
2
|
+
headers?: Record<string, string>;
|
|
3
|
+
timeoutMs?: number;
|
|
4
|
+
signal?: AbortSignal;
|
|
5
|
+
};
|
|
6
|
+
|
|
7
|
+
export class HttpRequestError extends Error {
|
|
8
|
+
constructor(
|
|
9
|
+
readonly url: string,
|
|
10
|
+
readonly status: number,
|
|
11
|
+
readonly body: string,
|
|
12
|
+
) {
|
|
13
|
+
super(`${url} failed (${status}): ${body}`);
|
|
14
|
+
this.name = "HttpRequestError";
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export async function postJson<T>(
|
|
19
|
+
url: string,
|
|
20
|
+
body: unknown,
|
|
21
|
+
opts: PostJsonOptions = {},
|
|
22
|
+
): Promise<T> {
|
|
23
|
+
const timeoutMs = opts.timeoutMs ?? 30_000;
|
|
24
|
+
const signal = opts.signal ?? AbortSignal.timeout(timeoutMs);
|
|
25
|
+
|
|
26
|
+
const res = await fetch(url, {
|
|
27
|
+
method: "POST",
|
|
28
|
+
headers: {
|
|
29
|
+
"Content-Type": "application/json",
|
|
30
|
+
...opts.headers,
|
|
31
|
+
},
|
|
32
|
+
body: JSON.stringify(body),
|
|
33
|
+
signal,
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
const text = await res.text();
|
|
37
|
+
if (!res.ok) {
|
|
38
|
+
throw new HttpRequestError(url, res.status, text);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return JSON.parse(text) as T;
|
|
42
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export { HttpRequestError, postJson, type PostJsonOptions } from "./http.js";
|
|
2
|
+
export {
|
|
3
|
+
createEmbedder,
|
|
4
|
+
getEmbedder,
|
|
5
|
+
resetEmbedderForTests,
|
|
6
|
+
type Embedder,
|
|
7
|
+
} from "./embed/factory.js";
|
|
8
|
+
export {
|
|
9
|
+
createLlmClient,
|
|
10
|
+
createOllamaLlmClient,
|
|
11
|
+
createOpenAICompatLlmClient,
|
|
12
|
+
createPiLlmClient,
|
|
13
|
+
createStandaloneLlmClient,
|
|
14
|
+
parseModelSpec,
|
|
15
|
+
type LlmClient,
|
|
16
|
+
} from "./llm/index.js";
|