openclaw-hybrid-memory 2026.5.310 → 2026.6.10
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/api/plugin-runtime.ts +2 -0
- package/backends/facts-db/contradictions.ts +1 -1
- package/cli/cmd-extract-directives.ts +225 -11
- package/cli/cmd-extract-proposals.ts +5 -6
- package/cli/cmd-extract-reinforcement.ts +71 -0
- package/cli/cmd-feedback.ts +15 -9
- package/cli/commands/manage/register-reflection-pipeline.ts +247 -13
- package/cli/commands/manage/register-storage-maintenance.ts +224 -15
- package/cli/commands/manage/storage-stats-helpers.ts +13 -2
- package/cli/context.ts +9 -19
- package/cli/distill.ts +31 -1
- package/cli/register.ts +28 -38
- package/dist/api/plugin-runtime.js.map +1 -1
- package/dist/backends/agent-health-store.js.map +1 -1
- package/dist/backends/apitap-store.js.map +1 -1
- package/dist/backends/audit-store.js.map +1 -1
- package/dist/backends/base-sqlite-store.js.map +1 -1
- package/dist/backends/cost-tracker.js.map +1 -1
- package/dist/backends/credentials-db.js +2 -3
- package/dist/backends/credentials-db.js.map +1 -1
- package/dist/backends/crystallization-store.js.map +1 -1
- package/dist/backends/edict-store.js.map +1 -1
- package/dist/backends/event-bus.js.map +1 -1
- package/dist/backends/event-log.js.map +1 -1
- package/dist/backends/facts-db/cache-manager.js.map +1 -1
- package/dist/backends/facts-db/clusters.js.map +1 -1
- package/dist/backends/facts-db/contradictions.js +1 -1
- package/dist/backends/facts-db/contradictions.js.map +1 -1
- package/dist/backends/facts-db/crud.js.map +1 -1
- package/dist/backends/facts-db/db-connection.js.map +1 -1
- package/dist/backends/facts-db/entity-autolink.js.map +1 -1
- package/dist/backends/facts-db/entity-layer.js.map +1 -1
- package/dist/backends/facts-db/episodes.js.map +1 -1
- package/dist/backends/facts-db/fact-queries.js.map +1 -1
- package/dist/backends/facts-db/fact-read-queries.js.map +1 -1
- package/dist/backends/facts-db/facts-db-layer1.js.map +1 -1
- package/dist/backends/facts-db/facts-db-layer2.js.map +1 -1
- package/dist/backends/facts-db/facts-db-layer3.js.map +1 -1
- package/dist/backends/facts-db/fts-text.js.map +1 -1
- package/dist/backends/facts-db/generated-skills/policy.js.map +1 -1
- package/dist/backends/facts-db/generated-skills.js.map +1 -1
- package/dist/backends/facts-db/housekeeping.js.map +1 -1
- package/dist/backends/facts-db/links.js.map +1 -1
- package/dist/backends/facts-db/maintenance.js.map +1 -1
- package/dist/backends/facts-db/procedures/crud.js.map +1 -1
- package/dist/backends/facts-db/procedures/internal.js.map +1 -1
- package/dist/backends/facts-db/procedures/promotion.js.map +1 -1
- package/dist/backends/facts-db/procedures/search.js.map +1 -1
- package/dist/backends/facts-db/procedures/stats.js.map +1 -1
- package/dist/backends/facts-db/reinforcement.js.map +1 -1
- package/dist/backends/facts-db/row-mapper.js.map +1 -1
- package/dist/backends/facts-db/scan-cursors.js.map +1 -1
- package/dist/backends/facts-db/schema-bootstrap.js.map +1 -1
- package/dist/backends/facts-db/scope-sql.js.map +1 -1
- package/dist/backends/facts-db/search.js.map +1 -1
- package/dist/backends/facts-db/stats.js.map +1 -1
- package/dist/backends/facts-db/types.js.map +1 -1
- package/dist/backends/facts-db/variants.js.map +1 -1
- package/dist/backends/identity-reflection-store.js.map +1 -1
- package/dist/backends/issue-store.js.map +1 -1
- package/dist/backends/learnings-db.js.map +1 -1
- package/dist/backends/migrations/facts-migrations.js.map +1 -1
- package/dist/backends/migrations/procedures.js.map +1 -1
- package/dist/backends/narratives-db.js.map +1 -1
- package/dist/backends/persona-state-store.js.map +1 -1
- package/dist/backends/proposals-db.js.map +1 -1
- package/dist/backends/scope-filter-sql.js.map +1 -1
- package/dist/backends/sqlite-schema-meta.js.map +1 -1
- package/dist/backends/tool-proposal-store.js.map +1 -1
- package/dist/backends/vector-db/constants.js.map +1 -1
- package/dist/backends/vector-db/path-utils.js.map +1 -1
- package/dist/backends/vector-db/runtime-locks.js.map +1 -1
- package/dist/backends/vector-db/vector-db-class.js.map +1 -1
- package/dist/backends/wal.js.map +1 -1
- package/dist/backends/workflow-store.js.map +1 -1
- package/dist/benchmark/shadow-eval.js.map +1 -1
- package/dist/cli/active-tasks.js.map +1 -1
- package/dist/cli/backup.js.map +1 -1
- package/dist/cli/benchmark.js.map +1 -1
- package/dist/cli/cmd-backfill.js.map +1 -1
- package/dist/cli/cmd-config.js.map +1 -1
- package/dist/cli/cmd-credentials.js.map +1 -1
- package/dist/cli/cmd-demo.js.map +1 -1
- package/dist/cli/cmd-distill.js.map +1 -1
- package/dist/cli/cmd-doctor.js.map +1 -1
- package/dist/cli/cmd-examples.js.map +1 -1
- package/dist/cli/cmd-extract-daily.js.map +1 -1
- package/dist/cli/cmd-extract-directives.js +141 -10
- package/dist/cli/cmd-extract-directives.js.map +1 -1
- package/dist/cli/cmd-extract-procedures.js.map +1 -1
- package/dist/cli/cmd-extract-proposals.js +3 -2
- package/dist/cli/cmd-extract-proposals.js.map +1 -1
- package/dist/cli/cmd-extract-reinforcement.js +39 -0
- package/dist/cli/cmd-extract-reinforcement.js.map +1 -1
- package/dist/cli/cmd-extract-sessions.js.map +1 -1
- package/dist/cli/cmd-feedback.js +9 -4
- package/dist/cli/cmd-feedback.js.map +1 -1
- package/dist/cli/cmd-health.js.map +1 -1
- package/dist/cli/cmd-providers.js.map +1 -1
- package/dist/cli/cmd-selfcorrection.js.map +1 -1
- package/dist/cli/cmd-setup.js.map +1 -1
- package/dist/cli/cmd-status.js.map +1 -1
- package/dist/cli/cmd-store.js.map +1 -1
- package/dist/cli/cmd-user-friendly.js.map +1 -1
- package/dist/cli/cmd-verify.js.map +1 -1
- package/dist/cli/commands/manage/bindings.js.map +1 -1
- package/dist/cli/commands/manage/dream-cycle-followup.js.map +1 -1
- package/dist/cli/commands/manage/maintenance-heartbeat.js.map +1 -1
- package/dist/cli/commands/manage/register-agents-audit-runall.js.map +1 -1
- package/dist/cli/commands/manage/register-analyze-maintenance-logs.js.map +1 -1
- package/dist/cli/commands/manage/register-budget-proposals.js.map +1 -1
- package/dist/cli/commands/manage/register-config-cli.js.map +1 -1
- package/dist/cli/commands/manage/register-corrections-and-pipeline.js.map +1 -1
- package/dist/cli/commands/manage/register-corrections.js.map +1 -1
- package/dist/cli/commands/manage/register-council.js.map +1 -1
- package/dist/cli/commands/manage/register-credentials-scope.js.map +1 -1
- package/dist/cli/commands/manage/register-digest.js.map +1 -1
- package/dist/cli/commands/manage/register-lifecycle.js.map +1 -1
- package/dist/cli/commands/manage/register-procedure-lifecycle.js.map +1 -1
- package/dist/cli/commands/manage/register-reconcile-cron-ledgers.js.map +1 -1
- package/dist/cli/commands/manage/register-reflection-pipeline.js +144 -7
- package/dist/cli/commands/manage/register-reflection-pipeline.js.map +1 -1
- package/dist/cli/commands/manage/register-self-correction-feedback.js.map +1 -1
- package/dist/cli/commands/manage/register-storage-and-stats.js.map +1 -1
- package/dist/cli/commands/manage/register-storage-entities-decay.js.map +1 -1
- package/dist/cli/commands/manage/register-storage-graph-audit.js.map +1 -1
- package/dist/cli/commands/manage/register-storage-maintenance.js +152 -9
- package/dist/cli/commands/manage/register-storage-maintenance.js.map +1 -1
- package/dist/cli/commands/manage/register-validate-cron-exit.js.map +1 -1
- package/dist/cli/commands/manage/storage-stats-helpers.js +10 -3
- package/dist/cli/commands/manage/storage-stats-helpers.js.map +1 -1
- package/dist/cli/commands/register-manage-commands.js.map +1 -1
- package/dist/cli/config-feature-summaries.js.map +1 -1
- package/dist/cli/config-output-sink.js.map +1 -1
- package/dist/cli/distill-session-jsonl.js.map +1 -1
- package/dist/cli/distill.js +10 -1
- package/dist/cli/distill.js.map +1 -1
- package/dist/cli/global-verbose.js.map +1 -1
- package/dist/cli/goals.js.map +1 -1
- package/dist/cli/hybrid-mem-commander-utils.js.map +1 -1
- package/dist/cli/install/config-merge.js.map +1 -1
- package/dist/cli/install/cron-jobs.js.map +1 -1
- package/dist/cli/install/embedding-detect.js.map +1 -1
- package/dist/cli/install/run-install.js.map +1 -1
- package/dist/cli/install/workspace.js.map +1 -1
- package/dist/cli/proposals.js.map +1 -1
- package/dist/cli/register.js.map +1 -1
- package/dist/cli/shared.js.map +1 -1
- package/dist/cli/skills.js.map +1 -1
- package/dist/cli/task-queue-status.js.map +1 -1
- package/dist/cli/verified.js.map +1 -1
- package/dist/cli/verify/fact-count.js.map +1 -1
- package/dist/cli/verify/openclaw-config.js.map +1 -1
- package/dist/cli/verify/plugin-config-credentials.js.map +1 -1
- package/dist/cli/verify/sections/config-cron.js.map +1 -1
- package/dist/cli/verify/sections/embeddings.js.map +1 -1
- package/dist/cli/verify/sections/infrastructure.js.map +1 -1
- package/dist/cli/verify/sections/llm-models.js.map +1 -1
- package/dist/cli/verify/sections/reconcile.js.map +1 -1
- package/dist/cli/verify/verify-run-state.js.map +1 -1
- package/dist/cli/verify-llm-azure-auth.js.map +1 -1
- package/dist/cli/verify.js.map +1 -1
- package/dist/config/hybrid-schema.js.map +1 -1
- package/dist/config/index.js.map +1 -1
- package/dist/config/maintenance-fallback-policy.js.map +1 -1
- package/dist/config/parsers/capture.js.map +1 -1
- package/dist/config/parsers/core.js.map +1 -1
- package/dist/config/parsers/features.js.map +1 -1
- package/dist/config/parsers/index.js.map +1 -1
- package/dist/config/parsers/maintenance.js.map +1 -1
- package/dist/config/parsers/retrieval.js.map +1 -1
- package/dist/config/parsers/sensors.js.map +1 -1
- package/dist/config/skill-sections.js.map +1 -1
- package/dist/config/skill-size-limits.js.map +1 -1
- package/dist/config/types/agents.js.map +1 -1
- package/dist/config/types/bootstrap.js.map +1 -1
- package/dist/config/types/core.js.map +1 -1
- package/dist/config/types/index.js.map +1 -1
- package/dist/config/utils.js.map +1 -1
- package/dist/index-help.js.map +1 -1
- package/dist/index-testing-exports.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/lifecycle/hook-resolution-api.js.map +1 -1
- package/dist/lifecycle/hooks.js +0 -1
- package/dist/lifecycle/hooks.js.map +1 -1
- package/dist/lifecycle/resolve-agent-id.js.map +1 -1
- package/dist/lifecycle/session-state.js.map +1 -1
- package/dist/lifecycle/stage-active-task.js.map +1 -1
- package/dist/lifecycle/stage-auth-failure.js.map +1 -1
- package/dist/lifecycle/stage-capture/run-capture.js.map +1 -1
- package/dist/lifecycle/stage-capture.js.map +1 -1
- package/dist/lifecycle/stage-cleanup.js.map +1 -1
- package/dist/lifecycle/stage-credential-hint.js.map +1 -1
- package/dist/lifecycle/stage-frustration.js.map +1 -1
- package/dist/lifecycle/stage-goal-stewardship.js.map +1 -1
- package/dist/lifecycle/stage-goal-subagent.js.map +1 -1
- package/dist/lifecycle/stage-injection.js +1 -1
- package/dist/lifecycle/stage-injection.js.map +1 -1
- package/dist/lifecycle/stage-recall/run-recall.js.map +1 -1
- package/dist/lifecycle/stage-recall.js.map +1 -1
- package/dist/lifecycle/stage-setup.js.map +1 -1
- package/dist/routes/dashboard/collectors.js.map +1 -1
- package/dist/routes/dashboard/html.js.map +1 -1
- package/dist/routes/dashboard/server.js.map +1 -1
- package/dist/routes/dashboard-graph.js.map +1 -1
- package/dist/routes/graphql-resolvers.js.map +1 -1
- package/dist/routes/graphql-server.js.map +1 -1
- package/dist/services/active-task-checkpoint.js.map +1 -1
- package/dist/services/active-task-injection.js.map +1 -1
- package/dist/services/active-task.js.map +1 -1
- package/dist/services/adaptive-catch-up-pacing.js +25 -0
- package/dist/services/adaptive-catch-up-pacing.js.map +1 -0
- package/dist/services/adaptive-maintenance-llm.js.map +1 -1
- package/dist/services/adaptive-model-limits.js.map +1 -1
- package/dist/services/ambient-retrieval.js.map +1 -1
- package/dist/services/apitap-service.js.map +1 -1
- package/dist/services/audit-health-exit-info.js.map +1 -1
- package/dist/services/audit-health-json.js.map +1 -1
- package/dist/services/auth-failure-detect.js.map +1 -1
- package/dist/services/auto-capture.js.map +1 -1
- package/dist/services/auto-classifier.js.map +1 -1
- package/dist/services/auto-skills-audit.js.map +1 -1
- package/dist/services/bootstrap-optional.js.map +1 -1
- package/dist/services/bootstrap-priority.js.map +1 -1
- package/dist/services/bootstrap.js.map +1 -1
- package/dist/services/capture-provenance.js.map +1 -1
- package/dist/services/capture-utils.js.map +1 -1
- package/dist/services/chat.js +22 -3
- package/dist/services/chat.js.map +1 -1
- package/dist/services/classification-scope.js.map +1 -1
- package/dist/services/classification.js.map +1 -1
- package/dist/services/cli-sql-dump.js.map +1 -1
- package/dist/services/consolidation.js.map +1 -1
- package/dist/services/context-audit.js +1 -1
- package/dist/services/context-audit.js.map +1 -1
- package/dist/services/context-budget.js.map +1 -1
- package/dist/services/context-engine.js.map +1 -1
- package/dist/services/contextual-variants.js.map +1 -1
- package/dist/services/continuous-verifier.js.map +1 -1
- package/dist/services/contradiction-adjudicator.js.map +1 -1
- package/dist/services/cost-context.js.map +1 -1
- package/dist/services/cost-feature-labels.js.map +1 -1
- package/dist/services/credential-migration.js.map +1 -1
- package/dist/services/credential-scanner.js.map +1 -1
- package/dist/services/credential-validation.js.map +1 -1
- package/dist/services/cron-exit-validator.js.map +1 -1
- package/dist/services/cron-guard.js.map +1 -1
- package/dist/services/cron-job-bash-harness.js +52 -5
- package/dist/services/cron-job-bash-harness.js.map +1 -1
- package/dist/services/cron-maintenance-reconciler.js +1 -3
- package/dist/services/cron-maintenance-reconciler.js.map +1 -1
- package/dist/services/cross-agent-learning.js.map +1 -1
- package/dist/services/crystallization-proposer.js.map +1 -1
- package/dist/services/dedupe-policy.js.map +1 -1
- package/dist/services/deprecated-cron-commands.js.map +1 -1
- package/dist/services/directive-extract.js.map +1 -1
- package/dist/services/document-chunker.js.map +1 -1
- package/dist/services/document-grader.js.map +1 -1
- package/dist/services/dream-cycle.js.map +1 -1
- package/dist/services/embedding-migration.js.map +1 -1
- package/dist/services/embedding-registry.js.map +1 -1
- package/dist/services/embeddings/chain-provider.js.map +1 -1
- package/dist/services/embeddings/factory.js.map +1 -1
- package/dist/services/embeddings/fallback-provider.js.map +1 -1
- package/dist/services/embeddings/ollama-provider.js.map +1 -1
- package/dist/services/embeddings/onnx-provider.js.map +1 -1
- package/dist/services/embeddings/openai-provider.js.map +1 -1
- package/dist/services/embeddings/shared.js +3 -3
- package/dist/services/embeddings/shared.js.map +1 -1
- package/dist/services/embeddings/types.js.map +1 -1
- package/dist/services/entity-enrichment-adaptive.js +128 -0
- package/dist/services/entity-enrichment-adaptive.js.map +1 -0
- package/dist/services/entity-enrichment-cli.js +389 -42
- package/dist/services/entity-enrichment-cli.js.map +1 -1
- package/dist/services/entity-enrichment.js +31 -5
- package/dist/services/entity-enrichment.js.map +1 -1
- package/dist/services/error-reporter/noisy-errors.js.map +1 -1
- package/dist/services/error-reporter/sanitize.js.map +1 -1
- package/dist/services/error-reporter.js.map +1 -1
- package/dist/services/event-hub-repair.js.map +1 -1
- package/dist/services/export-memory.js.map +1 -1
- package/dist/services/fact-extraction.js.map +1 -1
- package/dist/services/feedback-effectiveness.js.map +1 -1
- package/dist/services/find-duplicates.js.map +1 -1
- package/dist/services/frustration-detector.js.map +1 -1
- package/dist/services/fts-search.js.map +1 -1
- package/dist/services/gap-detector.js.map +1 -1
- package/dist/services/generated-skill-lifecycle.js.map +1 -1
- package/dist/services/generated-skill-validation.js.map +1 -1
- package/dist/services/goal-active-task-mirror.js.map +1 -1
- package/dist/services/goal-circuit-breaker.js.map +1 -1
- package/dist/services/goal-health.js.map +1 -1
- package/dist/services/goal-registry.js.map +1 -1
- package/dist/services/goal-stewardship-heartbeat.js.map +1 -1
- package/dist/services/goal-stewardship-llm-triage.js.map +1 -1
- package/dist/services/goal-stewardship-verify-cron.js.map +1 -1
- package/dist/services/goal-stewardship.js.map +1 -1
- package/dist/services/goal-subagent.js.map +1 -1
- package/dist/services/graph-retrieval.js.map +1 -1
- package/dist/services/humanizer-score.js.map +1 -1
- package/dist/services/hybrid-mem-cron-default-job-steps.js.map +1 -1
- package/dist/services/hyde-helper.js.map +1 -1
- package/dist/services/identity-reflection.js.map +1 -1
- package/dist/services/implicit-feedback-extract.js.map +1 -1
- package/dist/services/index.js.map +1 -1
- package/dist/services/ingest-utils.js.map +1 -1
- package/dist/services/intent-template.js.map +1 -1
- package/dist/services/json-array-parser.js.map +1 -1
- package/dist/services/knowledge-gaps.js.map +1 -1
- package/dist/services/language-keywords-build.js.map +1 -1
- package/dist/services/lifecycle/github-adapter.js.map +1 -1
- package/dist/services/llm-rate-limit-headers.js +1 -2
- package/dist/services/llm-rate-limit-headers.js.map +1 -1
- package/dist/services/maintenance-auto-fix.js.map +1 -1
- package/dist/services/maintenance-log-analyzer.js +7 -1
- package/dist/services/maintenance-log-analyzer.js.map +1 -1
- package/dist/services/maintenance-timestamp.js.map +1 -1
- package/dist/services/memory-diagnostics.js.map +1 -1
- package/dist/services/memory-index.js.map +1 -1
- package/dist/services/merge-results.js.map +1 -1
- package/dist/services/model-capabilities.js.map +1 -1
- package/dist/services/model-pricing.js.map +1 -1
- package/dist/services/narrative-recall.js.map +1 -1
- package/dist/services/openclaw-session-artifact.js.map +1 -1
- package/dist/services/passive-observer.js.map +1 -1
- package/dist/services/pattern-detector-hash.js.map +1 -1
- package/dist/services/pattern-detector.js.map +1 -1
- package/dist/services/pending-autopilot/foundation.js.map +1 -1
- package/dist/services/pending-autopilot/redaction.js.map +1 -1
- package/dist/services/pending-autopilot/store.js.map +1 -1
- package/dist/services/pending-autopilot/types.js.map +1 -1
- package/dist/services/pending-digest-autopilot-cron.js.map +1 -1
- package/dist/services/pending-digest-autopilot.js.map +1 -1
- package/dist/services/pending-review-digest.js.map +1 -1
- package/dist/services/persona-proposal-triage.js.map +1 -1
- package/dist/services/persona-state-promotion.js.map +1 -1
- package/dist/services/post-compaction-recall.js.map +1 -1
- package/dist/services/pre-consolidation-flush.js.map +1 -1
- package/dist/services/pre-finalization-guard.js.map +1 -1
- package/dist/services/procedure-cluster.js.map +1 -1
- package/dist/services/procedure-extractor.js.map +1 -1
- package/dist/services/procedure-promotion/duplicate-skill-cache.js.map +1 -1
- package/dist/services/procedure-promotion-policy.js.map +1 -1
- package/dist/services/procedure-selection-metrics.js.map +1 -1
- package/dist/services/procedure-skill-eval.js.map +1 -1
- package/dist/services/procedure-skill-generator.js.map +1 -1
- package/dist/services/procedure-skill-recipe.js.map +1 -1
- package/dist/services/procedure-skill-shrink.js.map +1 -1
- package/dist/services/procedure-skill-workflow.js.map +1 -1
- package/dist/services/provenance.js.map +1 -1
- package/dist/services/public-export-bundle.js.map +1 -1
- package/dist/services/python-bridge.js.map +1 -1
- package/dist/services/query-expander.js.map +1 -1
- package/dist/services/query-validator.js.map +1 -1
- package/dist/services/recall-pipeline.js.map +1 -1
- package/dist/services/recall-timing.js.map +1 -1
- package/dist/services/recent-http-attempts.js.map +1 -1
- package/dist/services/reflection/shared.js.map +1 -1
- package/dist/services/reflection.js.map +1 -1
- package/dist/services/reinforcement-extract.js.map +1 -1
- package/dist/services/reranker.js.map +1 -1
- package/dist/services/responses-adapter.js.map +1 -1
- package/dist/services/retrieval-aliases.js.map +1 -1
- package/dist/services/retrieval-mode-policy.js.map +1 -1
- package/dist/services/retrieval-orchestrator/packing.js.map +1 -1
- package/dist/services/retrieval-orchestrator.d.ts +2 -3
- package/dist/services/retrieval-orchestrator.js.map +1 -1
- package/dist/services/rrf-fusion.js.map +1 -1
- package/dist/services/self-correction-extract.js.map +1 -1
- package/dist/services/session-observability.js.map +1 -1
- package/dist/services/session-pre-filter.js.map +1 -1
- package/dist/services/shortest-path.js.map +1 -1
- package/dist/services/skill-allowed-tools.js.map +1 -1
- package/dist/services/skill-creator-validator.js.map +1 -1
- package/dist/services/skill-crystallizer-helpers.js.map +1 -1
- package/dist/services/skill-crystallizer.js.map +1 -1
- package/dist/services/skill-description-builder.js.map +1 -1
- package/dist/services/skill-eval-synthesizer.js.map +1 -1
- package/dist/services/skill-examples-builder.js.map +1 -1
- package/dist/services/skill-frontmatter.js.map +1 -1
- package/dist/services/skill-name-validator.js.map +1 -1
- package/dist/services/skill-prompt-injection.js.map +1 -1
- package/dist/services/skill-reference-sidecar.js.map +1 -1
- package/dist/services/skill-script-bundler.js.map +1 -1
- package/dist/services/skill-validator.js.map +1 -1
- package/dist/services/startup-memory-attribution.js.map +1 -1
- package/dist/services/task-hygiene.js.map +1 -1
- package/dist/services/task-ledger/canonical.js.map +1 -1
- package/dist/services/task-ledger-facts.js.map +1 -1
- package/dist/services/task-queue-leases.js.map +1 -1
- package/dist/services/task-queue-watchdog.js.map +1 -1
- package/dist/services/tool-effectiveness.js.map +1 -1
- package/dist/services/tool-proposer.js.map +1 -1
- package/dist/services/tools-md-section.js.map +1 -1
- package/dist/services/topic-clusters.js.map +1 -1
- package/dist/services/trajectory-tracker.js.map +1 -1
- package/dist/services/vector-backend-observability.js.map +1 -1
- package/dist/services/vector-lifecycle-audit.js.map +1 -1
- package/dist/services/vector-maintenance.js.map +1 -1
- package/dist/services/vector-search.js.map +1 -1
- package/dist/services/verification-store.js.map +1 -1
- package/dist/services/verified-fact-triage.js.map +1 -1
- package/dist/services/wal-helpers.js.map +1 -1
- package/dist/services/workflow-tracker.js.map +1 -1
- package/dist/setup/bootstrap-databases.js.map +1 -1
- package/dist/setup/cli-context/cli-services.js.map +1 -1
- package/dist/setup/cli-context/help-text.js.map +1 -1
- package/dist/setup/cli-context/metadata.js.map +1 -1
- package/dist/setup/cli-context/register-cli-with-help.js.map +1 -1
- package/dist/setup/cli-context/register-full.js.map +1 -1
- package/dist/setup/cli-context/register-help.js.map +1 -1
- package/dist/setup/cost-instrumentation.js.map +1 -1
- package/dist/setup/hybrid-memory-generation-state.js.map +1 -1
- package/dist/setup/hybrid-memory-reload-coordinator.js +13 -13
- package/dist/setup/hybrid-memory-reload-coordinator.js.map +1 -1
- package/dist/setup/plugin-service.js.map +1 -1
- package/dist/setup/provider-router.js.map +1 -1
- package/dist/setup/register-context-engine.js.map +1 -1
- package/dist/setup/register-hooks.js.map +1 -1
- package/dist/setup/register-plugin.js +25 -21
- package/dist/setup/register-plugin.js.map +1 -1
- package/dist/setup/register-tools.js.map +1 -1
- package/dist/setup/reregister-policy.js +2 -2
- package/dist/setup/reregister-policy.js.map +1 -1
- package/dist/setup/tool-installers.js.map +1 -1
- package/dist/setup/workspace-bootstrap.js.map +1 -1
- package/dist/src/worker/narratives.js.map +1 -1
- package/dist/tools/apitap-tools.js.map +1 -1
- package/dist/tools/credential-tools.js.map +1 -1
- package/dist/tools/crystallization-tools.js.map +1 -1
- package/dist/tools/dashboard-routes.js.map +1 -1
- package/dist/tools/document-tools.js.map +1 -1
- package/dist/tools/goal-tools.js.map +1 -1
- package/dist/tools/graph-tools.js.map +1 -1
- package/dist/tools/issue-tools.js.map +1 -1
- package/dist/tools/memory/build-runtime.js.map +1 -1
- package/dist/tools/memory/helpers.js.map +1 -1
- package/dist/tools/memory/register-checkpoint-tools.js.map +1 -1
- package/dist/tools/memory/register-directory-tools.js.map +1 -1
- package/dist/tools/memory/register-edict-tools.js.map +1 -1
- package/dist/tools/memory/register-episode-tools.js.map +1 -1
- package/dist/tools/memory/register-recall-tools.js.map +1 -1
- package/dist/tools/memory/register-store-tools.js.map +1 -1
- package/dist/tools/memory-tools.js.map +1 -1
- package/dist/tools/persona-tools.js.map +1 -1
- package/dist/tools/provenance-tools.js.map +1 -1
- package/dist/tools/public-api-routes.js.map +1 -1
- package/dist/tools/safe-register-http-route.js.map +1 -1
- package/dist/tools/self-extension-tools.js.map +1 -1
- package/dist/tools/task-hygiene-tools.js.map +1 -1
- package/dist/tools/utility-tools.js.map +1 -1
- package/dist/tools/verification-tools.js.map +1 -1
- package/dist/tools/workflow-tools.js.map +1 -1
- package/dist/types/issue-types.js.map +1 -1
- package/dist/types/learnings-types.js.map +1 -1
- package/dist/types/memory.js.map +1 -1
- package/dist/utils/apim-gateway-fetch.js.map +1 -1
- package/dist/utils/atomic-write.js.map +1 -1
- package/dist/utils/auth-failover.js.map +1 -1
- package/dist/utils/auth.js.map +1 -1
- package/dist/utils/compaction-model-watchdog.js.map +1 -1
- package/dist/utils/consolidation-controls.js.map +1 -1
- package/dist/utils/constants.js.map +1 -1
- package/dist/utils/date-detector.js.map +1 -1
- package/dist/utils/dates.js.map +1 -1
- package/dist/utils/decay.js.map +1 -1
- package/dist/utils/duration.js.map +1 -1
- package/dist/utils/embed-call.js.map +1 -1
- package/dist/utils/entity-lookup-resolve.js.map +1 -1
- package/dist/utils/entity-mention-quality.js.map +1 -1
- package/dist/utils/entity-stopwords.js.map +1 -1
- package/dist/utils/env-manager.js.map +1 -1
- package/dist/utils/error-tracking.js.map +1 -1
- package/dist/utils/event-loop-yield.js.map +1 -1
- package/dist/utils/extract-last-user-message.js.map +1 -1
- package/dist/utils/extraction-from-template.js.map +1 -1
- package/dist/utils/fact-embeddings.js.map +1 -1
- package/dist/utils/file-snapshot.js.map +1 -1
- package/dist/utils/format.js.map +1 -1
- package/dist/utils/fs.js.map +1 -1
- package/dist/utils/gh-repo-arg.js.map +1 -1
- package/dist/utils/hybrid-mem-json-cli.js.map +1 -1
- package/dist/utils/language-keywords.js.map +1 -1
- package/dist/utils/lifecycle-generation.js.map +1 -1
- package/dist/utils/llm-json-array.js.map +1 -1
- package/dist/utils/llm-selection.js.map +1 -1
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/model-provider-family.js.map +1 -1
- package/dist/utils/model-tier.js.map +1 -1
- package/dist/utils/openclaw-agent-defaults.js.map +1 -1
- package/dist/utils/path.js.map +1 -1
- package/dist/utils/plugin-root.js.map +1 -1
- package/dist/utils/plugin-update-check.js.map +1 -1
- package/dist/utils/procedure-risk.js.map +1 -1
- package/dist/utils/progress-indicators.js.map +1 -1
- package/dist/utils/prompt-loader.js.map +1 -1
- package/dist/utils/provenance.js.map +1 -1
- package/dist/utils/provider-detection.js.map +1 -1
- package/dist/utils/registration-superseded.js.map +1 -1
- package/dist/utils/salience.js.map +1 -1
- package/dist/utils/sanitize-messages.js.map +1 -1
- package/dist/utils/scope-filter.js.map +1 -1
- package/dist/utils/skill-discovery.js.map +1 -1
- package/dist/utils/sqlite-file-perms.js.map +1 -1
- package/dist/utils/sqlite-outcome-compat.js.map +1 -1
- package/dist/utils/sqlite-transaction.js.map +1 -1
- package/dist/utils/stable-stringify.js.map +1 -1
- package/dist/utils/subagent-ended-utils.js.map +1 -1
- package/dist/utils/tags.js.map +1 -1
- package/dist/utils/text.js.map +1 -1
- package/dist/utils/timeout.js.map +1 -1
- package/dist/utils/typebox.js.map +1 -1
- package/dist/utils/version-check.js.map +1 -1
- package/dist/utils/wal-replay.js.map +1 -1
- package/dist/versionInfo.js.map +1 -1
- package/index.ts +2 -2
- package/lifecycle/hooks.ts +0 -1
- package/npm-shrinkwrap.json +487 -186
- package/openclaw.plugin.json +1 -1
- package/package.json +2 -2
- package/services/adaptive-catch-up-pacing.ts +28 -0
- package/services/chat.ts +34 -1
- package/services/cron-job-bash-harness.ts +52 -5
- package/services/embeddings/shared.ts +5 -2
- package/services/entity-enrichment-adaptive.ts +245 -0
- package/services/entity-enrichment-cli.ts +553 -47
- package/services/entity-enrichment.ts +43 -2
- package/services/llm-rate-limit-headers.ts +1 -4
- package/services/maintenance-log-analyzer.ts +13 -9
- package/services/reinforcement-extract.ts +19 -0
- package/setup/hybrid-memory-reload-coordinator.ts +26 -0
- package/setup/register-plugin.ts +62 -32
- package/setup/reregister-policy.ts +10 -5
package/api/plugin-runtime.ts
CHANGED
|
@@ -49,6 +49,8 @@ import type { ToolRegistrationHandle } from "../setup/register-tools.js";
|
|
|
49
49
|
export interface PluginRuntime {
|
|
50
50
|
// --- Config & resolved paths ---
|
|
51
51
|
cfg: HybridMemoryConfig;
|
|
52
|
+
/** Parse-time config snapshot for hot-reload reuse checks (bootstrap may mutate `cfg`). */
|
|
53
|
+
parsedCfgSnapshot: HybridMemoryConfig;
|
|
52
54
|
resolvedLancePath: string;
|
|
53
55
|
resolvedSqlitePath: string;
|
|
54
56
|
|
|
@@ -925,7 +925,7 @@ export async function resolveContradictionsAutonomously(
|
|
|
925
925
|
if (applied) decisionsApplied++;
|
|
926
926
|
}
|
|
927
927
|
continue;
|
|
928
|
-
} else if (
|
|
928
|
+
} else if (isFactVerified(db, contradiction.factIdOld)) {
|
|
929
929
|
reviewItem.suggestedReason = "Older fact is verified; leaving for manual review.";
|
|
930
930
|
}
|
|
931
931
|
|
|
@@ -15,11 +15,75 @@ import type { HandlerContext } from "./handlers.js";
|
|
|
15
15
|
import { acquireScanSlot, clearScanLock } from "./shared.js";
|
|
16
16
|
|
|
17
17
|
import { getSessionFilePathsSince, getMaxMtime } from "./cmd-extract-sessions.js";
|
|
18
|
+
|
|
19
|
+
const VECTOR_CANDIDATE_LIMIT = 10;
|
|
20
|
+
const VECTOR_CANDIDATE_OVERFETCH_LIMIT = 50;
|
|
21
|
+
const VECTOR_CANDIDATE_MIN_SCORE = 0;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Identifies transient/retryable store errors (SQLite busy, network issues) vs permanent errors.
|
|
25
|
+
* Permanent errors (TypeError, schema bugs, etc.) should not block cursor advancement.
|
|
26
|
+
*/
|
|
27
|
+
function isRetryableStoreError(err: unknown): boolean {
|
|
28
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
29
|
+
const code =
|
|
30
|
+
typeof err === "object" && err !== null && "code" in err ? String((err as { code?: unknown }).code ?? "") : "";
|
|
31
|
+
|
|
32
|
+
// SQLite busy/lock errors are retryable
|
|
33
|
+
if (/SQLITE_BUSY|database is locked/i.test(message) || /SQLITE_BUSY/i.test(code)) {
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Transient network errors are retryable
|
|
38
|
+
if (
|
|
39
|
+
/ECONNREFUSED|ECONNRESET|ETIMEDOUT|ENOTFOUND|EAI_AGAIN|EHOSTUNREACH|socket hang up|fetch failed|network timeout|connect\s+ETIMEDOUT/i.test(
|
|
40
|
+
message,
|
|
41
|
+
) ||
|
|
42
|
+
/ECONNREFUSED|ECONNRESET|ETIMEDOUT|ENOTFOUND|EHOSTUNREACH/i.test(code)
|
|
43
|
+
) {
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// All other errors (TypeError, schema bugs, programming errors) are permanent
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function getVectorSearchFailReason(vectorDb: unknown): string | null {
|
|
52
|
+
const getter = (vectorDb as { getLastSearchFailReason?: unknown }).getLastSearchFailReason;
|
|
53
|
+
if (typeof getter !== "function") return null;
|
|
54
|
+
try {
|
|
55
|
+
const reason = getter.call(vectorDb);
|
|
56
|
+
return typeof reason === "string" && reason.length > 0 ? reason : null;
|
|
57
|
+
} catch {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function isLiveFact(candidate: { supersededAt?: number | null; expiresAt?: number | null }): boolean {
|
|
63
|
+
const nowSec = Math.floor(Date.now() / 1000);
|
|
64
|
+
return candidate.supersededAt == null && (candidate.expiresAt == null || candidate.expiresAt > nowSec);
|
|
65
|
+
}
|
|
66
|
+
|
|
18
67
|
export async function runExtractDirectivesForCli(
|
|
19
68
|
ctx: HandlerContext,
|
|
20
69
|
opts: { days?: number; verbose?: boolean; dryRun?: boolean; full?: boolean },
|
|
21
|
-
): Promise<
|
|
22
|
-
|
|
70
|
+
): Promise<
|
|
71
|
+
DirectiveExtractResult & {
|
|
72
|
+
stored?: number;
|
|
73
|
+
partial?: boolean;
|
|
74
|
+
dedupeDegraded?: boolean;
|
|
75
|
+
directiveDedupeMode?: "vector" | "lexical-only" | "mixed";
|
|
76
|
+
directiveRejected?: {
|
|
77
|
+
permanent: number;
|
|
78
|
+
retryable: number;
|
|
79
|
+
parserOrModelFailure: number;
|
|
80
|
+
boundedPartialRetry: number;
|
|
81
|
+
};
|
|
82
|
+
cursorAdvanced?: boolean;
|
|
83
|
+
cursorBlockedReason?: "retryable_rejections" | "parser_or_model_failure" | "bounded_partial_retry";
|
|
84
|
+
}
|
|
85
|
+
> {
|
|
86
|
+
const { factsDb, vectorDb, embeddings, cfg, logger } = ctx;
|
|
23
87
|
const SCAN_TYPE = "extract-directives";
|
|
24
88
|
logger.info?.("memory-hybrid: extract-directives — regex extraction (no LLM model selection)");
|
|
25
89
|
const sessionDir = cfg.procedures.sessionsDir;
|
|
@@ -87,6 +151,11 @@ export async function runExtractDirectivesForCli(
|
|
|
87
151
|
// Store directives as facts if not dry-run
|
|
88
152
|
let stored = 0;
|
|
89
153
|
let storeDedupeVectorFallbackSuppressed = 0;
|
|
154
|
+
let vectorDedupeStores = 0;
|
|
155
|
+
let lexicalOnlyDedupeStores = 0;
|
|
156
|
+
let retryableRejected = 0;
|
|
157
|
+
let parserOrModelRejected = 0;
|
|
158
|
+
let boundedPartialRetryRejected = 0;
|
|
90
159
|
if (!opts.dryRun) {
|
|
91
160
|
for (const incident of result.incidents) {
|
|
92
161
|
try {
|
|
@@ -111,10 +180,59 @@ export async function runExtractDirectivesForCli(
|
|
|
111
180
|
? "fact"
|
|
112
181
|
: "other";
|
|
113
182
|
const source = `directive:${incident.sessionFile}`;
|
|
114
|
-
|
|
183
|
+
let vector: number[] | undefined;
|
|
184
|
+
let vectorCandidates: Array<{ id: string; score: number }> | undefined;
|
|
185
|
+
try {
|
|
186
|
+
vector = await embeddings.embed(incident.extractedRule);
|
|
187
|
+
if (cfg.store?.fuzzyDedupe ?? true) {
|
|
188
|
+
const sourceScope = "global";
|
|
189
|
+
const sourceScopeTarget = null;
|
|
190
|
+
const embeddingModelName =
|
|
191
|
+
typeof embeddings.modelName === "string" && embeddings.modelName.trim().length > 0
|
|
192
|
+
? embeddings.modelName
|
|
193
|
+
: null;
|
|
194
|
+
const neighbors = await vectorDb.search(
|
|
195
|
+
vector,
|
|
196
|
+
VECTOR_CANDIDATE_OVERFETCH_LIMIT,
|
|
197
|
+
VECTOR_CANDIDATE_MIN_SCORE,
|
|
198
|
+
);
|
|
199
|
+
if (!getVectorSearchFailReason(vectorDb)) {
|
|
200
|
+
vectorCandidates = neighbors
|
|
201
|
+
.map((candidate) => ({
|
|
202
|
+
id: candidate.entry.id,
|
|
203
|
+
score: candidate.score,
|
|
204
|
+
}))
|
|
205
|
+
.filter(
|
|
206
|
+
(candidate) =>
|
|
207
|
+
typeof candidate.id === "string" && candidate.id.length > 0 && Number.isFinite(candidate.score),
|
|
208
|
+
)
|
|
209
|
+
.filter((candidate) => {
|
|
210
|
+
const fact = factsDb.getById(candidate.id);
|
|
211
|
+
return (
|
|
212
|
+
fact != null &&
|
|
213
|
+
isLiveFact(fact) &&
|
|
214
|
+
fact.source.startsWith("directive:") &&
|
|
215
|
+
(fact.scope ?? "global") === sourceScope &&
|
|
216
|
+
(fact.scope === "global" ? null : (fact.scopeTarget ?? null)) === sourceScopeTarget &&
|
|
217
|
+
(embeddingModelName == null ||
|
|
218
|
+
fact.embeddingModel == null ||
|
|
219
|
+
fact.embeddingModel === embeddingModelName)
|
|
220
|
+
);
|
|
221
|
+
})
|
|
222
|
+
.slice(0, VECTOR_CANDIDATE_LIMIT);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
} catch (err) {
|
|
226
|
+
capturePluginError(err instanceof Error ? err : new Error(String(err)), {
|
|
227
|
+
subsystem: "cli",
|
|
228
|
+
operation: "runExtractDirectivesForCli:vector-candidates",
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
const usedLexicalOnlyFallback = shouldReportVectorDedupeFallback({
|
|
115
232
|
source,
|
|
116
233
|
fuzzyDedupe: cfg.store?.fuzzyDedupe ?? true,
|
|
117
234
|
storeConfig: cfg.store,
|
|
235
|
+
vectorCandidates,
|
|
118
236
|
});
|
|
119
237
|
const storeResult = factsDb.storeWithResult(
|
|
120
238
|
{
|
|
@@ -131,13 +249,24 @@ export async function runExtractDirectivesForCli(
|
|
|
131
249
|
tags: ["directive-extract", ...incident.categories.map((c) => `directive:${c}`)],
|
|
132
250
|
},
|
|
133
251
|
{
|
|
252
|
+
vectorCandidates,
|
|
134
253
|
warnContext: "extract-directives",
|
|
135
254
|
suppressVectorFallbackWarning: true,
|
|
136
255
|
},
|
|
137
256
|
);
|
|
257
|
+
const usedVectorCandidates = Boolean(vectorCandidates && vectorCandidates.length > 0);
|
|
258
|
+
if (usedLexicalOnlyFallback) {
|
|
259
|
+
storeDedupeVectorFallbackSuppressed++;
|
|
260
|
+
lexicalOnlyDedupeStores++;
|
|
261
|
+
} else if (usedVectorCandidates) {
|
|
262
|
+
vectorDedupeStores++;
|
|
263
|
+
} else {
|
|
264
|
+
lexicalOnlyDedupeStores++;
|
|
265
|
+
}
|
|
138
266
|
if (storeResult.skipped) {
|
|
139
267
|
continue;
|
|
140
268
|
}
|
|
269
|
+
const entry = storeResult.entry;
|
|
141
270
|
// CRITICAL FIX (#2): Delete vector for evicted fact to prevent orphaned vectors
|
|
142
271
|
await cleanupEvictedVector({
|
|
143
272
|
vectorDb,
|
|
@@ -145,9 +274,57 @@ export async function runExtractDirectivesForCli(
|
|
|
145
274
|
logger: logger,
|
|
146
275
|
context: "extract-directives",
|
|
147
276
|
});
|
|
148
|
-
if (
|
|
149
|
-
|
|
277
|
+
if (storeResult.embeddingStale) {
|
|
278
|
+
try {
|
|
279
|
+
const mergedVector = await embeddings.embed(entry.text);
|
|
280
|
+
// Avoid pre-delete so transient store failures do not leave merged facts without any vector.
|
|
281
|
+
await vectorDb.store({
|
|
282
|
+
text: entry.text,
|
|
283
|
+
vector: mergedVector,
|
|
284
|
+
importance: entry.importance,
|
|
285
|
+
category: entry.category as MemoryCategory,
|
|
286
|
+
id: entry.id,
|
|
287
|
+
});
|
|
288
|
+
factsDb.setEmbeddingModel(entry.id, embeddings.modelName);
|
|
289
|
+
} catch (err) {
|
|
290
|
+
logger.warn?.(`memory-hybrid: extract-directives merged vector refresh failed: ${err}`);
|
|
291
|
+
capturePluginError(err instanceof Error ? err : new Error(String(err)), {
|
|
292
|
+
subsystem: "cli",
|
|
293
|
+
operation: "runExtractDirectivesForCli:merged-vector-refresh",
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
continue;
|
|
297
|
+
}
|
|
298
|
+
if (!storeResult.newlyStored) {
|
|
299
|
+
continue;
|
|
300
|
+
}
|
|
301
|
+
if (!vector) {
|
|
302
|
+
stored++;
|
|
303
|
+
continue;
|
|
304
|
+
}
|
|
305
|
+
try {
|
|
306
|
+
await vectorDb.store({
|
|
307
|
+
text: incident.extractedRule,
|
|
308
|
+
vector,
|
|
309
|
+
importance: 0.8,
|
|
310
|
+
category: category as MemoryCategory,
|
|
311
|
+
id: entry.id,
|
|
312
|
+
});
|
|
313
|
+
factsDb.setEmbeddingModel(entry.id, embeddings.modelName);
|
|
314
|
+
stored++;
|
|
315
|
+
} catch (err) {
|
|
316
|
+
logger.warn?.(`memory-hybrid: extract-directives vector store failed: ${err}`);
|
|
317
|
+
capturePluginError(err instanceof Error ? err : new Error(String(err)), {
|
|
318
|
+
subsystem: "cli",
|
|
319
|
+
operation: "runExtractDirectivesForCli:vector-store",
|
|
320
|
+
});
|
|
321
|
+
stored++;
|
|
322
|
+
}
|
|
150
323
|
} catch (err) {
|
|
324
|
+
const isRetryable = isRetryableStoreError(err);
|
|
325
|
+
if (isRetryable) {
|
|
326
|
+
retryableRejected++;
|
|
327
|
+
}
|
|
151
328
|
capturePluginError(err as Error, {
|
|
152
329
|
subsystem: "cli",
|
|
153
330
|
operation: "runExtractDirectivesForCli:store",
|
|
@@ -158,19 +335,56 @@ export async function runExtractDirectivesForCli(
|
|
|
158
335
|
|
|
159
336
|
if (storeDedupeVectorFallbackSuppressed > 0) {
|
|
160
337
|
logger.warn?.(
|
|
161
|
-
`memory-hybrid: extract-directives DEGRADED — store dedupe used lexical-only for ${storeDedupeVectorFallbackSuppressed} store(s) (
|
|
338
|
+
`memory-hybrid: extract-directives DEGRADED — store dedupe used lexical-only for ${storeDedupeVectorFallbackSuppressed} store(s) (embedding or vector search failed)`,
|
|
162
339
|
);
|
|
163
340
|
}
|
|
164
|
-
const
|
|
341
|
+
const directiveRejected = {
|
|
342
|
+
permanent: result.rejected ?? 0,
|
|
343
|
+
retryable: retryableRejected,
|
|
344
|
+
parserOrModelFailure: parserOrModelRejected,
|
|
345
|
+
boundedPartialRetry: boundedPartialRetryRejected,
|
|
346
|
+
};
|
|
347
|
+
const blockedRejections =
|
|
348
|
+
directiveRejected.retryable + directiveRejected.parserOrModelFailure + directiveRejected.boundedPartialRetry;
|
|
349
|
+
const partial = blockedRejections > 0;
|
|
165
350
|
const dedupeDegraded = storeDedupeVectorFallbackSuppressed > 0;
|
|
166
|
-
const
|
|
167
|
-
|
|
351
|
+
const totalDedupeStores = vectorDedupeStores + lexicalOnlyDedupeStores;
|
|
352
|
+
let directiveDedupeMode: "vector" | "lexical-only" | "mixed" | undefined;
|
|
353
|
+
if (vectorDedupeStores === totalDedupeStores && totalDedupeStores > 0) {
|
|
354
|
+
directiveDedupeMode = "vector";
|
|
355
|
+
} else if (lexicalOnlyDedupeStores === totalDedupeStores && totalDedupeStores > 0) {
|
|
356
|
+
directiveDedupeMode = "lexical-only";
|
|
357
|
+
} else if (totalDedupeStores > 0) {
|
|
358
|
+
directiveDedupeMode = "mixed";
|
|
359
|
+
}
|
|
360
|
+
let cursorAdvanced: boolean | undefined;
|
|
361
|
+
let cursorBlockedReason: "retryable_rejections" | "parser_or_model_failure" | "bounded_partial_retry" | undefined;
|
|
362
|
+
if (directiveRejected.parserOrModelFailure > 0) {
|
|
363
|
+
cursorBlockedReason = "parser_or_model_failure";
|
|
364
|
+
} else if (directiveRejected.boundedPartialRetry > 0) {
|
|
365
|
+
cursorBlockedReason = "bounded_partial_retry";
|
|
366
|
+
} else if (directiveRejected.retryable > 0) {
|
|
367
|
+
cursorBlockedReason = "retryable_rejections";
|
|
368
|
+
}
|
|
369
|
+
const returnVal = {
|
|
370
|
+
...result,
|
|
371
|
+
stored,
|
|
372
|
+
partial,
|
|
373
|
+
dedupeDegraded,
|
|
374
|
+
directiveDedupeMode,
|
|
375
|
+
directiveRejected,
|
|
376
|
+
cursorAdvanced,
|
|
377
|
+
cursorBlockedReason,
|
|
378
|
+
};
|
|
379
|
+
if (!opts.dryRun && !cursorBlockedReason) {
|
|
168
380
|
const lastSessionTs = getMaxMtime(filePaths);
|
|
169
381
|
factsDb.updateScanCursor(SCAN_TYPE, lastSessionTs ?? 0, result.sessionsScanned);
|
|
382
|
+
returnVal.cursorAdvanced = true;
|
|
170
383
|
}
|
|
171
|
-
if (!opts.dryRun &&
|
|
384
|
+
if (!opts.dryRun && cursorBlockedReason) {
|
|
385
|
+
returnVal.cursorAdvanced = false;
|
|
172
386
|
logger.info?.(
|
|
173
|
-
`memory-hybrid: extract-directives — ${
|
|
387
|
+
`memory-hybrid: extract-directives — cursor blocked (${cursorBlockedReason}); rejected={permanent:${directiveRejected.permanent},retryable:${directiveRejected.retryable},parserOrModelFailure:${directiveRejected.parserOrModelFailure},boundedPartialRetry:${directiveRejected.boundedPartialRetry}}`,
|
|
174
388
|
);
|
|
175
389
|
}
|
|
176
390
|
return returnVal;
|
|
@@ -177,16 +177,15 @@ export async function runGenerateProposalsForCli(
|
|
|
177
177
|
rawResponse = detail.content;
|
|
178
178
|
} catch (err) {
|
|
179
179
|
const errMsg = err instanceof Error ? err.message : String(err);
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
);
|
|
180
|
+
const failureMessage = `memory-hybrid: generate-proposals LLM call failed (model=${model}, fallbacks=${JSON.stringify(
|
|
181
|
+
fallbackModels,
|
|
182
|
+
)}): ${errMsg}`;
|
|
183
|
+
console.error(failureMessage);
|
|
185
184
|
capturePluginError(err instanceof Error ? err : new Error(String(err)), {
|
|
186
185
|
subsystem: "cli",
|
|
187
186
|
operation: "runGenerateProposalsForCli:llm",
|
|
188
187
|
});
|
|
189
|
-
|
|
188
|
+
throw new Error(failureMessage);
|
|
190
189
|
}
|
|
191
190
|
let items: Array<{
|
|
192
191
|
targetFile: string;
|
|
@@ -16,6 +16,7 @@ import { CostFeature } from "../services/cost-feature-labels.js";
|
|
|
16
16
|
import { capturePluginError } from "../services/error-reporter.js";
|
|
17
17
|
import {
|
|
18
18
|
type AnnotationReasons,
|
|
19
|
+
type ReinforcementAnnotationDiagnostic,
|
|
19
20
|
type ReinforcementAnnotationStatus,
|
|
20
21
|
type ReinforcementExtractResult,
|
|
21
22
|
runReinforcementExtract,
|
|
@@ -456,6 +457,7 @@ export async function runExtractReinforcementForCli(
|
|
|
456
457
|
|
|
457
458
|
// Derive annotation status for the incidentsFound > 0 && annotated == 0 case
|
|
458
459
|
let annotationStatus: ReinforcementAnnotationStatus | undefined;
|
|
460
|
+
let annotationDiagnostic: ReinforcementAnnotationDiagnostic | undefined;
|
|
459
461
|
if (!opts.dryRun && result.incidents.length > 0 && annotated === 0) {
|
|
460
462
|
if (llmAnalysisFailed && annotationReasons.noRecalledIds === result.incidents.length) {
|
|
461
463
|
annotationStatus = "degraded_model_or_parser";
|
|
@@ -474,10 +476,79 @@ export async function runExtractReinforcementForCli(
|
|
|
474
476
|
// Do not override a successful annotation with a failure status — leave undefined.
|
|
475
477
|
}
|
|
476
478
|
|
|
479
|
+
if (!opts.dryRun && result.incidents.length > 0 && annotated === 0 && annotationStatus) {
|
|
480
|
+
const noIdsAfterRecall = result.incidents.filter(
|
|
481
|
+
(incident) =>
|
|
482
|
+
incident.recalledMemoryIds.length === 0 &&
|
|
483
|
+
incident.toolCallSequence.some((tool) => tool.toLowerCase() === "memory_recall"),
|
|
484
|
+
).length;
|
|
485
|
+
if (annotationStatus === "partial_no_matches") {
|
|
486
|
+
if (noIdsAfterRecall > 0) {
|
|
487
|
+
annotationDiagnostic = {
|
|
488
|
+
kind: "missing_recall_metadata",
|
|
489
|
+
summary: `${noIdsAfterRecall}/${result.incidents.length} incident(s) invoked memory_recall but yielded no parseable memory IDs.`,
|
|
490
|
+
recommendedActions: [
|
|
491
|
+
"Inspect memory_recall tool_result payload format and ensure IDs remain visible in session logs.",
|
|
492
|
+
"Run a targeted replay to confirm retrieval output includes canonical UUID IDs.",
|
|
493
|
+
],
|
|
494
|
+
};
|
|
495
|
+
} else {
|
|
496
|
+
annotationDiagnostic = {
|
|
497
|
+
kind: "expected_sparse_data",
|
|
498
|
+
summary:
|
|
499
|
+
"No incidents included recalled memory IDs; this is expected for sessions without explicit memory recall usage.",
|
|
500
|
+
recommendedActions: [
|
|
501
|
+
"Treat as informational unless recall-heavy sessions also show partial_no_matches.",
|
|
502
|
+
"If recall should have happened, inspect retrieval prompting and memory_recall tool usage in those sessions.",
|
|
503
|
+
],
|
|
504
|
+
};
|
|
505
|
+
}
|
|
506
|
+
} else if (annotationStatus === "degraded_model_or_parser") {
|
|
507
|
+
annotationDiagnostic = {
|
|
508
|
+
kind: "model_or_parser_degraded",
|
|
509
|
+
summary:
|
|
510
|
+
"LLM analysis failed or returned unparseable output while incidents lacked reinforceable recalled IDs.",
|
|
511
|
+
recommendedActions: [
|
|
512
|
+
"Retry extract-reinforcement after confirming LLM/provider health and parser logs.",
|
|
513
|
+
"If this persists, run with --verbose and inspect reinforcement analysis prompt/response shape.",
|
|
514
|
+
],
|
|
515
|
+
};
|
|
516
|
+
} else if (annotationReasons.errors > 0) {
|
|
517
|
+
annotationDiagnostic = {
|
|
518
|
+
kind: "annotation_errors",
|
|
519
|
+
summary: `${annotationReasons.errors} incident(s) hit runtime annotation errors.`,
|
|
520
|
+
recommendedActions: [
|
|
521
|
+
"Inspect captured plugin errors for runExtractReinforcementForCli.",
|
|
522
|
+
"Address procedure/fact reinforce exceptions before rerunning extract-reinforcement.",
|
|
523
|
+
],
|
|
524
|
+
};
|
|
525
|
+
} else if (annotationReasons.recalledIdsNoMatch === result.incidents.length) {
|
|
526
|
+
annotationDiagnostic = {
|
|
527
|
+
kind: "stale_recalled_ids",
|
|
528
|
+
summary: "All recalled memory IDs failed to match active reinforceable facts.",
|
|
529
|
+
recommendedActions: [
|
|
530
|
+
"Audit stale/superseded IDs referenced by memory_recall outputs.",
|
|
531
|
+
"Re-run retrieval against current fact IDs and repair stale recall references.",
|
|
532
|
+
],
|
|
533
|
+
};
|
|
534
|
+
} else if (annotationStatus === "failed_annotation") {
|
|
535
|
+
annotationDiagnostic = {
|
|
536
|
+
kind: "mixed_failure",
|
|
537
|
+
summary: `Mixed failure: ${annotationReasons.noRecalledIds} incident(s) had no recalled IDs, ${annotationReasons.recalledIdsNoMatch} had stale IDs.`,
|
|
538
|
+
recommendedActions: [
|
|
539
|
+
"Address both missing recall metadata and stale ID issues.",
|
|
540
|
+
"Inspect sessions without recalled IDs for memory_recall usage gaps.",
|
|
541
|
+
"Audit stale/superseded IDs in the remaining sessions.",
|
|
542
|
+
],
|
|
543
|
+
};
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
|
|
477
547
|
// Attach annotation results to the returned value
|
|
478
548
|
result.annotated = annotated;
|
|
479
549
|
result.annotationReasons = annotationReasons;
|
|
480
550
|
if (annotationStatus !== undefined) result.annotationStatus = annotationStatus;
|
|
551
|
+
if (annotationDiagnostic) result.annotationDiagnostic = annotationDiagnostic;
|
|
481
552
|
|
|
482
553
|
if (!opts.dryRun) {
|
|
483
554
|
const lastSessionTs = getMaxMtime(filePaths);
|
package/cli/cmd-feedback.ts
CHANGED
|
@@ -11,8 +11,7 @@
|
|
|
11
11
|
import { existsSync, readFileSync, statSync } from "node:fs";
|
|
12
12
|
import { homedir } from "node:os";
|
|
13
13
|
import { basename, dirname, join } from "node:path";
|
|
14
|
-
|
|
15
|
-
import type { ReinforcementContext } from "../backends/facts-db.js";
|
|
14
|
+
import type { FactsDB, ReinforcementContext } from "../backends/facts-db.js";
|
|
16
15
|
import { getCronModelConfig, getDefaultCronModel, getLLMModelPreference, isCompactVerbosity } from "../config.js";
|
|
17
16
|
import { chatCompleteWithRetry } from "../services/chat.js";
|
|
18
17
|
import { CostFeature } from "../services/cost-feature-labels.js";
|
|
@@ -22,18 +21,17 @@ import { getEffectivenessReport, runClosedLoopAnalysis } from "../services/feedb
|
|
|
22
21
|
import { extractImplicitSignals, parseSessionTurns } from "../services/implicit-feedback-extract.js";
|
|
23
22
|
import { getModeCostEstimates } from "../services/model-pricing.js";
|
|
24
23
|
import {
|
|
25
|
-
ToolEffectivenessStore,
|
|
26
24
|
computeToolEffectiveness,
|
|
27
25
|
formatToolEffectivenessReport,
|
|
28
26
|
generateMonthlyReport,
|
|
27
|
+
ToolEffectivenessStore,
|
|
29
28
|
} from "../services/tool-effectiveness.js";
|
|
30
29
|
import { analyzeTrajectoriesWithLLM, buildTrajectories, serializeTrajectory } from "../services/trajectory-tracker.js";
|
|
31
|
-
import
|
|
30
|
+
import { cleanupEvictedVector } from "../services/vector-maintenance.js";
|
|
32
31
|
import { loadPrompt } from "../utils/prompt-loader.js";
|
|
32
|
+
import { createTransaction } from "../utils/sqlite-transaction.js";
|
|
33
33
|
import { getSessionFilePathsSince } from "./cmd-extract.js";
|
|
34
34
|
import type { HandlerContext } from "./handlers.js";
|
|
35
|
-
import { cleanupEvictedVector } from "../services/vector-maintenance.js";
|
|
36
|
-
import { createTransaction } from "../utils/sqlite-transaction.js";
|
|
37
35
|
|
|
38
36
|
const IMPLICIT_FEEDBACK_LESSON_TAGS = ["implicit-feedback", "trajectory", "feedback"];
|
|
39
37
|
|
|
@@ -184,6 +182,16 @@ function buildImplicitFeedbackCleanupFilter(includeLegacy: boolean): string {
|
|
|
184
182
|
return SQL_IMPLICIT_TRAJECTORY_LESSON_FILTER;
|
|
185
183
|
}
|
|
186
184
|
|
|
185
|
+
export type ImplicitFeedbackCollapseStatus = "no_candidates" | "no_changes" | "partial" | "collapsed";
|
|
186
|
+
|
|
187
|
+
/** Operator-facing collapse outcome for `reflect-meta --collapse-implicit-feedback` (#1736). */
|
|
188
|
+
export function implicitFeedbackCollapseStatus(scanned: number, collapsed: number): ImplicitFeedbackCollapseStatus {
|
|
189
|
+
if (scanned === 0) return "no_candidates";
|
|
190
|
+
if (collapsed === 0) return "no_changes";
|
|
191
|
+
if (collapsed < scanned) return "partial";
|
|
192
|
+
return "collapsed";
|
|
193
|
+
}
|
|
194
|
+
|
|
187
195
|
export function cleanupImplicitFeedbackDuplicates(
|
|
188
196
|
factsDb: FactsDB,
|
|
189
197
|
opts: {
|
|
@@ -1418,9 +1426,7 @@ function hasValidWorkflowTraces(dbPath: string): boolean {
|
|
|
1418
1426
|
(tool): tool is string => typeof tool === "string" && tool.trim().length > 0,
|
|
1419
1427
|
);
|
|
1420
1428
|
if (nonEmptyTools.length > 0) return true;
|
|
1421
|
-
} catch {
|
|
1422
|
-
continue;
|
|
1423
|
-
}
|
|
1429
|
+
} catch {}
|
|
1424
1430
|
}
|
|
1425
1431
|
return false;
|
|
1426
1432
|
} finally {
|