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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"maintenance-fallback-policy.js","names":[],"sources":["../../config/maintenance-fallback-policy.ts"],"sourcesContent":["/**\n * Maintenance-tier LLM fallback policy (Issue #1226).\n *\n * Prevents distill/reflection-style maintenance paths from chaining into expensive models\n * when `llm.maintenance` aliases to a broad `llm.default` list.\n */\n\nimport type { HybridMemoryConfig } from \"./types/index.js\";\n\nexport type MaintenanceFallbackPolicy = \"default\" | \"cheap-only\" | \"explicit-only\" | \"allow-heavy\";\n\nexport function normalizeMaintenanceFallbackPolicy(raw: unknown): MaintenanceFallbackPolicy | undefined {\n if (typeof raw !== \"string\") return undefined;\n const v = raw.trim().toLowerCase().replace(/_/g, \"-\");\n if (v === \"default\" || v === \"legacy\") return \"default\";\n if (v === \"cheap-only\") return \"cheap-only\";\n if (v === \"explicit-only\" || v === \"same-tier\") return \"explicit-only\";\n if (v === \"allow-heavy\") return \"allow-heavy\";\n return undefined;\n}\n\n/**\n * Effective policy for maintenance-tier resolution.\n * - Unset config → `cheap-only` (safe default; Issue #1226).\n * - `allow-heavy` → same as `default` (full tier + global fallbacks).\n */\nexport function effectiveMaintenanceFallbackPolicy(cfg: HybridMemoryConfig): MaintenanceFallbackPolicy {\n const p = cfg.llm?.maintenanceFallbackPolicy;\n if (p === \"default\" || p === \"allow-heavy\") return \"default\";\n if (p === \"explicit-only\" || p === \"cheap-only\") return p;\n return \"cheap-only\";\n}\n\n/** Human-readable label for `openclaw hybrid-mem config` / verbose distill. */\nexport function describeMaintenanceFallbackPolicy(cfg: HybridMemoryConfig): string {\n const eff = effectiveMaintenanceFallbackPolicy(cfg);\n const raw = cfg.llm?.maintenanceFallbackPolicy;\n if (raw === undefined) {\n return `${eff} (effective; unset in config — expensive maintenance fallbacks are stripped by default)`;\n }\n return `${eff}${raw !== eff ? ` (from llm.maintenanceFallbackPolicy=${JSON.stringify(raw)})` : \"\"}`;\n}\n\n/**\n * Heuristic: models that should not be used as automatic maintenance fallbacks unless the\n * operator lists them explicitly in `llm.maintenance` (Issue #1226 acceptance list + minimax).\n */\nexport function isExpensiveMaintenanceFallbackModel(modelId: string): boolean {\n const full = modelId.trim().toLowerCase();\n if (!full) return false;\n const seg = full.includes(\"/\") ? full.slice(full.lastIndexOf(\"/\") + 1) : full;\n\n // Cheap / maintenance-friendly — never classify as expensive.\n if (\n /\\b(nano|flash-lite|haiku)\\b/.test(seg) ||\n /(^|[-._])mini($|[-._])/i.test(seg) ||\n /gpt-4\\.1-mini|gpt-4o-mini|gpt-4\\.1-nano|1\\.5-flash|2\\.0-flash-lite|2\\.5-flash(?!-pro)/i.test(seg)\n ) {\n return false;\n }\n\n if (/\\bo3\\b/i.test(seg) && !/o3-mini/i.test(seg)) return true;\n if (/gpt-5\\.5/i.test(seg)) return true;\n if (/gpt-5\\.4/i.test(seg) && !/mini/i.test(seg)) return true;\n if (/^gpt-4o$/i.test(seg) || /^gpt-4o[^m]/i.test(seg)) return true;\n if (/minimax-m2\\.7|^minimax-m2$/i.test(seg)) return true;\n if (/claude-opus|opus-4/i.test(seg)) return true;\n if (/gemini-3|gemini-2\\.5-pro|gemini-3\\.1-pro/i.test(seg)) return true;\n if (/^gpt-5\\./i.test(seg) && !/mini/i.test(seg)) return true;\n\n return false;\n}\n\nexport function filterMaintenanceTierFallbackModels(\n chain: string[],\n primary: string,\n explicitMaintenanceSet: Set<string> | undefined,\n): string[] {\n return chain.filter((m) => {\n const t = m.trim();\n if (!t || t === primary) return false;\n if (explicitMaintenanceSet?.has(t)) return true;\n return !isExpensiveMaintenanceFallbackModel(t);\n });\n}\n"],"mappings":";AAWA,SAAgB,mCAAmC,KAAqD;CACtG,IAAI,OAAO,QAAQ,UAAU,OAAO,KAAA;CACpC,MAAM,IAAI,IAAI,
|
|
1
|
+
{"version":3,"file":"maintenance-fallback-policy.js","names":[],"sources":["../../config/maintenance-fallback-policy.ts"],"sourcesContent":["/**\n * Maintenance-tier LLM fallback policy (Issue #1226).\n *\n * Prevents distill/reflection-style maintenance paths from chaining into expensive models\n * when `llm.maintenance` aliases to a broad `llm.default` list.\n */\n\nimport type { HybridMemoryConfig } from \"./types/index.js\";\n\nexport type MaintenanceFallbackPolicy = \"default\" | \"cheap-only\" | \"explicit-only\" | \"allow-heavy\";\n\nexport function normalizeMaintenanceFallbackPolicy(raw: unknown): MaintenanceFallbackPolicy | undefined {\n if (typeof raw !== \"string\") return undefined;\n const v = raw.trim().toLowerCase().replace(/_/g, \"-\");\n if (v === \"default\" || v === \"legacy\") return \"default\";\n if (v === \"cheap-only\") return \"cheap-only\";\n if (v === \"explicit-only\" || v === \"same-tier\") return \"explicit-only\";\n if (v === \"allow-heavy\") return \"allow-heavy\";\n return undefined;\n}\n\n/**\n * Effective policy for maintenance-tier resolution.\n * - Unset config → `cheap-only` (safe default; Issue #1226).\n * - `allow-heavy` → same as `default` (full tier + global fallbacks).\n */\nexport function effectiveMaintenanceFallbackPolicy(cfg: HybridMemoryConfig): MaintenanceFallbackPolicy {\n const p = cfg.llm?.maintenanceFallbackPolicy;\n if (p === \"default\" || p === \"allow-heavy\") return \"default\";\n if (p === \"explicit-only\" || p === \"cheap-only\") return p;\n return \"cheap-only\";\n}\n\n/** Human-readable label for `openclaw hybrid-mem config` / verbose distill. */\nexport function describeMaintenanceFallbackPolicy(cfg: HybridMemoryConfig): string {\n const eff = effectiveMaintenanceFallbackPolicy(cfg);\n const raw = cfg.llm?.maintenanceFallbackPolicy;\n if (raw === undefined) {\n return `${eff} (effective; unset in config — expensive maintenance fallbacks are stripped by default)`;\n }\n return `${eff}${raw !== eff ? ` (from llm.maintenanceFallbackPolicy=${JSON.stringify(raw)})` : \"\"}`;\n}\n\n/**\n * Heuristic: models that should not be used as automatic maintenance fallbacks unless the\n * operator lists them explicitly in `llm.maintenance` (Issue #1226 acceptance list + minimax).\n */\nexport function isExpensiveMaintenanceFallbackModel(modelId: string): boolean {\n const full = modelId.trim().toLowerCase();\n if (!full) return false;\n const seg = full.includes(\"/\") ? full.slice(full.lastIndexOf(\"/\") + 1) : full;\n\n // Cheap / maintenance-friendly — never classify as expensive.\n if (\n /\\b(nano|flash-lite|haiku)\\b/.test(seg) ||\n /(^|[-._])mini($|[-._])/i.test(seg) ||\n /gpt-4\\.1-mini|gpt-4o-mini|gpt-4\\.1-nano|1\\.5-flash|2\\.0-flash-lite|2\\.5-flash(?!-pro)/i.test(seg)\n ) {\n return false;\n }\n\n if (/\\bo3\\b/i.test(seg) && !/o3-mini/i.test(seg)) return true;\n if (/gpt-5\\.5/i.test(seg)) return true;\n if (/gpt-5\\.4/i.test(seg) && !/mini/i.test(seg)) return true;\n if (/^gpt-4o$/i.test(seg) || /^gpt-4o[^m]/i.test(seg)) return true;\n if (/minimax-m2\\.7|^minimax-m2$/i.test(seg)) return true;\n if (/claude-opus|opus-4/i.test(seg)) return true;\n if (/gemini-3|gemini-2\\.5-pro|gemini-3\\.1-pro/i.test(seg)) return true;\n if (/^gpt-5\\./i.test(seg) && !/mini/i.test(seg)) return true;\n\n return false;\n}\n\nexport function filterMaintenanceTierFallbackModels(\n chain: string[],\n primary: string,\n explicitMaintenanceSet: Set<string> | undefined,\n): string[] {\n return chain.filter((m) => {\n const t = m.trim();\n if (!t || t === primary) return false;\n if (explicitMaintenanceSet?.has(t)) return true;\n return !isExpensiveMaintenanceFallbackModel(t);\n });\n}\n"],"mappings":";AAWA,SAAgB,mCAAmC,KAAqD;CACtG,IAAI,OAAO,QAAQ,UAAU,OAAO,KAAA;CACpC,MAAM,IAAI,IAAI,KAAK,EAAE,YAAY,EAAE,QAAQ,MAAM,GAAG;CACpD,IAAI,MAAM,aAAa,MAAM,UAAU,OAAO;CAC9C,IAAI,MAAM,cAAc,OAAO;CAC/B,IAAI,MAAM,mBAAmB,MAAM,aAAa,OAAO;CACvD,IAAI,MAAM,eAAe,OAAO;AAElC;;;;;;AAOA,SAAgB,mCAAmC,KAAoD;CACrG,MAAM,IAAI,IAAI,KAAK;CACnB,IAAI,MAAM,aAAa,MAAM,eAAe,OAAO;CACnD,IAAI,MAAM,mBAAmB,MAAM,cAAc,OAAO;CACxD,OAAO;AACT;;AAGA,SAAgB,kCAAkC,KAAiC;CACjF,MAAM,MAAM,mCAAmC,GAAG;CAClD,MAAM,MAAM,IAAI,KAAK;CACrB,IAAI,QAAQ,KAAA,GACV,OAAO,GAAG,IAAI;CAEhB,OAAO,GAAG,MAAM,QAAQ,MAAM,wCAAwC,KAAK,UAAU,GAAG,EAAE,KAAK;AACjG;;;;;AAMA,SAAgB,oCAAoC,SAA0B;CAC5E,MAAM,OAAO,QAAQ,KAAK,EAAE,YAAY;CACxC,IAAI,CAAC,MAAM,OAAO;CAClB,MAAM,MAAM,KAAK,SAAS,GAAG,IAAI,KAAK,MAAM,KAAK,YAAY,GAAG,IAAI,CAAC,IAAI;CAGzE,IACE,8BAA8B,KAAK,GAAG,KACtC,0BAA0B,KAAK,GAAG,KAClC,yFAAyF,KAAK,GAAG,GAEjG,OAAO;CAGT,IAAI,UAAU,KAAK,GAAG,KAAK,CAAC,WAAW,KAAK,GAAG,GAAG,OAAO;CACzD,IAAI,YAAY,KAAK,GAAG,GAAG,OAAO;CAClC,IAAI,YAAY,KAAK,GAAG,KAAK,CAAC,QAAQ,KAAK,GAAG,GAAG,OAAO;CACxD,IAAI,YAAY,KAAK,GAAG,KAAK,eAAe,KAAK,GAAG,GAAG,OAAO;CAC9D,IAAI,8BAA8B,KAAK,GAAG,GAAG,OAAO;CACpD,IAAI,sBAAsB,KAAK,GAAG,GAAG,OAAO;CAC5C,IAAI,4CAA4C,KAAK,GAAG,GAAG,OAAO;CAClE,IAAI,YAAY,KAAK,GAAG,KAAK,CAAC,QAAQ,KAAK,GAAG,GAAG,OAAO;CAExD,OAAO;AACT;AAEA,SAAgB,oCACd,OACA,SACA,wBACU;CACV,OAAO,MAAM,QAAQ,MAAM;EACzB,MAAM,IAAI,EAAE,KAAK;EACjB,IAAI,CAAC,KAAK,MAAM,SAAS,OAAO;EAChC,IAAI,wBAAwB,IAAI,CAAC,GAAG,OAAO;EAC3C,OAAO,CAAC,oCAAoC,CAAC;CAC/C,CAAC;AACH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capture.js","names":[],"sources":["../../../config/parsers/capture.ts"],"sourcesContent":["import { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { DEFAULT_IDENTITY_REFLECTION_QUESTIONS } from \"../../services/identity-reflection.js\";\nimport { expandHomePlaceholders } from \"../../utils/path.js\";\nimport type {\n ExtractionConfig,\n ExtractionPreFilterConfig,\n IdentityPromotionConfig,\n IdentityReflectionConfig,\n PassiveObserverConfig,\n ProceduresConfig,\n ReflectionConfig,\n} from \"../types/capture.js\";\n\nexport function parsePassiveObserverConfig(cfg: Record<string, unknown>): PassiveObserverConfig {\n const observerRaw = cfg.passiveObserver as Record<string, unknown> | undefined;\n return {\n enabled: observerRaw?.enabled === true,\n intervalMinutes:\n typeof observerRaw?.intervalMinutes === \"number\" && observerRaw.intervalMinutes >= 1\n ? Math.floor(observerRaw.intervalMinutes)\n : 15,\n model:\n typeof observerRaw?.model === \"string\" && observerRaw.model.trim().length > 0\n ? observerRaw.model.trim()\n : undefined,\n maxCharsPerChunk:\n typeof observerRaw?.maxCharsPerChunk === \"number\" && observerRaw.maxCharsPerChunk >= 100\n ? Math.floor(observerRaw.maxCharsPerChunk)\n : 8000,\n minImportance:\n typeof observerRaw?.minImportance === \"number\" && observerRaw.minImportance >= 0 && observerRaw.minImportance <= 1\n ? observerRaw.minImportance\n : 0.5,\n deduplicationThreshold:\n typeof observerRaw?.deduplicationThreshold === \"number\" &&\n observerRaw.deduplicationThreshold >= 0 &&\n observerRaw.deduplicationThreshold <= 1\n ? observerRaw.deduplicationThreshold\n : 0.92,\n sessionsDir:\n typeof observerRaw?.sessionsDir === \"string\" && observerRaw.sessionsDir.trim().length > 0\n ? expandHomePlaceholders(observerRaw.sessionsDir.trim())\n : undefined,\n };\n}\n\nexport function parseReflectionConfig(cfg: Record<string, unknown>): ReflectionConfig {\n const reflectionRaw = cfg.reflection as Record<string, unknown> | undefined;\n return {\n enabled: reflectionRaw?.enabled === true,\n model: typeof reflectionRaw?.model === \"string\" ? reflectionRaw.model : undefined,\n defaultWindow:\n typeof reflectionRaw?.defaultWindow === \"number\" && reflectionRaw.defaultWindow > 0\n ? Math.min(90, Math.floor(reflectionRaw.defaultWindow))\n : 14,\n minObservations:\n typeof reflectionRaw?.minObservations === \"number\" && reflectionRaw.minObservations >= 1\n ? Math.floor(reflectionRaw.minObservations)\n : 2,\n };\n}\n\nexport function parseIdentityReflectionConfig(cfg: Record<string, unknown>): IdentityReflectionConfig {\n const raw = cfg.identityReflection as Record<string, unknown> | undefined;\n const parsedQuestions = Array.isArray(raw?.questions)\n ? raw.questions\n .filter((q): q is Record<string, unknown> => !!q && typeof q === \"object\")\n .map((q) => ({\n key: typeof q.key === \"string\" ? q.key.trim() : \"\",\n prompt: typeof q.prompt === \"string\" ? q.prompt.trim() : \"\",\n }))\n .filter((q) => q.key.length > 0 && q.prompt.length > 0)\n : [];\n return {\n enabled: raw?.enabled === true,\n model: typeof raw?.model === \"string\" && raw.model.trim().length > 0 ? raw.model.trim() : undefined,\n defaultWindow:\n typeof raw?.defaultWindow === \"number\" && raw.defaultWindow > 0\n ? Math.min(90, Math.floor(raw.defaultWindow))\n : 30,\n minInsights: typeof raw?.minInsights === \"number\" && raw.minInsights >= 1 ? Math.floor(raw.minInsights) : 3,\n maxInsightsPerRun:\n typeof raw?.maxInsightsPerRun === \"number\" && raw.maxInsightsPerRun >= 1\n ? Math.min(20, Math.floor(raw.maxInsightsPerRun))\n : 8,\n questions: parsedQuestions.length > 0 ? parsedQuestions : DEFAULT_IDENTITY_REFLECTION_QUESTIONS,\n };\n}\n\nexport function parseIdentityPromotionConfig(cfg: Record<string, unknown>): IdentityPromotionConfig {\n const raw = cfg.identityPromotion as Record<string, unknown> | undefined;\n return {\n enabled: raw?.enabled !== false,\n lookbackDays:\n typeof raw?.lookbackDays === \"number\" && raw.lookbackDays >= 1 ? Math.min(365, Math.floor(raw.lookbackDays)) : 90,\n minDurableReflections:\n typeof raw?.minDurableReflections === \"number\" && raw.minDurableReflections >= 1\n ? Math.min(10, Math.floor(raw.minDurableReflections))\n : 2,\n minConfidence:\n typeof raw?.minConfidence === \"number\" && raw.minConfidence >= 0 && raw.minConfidence <= 1\n ? raw.minConfidence\n : 0.72,\n similarityThreshold:\n typeof raw?.similarityThreshold === \"number\" && raw.similarityThreshold >= 0 && raw.similarityThreshold <= 1\n ? raw.similarityThreshold\n : 0.72,\n maxPromotionsPerRun:\n typeof raw?.maxPromotionsPerRun === \"number\" && raw.maxPromotionsPerRun >= 1\n ? Math.min(50, Math.floor(raw.maxPromotionsPerRun))\n : 8,\n };\n}\n\nexport function parseProceduresConfig(cfg: Record<string, unknown>): ProceduresConfig {\n const defaultSessionsDir = join(homedir(), \".openclaw\", \"agents\", \"main\", \"sessions\");\n const proceduresRaw = cfg.procedures as Record<string, unknown> | undefined;\n return {\n enabled: proceduresRaw?.enabled !== false,\n sessionsDir:\n typeof proceduresRaw?.sessionsDir === \"string\" && proceduresRaw.sessionsDir.length > 0\n ? expandHomePlaceholders(proceduresRaw.sessionsDir)\n : defaultSessionsDir,\n minSteps:\n typeof proceduresRaw?.minSteps === \"number\" && proceduresRaw.minSteps >= 1\n ? Math.floor(proceduresRaw.minSteps)\n : 2,\n validationThreshold:\n typeof proceduresRaw?.validationThreshold === \"number\" && proceduresRaw.validationThreshold >= 1\n ? Math.floor(proceduresRaw.validationThreshold)\n : 3,\n skillTTLDays:\n typeof proceduresRaw?.skillTTLDays === \"number\" && proceduresRaw.skillTTLDays >= 1\n ? Math.floor(proceduresRaw.skillTTLDays)\n : 30,\n skillsAutoPath:\n typeof proceduresRaw?.skillsAutoPath === \"string\" && proceduresRaw.skillsAutoPath.length > 0\n ? proceduresRaw.skillsAutoPath\n : \"skills/auto\",\n requireApprovalForPromote: proceduresRaw?.requireApprovalForPromote !== false,\n maxInjectionTokens:\n typeof proceduresRaw?.maxInjectionTokens === \"number\" &&\n proceduresRaw.maxInjectionTokens >= 0 &&\n Number.isFinite(proceduresRaw.maxInjectionTokens)\n ? Math.floor(proceduresRaw.maxInjectionTokens)\n : 500,\n promotionContextSpecificPatterns:\n Array.isArray(proceduresRaw?.promotionContextSpecificPatterns) &&\n proceduresRaw.promotionContextSpecificPatterns.every((x) => typeof x === \"string\")\n ? (proceduresRaw.promotionContextSpecificPatterns as string[]).map((s) => s.trim()).filter((s) => s.length > 0)\n : undefined,\n };\n}\n\nfunction parsePreFilterConfig(raw: Record<string, unknown> | undefined): ExtractionPreFilterConfig | undefined {\n if (!raw) return undefined;\n return {\n enabled: raw.enabled === true,\n model: typeof raw.model === \"string\" && raw.model.trim().length > 0 ? raw.model.trim() : \"qwen3:8b\",\n endpoint: typeof raw.endpoint === \"string\" && raw.endpoint.trim().length > 0 ? raw.endpoint.trim() : undefined,\n maxCharsPerSession:\n typeof raw.maxCharsPerSession === \"number\" && raw.maxCharsPerSession >= 100\n ? Math.floor(raw.maxCharsPerSession)\n : undefined,\n };\n}\n\nexport function parseExtractionConfig(cfg: Record<string, unknown>): ExtractionConfig {\n const extractionRaw = cfg.extraction as Record<string, unknown> | undefined;\n return {\n extractionPasses: extractionRaw?.extractionPasses === true,\n verificationPass: extractionRaw?.verificationPass === true,\n extractionModel:\n typeof extractionRaw?.extractionModel === \"string\" && extractionRaw.extractionModel.trim().length > 0\n ? extractionRaw.extractionModel.trim()\n : undefined,\n implicitModel:\n typeof extractionRaw?.implicitModel === \"string\" && extractionRaw.implicitModel.trim().length > 0\n ? extractionRaw.implicitModel.trim()\n : undefined,\n verificationModel:\n typeof extractionRaw?.verificationModel === \"string\" && extractionRaw.verificationModel.trim().length > 0\n ? extractionRaw.verificationModel.trim()\n : undefined,\n preFilter: parsePreFilterConfig(extractionRaw?.preFilter as Record<string, unknown> | undefined),\n extractionModelTier: (() => {\n const v =\n typeof extractionRaw?.extractionModelTier === \"string\"\n ? extractionRaw.extractionModelTier.trim().toLowerCase()\n : \"\";\n return v === \"nano\" || v === \"maintenance\" || v === \"default\" || v === \"heavy\"\n ? (v as \"nano\" | \"maintenance\" | \"default\" | \"heavy\")\n : undefined;\n })(),\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"capture.js","names":[],"sources":["../../../config/parsers/capture.ts"],"sourcesContent":["import { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { DEFAULT_IDENTITY_REFLECTION_QUESTIONS } from \"../../services/identity-reflection.js\";\nimport { expandHomePlaceholders } from \"../../utils/path.js\";\nimport type {\n ExtractionConfig,\n ExtractionPreFilterConfig,\n IdentityPromotionConfig,\n IdentityReflectionConfig,\n PassiveObserverConfig,\n ProceduresConfig,\n ReflectionConfig,\n} from \"../types/capture.js\";\n\nexport function parsePassiveObserverConfig(cfg: Record<string, unknown>): PassiveObserverConfig {\n const observerRaw = cfg.passiveObserver as Record<string, unknown> | undefined;\n return {\n enabled: observerRaw?.enabled === true,\n intervalMinutes:\n typeof observerRaw?.intervalMinutes === \"number\" && observerRaw.intervalMinutes >= 1\n ? Math.floor(observerRaw.intervalMinutes)\n : 15,\n model:\n typeof observerRaw?.model === \"string\" && observerRaw.model.trim().length > 0\n ? observerRaw.model.trim()\n : undefined,\n maxCharsPerChunk:\n typeof observerRaw?.maxCharsPerChunk === \"number\" && observerRaw.maxCharsPerChunk >= 100\n ? Math.floor(observerRaw.maxCharsPerChunk)\n : 8000,\n minImportance:\n typeof observerRaw?.minImportance === \"number\" && observerRaw.minImportance >= 0 && observerRaw.minImportance <= 1\n ? observerRaw.minImportance\n : 0.5,\n deduplicationThreshold:\n typeof observerRaw?.deduplicationThreshold === \"number\" &&\n observerRaw.deduplicationThreshold >= 0 &&\n observerRaw.deduplicationThreshold <= 1\n ? observerRaw.deduplicationThreshold\n : 0.92,\n sessionsDir:\n typeof observerRaw?.sessionsDir === \"string\" && observerRaw.sessionsDir.trim().length > 0\n ? expandHomePlaceholders(observerRaw.sessionsDir.trim())\n : undefined,\n };\n}\n\nexport function parseReflectionConfig(cfg: Record<string, unknown>): ReflectionConfig {\n const reflectionRaw = cfg.reflection as Record<string, unknown> | undefined;\n return {\n enabled: reflectionRaw?.enabled === true,\n model: typeof reflectionRaw?.model === \"string\" ? reflectionRaw.model : undefined,\n defaultWindow:\n typeof reflectionRaw?.defaultWindow === \"number\" && reflectionRaw.defaultWindow > 0\n ? Math.min(90, Math.floor(reflectionRaw.defaultWindow))\n : 14,\n minObservations:\n typeof reflectionRaw?.minObservations === \"number\" && reflectionRaw.minObservations >= 1\n ? Math.floor(reflectionRaw.minObservations)\n : 2,\n };\n}\n\nexport function parseIdentityReflectionConfig(cfg: Record<string, unknown>): IdentityReflectionConfig {\n const raw = cfg.identityReflection as Record<string, unknown> | undefined;\n const parsedQuestions = Array.isArray(raw?.questions)\n ? raw.questions\n .filter((q): q is Record<string, unknown> => !!q && typeof q === \"object\")\n .map((q) => ({\n key: typeof q.key === \"string\" ? q.key.trim() : \"\",\n prompt: typeof q.prompt === \"string\" ? q.prompt.trim() : \"\",\n }))\n .filter((q) => q.key.length > 0 && q.prompt.length > 0)\n : [];\n return {\n enabled: raw?.enabled === true,\n model: typeof raw?.model === \"string\" && raw.model.trim().length > 0 ? raw.model.trim() : undefined,\n defaultWindow:\n typeof raw?.defaultWindow === \"number\" && raw.defaultWindow > 0\n ? Math.min(90, Math.floor(raw.defaultWindow))\n : 30,\n minInsights: typeof raw?.minInsights === \"number\" && raw.minInsights >= 1 ? Math.floor(raw.minInsights) : 3,\n maxInsightsPerRun:\n typeof raw?.maxInsightsPerRun === \"number\" && raw.maxInsightsPerRun >= 1\n ? Math.min(20, Math.floor(raw.maxInsightsPerRun))\n : 8,\n questions: parsedQuestions.length > 0 ? parsedQuestions : DEFAULT_IDENTITY_REFLECTION_QUESTIONS,\n };\n}\n\nexport function parseIdentityPromotionConfig(cfg: Record<string, unknown>): IdentityPromotionConfig {\n const raw = cfg.identityPromotion as Record<string, unknown> | undefined;\n return {\n enabled: raw?.enabled !== false,\n lookbackDays:\n typeof raw?.lookbackDays === \"number\" && raw.lookbackDays >= 1 ? Math.min(365, Math.floor(raw.lookbackDays)) : 90,\n minDurableReflections:\n typeof raw?.minDurableReflections === \"number\" && raw.minDurableReflections >= 1\n ? Math.min(10, Math.floor(raw.minDurableReflections))\n : 2,\n minConfidence:\n typeof raw?.minConfidence === \"number\" && raw.minConfidence >= 0 && raw.minConfidence <= 1\n ? raw.minConfidence\n : 0.72,\n similarityThreshold:\n typeof raw?.similarityThreshold === \"number\" && raw.similarityThreshold >= 0 && raw.similarityThreshold <= 1\n ? raw.similarityThreshold\n : 0.72,\n maxPromotionsPerRun:\n typeof raw?.maxPromotionsPerRun === \"number\" && raw.maxPromotionsPerRun >= 1\n ? Math.min(50, Math.floor(raw.maxPromotionsPerRun))\n : 8,\n };\n}\n\nexport function parseProceduresConfig(cfg: Record<string, unknown>): ProceduresConfig {\n const defaultSessionsDir = join(homedir(), \".openclaw\", \"agents\", \"main\", \"sessions\");\n const proceduresRaw = cfg.procedures as Record<string, unknown> | undefined;\n return {\n enabled: proceduresRaw?.enabled !== false,\n sessionsDir:\n typeof proceduresRaw?.sessionsDir === \"string\" && proceduresRaw.sessionsDir.length > 0\n ? expandHomePlaceholders(proceduresRaw.sessionsDir)\n : defaultSessionsDir,\n minSteps:\n typeof proceduresRaw?.minSteps === \"number\" && proceduresRaw.minSteps >= 1\n ? Math.floor(proceduresRaw.minSteps)\n : 2,\n validationThreshold:\n typeof proceduresRaw?.validationThreshold === \"number\" && proceduresRaw.validationThreshold >= 1\n ? Math.floor(proceduresRaw.validationThreshold)\n : 3,\n skillTTLDays:\n typeof proceduresRaw?.skillTTLDays === \"number\" && proceduresRaw.skillTTLDays >= 1\n ? Math.floor(proceduresRaw.skillTTLDays)\n : 30,\n skillsAutoPath:\n typeof proceduresRaw?.skillsAutoPath === \"string\" && proceduresRaw.skillsAutoPath.length > 0\n ? proceduresRaw.skillsAutoPath\n : \"skills/auto\",\n requireApprovalForPromote: proceduresRaw?.requireApprovalForPromote !== false,\n maxInjectionTokens:\n typeof proceduresRaw?.maxInjectionTokens === \"number\" &&\n proceduresRaw.maxInjectionTokens >= 0 &&\n Number.isFinite(proceduresRaw.maxInjectionTokens)\n ? Math.floor(proceduresRaw.maxInjectionTokens)\n : 500,\n promotionContextSpecificPatterns:\n Array.isArray(proceduresRaw?.promotionContextSpecificPatterns) &&\n proceduresRaw.promotionContextSpecificPatterns.every((x) => typeof x === \"string\")\n ? (proceduresRaw.promotionContextSpecificPatterns as string[]).map((s) => s.trim()).filter((s) => s.length > 0)\n : undefined,\n };\n}\n\nfunction parsePreFilterConfig(raw: Record<string, unknown> | undefined): ExtractionPreFilterConfig | undefined {\n if (!raw) return undefined;\n return {\n enabled: raw.enabled === true,\n model: typeof raw.model === \"string\" && raw.model.trim().length > 0 ? raw.model.trim() : \"qwen3:8b\",\n endpoint: typeof raw.endpoint === \"string\" && raw.endpoint.trim().length > 0 ? raw.endpoint.trim() : undefined,\n maxCharsPerSession:\n typeof raw.maxCharsPerSession === \"number\" && raw.maxCharsPerSession >= 100\n ? Math.floor(raw.maxCharsPerSession)\n : undefined,\n };\n}\n\nexport function parseExtractionConfig(cfg: Record<string, unknown>): ExtractionConfig {\n const extractionRaw = cfg.extraction as Record<string, unknown> | undefined;\n return {\n extractionPasses: extractionRaw?.extractionPasses === true,\n verificationPass: extractionRaw?.verificationPass === true,\n extractionModel:\n typeof extractionRaw?.extractionModel === \"string\" && extractionRaw.extractionModel.trim().length > 0\n ? extractionRaw.extractionModel.trim()\n : undefined,\n implicitModel:\n typeof extractionRaw?.implicitModel === \"string\" && extractionRaw.implicitModel.trim().length > 0\n ? extractionRaw.implicitModel.trim()\n : undefined,\n verificationModel:\n typeof extractionRaw?.verificationModel === \"string\" && extractionRaw.verificationModel.trim().length > 0\n ? extractionRaw.verificationModel.trim()\n : undefined,\n preFilter: parsePreFilterConfig(extractionRaw?.preFilter as Record<string, unknown> | undefined),\n extractionModelTier: (() => {\n const v =\n typeof extractionRaw?.extractionModelTier === \"string\"\n ? extractionRaw.extractionModelTier.trim().toLowerCase()\n : \"\";\n return v === \"nano\" || v === \"maintenance\" || v === \"default\" || v === \"heavy\"\n ? (v as \"nano\" | \"maintenance\" | \"default\" | \"heavy\")\n : undefined;\n })(),\n };\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.js","names":[],"sources":["../../../config/parsers/core.ts"],"sourcesContent":["import { readFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { normalizeMaintenanceFallbackPolicy } from \"../maintenance-fallback-policy.js\";\nimport { parseDuration } from \"../../utils/duration.js\";\nimport { pluginLogger } from \"../../utils/logger.js\";\nimport type {\n DiagnosticsConfig,\n EventLogConfig,\n PathConfig,\n StoreConfig,\n StoreSourceProfile,\n WALConfig,\n} from \"../types/core.js\";\nimport type {\n ActiveTaskConfig,\n ActiveTaskProjectionConfig,\n AuthOrderConfig,\n CredentialAutoCaptureConfig,\n CredentialsConfig,\n GatewayConfig,\n GoalStewardshipConfig,\n LLMConfig,\n LLMProviderConfig,\n ResolvedGatewayAuthConfig,\n SelfCorrectionConfig,\n VectorConfig,\n} from \"../types/index.js\";\n\nexport const DEFAULT_MODEL = \"text-embedding-3-small\";\nexport const DEFAULT_LANCE_PATH = join(homedir(), \".openclaw\", \"memory\", \"lancedb\");\nexport const DEFAULT_SQLITE_PATH = join(homedir(), \".openclaw\", \"memory\", \"facts.db\");\nconst DEFAULT_EVENT_ARCHIVE_PATH = \"~/.openclaw/event-archive\";\n\nexport const EMBEDDING_DIMENSIONS: Record<string, number> = {\n \"text-embedding-3-small\": 1536,\n \"text-embedding-3-large\": 3072,\n \"text-embedding-ada-002\": 1536,\n // Local / HuggingFace models that users may have previously generated vectors with\n \"all-MiniLM-L6-v2\": 384,\n \"bge-small-en-v1.5\": 384,\n // Common Ollama embedding models\n \"nomic-embed-text\": 768,\n \"mxbai-embed-large\": 1024,\n \"all-minilm\": 384,\n \"snowflake-arctic-embed\": 1024,\n \"bge-m3\": 1024,\n \"bge-large\": 1024,\n // Alibaba Cloud models\n \"text-embedding-v3\": 1024,\n \"text-embedding-v4\": 1024,\n};\n\nexport const OPENAI_MODELS = new Set([\n \"text-embedding-3-small\",\n \"text-embedding-3-large\",\n \"text-embedding-ada-002\",\n // Alibaba Cloud models (OpenAI compatible API)\n \"text-embedding-v3\",\n \"text-embedding-v4\",\n]);\n\nconst MAX_ENV_RESOLVE_LENGTH = 10000;\n\nexport function normalizeResolvedSecretValue(value: string | undefined): string | undefined {\n if (typeof value !== \"string\") return undefined;\n const trimmed = value.trim();\n return trimmed && trimmed !== \"undefined\" ? trimmed : undefined;\n}\n\nexport function resolveEnvVars(value: string): string {\n if (value.length > MAX_ENV_RESOLVE_LENGTH) {\n throw new Error(`Config value too long for environment variable resolution (max ${MAX_ENV_RESOLVE_LENGTH} chars).`);\n }\n // Use [^}]+ not (.*?) to avoid ReDoS (js/polynomial-redos): no backtracking on malicious input.\n return value.replace(/\\$\\{([^}]+)\\}/g, (_, envVar) => {\n const name = String(envVar).trim();\n if (!name) throw new Error(\"Environment variable name is empty\");\n const envValue = normalizeResolvedSecretValue(process.env[name]);\n if (!envValue) throw new Error(`Environment variable ${name} is not set`);\n return envValue;\n });\n}\n\nfunction parseStoreSourceProfile(raw: unknown): StoreSourceProfile | undefined {\n if (!raw || typeof raw !== \"object\") return undefined;\n const obj = raw as Record<string, unknown>;\n const onDuplicate =\n obj.onDuplicate === \"skip\" ||\n obj.onDuplicate === \"boost\" ||\n obj.onDuplicate === \"merge\" ||\n obj.onDuplicate === \"store\"\n ? obj.onDuplicate\n : undefined;\n return {\n vectorThreshold:\n typeof obj.vectorThreshold === \"number\" && obj.vectorThreshold > 0 && obj.vectorThreshold <= 1\n ? obj.vectorThreshold\n : undefined,\n lexicalJaccard:\n typeof obj.lexicalJaccard === \"number\" && obj.lexicalJaccard > 0 && obj.lexicalJaccard <= 1\n ? obj.lexicalJaccard\n : undefined,\n maxPerDay: typeof obj.maxPerDay === \"number\" && obj.maxPerDay > 0 ? Math.floor(obj.maxPerDay) : undefined,\n onDuplicate,\n boostBy: typeof obj.boostBy === \"number\" && obj.boostBy > 0 ? Math.min(1, obj.boostBy) : undefined,\n onOverflow: obj.onOverflow === \"drop\" || obj.onOverflow === \"evict-lowest-confidence\" ? obj.onOverflow : undefined,\n };\n}\n\nfunction parseSourceProfiles(raw: unknown): Record<string, StoreSourceProfile> | undefined {\n if (!raw || typeof raw !== \"object\") return undefined;\n const out: Record<string, StoreSourceProfile> = {};\n for (const [key, value] of Object.entries(raw as Record<string, unknown>)) {\n if (!key.trim()) continue;\n const parsed = parseStoreSourceProfile(value);\n if (parsed) out[key.trim()] = parsed;\n }\n return Object.keys(out).length > 0 ? out : undefined;\n}\n\nexport function parseStoreConfig(cfg: Record<string, unknown>): StoreConfig {\n const storeRaw = cfg.store as Record<string, unknown> | undefined;\n return {\n fuzzyDedupe: storeRaw?.fuzzyDedupe === true,\n classifyBeforeWrite: storeRaw?.classifyBeforeWrite === true,\n classifyModel: typeof storeRaw?.classifyModel === \"string\" ? storeRaw.classifyModel : undefined,\n sourceProfiles: parseSourceProfiles(storeRaw?.sourceProfiles),\n defaultProfile: parseStoreSourceProfile(storeRaw?.defaultProfile),\n };\n}\n\nexport function parseWALConfig(cfg: Record<string, unknown>): WALConfig {\n const walRaw = cfg.wal as Record<string, unknown> | undefined;\n return {\n enabled: walRaw?.enabled !== false,\n walPath: typeof walRaw?.walPath === \"string\" ? walRaw.walPath : undefined,\n maxAge: typeof walRaw?.maxAge === \"number\" && walRaw.maxAge > 0 ? walRaw.maxAge : 5 * 60 * 1000,\n };\n}\n\nexport function parseEventLogConfig(cfg: Record<string, unknown>): EventLogConfig {\n const eventLogRaw = cfg.eventLog as Record<string, unknown> | undefined;\n return {\n archivalDays:\n typeof eventLogRaw?.archivalDays === \"number\" && eventLogRaw.archivalDays >= 1\n ? Math.min(3650, Math.floor(eventLogRaw.archivalDays))\n : 90,\n archivePath:\n typeof eventLogRaw?.archivePath === \"string\" && eventLogRaw.archivePath.trim().length > 0\n ? eventLogRaw.archivePath.trim()\n : DEFAULT_EVENT_ARCHIVE_PATH,\n };\n}\n\nexport function parseDiagnosticsConfig(cfg: Record<string, unknown>): DiagnosticsConfig {\n const raw = cfg.diagnostics as Record<string, unknown> | undefined;\n return {\n enabled: raw?.enabled === true,\n writeArtifact: raw?.writeArtifact === true,\n cooldownSec: typeof raw?.cooldownSec === \"number\" && raw.cooldownSec >= 10 ? Math.floor(raw.cooldownSec) : 300,\n includeLinuxProcMem: raw?.includeLinuxProcMem !== false,\n fdGroupSampleLimit:\n typeof raw?.fdGroupSampleLimit === \"number\" && raw.fdGroupSampleLimit > 0\n ? Math.floor(raw.fdGroupSampleLimit)\n : 5,\n };\n}\n\nexport function parsePathConfig(cfg: Record<string, unknown>): PathConfig {\n const pathRaw = cfg.path as Record<string, unknown> | undefined;\n return {\n enabled: pathRaw?.enabled !== false,\n maxPathDepth:\n typeof pathRaw?.maxPathDepth === \"number\" && pathRaw.maxPathDepth > 0\n ? Math.min(20, Math.floor(pathRaw.maxPathDepth))\n : 10,\n };\n}\n\nexport function parseVectorConfig(cfg: Record<string, unknown>): VectorConfig {\n const vectorRaw = cfg.vector as Record<string, unknown> | undefined;\n return {\n autoRepair: vectorRaw?.autoRepair === true,\n };\n}\n\nfunction parseCredentialOptions(credRaw: Record<string, unknown> | undefined): {\n autoCapture: CredentialAutoCaptureConfig | undefined;\n autoDetect: boolean;\n expiryWarningDays: number;\n revealInContent: boolean;\n} {\n const autoCaptureRaw = credRaw?.autoCapture as Record<string, unknown> | undefined;\n const autoCapture: CredentialAutoCaptureConfig | undefined = autoCaptureRaw\n ? {\n toolCalls: autoCaptureRaw.toolCalls === true,\n patterns: \"builtin\",\n logCaptures: autoCaptureRaw.logCaptures !== false,\n requirePatternMatch: autoCaptureRaw.requirePatternMatch === true,\n }\n : undefined;\n return {\n autoCapture,\n autoDetect: credRaw?.autoDetect === true,\n expiryWarningDays:\n typeof credRaw?.expiryWarningDays === \"number\" && credRaw.expiryWarningDays >= 0\n ? Math.floor(credRaw.expiryWarningDays)\n : 7,\n revealInContent: credRaw?.revealInContent === true,\n };\n}\n\nexport function parseCredentialsConfig(cfg: Record<string, unknown>): CredentialsConfig {\n const credRaw = cfg.credentials as Record<string, unknown> | undefined;\n const explicitlyDisabled = credRaw?.enabled === false;\n const encKeyRaw = typeof credRaw?.encryptionKey === \"string\" ? credRaw.encryptionKey : \"\";\n let encryptionKey = \"\";\n if (encKeyRaw.startsWith(\"env:\")) {\n const envVar = encKeyRaw.slice(4).trim();\n const val = process.env[envVar];\n if (val && val.length >= 16) {\n encryptionKey = val;\n }\n } else if (encKeyRaw.length >= 16) {\n encryptionKey = encKeyRaw;\n }\n const hasValidKey = encryptionKey.length >= 16;\n const shouldEnable = !explicitlyDisabled && (credRaw?.enabled === true || hasValidKey);\n\n let credentials: CredentialsConfig;\n if (shouldEnable) {\n const opts = parseCredentialOptions(credRaw);\n if (!hasValidKey) {\n pluginLogger.warn(\n \"memory-hybrid: credentials vault is enabled without encryption at rest (set credentials.encryptionKey with 16+ characters, or OPENCLAW_CRED_KEY / env:VAR for a strong key). \" +\n \"Until then, stored secrets are written as plaintext in the vault database — restrict filesystem access to that path, or add a key when you are ready.\",\n );\n }\n credentials = {\n enabled: true,\n store: \"sqlite\",\n encryptionKey: \"\",\n ...opts,\n };\n } else {\n credentials = {\n enabled: false,\n store: \"sqlite\",\n encryptionKey: \"\",\n autoDetect: false,\n expiryWarningDays: 7,\n };\n }\n const resolvedKey = hasValidKey ? encryptionKey : \"\";\n Object.defineProperty(credentials, \"encryptionKey\", {\n value: resolvedKey,\n enumerable: false,\n writable: false,\n });\n return credentials;\n}\n\nexport function parseActiveTaskConfig(cfg: Record<string, unknown>): ActiveTaskConfig {\n const activeTaskRaw = cfg.activeTask as Record<string, unknown> | undefined;\n\n // Resolve staleThreshold — support both new string format and legacy staleHours number.\n // Priority: staleThreshold string > staleHours number > default \"24h\".\n let resolvedStaleThreshold = \"24h\";\n if (typeof activeTaskRaw?.staleThreshold === \"string\" && activeTaskRaw.staleThreshold.trim().length > 0) {\n try {\n parseDuration(activeTaskRaw.staleThreshold.trim());\n } catch (err: unknown) {\n throw new Error(`activeTask.staleThreshold is invalid: ${err instanceof Error ? err.message : String(err)}`);\n }\n resolvedStaleThreshold = activeTaskRaw.staleThreshold.trim();\n } else if (typeof activeTaskRaw?.staleHours === \"number\" && activeTaskRaw.staleHours > 0) {\n // Backward compat: convert legacy staleHours number → \"Xh\" string.\n const converted = `${activeTaskRaw.staleHours}h`;\n try {\n parseDuration(converted);\n } catch (err: unknown) {\n throw new Error(`activeTask.staleHours is invalid: ${err instanceof Error ? err.message : String(err)}`);\n }\n resolvedStaleThreshold = converted;\n }\n\n const staleWarningRaw = activeTaskRaw?.staleWarning as Record<string, unknown> | undefined;\n const thRaw = activeTaskRaw?.taskHygiene as Record<string, unknown> | undefined;\n const suggestDays =\n typeof thRaw?.suggestGoalAfterTaskAgeDays === \"number\" && thRaw.suggestGoalAfterTaskAgeDays >= 0\n ? Math.floor(thRaw.suggestGoalAfterTaskAgeDays)\n : 0;\n const heartbeatNudgeMaxChars =\n typeof thRaw?.heartbeatNudgeMaxChars === \"number\" && thRaw.heartbeatNudgeMaxChars >= 200\n ? Math.floor(thRaw.heartbeatNudgeMaxChars)\n : 2500;\n const lrRaw = thRaw?.longRunningRegistration as Record<string, unknown> | undefined;\n const longRunningModeRaw = typeof lrRaw?.mode === \"string\" ? lrRaw.mode.trim() : \"\";\n const longRunningMode =\n longRunningModeRaw === \"off\" ||\n longRunningModeRaw === \"suggest\" ||\n longRunningModeRaw === \"confirm\" ||\n longRunningModeRaw === \"auto_main_private\"\n ? longRunningModeRaw\n : \"suggest\";\n const ledgerRaw = activeTaskRaw?.ledger;\n const ledger = ledgerRaw === \"facts\" ? \"facts\" : \"markdown\";\n const projRaw = activeTaskRaw?.projection as Record<string, unknown> | undefined;\n const projection: ActiveTaskProjectionConfig = {\n mode: projRaw?.mode === \"full\" ? \"full\" : \"readable\",\n excludeGenericTitle: projRaw?.excludeGenericTitle !== false,\n titleMinChars:\n typeof projRaw?.titleMinChars === \"number\" && projRaw.titleMinChars > 0 ? Math.floor(projRaw.titleMinChars) : 0,\n dedupeBy: projRaw?.dedupeBy === \"label\" || projRaw?.dedupeBy === \"normalizedTitle\" ? projRaw.dedupeBy : \"none\",\n maxRowsPerSection:\n typeof projRaw?.maxRowsPerSection === \"number\" && projRaw.maxRowsPerSection > 0\n ? Math.floor(projRaw.maxRowsPerSection)\n : undefined,\n sectioned: projRaw?.sectioned !== false,\n };\n const liveStateReconcileRaw = activeTaskRaw?.liveStateReconcile as Record<string, unknown> | undefined;\n return {\n enabled: activeTaskRaw?.enabled !== false,\n ledger,\n filePath:\n typeof activeTaskRaw?.filePath === \"string\" && activeTaskRaw.filePath.trim().length > 0\n ? activeTaskRaw.filePath.trim()\n : \"ACTIVE-TASKS.md\",\n autoCheckpoint: activeTaskRaw?.autoCheckpoint !== false,\n // Positive numbers only; floor fractions. Non-positive or missing → default (align openclaw.plugin.json: integer, minimum 1).\n injectionBudget:\n typeof activeTaskRaw?.injectionBudget === \"number\" && activeTaskRaw.injectionBudget > 0\n ? Math.floor(activeTaskRaw.injectionBudget)\n : 500,\n injectionMaxTasks:\n typeof activeTaskRaw?.injectionMaxTasks === \"number\" && activeTaskRaw.injectionMaxTasks > 0\n ? Math.floor(activeTaskRaw.injectionMaxTasks)\n : undefined,\n staleThreshold: resolvedStaleThreshold,\n flushOnComplete: activeTaskRaw?.flushOnComplete !== false,\n staleWarning: {\n enabled: staleWarningRaw?.enabled !== false, // default: true\n },\n taskHygiene: {\n heartbeatEscalation: thRaw?.heartbeatEscalation !== false,\n suggestGoalAfterTaskAgeDays: suggestDays,\n heartbeatNudgeMaxChars,\n longRunningRegistration: {\n mode: longRunningMode,\n },\n },\n projection,\n liveStateReconcile: {\n enabled: liveStateReconcileRaw?.enabled === true,\n },\n };\n}\n\nexport function parseGoalStewardshipConfig(cfg: Record<string, unknown>): GoalStewardshipConfig {\n const raw = cfg.goalStewardship as Record<string, unknown> | undefined;\n const defaults = raw?.defaults as Record<string, unknown> | undefined;\n const limits = raw?.globalLimits as Record<string, unknown> | undefined;\n const goalsDir =\n typeof raw?.goalsDir === \"string\" && raw.goalsDir.trim().length > 0 ? raw.goalsDir.trim() : \"state/goals\";\n const priorityRaw = defaults?.priority;\n const priority =\n priorityRaw === \"critical\" || priorityRaw === \"high\" || priorityRaw === \"low\" || priorityRaw === \"normal\"\n ? priorityRaw\n : \"normal\";\n const patternsRaw = raw?.heartbeatPatterns;\n const heartbeatPatterns: string[] = [];\n if (Array.isArray(patternsRaw)) {\n for (const p of patternsRaw) {\n if (typeof p === \"string\" && p.trim().length > 0) heartbeatPatterns.push(p.trim());\n }\n }\n\n const aw = raw?.attentionWeights as Record<string, unknown> | undefined;\n const attentionWeights = {\n critical: typeof aw?.critical === \"number\" && aw.critical > 0 ? aw.critical : 4,\n high: typeof aw?.high === \"number\" && aw.high > 0 ? aw.high : 2,\n normal: typeof aw?.normal === \"number\" && aw.normal > 0 ? aw.normal : 1,\n low: typeof aw?.low === \"number\" && aw.low > 0 ? aw.low : 0.5,\n };\n\n const multiGoalMaxChars =\n typeof raw?.multiGoalMaxChars === \"number\" && raw.multiGoalMaxChars >= 500\n ? Math.floor(raw.multiGoalMaxChars)\n : 12_000;\n const multiGoalMaxGoals =\n typeof raw?.multiGoalMaxGoals === \"number\" && raw.multiGoalMaxGoals >= 1 ? Math.floor(raw.multiGoalMaxGoals) : 8;\n\n const confRaw = raw?.confirmationPolicy as Record<string, unknown> | undefined;\n const reqAck = confRaw?.requireRegisterAckForPriorities;\n const requireRegisterAckForPriorities: Array<\"critical\" | \"high\" | \"normal\" | \"low\"> = [];\n if (Array.isArray(reqAck)) {\n for (const pr of reqAck) {\n if (pr === \"critical\" || pr === \"high\" || pr === \"normal\" || pr === \"low\") {\n requireRegisterAckForPriorities.push(pr);\n }\n }\n }\n if (requireRegisterAckForPriorities.length === 0) {\n requireRegisterAckForPriorities.push(\"critical\", \"high\");\n }\n\n const escPolRaw = raw?.escalationPolicy as Record<string, unknown> | undefined;\n const cbRaw = raw?.circuitBreaker as Record<string, unknown> | undefined;\n const sameBlockerRepeatLimit =\n typeof cbRaw?.sameBlockerRepeatLimit === \"number\" && cbRaw.sameBlockerRepeatLimit >= 1\n ? Math.floor(cbRaw.sameBlockerRepeatLimit)\n : 0;\n const maxAssessmentsWithoutProgress =\n typeof cbRaw?.maxAssessmentsWithoutProgress === \"number\" && cbRaw.maxAssessmentsWithoutProgress >= 1\n ? Math.floor(cbRaw.maxAssessmentsWithoutProgress)\n : 0;\n\n return {\n enabled: raw?.enabled === true,\n goalsDir,\n model: typeof raw?.model === \"string\" && raw.model.trim().length > 0 ? raw.model.trim() : null,\n heartbeatStewardship: raw?.heartbeatStewardship !== false,\n watchdogHealthCheck: raw?.watchdogHealthCheck !== false,\n defaults: {\n maxDispatches:\n typeof defaults?.maxDispatches === \"number\" && defaults.maxDispatches >= 1\n ? Math.floor(defaults.maxDispatches)\n : 20,\n maxAssessments:\n typeof defaults?.maxAssessments === \"number\" && defaults.maxAssessments >= 1\n ? Math.floor(defaults.maxAssessments)\n : 50,\n cooldownMinutes:\n typeof defaults?.cooldownMinutes === \"number\" && defaults.cooldownMinutes >= 1\n ? Math.floor(defaults.cooldownMinutes)\n : 10,\n escalateAfterFailures:\n typeof defaults?.escalateAfterFailures === \"number\" && defaults.escalateAfterFailures >= 1\n ? Math.floor(defaults.escalateAfterFailures)\n : 3,\n priority,\n },\n globalLimits: {\n maxDispatchesPerHour:\n typeof limits?.maxDispatchesPerHour === \"number\" && limits.maxDispatchesPerHour >= 1\n ? Math.floor(limits.maxDispatchesPerHour)\n : 6,\n maxActiveGoals:\n typeof limits?.maxActiveGoals === \"number\" && limits.maxActiveGoals >= 1\n ? Math.floor(limits.maxActiveGoals)\n : 5,\n },\n heartbeatPatterns,\n attentionWeights,\n multiGoalMaxChars,\n multiGoalMaxGoals,\n heartbeatRefreshActiveTask: raw?.heartbeatRefreshActiveTask !== false,\n confirmationPolicy: {\n requireRegisterAckForPriorities,\n },\n llmTriageOnHeartbeat: raw?.llmTriageOnHeartbeat === true,\n triageSuggestHeavyDirective: raw?.triageSuggestHeavyDirective !== false,\n escalationPolicy: {\n taskHygieneOnBlockedGoals: escPolRaw?.taskHygieneOnBlockedGoals !== false,\n },\n circuitBreaker: {\n enabled: cbRaw?.enabled === true,\n sameBlockerRepeatLimit,\n maxAssessmentsWithoutProgress,\n composeHumanSummary: cbRaw?.composeHumanSummary !== false,\n appendMemoryEscalation: cbRaw?.appendMemoryEscalation !== false,\n },\n allowCommandVerification: raw?.allowCommandVerification === true,\n allowPrVerification: raw?.allowPrVerification === true,\n };\n}\n\nexport function parseSelfCorrectionConfig(cfg: Record<string, unknown>): SelfCorrectionConfig | undefined {\n const scRaw = cfg.selfCorrection as Record<string, unknown> | undefined;\n if (!scRaw || typeof scRaw !== \"object\") return undefined;\n if (scRaw.enabled === false) return undefined;\n return {\n semanticDedup: scRaw.semanticDedup !== false,\n semanticDedupThreshold:\n typeof scRaw.semanticDedupThreshold === \"number\" &&\n scRaw.semanticDedupThreshold >= 0 &&\n scRaw.semanticDedupThreshold <= 1\n ? scRaw.semanticDedupThreshold\n : 0.92,\n toolsSection:\n typeof scRaw.toolsSection === \"string\" && scRaw.toolsSection.trim().length > 0\n ? scRaw.toolsSection.trim()\n : \"Self-correction rules\",\n applyToolsByDefault: scRaw.applyToolsByDefault !== false,\n autoRewriteTools: scRaw.autoRewriteTools === true,\n analyzeViaSpawn: scRaw.analyzeViaSpawn === true,\n spawnThreshold:\n typeof scRaw.spawnThreshold === \"number\" && scRaw.spawnThreshold >= 1 ? Math.floor(scRaw.spawnThreshold) : 15,\n spawnModel: typeof scRaw.spawnModel === \"string\" ? scRaw.spawnModel : \"\",\n positiveRulesSection:\n typeof scRaw.positiveRulesSection === \"string\" && scRaw.positiveRulesSection.trim().length > 0\n ? scRaw.positiveRulesSection.trim()\n : \"Positive Reinforcement Rules\",\n reinforcementLLMAnalysis: scRaw.reinforcementLLMAnalysis !== false,\n reinforcementToProposals: scRaw.reinforcementToProposals !== false,\n agentsRuleToProposals: scRaw.agentsRuleToProposals !== false,\n };\n}\n\n/** Returns true when the key looks like a placeholder rather than a real credential. */\nfunction isPlaceholderApiKey(key: string): boolean {\n if (key.length < 10) return true;\n return (\n /YOUR_.*_HERE|REPLACE_ME|INSERT_.*_HERE|<.*API.*KEY.*>|^x+$|^sk-x+$|^placeholder$/i.test(key) ||\n // Also reject values that are entirely repeated single characters (e.g. \"aaaaaaaaaa\", \"1111111111\")\n // but NOT all-lowercase/uppercase alphanumeric real keys.\n /^(.)\\1{9,}$/.test(key)\n );\n}\n\n/**\n * Parse auth.order config for OAuth-first LLM provider authentication (issue #311).\n * Returns undefined when no valid auth order is configured.\n */\nexport function parseAuthConfig(cfg: Record<string, unknown>): AuthOrderConfig | undefined {\n const authRaw = cfg.auth as Record<string, unknown> | undefined;\n if (!authRaw || typeof authRaw !== \"object\" || Array.isArray(authRaw)) return undefined;\n const orderRaw = authRaw.order;\n if (!orderRaw || typeof orderRaw !== \"object\" || Array.isArray(orderRaw)) return undefined;\n const order: Record<string, string[]> = {};\n for (const [provider, profiles] of Object.entries(orderRaw as Record<string, unknown>)) {\n const trimmedProvider = provider.trim();\n if (trimmedProvider.length === 0) continue;\n if (!Array.isArray(profiles)) continue;\n const validProfiles = profiles\n .filter((p): p is string => typeof p === \"string\" && p.trim().length > 0)\n .map((p) => p.trim().toLowerCase());\n if (validProfiles.length > 0) {\n order[trimmedProvider.toLowerCase()] = validProfiles;\n }\n }\n if (Object.keys(order).length === 0) return undefined;\n const preferOAuthWhenBoth = authRaw.preferOAuthWhenBoth !== false;\n const backoffScheduleRaw = authRaw.backoffScheduleMinutes;\n const backoffScheduleMinutes =\n Array.isArray(backoffScheduleRaw) && backoffScheduleRaw.length > 0\n ? (backoffScheduleRaw as number[]).filter((n) => typeof n === \"number\" && n > 0)\n : undefined;\n const resetHoursRaw = authRaw.resetBackoffAfterHours;\n const resetBackoffAfterHours =\n typeof resetHoursRaw === \"number\" && resetHoursRaw > 0 ? Math.min(168, resetHoursRaw) : undefined;\n return {\n order,\n preferOAuthWhenBoth,\n ...(backoffScheduleMinutes && backoffScheduleMinutes.length > 0 ? { backoffScheduleMinutes } : {}),\n ...(resetBackoffAfterHours != null ? { resetBackoffAfterHours } : {}),\n };\n}\n\nexport function parseLLMConfig(cfg: Record<string, unknown>): LLMConfig | undefined {\n const llmRaw = cfg.llm as Record<string, unknown> | undefined;\n const maintenanceList =\n llmRaw && Array.isArray(llmRaw.maintenance)\n ? (llmRaw.maintenance as string[]).filter((m) => typeof m === \"string\" && m.trim().length > 0)\n : [];\n const defaultList =\n llmRaw && Array.isArray(llmRaw.default)\n ? (llmRaw.default as string[]).filter((m) => typeof m === \"string\" && m.trim().length > 0)\n : [];\n const heavyList =\n llmRaw && Array.isArray(llmRaw.heavy)\n ? (llmRaw.heavy as string[]).filter((m) => typeof m === \"string\" && m.trim().length > 0)\n : [];\n const llmProvidersRaw = llmRaw?.providers;\n const llmProviders: Record<string, LLMProviderConfig | undefined> | undefined =\n llmProvidersRaw && typeof llmProvidersRaw === \"object\" && !Array.isArray(llmProvidersRaw)\n ? Object.fromEntries(\n Object.entries(llmProvidersRaw as Record<string, unknown>).map(([k, v]) => {\n if (!v || typeof v !== \"object\" || Array.isArray(v)) return [k, undefined];\n const pv = v as Record<string, unknown>;\n const rawKey = typeof pv.apiKey === \"string\" && pv.apiKey.trim().length > 0 ? pv.apiKey.trim() : undefined;\n const validKey = rawKey && !isPlaceholderApiKey(rawKey) ? rawKey : undefined;\n if (rawKey && !validKey) {\n pluginLogger.warn(\n `memory-hybrid: Provider '${k}' has an invalid API key (looks like a placeholder) — skipping`,\n );\n }\n // Accept both camelCase `baseUrl` (OpenClaw convention) and kebab-case `baseURL`.\n // OpenClaw `openclaw.json` uses `baseUrl` under `models.providers.*`.\n const baseURLRaw =\n (typeof pv.baseURL === \"string\" && pv.baseURL.trim().length > 0 ? pv.baseURL.trim() : undefined) ??\n (typeof pv.baseUrl === \"string\" && pv.baseUrl.trim().length > 0 ? pv.baseUrl.trim() : undefined);\n return [\n k.toLowerCase(),\n {\n apiKey: validKey,\n baseURL: baseURLRaw,\n } as LLMProviderConfig,\n ];\n }),\n )\n : undefined;\n const nanoList =\n llmRaw && Array.isArray(llmRaw.nano)\n ? (llmRaw.nano as string[]).filter((m) => typeof m === \"string\" && m.trim().length > 0)\n : [];\n const localAutoStart = llmRaw?.localAutoStart === true;\n const disabledProvidersRaw = llmRaw?.disabledProviders;\n const disabledProviders: string[] =\n Array.isArray(disabledProvidersRaw) && disabledProvidersRaw.length > 0\n ? disabledProvidersRaw\n .filter((p): p is string => typeof p === \"string\" && p.trim().length > 0)\n .map((p) => p.trim().toLowerCase())\n : [];\n const maintenanceFallbackPolicyRaw = llmRaw?.maintenanceFallbackPolicy;\n const maintenanceFallbackPolicy = normalizeMaintenanceFallbackPolicy(maintenanceFallbackPolicyRaw);\n if (\n maintenanceFallbackPolicyRaw !== undefined &&\n maintenanceFallbackPolicyRaw !== null &&\n typeof maintenanceFallbackPolicyRaw === \"string\" &&\n maintenanceFallbackPolicy === undefined\n ) {\n pluginLogger.warn(\n `memory-hybrid: invalid llm.maintenanceFallbackPolicy ${JSON.stringify(maintenanceFallbackPolicyRaw)} — ignoring`,\n );\n }\n const llm: LLMConfig | undefined =\n maintenanceList.length > 0 ||\n defaultList.length > 0 ||\n heavyList.length > 0 ||\n nanoList.length > 0 ||\n llmProviders !== undefined ||\n localAutoStart ||\n disabledProviders.length > 0 ||\n maintenanceFallbackPolicy !== undefined\n ? {\n ...(maintenanceList.length > 0 ? { maintenance: maintenanceList } : {}),\n default: defaultList,\n heavy: heavyList,\n ...(nanoList.length > 0 ? { nano: nanoList } : {}),\n fallbackToDefault: llmRaw?.fallbackToDefault === true,\n fallbackModel:\n typeof llmRaw?.fallbackModel === \"string\" && (llmRaw.fallbackModel as string).trim().length > 0\n ? (llmRaw.fallbackModel as string).trim()\n : undefined,\n providers: llmProviders,\n localAutoStart,\n ...(disabledProviders.length > 0 ? { disabledProviders } : {}),\n ...(maintenanceFallbackPolicy !== undefined ? { maintenanceFallbackPolicy } : {}),\n }\n : undefined;\n return llm;\n}\n\n/**\n * Resolve a SecretRef string to its actual value.\n *\n * Supported formats:\n * \"env:VAR_NAME\" — read from process.env[VAR_NAME]\n * \"file:/path\" — read from a file, whitespace-trimmed\n * \"${VAR}\" — template syntax resolved via resolveEnvVars\n * plain string — returned as-is\n *\n * Returns undefined when the SecretRef cannot be resolved (env var unset,\n * file missing, or value is empty after trimming).\n */\nexport function resolveSecretRef(value: string): string | undefined {\n if (!value?.trim()) return undefined;\n const v = value.trim();\n if (v.startsWith(\"env:\")) {\n const varName = v.slice(4).trim();\n if (!varName) return undefined;\n return normalizeResolvedSecretValue(process.env[varName]);\n }\n if (v.startsWith(\"file:\")) {\n const filePath = v.slice(5).trim();\n if (!filePath) return undefined;\n try {\n const contents = readFileSync(filePath, \"utf-8\").trim();\n return contents || undefined;\n } catch {\n return undefined;\n }\n }\n // Handle ${VAR} template syntax (issues #6, #12).\n // resolveEnvVars throws when any referenced variable is unset or empty, so catch → undefined.\n // No post-resolution guard needed: if resolveEnvVars succeeds, all placeholders were expanded.\n // Any ${...} remaining in `resolved` came from the env var's own value and is legitimate.\n if (v.includes(\"${\")) {\n try {\n const resolved = resolveEnvVars(v);\n return resolved?.trim() ? resolved.trim() : undefined;\n } catch {\n return undefined;\n }\n }\n return v;\n}\n\n/** Matches OpenClaw `isSecretRef` / SecretRef object shape (openclaw/plugin-sdk config types). */\nfunction isOpenClawSecretRefObject(\n raw: unknown,\n): raw is { source: \"env\" | \"file\" | \"exec\"; provider: string; id: string } {\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) return false;\n if (Object.keys(raw as object).length !== 3) return false;\n const o = raw as Record<string, unknown>;\n return (\n (o.source === \"env\" || o.source === \"file\" || o.source === \"exec\") &&\n typeof o.provider === \"string\" &&\n o.provider.trim().length > 0 &&\n typeof o.id === \"string\" &&\n o.id.trim().length > 0\n );\n}\n\n/**\n * Resolve `embedding.apiKey` from either a string (env:/file:/templates) or an OpenClaw SecretRef object (Issue #833).\n * `source: \"exec\"` refs are only available when the host resolves secrets; unresolved here → undefined.\n */\nexport function resolveEmbeddingApiKeyInput(raw: unknown): string | undefined {\n if (raw === undefined || raw === null) return undefined;\n if (typeof raw === \"string\") return resolveSecretRef(raw);\n if (!isOpenClawSecretRefObject(raw)) return undefined;\n const ref = raw;\n if (ref.source === \"env\") {\n return normalizeResolvedSecretValue(process.env[ref.id]);\n }\n if (ref.source === \"file\") {\n if (ref.id.startsWith(\"/\") || ref.id.startsWith(\"./\")) {\n try {\n const contents = readFileSync(ref.id, \"utf-8\").trim();\n return contents || undefined;\n } catch {\n return undefined;\n }\n }\n return undefined;\n }\n return undefined;\n}\n\nexport function isEmbeddingApiKeyExecSecretRef(raw: unknown): boolean {\n return isOpenClawSecretRefObject(raw) && raw.source === \"exec\";\n}\n\n/**\n * Parse gateway config from raw plugin config.\n * The resolved token is stored as a non-enumerable property so it is not\n * visible in JSON.stringify / config dumps, while callers can still access it.\n */\nexport function parseGatewayConfig(cfg: Record<string, unknown>): GatewayConfig | undefined {\n const gwRaw = cfg.gateway as Record<string, unknown> | undefined;\n if (!gwRaw || typeof gwRaw !== \"object\") return undefined;\n const authRaw = gwRaw.auth as Record<string, unknown> | undefined;\n if (!authRaw || typeof authRaw !== \"object\") return undefined;\n const tokenRaw = typeof authRaw.token === \"string\" ? authRaw.token.trim() : undefined;\n if (!tokenRaw) return undefined;\n\n const resolvedToken = resolveSecretRef(tokenRaw);\n const auth: ResolvedGatewayAuthConfig = {\n token: tokenRaw, // keep SecretRef string for config display; NOT the resolved value\n };\n // Store resolved token as non-enumerable so it never leaks into JSON dumps or logs\n Object.defineProperty(auth, \"_resolvedToken\", {\n value: resolvedToken,\n enumerable: false,\n writable: false,\n });\n return { auth };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"core.js","names":[],"sources":["../../../config/parsers/core.ts"],"sourcesContent":["import { readFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { normalizeMaintenanceFallbackPolicy } from \"../maintenance-fallback-policy.js\";\nimport { parseDuration } from \"../../utils/duration.js\";\nimport { pluginLogger } from \"../../utils/logger.js\";\nimport type {\n DiagnosticsConfig,\n EventLogConfig,\n PathConfig,\n StoreConfig,\n StoreSourceProfile,\n WALConfig,\n} from \"../types/core.js\";\nimport type {\n ActiveTaskConfig,\n ActiveTaskProjectionConfig,\n AuthOrderConfig,\n CredentialAutoCaptureConfig,\n CredentialsConfig,\n GatewayConfig,\n GoalStewardshipConfig,\n LLMConfig,\n LLMProviderConfig,\n ResolvedGatewayAuthConfig,\n SelfCorrectionConfig,\n VectorConfig,\n} from \"../types/index.js\";\n\nexport const DEFAULT_MODEL = \"text-embedding-3-small\";\nexport const DEFAULT_LANCE_PATH = join(homedir(), \".openclaw\", \"memory\", \"lancedb\");\nexport const DEFAULT_SQLITE_PATH = join(homedir(), \".openclaw\", \"memory\", \"facts.db\");\nconst DEFAULT_EVENT_ARCHIVE_PATH = \"~/.openclaw/event-archive\";\n\nexport const EMBEDDING_DIMENSIONS: Record<string, number> = {\n \"text-embedding-3-small\": 1536,\n \"text-embedding-3-large\": 3072,\n \"text-embedding-ada-002\": 1536,\n // Local / HuggingFace models that users may have previously generated vectors with\n \"all-MiniLM-L6-v2\": 384,\n \"bge-small-en-v1.5\": 384,\n // Common Ollama embedding models\n \"nomic-embed-text\": 768,\n \"mxbai-embed-large\": 1024,\n \"all-minilm\": 384,\n \"snowflake-arctic-embed\": 1024,\n \"bge-m3\": 1024,\n \"bge-large\": 1024,\n // Alibaba Cloud models\n \"text-embedding-v3\": 1024,\n \"text-embedding-v4\": 1024,\n};\n\nexport const OPENAI_MODELS = new Set([\n \"text-embedding-3-small\",\n \"text-embedding-3-large\",\n \"text-embedding-ada-002\",\n // Alibaba Cloud models (OpenAI compatible API)\n \"text-embedding-v3\",\n \"text-embedding-v4\",\n]);\n\nconst MAX_ENV_RESOLVE_LENGTH = 10000;\n\nexport function normalizeResolvedSecretValue(value: string | undefined): string | undefined {\n if (typeof value !== \"string\") return undefined;\n const trimmed = value.trim();\n return trimmed && trimmed !== \"undefined\" ? trimmed : undefined;\n}\n\nexport function resolveEnvVars(value: string): string {\n if (value.length > MAX_ENV_RESOLVE_LENGTH) {\n throw new Error(`Config value too long for environment variable resolution (max ${MAX_ENV_RESOLVE_LENGTH} chars).`);\n }\n // Use [^}]+ not (.*?) to avoid ReDoS (js/polynomial-redos): no backtracking on malicious input.\n return value.replace(/\\$\\{([^}]+)\\}/g, (_, envVar) => {\n const name = String(envVar).trim();\n if (!name) throw new Error(\"Environment variable name is empty\");\n const envValue = normalizeResolvedSecretValue(process.env[name]);\n if (!envValue) throw new Error(`Environment variable ${name} is not set`);\n return envValue;\n });\n}\n\nfunction parseStoreSourceProfile(raw: unknown): StoreSourceProfile | undefined {\n if (!raw || typeof raw !== \"object\") return undefined;\n const obj = raw as Record<string, unknown>;\n const onDuplicate =\n obj.onDuplicate === \"skip\" ||\n obj.onDuplicate === \"boost\" ||\n obj.onDuplicate === \"merge\" ||\n obj.onDuplicate === \"store\"\n ? obj.onDuplicate\n : undefined;\n return {\n vectorThreshold:\n typeof obj.vectorThreshold === \"number\" && obj.vectorThreshold > 0 && obj.vectorThreshold <= 1\n ? obj.vectorThreshold\n : undefined,\n lexicalJaccard:\n typeof obj.lexicalJaccard === \"number\" && obj.lexicalJaccard > 0 && obj.lexicalJaccard <= 1\n ? obj.lexicalJaccard\n : undefined,\n maxPerDay: typeof obj.maxPerDay === \"number\" && obj.maxPerDay > 0 ? Math.floor(obj.maxPerDay) : undefined,\n onDuplicate,\n boostBy: typeof obj.boostBy === \"number\" && obj.boostBy > 0 ? Math.min(1, obj.boostBy) : undefined,\n onOverflow: obj.onOverflow === \"drop\" || obj.onOverflow === \"evict-lowest-confidence\" ? obj.onOverflow : undefined,\n };\n}\n\nfunction parseSourceProfiles(raw: unknown): Record<string, StoreSourceProfile> | undefined {\n if (!raw || typeof raw !== \"object\") return undefined;\n const out: Record<string, StoreSourceProfile> = {};\n for (const [key, value] of Object.entries(raw as Record<string, unknown>)) {\n if (!key.trim()) continue;\n const parsed = parseStoreSourceProfile(value);\n if (parsed) out[key.trim()] = parsed;\n }\n return Object.keys(out).length > 0 ? out : undefined;\n}\n\nexport function parseStoreConfig(cfg: Record<string, unknown>): StoreConfig {\n const storeRaw = cfg.store as Record<string, unknown> | undefined;\n return {\n fuzzyDedupe: storeRaw?.fuzzyDedupe === true,\n classifyBeforeWrite: storeRaw?.classifyBeforeWrite === true,\n classifyModel: typeof storeRaw?.classifyModel === \"string\" ? storeRaw.classifyModel : undefined,\n sourceProfiles: parseSourceProfiles(storeRaw?.sourceProfiles),\n defaultProfile: parseStoreSourceProfile(storeRaw?.defaultProfile),\n };\n}\n\nexport function parseWALConfig(cfg: Record<string, unknown>): WALConfig {\n const walRaw = cfg.wal as Record<string, unknown> | undefined;\n return {\n enabled: walRaw?.enabled !== false,\n walPath: typeof walRaw?.walPath === \"string\" ? walRaw.walPath : undefined,\n maxAge: typeof walRaw?.maxAge === \"number\" && walRaw.maxAge > 0 ? walRaw.maxAge : 5 * 60 * 1000,\n };\n}\n\nexport function parseEventLogConfig(cfg: Record<string, unknown>): EventLogConfig {\n const eventLogRaw = cfg.eventLog as Record<string, unknown> | undefined;\n return {\n archivalDays:\n typeof eventLogRaw?.archivalDays === \"number\" && eventLogRaw.archivalDays >= 1\n ? Math.min(3650, Math.floor(eventLogRaw.archivalDays))\n : 90,\n archivePath:\n typeof eventLogRaw?.archivePath === \"string\" && eventLogRaw.archivePath.trim().length > 0\n ? eventLogRaw.archivePath.trim()\n : DEFAULT_EVENT_ARCHIVE_PATH,\n };\n}\n\nexport function parseDiagnosticsConfig(cfg: Record<string, unknown>): DiagnosticsConfig {\n const raw = cfg.diagnostics as Record<string, unknown> | undefined;\n return {\n enabled: raw?.enabled === true,\n writeArtifact: raw?.writeArtifact === true,\n cooldownSec: typeof raw?.cooldownSec === \"number\" && raw.cooldownSec >= 10 ? Math.floor(raw.cooldownSec) : 300,\n includeLinuxProcMem: raw?.includeLinuxProcMem !== false,\n fdGroupSampleLimit:\n typeof raw?.fdGroupSampleLimit === \"number\" && raw.fdGroupSampleLimit > 0\n ? Math.floor(raw.fdGroupSampleLimit)\n : 5,\n };\n}\n\nexport function parsePathConfig(cfg: Record<string, unknown>): PathConfig {\n const pathRaw = cfg.path as Record<string, unknown> | undefined;\n return {\n enabled: pathRaw?.enabled !== false,\n maxPathDepth:\n typeof pathRaw?.maxPathDepth === \"number\" && pathRaw.maxPathDepth > 0\n ? Math.min(20, Math.floor(pathRaw.maxPathDepth))\n : 10,\n };\n}\n\nexport function parseVectorConfig(cfg: Record<string, unknown>): VectorConfig {\n const vectorRaw = cfg.vector as Record<string, unknown> | undefined;\n return {\n autoRepair: vectorRaw?.autoRepair === true,\n };\n}\n\nfunction parseCredentialOptions(credRaw: Record<string, unknown> | undefined): {\n autoCapture: CredentialAutoCaptureConfig | undefined;\n autoDetect: boolean;\n expiryWarningDays: number;\n revealInContent: boolean;\n} {\n const autoCaptureRaw = credRaw?.autoCapture as Record<string, unknown> | undefined;\n const autoCapture: CredentialAutoCaptureConfig | undefined = autoCaptureRaw\n ? {\n toolCalls: autoCaptureRaw.toolCalls === true,\n patterns: \"builtin\",\n logCaptures: autoCaptureRaw.logCaptures !== false,\n requirePatternMatch: autoCaptureRaw.requirePatternMatch === true,\n }\n : undefined;\n return {\n autoCapture,\n autoDetect: credRaw?.autoDetect === true,\n expiryWarningDays:\n typeof credRaw?.expiryWarningDays === \"number\" && credRaw.expiryWarningDays >= 0\n ? Math.floor(credRaw.expiryWarningDays)\n : 7,\n revealInContent: credRaw?.revealInContent === true,\n };\n}\n\nexport function parseCredentialsConfig(cfg: Record<string, unknown>): CredentialsConfig {\n const credRaw = cfg.credentials as Record<string, unknown> | undefined;\n const explicitlyDisabled = credRaw?.enabled === false;\n const encKeyRaw = typeof credRaw?.encryptionKey === \"string\" ? credRaw.encryptionKey : \"\";\n let encryptionKey = \"\";\n if (encKeyRaw.startsWith(\"env:\")) {\n const envVar = encKeyRaw.slice(4).trim();\n const val = process.env[envVar];\n if (val && val.length >= 16) {\n encryptionKey = val;\n }\n } else if (encKeyRaw.length >= 16) {\n encryptionKey = encKeyRaw;\n }\n const hasValidKey = encryptionKey.length >= 16;\n const shouldEnable = !explicitlyDisabled && (credRaw?.enabled === true || hasValidKey);\n\n let credentials: CredentialsConfig;\n if (shouldEnable) {\n const opts = parseCredentialOptions(credRaw);\n if (!hasValidKey) {\n pluginLogger.warn(\n \"memory-hybrid: credentials vault is enabled without encryption at rest (set credentials.encryptionKey with 16+ characters, or OPENCLAW_CRED_KEY / env:VAR for a strong key). \" +\n \"Until then, stored secrets are written as plaintext in the vault database — restrict filesystem access to that path, or add a key when you are ready.\",\n );\n }\n credentials = {\n enabled: true,\n store: \"sqlite\",\n encryptionKey: \"\",\n ...opts,\n };\n } else {\n credentials = {\n enabled: false,\n store: \"sqlite\",\n encryptionKey: \"\",\n autoDetect: false,\n expiryWarningDays: 7,\n };\n }\n const resolvedKey = hasValidKey ? encryptionKey : \"\";\n Object.defineProperty(credentials, \"encryptionKey\", {\n value: resolvedKey,\n enumerable: false,\n writable: false,\n });\n return credentials;\n}\n\nexport function parseActiveTaskConfig(cfg: Record<string, unknown>): ActiveTaskConfig {\n const activeTaskRaw = cfg.activeTask as Record<string, unknown> | undefined;\n\n // Resolve staleThreshold — support both new string format and legacy staleHours number.\n // Priority: staleThreshold string > staleHours number > default \"24h\".\n let resolvedStaleThreshold = \"24h\";\n if (typeof activeTaskRaw?.staleThreshold === \"string\" && activeTaskRaw.staleThreshold.trim().length > 0) {\n try {\n parseDuration(activeTaskRaw.staleThreshold.trim());\n } catch (err: unknown) {\n throw new Error(`activeTask.staleThreshold is invalid: ${err instanceof Error ? err.message : String(err)}`);\n }\n resolvedStaleThreshold = activeTaskRaw.staleThreshold.trim();\n } else if (typeof activeTaskRaw?.staleHours === \"number\" && activeTaskRaw.staleHours > 0) {\n // Backward compat: convert legacy staleHours number → \"Xh\" string.\n const converted = `${activeTaskRaw.staleHours}h`;\n try {\n parseDuration(converted);\n } catch (err: unknown) {\n throw new Error(`activeTask.staleHours is invalid: ${err instanceof Error ? err.message : String(err)}`);\n }\n resolvedStaleThreshold = converted;\n }\n\n const staleWarningRaw = activeTaskRaw?.staleWarning as Record<string, unknown> | undefined;\n const thRaw = activeTaskRaw?.taskHygiene as Record<string, unknown> | undefined;\n const suggestDays =\n typeof thRaw?.suggestGoalAfterTaskAgeDays === \"number\" && thRaw.suggestGoalAfterTaskAgeDays >= 0\n ? Math.floor(thRaw.suggestGoalAfterTaskAgeDays)\n : 0;\n const heartbeatNudgeMaxChars =\n typeof thRaw?.heartbeatNudgeMaxChars === \"number\" && thRaw.heartbeatNudgeMaxChars >= 200\n ? Math.floor(thRaw.heartbeatNudgeMaxChars)\n : 2500;\n const lrRaw = thRaw?.longRunningRegistration as Record<string, unknown> | undefined;\n const longRunningModeRaw = typeof lrRaw?.mode === \"string\" ? lrRaw.mode.trim() : \"\";\n const longRunningMode =\n longRunningModeRaw === \"off\" ||\n longRunningModeRaw === \"suggest\" ||\n longRunningModeRaw === \"confirm\" ||\n longRunningModeRaw === \"auto_main_private\"\n ? longRunningModeRaw\n : \"suggest\";\n const ledgerRaw = activeTaskRaw?.ledger;\n const ledger = ledgerRaw === \"facts\" ? \"facts\" : \"markdown\";\n const projRaw = activeTaskRaw?.projection as Record<string, unknown> | undefined;\n const projection: ActiveTaskProjectionConfig = {\n mode: projRaw?.mode === \"full\" ? \"full\" : \"readable\",\n excludeGenericTitle: projRaw?.excludeGenericTitle !== false,\n titleMinChars:\n typeof projRaw?.titleMinChars === \"number\" && projRaw.titleMinChars > 0 ? Math.floor(projRaw.titleMinChars) : 0,\n dedupeBy: projRaw?.dedupeBy === \"label\" || projRaw?.dedupeBy === \"normalizedTitle\" ? projRaw.dedupeBy : \"none\",\n maxRowsPerSection:\n typeof projRaw?.maxRowsPerSection === \"number\" && projRaw.maxRowsPerSection > 0\n ? Math.floor(projRaw.maxRowsPerSection)\n : undefined,\n sectioned: projRaw?.sectioned !== false,\n };\n const liveStateReconcileRaw = activeTaskRaw?.liveStateReconcile as Record<string, unknown> | undefined;\n return {\n enabled: activeTaskRaw?.enabled !== false,\n ledger,\n filePath:\n typeof activeTaskRaw?.filePath === \"string\" && activeTaskRaw.filePath.trim().length > 0\n ? activeTaskRaw.filePath.trim()\n : \"ACTIVE-TASKS.md\",\n autoCheckpoint: activeTaskRaw?.autoCheckpoint !== false,\n // Positive numbers only; floor fractions. Non-positive or missing → default (align openclaw.plugin.json: integer, minimum 1).\n injectionBudget:\n typeof activeTaskRaw?.injectionBudget === \"number\" && activeTaskRaw.injectionBudget > 0\n ? Math.floor(activeTaskRaw.injectionBudget)\n : 500,\n injectionMaxTasks:\n typeof activeTaskRaw?.injectionMaxTasks === \"number\" && activeTaskRaw.injectionMaxTasks > 0\n ? Math.floor(activeTaskRaw.injectionMaxTasks)\n : undefined,\n staleThreshold: resolvedStaleThreshold,\n flushOnComplete: activeTaskRaw?.flushOnComplete !== false,\n staleWarning: {\n enabled: staleWarningRaw?.enabled !== false, // default: true\n },\n taskHygiene: {\n heartbeatEscalation: thRaw?.heartbeatEscalation !== false,\n suggestGoalAfterTaskAgeDays: suggestDays,\n heartbeatNudgeMaxChars,\n longRunningRegistration: {\n mode: longRunningMode,\n },\n },\n projection,\n liveStateReconcile: {\n enabled: liveStateReconcileRaw?.enabled === true,\n },\n };\n}\n\nexport function parseGoalStewardshipConfig(cfg: Record<string, unknown>): GoalStewardshipConfig {\n const raw = cfg.goalStewardship as Record<string, unknown> | undefined;\n const defaults = raw?.defaults as Record<string, unknown> | undefined;\n const limits = raw?.globalLimits as Record<string, unknown> | undefined;\n const goalsDir =\n typeof raw?.goalsDir === \"string\" && raw.goalsDir.trim().length > 0 ? raw.goalsDir.trim() : \"state/goals\";\n const priorityRaw = defaults?.priority;\n const priority =\n priorityRaw === \"critical\" || priorityRaw === \"high\" || priorityRaw === \"low\" || priorityRaw === \"normal\"\n ? priorityRaw\n : \"normal\";\n const patternsRaw = raw?.heartbeatPatterns;\n const heartbeatPatterns: string[] = [];\n if (Array.isArray(patternsRaw)) {\n for (const p of patternsRaw) {\n if (typeof p === \"string\" && p.trim().length > 0) heartbeatPatterns.push(p.trim());\n }\n }\n\n const aw = raw?.attentionWeights as Record<string, unknown> | undefined;\n const attentionWeights = {\n critical: typeof aw?.critical === \"number\" && aw.critical > 0 ? aw.critical : 4,\n high: typeof aw?.high === \"number\" && aw.high > 0 ? aw.high : 2,\n normal: typeof aw?.normal === \"number\" && aw.normal > 0 ? aw.normal : 1,\n low: typeof aw?.low === \"number\" && aw.low > 0 ? aw.low : 0.5,\n };\n\n const multiGoalMaxChars =\n typeof raw?.multiGoalMaxChars === \"number\" && raw.multiGoalMaxChars >= 500\n ? Math.floor(raw.multiGoalMaxChars)\n : 12_000;\n const multiGoalMaxGoals =\n typeof raw?.multiGoalMaxGoals === \"number\" && raw.multiGoalMaxGoals >= 1 ? Math.floor(raw.multiGoalMaxGoals) : 8;\n\n const confRaw = raw?.confirmationPolicy as Record<string, unknown> | undefined;\n const reqAck = confRaw?.requireRegisterAckForPriorities;\n const requireRegisterAckForPriorities: Array<\"critical\" | \"high\" | \"normal\" | \"low\"> = [];\n if (Array.isArray(reqAck)) {\n for (const pr of reqAck) {\n if (pr === \"critical\" || pr === \"high\" || pr === \"normal\" || pr === \"low\") {\n requireRegisterAckForPriorities.push(pr);\n }\n }\n }\n if (requireRegisterAckForPriorities.length === 0) {\n requireRegisterAckForPriorities.push(\"critical\", \"high\");\n }\n\n const escPolRaw = raw?.escalationPolicy as Record<string, unknown> | undefined;\n const cbRaw = raw?.circuitBreaker as Record<string, unknown> | undefined;\n const sameBlockerRepeatLimit =\n typeof cbRaw?.sameBlockerRepeatLimit === \"number\" && cbRaw.sameBlockerRepeatLimit >= 1\n ? Math.floor(cbRaw.sameBlockerRepeatLimit)\n : 0;\n const maxAssessmentsWithoutProgress =\n typeof cbRaw?.maxAssessmentsWithoutProgress === \"number\" && cbRaw.maxAssessmentsWithoutProgress >= 1\n ? Math.floor(cbRaw.maxAssessmentsWithoutProgress)\n : 0;\n\n return {\n enabled: raw?.enabled === true,\n goalsDir,\n model: typeof raw?.model === \"string\" && raw.model.trim().length > 0 ? raw.model.trim() : null,\n heartbeatStewardship: raw?.heartbeatStewardship !== false,\n watchdogHealthCheck: raw?.watchdogHealthCheck !== false,\n defaults: {\n maxDispatches:\n typeof defaults?.maxDispatches === \"number\" && defaults.maxDispatches >= 1\n ? Math.floor(defaults.maxDispatches)\n : 20,\n maxAssessments:\n typeof defaults?.maxAssessments === \"number\" && defaults.maxAssessments >= 1\n ? Math.floor(defaults.maxAssessments)\n : 50,\n cooldownMinutes:\n typeof defaults?.cooldownMinutes === \"number\" && defaults.cooldownMinutes >= 1\n ? Math.floor(defaults.cooldownMinutes)\n : 10,\n escalateAfterFailures:\n typeof defaults?.escalateAfterFailures === \"number\" && defaults.escalateAfterFailures >= 1\n ? Math.floor(defaults.escalateAfterFailures)\n : 3,\n priority,\n },\n globalLimits: {\n maxDispatchesPerHour:\n typeof limits?.maxDispatchesPerHour === \"number\" && limits.maxDispatchesPerHour >= 1\n ? Math.floor(limits.maxDispatchesPerHour)\n : 6,\n maxActiveGoals:\n typeof limits?.maxActiveGoals === \"number\" && limits.maxActiveGoals >= 1\n ? Math.floor(limits.maxActiveGoals)\n : 5,\n },\n heartbeatPatterns,\n attentionWeights,\n multiGoalMaxChars,\n multiGoalMaxGoals,\n heartbeatRefreshActiveTask: raw?.heartbeatRefreshActiveTask !== false,\n confirmationPolicy: {\n requireRegisterAckForPriorities,\n },\n llmTriageOnHeartbeat: raw?.llmTriageOnHeartbeat === true,\n triageSuggestHeavyDirective: raw?.triageSuggestHeavyDirective !== false,\n escalationPolicy: {\n taskHygieneOnBlockedGoals: escPolRaw?.taskHygieneOnBlockedGoals !== false,\n },\n circuitBreaker: {\n enabled: cbRaw?.enabled === true,\n sameBlockerRepeatLimit,\n maxAssessmentsWithoutProgress,\n composeHumanSummary: cbRaw?.composeHumanSummary !== false,\n appendMemoryEscalation: cbRaw?.appendMemoryEscalation !== false,\n },\n allowCommandVerification: raw?.allowCommandVerification === true,\n allowPrVerification: raw?.allowPrVerification === true,\n };\n}\n\nexport function parseSelfCorrectionConfig(cfg: Record<string, unknown>): SelfCorrectionConfig | undefined {\n const scRaw = cfg.selfCorrection as Record<string, unknown> | undefined;\n if (!scRaw || typeof scRaw !== \"object\") return undefined;\n if (scRaw.enabled === false) return undefined;\n return {\n semanticDedup: scRaw.semanticDedup !== false,\n semanticDedupThreshold:\n typeof scRaw.semanticDedupThreshold === \"number\" &&\n scRaw.semanticDedupThreshold >= 0 &&\n scRaw.semanticDedupThreshold <= 1\n ? scRaw.semanticDedupThreshold\n : 0.92,\n toolsSection:\n typeof scRaw.toolsSection === \"string\" && scRaw.toolsSection.trim().length > 0\n ? scRaw.toolsSection.trim()\n : \"Self-correction rules\",\n applyToolsByDefault: scRaw.applyToolsByDefault !== false,\n autoRewriteTools: scRaw.autoRewriteTools === true,\n analyzeViaSpawn: scRaw.analyzeViaSpawn === true,\n spawnThreshold:\n typeof scRaw.spawnThreshold === \"number\" && scRaw.spawnThreshold >= 1 ? Math.floor(scRaw.spawnThreshold) : 15,\n spawnModel: typeof scRaw.spawnModel === \"string\" ? scRaw.spawnModel : \"\",\n positiveRulesSection:\n typeof scRaw.positiveRulesSection === \"string\" && scRaw.positiveRulesSection.trim().length > 0\n ? scRaw.positiveRulesSection.trim()\n : \"Positive Reinforcement Rules\",\n reinforcementLLMAnalysis: scRaw.reinforcementLLMAnalysis !== false,\n reinforcementToProposals: scRaw.reinforcementToProposals !== false,\n agentsRuleToProposals: scRaw.agentsRuleToProposals !== false,\n };\n}\n\n/** Returns true when the key looks like a placeholder rather than a real credential. */\nfunction isPlaceholderApiKey(key: string): boolean {\n if (key.length < 10) return true;\n return (\n /YOUR_.*_HERE|REPLACE_ME|INSERT_.*_HERE|<.*API.*KEY.*>|^x+$|^sk-x+$|^placeholder$/i.test(key) ||\n // Also reject values that are entirely repeated single characters (e.g. \"aaaaaaaaaa\", \"1111111111\")\n // but NOT all-lowercase/uppercase alphanumeric real keys.\n /^(.)\\1{9,}$/.test(key)\n );\n}\n\n/**\n * Parse auth.order config for OAuth-first LLM provider authentication (issue #311).\n * Returns undefined when no valid auth order is configured.\n */\nexport function parseAuthConfig(cfg: Record<string, unknown>): AuthOrderConfig | undefined {\n const authRaw = cfg.auth as Record<string, unknown> | undefined;\n if (!authRaw || typeof authRaw !== \"object\" || Array.isArray(authRaw)) return undefined;\n const orderRaw = authRaw.order;\n if (!orderRaw || typeof orderRaw !== \"object\" || Array.isArray(orderRaw)) return undefined;\n const order: Record<string, string[]> = {};\n for (const [provider, profiles] of Object.entries(orderRaw as Record<string, unknown>)) {\n const trimmedProvider = provider.trim();\n if (trimmedProvider.length === 0) continue;\n if (!Array.isArray(profiles)) continue;\n const validProfiles = profiles\n .filter((p): p is string => typeof p === \"string\" && p.trim().length > 0)\n .map((p) => p.trim().toLowerCase());\n if (validProfiles.length > 0) {\n order[trimmedProvider.toLowerCase()] = validProfiles;\n }\n }\n if (Object.keys(order).length === 0) return undefined;\n const preferOAuthWhenBoth = authRaw.preferOAuthWhenBoth !== false;\n const backoffScheduleRaw = authRaw.backoffScheduleMinutes;\n const backoffScheduleMinutes =\n Array.isArray(backoffScheduleRaw) && backoffScheduleRaw.length > 0\n ? (backoffScheduleRaw as number[]).filter((n) => typeof n === \"number\" && n > 0)\n : undefined;\n const resetHoursRaw = authRaw.resetBackoffAfterHours;\n const resetBackoffAfterHours =\n typeof resetHoursRaw === \"number\" && resetHoursRaw > 0 ? Math.min(168, resetHoursRaw) : undefined;\n return {\n order,\n preferOAuthWhenBoth,\n ...(backoffScheduleMinutes && backoffScheduleMinutes.length > 0 ? { backoffScheduleMinutes } : {}),\n ...(resetBackoffAfterHours != null ? { resetBackoffAfterHours } : {}),\n };\n}\n\nexport function parseLLMConfig(cfg: Record<string, unknown>): LLMConfig | undefined {\n const llmRaw = cfg.llm as Record<string, unknown> | undefined;\n const maintenanceList =\n llmRaw && Array.isArray(llmRaw.maintenance)\n ? (llmRaw.maintenance as string[]).filter((m) => typeof m === \"string\" && m.trim().length > 0)\n : [];\n const defaultList =\n llmRaw && Array.isArray(llmRaw.default)\n ? (llmRaw.default as string[]).filter((m) => typeof m === \"string\" && m.trim().length > 0)\n : [];\n const heavyList =\n llmRaw && Array.isArray(llmRaw.heavy)\n ? (llmRaw.heavy as string[]).filter((m) => typeof m === \"string\" && m.trim().length > 0)\n : [];\n const llmProvidersRaw = llmRaw?.providers;\n const llmProviders: Record<string, LLMProviderConfig | undefined> | undefined =\n llmProvidersRaw && typeof llmProvidersRaw === \"object\" && !Array.isArray(llmProvidersRaw)\n ? Object.fromEntries(\n Object.entries(llmProvidersRaw as Record<string, unknown>).map(([k, v]) => {\n if (!v || typeof v !== \"object\" || Array.isArray(v)) return [k, undefined];\n const pv = v as Record<string, unknown>;\n const rawKey = typeof pv.apiKey === \"string\" && pv.apiKey.trim().length > 0 ? pv.apiKey.trim() : undefined;\n const validKey = rawKey && !isPlaceholderApiKey(rawKey) ? rawKey : undefined;\n if (rawKey && !validKey) {\n pluginLogger.warn(\n `memory-hybrid: Provider '${k}' has an invalid API key (looks like a placeholder) — skipping`,\n );\n }\n // Accept both camelCase `baseUrl` (OpenClaw convention) and kebab-case `baseURL`.\n // OpenClaw `openclaw.json` uses `baseUrl` under `models.providers.*`.\n const baseURLRaw =\n (typeof pv.baseURL === \"string\" && pv.baseURL.trim().length > 0 ? pv.baseURL.trim() : undefined) ??\n (typeof pv.baseUrl === \"string\" && pv.baseUrl.trim().length > 0 ? pv.baseUrl.trim() : undefined);\n return [\n k.toLowerCase(),\n {\n apiKey: validKey,\n baseURL: baseURLRaw,\n } as LLMProviderConfig,\n ];\n }),\n )\n : undefined;\n const nanoList =\n llmRaw && Array.isArray(llmRaw.nano)\n ? (llmRaw.nano as string[]).filter((m) => typeof m === \"string\" && m.trim().length > 0)\n : [];\n const localAutoStart = llmRaw?.localAutoStart === true;\n const disabledProvidersRaw = llmRaw?.disabledProviders;\n const disabledProviders: string[] =\n Array.isArray(disabledProvidersRaw) && disabledProvidersRaw.length > 0\n ? disabledProvidersRaw\n .filter((p): p is string => typeof p === \"string\" && p.trim().length > 0)\n .map((p) => p.trim().toLowerCase())\n : [];\n const maintenanceFallbackPolicyRaw = llmRaw?.maintenanceFallbackPolicy;\n const maintenanceFallbackPolicy = normalizeMaintenanceFallbackPolicy(maintenanceFallbackPolicyRaw);\n if (\n maintenanceFallbackPolicyRaw !== undefined &&\n maintenanceFallbackPolicyRaw !== null &&\n typeof maintenanceFallbackPolicyRaw === \"string\" &&\n maintenanceFallbackPolicy === undefined\n ) {\n pluginLogger.warn(\n `memory-hybrid: invalid llm.maintenanceFallbackPolicy ${JSON.stringify(maintenanceFallbackPolicyRaw)} — ignoring`,\n );\n }\n const llm: LLMConfig | undefined =\n maintenanceList.length > 0 ||\n defaultList.length > 0 ||\n heavyList.length > 0 ||\n nanoList.length > 0 ||\n llmProviders !== undefined ||\n localAutoStart ||\n disabledProviders.length > 0 ||\n maintenanceFallbackPolicy !== undefined\n ? {\n ...(maintenanceList.length > 0 ? { maintenance: maintenanceList } : {}),\n default: defaultList,\n heavy: heavyList,\n ...(nanoList.length > 0 ? { nano: nanoList } : {}),\n fallbackToDefault: llmRaw?.fallbackToDefault === true,\n fallbackModel:\n typeof llmRaw?.fallbackModel === \"string\" && (llmRaw.fallbackModel as string).trim().length > 0\n ? (llmRaw.fallbackModel as string).trim()\n : undefined,\n providers: llmProviders,\n localAutoStart,\n ...(disabledProviders.length > 0 ? { disabledProviders } : {}),\n ...(maintenanceFallbackPolicy !== undefined ? { maintenanceFallbackPolicy } : {}),\n }\n : undefined;\n return llm;\n}\n\n/**\n * Resolve a SecretRef string to its actual value.\n *\n * Supported formats:\n * \"env:VAR_NAME\" — read from process.env[VAR_NAME]\n * \"file:/path\" — read from a file, whitespace-trimmed\n * \"${VAR}\" — template syntax resolved via resolveEnvVars\n * plain string — returned as-is\n *\n * Returns undefined when the SecretRef cannot be resolved (env var unset,\n * file missing, or value is empty after trimming).\n */\nexport function resolveSecretRef(value: string): string | undefined {\n if (!value?.trim()) return undefined;\n const v = value.trim();\n if (v.startsWith(\"env:\")) {\n const varName = v.slice(4).trim();\n if (!varName) return undefined;\n return normalizeResolvedSecretValue(process.env[varName]);\n }\n if (v.startsWith(\"file:\")) {\n const filePath = v.slice(5).trim();\n if (!filePath) return undefined;\n try {\n const contents = readFileSync(filePath, \"utf-8\").trim();\n return contents || undefined;\n } catch {\n return undefined;\n }\n }\n // Handle ${VAR} template syntax (issues #6, #12).\n // resolveEnvVars throws when any referenced variable is unset or empty, so catch → undefined.\n // No post-resolution guard needed: if resolveEnvVars succeeds, all placeholders were expanded.\n // Any ${...} remaining in `resolved` came from the env var's own value and is legitimate.\n if (v.includes(\"${\")) {\n try {\n const resolved = resolveEnvVars(v);\n return resolved?.trim() ? resolved.trim() : undefined;\n } catch {\n return undefined;\n }\n }\n return v;\n}\n\n/** Matches OpenClaw `isSecretRef` / SecretRef object shape (openclaw/plugin-sdk config types). */\nfunction isOpenClawSecretRefObject(\n raw: unknown,\n): raw is { source: \"env\" | \"file\" | \"exec\"; provider: string; id: string } {\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) return false;\n if (Object.keys(raw as object).length !== 3) return false;\n const o = raw as Record<string, unknown>;\n return (\n (o.source === \"env\" || o.source === \"file\" || o.source === \"exec\") &&\n typeof o.provider === \"string\" &&\n o.provider.trim().length > 0 &&\n typeof o.id === \"string\" &&\n o.id.trim().length > 0\n );\n}\n\n/**\n * Resolve `embedding.apiKey` from either a string (env:/file:/templates) or an OpenClaw SecretRef object (Issue #833).\n * `source: \"exec\"` refs are only available when the host resolves secrets; unresolved here → undefined.\n */\nexport function resolveEmbeddingApiKeyInput(raw: unknown): string | undefined {\n if (raw === undefined || raw === null) return undefined;\n if (typeof raw === \"string\") return resolveSecretRef(raw);\n if (!isOpenClawSecretRefObject(raw)) return undefined;\n const ref = raw;\n if (ref.source === \"env\") {\n return normalizeResolvedSecretValue(process.env[ref.id]);\n }\n if (ref.source === \"file\") {\n if (ref.id.startsWith(\"/\") || ref.id.startsWith(\"./\")) {\n try {\n const contents = readFileSync(ref.id, \"utf-8\").trim();\n return contents || undefined;\n } catch {\n return undefined;\n }\n }\n return undefined;\n }\n return undefined;\n}\n\nexport function isEmbeddingApiKeyExecSecretRef(raw: unknown): boolean {\n return isOpenClawSecretRefObject(raw) && raw.source === \"exec\";\n}\n\n/**\n * Parse gateway config from raw plugin config.\n * The resolved token is stored as a non-enumerable property so it is not\n * visible in JSON.stringify / config dumps, while callers can still access it.\n */\nexport function parseGatewayConfig(cfg: Record<string, unknown>): GatewayConfig | undefined {\n const gwRaw = cfg.gateway as Record<string, unknown> | undefined;\n if (!gwRaw || typeof gwRaw !== \"object\") return undefined;\n const authRaw = gwRaw.auth as Record<string, unknown> | undefined;\n if (!authRaw || typeof authRaw !== \"object\") return undefined;\n const tokenRaw = typeof authRaw.token === \"string\" ? authRaw.token.trim() : undefined;\n if (!tokenRaw) return undefined;\n\n const resolvedToken = resolveSecretRef(tokenRaw);\n const auth: ResolvedGatewayAuthConfig = {\n token: tokenRaw, // keep SecretRef string for config display; NOT the resolved value\n };\n // Store resolved token as non-enumerable so it never leaks into JSON dumps or logs\n Object.defineProperty(auth, \"_resolvedToken\", {\n value: resolvedToken,\n enumerable: false,\n writable: false,\n });\n return { auth };\n}\n"],"mappings":"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"}
|