@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
|
@@ -1,233 +0,0 @@
|
|
|
1
|
-
import { complete, getEnvApiKey, getModels } from "@earendil-works/pi-ai/compat";
|
|
2
|
-
import type { Api, Model, ProviderEnv, ToolCall } from "@earendil-works/pi-ai";
|
|
3
|
-
import type { ExtensionContext } from "@earendil-works/pi-coding-agent";
|
|
4
|
-
import { Type } from "typebox";
|
|
5
|
-
|
|
6
|
-
import {
|
|
7
|
-
COMPILE_MEMORY_INTENTS_PARAMETERS,
|
|
8
|
-
MEMORY_HELPER_TOOL_NAME,
|
|
9
|
-
type CompileMemoryIntentsResult,
|
|
10
|
-
type MemoryHelperLLM,
|
|
11
|
-
} from "../preflight/detectIntents.js";
|
|
12
|
-
import type { LLMClient } from "../trainer/llmExtractor.js";
|
|
13
|
-
|
|
14
|
-
export const DEFAULT_HELPER_PROVIDER = "deepseek";
|
|
15
|
-
export const DEFAULT_HELPER_MODEL = "deepseek-v4-flash";
|
|
16
|
-
|
|
17
|
-
const CompileMemoryIntentsParams = Type.Unsafe(COMPILE_MEMORY_INTENTS_PARAMETERS);
|
|
18
|
-
|
|
19
|
-
export function parseModelSpec(
|
|
20
|
-
spec: string | boolean | undefined,
|
|
21
|
-
defaultProvider = DEFAULT_HELPER_PROVIDER,
|
|
22
|
-
defaultModelId = DEFAULT_HELPER_MODEL,
|
|
23
|
-
): { provider: string; modelId: string } {
|
|
24
|
-
if (typeof spec !== "string" || !spec.trim()) {
|
|
25
|
-
return { provider: defaultProvider, modelId: defaultModelId };
|
|
26
|
-
}
|
|
27
|
-
const trimmed = spec.trim();
|
|
28
|
-
const slash = trimmed.indexOf("/");
|
|
29
|
-
if (slash === -1) {
|
|
30
|
-
return { provider: defaultProvider, modelId: trimmed };
|
|
31
|
-
}
|
|
32
|
-
return {
|
|
33
|
-
provider: trimmed.slice(0, slash),
|
|
34
|
-
modelId: trimmed.slice(slash + 1),
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
async function resolveModelAuth(
|
|
39
|
-
ctx: ExtensionContext,
|
|
40
|
-
provider: string,
|
|
41
|
-
modelId: string,
|
|
42
|
-
): Promise<{ model: Model<Api>; apiKey: string; headers?: Record<string, string>; env?: ProviderEnv } | null> {
|
|
43
|
-
const model = ctx.modelRegistry.find(provider, modelId);
|
|
44
|
-
if (!model) return null;
|
|
45
|
-
|
|
46
|
-
const auth = await ctx.modelRegistry.getApiKeyAndHeaders(model);
|
|
47
|
-
if (!auth.ok || !auth.apiKey) return null;
|
|
48
|
-
|
|
49
|
-
return {
|
|
50
|
-
model,
|
|
51
|
-
apiKey: auth.apiKey,
|
|
52
|
-
headers: auth.headers,
|
|
53
|
-
env: auth.env,
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
function extractTextFromResponse(content: Array<{ type: string; text?: string }>): string {
|
|
58
|
-
return content
|
|
59
|
-
.filter((block): block is { type: "text"; text: string } => block.type === "text")
|
|
60
|
-
.map((block) => block.text)
|
|
61
|
-
.join("\n");
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
function findToolCall(
|
|
65
|
-
content: Array<{ type: string; name?: string; arguments?: Record<string, unknown> }>,
|
|
66
|
-
toolName: string,
|
|
67
|
-
): ToolCall | null {
|
|
68
|
-
for (const block of content) {
|
|
69
|
-
if (block.type === "toolCall" && block.name === toolName && block.arguments) {
|
|
70
|
-
return block as ToolCall;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
return null;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
function buildMemoryHelperLLM(
|
|
77
|
-
resolved: NonNullable<Awaited<ReturnType<typeof resolveModelAuth>>>,
|
|
78
|
-
): MemoryHelperLLM {
|
|
79
|
-
return {
|
|
80
|
-
async compileIntents(text: string, signal?: AbortSignal): Promise<CompileMemoryIntentsResult> {
|
|
81
|
-
const response = await complete(
|
|
82
|
-
resolved.model,
|
|
83
|
-
{
|
|
84
|
-
messages: [
|
|
85
|
-
{
|
|
86
|
-
role: "user",
|
|
87
|
-
content: [
|
|
88
|
-
{
|
|
89
|
-
type: "text",
|
|
90
|
-
text: `Analyze whether the user message requires recalling private episodic memory.\n\n<message>\n${text}\n</message>`,
|
|
91
|
-
},
|
|
92
|
-
],
|
|
93
|
-
timestamp: Date.now(),
|
|
94
|
-
},
|
|
95
|
-
],
|
|
96
|
-
tools: [
|
|
97
|
-
{
|
|
98
|
-
name: MEMORY_HELPER_TOOL_NAME,
|
|
99
|
-
description:
|
|
100
|
-
"Decide whether to recall private episodic memory and compile structured query intents.",
|
|
101
|
-
parameters: CompileMemoryIntentsParams,
|
|
102
|
-
},
|
|
103
|
-
],
|
|
104
|
-
},
|
|
105
|
-
{
|
|
106
|
-
apiKey: resolved.apiKey,
|
|
107
|
-
headers: resolved.headers,
|
|
108
|
-
env: resolved.env,
|
|
109
|
-
signal,
|
|
110
|
-
toolChoice: { type: "tool", name: MEMORY_HELPER_TOOL_NAME },
|
|
111
|
-
},
|
|
112
|
-
);
|
|
113
|
-
|
|
114
|
-
const toolCall = findToolCall(response.content, MEMORY_HELPER_TOOL_NAME);
|
|
115
|
-
if (toolCall?.arguments) {
|
|
116
|
-
return toolCall.arguments as CompileMemoryIntentsResult;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
const raw = extractTextFromResponse(response.content);
|
|
120
|
-
if (!raw.trim()) {
|
|
121
|
-
return { should_recall: false, intents: [] };
|
|
122
|
-
}
|
|
123
|
-
return JSON.parse(raw) as CompileMemoryIntentsResult;
|
|
124
|
-
},
|
|
125
|
-
};
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
/** Resolve helper LLM when model + auth are available; otherwise null (regex-only preflight). */
|
|
129
|
-
export async function resolveMemoryHelperLLM(
|
|
130
|
-
ctx: ExtensionContext,
|
|
131
|
-
modelSpec: string | boolean | undefined,
|
|
132
|
-
): Promise<MemoryHelperLLM | null> {
|
|
133
|
-
const { provider, modelId } = parseModelSpec(modelSpec);
|
|
134
|
-
const resolved = await resolveModelAuth(ctx, provider, modelId);
|
|
135
|
-
if (!resolved) return null;
|
|
136
|
-
return buildMemoryHelperLLM(resolved);
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
/** @alias resolveMemoryHelperLLM */
|
|
140
|
-
export const createMemoryHelperLLM = resolveMemoryHelperLLM;
|
|
141
|
-
|
|
142
|
-
export function createPiLLMClient(
|
|
143
|
-
ctx: ExtensionContext,
|
|
144
|
-
modelSpec: string | boolean | undefined,
|
|
145
|
-
): LLMClient | null {
|
|
146
|
-
const { provider, modelId } = parseModelSpec(modelSpec);
|
|
147
|
-
|
|
148
|
-
return {
|
|
149
|
-
async complete(prompt: string): Promise<string> {
|
|
150
|
-
const resolved = await resolveModelAuth(ctx, provider, modelId);
|
|
151
|
-
if (!resolved) {
|
|
152
|
-
throw new Error(`LLM model not available: ${provider}/${modelId}`);
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
const response = await complete(
|
|
156
|
-
resolved.model,
|
|
157
|
-
{
|
|
158
|
-
messages: [
|
|
159
|
-
{
|
|
160
|
-
role: "user",
|
|
161
|
-
content: [{ type: "text", text: prompt }],
|
|
162
|
-
timestamp: Date.now(),
|
|
163
|
-
},
|
|
164
|
-
],
|
|
165
|
-
},
|
|
166
|
-
{
|
|
167
|
-
apiKey: resolved.apiKey,
|
|
168
|
-
headers: resolved.headers,
|
|
169
|
-
env: resolved.env,
|
|
170
|
-
maxTokens: 8192,
|
|
171
|
-
},
|
|
172
|
-
);
|
|
173
|
-
|
|
174
|
-
const text = extractTextFromResponse(response.content);
|
|
175
|
-
if (!text.trim()) {
|
|
176
|
-
throw new Error("LLM response was empty");
|
|
177
|
-
}
|
|
178
|
-
return text;
|
|
179
|
-
},
|
|
180
|
-
};
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
/** Standalone LLM client for CLI usage without ExtensionContext. */
|
|
184
|
-
export function createStandaloneLLMClient(
|
|
185
|
-
modelSpec?: string,
|
|
186
|
-
env: NodeJS.ProcessEnv = process.env,
|
|
187
|
-
): LLMClient {
|
|
188
|
-
const { provider, modelId } = parseModelSpec(modelSpec);
|
|
189
|
-
const providerEnv = toProviderEnv(env);
|
|
190
|
-
const model = getModels(provider as Parameters<typeof getModels>[0]).find((m) => m.id === modelId);
|
|
191
|
-
if (!model) {
|
|
192
|
-
throw new Error(`Model not found: ${provider}/${modelId}`);
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
const apiKey = getEnvApiKey(provider, providerEnv);
|
|
196
|
-
if (!apiKey) {
|
|
197
|
-
throw new Error(`No API key for ${provider} — set the provider env var or use regex extractor`);
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
return {
|
|
201
|
-
async complete(prompt: string): Promise<string> {
|
|
202
|
-
const response = await complete(
|
|
203
|
-
model,
|
|
204
|
-
{
|
|
205
|
-
messages: [
|
|
206
|
-
{
|
|
207
|
-
role: "user",
|
|
208
|
-
content: [{ type: "text", text: prompt }],
|
|
209
|
-
timestamp: Date.now(),
|
|
210
|
-
},
|
|
211
|
-
],
|
|
212
|
-
},
|
|
213
|
-
{
|
|
214
|
-
apiKey,
|
|
215
|
-
maxTokens: 8192,
|
|
216
|
-
env: providerEnv,
|
|
217
|
-
},
|
|
218
|
-
);
|
|
219
|
-
|
|
220
|
-
const text = extractTextFromResponse(response.content);
|
|
221
|
-
if (!text.trim()) {
|
|
222
|
-
throw new Error("LLM response was empty");
|
|
223
|
-
}
|
|
224
|
-
return text;
|
|
225
|
-
},
|
|
226
|
-
};
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
function toProviderEnv(env: NodeJS.ProcessEnv): ProviderEnv {
|
|
230
|
-
return Object.fromEntries(
|
|
231
|
-
Object.entries(env).filter((entry): entry is [string, string] => entry[1] !== undefined),
|
|
232
|
-
);
|
|
233
|
-
}
|
package/src/bundle/install.ts
DELETED
|
@@ -1,206 +0,0 @@
|
|
|
1
|
-
import { createHash } from "node:crypto";
|
|
2
|
-
import fs from "node:fs/promises";
|
|
3
|
-
import path from "node:path";
|
|
4
|
-
|
|
5
|
-
import type { BundleManifest } from "../sidecar/bundle.js";
|
|
6
|
-
|
|
7
|
-
export interface InstallBundleOptions {
|
|
8
|
-
bundleRoot: string;
|
|
9
|
-
sourceDir: string;
|
|
10
|
-
/** Number of old bundles to keep after install (default 3). */
|
|
11
|
-
retain?: number;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export interface InstallBundleResult {
|
|
15
|
-
bundle_ts: string;
|
|
16
|
-
bundle_version: string;
|
|
17
|
-
installed_dir: string;
|
|
18
|
-
files_copied: number;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Enforces [0.4.0, 0.7.0) — producers guarantee additive minor bumps in this
|
|
23
|
-
* range; breaking schema changes move to 0.7.0+ to trip this gate.
|
|
24
|
-
* Ported from Kocoro internal/memory/bundle.go versionInRange.
|
|
25
|
-
*/
|
|
26
|
-
export function versionInRange(v: string): boolean {
|
|
27
|
-
const parts = v.split(".");
|
|
28
|
-
if (parts.length !== 3) return false;
|
|
29
|
-
const [maj, min, pat] = parts.map(Number);
|
|
30
|
-
if (maj !== 0 || isNaN(min!) || isNaN(pat!)) return false;
|
|
31
|
-
if (min! < 4 || min! >= 7) return false;
|
|
32
|
-
return pat! >= 0;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Keep the newest `keep` bundle dirs plus the current symlink target.
|
|
37
|
-
* Best-effort — failures are silently ignored.
|
|
38
|
-
* Ported from Kocoro internal/memory/bundle.go Puller.retain.
|
|
39
|
-
*/
|
|
40
|
-
export async function retainBundles(bundleRoot: string, keep: number): Promise<void> {
|
|
41
|
-
const bundlesDir = path.join(bundleRoot, "bundles");
|
|
42
|
-
let names: string[];
|
|
43
|
-
try {
|
|
44
|
-
names = await fs.readdir(bundlesDir);
|
|
45
|
-
} catch {
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
const dirs: string[] = [];
|
|
49
|
-
for (const name of names) {
|
|
50
|
-
try {
|
|
51
|
-
const st = await fs.stat(path.join(bundlesDir, name));
|
|
52
|
-
if (st.isDirectory()) dirs.push(name);
|
|
53
|
-
} catch { /* skip unreadable */ }
|
|
54
|
-
}
|
|
55
|
-
dirs.sort().reverse();
|
|
56
|
-
if (dirs.length <= keep) return;
|
|
57
|
-
|
|
58
|
-
let currentTarget = "";
|
|
59
|
-
try {
|
|
60
|
-
const target = await fs.readlink(path.join(bundleRoot, "current"));
|
|
61
|
-
currentTarget = path.basename(target);
|
|
62
|
-
} catch { /* no current pointer */ }
|
|
63
|
-
|
|
64
|
-
const keepSet = new Set<string>();
|
|
65
|
-
for (let i = 0; i < Math.min(keep, dirs.length); i++) {
|
|
66
|
-
keepSet.add(dirs[i]!);
|
|
67
|
-
}
|
|
68
|
-
if (currentTarget) keepSet.add(currentTarget);
|
|
69
|
-
|
|
70
|
-
for (const d of dirs) {
|
|
71
|
-
if (!keepSet.has(d)) {
|
|
72
|
-
await fs.rm(path.join(bundlesDir, d), { recursive: true, force: true }).catch(() => {});
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* Path sandboxing rules from Kocoro bundle.go validateManifestPath (§4.2).
|
|
79
|
-
*/
|
|
80
|
-
export function validateManifestPath(rel: string, stagingDir: string): string | null {
|
|
81
|
-
if (!rel) return "empty path";
|
|
82
|
-
if (rel.includes("\0")) return "null byte in path";
|
|
83
|
-
if (path.isAbsolute(rel)) return "absolute path";
|
|
84
|
-
const cleaned = path.normalize(rel);
|
|
85
|
-
if (
|
|
86
|
-
cleaned === ".." ||
|
|
87
|
-
cleaned.startsWith(`..${path.sep}`) ||
|
|
88
|
-
cleaned.includes(`${path.sep}..`)
|
|
89
|
-
) {
|
|
90
|
-
return "contains parent traversal";
|
|
91
|
-
}
|
|
92
|
-
const abs = path.join(stagingDir, cleaned);
|
|
93
|
-
const cleanedAbs = path.normalize(abs);
|
|
94
|
-
const prefix = path.normalize(stagingDir) + path.sep;
|
|
95
|
-
if (!cleanedAbs.startsWith(prefix)) {
|
|
96
|
-
return "escapes staging dir";
|
|
97
|
-
}
|
|
98
|
-
return null;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
async function sha256File(filePath: string): Promise<string> {
|
|
102
|
-
const data = await fs.readFile(filePath);
|
|
103
|
-
return createHash("sha256").update(data).digest("hex");
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
/**
|
|
107
|
-
* Points <bundleRoot>/current at finalDir. On Windows uses a directory junction
|
|
108
|
-
* (unprivileged, no Developer Mode needed — os.Symlink would fail with
|
|
109
|
-
* ERROR_PRIVILEGE_NOT_HELD on stock hosts). On POSIX uses atomic tmp-symlink +
|
|
110
|
-
* rename. Ported from Kocoro bundle_link_{unix,windows}.go.
|
|
111
|
-
*/
|
|
112
|
-
async function swapCurrent(bundleRoot: string, finalDir: string): Promise<void> {
|
|
113
|
-
const currentLink = path.join(bundleRoot, "current");
|
|
114
|
-
|
|
115
|
-
if (process.platform === "win32") {
|
|
116
|
-
try { await fs.rm(currentLink, { recursive: true, force: true }); } catch { /* absent */ }
|
|
117
|
-
await fs.symlink(finalDir, currentLink, "junction");
|
|
118
|
-
return;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
const tmpLink = path.join(bundleRoot, "current.tmp");
|
|
122
|
-
try { await fs.unlink(tmpLink); } catch { /* absent */ }
|
|
123
|
-
await fs.symlink(finalDir, tmpLink);
|
|
124
|
-
await fs.rename(tmpLink, currentLink);
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
/**
|
|
128
|
-
* Install a local bundle directory into bundleRoot (staging → bundles/<ts> → current).
|
|
129
|
-
* Verifies per-file sha256 when manifest lists hashes.
|
|
130
|
-
*/
|
|
131
|
-
export async function installBundle(
|
|
132
|
-
opts: InstallBundleOptions,
|
|
133
|
-
): Promise<InstallBundleResult> {
|
|
134
|
-
const sourceDir = path.resolve(opts.sourceDir);
|
|
135
|
-
const bundleRoot = path.resolve(opts.bundleRoot);
|
|
136
|
-
|
|
137
|
-
const manifestPath = path.join(sourceDir, "manifest.json");
|
|
138
|
-
const raw = await fs.readFile(manifestPath, "utf8");
|
|
139
|
-
const manifest = JSON.parse(raw) as BundleManifest;
|
|
140
|
-
|
|
141
|
-
if (!manifest.bundle_ts?.trim()) {
|
|
142
|
-
throw new Error("manifest missing bundle_ts");
|
|
143
|
-
}
|
|
144
|
-
if (!versionInRange(manifest.bundle_version ?? "")) {
|
|
145
|
-
throw new Error(
|
|
146
|
-
`bundle_version "${manifest.bundle_version}" outside supported range [0.4.0, 0.7.0)`,
|
|
147
|
-
);
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
await fs.mkdir(bundleRoot, { recursive: true, mode: 0o700 });
|
|
151
|
-
|
|
152
|
-
const staging = path.join(bundleRoot, "staging", manifest.bundle_ts);
|
|
153
|
-
await fs.rm(staging, { recursive: true, force: true });
|
|
154
|
-
await fs.mkdir(staging, { recursive: true, mode: 0o700 });
|
|
155
|
-
|
|
156
|
-
let filesCopied = 0;
|
|
157
|
-
for (const f of manifest.files ?? []) {
|
|
158
|
-
const err = validateManifestPath(f.path, staging);
|
|
159
|
-
if (err) {
|
|
160
|
-
await fs.rm(staging, { recursive: true, force: true });
|
|
161
|
-
throw new Error(`unsafe manifest path ${f.path}: ${err}`);
|
|
162
|
-
}
|
|
163
|
-
const src = path.join(sourceDir, path.normalize(f.path));
|
|
164
|
-
const dest = path.join(staging, path.normalize(f.path));
|
|
165
|
-
await fs.mkdir(path.dirname(dest), { recursive: true, mode: 0o700 });
|
|
166
|
-
await fs.copyFile(src, dest, fs.constants.COPYFILE_EXCL).catch(async () => {
|
|
167
|
-
await fs.copyFile(src, dest);
|
|
168
|
-
});
|
|
169
|
-
|
|
170
|
-
if (f.sha256) {
|
|
171
|
-
const got = await sha256File(dest);
|
|
172
|
-
if (got !== f.sha256) {
|
|
173
|
-
await fs.rm(staging, { recursive: true, force: true });
|
|
174
|
-
throw new Error(`sha256 mismatch on ${f.path}: got ${got} want ${f.sha256}`);
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
filesCopied++;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
// Copy manifest itself if not listed in files[]
|
|
181
|
-
const manifestDest = path.join(staging, "manifest.json");
|
|
182
|
-
try {
|
|
183
|
-
await fs.access(manifestDest);
|
|
184
|
-
} catch {
|
|
185
|
-
await fs.copyFile(manifestPath, manifestDest);
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
const bundlesDir = path.join(bundleRoot, "bundles");
|
|
189
|
-
await fs.mkdir(bundlesDir, { recursive: true, mode: 0o700 });
|
|
190
|
-
const finalDir = path.join(bundlesDir, manifest.bundle_ts);
|
|
191
|
-
await fs.rm(finalDir, { recursive: true, force: true });
|
|
192
|
-
await fs.rename(staging, finalDir);
|
|
193
|
-
await swapCurrent(bundleRoot, finalDir);
|
|
194
|
-
|
|
195
|
-
const keep = opts.retain ?? 3;
|
|
196
|
-
if (keep > 0) {
|
|
197
|
-
await retainBundles(bundleRoot, keep);
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
return {
|
|
201
|
-
bundle_ts: manifest.bundle_ts,
|
|
202
|
-
bundle_version: manifest.bundle_version,
|
|
203
|
-
installed_dir: finalDir,
|
|
204
|
-
files_copied: filesCopied,
|
|
205
|
-
};
|
|
206
|
-
}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import { LRUCache } from "lru-cache";
|
|
2
|
-
import type { QueryIntent } from "../types.js";
|
|
3
|
-
import type { RankedResult } from "../fallback/llmRerank.js";
|
|
4
|
-
import type { SessionSearchHit } from "../fallback/sessionSearch.js";
|
|
5
|
-
|
|
6
|
-
const INTENT_TTL_MS = 15 * 60_000;
|
|
7
|
-
const RERANK_TTL_MS = 15 * 60_000;
|
|
8
|
-
const NEGATIVE_TTL_MS = 60_000;
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* In-process LRU + TTL caches for pi-memory.
|
|
12
|
-
*
|
|
13
|
-
* - intentCache : helper-LLM compile_memory_intents results, keyed by
|
|
14
|
-
* normalised query text. TTL 15 min, LRU 128 entries.
|
|
15
|
-
* - rerankCache : LLM rerank results, keyed by query + hit fingerprint.
|
|
16
|
-
* TTL 15 min, LRU 256 entries.
|
|
17
|
-
* - negativeCache: queries that recently returned no usable context.
|
|
18
|
-
* TTL 60 s, max 512 entries.
|
|
19
|
-
*
|
|
20
|
-
* All three caches must be invalidated together (`invalidateMemoryCaches()`)
|
|
21
|
-
* after bundle reload so stale negative entries never block fresh graph data.
|
|
22
|
-
*/
|
|
23
|
-
export const intentCache = new LRUCache<string, QueryIntent[]>({
|
|
24
|
-
max: 128,
|
|
25
|
-
ttl: INTENT_TTL_MS,
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
export const rerankCache = new LRUCache<string, RankedResult[]>({
|
|
29
|
-
max: 256,
|
|
30
|
-
ttl: RERANK_TTL_MS,
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
export const negativeCache = new LRUCache<string, true>({
|
|
34
|
-
max: 512,
|
|
35
|
-
ttl: NEGATIVE_TTL_MS,
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
function normalizeQuery(query: string): string {
|
|
39
|
-
return query.trim();
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export function cacheKeyForIntents(query: string): string {
|
|
43
|
-
return normalizeQuery(query);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* Rerank cache key combines the query with a fingerprint of the hit set so
|
|
48
|
-
* different FTS results for the same query get their own entry.
|
|
49
|
-
*/
|
|
50
|
-
export function cacheKeyForRerank(query: string, hits: SessionSearchHit[]): string {
|
|
51
|
-
const hitIds = hits.map((h) => `${h.session_id}:${h.msg_index}`).join("|");
|
|
52
|
-
return `${normalizeQuery(query)}|${hitIds}`;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
export function isNegativeCached(query: string): boolean {
|
|
56
|
-
return negativeCache.has(cacheKeyForIntents(query));
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
export function setNegativeCache(query: string): void {
|
|
60
|
-
negativeCache.set(cacheKeyForIntents(query), true);
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
export function deleteNegativeCache(query: string): void {
|
|
64
|
-
negativeCache.delete(cacheKeyForIntents(query));
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
/** Clear all three caches. Call after bundle reload or session shutdown. */
|
|
68
|
-
export function invalidateMemoryCaches(): void {
|
|
69
|
-
intentCache.clear();
|
|
70
|
-
rerankCache.clear();
|
|
71
|
-
negativeCache.clear();
|
|
72
|
-
}
|
package/src/config.ts
DELETED
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import path from "node:path";
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
defaultBundleRoot,
|
|
5
|
-
defaultPiHome,
|
|
6
|
-
defaultSessionsDir,
|
|
7
|
-
defaultSocketPath,
|
|
8
|
-
expandPath,
|
|
9
|
-
} from "./paths.js";
|
|
10
|
-
|
|
11
|
-
export type MemoryProvider = "disabled" | "local" | "cloud";
|
|
12
|
-
|
|
13
|
-
export type ExtractorType = "regex" | "llm";
|
|
14
|
-
|
|
15
|
-
export interface TrainerConfig {
|
|
16
|
-
/** Which extractor to use (default "regex"). */
|
|
17
|
-
extractor: ExtractorType;
|
|
18
|
-
/** How many turns per LLM call when extractor is "llm" (default 10). */
|
|
19
|
-
llm_batch_size: number;
|
|
20
|
-
/** Auto-train interval: "1h"|"6h"|"12h"|"24h"|null (default null — disabled). */
|
|
21
|
-
auto_interval: string | null;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
export interface MemoryConfig {
|
|
25
|
-
provider: MemoryProvider;
|
|
26
|
-
tlmPath: string;
|
|
27
|
-
socketPath: string;
|
|
28
|
-
bundleRoot: string;
|
|
29
|
-
sidecarReadyTimeoutMs: number;
|
|
30
|
-
queryTimeoutMs: number;
|
|
31
|
-
clientRequestTimeoutMs: number;
|
|
32
|
-
sessionsDir: string;
|
|
33
|
-
memoryMdPaths: string[];
|
|
34
|
-
trainer: TrainerConfig;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export const defaultTrainerConfig: TrainerConfig = {
|
|
38
|
-
extractor: "regex",
|
|
39
|
-
llm_batch_size: 10,
|
|
40
|
-
auto_interval: null,
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
export function defaultMemoryConfig(
|
|
44
|
-
overrides: Partial<MemoryConfig> = {},
|
|
45
|
-
): MemoryConfig {
|
|
46
|
-
const { trainer: trainerOverrides, ...rest } = overrides;
|
|
47
|
-
return {
|
|
48
|
-
provider: "local",
|
|
49
|
-
tlmPath: "tlm",
|
|
50
|
-
socketPath: defaultSocketPath(),
|
|
51
|
-
bundleRoot: defaultBundleRoot(),
|
|
52
|
-
sidecarReadyTimeoutMs: 15_000,
|
|
53
|
-
queryTimeoutMs: 2_000,
|
|
54
|
-
clientRequestTimeoutMs: 5_000,
|
|
55
|
-
sessionsDir: defaultSessionsDir(),
|
|
56
|
-
memoryMdPaths: [path.join(defaultPiHome(), "MEMORY.md")],
|
|
57
|
-
trainer: { ...defaultTrainerConfig, ...trainerOverrides },
|
|
58
|
-
...rest,
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/** Normalize user-supplied paths after JSON/env load. */
|
|
63
|
-
export function normalizeMemoryConfig(
|
|
64
|
-
raw: Partial<MemoryConfig> & Record<string, unknown>,
|
|
65
|
-
): MemoryConfig {
|
|
66
|
-
const base = defaultMemoryConfig();
|
|
67
|
-
const rawTrainer = (raw.trainer ?? {}) as Partial<TrainerConfig>;
|
|
68
|
-
return {
|
|
69
|
-
provider: (raw.provider as MemoryProvider) ?? base.provider,
|
|
70
|
-
tlmPath: expandPath(String(raw.tlmPath ?? base.tlmPath)),
|
|
71
|
-
socketPath: expandPath(String(raw.socketPath ?? base.socketPath)),
|
|
72
|
-
bundleRoot: expandPath(String(raw.bundleRoot ?? base.bundleRoot)),
|
|
73
|
-
sidecarReadyTimeoutMs: Number(
|
|
74
|
-
raw.sidecarReadyTimeoutMs ?? base.sidecarReadyTimeoutMs,
|
|
75
|
-
),
|
|
76
|
-
queryTimeoutMs: Number(raw.queryTimeoutMs ?? base.queryTimeoutMs),
|
|
77
|
-
clientRequestTimeoutMs: Number(
|
|
78
|
-
raw.clientRequestTimeoutMs ?? base.clientRequestTimeoutMs,
|
|
79
|
-
),
|
|
80
|
-
sessionsDir: expandPath(String(raw.sessionsDir ?? base.sessionsDir)),
|
|
81
|
-
memoryMdPaths: Array.isArray(raw.memoryMdPaths)
|
|
82
|
-
? raw.memoryMdPaths.map((p) => expandPath(String(p)))
|
|
83
|
-
: base.memoryMdPaths,
|
|
84
|
-
trainer: {
|
|
85
|
-
extractor: (rawTrainer.extractor as ExtractorType) ?? base.trainer.extractor,
|
|
86
|
-
llm_batch_size: Number(rawTrainer.llm_batch_size ?? base.trainer.llm_batch_size),
|
|
87
|
-
auto_interval: rawTrainer.auto_interval !== undefined
|
|
88
|
-
? rawTrainer.auto_interval
|
|
89
|
-
: base.trainer.auto_interval,
|
|
90
|
-
},
|
|
91
|
-
};
|
|
92
|
-
}
|
package/src/errclass.ts
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { errorSubCode, type ResponseEnvelope } from "./types.js";
|
|
2
|
-
|
|
3
|
-
export type ErrorClass = "ok" | "retryable" | "permanent" | "unavailable";
|
|
4
|
-
|
|
5
|
-
export const ErrTransport = new Error("memory: transport failure");
|
|
6
|
-
|
|
7
|
-
export function classifyTransportError(err: unknown): ErrorClass {
|
|
8
|
-
return err == null ? "ok" : "unavailable";
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
/** Maps HTTP status + envelope → error class (Kocoro memory/errclass.go). */
|
|
12
|
-
export function classifyHTTP(
|
|
13
|
-
status: number,
|
|
14
|
-
env: ResponseEnvelope | null,
|
|
15
|
-
): ErrorClass {
|
|
16
|
-
if (status >= 200 && status < 300) return "ok";
|
|
17
|
-
const sub = env?.error ? errorSubCode(env.error) : "";
|
|
18
|
-
const code = env?.error?.code ?? "";
|
|
19
|
-
switch (status) {
|
|
20
|
-
case 400:
|
|
21
|
-
return "permanent";
|
|
22
|
-
case 401:
|
|
23
|
-
case 403:
|
|
24
|
-
return "permanent";
|
|
25
|
-
case 409:
|
|
26
|
-
return "retryable";
|
|
27
|
-
case 422:
|
|
28
|
-
return "permanent";
|
|
29
|
-
case 503:
|
|
30
|
-
if (code === "not_ready" || sub === "not_ready") return "unavailable";
|
|
31
|
-
return "permanent";
|
|
32
|
-
case 500:
|
|
33
|
-
return "retryable";
|
|
34
|
-
default:
|
|
35
|
-
return "retryable";
|
|
36
|
-
}
|
|
37
|
-
}
|
package/src/extension.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @deprecated Use `@chendpoc/pi-memory/extension` (pi-extension.ts) with real ExtensionAPI.
|
|
3
|
-
* Re-exports the Pi extension entry for backward compatibility.
|
|
4
|
-
*/
|
|
5
|
-
export { default, default as piMemoryExtension, getSharedMemoryService } from "./pi-extension.js";
|
|
6
|
-
export type { BeforeTurnHook, MemoryHelperLLM } from "./preflight/hook.js";
|
|
7
|
-
export { createBeforeTurnHook } from "./preflight/hook.js";
|
|
8
|
-
|
|
9
|
-
/** @deprecated Stub types kept for programmatic callers migrating off the old API. */
|
|
10
|
-
export interface PiExtensionAPI {
|
|
11
|
-
config?: Record<string, unknown>;
|
|
12
|
-
registerTool(tool: PiAgentTool): void;
|
|
13
|
-
onBeforeTurn?(hook: import("./preflight/hook.js").BeforeTurnHook): void;
|
|
14
|
-
onUnload?(fn: () => void | Promise<void>): void;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
/** @deprecated */
|
|
18
|
-
export interface PiAgentTool {
|
|
19
|
-
name: string;
|
|
20
|
-
description: string;
|
|
21
|
-
parameters: Record<string, unknown>;
|
|
22
|
-
execute(args: Record<string, unknown>, ctx?: { signal?: AbortSignal }): Promise<string>;
|
|
23
|
-
}
|
package/src/fallback/index.ts
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import type { FallbackQuery } from "../types.js";
|
|
2
|
-
import { memoryMdSnippet } from "./memoryMd.js";
|
|
3
|
-
import { sessionKeywordSearch } from "./sessionSearch.js";
|
|
4
|
-
|
|
5
|
-
export type { SessionSearchHit } from "./sessionSearch.js";
|
|
6
|
-
export { sessionKeywordSearch } from "./sessionSearch.js";
|
|
7
|
-
export { memoryMdSnippet } from "./memoryMd.js";
|
|
8
|
-
|
|
9
|
-
export interface FallbackOptions {
|
|
10
|
-
sessionsDir: string;
|
|
11
|
-
memoryMdPaths: string[];
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
/** Real fallback: session JSON keyword search + MEMORY.md grep. */
|
|
15
|
-
export function createFallbackQuery(opts: FallbackOptions): FallbackQuery {
|
|
16
|
-
return {
|
|
17
|
-
async sessionKeyword(query: string, limit: number) {
|
|
18
|
-
return sessionKeywordSearch(opts.sessionsDir, query, limit);
|
|
19
|
-
},
|
|
20
|
-
async memoryFileSnippet(query: string) {
|
|
21
|
-
return memoryMdSnippet(opts.memoryMdPaths, query);
|
|
22
|
-
},
|
|
23
|
-
};
|
|
24
|
-
}
|