abmind 0.0.1 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +34 -0
- package/LICENSE +190 -0
- package/README.md +191 -0
- package/dist/cli/abmind-backfill.d.ts +3 -0
- package/dist/cli/abmind-backfill.d.ts.map +1 -0
- package/dist/cli/abmind-backfill.js +64 -0
- package/dist/cli/abmind-backfill.js.map +1 -0
- package/dist/cli/abmind-backup.d.ts +5 -0
- package/dist/cli/abmind-backup.d.ts.map +1 -0
- package/dist/cli/abmind-backup.js +44 -0
- package/dist/cli/abmind-backup.js.map +1 -0
- package/dist/cli/abmind-bundle.d.ts +7 -0
- package/dist/cli/abmind-bundle.d.ts.map +1 -0
- package/dist/cli/abmind-bundle.js +17 -0
- package/dist/cli/abmind-bundle.js.map +1 -0
- package/dist/cli/abmind-edit.d.ts +10 -0
- package/dist/cli/abmind-edit.d.ts.map +1 -0
- package/dist/cli/abmind-edit.js +160 -0
- package/dist/cli/abmind-edit.js.map +1 -0
- package/dist/cli/abmind-embed.d.ts +3 -0
- package/dist/cli/abmind-embed.d.ts.map +1 -0
- package/dist/cli/abmind-embed.js +83 -0
- package/dist/cli/abmind-embed.js.map +1 -0
- package/dist/cli/abmind-expand.d.ts +6 -0
- package/dist/cli/abmind-expand.d.ts.map +1 -0
- package/dist/cli/abmind-expand.js +100 -0
- package/dist/cli/abmind-expand.js.map +1 -0
- package/dist/cli/abmind-hook-doctor.d.ts +8 -0
- package/dist/cli/abmind-hook-doctor.d.ts.map +1 -0
- package/dist/cli/abmind-hook-doctor.js +73 -0
- package/dist/cli/abmind-hook-doctor.js.map +1 -0
- package/dist/cli/abmind-hook-recall.d.ts +16 -0
- package/dist/cli/abmind-hook-recall.d.ts.map +1 -0
- package/dist/cli/abmind-hook-recall.js +123 -0
- package/dist/cli/abmind-hook-recall.js.map +1 -0
- package/dist/cli/abmind-hook-store.d.ts +17 -0
- package/dist/cli/abmind-hook-store.d.ts.map +1 -0
- package/dist/cli/abmind-hook-store.js +115 -0
- package/dist/cli/abmind-hook-store.js.map +1 -0
- package/dist/cli/abmind-hook-wakeup.d.ts +12 -0
- package/dist/cli/abmind-hook-wakeup.d.ts.map +1 -0
- package/dist/cli/abmind-hook-wakeup.js +143 -0
- package/dist/cli/abmind-hook-wakeup.js.map +1 -0
- package/dist/cli/abmind-ingest.d.ts +7 -0
- package/dist/cli/abmind-ingest.d.ts.map +1 -0
- package/dist/cli/abmind-ingest.js +96 -0
- package/dist/cli/abmind-ingest.js.map +1 -0
- package/dist/cli/abmind-install.d.ts +10 -0
- package/dist/cli/abmind-install.d.ts.map +1 -0
- package/dist/cli/abmind-install.js +240 -0
- package/dist/cli/abmind-install.js.map +1 -0
- package/dist/cli/abmind-mcp.d.ts +3 -0
- package/dist/cli/abmind-mcp.d.ts.map +1 -0
- package/dist/cli/abmind-mcp.js +26 -0
- package/dist/cli/abmind-mcp.js.map +1 -0
- package/dist/cli/abmind-memory-stats.d.ts +3 -0
- package/dist/cli/abmind-memory-stats.d.ts.map +1 -0
- package/dist/cli/abmind-memory-stats.js +45 -0
- package/dist/cli/abmind-memory-stats.js.map +1 -0
- package/dist/cli/abmind-migrate-openclaw.d.ts +12 -0
- package/dist/cli/abmind-migrate-openclaw.d.ts.map +1 -0
- package/dist/cli/abmind-migrate-openclaw.js +247 -0
- package/dist/cli/abmind-migrate-openclaw.js.map +1 -0
- package/dist/cli/abmind-recall.d.ts +8 -0
- package/dist/cli/abmind-recall.d.ts.map +1 -0
- package/dist/cli/abmind-recall.js +94 -0
- package/dist/cli/abmind-recall.js.map +1 -0
- package/dist/cli/abmind-reset.d.ts +11 -0
- package/dist/cli/abmind-reset.d.ts.map +1 -0
- package/dist/cli/abmind-reset.js +143 -0
- package/dist/cli/abmind-reset.js.map +1 -0
- package/dist/cli/abmind-restore.d.ts +5 -0
- package/dist/cli/abmind-restore.d.ts.map +1 -0
- package/dist/cli/abmind-restore.js +64 -0
- package/dist/cli/abmind-restore.js.map +1 -0
- package/dist/cli/abmind-retro-extract.d.ts +15 -0
- package/dist/cli/abmind-retro-extract.d.ts.map +1 -0
- package/dist/cli/abmind-retro-extract.js +113 -0
- package/dist/cli/abmind-retro-extract.js.map +1 -0
- package/dist/cli/abmind-rollback.d.ts +8 -0
- package/dist/cli/abmind-rollback.d.ts.map +1 -0
- package/dist/cli/abmind-rollback.js +76 -0
- package/dist/cli/abmind-rollback.js.map +1 -0
- package/dist/cli/abmind-secrets.d.ts +12 -0
- package/dist/cli/abmind-secrets.d.ts.map +1 -0
- package/dist/cli/abmind-secrets.js +83 -0
- package/dist/cli/abmind-secrets.js.map +1 -0
- package/dist/cli/abmind-sleep-apply.d.ts +3 -0
- package/dist/cli/abmind-sleep-apply.d.ts.map +1 -0
- package/dist/cli/abmind-sleep-apply.js +50 -0
- package/dist/cli/abmind-sleep-apply.js.map +1 -0
- package/dist/cli/abmind-sleep-report.d.ts +3 -0
- package/dist/cli/abmind-sleep-report.d.ts.map +1 -0
- package/dist/cli/abmind-sleep-report.js +40 -0
- package/dist/cli/abmind-sleep-report.js.map +1 -0
- package/dist/cli/abmind-sleep-state.d.ts +3 -0
- package/dist/cli/abmind-sleep-state.d.ts.map +1 -0
- package/dist/cli/abmind-sleep-state.js +33 -0
- package/dist/cli/abmind-sleep-state.js.map +1 -0
- package/dist/cli/abmind-sleep.d.ts +14 -0
- package/dist/cli/abmind-sleep.d.ts.map +1 -0
- package/dist/cli/abmind-sleep.js +186 -0
- package/dist/cli/abmind-sleep.js.map +1 -0
- package/dist/cli/abmind-status-runtime.d.ts +9 -0
- package/dist/cli/abmind-status-runtime.d.ts.map +1 -0
- package/dist/cli/abmind-status-runtime.js +132 -0
- package/dist/cli/abmind-status-runtime.js.map +1 -0
- package/dist/cli/abmind-status.d.ts +3 -0
- package/dist/cli/abmind-status.d.ts.map +1 -0
- package/dist/cli/abmind-status.js +45 -0
- package/dist/cli/abmind-status.js.map +1 -0
- package/dist/cli/abmind-store.d.ts +54 -0
- package/dist/cli/abmind-store.d.ts.map +1 -0
- package/dist/cli/abmind-store.js +251 -0
- package/dist/cli/abmind-store.js.map +1 -0
- package/dist/cli/abmind-update.d.ts +11 -0
- package/dist/cli/abmind-update.d.ts.map +1 -0
- package/dist/cli/abmind-update.js +160 -0
- package/dist/cli/abmind-update.js.map +1 -0
- package/dist/cli/abmind-wakeup.d.ts +3 -0
- package/dist/cli/abmind-wakeup.d.ts.map +1 -0
- package/dist/cli/abmind-wakeup.js +36 -0
- package/dist/cli/abmind-wakeup.js.map +1 -0
- package/dist/cli/abmind.d.ts +10 -0
- package/dist/cli/abmind.d.ts.map +1 -0
- package/dist/cli/abmind.js +100 -0
- package/dist/cli/abmind.js.map +1 -0
- package/dist/src/abm-v2-vocab.d.ts +10 -0
- package/dist/src/abm-v2-vocab.d.ts.map +1 -0
- package/dist/src/abm-v2-vocab.js +66 -0
- package/dist/src/abm-v2-vocab.js.map +1 -0
- package/dist/src/adapters/openclaw.d.ts +66 -0
- package/dist/src/adapters/openclaw.d.ts.map +1 -0
- package/dist/src/adapters/openclaw.js +97 -0
- package/dist/src/adapters/openclaw.js.map +1 -0
- package/dist/src/backend-factory.d.ts +9 -0
- package/dist/src/backend-factory.d.ts.map +1 -0
- package/dist/src/backend-factory.js +23 -0
- package/dist/src/backend-factory.js.map +1 -0
- package/dist/src/backup.d.ts +19 -0
- package/dist/src/backup.d.ts.map +1 -0
- package/dist/src/backup.js +191 -0
- package/dist/src/backup.js.map +1 -0
- package/dist/src/brain-patterns.d.ts +20 -0
- package/dist/src/brain-patterns.d.ts.map +1 -0
- package/dist/src/brain-patterns.js +72 -0
- package/dist/src/brain-patterns.js.map +1 -0
- package/dist/src/cli-entry.d.ts +10 -0
- package/dist/src/cli-entry.d.ts.map +1 -0
- package/dist/src/cli-entry.js +29 -0
- package/dist/src/cli-entry.js.map +1 -0
- package/dist/src/cli-flags.d.ts +29 -0
- package/dist/src/cli-flags.d.ts.map +1 -0
- package/dist/src/cli-flags.js +72 -0
- package/dist/src/cli-flags.js.map +1 -0
- package/dist/src/cli-runner-raw.d.ts +21 -0
- package/dist/src/cli-runner-raw.d.ts.map +1 -0
- package/dist/src/cli-runner-raw.js +41 -0
- package/dist/src/cli-runner-raw.js.map +1 -0
- package/dist/src/cli-runner.d.ts +26 -0
- package/dist/src/cli-runner.d.ts.map +1 -0
- package/dist/src/cli-runner.js +51 -0
- package/dist/src/cli-runner.js.map +1 -0
- package/dist/src/consolidation-search.d.ts +17 -0
- package/dist/src/consolidation-search.d.ts.map +1 -0
- package/dist/src/consolidation-search.js +83 -0
- package/dist/src/consolidation-search.js.map +1 -0
- package/dist/src/context-engine.d.ts +89 -0
- package/dist/src/context-engine.d.ts.map +1 -0
- package/dist/src/context-engine.js +216 -0
- package/dist/src/context-engine.js.map +1 -0
- package/dist/src/context-tier-renderer.d.ts +79 -0
- package/dist/src/context-tier-renderer.d.ts.map +1 -0
- package/dist/src/context-tier-renderer.js +223 -0
- package/dist/src/context-tier-renderer.js.map +1 -0
- package/dist/src/contradiction-checker.d.ts +16 -0
- package/dist/src/contradiction-checker.d.ts.map +1 -0
- package/dist/src/contradiction-checker.js +40 -0
- package/dist/src/contradiction-checker.js.map +1 -0
- package/dist/src/crypto.d.ts +15 -0
- package/dist/src/crypto.d.ts.map +1 -0
- package/dist/src/crypto.js +86 -0
- package/dist/src/crypto.js.map +1 -0
- package/dist/src/deploy-lib/cleanup.d.ts +38 -0
- package/dist/src/deploy-lib/cleanup.d.ts.map +1 -0
- package/dist/src/deploy-lib/cleanup.js +71 -0
- package/dist/src/deploy-lib/cleanup.js.map +1 -0
- package/dist/src/deploy-lib/index.d.ts +20 -0
- package/dist/src/deploy-lib/index.d.ts.map +1 -0
- package/dist/src/deploy-lib/index.js +20 -0
- package/dist/src/deploy-lib/index.js.map +1 -0
- package/dist/src/deploy-lib/lock.d.ts +37 -0
- package/dist/src/deploy-lib/lock.d.ts.map +1 -0
- package/dist/src/deploy-lib/lock.js +107 -0
- package/dist/src/deploy-lib/lock.js.map +1 -0
- package/dist/src/deploy-lib/manifest.d.ts +42 -0
- package/dist/src/deploy-lib/manifest.d.ts.map +1 -0
- package/dist/src/deploy-lib/manifest.js +38 -0
- package/dist/src/deploy-lib/manifest.js.map +1 -0
- package/dist/src/deploy-lib/paths.d.ts +29 -0
- package/dist/src/deploy-lib/paths.d.ts.map +1 -0
- package/dist/src/deploy-lib/paths.js +40 -0
- package/dist/src/deploy-lib/paths.js.map +1 -0
- package/dist/src/deploy-lib/releases.d.ts +52 -0
- package/dist/src/deploy-lib/releases.d.ts.map +1 -0
- package/dist/src/deploy-lib/releases.js +119 -0
- package/dist/src/deploy-lib/releases.js.map +1 -0
- package/dist/src/deploy-lib/safe-copy.d.ts +16 -0
- package/dist/src/deploy-lib/safe-copy.d.ts.map +1 -0
- package/dist/src/deploy-lib/safe-copy.js +32 -0
- package/dist/src/deploy-lib/safe-copy.js.map +1 -0
- package/dist/src/embedding-health.d.ts +12 -0
- package/dist/src/embedding-health.d.ts.map +1 -0
- package/dist/src/embedding-health.js +18 -0
- package/dist/src/embedding-health.js.map +1 -0
- package/dist/src/embedding-provider.d.ts +48 -0
- package/dist/src/embedding-provider.d.ts.map +1 -0
- package/dist/src/embedding-provider.js +145 -0
- package/dist/src/embedding-provider.js.map +1 -0
- package/dist/src/embedding-quantize.d.ts +11 -0
- package/dist/src/embedding-quantize.d.ts.map +1 -0
- package/dist/src/embedding-quantize.js +38 -0
- package/dist/src/embedding-quantize.js.map +1 -0
- package/dist/src/emotion-arc.d.ts +17 -0
- package/dist/src/emotion-arc.d.ts.map +1 -0
- package/dist/src/emotion-arc.js +62 -0
- package/dist/src/emotion-arc.js.map +1 -0
- package/dist/src/emotion-tagger.d.ts +8 -0
- package/dist/src/emotion-tagger.d.ts.map +1 -0
- package/dist/src/emotion-tagger.js +45 -0
- package/dist/src/emotion-tagger.js.map +1 -0
- package/dist/src/emotion-utils.d.ts +13 -0
- package/dist/src/emotion-utils.d.ts.map +1 -0
- package/dist/src/emotion-utils.js +76 -0
- package/dist/src/emotion-utils.js.map +1 -0
- package/dist/src/entity-graph.d.ts +33 -0
- package/dist/src/entity-graph.d.ts.map +1 -0
- package/dist/src/entity-graph.js +42 -0
- package/dist/src/entity-graph.js.map +1 -0
- package/dist/src/env-schema.d.ts +46 -0
- package/dist/src/env-schema.d.ts.map +1 -0
- package/dist/src/env-schema.js +93 -0
- package/dist/src/env-schema.js.map +1 -0
- package/dist/src/hook-helpers.d.ts +16 -0
- package/dist/src/hook-helpers.d.ts.map +1 -0
- package/dist/src/hook-helpers.js +64 -0
- package/dist/src/hook-helpers.js.map +1 -0
- package/dist/src/imemory-system.d.ts +138 -0
- package/dist/src/imemory-system.d.ts.map +1 -0
- package/dist/src/imemory-system.js +40 -0
- package/dist/src/imemory-system.js.map +1 -0
- package/dist/src/importance-flagger.d.ts +8 -0
- package/dist/src/importance-flagger.d.ts.map +1 -0
- package/dist/src/importance-flagger.js +24 -0
- package/dist/src/importance-flagger.js.map +1 -0
- package/dist/src/index.d.ts +79 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +79 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/ingest-pipeline.d.ts +32 -0
- package/dist/src/ingest-pipeline.d.ts.map +1 -0
- package/dist/src/ingest-pipeline.js +58 -0
- package/dist/src/ingest-pipeline.js.map +1 -0
- package/dist/src/injection-scanner.d.ts +16 -0
- package/dist/src/injection-scanner.d.ts.map +1 -0
- package/dist/src/injection-scanner.js +182 -0
- package/dist/src/injection-scanner.js.map +1 -0
- package/dist/src/local-time.d.ts +12 -0
- package/dist/src/local-time.d.ts.map +1 -0
- package/dist/src/local-time.js +23 -0
- package/dist/src/local-time.js.map +1 -0
- package/dist/src/maintenance-service.d.ts +46 -0
- package/dist/src/maintenance-service.d.ts.map +1 -0
- package/dist/src/maintenance-service.js +280 -0
- package/dist/src/maintenance-service.js.map +1 -0
- package/dist/src/mcp-server.d.ts +6 -0
- package/dist/src/mcp-server.d.ts.map +1 -0
- package/dist/src/mcp-server.js +50 -0
- package/dist/src/mcp-server.js.map +1 -0
- package/dist/src/media-sanitizer.d.ts +11 -0
- package/dist/src/media-sanitizer.d.ts.map +1 -0
- package/dist/src/media-sanitizer.js +56 -0
- package/dist/src/media-sanitizer.js.map +1 -0
- package/dist/src/mem-config-env.d.ts +18 -0
- package/dist/src/mem-config-env.d.ts.map +1 -0
- package/dist/src/mem-config-env.js +43 -0
- package/dist/src/mem-config-env.js.map +1 -0
- package/dist/src/mem-env.d.ts +5 -0
- package/dist/src/mem-env.d.ts.map +1 -0
- package/dist/src/mem-env.js +19 -0
- package/dist/src/mem-env.js.map +1 -0
- package/dist/src/mem-logger.d.ts +20 -0
- package/dist/src/mem-logger.d.ts.map +1 -0
- package/dist/src/mem-logger.js +24 -0
- package/dist/src/mem-logger.js.map +1 -0
- package/dist/src/mem-paths.d.ts +20 -0
- package/dist/src/mem-paths.d.ts.map +1 -0
- package/dist/src/mem-paths.js +43 -0
- package/dist/src/mem-paths.js.map +1 -0
- package/dist/src/mem-types.d.ts +157 -0
- package/dist/src/mem-types.d.ts.map +1 -0
- package/dist/src/mem-types.js +2 -0
- package/dist/src/mem-types.js.map +1 -0
- package/dist/src/memory-backend.d.ts +65 -0
- package/dist/src/memory-backend.d.ts.map +1 -0
- package/dist/src/memory-backend.js +43 -0
- package/dist/src/memory-backend.js.map +1 -0
- package/dist/src/memory-compressor.d.ts +17 -0
- package/dist/src/memory-compressor.d.ts.map +1 -0
- package/dist/src/memory-compressor.js +147 -0
- package/dist/src/memory-compressor.js.map +1 -0
- package/dist/src/memory-config.d.ts +30 -0
- package/dist/src/memory-config.d.ts.map +1 -0
- package/dist/src/memory-config.js +62 -0
- package/dist/src/memory-config.js.map +1 -0
- package/dist/src/memory-db.d.ts +7 -0
- package/dist/src/memory-db.d.ts.map +1 -0
- package/dist/src/memory-db.js +173 -0
- package/dist/src/memory-db.js.map +1 -0
- package/dist/src/memory-editor.d.ts +32 -0
- package/dist/src/memory-editor.d.ts.map +1 -0
- package/dist/src/memory-editor.js +339 -0
- package/dist/src/memory-editor.js.map +1 -0
- package/dist/src/memory-index.d.ts +91 -0
- package/dist/src/memory-index.d.ts.map +1 -0
- package/dist/src/memory-index.js +310 -0
- package/dist/src/memory-index.js.map +1 -0
- package/dist/src/memory-ipc-client.d.ts +22 -0
- package/dist/src/memory-ipc-client.d.ts.map +1 -0
- package/dist/src/memory-ipc-client.js +75 -0
- package/dist/src/memory-ipc-client.js.map +1 -0
- package/dist/src/memory-ipc-server.d.ts +17 -0
- package/dist/src/memory-ipc-server.d.ts.map +1 -0
- package/dist/src/memory-ipc-server.js +86 -0
- package/dist/src/memory-ipc-server.js.map +1 -0
- package/dist/src/memory-manager.d.ts +155 -0
- package/dist/src/memory-manager.d.ts.map +1 -0
- package/dist/src/memory-manager.js +463 -0
- package/dist/src/memory-manager.js.map +1 -0
- package/dist/src/memory-renderer.d.ts +15 -0
- package/dist/src/memory-renderer.d.ts.map +1 -0
- package/dist/src/memory-renderer.js +126 -0
- package/dist/src/memory-renderer.js.map +1 -0
- package/dist/src/message-store.d.ts +42 -0
- package/dist/src/message-store.d.ts.map +1 -0
- package/dist/src/message-store.js +145 -0
- package/dist/src/message-store.js.map +1 -0
- package/dist/src/mmr.d.ts +17 -0
- package/dist/src/mmr.d.ts.map +1 -0
- package/dist/src/mmr.js +48 -0
- package/dist/src/mmr.js.map +1 -0
- package/dist/src/ollama-embed.d.ts +46 -0
- package/dist/src/ollama-embed.d.ts.map +1 -0
- package/dist/src/ollama-embed.js +139 -0
- package/dist/src/ollama-embed.js.map +1 -0
- package/dist/src/openclaw-plugin/engine.d.ts +87 -0
- package/dist/src/openclaw-plugin/engine.d.ts.map +1 -0
- package/dist/src/openclaw-plugin/engine.js +121 -0
- package/dist/src/openclaw-plugin/engine.js.map +1 -0
- package/dist/src/openclaw-plugin/hooks.d.ts +41 -0
- package/dist/src/openclaw-plugin/hooks.d.ts.map +1 -0
- package/dist/src/openclaw-plugin/hooks.js +155 -0
- package/dist/src/openclaw-plugin/hooks.js.map +1 -0
- package/dist/src/openclaw-plugin/index.d.ts +20 -0
- package/dist/src/openclaw-plugin/index.d.ts.map +1 -0
- package/dist/src/openclaw-plugin/index.js +151 -0
- package/dist/src/openclaw-plugin/index.js.map +1 -0
- package/dist/src/openclaw-plugin/message-adapter.d.ts +13 -0
- package/dist/src/openclaw-plugin/message-adapter.d.ts.map +1 -0
- package/dist/src/openclaw-plugin/message-adapter.js +49 -0
- package/dist/src/openclaw-plugin/message-adapter.js.map +1 -0
- package/dist/src/openclaw-plugin/prompt-builder.d.ts +17 -0
- package/dist/src/openclaw-plugin/prompt-builder.d.ts.map +1 -0
- package/dist/src/openclaw-plugin/prompt-builder.js +22 -0
- package/dist/src/openclaw-plugin/prompt-builder.js.map +1 -0
- package/dist/src/openclaw-plugin/public-artifacts.d.ts +20 -0
- package/dist/src/openclaw-plugin/public-artifacts.d.ts.map +1 -0
- package/dist/src/openclaw-plugin/public-artifacts.js +59 -0
- package/dist/src/openclaw-plugin/public-artifacts.js.map +1 -0
- package/dist/src/openclaw-plugin/runtime-adapter.d.ts +26 -0
- package/dist/src/openclaw-plugin/runtime-adapter.d.ts.map +1 -0
- package/dist/src/openclaw-plugin/runtime-adapter.js +161 -0
- package/dist/src/openclaw-plugin/runtime-adapter.js.map +1 -0
- package/dist/src/openclaw-plugin/session-mapper.d.ts +11 -0
- package/dist/src/openclaw-plugin/session-mapper.d.ts.map +1 -0
- package/dist/src/openclaw-plugin/session-mapper.js +17 -0
- package/dist/src/openclaw-plugin/session-mapper.js.map +1 -0
- package/dist/src/openclaw-plugin/tools.d.ts +32 -0
- package/dist/src/openclaw-plugin/tools.d.ts.map +1 -0
- package/dist/src/openclaw-plugin/tools.js +131 -0
- package/dist/src/openclaw-plugin/tools.js.map +1 -0
- package/dist/src/openclaw-plugin/types.d.ts +35 -0
- package/dist/src/openclaw-plugin/types.d.ts.map +1 -0
- package/dist/src/openclaw-plugin/types.js +2 -0
- package/dist/src/openclaw-plugin/types.js.map +1 -0
- package/dist/src/query-tokenizer.d.ts +33 -0
- package/dist/src/query-tokenizer.d.ts.map +1 -0
- package/dist/src/query-tokenizer.js +84 -0
- package/dist/src/query-tokenizer.js.map +1 -0
- package/dist/src/recall-benchmark.d.ts +13 -0
- package/dist/src/recall-benchmark.d.ts.map +1 -0
- package/dist/src/recall-benchmark.js +256 -0
- package/dist/src/recall-benchmark.js.map +1 -0
- package/dist/src/recall-engine.d.ts +81 -0
- package/dist/src/recall-engine.d.ts.map +1 -0
- package/dist/src/recall-engine.js +387 -0
- package/dist/src/recall-engine.js.map +1 -0
- package/dist/src/redact-secrets.d.ts +20 -0
- package/dist/src/redact-secrets.d.ts.map +1 -0
- package/dist/src/redact-secrets.js +42 -0
- package/dist/src/redact-secrets.js.map +1 -0
- package/dist/src/runtime-store.d.ts +47 -0
- package/dist/src/runtime-store.d.ts.map +1 -0
- package/dist/src/runtime-store.js +78 -0
- package/dist/src/runtime-store.js.map +1 -0
- package/dist/src/session-context.d.ts +10 -0
- package/dist/src/session-context.d.ts.map +1 -0
- package/dist/src/session-context.js +83 -0
- package/dist/src/session-context.js.map +1 -0
- package/dist/src/session-memory.d.ts +8 -0
- package/dist/src/session-memory.d.ts.map +1 -0
- package/dist/src/session-memory.js +45 -0
- package/dist/src/session-memory.js.map +1 -0
- package/dist/src/signature-generator.d.ts +15 -0
- package/dist/src/signature-generator.d.ts.map +1 -0
- package/dist/src/signature-generator.js +78 -0
- package/dist/src/signature-generator.js.map +1 -0
- package/dist/src/sleep/basic.d.ts +48 -0
- package/dist/src/sleep/basic.d.ts.map +1 -0
- package/dist/src/sleep/basic.js +147 -0
- package/dist/src/sleep/basic.js.map +1 -0
- package/dist/src/sleep/levels.d.ts +20 -0
- package/dist/src/sleep/levels.d.ts.map +1 -0
- package/dist/src/sleep/levels.js +11 -0
- package/dist/src/sleep/levels.js.map +1 -0
- package/dist/src/sleep/native.d.ts +41 -0
- package/dist/src/sleep/native.d.ts.map +1 -0
- package/dist/src/sleep/native.js +112 -0
- package/dist/src/sleep/native.js.map +1 -0
- package/dist/src/sleep/orchestrator.d.ts +64 -0
- package/dist/src/sleep/orchestrator.d.ts.map +1 -0
- package/dist/src/sleep/orchestrator.js +960 -0
- package/dist/src/sleep/orchestrator.js.map +1 -0
- package/dist/src/sleep/runtime.d.ts +15 -0
- package/dist/src/sleep/runtime.d.ts.map +1 -0
- package/dist/src/sleep/runtime.js +2 -0
- package/dist/src/sleep/runtime.js.map +1 -0
- package/dist/src/sleep/sleep-daily-summary.d.ts +64 -0
- package/dist/src/sleep/sleep-daily-summary.d.ts.map +1 -0
- package/dist/src/sleep/sleep-daily-summary.js +273 -0
- package/dist/src/sleep/sleep-daily-summary.js.map +1 -0
- package/dist/src/sleep/sleep-extract-daily.d.ts +12 -0
- package/dist/src/sleep/sleep-extract-daily.d.ts.map +1 -0
- package/dist/src/sleep/sleep-extract-daily.js +55 -0
- package/dist/src/sleep/sleep-extract-daily.js.map +1 -0
- package/dist/src/sleep/sleep-prompt-loader.d.ts +27 -0
- package/dist/src/sleep/sleep-prompt-loader.d.ts.map +1 -0
- package/dist/src/sleep/sleep-prompt-loader.js +116 -0
- package/dist/src/sleep/sleep-prompt-loader.js.map +1 -0
- package/dist/src/sleep/test-harness.d.ts +67 -0
- package/dist/src/sleep/test-harness.d.ts.map +1 -0
- package/dist/src/sleep/test-harness.js +121 -0
- package/dist/src/sleep/test-harness.js.map +1 -0
- package/dist/src/sleep/trigger.d.ts +3 -0
- package/dist/src/sleep/trigger.d.ts.map +1 -0
- package/dist/src/sleep/trigger.js +66 -0
- package/dist/src/sleep/trigger.js.map +1 -0
- package/dist/src/sleep-data-access.d.ts +54 -0
- package/dist/src/sleep-data-access.d.ts.map +1 -0
- package/dist/src/sleep-data-access.js +176 -0
- package/dist/src/sleep-data-access.js.map +1 -0
- package/dist/src/sleep-pipeline.d.ts +9 -0
- package/dist/src/sleep-pipeline.d.ts.map +1 -0
- package/dist/src/sleep-pipeline.js +8 -0
- package/dist/src/sleep-pipeline.js.map +1 -0
- package/dist/src/sleep-state-gatherer.d.ts +74 -0
- package/dist/src/sleep-state-gatherer.d.ts.map +1 -0
- package/dist/src/sleep-state-gatherer.js +275 -0
- package/dist/src/sleep-state-gatherer.js.map +1 -0
- package/dist/src/sqlite-backend.d.ts +23 -0
- package/dist/src/sqlite-backend.d.ts.map +1 -0
- package/dist/src/sqlite-backend.js +48 -0
- package/dist/src/sqlite-backend.js.map +1 -0
- package/dist/src/test-helpers.d.ts +3 -0
- package/dist/src/test-helpers.d.ts.map +1 -0
- package/dist/src/test-helpers.js +5 -0
- package/dist/src/test-helpers.js.map +1 -0
- package/dist/src/tier-llm-refinement.d.ts +35 -0
- package/dist/src/tier-llm-refinement.d.ts.map +1 -0
- package/dist/src/tier-llm-refinement.js +131 -0
- package/dist/src/tier-llm-refinement.js.map +1 -0
- package/dist/src/timeline-builder.d.ts +45 -0
- package/dist/src/timeline-builder.d.ts.map +1 -0
- package/dist/src/timeline-builder.js +147 -0
- package/dist/src/timeline-builder.js.map +1 -0
- package/dist/src/trigram-search.d.ts +28 -0
- package/dist/src/trigram-search.d.ts.map +1 -0
- package/dist/src/trigram-search.js +192 -0
- package/dist/src/trigram-search.js.map +1 -0
- package/dist/src/turn-classifier.d.ts +29 -0
- package/dist/src/turn-classifier.d.ts.map +1 -0
- package/dist/src/turn-classifier.js +186 -0
- package/dist/src/turn-classifier.js.map +1 -0
- package/dist/src/user-utils.d.ts +6 -0
- package/dist/src/user-utils.d.ts.map +1 -0
- package/dist/src/user-utils.js +27 -0
- package/dist/src/user-utils.js.map +1 -0
- package/dist/src/wake-up-builder.d.ts +12 -0
- package/dist/src/wake-up-builder.d.ts.map +1 -0
- package/dist/src/wake-up-builder.js +45 -0
- package/dist/src/wake-up-builder.js.map +1 -0
- package/dist/src/wake-up-renderer.d.ts +29 -0
- package/dist/src/wake-up-renderer.d.ts.map +1 -0
- package/dist/src/wake-up-renderer.js +182 -0
- package/dist/src/wake-up-renderer.js.map +1 -0
- package/openclaw.plugin.json +72 -0
- package/package.json +92 -5
- package/prompts/sleep/01-gc-noise.md +28 -0
- package/prompts/sleep/02-daily-summary.md +3 -0
- package/prompts/sleep/03-extract-from-daily.md +3 -0
- package/prompts/sleep/04-retrospective.md +30 -0
- package/prompts/sleep/06-feedback.md +17 -0
- package/prompts/sleep/07-topic-assignment.md +23 -0
- package/prompts/sleep/08-core-promotion.md +26 -0
- package/prompts/sleep/09-merge.md +19 -0
- package/prompts/sleep/10-translation.md +17 -0
- package/prompts/sleep/11-skill-review.md +12 -0
- package/prompts/sleep/12-core-knowledge.md +14 -0
- package/prompts/sleep/13-consolidation.md +11 -0
- package/prompts/sleep/14-emotion-context.md +17 -0
- package/prompts/sleep/15-contradiction-and-graph.md +48 -0
- package/prompts/sleep/16-rem-synthesis.md +31 -0
- package/prompts/sleep/basic.md +12 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime directory resolution for deploy-lib consumers.
|
|
3
|
+
*
|
|
4
|
+
* Rules:
|
|
5
|
+
* - abtars runtime root: $ABTARS_HOME ?? ~/.abtars
|
|
6
|
+
* - abmind runtime root: $ABMIND_HOME ?? ~/.abmind
|
|
7
|
+
* - user bin dir: ~/.local/bin (always, XDG convention)
|
|
8
|
+
*
|
|
9
|
+
* All callers use these resolvers — never hardcode paths. Required by
|
|
10
|
+
* plan #158 v7 (Ag2 round-2 nit): cross-repo manifest reads must respect
|
|
11
|
+
* env-var overrides, not assume default locations.
|
|
12
|
+
*/
|
|
13
|
+
import { homedir } from 'node:os';
|
|
14
|
+
import { join } from 'node:path';
|
|
15
|
+
export function resolveAbtarsHome() {
|
|
16
|
+
return process.env['ABTARS_HOME'] ?? join(homedir(), '.abtars');
|
|
17
|
+
}
|
|
18
|
+
export function resolveAbmindHome() {
|
|
19
|
+
return process.env['ABMIND_HOME'] ?? join(homedir(), '.abmind');
|
|
20
|
+
}
|
|
21
|
+
export function resolvePackageHome(pkg) {
|
|
22
|
+
return pkg === 'abtars' ? resolveAbtarsHome() : resolveAbmindHome();
|
|
23
|
+
}
|
|
24
|
+
export function resolveUserBinDir() {
|
|
25
|
+
return join(homedir(), '.local', 'bin');
|
|
26
|
+
}
|
|
27
|
+
export function packagePaths(pkg) {
|
|
28
|
+
const home = resolvePackageHome(pkg);
|
|
29
|
+
return {
|
|
30
|
+
home,
|
|
31
|
+
config: join(home, 'config'),
|
|
32
|
+
releases: join(home, 'releases'),
|
|
33
|
+
current: join(home, 'current'),
|
|
34
|
+
nodeModules: join(home, 'node_modules'),
|
|
35
|
+
bin: join(home, 'bin'),
|
|
36
|
+
manifest: join(home, 'manifest.json'),
|
|
37
|
+
lock: join(home, '.update.lock'),
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../src/deploy-lib/paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAIjC,MAAM,UAAU,iBAAiB;IAC/B,OAAO,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,GAAgB;IACjD,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC1C,CAAC;AAaD,MAAM,UAAU,YAAY,CAAC,GAAgB;IAC3C,MAAM,IAAI,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACrC,OAAO;QACL,IAAI;QACJ,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC;QAC5B,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC;QAChC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC;QAC9B,WAAW,EAAE,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC;QACvC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;QACtB,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC;QACrC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC;KACjC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Release management: stage / activate (flip symlink) / prune.
|
|
3
|
+
*
|
|
4
|
+
* Invariants (per plan §"Directory layout"):
|
|
5
|
+
* - releases/<version>/dist/ holds only compiled code, no node_modules
|
|
6
|
+
* - node_modules/ lives at the package home root, shared across releases
|
|
7
|
+
* - current is a symlink to releases/<version>/
|
|
8
|
+
* - Retention = 3 (plan §"Key invariants"); oldest pruned on activate
|
|
9
|
+
*
|
|
10
|
+
* Activation is atomic via rename(2): write current.new → rename to current.
|
|
11
|
+
* This replaces the existing symlink in one syscall; readers never see a
|
|
12
|
+
* broken state.
|
|
13
|
+
*/
|
|
14
|
+
declare const RETENTION = 3;
|
|
15
|
+
export interface StagedRelease {
|
|
16
|
+
readonly version: string;
|
|
17
|
+
readonly stagedPath: string;
|
|
18
|
+
readonly commit: string | null;
|
|
19
|
+
readonly packageLockHash: string | null;
|
|
20
|
+
readonly source: 'local' | 'npm' | 'github';
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* List release versions in a releases/ dir, newest-activation-first as
|
|
24
|
+
* reported by the caller (this function sorts lexicographically; callers
|
|
25
|
+
* with a preferred order should rely on manifest priorReleases).
|
|
26
|
+
*/
|
|
27
|
+
export declare function listReleases(releasesDir: string): Promise<string[]>;
|
|
28
|
+
/**
|
|
29
|
+
* Resolve the currently active release version from the `current` symlink.
|
|
30
|
+
* Returns null if the symlink is missing or dangling.
|
|
31
|
+
*/
|
|
32
|
+
export declare function readCurrent(currentLink: string): Promise<string | null>;
|
|
33
|
+
/**
|
|
34
|
+
* Atomically flip the `current` symlink to point at releases/<version>/.
|
|
35
|
+
* Link target is relative (so moves of the package home don't break it).
|
|
36
|
+
*/
|
|
37
|
+
export declare function activate(currentLink: string, version: string): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* Prune old releases, keeping the `keep` newest (by activation order provided
|
|
40
|
+
* by caller, most-recent-first). Never removes the currently-active release
|
|
41
|
+
* even if it falls outside the window.
|
|
42
|
+
*/
|
|
43
|
+
export declare function pruneReleases(releasesDir: string, activatedOrder: readonly string[], currentVersion: string, keep?: number): Promise<string[]>;
|
|
44
|
+
export declare function hashFile(path: string): Promise<string | null>;
|
|
45
|
+
/**
|
|
46
|
+
* Validate that `releases/<version>/` exists and has a dist/ subdir. Used by
|
|
47
|
+
* rollback to refuse flipping to a pruned or partial release.
|
|
48
|
+
*/
|
|
49
|
+
export declare function releaseExists(releasesDir: string, version: string): Promise<boolean>;
|
|
50
|
+
export { RETENTION };
|
|
51
|
+
export declare const _dirname: (path: string) => string;
|
|
52
|
+
//# sourceMappingURL=releases.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"releases.d.ts","sourceRoot":"","sources":["../../../src/deploy-lib/releases.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH,QAAA,MAAM,SAAS,IAAI,CAAC;AAEpB,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,KAAK,GAAG,QAAQ,CAAC;CAC7C;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAQzE;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAY7E;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAYlF;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,SAAS,MAAM,EAAE,EACjC,cAAc,EAAE,MAAM,EACtB,IAAI,GAAE,MAAkB,GACvB,OAAO,CAAC,MAAM,EAAE,CAAC,CAWnB;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQnE;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO1F;AAED,OAAO,EAAE,SAAS,EAAE,CAAC;AAErB,eAAO,MAAM,QAAQ,0BAAU,CAAC"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Release management: stage / activate (flip symlink) / prune.
|
|
3
|
+
*
|
|
4
|
+
* Invariants (per plan §"Directory layout"):
|
|
5
|
+
* - releases/<version>/dist/ holds only compiled code, no node_modules
|
|
6
|
+
* - node_modules/ lives at the package home root, shared across releases
|
|
7
|
+
* - current is a symlink to releases/<version>/
|
|
8
|
+
* - Retention = 3 (plan §"Key invariants"); oldest pruned on activate
|
|
9
|
+
*
|
|
10
|
+
* Activation is atomic via rename(2): write current.new → rename to current.
|
|
11
|
+
* This replaces the existing symlink in one syscall; readers never see a
|
|
12
|
+
* broken state.
|
|
13
|
+
*/
|
|
14
|
+
import { createHash } from 'node:crypto';
|
|
15
|
+
import { readFile, readdir, rename, rm, stat, symlink, unlink } from 'node:fs/promises';
|
|
16
|
+
import { basename, dirname, join } from 'node:path';
|
|
17
|
+
const RETENTION = 3;
|
|
18
|
+
/**
|
|
19
|
+
* List release versions in a releases/ dir, newest-activation-first as
|
|
20
|
+
* reported by the caller (this function sorts lexicographically; callers
|
|
21
|
+
* with a preferred order should rely on manifest priorReleases).
|
|
22
|
+
*/
|
|
23
|
+
export async function listReleases(releasesDir) {
|
|
24
|
+
try {
|
|
25
|
+
const entries = await readdir(releasesDir, { withFileTypes: true });
|
|
26
|
+
return entries.filter((e) => e.isDirectory()).map((e) => e.name).sort();
|
|
27
|
+
}
|
|
28
|
+
catch (err) {
|
|
29
|
+
if (err.code === 'ENOENT')
|
|
30
|
+
return [];
|
|
31
|
+
throw err;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Resolve the currently active release version from the `current` symlink.
|
|
36
|
+
* Returns null if the symlink is missing or dangling.
|
|
37
|
+
*/
|
|
38
|
+
export async function readCurrent(currentLink) {
|
|
39
|
+
try {
|
|
40
|
+
const s = await stat(currentLink);
|
|
41
|
+
if (!s.isDirectory())
|
|
42
|
+
return null;
|
|
43
|
+
const { readlink } = await import('node:fs/promises');
|
|
44
|
+
const target = await readlink(currentLink);
|
|
45
|
+
// Target is like "releases/vX.Y.Z" or absolute path ending in vX.Y.Z.
|
|
46
|
+
return basename(target);
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
if (err.code === 'ENOENT')
|
|
50
|
+
return null;
|
|
51
|
+
throw err;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Atomically flip the `current` symlink to point at releases/<version>/.
|
|
56
|
+
* Link target is relative (so moves of the package home don't break it).
|
|
57
|
+
*/
|
|
58
|
+
export async function activate(currentLink, version) {
|
|
59
|
+
const tmp = `${currentLink}.new`;
|
|
60
|
+
// Relative symlink target: "releases/<version>"
|
|
61
|
+
const target = join('releases', version);
|
|
62
|
+
// Clear any leftover tmp from a crashed prior run.
|
|
63
|
+
try {
|
|
64
|
+
await unlink(tmp);
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
if (err.code !== 'ENOENT')
|
|
68
|
+
throw err;
|
|
69
|
+
}
|
|
70
|
+
await symlink(target, tmp);
|
|
71
|
+
await rename(tmp, currentLink);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Prune old releases, keeping the `keep` newest (by activation order provided
|
|
75
|
+
* by caller, most-recent-first). Never removes the currently-active release
|
|
76
|
+
* even if it falls outside the window.
|
|
77
|
+
*/
|
|
78
|
+
export async function pruneReleases(releasesDir, activatedOrder, currentVersion, keep = RETENTION) {
|
|
79
|
+
const retained = new Set([currentVersion]);
|
|
80
|
+
for (const v of activatedOrder.slice(0, keep))
|
|
81
|
+
retained.add(v);
|
|
82
|
+
const all = await listReleases(releasesDir);
|
|
83
|
+
const pruned = [];
|
|
84
|
+
for (const version of all) {
|
|
85
|
+
if (retained.has(version))
|
|
86
|
+
continue;
|
|
87
|
+
await rm(join(releasesDir, version), { recursive: true, force: true });
|
|
88
|
+
pruned.push(version);
|
|
89
|
+
}
|
|
90
|
+
return pruned;
|
|
91
|
+
}
|
|
92
|
+
export async function hashFile(path) {
|
|
93
|
+
try {
|
|
94
|
+
const buf = await readFile(path);
|
|
95
|
+
return createHash('sha256').update(buf).digest('hex');
|
|
96
|
+
}
|
|
97
|
+
catch (err) {
|
|
98
|
+
if (err.code === 'ENOENT')
|
|
99
|
+
return null;
|
|
100
|
+
throw err;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Validate that `releases/<version>/` exists and has a dist/ subdir. Used by
|
|
105
|
+
* rollback to refuse flipping to a pruned or partial release.
|
|
106
|
+
*/
|
|
107
|
+
export async function releaseExists(releasesDir, version) {
|
|
108
|
+
try {
|
|
109
|
+
const s = await stat(join(releasesDir, version, 'dist'));
|
|
110
|
+
return s.isDirectory();
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
export { RETENTION };
|
|
117
|
+
// dirname import preserves tree-shake correctness with downstream tooling
|
|
118
|
+
export const _dirname = dirname;
|
|
119
|
+
//# sourceMappingURL=releases.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"releases.js","sourceRoot":"","sources":["../../../src/deploy-lib/releases.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Safe recursive copy that skips non-regular-file entries Node's cp()
|
|
3
|
+
* refuses to handle (EINVAL on sockets). Real runtime roots can contain
|
|
4
|
+
* UNIX sockets (browser.sock, memory.sock, etc.) which are ephemeral IPC
|
|
5
|
+
* endpoints — not data we want or can back up.
|
|
6
|
+
*
|
|
7
|
+
* Skipped: sockets, FIFOs, block devices, character devices.
|
|
8
|
+
* Copied: regular files, directories, symlinks.
|
|
9
|
+
*/
|
|
10
|
+
export interface SafeCopyOptions {
|
|
11
|
+
readonly preserveTimestamps?: boolean;
|
|
12
|
+
/** Overwrite existing entries at the destination. Default: false. */
|
|
13
|
+
readonly force?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare function safeCopyTree(src: string, dst: string, opts?: SafeCopyOptions): Promise<void>;
|
|
16
|
+
//# sourceMappingURL=safe-copy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safe-copy.d.ts","sourceRoot":"","sources":["../../../src/deploy-lib/safe-copy.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IACtC,qEAAqE;IACrE,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAeD,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAOtG"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Safe recursive copy that skips non-regular-file entries Node's cp()
|
|
3
|
+
* refuses to handle (EINVAL on sockets). Real runtime roots can contain
|
|
4
|
+
* UNIX sockets (browser.sock, memory.sock, etc.) which are ephemeral IPC
|
|
5
|
+
* endpoints — not data we want or can back up.
|
|
6
|
+
*
|
|
7
|
+
* Skipped: sockets, FIFOs, block devices, character devices.
|
|
8
|
+
* Copied: regular files, directories, symlinks.
|
|
9
|
+
*/
|
|
10
|
+
import { cp, lstat } from 'node:fs/promises';
|
|
11
|
+
async function shouldCopy(src) {
|
|
12
|
+
try {
|
|
13
|
+
const s = await lstat(src);
|
|
14
|
+
if (s.isSocket() || s.isFIFO() || s.isBlockDevice() || s.isCharacterDevice()) {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
// Let the subsequent cp call surface the real error if any.
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export async function safeCopyTree(src, dst, opts = {}) {
|
|
25
|
+
await cp(src, dst, {
|
|
26
|
+
recursive: true,
|
|
27
|
+
preserveTimestamps: opts.preserveTimestamps === true,
|
|
28
|
+
force: opts.force === true,
|
|
29
|
+
filter: shouldCopy,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=safe-copy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safe-copy.js","sourceRoot":"","sources":["../../../src/deploy-lib/safe-copy.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAQ7C,KAAK,UAAU,UAAU,CAAC,GAAW;IACnC,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,iBAAiB,EAAE,EAAE,CAAC;YAC7E,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,4DAA4D;QAC5D,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAW,EAAE,GAAW,EAAE,OAAwB,EAAE;IACrF,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE;QACjB,SAAS,EAAE,IAAI;QACf,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,KAAK,IAAI;QACpD,KAAK,EAAE,IAAI,CAAC,KAAK,KAAK,IAAI;QAC1B,MAAM,EAAE,UAAU;KACnB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* embedding-health.ts — Check ollama + embedding model availability.
|
|
3
|
+
* Single source of truth for embedding health checks.
|
|
4
|
+
*/
|
|
5
|
+
export interface EmbeddingHealth {
|
|
6
|
+
reachable: boolean;
|
|
7
|
+
modelPulled: boolean;
|
|
8
|
+
modelsAvailable: string[];
|
|
9
|
+
error?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function checkEmbeddingHealth(endpoint?: string, model?: string): Promise<EmbeddingHealth>;
|
|
12
|
+
//# sourceMappingURL=embedding-health.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedding-health.d.ts","sourceRoot":"","sources":["../../src/embedding-health.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,oBAAoB,CACxC,QAAQ,SAA2B,EACnC,KAAK,SAAqB,GACzB,OAAO,CAAC,eAAe,CAAC,CAU1B"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* embedding-health.ts — Check ollama + embedding model availability.
|
|
3
|
+
* Single source of truth for embedding health checks.
|
|
4
|
+
*/
|
|
5
|
+
export async function checkEmbeddingHealth(endpoint = "http://localhost:11434", model = "nomic-embed-text") {
|
|
6
|
+
try {
|
|
7
|
+
const res = await fetch(`${endpoint}/api/tags`, { signal: AbortSignal.timeout(5000) });
|
|
8
|
+
if (!res.ok)
|
|
9
|
+
return { reachable: false, modelPulled: false, modelsAvailable: [], error: `${res.status} ${res.statusText}` };
|
|
10
|
+
const data = await res.json();
|
|
11
|
+
const models = (data.models ?? []).map(m => m.name.replace(/:latest$/, ""));
|
|
12
|
+
return { reachable: true, modelPulled: models.some(m => m === model || m.startsWith(model + ":")), modelsAvailable: models };
|
|
13
|
+
}
|
|
14
|
+
catch (err) {
|
|
15
|
+
return { reachable: false, modelPulled: false, modelsAvailable: [], error: err instanceof Error ? err.message : String(err) };
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=embedding-health.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedding-health.js","sourceRoot":"","sources":["../../src/embedding-health.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,QAAQ,GAAG,wBAAwB,EACnC,KAAK,GAAG,kBAAkB;IAE1B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,WAAW,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvF,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC;QAC5H,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAA0C,CAAC;QACtE,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC;QAC5E,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC;IAC/H,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;IAChI,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #173 — Embedding provider slot.
|
|
3
|
+
*
|
|
4
|
+
* Pluggable embedding backend. Pick once at install via EMBEDDING_PROVIDER env var.
|
|
5
|
+
* Switching providers on a live DB requires `abmind embed --reset` to drop all
|
|
6
|
+
* embeddings (dimension mismatch is a hard boot error — no silent corruption).
|
|
7
|
+
*
|
|
8
|
+
* Two built-in providers:
|
|
9
|
+
* - OllamaProvider: default. POST {url}/api/embed, body { model, input }
|
|
10
|
+
* - OpenAIProvider: covers OpenAI + any OpenAI-compatible API (Voyage, Together,
|
|
11
|
+
* local vLLM). POST {url}/embeddings, body { model, input: string[] }.
|
|
12
|
+
* Real batch support: 100 texts per HTTP request.
|
|
13
|
+
*/
|
|
14
|
+
export interface IEmbeddingProvider {
|
|
15
|
+
/** Embed a single text. Returns null on failure (network, disabled, etc). */
|
|
16
|
+
embedText(text: string): Promise<Float32Array | null>;
|
|
17
|
+
/** Batch embed. Provider may chunk internally for efficiency. */
|
|
18
|
+
batchEmbed(texts: string[]): Promise<Array<Float32Array | null>>;
|
|
19
|
+
/** Expected embedding dimensions. Comes from EMBEDDING_DIMENSIONS env. */
|
|
20
|
+
readonly dimensions: number;
|
|
21
|
+
/** Human-readable provider name for logs/status. */
|
|
22
|
+
readonly name: string;
|
|
23
|
+
}
|
|
24
|
+
export declare class OllamaProvider implements IEmbeddingProvider {
|
|
25
|
+
private url;
|
|
26
|
+
private model;
|
|
27
|
+
readonly name = "ollama";
|
|
28
|
+
readonly dimensions: number;
|
|
29
|
+
private warnedOnce;
|
|
30
|
+
constructor(url: string, model: string, dimensions: number);
|
|
31
|
+
embedText(text: string): Promise<Float32Array | null>;
|
|
32
|
+
batchEmbed(texts: string[]): Promise<Array<Float32Array | null>>;
|
|
33
|
+
}
|
|
34
|
+
export declare class OpenAIProvider implements IEmbeddingProvider {
|
|
35
|
+
private url;
|
|
36
|
+
private model;
|
|
37
|
+
private apiKey;
|
|
38
|
+
readonly name = "openai";
|
|
39
|
+
readonly dimensions: number;
|
|
40
|
+
private warnedOnce;
|
|
41
|
+
constructor(url: string, model: string, apiKey: string, dimensions: number);
|
|
42
|
+
embedText(text: string): Promise<Float32Array | null>;
|
|
43
|
+
batchEmbed(texts: string[]): Promise<Array<Float32Array | null>>;
|
|
44
|
+
private callBatch;
|
|
45
|
+
}
|
|
46
|
+
/** Create the configured embedding provider from env. */
|
|
47
|
+
export declare function createEmbeddingProvider(): IEmbeddingProvider;
|
|
48
|
+
//# sourceMappingURL=embedding-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedding-provider.d.ts","sourceRoot":"","sources":["../../src/embedding-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAOH,MAAM,WAAW,kBAAkB;IACjC,6EAA6E;IAC7E,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IACtD,iEAAiE;IACjE,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC;IACjE,0EAA0E;IAC1E,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,oDAAoD;IACpD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAID,qBAAa,cAAe,YAAW,kBAAkB;IAMrD,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,KAAK;IANf,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,UAAU,CAAS;gBAGjB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM;IAKd,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAmBrD,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;CAMvE;AAMD,qBAAa,cAAe,YAAW,kBAAkB;IAMrD,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,MAAM;IAPhB,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,UAAU,CAAS;gBAGjB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM;IAKd,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAKrD,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;YAWxD,SAAS;CA+BxB;AAcD,yDAAyD;AACzD,wBAAgB,uBAAuB,IAAI,kBAAkB,CAU5D"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #173 — Embedding provider slot.
|
|
3
|
+
*
|
|
4
|
+
* Pluggable embedding backend. Pick once at install via EMBEDDING_PROVIDER env var.
|
|
5
|
+
* Switching providers on a live DB requires `abmind embed --reset` to drop all
|
|
6
|
+
* embeddings (dimension mismatch is a hard boot error — no silent corruption).
|
|
7
|
+
*
|
|
8
|
+
* Two built-in providers:
|
|
9
|
+
* - OllamaProvider: default. POST {url}/api/embed, body { model, input }
|
|
10
|
+
* - OpenAIProvider: covers OpenAI + any OpenAI-compatible API (Voyage, Together,
|
|
11
|
+
* local vLLM). POST {url}/embeddings, body { model, input: string[] }.
|
|
12
|
+
* Real batch support: 100 texts per HTTP request.
|
|
13
|
+
*/
|
|
14
|
+
import { getAbmindEnv } from "./env-schema.js";
|
|
15
|
+
import { logWarn } from "./mem-logger.js";
|
|
16
|
+
const TAG = "embed-provider";
|
|
17
|
+
// ── Ollama ──────────────────────────────────────────────────────────────────
|
|
18
|
+
export class OllamaProvider {
|
|
19
|
+
url;
|
|
20
|
+
model;
|
|
21
|
+
name = "ollama";
|
|
22
|
+
dimensions;
|
|
23
|
+
warnedOnce = false;
|
|
24
|
+
constructor(url, model, dimensions) {
|
|
25
|
+
this.url = url;
|
|
26
|
+
this.model = model;
|
|
27
|
+
this.dimensions = dimensions;
|
|
28
|
+
}
|
|
29
|
+
async embedText(text) {
|
|
30
|
+
try {
|
|
31
|
+
const res = await fetch(`${this.url}/api/embed`, {
|
|
32
|
+
method: "POST",
|
|
33
|
+
headers: { "Content-Type": "application/json" },
|
|
34
|
+
body: JSON.stringify({ model: this.model, input: text }),
|
|
35
|
+
});
|
|
36
|
+
if (!res.ok)
|
|
37
|
+
throw new Error(`ollama ${res.status}`);
|
|
38
|
+
const data = await res.json();
|
|
39
|
+
return new Float32Array(data.embeddings[0]);
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
if (!this.warnedOnce) {
|
|
43
|
+
logWarn(TAG, `ollama unavailable — Se disabled: ${err instanceof Error ? err.message : String(err)}`);
|
|
44
|
+
this.warnedOnce = true;
|
|
45
|
+
}
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
async batchEmbed(texts) {
|
|
50
|
+
// Ollama does not support batch input — fall back to sequential calls.
|
|
51
|
+
const out = [];
|
|
52
|
+
for (const text of texts)
|
|
53
|
+
out.push(await this.embedText(text));
|
|
54
|
+
return out;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// ── OpenAI / OpenAI-compatible ──────────────────────────────────────────────
|
|
58
|
+
const OPENAI_BATCH_CEILING = 100;
|
|
59
|
+
export class OpenAIProvider {
|
|
60
|
+
url;
|
|
61
|
+
model;
|
|
62
|
+
apiKey;
|
|
63
|
+
name = "openai";
|
|
64
|
+
dimensions;
|
|
65
|
+
warnedOnce = false;
|
|
66
|
+
constructor(url, model, apiKey, dimensions) {
|
|
67
|
+
this.url = url;
|
|
68
|
+
this.model = model;
|
|
69
|
+
this.apiKey = apiKey;
|
|
70
|
+
this.dimensions = dimensions;
|
|
71
|
+
}
|
|
72
|
+
async embedText(text) {
|
|
73
|
+
const result = await this.batchEmbed([text]);
|
|
74
|
+
return result[0] ?? null;
|
|
75
|
+
}
|
|
76
|
+
async batchEmbed(texts) {
|
|
77
|
+
if (texts.length === 0)
|
|
78
|
+
return [];
|
|
79
|
+
const out = [];
|
|
80
|
+
for (let i = 0; i < texts.length; i += OPENAI_BATCH_CEILING) {
|
|
81
|
+
const chunk = texts.slice(i, i + OPENAI_BATCH_CEILING);
|
|
82
|
+
const embeddings = await this.callBatch(chunk);
|
|
83
|
+
out.push(...embeddings);
|
|
84
|
+
}
|
|
85
|
+
return out;
|
|
86
|
+
}
|
|
87
|
+
async callBatch(chunk) {
|
|
88
|
+
try {
|
|
89
|
+
const body = { model: this.model, input: chunk };
|
|
90
|
+
// OpenAI text-embedding-3-* supports dimension shortening; pass through.
|
|
91
|
+
if (this.dimensions > 0)
|
|
92
|
+
body.dimensions = this.dimensions;
|
|
93
|
+
const res = await fetch(`${this.url}/embeddings`, {
|
|
94
|
+
method: "POST",
|
|
95
|
+
headers: {
|
|
96
|
+
"Content-Type": "application/json",
|
|
97
|
+
"Authorization": `Bearer ${this.apiKey}`,
|
|
98
|
+
},
|
|
99
|
+
body: JSON.stringify(body),
|
|
100
|
+
});
|
|
101
|
+
if (!res.ok)
|
|
102
|
+
throw new Error(`openai ${res.status}: ${await res.text().catch(() => "?")}`);
|
|
103
|
+
const data = await res.json();
|
|
104
|
+
// Ensure order matches input (OpenAI returns `index` field)
|
|
105
|
+
const ordered = new Array(chunk.length).fill(null);
|
|
106
|
+
for (const item of data.data) {
|
|
107
|
+
if (item.index >= 0 && item.index < chunk.length) {
|
|
108
|
+
ordered[item.index] = new Float32Array(item.embedding);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return ordered;
|
|
112
|
+
}
|
|
113
|
+
catch (err) {
|
|
114
|
+
if (!this.warnedOnce) {
|
|
115
|
+
logWarn(TAG, `openai-compatible endpoint unavailable — Se disabled: ${maskErrorApiKey(err, this.apiKey)}`);
|
|
116
|
+
this.warnedOnce = true;
|
|
117
|
+
}
|
|
118
|
+
return new Array(chunk.length).fill(null);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Strip an API key from an error message if it accidentally got embedded
|
|
124
|
+
* (some HTTP clients stringify headers on error).
|
|
125
|
+
*/
|
|
126
|
+
function maskErrorApiKey(err, apiKey) {
|
|
127
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
128
|
+
if (!apiKey || apiKey.length < 8)
|
|
129
|
+
return msg;
|
|
130
|
+
return msg.split(apiKey).join("***");
|
|
131
|
+
}
|
|
132
|
+
// ── Factory ─────────────────────────────────────────────────────────────────
|
|
133
|
+
/** Create the configured embedding provider from env. */
|
|
134
|
+
export function createEmbeddingProvider() {
|
|
135
|
+
const env = getAbmindEnv();
|
|
136
|
+
const dims = env.embeddingDimensions;
|
|
137
|
+
if (env.embeddingProvider === "openai") {
|
|
138
|
+
if (!env.embeddingApiKey) {
|
|
139
|
+
logWarn(TAG, "EMBEDDING_PROVIDER=openai but EMBEDDING_API_KEY is empty — calls will fail");
|
|
140
|
+
}
|
|
141
|
+
return new OpenAIProvider(env.embeddingUrl, env.embeddingModel, env.embeddingApiKey, dims);
|
|
142
|
+
}
|
|
143
|
+
return new OllamaProvider(env.embeddingUrl, env.embeddingModel, dims);
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=embedding-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedding-provider.js","sourceRoot":"","sources":["../../src/embedding-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* embedding-quantize.ts — int8 quantization for embeddings.
|
|
3
|
+
* Reduces float32 (1536 bytes) to int8 (384 bytes) with ~1-2% recall quality drop.
|
|
4
|
+
*/
|
|
5
|
+
/** Quantize float32 embedding to int8. 4× smaller. */
|
|
6
|
+
export declare function quantizeToInt8(float32: Float32Array): Int8Array;
|
|
7
|
+
/** Dequantize int8 back to float32 (approximate). Needs original min/max for exact reconstruction. */
|
|
8
|
+
export declare function dequantizeToFloat32(int8: Int8Array, min: number, max: number): Float32Array;
|
|
9
|
+
/** Cosine similarity between two int8 vectors (approximate). */
|
|
10
|
+
export declare function cosineSimInt8(a: Int8Array, b: Int8Array): number;
|
|
11
|
+
//# sourceMappingURL=embedding-quantize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedding-quantize.d.ts","sourceRoot":"","sources":["../../src/embedding-quantize.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,sDAAsD;AACtD,wBAAgB,cAAc,CAAC,OAAO,EAAE,YAAY,GAAG,SAAS,CAU/D;AAED,sGAAsG;AACtG,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,YAAY,CAQ3F;AAED,gEAAgE;AAChE,wBAAgB,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,GAAG,MAAM,CAShE"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* embedding-quantize.ts — int8 quantization for embeddings.
|
|
3
|
+
* Reduces float32 (1536 bytes) to int8 (384 bytes) with ~1-2% recall quality drop.
|
|
4
|
+
*/
|
|
5
|
+
/** Quantize float32 embedding to int8. 4× smaller. */
|
|
6
|
+
export function quantizeToInt8(float32) {
|
|
7
|
+
const min = float32.reduce((a, b) => Math.min(a, b), Infinity);
|
|
8
|
+
const max = float32.reduce((a, b) => Math.max(a, b), -Infinity);
|
|
9
|
+
const range = max - min || 1;
|
|
10
|
+
const scale = 255 / range;
|
|
11
|
+
const int8 = new Int8Array(float32.length);
|
|
12
|
+
for (let i = 0; i < float32.length; i++) {
|
|
13
|
+
int8[i] = Math.round((float32[i] - min) * scale) - 128;
|
|
14
|
+
}
|
|
15
|
+
return int8;
|
|
16
|
+
}
|
|
17
|
+
/** Dequantize int8 back to float32 (approximate). Needs original min/max for exact reconstruction. */
|
|
18
|
+
export function dequantizeToFloat32(int8, min, max) {
|
|
19
|
+
const range = max - min || 1;
|
|
20
|
+
const scale = range / 255;
|
|
21
|
+
const float32 = new Float32Array(int8.length);
|
|
22
|
+
for (let i = 0; i < int8.length; i++) {
|
|
23
|
+
float32[i] = (int8[i] + 128) * scale + min;
|
|
24
|
+
}
|
|
25
|
+
return float32;
|
|
26
|
+
}
|
|
27
|
+
/** Cosine similarity between two int8 vectors (approximate). */
|
|
28
|
+
export function cosineSimInt8(a, b) {
|
|
29
|
+
let dot = 0, normA = 0, normB = 0;
|
|
30
|
+
for (let i = 0; i < a.length; i++) {
|
|
31
|
+
dot += a[i] * b[i];
|
|
32
|
+
normA += a[i] * a[i];
|
|
33
|
+
normB += b[i] * b[i];
|
|
34
|
+
}
|
|
35
|
+
const denom = Math.sqrt(normA) * Math.sqrt(normB);
|
|
36
|
+
return denom > 0 ? dot / denom : 0;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=embedding-quantize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedding-quantize.js","sourceRoot":"","sources":["../../src/embedding-quantize.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,sDAAsD;AACtD,MAAM,UAAU,cAAc,CAAC,OAAqB;IAClD,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC/D,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;IAChE,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC;IAC7B,MAAM,KAAK,GAAG,GAAG,GAAG,KAAK,CAAC;IAC1B,MAAM,IAAI,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAE,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC;IAC1D,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,sGAAsG;AACtG,MAAM,UAAU,mBAAmB,CAAC,IAAe,EAAE,GAAW,EAAE,GAAW;IAC3E,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC;IAC7B,MAAM,KAAK,GAAG,KAAK,GAAG,GAAG,CAAC;IAC1B,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAE,GAAG,GAAG,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC;IAC9C,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,aAAa,CAAC,CAAY,EAAE,CAAY;IACtD,IAAI,GAAG,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC;IAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;QACrB,KAAK,IAAI,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;QACvB,KAAK,IAAI,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;IACzB,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClD,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* emotion-arc.ts — Track emotional trajectory per topic over time.
|
|
3
|
+
* Built during sleep from emotion_tags on recent memories.
|
|
4
|
+
*/
|
|
5
|
+
import type { EmotionTag } from "./emotion-tagger.js";
|
|
6
|
+
export type ArcDirection = "rising" | "falling" | "volatile" | "stable";
|
|
7
|
+
export interface EmotionArc {
|
|
8
|
+
tags: EmotionTag[];
|
|
9
|
+
direction: ArcDirection;
|
|
10
|
+
symbol: string;
|
|
11
|
+
}
|
|
12
|
+
/** Build emotional arc from a sequence of memories (ordered by time). */
|
|
13
|
+
export declare function buildArc(memories: ReadonlyArray<{
|
|
14
|
+
emotion_tags: string;
|
|
15
|
+
created_at: number;
|
|
16
|
+
}>): EmotionArc;
|
|
17
|
+
//# sourceMappingURL=emotion-arc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emotion-arc.d.ts","sourceRoot":"","sources":["../../src/emotion-arc.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;AAExE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,SAAS,EAAE,YAAY,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;CAChB;AAeD,yEAAyE;AACzE,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,UAAU,CAoC1G"}
|