-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathopenclaw.plugin.json
More file actions
154 lines (154 loc) · 9.23 KB
/
openclaw.plugin.json
File metadata and controls
154 lines (154 loc) · 9.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
{
"id": "continuity",
"name": "Infinite Thread — Agent Continuity & Memory",
"description": "Persistent, intelligent memory for OpenClaw agents. Context budgeting, continuity anchors, topic tracking, conversation archiving, and cross-session semantic search via SQLite-vec. Gives an agent the ability to remember, not just retrieve.",
"version": "0.1.0",
"configSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"contextBudget": {
"type": "object",
"description": "Token budget allocation and priority tier configuration",
"properties": {
"contextBudgetRatio": { "type": "number", "default": 0.65, "description": "Fraction of maxTokens reserved for context (remainder is for system prompt + response)" },
"recentTurnsAlwaysFull": { "type": "number", "default": 5, "description": "Last N turns are never truncated" },
"recentTurnCharLimit": { "type": "number", "default": 3000, "description": "Max characters for recent turns" },
"midTurnCharLimit": { "type": "number", "default": 1500, "description": "Max characters for mid-age turns" },
"olderTurnCharLimit": { "type": "number", "default": 500, "description": "Max characters for older turns" },
"poolRatios": {
"type": "object",
"description": "Budget distribution across priority tiers (must sum to 1.0)",
"properties": {
"essential": { "type": "number", "default": 0.30 },
"high": { "type": "number", "default": 0.25 },
"medium": { "type": "number", "default": 0.25 },
"low": { "type": "number", "default": 0.15 },
"minimal": { "type": "number", "default": 0.05 }
}
}
}
},
"anchors": {
"type": "object",
"description": "Continuity anchor detection — preserves identity moments, contradictions, and tensions",
"properties": {
"enabled": { "type": "boolean", "default": true },
"maxAge": { "type": "number", "default": 7200000, "description": "Max age in ms before anchors expire (default 2h)" },
"maxCount": { "type": "number", "default": 15, "description": "Max anchors retained" },
"keywords": {
"type": "object",
"description": "Keyword lists for anchor type detection. Fully configurable per domain.",
"properties": {
"identity": { "type": "array", "items": { "type": "string" } },
"contradiction": { "type": "array", "items": { "type": "string" } },
"tension": { "type": "array", "items": { "type": "string" } }
}
}
}
},
"topicTracking": {
"type": "object",
"description": "Topic freshness scoring and fixation detection",
"properties": {
"enabled": { "type": "boolean", "default": true },
"windowSize": { "type": "number", "default": 6, "description": "Number of exchanges in the tracking window" },
"fixationThreshold": { "type": "number", "default": 3, "description": "Mentions before a topic is flagged as fixated" },
"decayFactor": { "type": "number", "default": 0.5, "description": "Freshness decay multiplier" },
"customPatterns": { "type": "array", "items": { "type": "string" }, "description": "Custom regex patterns for topic extraction" },
"minWordLength": { "type": "number", "default": 5, "description": "Minimum word length for frequency-based topic extraction" }
}
},
"compaction": {
"type": "object",
"description": "Context compaction triggers and strategies",
"properties": {
"threshold": { "type": "number", "default": 0.80, "description": "Token usage ratio that triggers compaction" },
"fallbackMessages": { "type": "number", "default": 20, "description": "Messages to keep in fallback mode" },
"taskAwareCompaction": { "type": "boolean", "default": true, "description": "Use task-aware strategy when task context exists" }
}
},
"tokenEstimation": {
"type": "object",
"description": "Token counting heuristics (overridden by custom tokenizer if provided)",
"properties": {
"tokensPerWord": { "type": "number", "default": 1.3 },
"specialCharTokenWeight": { "type": "number", "default": 0.5 },
"defaultMaxTokens": { "type": "number", "default": 8192, "description": "Per-prompt token ceiling (user-adjustable)" }
}
},
"archive": {
"type": "object",
"description": "Conversation archive storage",
"properties": {
"retentionDays": { "type": "number", "default": 90, "description": "Days to retain archived conversations" },
"batchIndexDelay": { "type": "number", "default": 100, "description": "Delay in ms between batch index operations" }
}
},
"embedding": {
"type": "object",
"description": "SQLite-vec embedding configuration",
"properties": {
"model": { "type": "string", "default": "Xenova/all-MiniLM-L6-v2" },
"dimensions": { "type": "number", "default": 384 }
}
},
"summarization": {
"type": "object",
"description": "Hierarchical summarization on compaction — generates summary DAG from compacted conversations",
"properties": {
"enabled": { "type": "boolean", "default": true },
"llm": {
"type": "object",
"description": "LLM endpoint for Tier 2 abstractive summaries (async, entropy-gated)",
"properties": {
"endpoint": { "type": "string", "default": "http://127.0.0.1:11434/v1/chat/completions" },
"model": { "type": "string", "description": "Model name (null = endpoint default)" },
"temperature": { "type": "number", "default": 0.3 },
"maxTokens": { "type": "number", "default": 500 },
"timeoutMs": { "type": "number", "default": 30000 }
}
},
"maxDepth": { "type": "number", "default": 3, "description": "Max DAG depth (1=leaves only, 2=+branches, 3=+roots)" },
"leafCondenseThreshold": { "type": "number", "default": 6, "description": "Leaf summaries before triggering branch condensation" },
"branchCondenseThreshold": { "type": "number", "default": 6, "description": "Branch summaries before triggering root condensation" },
"extractiveMaxSentences": { "type": "number", "default": 8, "description": "Max sentences in Tier 1 extractive summary" },
"entropyRichThreshold": { "type": "number", "default": 0.6, "description": "Entropy threshold for Tier 2 LLM enrichment" }
}
},
"knowledge": {
"type": "object",
"description": "Operational knowledge indexing — indexes workspace .md files into a semantic store and passively injects relevant knowledge during conversation",
"properties": {
"enabled": { "type": "boolean", "default": true },
"maxEntriesPerInjection": { "type": "number", "default": 3, "description": "Max knowledge entries injected per turn" },
"maxEntryChars": { "type": "number", "default": 600, "description": "Max characters per injected entry" },
"maxInjectionChars": { "type": "number", "default": 1800, "description": "Total character budget for knowledge injection (separate from conversation recall)" },
"relevanceThreshold": { "type": "number", "default": 1.0, "description": "Semantic distance threshold for injection (lower = more selective)" },
"skipFiles": { "type": "array", "items": { "type": "string" }, "description": "Workspace files to skip (identity/relational — always in bootstrap)" },
"skipSections": { "type": "array", "items": { "type": "string" }, "description": "Section headers to skip (infrastructure, not knowledge)" },
"indexOnSessionStart": { "type": "boolean", "default": true, "description": "Re-index workspace files when a session starts" },
"bulletLevelChunking": { "type": "boolean", "default": true, "description": "Split sections into bullet-level entries for finer granularity" },
"minSectionCharsForSplit": { "type": "number", "default": 200, "description": "Sections shorter than this stay atomic (not split into bullets)" }
}
},
"session": {
"type": "object",
"description": "Session boundary detection",
"properties": {
"interruptedGap": { "type": "number", "default": 7200000, "description": "Gap in ms that signals interrupted session (2h)" },
"newSessionGap": { "type": "number", "default": 21600000, "description": "Gap in ms that signals new session (6h)" }
}
},
"continuitySection": {
"type": "object",
"description": "MEMORY.md ## Continuity section configuration",
"properties": {
"enabled": { "type": "boolean", "default": true },
"maxAnchorsShown": { "type": "number", "default": 5 },
"maxTopicsShown": { "type": "number", "default": 10 }
}
}
}
}
}