@remnic/plugin-openclaw 1.0.5 → 1.0.7
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/README.md +36 -0
- package/dist/{calibration-3JHF25QT.js → calibration-BAC7KNKR.js} +2 -1
- package/dist/{causal-consolidation-Z3PHIFTL.js → causal-consolidation-S6M7UTZG.js} +4 -3
- package/dist/{causal-retrieval-5UPIKZ4I.js → causal-retrieval-3BKBXVXD.js} +1 -1
- package/dist/chunk-3A5ELHTT.js +61 -0
- package/dist/chunk-DIZW6H5J.js +136 -0
- package/dist/{chunk-5VTGFKKU.js → chunk-KPMXWORS.js} +17 -0
- package/dist/{chunk-RMFPW4VK.js → chunk-LN5UZQVG.js} +10 -0
- package/dist/{chunk-3SA5F4WT.js → chunk-NXLHSCLU.js} +125 -69
- package/dist/{chunk-J2FCINY7.js → chunk-QHMR3D7U.js} +1 -1
- package/dist/{chunk-Y65XJVI3.js → chunk-SVGN3ACY.js} +3 -3
- package/dist/contradiction-review-SVGBS3V5.js +21 -0
- package/dist/contradiction-scan-LRRLWUOS.js +376 -0
- package/dist/{engine-2TLD4YSC.js → engine-WGNTTFYE.js} +2 -2
- package/dist/{fallback-llm-HJRCHKSA.js → fallback-llm-QEAPMDW7.js} +2 -1
- package/dist/index.js +2439 -591
- package/dist/resolution-YITUVUTH.js +100 -0
- package/dist/{storage-HW6SRQCK.js → storage-BA6OBLMK.js} +1 -1
- package/openclaw.plugin.json +194 -4
- package/package.json +3 -2
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import {
|
|
2
|
+
readPair,
|
|
3
|
+
resolvePair
|
|
4
|
+
} from "./chunk-DIZW6H5J.js";
|
|
5
|
+
import {
|
|
6
|
+
log
|
|
7
|
+
} from "./chunk-UFU5GGGA.js";
|
|
8
|
+
import "./chunk-MLKGABMK.js";
|
|
9
|
+
|
|
10
|
+
// ../remnic-core/src/contradiction/resolution.ts
|
|
11
|
+
var VALID_VERBS = ["keep-a", "keep-b", "merge", "both-valid", "needs-more-context"];
|
|
12
|
+
function isValidResolutionVerb(value) {
|
|
13
|
+
return VALID_VERBS.includes(value);
|
|
14
|
+
}
|
|
15
|
+
async function executeResolution(memoryDir, storage, pairId, verb) {
|
|
16
|
+
const pair = readPair(memoryDir, pairId);
|
|
17
|
+
if (!pair) {
|
|
18
|
+
return { pairId, verb, affectedIds: [], message: `Pair ${pairId} not found` };
|
|
19
|
+
}
|
|
20
|
+
if (pair.resolution) {
|
|
21
|
+
return { pairId, verb, affectedIds: [], message: `Pair already resolved with verb "${pair.resolution}"` };
|
|
22
|
+
}
|
|
23
|
+
const [idA, idB] = pair.memoryIds;
|
|
24
|
+
const affectedIds = [];
|
|
25
|
+
let message = "";
|
|
26
|
+
let supersedeFailed = false;
|
|
27
|
+
switch (verb) {
|
|
28
|
+
case "keep-a": {
|
|
29
|
+
const ok = await supersedeSafe(storage, idB, idA, "contradiction-resolution:keep-a");
|
|
30
|
+
if (ok) {
|
|
31
|
+
affectedIds.push(idB);
|
|
32
|
+
message = `Kept ${idA}, superseded ${idB}`;
|
|
33
|
+
} else {
|
|
34
|
+
supersedeFailed = true;
|
|
35
|
+
message = `Supersede failed for ${idB}; not resolving`;
|
|
36
|
+
}
|
|
37
|
+
break;
|
|
38
|
+
}
|
|
39
|
+
case "keep-b": {
|
|
40
|
+
const ok = await supersedeSafe(storage, idA, idB, "contradiction-resolution:keep-b");
|
|
41
|
+
if (ok) {
|
|
42
|
+
affectedIds.push(idA);
|
|
43
|
+
message = `Kept ${idB}, superseded ${idA}`;
|
|
44
|
+
} else {
|
|
45
|
+
supersedeFailed = true;
|
|
46
|
+
message = `Supersede failed for ${idA}; not resolving`;
|
|
47
|
+
}
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
50
|
+
case "merge": {
|
|
51
|
+
const mergedId = `merged-${pairId}`;
|
|
52
|
+
const okA = await supersedeSafe(storage, idA, mergedId, "contradiction-resolution:merge");
|
|
53
|
+
const okB = await supersedeSafe(storage, idB, mergedId, "contradiction-resolution:merge");
|
|
54
|
+
if (okA) affectedIds.push(idA);
|
|
55
|
+
if (okB) affectedIds.push(idB);
|
|
56
|
+
if (!okA || !okB) {
|
|
57
|
+
supersedeFailed = true;
|
|
58
|
+
message = `Merge incomplete: ${affectedIds.length}/2 superseded; not resolving to allow retry`;
|
|
59
|
+
} else {
|
|
60
|
+
message = `Both memories superseded by merged ${mergedId}`;
|
|
61
|
+
}
|
|
62
|
+
break;
|
|
63
|
+
}
|
|
64
|
+
case "both-valid": {
|
|
65
|
+
message = "Pair marked as both-valid; cooldown applied";
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
case "needs-more-context": {
|
|
69
|
+
message = "Deferred; no action taken, short cooldown applied";
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (!supersedeFailed) {
|
|
74
|
+
resolvePair(memoryDir, pairId, verb);
|
|
75
|
+
}
|
|
76
|
+
log.info("[contradiction-resolution] pair=%s verb=%s affected=%d", pairId, verb, affectedIds.length);
|
|
77
|
+
return { pairId, verb, affectedIds, message };
|
|
78
|
+
}
|
|
79
|
+
async function supersedeSafe(storage, oldId, newId, reason) {
|
|
80
|
+
try {
|
|
81
|
+
const result = await storage.supersedeMemory(oldId, newId, reason);
|
|
82
|
+
if (result === false) {
|
|
83
|
+
log.warn("[contradiction-resolution] supersede returned false for %s \u2192 %s", oldId, newId);
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
return true;
|
|
87
|
+
} catch (err) {
|
|
88
|
+
log.warn(
|
|
89
|
+
"[contradiction-resolution] supersede failed %s \u2192 %s: %s",
|
|
90
|
+
oldId,
|
|
91
|
+
newId,
|
|
92
|
+
err instanceof Error ? err.message : err
|
|
93
|
+
);
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
export {
|
|
98
|
+
executeResolution,
|
|
99
|
+
isValidResolutionVerb
|
|
100
|
+
};
|
package/openclaw.plugin.json
CHANGED
|
@@ -318,6 +318,63 @@
|
|
|
318
318
|
}
|
|
319
319
|
}
|
|
320
320
|
},
|
|
321
|
+
"procedural": {
|
|
322
|
+
"type": "object",
|
|
323
|
+
"additionalProperties": false,
|
|
324
|
+
"default": {},
|
|
325
|
+
"properties": {
|
|
326
|
+
"enabled": {
|
|
327
|
+
"type": "boolean",
|
|
328
|
+
"default": false,
|
|
329
|
+
"description": "Master gate for procedural memory: extraction, recall boost, and mining (issue #519)."
|
|
330
|
+
},
|
|
331
|
+
"minOccurrences": {
|
|
332
|
+
"type": "integer",
|
|
333
|
+
"minimum": 0,
|
|
334
|
+
"maximum": 1000,
|
|
335
|
+
"default": 3,
|
|
336
|
+
"description": "Minimum clustered trajectory occurrences before emitting a candidate procedure (0 disables mining)."
|
|
337
|
+
},
|
|
338
|
+
"successFloor": {
|
|
339
|
+
"type": "number",
|
|
340
|
+
"minimum": 0,
|
|
341
|
+
"maximum": 1,
|
|
342
|
+
"default": 0.7,
|
|
343
|
+
"description": "Minimum success-rate floor (from trajectory outcomes) for miner promotion."
|
|
344
|
+
},
|
|
345
|
+
"autoPromoteOccurrences": {
|
|
346
|
+
"type": "integer",
|
|
347
|
+
"minimum": 0,
|
|
348
|
+
"maximum": 10000,
|
|
349
|
+
"default": 8,
|
|
350
|
+
"description": "When auto-promotion is enabled, minimum occurrence count to move pending_review procedures to active (0 disables auto-promotion by count)."
|
|
351
|
+
},
|
|
352
|
+
"autoPromoteEnabled": {
|
|
353
|
+
"type": "boolean",
|
|
354
|
+
"default": false,
|
|
355
|
+
"description": "When true, miner may auto-promote trusted procedures to active after autoPromoteOccurrences."
|
|
356
|
+
},
|
|
357
|
+
"lookbackDays": {
|
|
358
|
+
"type": "integer",
|
|
359
|
+
"minimum": 1,
|
|
360
|
+
"maximum": 3650,
|
|
361
|
+
"default": 30,
|
|
362
|
+
"description": "Trajectory lookback window for procedural mining."
|
|
363
|
+
},
|
|
364
|
+
"recallMaxProcedures": {
|
|
365
|
+
"type": "integer",
|
|
366
|
+
"minimum": 1,
|
|
367
|
+
"maximum": 10,
|
|
368
|
+
"default": 3,
|
|
369
|
+
"description": "Maximum procedure memories to inject on task-initiation recall."
|
|
370
|
+
},
|
|
371
|
+
"proceduralMiningCronAutoRegister": {
|
|
372
|
+
"type": "boolean",
|
|
373
|
+
"default": false,
|
|
374
|
+
"description": "When true, installer may register the nightly procedural mining cron job."
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
},
|
|
321
378
|
"slotBehavior": {
|
|
322
379
|
"type": "object",
|
|
323
380
|
"additionalProperties": false,
|
|
@@ -1295,7 +1352,8 @@
|
|
|
1295
1352
|
"principle",
|
|
1296
1353
|
"commitment",
|
|
1297
1354
|
"moment",
|
|
1298
|
-
"skill"
|
|
1355
|
+
"skill",
|
|
1356
|
+
"procedure"
|
|
1299
1357
|
]
|
|
1300
1358
|
},
|
|
1301
1359
|
"default": [
|
|
@@ -1860,6 +1918,18 @@
|
|
|
1860
1918
|
"default": true,
|
|
1861
1919
|
"description": "Automatically supersede contradicted memories"
|
|
1862
1920
|
},
|
|
1921
|
+
"contradictionScan": {
|
|
1922
|
+
"type": "object",
|
|
1923
|
+
"description": "Configuration for the nightly contradiction-scan cron (issue #520)",
|
|
1924
|
+
"properties": {
|
|
1925
|
+
"enabled": { "type": "boolean", "default": false, "description": "Enable the nightly contradiction scan cron (disabled by default per rule 48)" },
|
|
1926
|
+
"similarityFloor": { "type": "number", "default": 0.82, "minimum": 0, "maximum": 1, "description": "Embedding cosine similarity floor for candidate pair generation" },
|
|
1927
|
+
"topicOverlapFloor": { "type": "number", "default": 0.4, "minimum": 0, "maximum": 1, "description": "Minimum topic-token Jaccard overlap for unstructured pairs" },
|
|
1928
|
+
"maxPairsPerRun": { "type": "integer", "default": 500, "minimum": 1, "description": "Cap on candidate pairs evaluated per cron run" },
|
|
1929
|
+
"cooldownDays": { "type": "integer", "default": 14, "minimum": 0, "description": "Cooldown in days. 0 = always re-evaluate." },
|
|
1930
|
+
"autoMergeDuplicates": { "type": "boolean", "default": false, "description": "Auto-flag pairs judged duplicates for dedup (still requires user approval)" }
|
|
1931
|
+
}
|
|
1932
|
+
},
|
|
1863
1933
|
"temporalSupersessionEnabled": {
|
|
1864
1934
|
"type": "boolean",
|
|
1865
1935
|
"default": true,
|
|
@@ -1870,6 +1940,38 @@
|
|
|
1870
1940
|
"default": false,
|
|
1871
1941
|
"description": "If true, include temporally-superseded facts in recall results (for audit/history). Default: exclude."
|
|
1872
1942
|
},
|
|
1943
|
+
"recallDirectAnswerEnabled": {
|
|
1944
|
+
"type": "boolean",
|
|
1945
|
+
"default": true,
|
|
1946
|
+
"description": "When true, recall runs the direct-answer tier in observation mode: annotates LastRecallSnapshot.tierExplain with which tier would have served the query (issue #518). Does not short-circuit the QMD path in the current release."
|
|
1947
|
+
},
|
|
1948
|
+
"recallDirectAnswerTokenOverlapFloor": {
|
|
1949
|
+
"type": "number",
|
|
1950
|
+
"minimum": 0,
|
|
1951
|
+
"maximum": 1,
|
|
1952
|
+
"default": 0.55,
|
|
1953
|
+
"description": "Minimum query↔memory token-overlap ratio for direct-answer eligibility. Set to 0 to disable the gate."
|
|
1954
|
+
},
|
|
1955
|
+
"recallDirectAnswerImportanceFloor": {
|
|
1956
|
+
"type": "number",
|
|
1957
|
+
"minimum": 0,
|
|
1958
|
+
"maximum": 1,
|
|
1959
|
+
"default": 0.7,
|
|
1960
|
+
"description": "Minimum calibrated importance score for direct-answer eligibility. Set to 0 to disable the gate."
|
|
1961
|
+
},
|
|
1962
|
+
"recallDirectAnswerAmbiguityMargin": {
|
|
1963
|
+
"type": "number",
|
|
1964
|
+
"minimum": 0,
|
|
1965
|
+
"maximum": 1,
|
|
1966
|
+
"default": 0.15,
|
|
1967
|
+
"description": "If the second-best candidate scores within this ratio of the top, direct-answer defers to hybrid."
|
|
1968
|
+
},
|
|
1969
|
+
"recallDirectAnswerEligibleTaxonomyBuckets": {
|
|
1970
|
+
"type": "array",
|
|
1971
|
+
"items": { "type": "string" },
|
|
1972
|
+
"default": ["decisions", "principles", "conventions", "runbooks", "entities"],
|
|
1973
|
+
"description": "Taxonomy category IDs eligible for direct-answer routing."
|
|
1974
|
+
},
|
|
1873
1975
|
"memoryLinkingEnabled": {
|
|
1874
1976
|
"type": "boolean",
|
|
1875
1977
|
"default": false,
|
|
@@ -2285,6 +2387,11 @@
|
|
|
2285
2387
|
"default": 15000,
|
|
2286
2388
|
"description": "Timeout for fast-tier local LLM requests (ms). Lower than primary since fast ops should complete quickly."
|
|
2287
2389
|
},
|
|
2390
|
+
"localLlmDisableThinking": {
|
|
2391
|
+
"type": "boolean",
|
|
2392
|
+
"default": true,
|
|
2393
|
+
"description": "When true (default), request chain-of-thought / thinking-mode suppression on the main local LLM (issue #548). The `chat_template_kwargs: { enable_thinking: false }` field is only injected when the detected backend is known to support it (LM Studio, vLLM); strict OpenAI-compat backends fail open to avoid the 400-cooldown path. Structured-output tasks like extraction and consolidation gain nothing from reasoning tokens and thinking-capable models (Qwen 3.5, Gemma 4, DeepSeek) often blow the 60s timeout before emitting content. Set to false to restore thinking for narrative tasks. The fast-tier client always disables thinking and is not affected by this flag."
|
|
2394
|
+
},
|
|
2288
2395
|
"hourlySummaryCronAutoRegister": {
|
|
2289
2396
|
"type": "boolean",
|
|
2290
2397
|
"default": false,
|
|
@@ -2556,7 +2663,8 @@
|
|
|
2556
2663
|
},
|
|
2557
2664
|
"default": [
|
|
2558
2665
|
"correction",
|
|
2559
|
-
"commitment"
|
|
2666
|
+
"commitment",
|
|
2667
|
+
"procedure"
|
|
2560
2668
|
],
|
|
2561
2669
|
"description": "Memory categories excluded from semantic consolidation."
|
|
2562
2670
|
},
|
|
@@ -2969,7 +3077,8 @@
|
|
|
2969
3077
|
"commitment",
|
|
2970
3078
|
"preference",
|
|
2971
3079
|
"decision",
|
|
2972
|
-
"principle"
|
|
3080
|
+
"principle",
|
|
3081
|
+
"procedure"
|
|
2973
3082
|
],
|
|
2974
3083
|
"description": "Categories that protect a fact from archival regardless of other criteria."
|
|
2975
3084
|
},
|
|
@@ -3007,7 +3116,8 @@
|
|
|
3007
3116
|
"decision",
|
|
3008
3117
|
"principle",
|
|
3009
3118
|
"commitment",
|
|
3010
|
-
"preference"
|
|
3119
|
+
"preference",
|
|
3120
|
+
"procedure"
|
|
3011
3121
|
],
|
|
3012
3122
|
"description": "Categories that lifecycle policy will not auto-archive."
|
|
3013
3123
|
},
|
|
@@ -3585,6 +3695,7 @@
|
|
|
3585
3695
|
},
|
|
3586
3696
|
"briefing": {
|
|
3587
3697
|
"type": "object",
|
|
3698
|
+
"additionalProperties": false,
|
|
3588
3699
|
"default": {
|
|
3589
3700
|
"enabled": true,
|
|
3590
3701
|
"defaultWindow": "yesterday",
|
|
@@ -3595,6 +3706,52 @@
|
|
|
3595
3706
|
"saveDir": null,
|
|
3596
3707
|
"llmFollowups": true
|
|
3597
3708
|
},
|
|
3709
|
+
"properties": {
|
|
3710
|
+
"enabled": {
|
|
3711
|
+
"type": "boolean",
|
|
3712
|
+
"default": true
|
|
3713
|
+
},
|
|
3714
|
+
"defaultWindow": {
|
|
3715
|
+
"type": "string",
|
|
3716
|
+
"default": "yesterday"
|
|
3717
|
+
},
|
|
3718
|
+
"defaultFormat": {
|
|
3719
|
+
"type": "string",
|
|
3720
|
+
"enum": [
|
|
3721
|
+
"markdown",
|
|
3722
|
+
"json"
|
|
3723
|
+
],
|
|
3724
|
+
"default": "markdown"
|
|
3725
|
+
},
|
|
3726
|
+
"maxFollowups": {
|
|
3727
|
+
"type": "integer",
|
|
3728
|
+
"minimum": 0,
|
|
3729
|
+
"maximum": 10,
|
|
3730
|
+
"default": 5
|
|
3731
|
+
},
|
|
3732
|
+
"calendarSource": {
|
|
3733
|
+
"type": [
|
|
3734
|
+
"string",
|
|
3735
|
+
"null"
|
|
3736
|
+
],
|
|
3737
|
+
"default": null
|
|
3738
|
+
},
|
|
3739
|
+
"saveByDefault": {
|
|
3740
|
+
"type": "boolean",
|
|
3741
|
+
"default": false
|
|
3742
|
+
},
|
|
3743
|
+
"saveDir": {
|
|
3744
|
+
"type": [
|
|
3745
|
+
"string",
|
|
3746
|
+
"null"
|
|
3747
|
+
],
|
|
3748
|
+
"default": null
|
|
3749
|
+
},
|
|
3750
|
+
"llmFollowups": {
|
|
3751
|
+
"type": "boolean",
|
|
3752
|
+
"default": true
|
|
3753
|
+
}
|
|
3754
|
+
},
|
|
3598
3755
|
"description": "Daily Context Briefing (#370). Knobs: enabled, defaultWindow ('yesterday', '3d', '1w', '24h', ...), defaultFormat (markdown|json), maxFollowups (0-10), calendarSource (path to ICS/JSON file, null = off), saveByDefault, saveDir (null = $REMNIC_HOME/briefings/), llmFollowups (disable to skip Responses API calls)."
|
|
3599
3756
|
},
|
|
3600
3757
|
"enrichmentEnabled": {
|
|
@@ -3897,6 +4054,10 @@
|
|
|
3897
4054
|
"label": "Auto-Resolve Contradictions",
|
|
3898
4055
|
"help": "Automatically supersede old memories when contradiction is confirmed"
|
|
3899
4056
|
},
|
|
4057
|
+
"contradictionScan": {
|
|
4058
|
+
"label": "Contradiction Scan",
|
|
4059
|
+
"help": "Nightly cron that pairs similar memories and flags contradictions for review (issue #520)"
|
|
4060
|
+
},
|
|
3900
4061
|
"temporalSupersessionEnabled": {
|
|
3901
4062
|
"label": "Temporal Supersession",
|
|
3902
4063
|
"help": "Mark older facts superseded when a newer fact writes a conflicting value for the same entityRef + structured attribute (issue #375)"
|
|
@@ -3906,6 +4067,30 @@
|
|
|
3906
4067
|
"advanced": true,
|
|
3907
4068
|
"help": "If enabled, superseded facts still surface in recall (audit/history mode)."
|
|
3908
4069
|
},
|
|
4070
|
+
"recallDirectAnswerEnabled": {
|
|
4071
|
+
"label": "Direct-Answer Retrieval Tier",
|
|
4072
|
+
"help": "Route validated high-trust queries to a fast direct-answer path before QMD (issue #518)."
|
|
4073
|
+
},
|
|
4074
|
+
"recallDirectAnswerTokenOverlapFloor": {
|
|
4075
|
+
"label": "Direct-Answer Token Overlap Floor",
|
|
4076
|
+
"advanced": true,
|
|
4077
|
+
"placeholder": "0.55"
|
|
4078
|
+
},
|
|
4079
|
+
"recallDirectAnswerImportanceFloor": {
|
|
4080
|
+
"label": "Direct-Answer Importance Floor",
|
|
4081
|
+
"advanced": true,
|
|
4082
|
+
"placeholder": "0.7"
|
|
4083
|
+
},
|
|
4084
|
+
"recallDirectAnswerAmbiguityMargin": {
|
|
4085
|
+
"label": "Direct-Answer Ambiguity Margin",
|
|
4086
|
+
"advanced": true,
|
|
4087
|
+
"placeholder": "0.15"
|
|
4088
|
+
},
|
|
4089
|
+
"recallDirectAnswerEligibleTaxonomyBuckets": {
|
|
4090
|
+
"label": "Direct-Answer Eligible Taxonomy Buckets",
|
|
4091
|
+
"advanced": true,
|
|
4092
|
+
"help": "Taxonomy category IDs eligible for direct-answer routing."
|
|
4093
|
+
},
|
|
3909
4094
|
"memoryLinkingEnabled": {
|
|
3910
4095
|
"label": "Memory Linking",
|
|
3911
4096
|
"help": "Build knowledge graph by linking related memories"
|
|
@@ -4107,6 +4292,11 @@
|
|
|
4107
4292
|
"advanced": true,
|
|
4108
4293
|
"help": "Timeout for fast-tier requests. Lower than primary since fast ops should complete quickly."
|
|
4109
4294
|
},
|
|
4295
|
+
"localLlmDisableThinking": {
|
|
4296
|
+
"label": "Disable Local LLM Thinking Mode",
|
|
4297
|
+
"advanced": true,
|
|
4298
|
+
"help": "Suppress chain-of-thought reasoning on the main local LLM. Default on — extraction / consolidation are structured-output tasks where thinking is pure latency tax and a common cause of 60s timeouts on Qwen 3.5 / Gemma 4 / DeepSeek. The suppression field (chat_template_kwargs) is only sent when the backend is known to support it (LM Studio, vLLM); strict OpenAI-compat backends fail open. Turn off if you want thinking on narrative tasks. Fast-tier client always disables thinking regardless."
|
|
4299
|
+
},
|
|
4110
4300
|
"evalHarnessEnabled": {
|
|
4111
4301
|
"label": "Evaluation Harness",
|
|
4112
4302
|
"help": "Enable Engram's benchmark/evaluation harness foundation and benchmark-status diagnostics."
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@remnic/plugin-openclaw",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.7",
|
|
4
4
|
"description": "OpenClaw adapter for Remnic memory — thin wrapper delegating to @remnic/core",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -24,7 +24,8 @@
|
|
|
24
24
|
]
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"openai": "^6.0.0"
|
|
27
|
+
"openai": "^6.0.0",
|
|
28
|
+
"@remnic/core": "^1.1.0"
|
|
28
29
|
},
|
|
29
30
|
"peerDependencies": {
|
|
30
31
|
"openclaw": ">=2026.4.8"
|