@agenr/openclaw-plugin 0.13.4 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,24 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.14.0] - 2026-03-24
4
+
5
+ ### Surgeon — Budget Model Overhaul
6
+
7
+ - **`--budget` now means dollars, not tokens.** The cumulative token budget that double-counted context re-sends across turns is gone. The surgeon is now constrained by two things: cost (dollars) and context window (tokens). Config `surgeon.budget` is dollars per run. Default: $5.
8
+ - **Context-aware limits.** New `surgeon.contextLimit` config field and `--context-limit` CLI flag. Auto-detects from `model.contextWindow * 0.85` if not set. The surgeon stops when context is full, not from artificial token counting.
9
+ - **`costCap` removed.** Replaced by `budget`. Old `costCap` values are accepted as backward-compatible alias with deprecation warning.
10
+
11
+ ### Surgeon — Contradiction Improvements
12
+
13
+ - **`coexists` relation for `log_conflict`.** The surgeon can now log reviewed false-positive pairs as coexisting rather than forcing them into `contradicts` or `supersedes`. Coexists conflicts are auto-resolved as `keep-both` so they don't accumulate as pending conflicts and future scans skip them.
14
+ - **Improved contradiction candidate filtering.** Suppresses historical series pairs (release versions, prompt paths, roadmap snapshots) from claim divergence scanning. Prioritizes `current_state` claim divergence pairs.
15
+
16
+ ### Surgeon — Retirement Candidate Scoping
17
+
18
+ - **Scoped candidate queries.** `query_candidates` now accepts `scope` parameter: `actionable` (default) filters to entries with high retirement probability — temporary, ephemeral, todos, low-importance events, mislabeled temporal artifacts. `all` shows the full candidate pool for deep sweeps.
19
+ - **Improved candidate ordering.** Actionable scope returns temporary entries first, then ephemeral, then todos, then low-importance events. Durable permanent decisions and preferences are excluded from the default scope.
20
+ - **Two-phase retirement in auto mode.** Surgeon starts with actionable candidates, widens to full pool only if budget remains after exhausting the actionable set.
21
+
3
22
  ## [0.13.4] - 2026-03-23
4
23
 
5
24
  ### Surgeon
package/dist/index.js CHANGED
@@ -3894,7 +3894,7 @@ function isAgenrAuthMethod(value) {
3894
3894
  function resolveDefaultKnowledgeDbPath() {
3895
3895
  return path3.join(os3.homedir(), ".agenr", "knowledge.db");
3896
3896
  }
3897
- var SCORING_SET_KEYS, AUTH_METHOD_DEFINITIONS, AUTH_METHOD_SET, MODEL_TASK_KEYS, DEFAULT_EMBEDDING_PROVIDER, DEFAULT_EMBEDDING_MODEL, DEFAULT_EMBEDDING_DIMENSIONS, DEFAULT_FORGETTING_SCORE_THRESHOLD, DEFAULT_FORGETTING_MAX_AGE_DAYS, DEFAULT_FORGETTING_LOW_SCORE_TRIGGER_COUNT, DEFAULT_SCORING_FTS_BOOST, DEFAULT_SCORING_VECTOR_EXPONENT, DEFAULT_SCORING_IMPORTANCE_FLOOR, DEFAULT_SCORING_FRESHNESS_HIGH_HOURS, DEFAULT_SCORING_FRESHNESS_MEDIUM_HOURS, DEFAULT_SCORING_FRESHNESS_LOW_HOURS, DEFAULT_SCORING_RECENCY_HALFLIFE_PERMANENT, DEFAULT_SCORING_RECENCY_HALFLIFE_TEMPORARY, DEFAULT_SCORING_FRESHNESS_MIN_IMPORTANCE, DEFAULT_SCORING_CONTRADICTION_PENALTY, DEFAULT_SCORING_QUALITY_MIN, DEFAULT_SCORING_QUALITY_MAX, DEFAULT_SCORING_IMPORTANCE_BLEND, DEFAULT_SCORING_RECALL_BLEND, DEFAULT_SCORING_TODO_HALFLIFE_DAYS, DEFAULT_SCORING_TODO_FLOOR_HIGH, DEFAULT_SCORING_TODO_FLOOR_LOW, DEFAULT_CONTRADICTION_ENABLED, DEFAULT_TASK_MODEL, DEFAULT_SURGEON_MODEL, DEFAULT_AUTO_SUPERSEDE_CONFIDENCE, DEFAULT_CONTRADICTION_BLOCKING_THRESHOLD, DEFAULT_CLAIM_EXTRACTION_BATCH_SIZE, MAX_CLAIM_EXTRACTION_BATCH_SIZE, DEFAULT_CLAIM_EXTRACTION_CONCURRENCY, MAX_CLAIM_EXTRACTION_CONCURRENCY, DEFAULT_SURGEON_BUDGET, DEFAULT_SURGEON_COST_CAP, DEFAULT_SURGEON_DAILY_COST_CAP, DEFAULT_SURGEON_RETIREMENT_PROTECT_RECALLED_DAYS, DEFAULT_SURGEON_RETIREMENT_PROTECT_MIN_IMPORTANCE, DEFAULT_SURGEON_RETIREMENT_MAX_ACTIONS_PER_RUN, DEFAULT_SURGEON_SKIP_RECENTLY_EVALUATED_DAYS, DEFAULT_SURGEON_DEDUP_MAX_MERGES_PER_RUN, DEFAULT_SURGEON_CONTRADICTIONS_MAX_ACTIONS_PER_RUN;
3897
+ var SCORING_SET_KEYS, AUTH_METHOD_DEFINITIONS, AUTH_METHOD_SET, MODEL_TASK_KEYS, DEFAULT_EMBEDDING_PROVIDER, DEFAULT_EMBEDDING_MODEL, DEFAULT_EMBEDDING_DIMENSIONS, DEFAULT_FORGETTING_SCORE_THRESHOLD, DEFAULT_FORGETTING_MAX_AGE_DAYS, DEFAULT_FORGETTING_LOW_SCORE_TRIGGER_COUNT, DEFAULT_SCORING_FTS_BOOST, DEFAULT_SCORING_VECTOR_EXPONENT, DEFAULT_SCORING_IMPORTANCE_FLOOR, DEFAULT_SCORING_FRESHNESS_HIGH_HOURS, DEFAULT_SCORING_FRESHNESS_MEDIUM_HOURS, DEFAULT_SCORING_FRESHNESS_LOW_HOURS, DEFAULT_SCORING_RECENCY_HALFLIFE_PERMANENT, DEFAULT_SCORING_RECENCY_HALFLIFE_TEMPORARY, DEFAULT_SCORING_FRESHNESS_MIN_IMPORTANCE, DEFAULT_SCORING_CONTRADICTION_PENALTY, DEFAULT_SCORING_QUALITY_MIN, DEFAULT_SCORING_QUALITY_MAX, DEFAULT_SCORING_IMPORTANCE_BLEND, DEFAULT_SCORING_RECALL_BLEND, DEFAULT_SCORING_TODO_HALFLIFE_DAYS, DEFAULT_SCORING_TODO_FLOOR_HIGH, DEFAULT_SCORING_TODO_FLOOR_LOW, DEFAULT_CONTRADICTION_ENABLED, DEFAULT_TASK_MODEL, DEFAULT_SURGEON_MODEL, DEFAULT_AUTO_SUPERSEDE_CONFIDENCE, DEFAULT_CONTRADICTION_BLOCKING_THRESHOLD, DEFAULT_CLAIM_EXTRACTION_BATCH_SIZE, MAX_CLAIM_EXTRACTION_BATCH_SIZE, DEFAULT_CLAIM_EXTRACTION_CONCURRENCY, MAX_CLAIM_EXTRACTION_CONCURRENCY, DEFAULT_SURGEON_CONTEXT_LIMIT, DEFAULT_SURGEON_COST_CAP, DEFAULT_SURGEON_DAILY_COST_CAP, DEFAULT_SURGEON_RETIREMENT_PROTECT_RECALLED_DAYS, DEFAULT_SURGEON_RETIREMENT_PROTECT_MIN_IMPORTANCE, DEFAULT_SURGEON_RETIREMENT_MAX_ACTIONS_PER_RUN, DEFAULT_SURGEON_SKIP_RECENTLY_EVALUATED_DAYS, DEFAULT_SURGEON_DEDUP_MAX_MERGES_PER_RUN, DEFAULT_SURGEON_CONTRADICTIONS_MAX_ACTIONS_PER_RUN;
3898
3898
  var init_schema2 = __esm({
3899
3899
  "src/shared/infrastructure/config/schema.ts"() {
3900
3900
  "use strict";
@@ -3993,7 +3993,7 @@ var init_schema2 = __esm({
3993
3993
  MAX_CLAIM_EXTRACTION_BATCH_SIZE = 25;
3994
3994
  DEFAULT_CLAIM_EXTRACTION_CONCURRENCY = 5;
3995
3995
  MAX_CLAIM_EXTRACTION_CONCURRENCY = 50;
3996
- DEFAULT_SURGEON_BUDGET = 2e5;
3996
+ DEFAULT_SURGEON_CONTEXT_LIMIT = null;
3997
3997
  DEFAULT_SURGEON_COST_CAP = 5;
3998
3998
  DEFAULT_SURGEON_DAILY_COST_CAP = 15;
3999
3999
  DEFAULT_SURGEON_RETIREMENT_PROTECT_RECALLED_DAYS = 14;
@@ -4650,7 +4650,7 @@ function normalizeContradictionConfig(input) {
4650
4650
  }
4651
4651
  function normalizeSurgeonConfig(input) {
4652
4652
  const normalized = {
4653
- budget: DEFAULT_SURGEON_BUDGET,
4653
+ contextLimit: DEFAULT_SURGEON_CONTEXT_LIMIT,
4654
4654
  costCap: DEFAULT_SURGEON_COST_CAP,
4655
4655
  dailyCostCap: DEFAULT_SURGEON_DAILY_COST_CAP,
4656
4656
  passes: {
@@ -4676,8 +4676,12 @@ function normalizeSurgeonConfig(input) {
4676
4676
  if (typeof record.model === "string" && record.model.trim()) {
4677
4677
  normalized.model = record.model.trim();
4678
4678
  }
4679
- if (typeof record.budget === "number" && Number.isFinite(record.budget) && record.budget > 0) {
4680
- normalized.budget = Math.floor(record.budget);
4679
+ if (typeof record.contextLimit === "number" && Number.isFinite(record.contextLimit) && record.contextLimit > 0) {
4680
+ normalized.contextLimit = Math.floor(record.contextLimit);
4681
+ } else if (record.contextLimit === null) {
4682
+ normalized.contextLimit = null;
4683
+ } else if (typeof record.budget === "number" && Number.isFinite(record.budget) && record.budget > 0) {
4684
+ normalized.contextLimit = Math.floor(record.budget);
4681
4685
  }
4682
4686
  if (typeof record.costCap === "number" && Number.isFinite(record.costCap) && record.costCap > 0) {
4683
4687
  normalized.costCap = record.costCap;
@@ -5407,6 +5411,7 @@ __export(config_exports, {
5407
5411
  AUTH_METHOD_DEFINITIONS: () => AUTH_METHOD_DEFINITIONS,
5408
5412
  DEFAULT_CLAIM_EXTRACTION_BATCH_SIZE: () => DEFAULT_CLAIM_EXTRACTION_BATCH_SIZE,
5409
5413
  DEFAULT_CLAIM_EXTRACTION_CONCURRENCY: () => DEFAULT_CLAIM_EXTRACTION_CONCURRENCY,
5414
+ DEFAULT_SURGEON_CONTEXT_LIMIT: () => DEFAULT_SURGEON_CONTEXT_LIMIT,
5410
5415
  DEFAULT_SURGEON_MODEL: () => DEFAULT_SURGEON_MODEL,
5411
5416
  DEFAULT_SURGEON_SKIP_RECENTLY_EVALUATED_DAYS: () => DEFAULT_SURGEON_SKIP_RECENTLY_EVALUATED_DAYS,
5412
5417
  DEFAULT_TASK_MODEL: () => DEFAULT_TASK_MODEL,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agenr/openclaw-plugin",
3
- "version": "0.13.4",
3
+ "version": "0.14.0",
4
4
  "description": "agenr memory plugin for OpenClaw — lightweight plugin-only package without the CLI",
5
5
  "license": "AGPL-3.0",
6
6
  "author": "agenr-ai",