@astragenie/astramemory-local 0.7.2
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 +341 -0
- package/README.md +419 -0
- package/dist/backup/retention.d.ts +15 -0
- package/dist/backup/retention.js +62 -0
- package/dist/backup/retention.js.map +1 -0
- package/dist/backup/snapshot.d.ts +21 -0
- package/dist/backup/snapshot.js +55 -0
- package/dist/backup/snapshot.js.map +1 -0
- package/dist/backup/verify.d.ts +23 -0
- package/dist/backup/verify.js +77 -0
- package/dist/backup/verify.js.map +1 -0
- package/dist/budget/tracker.d.ts +58 -0
- package/dist/budget/tracker.js +102 -0
- package/dist/budget/tracker.js.map +1 -0
- package/dist/capture/codex.d.ts +63 -0
- package/dist/capture/codex.js +0 -0
- package/dist/capture/codex.js.map +1 -0
- package/dist/cli/backup.d.ts +1 -0
- package/dist/cli/backup.js +112 -0
- package/dist/cli/backup.js.map +1 -0
- package/dist/cli/budget.d.ts +7 -0
- package/dist/cli/budget.js +44 -0
- package/dist/cli/budget.js.map +1 -0
- package/dist/cli/capture.d.ts +10 -0
- package/dist/cli/capture.js +113 -0
- package/dist/cli/capture.js.map +1 -0
- package/dist/cli/consolidate.d.ts +16 -0
- package/dist/cli/consolidate.js +146 -0
- package/dist/cli/consolidate.js.map +1 -0
- package/dist/cli/doctor.d.ts +1 -0
- package/dist/cli/doctor.js +54 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/entity-backfill.d.ts +10 -0
- package/dist/cli/entity-backfill.js +46 -0
- package/dist/cli/entity-backfill.js.map +1 -0
- package/dist/cli/hook-install.d.ts +45 -0
- package/dist/cli/hook-install.js +77 -0
- package/dist/cli/hook-install.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.js +312 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init.d.ts +16 -0
- package/dist/cli/init.js +431 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/mcp-stdio.d.ts +18 -0
- package/dist/cli/mcp-stdio.js +67 -0
- package/dist/cli/mcp-stdio.js.map +1 -0
- package/dist/cli/memory.d.ts +15 -0
- package/dist/cli/memory.js +52 -0
- package/dist/cli/memory.js.map +1 -0
- package/dist/cli/open-runtime-db.d.ts +15 -0
- package/dist/cli/open-runtime-db.js +37 -0
- package/dist/cli/open-runtime-db.js.map +1 -0
- package/dist/cli/pair.d.ts +29 -0
- package/dist/cli/pair.js +64 -0
- package/dist/cli/pair.js.map +1 -0
- package/dist/cli/providers.d.ts +10 -0
- package/dist/cli/providers.js +97 -0
- package/dist/cli/providers.js.map +1 -0
- package/dist/cli/queue-purge.d.ts +5 -0
- package/dist/cli/queue-purge.js +92 -0
- package/dist/cli/queue-purge.js.map +1 -0
- package/dist/cli/queue.d.ts +29 -0
- package/dist/cli/queue.js +73 -0
- package/dist/cli/queue.js.map +1 -0
- package/dist/cli/rebuild.d.ts +15 -0
- package/dist/cli/rebuild.js +70 -0
- package/dist/cli/rebuild.js.map +1 -0
- package/dist/cli/reembed-dim.d.ts +21 -0
- package/dist/cli/reembed-dim.js +199 -0
- package/dist/cli/reembed-dim.js.map +1 -0
- package/dist/cli/reinstall.d.ts +1 -0
- package/dist/cli/reinstall.js +205 -0
- package/dist/cli/reinstall.js.map +1 -0
- package/dist/cli/restore.d.ts +1 -0
- package/dist/cli/restore.js +167 -0
- package/dist/cli/restore.js.map +1 -0
- package/dist/cli/retag.d.ts +14 -0
- package/dist/cli/retag.js +62 -0
- package/dist/cli/retag.js.map +1 -0
- package/dist/cli/search.d.ts +66 -0
- package/dist/cli/search.js +174 -0
- package/dist/cli/search.js.map +1 -0
- package/dist/cli/serve.d.ts +9 -0
- package/dist/cli/serve.js +364 -0
- package/dist/cli/serve.js.map +1 -0
- package/dist/cli/service.d.ts +1 -0
- package/dist/cli/service.js +121 -0
- package/dist/cli/service.js.map +1 -0
- package/dist/cli/sync.d.ts +15 -0
- package/dist/cli/sync.js +61 -0
- package/dist/cli/sync.js.map +1 -0
- package/dist/cli/token.d.ts +24 -0
- package/dist/cli/token.js +77 -0
- package/dist/cli/token.js.map +1 -0
- package/dist/cli/wait-health.d.ts +4 -0
- package/dist/cli/wait-health.js +23 -0
- package/dist/cli/wait-health.js.map +1 -0
- package/dist/config/config.d.ts +127 -0
- package/dist/config/config.js +38 -0
- package/dist/config/config.js.map +1 -0
- package/dist/config/datadir.d.ts +30 -0
- package/dist/config/datadir.js +65 -0
- package/dist/config/datadir.js.map +1 -0
- package/dist/config/loader.d.ts +23 -0
- package/dist/config/loader.js +102 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/migrate-dirs.d.ts +36 -0
- package/dist/config/migrate-dirs.js +132 -0
- package/dist/config/migrate-dirs.js.map +1 -0
- package/dist/config/persist-envs.d.ts +23 -0
- package/dist/config/persist-envs.js +119 -0
- package/dist/config/persist-envs.js.map +1 -0
- package/dist/config/resolve-runtime.d.ts +19 -0
- package/dist/config/resolve-runtime.js +53 -0
- package/dist/config/resolve-runtime.js.map +1 -0
- package/dist/config/secrets.d.ts +28 -0
- package/dist/config/secrets.js +38 -0
- package/dist/config/secrets.js.map +1 -0
- package/dist/config/sync-settings.d.ts +16 -0
- package/dist/config/sync-settings.js +34 -0
- package/dist/config/sync-settings.js.map +1 -0
- package/dist/config/writer.d.ts +19 -0
- package/dist/config/writer.js +121 -0
- package/dist/config/writer.js.map +1 -0
- package/dist/consolidate/consolidate.d.ts +80 -0
- package/dist/consolidate/consolidate.js +0 -0
- package/dist/consolidate/consolidate.js.map +1 -0
- package/dist/consolidate/proposals.d.ts +35 -0
- package/dist/consolidate/proposals.js +66 -0
- package/dist/consolidate/proposals.js.map +1 -0
- package/dist/contracts/atom-wire.d.ts +48 -0
- package/dist/contracts/atom-wire.js +55 -0
- package/dist/contracts/atom-wire.js.map +1 -0
- package/dist/contracts/embed.d.ts +41 -0
- package/dist/contracts/embed.js +20 -0
- package/dist/contracts/embed.js.map +1 -0
- package/dist/contracts/index.d.ts +5 -0
- package/dist/contracts/index.js +6 -0
- package/dist/contracts/index.js.map +1 -0
- package/dist/contracts/job.d.ts +113 -0
- package/dist/contracts/job.js +32 -0
- package/dist/contracts/job.js.map +1 -0
- package/dist/contracts/llm.d.ts +30 -0
- package/dist/contracts/llm.js +2 -0
- package/dist/contracts/llm.js.map +1 -0
- package/dist/contracts/memory.d.ts +47 -0
- package/dist/contracts/memory.js +5 -0
- package/dist/contracts/memory.js.map +1 -0
- package/dist/contracts/vector.d.ts +29 -0
- package/dist/contracts/vector.js +2 -0
- package/dist/contracts/vector.js.map +1 -0
- package/dist/distill/flatten-turns.d.ts +1 -0
- package/dist/distill/flatten-turns.js +50 -0
- package/dist/distill/flatten-turns.js.map +1 -0
- package/dist/distill/pipeline.d.ts +45 -0
- package/dist/distill/pipeline.js +113 -0
- package/dist/distill/pipeline.js.map +1 -0
- package/dist/distill/prompts/extract.d.ts +122 -0
- package/dist/distill/prompts/extract.js +67 -0
- package/dist/distill/prompts/extract.js.map +1 -0
- package/dist/distill/stages/01-cleanup.d.ts +9 -0
- package/dist/distill/stages/01-cleanup.js +67 -0
- package/dist/distill/stages/01-cleanup.js.map +1 -0
- package/dist/distill/stages/02-normalize.d.ts +9 -0
- package/dist/distill/stages/02-normalize.js +76 -0
- package/dist/distill/stages/02-normalize.js.map +1 -0
- package/dist/distill/stages/03-chunk.d.ts +22 -0
- package/dist/distill/stages/03-chunk.js +138 -0
- package/dist/distill/stages/03-chunk.js.map +1 -0
- package/dist/distill/stages/04-compact.d.ts +28 -0
- package/dist/distill/stages/04-compact.js +69 -0
- package/dist/distill/stages/04-compact.js.map +1 -0
- package/dist/distill/stages/05-extract.d.ts +35 -0
- package/dist/distill/stages/05-extract.js +101 -0
- package/dist/distill/stages/05-extract.js.map +1 -0
- package/dist/distill/stages/06-reduce.d.ts +16 -0
- package/dist/distill/stages/06-reduce.js +30 -0
- package/dist/distill/stages/06-reduce.js.map +1 -0
- package/dist/distill/stages/07-memory-normalize.d.ts +27 -0
- package/dist/distill/stages/07-memory-normalize.js +65 -0
- package/dist/distill/stages/07-memory-normalize.js.map +1 -0
- package/dist/distill/stages/08-embed-index.d.ts +31 -0
- package/dist/distill/stages/08-embed-index.js +82 -0
- package/dist/distill/stages/08-embed-index.js.map +1 -0
- package/dist/doctor/checks.d.ts +77 -0
- package/dist/doctor/checks.js +626 -0
- package/dist/doctor/checks.js.map +1 -0
- package/dist/doctor/hardening-checks.d.ts +9 -0
- package/dist/doctor/hardening-checks.js +182 -0
- package/dist/doctor/hardening-checks.js.map +1 -0
- package/dist/doctor/probes/embed-probe.d.ts +19 -0
- package/dist/doctor/probes/embed-probe.js +47 -0
- package/dist/doctor/probes/embed-probe.js.map +1 -0
- package/dist/doctor/probes/llm-chat-probe.d.ts +11 -0
- package/dist/doctor/probes/llm-chat-probe.js +41 -0
- package/dist/doctor/probes/llm-chat-probe.js.map +1 -0
- package/dist/doctor/probes/plugin-coexistence.d.ts +14 -0
- package/dist/doctor/probes/plugin-coexistence.js +60 -0
- package/dist/doctor/probes/plugin-coexistence.js.map +1 -0
- package/dist/doctor/runner.d.ts +17 -0
- package/dist/doctor/runner.js +53 -0
- package/dist/doctor/runner.js.map +1 -0
- package/dist/doctor/types.d.ts +12 -0
- package/dist/doctor/types.js +2 -0
- package/dist/doctor/types.js.map +1 -0
- package/dist/entity/backfill.d.ts +30 -0
- package/dist/entity/backfill.js +55 -0
- package/dist/entity/backfill.js.map +1 -0
- package/dist/entity/extract-entities.d.ts +27 -0
- package/dist/entity/extract-entities.js +86 -0
- package/dist/entity/extract-entities.js.map +1 -0
- package/dist/entity/normalize.d.ts +17 -0
- package/dist/entity/normalize.js +20 -0
- package/dist/entity/normalize.js.map +1 -0
- package/dist/eval/harness.d.ts +96 -0
- package/dist/eval/harness.js +119 -0
- package/dist/eval/harness.js.map +1 -0
- package/dist/eval/metrics.d.ts +23 -0
- package/dist/eval/metrics.js +44 -0
- package/dist/eval/metrics.js.map +1 -0
- package/dist/log/correlation.d.ts +24 -0
- package/dist/log/correlation.js +33 -0
- package/dist/log/correlation.js.map +1 -0
- package/dist/log/logger.d.ts +38 -0
- package/dist/log/logger.js +129 -0
- package/dist/log/logger.js.map +1 -0
- package/dist/log/scrub.d.ts +33 -0
- package/dist/log/scrub.js +91 -0
- package/dist/log/scrub.js.map +1 -0
- package/dist/mcp/server.d.ts +36 -0
- package/dist/mcp/server.js +553 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/memory-tool/adapter.d.ts +73 -0
- package/dist/memory-tool/adapter.js +269 -0
- package/dist/memory-tool/adapter.js.map +1 -0
- package/dist/pipeline/errors.d.ts +21 -0
- package/dist/pipeline/errors.js +34 -0
- package/dist/pipeline/errors.js.map +1 -0
- package/dist/pipeline/failure-classifier.d.ts +13 -0
- package/dist/pipeline/failure-classifier.js +72 -0
- package/dist/pipeline/failure-classifier.js.map +1 -0
- package/dist/pipeline/handler-ctx-ext.d.ts +23 -0
- package/dist/pipeline/handler-ctx-ext.js +19 -0
- package/dist/pipeline/handler-ctx-ext.js.map +1 -0
- package/dist/pipeline/handler.d.ts +20 -0
- package/dist/pipeline/handler.js +2 -0
- package/dist/pipeline/handler.js.map +1 -0
- package/dist/pipeline/handlers/cleanup.d.ts +14 -0
- package/dist/pipeline/handlers/cleanup.js +47 -0
- package/dist/pipeline/handlers/cleanup.js.map +1 -0
- package/dist/pipeline/handlers/consolidate.d.ts +8 -0
- package/dist/pipeline/handlers/consolidate.js +23 -0
- package/dist/pipeline/handlers/consolidate.js.map +1 -0
- package/dist/pipeline/handlers/distill-events.d.ts +15 -0
- package/dist/pipeline/handlers/distill-events.js +134 -0
- package/dist/pipeline/handlers/distill-events.js.map +1 -0
- package/dist/pipeline/handlers/distill.d.ts +17 -0
- package/dist/pipeline/handlers/distill.js +110 -0
- package/dist/pipeline/handlers/distill.js.map +1 -0
- package/dist/pipeline/handlers/reembed.d.ts +10 -0
- package/dist/pipeline/handlers/reembed.js +34 -0
- package/dist/pipeline/handlers/reembed.js.map +1 -0
- package/dist/pipeline/job-repo.d.ts +86 -0
- package/dist/pipeline/job-repo.js +168 -0
- package/dist/pipeline/job-repo.js.map +1 -0
- package/dist/pipeline/mock-providers.d.ts +49 -0
- package/dist/pipeline/mock-providers.js +175 -0
- package/dist/pipeline/mock-providers.js.map +1 -0
- package/dist/pipeline/registry.d.ts +15 -0
- package/dist/pipeline/registry.js +20 -0
- package/dist/pipeline/registry.js.map +1 -0
- package/dist/pipeline/worker.d.ts +41 -0
- package/dist/pipeline/worker.js +167 -0
- package/dist/pipeline/worker.js.map +1 -0
- package/dist/providers/embed/azure-openai.d.ts +25 -0
- package/dist/providers/embed/azure-openai.js +138 -0
- package/dist/providers/embed/azure-openai.js.map +1 -0
- package/dist/providers/embed/ollama.d.ts +17 -0
- package/dist/providers/embed/ollama.js +106 -0
- package/dist/providers/embed/ollama.js.map +1 -0
- package/dist/providers/index.d.ts +19 -0
- package/dist/providers/index.js +72 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/llm/azure-openai.d.ts +20 -0
- package/dist/providers/llm/azure-openai.js +135 -0
- package/dist/providers/llm/azure-openai.js.map +1 -0
- package/dist/providers/llm/ollama.d.ts +13 -0
- package/dist/providers/llm/ollama.js +113 -0
- package/dist/providers/llm/ollama.js.map +1 -0
- package/dist/providers/llm/pricing.d.ts +21 -0
- package/dist/providers/llm/pricing.js +22 -0
- package/dist/providers/llm/pricing.js.map +1 -0
- package/dist/recall/pack.d.ts +32 -0
- package/dist/recall/pack.js +90 -0
- package/dist/recall/pack.js.map +1 -0
- package/dist/recall/policy.d.ts +39 -0
- package/dist/recall/policy.js +96 -0
- package/dist/recall/policy.js.map +1 -0
- package/dist/redact/detectors.d.ts +20 -0
- package/dist/redact/detectors.js +85 -0
- package/dist/redact/detectors.js.map +1 -0
- package/dist/redact/entropy.d.ts +24 -0
- package/dist/redact/entropy.js +77 -0
- package/dist/redact/entropy.js.map +1 -0
- package/dist/redact/index.d.ts +47 -0
- package/dist/redact/index.js +165 -0
- package/dist/redact/index.js.map +1 -0
- package/dist/search/fuse.d.ts +108 -0
- package/dist/search/fuse.js +135 -0
- package/dist/search/fuse.js.map +1 -0
- package/dist/search/query.d.ts +28 -0
- package/dist/search/query.js +70 -0
- package/dist/search/query.js.map +1 -0
- package/dist/search/search.d.ts +164 -0
- package/dist/search/search.js +310 -0
- package/dist/search/search.js.map +1 -0
- package/dist/server/app.d.ts +17 -0
- package/dist/server/app.js +133 -0
- package/dist/server/app.js.map +1 -0
- package/dist/server/health-state.d.ts +29 -0
- package/dist/server/health-state.js +28 -0
- package/dist/server/health-state.js.map +1 -0
- package/dist/server/lib/network.d.ts +12 -0
- package/dist/server/lib/network.js +16 -0
- package/dist/server/lib/network.js.map +1 -0
- package/dist/server/lib/score-contract.d.ts +36 -0
- package/dist/server/lib/score-contract.js +54 -0
- package/dist/server/lib/score-contract.js.map +1 -0
- package/dist/server/lib/stable-stringify.d.ts +10 -0
- package/dist/server/lib/stable-stringify.js +27 -0
- package/dist/server/lib/stable-stringify.js.map +1 -0
- package/dist/server/lib/wire-meta.d.ts +7 -0
- package/dist/server/lib/wire-meta.js +29 -0
- package/dist/server/lib/wire-meta.js.map +1 -0
- package/dist/server/queries/dashboard.d.ts +142 -0
- package/dist/server/queries/dashboard.js +166 -0
- package/dist/server/queries/dashboard.js.map +1 -0
- package/dist/server/routes/consolidation.d.ts +14 -0
- package/dist/server/routes/consolidation.js +67 -0
- package/dist/server/routes/consolidation.js.map +1 -0
- package/dist/server/routes/dashboard-api-html.d.ts +15 -0
- package/dist/server/routes/dashboard-api-html.js +144 -0
- package/dist/server/routes/dashboard-api-html.js.map +1 -0
- package/dist/server/routes/dashboard-consolidation-html.d.ts +26 -0
- package/dist/server/routes/dashboard-consolidation-html.js +202 -0
- package/dist/server/routes/dashboard-consolidation-html.js.map +1 -0
- package/dist/server/routes/dashboard-html.d.ts +15 -0
- package/dist/server/routes/dashboard-html.js +365 -0
- package/dist/server/routes/dashboard-html.js.map +1 -0
- package/dist/server/routes/dashboard-jobs-html.d.ts +18 -0
- package/dist/server/routes/dashboard-jobs-html.js +186 -0
- package/dist/server/routes/dashboard-jobs-html.js.map +1 -0
- package/dist/server/routes/dashboard-search-html.d.ts +18 -0
- package/dist/server/routes/dashboard-search-html.js +189 -0
- package/dist/server/routes/dashboard-search-html.js.map +1 -0
- package/dist/server/routes/dashboard.d.ts +19 -0
- package/dist/server/routes/dashboard.js +68 -0
- package/dist/server/routes/dashboard.js.map +1 -0
- package/dist/server/routes/digest.d.ts +9 -0
- package/dist/server/routes/digest.js +37 -0
- package/dist/server/routes/digest.js.map +1 -0
- package/dist/server/routes/entities.d.ts +12 -0
- package/dist/server/routes/entities.js +46 -0
- package/dist/server/routes/entities.js.map +1 -0
- package/dist/server/routes/health.d.ts +14 -0
- package/dist/server/routes/health.js +100 -0
- package/dist/server/routes/health.js.map +1 -0
- package/dist/server/routes/ingest.d.ts +209 -0
- package/dist/server/routes/ingest.js +454 -0
- package/dist/server/routes/ingest.js.map +1 -0
- package/dist/server/routes/lifecycle.d.ts +21 -0
- package/dist/server/routes/lifecycle.js +132 -0
- package/dist/server/routes/lifecycle.js.map +1 -0
- package/dist/server/routes/mcp.d.ts +15 -0
- package/dist/server/routes/mcp.js +36 -0
- package/dist/server/routes/mcp.js.map +1 -0
- package/dist/server/routes/memory-tool.d.ts +14 -0
- package/dist/server/routes/memory-tool.js +28 -0
- package/dist/server/routes/memory-tool.js.map +1 -0
- package/dist/server/routes/memory.d.ts +7 -0
- package/dist/server/routes/memory.js +19 -0
- package/dist/server/routes/memory.js.map +1 -0
- package/dist/server/routes/recall.d.ts +15 -0
- package/dist/server/routes/recall.js +74 -0
- package/dist/server/routes/recall.js.map +1 -0
- package/dist/server/routes/search.d.ts +12 -0
- package/dist/server/routes/search.js +203 -0
- package/dist/server/routes/search.js.map +1 -0
- package/dist/server/routes/version.d.ts +2 -0
- package/dist/server/routes/version.js +11 -0
- package/dist/server/routes/version.js.map +1 -0
- package/dist/server/routes/why.d.ts +9 -0
- package/dist/server/routes/why.js +38 -0
- package/dist/server/routes/why.js.map +1 -0
- package/dist/service/index.d.ts +10 -0
- package/dist/service/index.js +25 -0
- package/dist/service/index.js.map +1 -0
- package/dist/service/install-flow.d.ts +18 -0
- package/dist/service/install-flow.js +47 -0
- package/dist/service/install-flow.js.map +1 -0
- package/dist/service/instance-lock.d.ts +26 -0
- package/dist/service/instance-lock.js +150 -0
- package/dist/service/instance-lock.js.map +1 -0
- package/dist/service/launchd.d.ts +11 -0
- package/dist/service/launchd.js +196 -0
- package/dist/service/launchd.js.map +1 -0
- package/dist/service/schtasks.d.ts +31 -0
- package/dist/service/schtasks.js +274 -0
- package/dist/service/schtasks.js.map +1 -0
- package/dist/service/shim.d.ts +21 -0
- package/dist/service/shim.js +80 -0
- package/dist/service/shim.js.map +1 -0
- package/dist/service/systemd.d.ts +11 -0
- package/dist/service/systemd.js +150 -0
- package/dist/service/systemd.js.map +1 -0
- package/dist/service/task-xml.d.ts +36 -0
- package/dist/service/task-xml.js +91 -0
- package/dist/service/task-xml.js.map +1 -0
- package/dist/service/types.d.ts +47 -0
- package/dist/service/types.js +2 -0
- package/dist/service/types.js.map +1 -0
- package/dist/storage/archival.d.ts +29 -0
- package/dist/storage/archival.js +47 -0
- package/dist/storage/archival.js.map +1 -0
- package/dist/storage/bearer-keystore.d.ts +34 -0
- package/dist/storage/bearer-keystore.js +75 -0
- package/dist/storage/bearer-keystore.js.map +1 -0
- package/dist/storage/db.d.ts +37 -0
- package/dist/storage/db.js +92 -0
- package/dist/storage/db.js.map +1 -0
- package/dist/storage/entities.d.ts +71 -0
- package/dist/storage/entities.js +141 -0
- package/dist/storage/entities.js.map +1 -0
- package/dist/storage/ingest-idempotency.d.ts +26 -0
- package/dist/storage/ingest-idempotency.js +29 -0
- package/dist/storage/ingest-idempotency.js.map +1 -0
- package/dist/storage/keystore.d.ts +64 -0
- package/dist/storage/keystore.js +194 -0
- package/dist/storage/keystore.js.map +1 -0
- package/dist/storage/memories.d.ts +51 -0
- package/dist/storage/memories.js +67 -0
- package/dist/storage/memories.js.map +1 -0
- package/dist/storage/memory-events.d.ts +145 -0
- package/dist/storage/memory-events.js +287 -0
- package/dist/storage/memory-events.js.map +1 -0
- package/dist/storage/migrate-encrypt.d.ts +16 -0
- package/dist/storage/migrate-encrypt.js +121 -0
- package/dist/storage/migrate-encrypt.js.map +1 -0
- package/dist/storage/migrate.d.ts +27 -0
- package/dist/storage/migrate.js +105 -0
- package/dist/storage/migrate.js.map +1 -0
- package/dist/storage/redaction-log.d.ts +18 -0
- package/dist/storage/redaction-log.js +27 -0
- package/dist/storage/redaction-log.js.map +1 -0
- package/dist/storage/usefulness.d.ts +115 -0
- package/dist/storage/usefulness.js +203 -0
- package/dist/storage/usefulness.js.map +1 -0
- package/dist/sync/conflict-resolve.d.ts +26 -0
- package/dist/sync/conflict-resolve.js +139 -0
- package/dist/sync/conflict-resolve.js.map +1 -0
- package/dist/sync/puller.d.ts +115 -0
- package/dist/sync/puller.js +173 -0
- package/dist/sync/puller.js.map +1 -0
- package/dist/sync/shipper.d.ts +112 -0
- package/dist/sync/shipper.js +189 -0
- package/dist/sync/shipper.js.map +1 -0
- package/dist/tag-hygiene/backfill.d.ts +50 -0
- package/dist/tag-hygiene/backfill.js +117 -0
- package/dist/tag-hygiene/backfill.js.map +1 -0
- package/dist/tag-hygiene/derive-repo.d.ts +9 -0
- package/dist/tag-hygiene/derive-repo.js +19 -0
- package/dist/tag-hygiene/derive-repo.js.map +1 -0
- package/dist/tag-hygiene/tier2-infer.d.ts +28 -0
- package/dist/tag-hygiene/tier2-infer.js +72 -0
- package/dist/tag-hygiene/tier2-infer.js.map +1 -0
- package/dist/vector/sqlite-vec.d.ts +16 -0
- package/dist/vector/sqlite-vec.js +49 -0
- package/dist/vector/sqlite-vec.js.map +1 -0
- package/migrations/001-init.sql +117 -0
- package/migrations/002-wire-v1.sql +16 -0
- package/migrations/003-expand-memory-types.sql +81 -0
- package/migrations/004-provenance.sql +4 -0
- package/migrations/005-security.sql +12 -0
- package/migrations/006-atom-v3.sql +28 -0
- package/migrations/007-memory-events.sql +30 -0
- package/migrations/008-consolidation.sql +31 -0
- package/migrations/009-tag-hygiene.sql +13 -0
- package/migrations/010-sync-pull.sql +53 -0
- package/migrations/011-embed-dim-migration.sql +28 -0
- package/migrations/012-entities.sql +36 -0
- package/migrations/013-archival.sql +50 -0
- package/package.json +50 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `astramem-local consolidate <run|proposals|accept|reject>` — operator
|
|
3
|
+
* surface for the ADR-004 stage-9 consolidation pass.
|
|
4
|
+
*
|
|
5
|
+
* consolidate run [--json] trigger a pass now (also scheduled
|
|
6
|
+
* at boot + every 6h by the daemon)
|
|
7
|
+
* consolidate proposals [--json] list pending merge proposals with
|
|
8
|
+
* both texts side by side
|
|
9
|
+
* consolidate accept <id|--all> [--json] accept proposal(s) — merges loser
|
|
10
|
+
* into winner (supersede, not delete)
|
|
11
|
+
* consolidate reject <id> [--json] reject a proposal
|
|
12
|
+
*
|
|
13
|
+
* Talks to the running daemon over HTTP (same env contract as search/recall):
|
|
14
|
+
* ASTRA_MEMORY_URL (default http://127.0.0.1:7777), ASTRA_MEMORY_TOKEN.
|
|
15
|
+
*/
|
|
16
|
+
export declare function consolidateCommand(args: string[]): Promise<void>;
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `astramem-local consolidate <run|proposals|accept|reject>` — operator
|
|
3
|
+
* surface for the ADR-004 stage-9 consolidation pass.
|
|
4
|
+
*
|
|
5
|
+
* consolidate run [--json] trigger a pass now (also scheduled
|
|
6
|
+
* at boot + every 6h by the daemon)
|
|
7
|
+
* consolidate proposals [--json] list pending merge proposals with
|
|
8
|
+
* both texts side by side
|
|
9
|
+
* consolidate accept <id|--all> [--json] accept proposal(s) — merges loser
|
|
10
|
+
* into winner (supersede, not delete)
|
|
11
|
+
* consolidate reject <id> [--json] reject a proposal
|
|
12
|
+
*
|
|
13
|
+
* Talks to the running daemon over HTTP (same env contract as search/recall):
|
|
14
|
+
* ASTRA_MEMORY_URL (default http://127.0.0.1:7777), ASTRA_MEMORY_TOKEN.
|
|
15
|
+
*/
|
|
16
|
+
function getBaseUrl() {
|
|
17
|
+
return process.env.ASTRA_MEMORY_URL ?? 'http://127.0.0.1:7777';
|
|
18
|
+
}
|
|
19
|
+
function getToken() {
|
|
20
|
+
return process.env.ASTRA_MEMORY_TOKEN ?? 'devtok';
|
|
21
|
+
}
|
|
22
|
+
async function api(path, init) {
|
|
23
|
+
const res = await fetch(`${getBaseUrl()}${path}`, {
|
|
24
|
+
...init,
|
|
25
|
+
headers: {
|
|
26
|
+
'content-type': 'application/json',
|
|
27
|
+
authorization: `Bearer ${getToken()}`,
|
|
28
|
+
...(init?.headers ?? {}),
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
if (!res.ok) {
|
|
32
|
+
throw new Error(`HTTP ${res.status}: ${await res.text()}`);
|
|
33
|
+
}
|
|
34
|
+
return res.json();
|
|
35
|
+
}
|
|
36
|
+
/** Fetch memory text for side-by-side display; tolerate lifecycle races. */
|
|
37
|
+
async function memoryText(id) {
|
|
38
|
+
try {
|
|
39
|
+
const m = (await api(`/memory/${id}`));
|
|
40
|
+
return m.text ?? '(no text)';
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return '(unavailable — merged or erased since)';
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
export async function consolidateCommand(args) {
|
|
47
|
+
const [sub, ...rest] = args;
|
|
48
|
+
const jsonMode = rest.includes('--json') || args.includes('--json');
|
|
49
|
+
switch (sub) {
|
|
50
|
+
case 'run': {
|
|
51
|
+
const summary = await api('/consolidation/run', { method: 'POST', body: '{}' });
|
|
52
|
+
if (jsonMode) {
|
|
53
|
+
console.log(JSON.stringify(summary));
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
const s = summary;
|
|
57
|
+
console.log(`Consolidation pass: ${s.groupsScanned} group(s) scanned, ${s.merged.length} auto-merged.`);
|
|
58
|
+
console.log("Review borderline pairs: astramem-local consolidate proposals");
|
|
59
|
+
}
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
case 'proposals': {
|
|
63
|
+
const { proposals } = (await api('/consolidation/proposals?status=pending'));
|
|
64
|
+
if (jsonMode) {
|
|
65
|
+
console.log(JSON.stringify(proposals));
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
if (proposals.length === 0) {
|
|
69
|
+
console.log('No pending consolidation proposals.');
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
console.log(`\n${proposals.length} pending proposal(s):\n`);
|
|
73
|
+
for (const p of proposals) {
|
|
74
|
+
const [winText, loseText] = await Promise.all([memoryText(p.winner_id), memoryText(p.loser_id)]);
|
|
75
|
+
console.log(` ${p.id} (similarity ${p.similarity.toFixed(3)})`);
|
|
76
|
+
console.log(` keep : ${winText.slice(0, 100)}`);
|
|
77
|
+
console.log(` merge: ${loseText.slice(0, 100)}`);
|
|
78
|
+
console.log('');
|
|
79
|
+
}
|
|
80
|
+
console.log('Accept: astramem-local consolidate accept <id> (or --all)');
|
|
81
|
+
console.log('Reject: astramem-local consolidate reject <id>');
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
case 'accept': {
|
|
85
|
+
const all = rest.includes('--all');
|
|
86
|
+
let ids;
|
|
87
|
+
if (all) {
|
|
88
|
+
const { proposals } = (await api('/consolidation/proposals?status=pending'));
|
|
89
|
+
ids = proposals.map(p => p.id);
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
const id = rest.find(a => !a.startsWith('-'));
|
|
93
|
+
if (!id) {
|
|
94
|
+
console.error('consolidate accept: proposal id required (or --all)');
|
|
95
|
+
process.exit(1);
|
|
96
|
+
}
|
|
97
|
+
ids = [id];
|
|
98
|
+
}
|
|
99
|
+
let accepted = 0;
|
|
100
|
+
const skipped = [];
|
|
101
|
+
for (const id of ids) {
|
|
102
|
+
try {
|
|
103
|
+
await api(`/consolidation/proposals/${id}/accept`, { method: 'POST' });
|
|
104
|
+
accepted++;
|
|
105
|
+
}
|
|
106
|
+
catch (err) {
|
|
107
|
+
// 409s are expected when an atom was merged/erased since the
|
|
108
|
+
// proposal was written — skip, don't abort the batch.
|
|
109
|
+
skipped.push({ id, reason: err.message.split('\n')[0] ?? 'unknown' });
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
if (jsonMode) {
|
|
113
|
+
console.log(JSON.stringify({ accepted, skipped }));
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
console.log(`Accepted ${accepted} proposal(s)${skipped.length ? `, skipped ${skipped.length} (lifecycle conflicts)` : ''}.`);
|
|
117
|
+
for (const s of skipped)
|
|
118
|
+
console.log(` skipped ${s.id}: ${s.reason}`);
|
|
119
|
+
}
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
case 'reject': {
|
|
123
|
+
const id = rest.find(a => !a.startsWith('-'));
|
|
124
|
+
if (!id) {
|
|
125
|
+
console.error('consolidate reject: proposal id required');
|
|
126
|
+
process.exit(1);
|
|
127
|
+
}
|
|
128
|
+
await api(`/consolidation/proposals/${id}/reject`, { method: 'POST' });
|
|
129
|
+
console.log(jsonMode ? JSON.stringify({ rejected: id }) : `Rejected ${id}.`);
|
|
130
|
+
break;
|
|
131
|
+
}
|
|
132
|
+
default:
|
|
133
|
+
console.log(`astramem-local consolidate <subcommand>
|
|
134
|
+
|
|
135
|
+
Subcommands:
|
|
136
|
+
run Trigger a consolidation pass now
|
|
137
|
+
proposals List pending merge proposals (side-by-side texts)
|
|
138
|
+
accept <id> | --all Accept proposal(s) — supersedes loser into winner
|
|
139
|
+
reject <id> Reject a proposal
|
|
140
|
+
|
|
141
|
+
The daemon also runs a pass automatically at boot and every 6 hours.`);
|
|
142
|
+
if (sub !== undefined && sub !== '--help' && sub !== '-h')
|
|
143
|
+
process.exit(1);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=consolidate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consolidate.js","sourceRoot":"","sources":["../../src/cli/consolidate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function doctorCommand(args: string[]): Promise<void>;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { join } from 'node:path';
|
|
2
|
+
import { resolveRuntimeConfig } from '../config/resolve-runtime.js';
|
|
3
|
+
import { getChecks, openProductionDbReadonly } from '../doctor/checks.js';
|
|
4
|
+
import { getHardeningChecks } from '../doctor/hardening-checks.js';
|
|
5
|
+
import { runChecks, formatTable, formatJson } from '../doctor/runner.js';
|
|
6
|
+
function parseFlag(args, flag) {
|
|
7
|
+
return args.includes(flag);
|
|
8
|
+
}
|
|
9
|
+
function parseArg(args, flag) {
|
|
10
|
+
const i = args.indexOf(flag);
|
|
11
|
+
return i >= 0 ? args[i + 1] : undefined;
|
|
12
|
+
}
|
|
13
|
+
export async function doctorCommand(args) {
|
|
14
|
+
const jsonMode = parseFlag(args, '--json');
|
|
15
|
+
const portArg = parseArg(args, '--port');
|
|
16
|
+
// Shared resolver — doctor must probe the SAME dataDir the daemon serves
|
|
17
|
+
// from (config.yaml included), not the compile-time default. Previously a
|
|
18
|
+
// non-default config.yaml dataDir made doctor probe the wrong directory,
|
|
19
|
+
// producing false "file is not a database" failures.
|
|
20
|
+
const { cfg, port, dataDir } = resolveRuntimeConfig({
|
|
21
|
+
port: portArg ? Number(portArg) : undefined,
|
|
22
|
+
});
|
|
23
|
+
const checks = [
|
|
24
|
+
...getChecks({
|
|
25
|
+
port,
|
|
26
|
+
dataDir,
|
|
27
|
+
redactionEnabled: cfg.security.redaction.enabled,
|
|
28
|
+
encryptionEnabled: cfg.security.encryption.enabled,
|
|
29
|
+
}),
|
|
30
|
+
// W1.3: parity with `reinstall`'s assertions — stranded legacy DB,
|
|
31
|
+
// plaintext pre-encryption backup, served-vs-build version, zombie
|
|
32
|
+
// instance lock, poison-job accumulation.
|
|
33
|
+
...getHardeningChecks({
|
|
34
|
+
dataDir,
|
|
35
|
+
port,
|
|
36
|
+
openDbReadonly: () => openProductionDbReadonly(join(dataDir, 'memory.sqlite'), cfg.security.encryption.enabled),
|
|
37
|
+
}),
|
|
38
|
+
];
|
|
39
|
+
const results = await runChecks(checks);
|
|
40
|
+
if (jsonMode) {
|
|
41
|
+
console.log(formatJson(results));
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
console.log('\nAstraMemory Doctor\n');
|
|
45
|
+
console.log(formatTable(results));
|
|
46
|
+
const failCount = results.filter(r => !r.ok).length;
|
|
47
|
+
const okCount = results.filter(r => r.ok).length;
|
|
48
|
+
console.log(`\n ${okCount} passed, ${failCount} failed\n`);
|
|
49
|
+
}
|
|
50
|
+
const hasFailures = results.some(r => !r.ok);
|
|
51
|
+
if (hasFailures)
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEzE,SAAS,SAAS,CAAC,IAAc,EAAE,IAAY;IAC7C,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,QAAQ,CAAC,IAAc,EAAE,IAAY;IAC5C,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAc;IAChD,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAEzC,yEAAyE;IACzE,0EAA0E;IAC1E,yEAAyE;IACzE,qDAAqD;IACrD,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,oBAAoB,CAAC;QAClD,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;KAC5C,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG;QACb,GAAG,SAAS,CAAC;YACX,IAAI;YACJ,OAAO;YACP,gBAAgB,EAAE,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO;YAChD,iBAAiB,EAAE,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO;SACnD,CAAC;QACF,mEAAmE;QACnE,mEAAmE;QACnE,0CAA0C;QAC1C,GAAG,kBAAkB,CAAC;YACpB,OAAO;YACP,IAAI;YACJ,cAAc,EAAE,GAAG,EAAE,CACnB,wBAAwB,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC;SAC5F,CAAC;KACH,CAAC;IACF,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;IAExC,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;IACnC,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;QAClC,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC;QACpD,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,OAAO,OAAO,YAAY,SAAS,WAAW,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7C,IAAI,WAAW;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `astramem-local entity-backfill [--dry-run] [--limit N] [--json]`
|
|
3
|
+
*
|
|
4
|
+
* FEAT-402 (W4.2) AC-7 — one-shot entity extraction + linking backfill for
|
|
5
|
+
* memories that predate distill-time entity extraction (migration 012).
|
|
6
|
+
* Extracts entities from existing memory text via the extraction LLM
|
|
7
|
+
* provider and links them; never re-distills or mutates memory text. See
|
|
8
|
+
* src/entity/backfill.ts for the core (DB-only, testable) logic.
|
|
9
|
+
*/
|
|
10
|
+
export declare function entityBackfillCommand(args: string[]): Promise<void>;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `astramem-local entity-backfill [--dry-run] [--limit N] [--json]`
|
|
3
|
+
*
|
|
4
|
+
* FEAT-402 (W4.2) AC-7 — one-shot entity extraction + linking backfill for
|
|
5
|
+
* memories that predate distill-time entity extraction (migration 012).
|
|
6
|
+
* Extracts entities from existing memory text via the extraction LLM
|
|
7
|
+
* provider and links them; never re-distills or mutates memory text. See
|
|
8
|
+
* src/entity/backfill.ts for the core (DB-only, testable) logic.
|
|
9
|
+
*/
|
|
10
|
+
import { openRuntimeDb } from './open-runtime-db.js';
|
|
11
|
+
import { getProviders } from '../providers/index.js';
|
|
12
|
+
import { runEntityBackfill } from '../entity/backfill.js';
|
|
13
|
+
function parseArg(args, flag) {
|
|
14
|
+
const i = args.indexOf(flag);
|
|
15
|
+
return i >= 0 ? args[i + 1] : undefined;
|
|
16
|
+
}
|
|
17
|
+
export async function entityBackfillCommand(args) {
|
|
18
|
+
const jsonMode = args.includes('--json');
|
|
19
|
+
const dryRun = args.includes('--dry-run');
|
|
20
|
+
const limitArg = parseArg(args, '--limit');
|
|
21
|
+
const limit = limitArg ? Math.max(1, Number(limitArg)) : undefined;
|
|
22
|
+
const { db, cfg } = openRuntimeDb();
|
|
23
|
+
const provider = getProviders(cfg).llm.extraction;
|
|
24
|
+
const result = await runEntityBackfill(db, provider, {
|
|
25
|
+
dryRun,
|
|
26
|
+
limit,
|
|
27
|
+
capUsd: cfg.budget.daily_usd,
|
|
28
|
+
});
|
|
29
|
+
db.close();
|
|
30
|
+
if (jsonMode) {
|
|
31
|
+
console.log(JSON.stringify(result, null, 2));
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
console.log('');
|
|
35
|
+
console.log(' AstraMemory Entity Backfill');
|
|
36
|
+
console.log(' ───────────────────────────');
|
|
37
|
+
console.log(` Scanned: ${result.scanned}`);
|
|
38
|
+
console.log(` Memories linked: ${result.linked}`);
|
|
39
|
+
console.log(` Entity links created: ${result.entitiesLinked}`);
|
|
40
|
+
console.log(` Skipped (no entities found): ${result.skipped}`);
|
|
41
|
+
if (dryRun) {
|
|
42
|
+
console.log(' --dry-run: no rows were mutated.');
|
|
43
|
+
}
|
|
44
|
+
console.log('');
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=entity-backfill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-backfill.js","sourceRoot":"","sources":["../../src/cli/entity-backfill.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAA6B,MAAM,uBAAuB,CAAC;AAErF,SAAS,QAAQ,CAAC,IAAc,EAAE,IAAY;IAC5C,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,IAAc;IACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEnE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,aAAa,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC;IAElD,MAAM,MAAM,GAAyB,MAAM,iBAAiB,CAAC,EAAE,EAAE,QAAQ,EAAE;QACzE,MAAM;QACN,KAAK;QACL,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS;KAC7B,CAAC,CAAC;IAEH,EAAE,CAAC,KAAK,EAAE,CAAC;IAEX,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7C,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,sBAAsB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,2BAA2B,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,kCAAkC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAChE,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* hook-install.ts — SessionStart memory-pack hook auto-install.
|
|
3
|
+
*
|
|
4
|
+
* Deferred from KF-B (docs/hooks/memory-pack.md shipped the manual-install
|
|
5
|
+
* recipe; this wires it into `astramem-local init`). Installs the
|
|
6
|
+
* platform-appropriate one-liner into the user's global Claude Code settings
|
|
7
|
+
* (`~/.claude/settings.json` by default, injectable via `settingsPath` for
|
|
8
|
+
* tests and callers that target a project-local settings file instead).
|
|
9
|
+
*
|
|
10
|
+
* Read-modify-write: parses existing JSON, appends one SessionStart hook
|
|
11
|
+
* block, and writes the whole object back — every other key (and every other
|
|
12
|
+
* hook) survives untouched. Idempotent: detects an already-installed
|
|
13
|
+
* astramem hook by the `/recall/pack` marker substring in any existing
|
|
14
|
+
* SessionStart command and skips re-inserting it.
|
|
15
|
+
*/
|
|
16
|
+
/** Marker substring used to detect an already-installed astramem hook (idempotency). */
|
|
17
|
+
export declare const HOOK_MARKER = "/recall/pack";
|
|
18
|
+
/** Default target: `~/.claude/settings.json` (global, matches docs/hooks/memory-pack.md). */
|
|
19
|
+
export declare function defaultSettingsPath(): string;
|
|
20
|
+
/**
|
|
21
|
+
* Build the platform-appropriate SessionStart hook one-liner from
|
|
22
|
+
* docs/hooks/memory-pack.md, with the daemon port filled in.
|
|
23
|
+
*
|
|
24
|
+
* Uses `MEMORY_BEARER` (the env var `astramem-local init` actually persists
|
|
25
|
+
* to the user's shell — see src/config/persist-envs.ts and the `.mcp.json`
|
|
26
|
+
* wiring in README.md), not the doc's original `ASTRAMEM_TOKEN` placeholder.
|
|
27
|
+
*/
|
|
28
|
+
export declare function buildHookCommand(port: number): string;
|
|
29
|
+
export interface InstallHookOptions {
|
|
30
|
+
/** Daemon port to bake into the hook URL. */
|
|
31
|
+
port: number;
|
|
32
|
+
/** Injectable target path — defaults to defaultSettingsPath(). */
|
|
33
|
+
settingsPath?: string;
|
|
34
|
+
}
|
|
35
|
+
export type InstallHookOutcome = 'installed' | 'already-installed';
|
|
36
|
+
export interface InstallHookResult {
|
|
37
|
+
outcome: InstallHookOutcome;
|
|
38
|
+
settingsPath: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Install the SessionStart memory-pack hook into `opts.settingsPath`
|
|
42
|
+
* (default `~/.claude/settings.json`). Preserves all existing content;
|
|
43
|
+
* idempotent against repeated calls.
|
|
44
|
+
*/
|
|
45
|
+
export declare function installMemoryPackHook(opts: InstallHookOptions): InstallHookResult;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* hook-install.ts — SessionStart memory-pack hook auto-install.
|
|
3
|
+
*
|
|
4
|
+
* Deferred from KF-B (docs/hooks/memory-pack.md shipped the manual-install
|
|
5
|
+
* recipe; this wires it into `astramem-local init`). Installs the
|
|
6
|
+
* platform-appropriate one-liner into the user's global Claude Code settings
|
|
7
|
+
* (`~/.claude/settings.json` by default, injectable via `settingsPath` for
|
|
8
|
+
* tests and callers that target a project-local settings file instead).
|
|
9
|
+
*
|
|
10
|
+
* Read-modify-write: parses existing JSON, appends one SessionStart hook
|
|
11
|
+
* block, and writes the whole object back — every other key (and every other
|
|
12
|
+
* hook) survives untouched. Idempotent: detects an already-installed
|
|
13
|
+
* astramem hook by the `/recall/pack` marker substring in any existing
|
|
14
|
+
* SessionStart command and skips re-inserting it.
|
|
15
|
+
*/
|
|
16
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
17
|
+
import { dirname, join } from 'node:path';
|
|
18
|
+
import { homedir, platform } from 'node:os';
|
|
19
|
+
/** Marker substring used to detect an already-installed astramem hook (idempotency). */
|
|
20
|
+
export const HOOK_MARKER = '/recall/pack';
|
|
21
|
+
/** Default target: `~/.claude/settings.json` (global, matches docs/hooks/memory-pack.md). */
|
|
22
|
+
export function defaultSettingsPath() {
|
|
23
|
+
return join(homedir(), '.claude', 'settings.json');
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Build the platform-appropriate SessionStart hook one-liner from
|
|
27
|
+
* docs/hooks/memory-pack.md, with the daemon port filled in.
|
|
28
|
+
*
|
|
29
|
+
* Uses `MEMORY_BEARER` (the env var `astramem-local init` actually persists
|
|
30
|
+
* to the user's shell — see src/config/persist-envs.ts and the `.mcp.json`
|
|
31
|
+
* wiring in README.md), not the doc's original `ASTRAMEM_TOKEN` placeholder.
|
|
32
|
+
*/
|
|
33
|
+
export function buildHookCommand(port) {
|
|
34
|
+
const url = `http://127.0.0.1:${port}/recall/pack`;
|
|
35
|
+
if (platform() === 'win32') {
|
|
36
|
+
return (`powershell -NoProfile -Command "try { $r = Invoke-RestMethod -Method Post -Uri ${url} ` +
|
|
37
|
+
`-Headers @{Authorization=\\"Bearer $env:MEMORY_BEARER\\"} -ContentType application/json ` +
|
|
38
|
+
`-Body (@{repo=(Split-Path -Leaf (Get-Location))} | ConvertTo-Json) -TimeoutSec 2; ` +
|
|
39
|
+
`if ($r.pack) { $r.pack } } catch {}"`);
|
|
40
|
+
}
|
|
41
|
+
return (`curl -s -m 2 -X POST ${url} -H "Authorization: Bearer $MEMORY_BEARER" ` +
|
|
42
|
+
`-H "Content-Type: application/json" -d "{\\"repo\\": \\"$(basename \\"$PWD\\")\\"}" | ` +
|
|
43
|
+
`node -e "let d='';process.stdin.on('data',c=>d+=c).on('end',()=>{try{const p=JSON.parse(d).pack;if(p)console.log(p)}catch{}})"`);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Install the SessionStart memory-pack hook into `opts.settingsPath`
|
|
47
|
+
* (default `~/.claude/settings.json`). Preserves all existing content;
|
|
48
|
+
* idempotent against repeated calls.
|
|
49
|
+
*/
|
|
50
|
+
export function installMemoryPackHook(opts) {
|
|
51
|
+
const settingsPath = opts.settingsPath ?? defaultSettingsPath();
|
|
52
|
+
let settings = {};
|
|
53
|
+
if (existsSync(settingsPath)) {
|
|
54
|
+
const raw = readFileSync(settingsPath, 'utf8');
|
|
55
|
+
try {
|
|
56
|
+
settings = raw.trim() === '' ? {} : JSON.parse(raw);
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
throw new Error(`hook-install: ${settingsPath} contains invalid JSON — fix or remove it before retrying`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
const hooks = settings.hooks ?? {};
|
|
63
|
+
const sessionStart = hooks.SessionStart ?? [];
|
|
64
|
+
const alreadyInstalled = sessionStart.some((block) => (block.hooks ?? []).some((h) => typeof h.command === 'string' && h.command.includes(HOOK_MARKER)));
|
|
65
|
+
if (alreadyInstalled) {
|
|
66
|
+
return { outcome: 'already-installed', settingsPath };
|
|
67
|
+
}
|
|
68
|
+
sessionStart.push({
|
|
69
|
+
hooks: [{ type: 'command', command: buildHookCommand(opts.port), timeout: 3 }],
|
|
70
|
+
});
|
|
71
|
+
hooks.SessionStart = sessionStart;
|
|
72
|
+
settings.hooks = hooks;
|
|
73
|
+
mkdirSync(dirname(settingsPath), { recursive: true });
|
|
74
|
+
writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + '\n', 'utf8');
|
|
75
|
+
return { outcome: 'installed', settingsPath };
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=hook-install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-install.js","sourceRoot":"","sources":["../../src/cli/hook-install.ts"],"names":[],"mappings":"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"}
|