@christopherlittle51/postclaw 1.3.0 β†’ 1.3.2

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.
Files changed (48) hide show
  1. package/README.md +69 -695
  2. package/dashboard/README.md +89 -0
  3. package/dashboard/public/app.js +903 -542
  4. package/dashboard/public/index.html +184 -73
  5. package/dashboard/public/styles.css +583 -126
  6. package/dist/dashboard/routes/graph.d.ts +2 -2
  7. package/dist/dashboard/routes/graph.d.ts.map +1 -1
  8. package/dist/dashboard/routes/graph.js +61 -23
  9. package/dist/dashboard/routes/graph.js.map +1 -1
  10. package/dist/dashboard/routes/memories.d.ts.map +1 -1
  11. package/dist/dashboard/routes/memories.js +66 -0
  12. package/dist/dashboard/routes/memories.js.map +1 -1
  13. package/dist/dashboard/routes/workspace.d.ts +4 -3
  14. package/dist/dashboard/routes/workspace.d.ts.map +1 -1
  15. package/dist/dashboard/routes/workspace.js +119 -7
  16. package/dist/dashboard/routes/workspace.js.map +1 -1
  17. package/dist/dashboard/server.js +1 -1
  18. package/dist/dashboard/server.js.map +1 -1
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +84 -27
  21. package/dist/index.js.map +1 -1
  22. package/dist/schemas/validation.d.ts +32 -3
  23. package/dist/schemas/validation.d.ts.map +1 -1
  24. package/dist/schemas/validation.js +22 -4
  25. package/dist/schemas/validation.js.map +1 -1
  26. package/dist/scripts/setup-db.d.ts.map +1 -1
  27. package/dist/scripts/setup-db.js +28 -30
  28. package/dist/scripts/setup-db.js.map +1 -1
  29. package/dist/scripts/sleep_cycle.d.ts +1 -0
  30. package/dist/scripts/sleep_cycle.d.ts.map +1 -1
  31. package/dist/scripts/sleep_cycle.js +114 -21
  32. package/dist/scripts/sleep_cycle.js.map +1 -1
  33. package/dist/services/config.d.ts +1 -0
  34. package/dist/services/config.d.ts.map +1 -1
  35. package/dist/services/config.js +5 -22
  36. package/dist/services/config.js.map +1 -1
  37. package/dist/services/memoryService.d.ts +2 -1
  38. package/dist/services/memoryService.d.ts.map +1 -1
  39. package/dist/services/memoryService.js +90 -24
  40. package/dist/services/memoryService.js.map +1 -1
  41. package/dist/services/personaService.d.ts +25 -0
  42. package/dist/services/personaService.d.ts.map +1 -1
  43. package/dist/services/personaService.js +79 -0
  44. package/dist/services/personaService.js.map +1 -1
  45. package/dist/tests/dashboard-schemas.test.js +71 -1
  46. package/dist/tests/dashboard-schemas.test.js.map +1 -1
  47. package/package.json +1 -1
  48. package/schemas/README.md +64 -0
@@ -1,5 +1,6 @@
1
1
  <!DOCTYPE html>
2
2
  <html lang="en">
3
+
3
4
  <head>
4
5
  <meta charset="UTF-8" />
5
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
@@ -15,14 +16,22 @@
15
16
  <!-- Custom styles -->
16
17
  <link rel="stylesheet" href="/styles.css" />
17
18
  </head>
18
- <body class="amb-light-tl">
19
+
20
+ <body>
19
21
  <!-- Header -->
20
- <header class="dashboard-header ambient amb-surface-darker amb-chamfer amb-elevation-2">
22
+ <header class="dashboard-header ambient amb-surface amb-chamfer amb-elevation-3">
21
23
  <div class="header-content">
22
24
  <h1>🦐 PostClaw</h1>
23
25
  <div class="header-controls">
26
+ <div class="light-slider-group">
27
+ <label for="key-light-slider">πŸŒ‘</label>
28
+ <input type="range" id="key-light-slider" class="light-slider" min="0.08" max="0.92" step="0.01"
29
+ value="0.22" />
30
+ <label for="key-light-slider">β˜€οΈ</label>
31
+ <span id="key-light-value" class="light-value">0.22</span>
32
+ </div>
24
33
  <label for="agent-select">Agent:</label>
25
- <select id="agent-select" class="ambient amb-surface amb-fillet amb-elevation-1">
34
+ <select id="agent-select" class="ambient amb-surface-concave amb-fillet amb-elevation-0">
26
35
  <option value="main">main</option>
27
36
  </select>
28
37
  </div>
@@ -30,12 +39,14 @@
30
39
  </header>
31
40
 
32
41
  <!-- Tab Navigation -->
33
- <nav class="tab-nav ambient amb-surface amb-chamfer amb-elevation-1">
34
- <button class="tab-btn active" data-tab="personas">🎭 Personas</button>
35
- <button class="tab-btn" data-tab="memories">🧠 Memories</button>
36
- <button class="tab-btn" data-tab="graph">πŸ•ΈοΈ Graph</button>
37
- <button class="tab-btn" data-tab="scripts">⚑ Scripts</button>
38
- <button class="tab-btn" data-tab="config">βš™οΈ Config</button>
42
+ <nav class="tab-nav ambient amb-surface amb-chamfer amb-elevation-2">
43
+ <button class="tab-btn active ambient amb-surface-convex amb-fillet amb-elevation-1" data-tab="personas">🎭
44
+ Personas</button>
45
+ <button class="tab-btn ambient amb-surface-convex amb-fillet amb-elevation-1" data-tab="memories">🧠
46
+ Memories</button>
47
+ <button class="tab-btn ambient amb-surface-convex amb-fillet amb-elevation-1" data-tab="graph">πŸ•ΈοΈ Graph</button>
48
+ <button class="tab-btn ambient amb-surface-convex amb-fillet amb-elevation-1" data-tab="scripts">⚑ Scripts</button>
49
+ <button class="tab-btn ambient amb-surface-convex amb-fillet amb-elevation-1" data-tab="config">βš™οΈ Config</button>
39
50
  </nav>
40
51
 
41
52
  <!-- Tab Panels -->
@@ -45,23 +56,23 @@
45
56
  <section id="tab-personas" class="tab-panel active">
46
57
  <div class="panel-header">
47
58
  <h2>Persona Manager</h2>
48
- <button id="btn-new-persona" class="btn-primary ambient amb-surface amb-chamfer amb-elevation-1 amb-emit-cyan">
59
+ <button id="btn-new-persona" class="btn-primary ambient amb-surface-convex amb-chamfer amb-elevation-2">
49
60
  + New Persona
50
61
  </button>
51
62
  </div>
52
63
 
53
64
  <!-- Create/Edit form (hidden by default) -->
54
- <div id="persona-form" class="form-card ambient amb-surface amb-fillet amb-elevation-2" style="display:none;">
65
+ <div id="persona-form" class="form-card ambient amb-surface amb-chamfer amb-elevation-2" style="display:none;">
55
66
  <input type="hidden" id="persona-form-id" />
56
67
  <div class="form-row">
57
68
  <label for="persona-category">Category</label>
58
69
  <input id="persona-category" type="text" placeholder="e.g., communication_style" maxlength="50"
59
- class="ambient amb-surface-darker amb-fillet amb-elevation-0" />
70
+ class="ambient amb-surface-concave amb-fillet amb-elevation-0" />
60
71
  </div>
61
72
  <div class="form-row">
62
73
  <label for="persona-content">Content</label>
63
74
  <textarea id="persona-content" rows="4" placeholder="Persona rule or instruction..."
64
- class="ambient amb-surface-darker amb-fillet amb-elevation-0"></textarea>
75
+ class="ambient amb-surface-concave amb-fillet amb-elevation-0"></textarea>
65
76
  </div>
66
77
  <div class="form-row form-row-inline">
67
78
  <label>
@@ -69,10 +80,10 @@
69
80
  </label>
70
81
  </div>
71
82
  <div class="form-actions">
72
- <button id="btn-save-persona" class="btn-primary ambient amb-surface amb-chamfer amb-elevation-1 amb-emit-green">
83
+ <button id="btn-save-persona" class="btn-primary ambient amb-surface-convex amb-chamfer amb-elevation-1">
73
84
  Save
74
85
  </button>
75
- <button id="btn-cancel-persona" class="btn-secondary ambient amb-surface amb-fillet amb-elevation-1">
86
+ <button id="btn-cancel-persona" class="btn-secondary ambient amb-surface-convex amb-fillet amb-elevation-1">
76
87
  Cancel
77
88
  </button>
78
89
  </div>
@@ -83,9 +94,10 @@
83
94
  <!-- Workspace files panel -->
84
95
  <div class="panel-section">
85
96
  <h3>πŸ“„ Workspace Files</h3>
86
- <p class="hint">View .md files from the OpenClaw workspace for copy+paste into persona entries.</p>
97
+ <p class="hint">View .md files from the workspace. Import directly into personas or memories.</p>
87
98
  <div id="workspace-files" class="workspace-files"></div>
88
- <pre id="workspace-content" class="workspace-content ambient amb-surface-darker amb-fillet amb-elevation-0" style="display:none;"></pre>
99
+ <pre id="workspace-content" class="workspace-content ambient amb-surface-concave amb-fillet amb-elevation-0"
100
+ style="display:none;"></pre>
89
101
  </div>
90
102
  </section>
91
103
 
@@ -93,19 +105,19 @@
93
105
  <section id="tab-memories" class="tab-panel">
94
106
  <div class="panel-header">
95
107
  <h2>Memory Manager</h2>
96
- <button id="btn-new-memory" class="btn-primary ambient amb-surface amb-chamfer amb-elevation-1 amb-emit-cyan">
108
+ <button id="btn-new-memory" class="btn-primary ambient amb-surface-convex amb-chamfer amb-elevation-2">
97
109
  + New Memory
98
110
  </button>
99
- <button id="btn-import-memory" class="btn-secondary ambient amb-surface amb-fillet amb-elevation-1">
111
+ <button id="btn-import-memory" class="btn-secondary ambient amb-surface-convex amb-fillet amb-elevation-1">
100
112
  πŸ“₯ Import
101
113
  </button>
102
114
  </div>
103
115
 
104
116
  <!-- Filters -->
105
- <div class="filters ambient amb-surface amb-fillet amb-elevation-1">
117
+ <div class="filters ambient amb-surface-concave amb-fillet amb-elevation-0">
106
118
  <input id="memory-search" type="text" placeholder="Search memories..."
107
- class="ambient amb-surface-darker amb-fillet amb-elevation-0" />
108
- <select id="memory-tier-filter" class="ambient amb-surface-darker amb-fillet amb-elevation-0">
119
+ class="ambient amb-surface-concave amb-fillet amb-elevation-0" />
120
+ <select id="memory-tier-filter" class="ambient amb-surface-concave amb-fillet amb-elevation-0">
109
121
  <option value="">All Tiers</option>
110
122
  <option value="permanent">Permanent</option>
111
123
  <option value="stable">Stable</option>
@@ -113,7 +125,7 @@
113
125
  <option value="session">Session</option>
114
126
  <option value="volatile">Volatile</option>
115
127
  </select>
116
- <select id="memory-archived-filter" class="ambient amb-surface-darker amb-fillet amb-elevation-0">
128
+ <select id="memory-archived-filter" class="ambient amb-surface-concave amb-fillet amb-elevation-0">
117
129
  <option value="false">Active</option>
118
130
  <option value="true">Archived</option>
119
131
  <option value="all">All</option>
@@ -121,22 +133,22 @@
121
133
  </div>
122
134
 
123
135
  <!-- Memory form -->
124
- <div id="memory-form" class="form-card ambient amb-surface amb-fillet amb-elevation-2" style="display:none;">
136
+ <div id="memory-form" class="form-card ambient amb-surface amb-chamfer amb-elevation-2" style="display:none;">
125
137
  <input type="hidden" id="memory-form-id" />
126
138
  <div class="form-row">
127
139
  <label for="memory-content">Content</label>
128
140
  <textarea id="memory-content" rows="3" placeholder="Memory content..."
129
- class="ambient amb-surface-darker amb-fillet amb-elevation-0"></textarea>
141
+ class="ambient amb-surface-concave amb-fillet amb-elevation-0"></textarea>
130
142
  </div>
131
143
  <div class="form-row form-row-grid">
132
144
  <div>
133
145
  <label for="memory-category">Category</label>
134
146
  <input id="memory-category" type="text" placeholder="e.g., preference"
135
- class="ambient amb-surface-darker amb-fillet amb-elevation-0" />
147
+ class="ambient amb-surface-concave amb-fillet amb-elevation-0" />
136
148
  </div>
137
149
  <div>
138
150
  <label for="memory-tier">Tier</label>
139
- <select id="memory-tier" class="ambient amb-surface-darker amb-fillet amb-elevation-0">
151
+ <select id="memory-tier" class="ambient amb-surface-concave amb-fillet amb-elevation-0">
140
152
  <option value="daily">Daily</option>
141
153
  <option value="stable">Stable</option>
142
154
  <option value="permanent">Permanent</option>
@@ -145,29 +157,52 @@
145
157
  </select>
146
158
  </div>
147
159
  </div>
160
+
161
+ <!-- Memory Links Section -->
162
+ <div class="memory-links-section">
163
+ <h4>πŸ”— Linked Nodes</h4>
164
+ <div id="memory-edge-list" class="edge-list"></div>
165
+ <div class="link-form">
166
+ <input id="link-target-search" type="text" placeholder="Search for target memory or persona..."
167
+ class="ambient amb-surface-concave amb-fillet amb-elevation-0" />
168
+ <div id="link-target-results" class="link-search-results" style="display:none;"></div>
169
+ <input type="hidden" id="link-target-id" />
170
+ <input type="hidden" id="link-target-type" />
171
+ <input id="link-relationship" type="text" placeholder="Relationship (e.g., related_to, supports)"
172
+ class="ambient amb-surface-concave amb-fillet amb-elevation-0" />
173
+ <button id="btn-add-link"
174
+ class="btn-secondary btn-sm ambient amb-surface-convex amb-fillet amb-elevation-1">
175
+ + Add Link
176
+ </button>
177
+ </div>
178
+ </div>
179
+
148
180
  <div class="form-actions">
149
- <button id="btn-save-memory" class="btn-primary ambient amb-surface amb-chamfer amb-elevation-1 amb-emit-green">Save</button>
150
- <button id="btn-cancel-memory" class="btn-secondary ambient amb-surface amb-fillet amb-elevation-1">Cancel</button>
181
+ <button id="btn-save-memory"
182
+ class="btn-primary ambient amb-surface-convex amb-chamfer amb-elevation-1">Save</button>
183
+ <button id="btn-cancel-memory"
184
+ class="btn-secondary ambient amb-surface-convex amb-fillet amb-elevation-1">Cancel</button>
151
185
  </div>
152
186
  </div>
153
187
 
154
188
  <!-- Import form -->
155
- <div id="import-form" class="form-card ambient amb-surface amb-fillet amb-elevation-2" style="display:none;">
189
+ <div id="import-form" class="form-card ambient amb-surface amb-chamfer amb-elevation-2" style="display:none;">
156
190
  <div class="form-row">
157
191
  <label for="import-content">Markdown Content</label>
158
192
  <textarea id="import-content" rows="8" placeholder="Paste markdown content here..."
159
- class="ambient amb-surface-darker amb-fillet amb-elevation-0"></textarea>
193
+ class="ambient amb-surface-concave amb-fillet amb-elevation-0"></textarea>
160
194
  </div>
161
195
  <div class="form-row">
162
196
  <label for="import-filename">Source Filename (optional)</label>
163
197
  <input id="import-filename" type="text" placeholder="e.g., memory.md"
164
- class="ambient amb-surface-darker amb-fillet amb-elevation-0" />
198
+ class="ambient amb-surface-concave amb-fillet amb-elevation-0" />
165
199
  </div>
166
200
  <div class="form-actions">
167
- <button id="btn-run-import" class="btn-primary ambient amb-surface amb-chamfer amb-elevation-1 amb-emit-amber">
201
+ <button id="btn-run-import" class="btn-primary ambient amb-surface-convex amb-chamfer amb-elevation-1">
168
202
  Import
169
203
  </button>
170
- <button id="btn-cancel-import" class="btn-secondary ambient amb-surface amb-fillet amb-elevation-1">Cancel</button>
204
+ <button id="btn-cancel-import"
205
+ class="btn-secondary ambient amb-surface-convex amb-fillet amb-elevation-1">Cancel</button>
171
206
  </div>
172
207
  </div>
173
208
 
@@ -180,26 +215,27 @@
180
215
  <div class="panel-header">
181
216
  <h2>Knowledge Graph</h2>
182
217
  <div class="graph-controls">
183
- <button id="btn-fit-graph" class="btn-secondary ambient amb-surface amb-fillet amb-elevation-1">
218
+ <button id="btn-fit-graph" class="btn-secondary ambient amb-surface-convex amb-fillet amb-elevation-1">
184
219
  πŸ“ Fit
185
220
  </button>
186
- <button id="btn-toggle-labels" class="btn-secondary ambient amb-surface amb-fillet amb-elevation-1">
221
+ <button id="btn-toggle-labels" class="btn-secondary ambient amb-surface-convex amb-fillet amb-elevation-1">
187
222
  🏷️ Labels On
188
223
  </button>
189
- <button id="btn-refresh-graph" class="btn-secondary ambient amb-surface amb-fillet amb-elevation-1">
224
+ <button id="btn-refresh-graph" class="btn-secondary ambient amb-surface-convex amb-fillet amb-elevation-1">
190
225
  πŸ”„ Refresh
191
226
  </button>
192
227
  </div>
193
228
  </div>
194
229
  <div class="graph-wrapper">
195
- <div id="graph-container" class="graph-container ambient amb-surface-darker amb-fillet amb-elevation-2">
230
+ <div id="graph-container" class="graph-container ambient amb-surface-concave amb-chamfer amb-elevation-0">
196
231
  <svg id="graph-svg"></svg>
197
232
  <div id="graph-legend" class="graph-legend"></div>
198
233
  </div>
199
234
  <div id="graph-info" class="graph-info ambient amb-surface amb-fillet amb-elevation-1">
200
- <span id="graph-stats">Scroll to zoom β€’ Drag to pan β€’ Click a node for details</span>
235
+ <span id="graph-stats">Scroll to zoom β€’ Drag to pan β€’ Click a node for details β€’ Shift+drag to link</span>
201
236
  </div>
202
- <div id="graph-detail" class="graph-detail-panel ambient amb-surface amb-chamfer amb-elevation-2" style="display:none;"></div>
237
+ <div id="graph-detail" class="graph-detail-panel ambient amb-surface amb-chamfer amb-elevation-2"
238
+ style="display:none;"></div>
203
239
  </div>
204
240
  </section>
205
241
 
@@ -211,8 +247,9 @@
211
247
  <div class="scripts-grid">
212
248
  <div class="script-card ambient amb-surface amb-chamfer amb-elevation-2">
213
249
  <h3>πŸ’€ Sleep Cycle</h3>
214
- <p>Run knowledge graph maintenance: episodic consolidation, duplicate detection, low-value cleanup, and link discovery.</p>
215
- <button id="btn-run-sleep" class="btn-primary ambient amb-surface amb-chamfer amb-elevation-1 amb-emit-blue">
250
+ <p>Run knowledge graph maintenance: episodic consolidation, duplicate detection, low-value cleanup, and link
251
+ discovery.</p>
252
+ <button id="btn-run-sleep" class="btn-primary ambient amb-surface-convex amb-chamfer amb-elevation-1">
216
253
  Run Sleep Cycle
217
254
  </button>
218
255
  <div id="sleep-status" class="script-status"></div>
@@ -222,9 +259,10 @@
222
259
  <p>Bootstrap a Markdown persona file into the agent_persona table.</p>
223
260
  <div class="form-row">
224
261
  <input id="persona-import-file" type="text" placeholder="/path/to/SOUL.md"
225
- class="ambient amb-surface-darker amb-fillet amb-elevation-0" />
262
+ class="ambient amb-surface-concave amb-fillet amb-elevation-0" />
226
263
  </div>
227
- <button id="btn-run-persona-import" class="btn-primary ambient amb-surface amb-chamfer amb-elevation-1 amb-emit-amber">
264
+ <button id="btn-run-persona-import"
265
+ class="btn-primary ambient amb-surface-convex amb-chamfer amb-elevation-1">
228
266
  Import Persona
229
267
  </button>
230
268
  <div id="persona-import-status" class="script-status"></div>
@@ -237,10 +275,10 @@
237
275
  <div class="panel-header">
238
276
  <h2>Plugin Configuration</h2>
239
277
  <div class="header-actions">
240
- <button id="btn-reset-config" class="btn-secondary ambient amb-surface amb-fillet amb-elevation-1">
278
+ <button id="btn-reset-config" class="btn-secondary ambient amb-surface-convex amb-fillet amb-elevation-1">
241
279
  Reset to Defaults
242
280
  </button>
243
- <button id="btn-save-config" class="btn-primary ambient amb-surface amb-chamfer amb-elevation-1 amb-emit-green">
281
+ <button id="btn-save-config" class="btn-primary ambient amb-surface-convex amb-chamfer amb-elevation-2">
244
282
  Save All Settings
245
283
  </button>
246
284
  </div>
@@ -250,91 +288,163 @@
250
288
  <!-- RAG Settings -->
251
289
  <div class="config-card ambient amb-surface amb-chamfer amb-elevation-2">
252
290
  <h3>πŸ” RAG & Search</h3>
253
- <p class="hint">Fine-tune how memories are retrieved and injected into prompts.</p>
291
+ <p class="hint">Controls how memories are retrieved and injected into the agent's context window.</p>
254
292
  <div class="form-row">
255
293
  <label for="cfg-rag-semantic-limit">Semantic Matches (Direct)</label>
256
- <input id="cfg-rag-semantic-limit" type="number" min="1" max="50" class="ambient amb-surface-darker amb-fillet amb-elevation-0" />
257
- <small>Number of direct vector matches to fetch.</small>
294
+ <input id="cfg-rag-semantic-limit" type="number" min="1" max="50" placeholder="7"
295
+ class="ambient amb-surface-concave amb-fillet amb-elevation-0" />
296
+ <small>Number of memories fetched via vector cosine similarity before graph traversal. Higher = more direct
297
+ context but slower.</small>
258
298
  </div>
259
299
  <div class="form-row">
260
300
  <label for="cfg-rag-total-limit">Total Matches (Final)</label>
261
- <input id="cfg-rag-total-limit" type="number" min="1" max="100" class="ambient amb-surface-darker amb-fillet amb-elevation-0" />
262
- <small>Max memories after adding linked results.</small>
301
+ <input id="cfg-rag-total-limit" type="number" min="1" max="100" placeholder="15"
302
+ class="ambient amb-surface-concave amb-fillet amb-elevation-0" />
303
+ <small>Maximum total memories injected into context after adding graph-linked results. Cap this to avoid
304
+ overloading the context window.</small>
263
305
  </div>
264
306
  <div class="form-row">
265
307
  <label for="cfg-rag-linked-similarity">Linked Similarity Floor</label>
266
- <input id="cfg-rag-linked-similarity" type="number" step="0.01" min="0" max="1" class="ambient amb-surface-darker amb-fillet amb-elevation-0" />
267
- <small>Boosted similarity score given to linked (traversed) memories.</small>
308
+ <input id="cfg-rag-linked-similarity" type="number" step="0.01" min="0" max="1" placeholder="0.80"
309
+ class="ambient amb-surface-concave amb-fillet amb-elevation-0" />
310
+ <small>Boosted similarity score assigned to memories found via graph traversal (linked). Higher = more
311
+ weight given to linked results. (0.0–1.0)</small>
312
+ </div>
313
+ <div class="form-row">
314
+ <label for="cfg-rag-max-traversal-depth">Graph Traversal Depth</label>
315
+ <input id="cfg-rag-max-traversal-depth" type="number" min="1" max="10" placeholder="3"
316
+ class="ambient amb-surface-concave amb-fillet amb-elevation-0" />
317
+ <small>Maximum number of edge hops during recursive graph traversal (A→B→C = depth 2). Higher depth
318
+ discovers distant connections but increases query time.</small>
268
319
  </div>
269
320
  </div>
270
321
 
271
322
  <!-- Persona -->
272
323
  <div class="config-card ambient amb-surface amb-chamfer amb-elevation-2">
273
324
  <h3>🎭 Persona</h3>
274
- <p class="hint">Control situational context injection.</p>
325
+ <p class="hint">Controls how persona traits are selected and injected into the agent's system prompt.</p>
275
326
  <div class="form-row">
276
327
  <label for="cfg-persona-situational-limit">Situational Persona Limit</label>
277
- <input id="cfg-persona-situational-limit" type="number" min="1" max="20" class="ambient amb-surface-darker amb-fillet amb-elevation-0" />
278
- <small>Number of similarity-ranked persona facts to inject.</small>
328
+ <input id="cfg-persona-situational-limit" type="number" min="1" max="20" placeholder="3"
329
+ class="ambient amb-surface-concave amb-fillet amb-elevation-0" />
330
+ <small>Number of context-relevant persona traits injected per prompt (in addition to always-active traits).
331
+ Higher = more identity context.</small>
279
332
  </div>
280
333
  </div>
281
334
 
282
335
  <!-- System Prompt Templates -->
283
336
  <div class="config-card config-card-full ambient amb-surface amb-chamfer amb-elevation-2">
284
337
  <h3>πŸ“ System Prompt Templates</h3>
285
- <p class="hint">These blocks are injected into the agent's system prompt. Changes take effect on the next user message.</p>
338
+ <p class="hint">These blocks are injected into the agent's system prompt. Changes take effect on the next user
339
+ message. Use concise, behavior-guiding language.</p>
286
340
  <div class="form-row">
287
341
  <label for="cfg-prompt-memory">Memory Management Rules</label>
288
- <textarea id="cfg-prompt-memory" rows="8" class="ambient amb-surface-darker amb-fillet amb-elevation-0 code-font"></textarea>
342
+ <textarea id="cfg-prompt-memory" rows="5"
343
+ class="ambient amb-surface-concave amb-fillet amb-elevation-0 code-font"></textarea>
344
+ <small>Instructions for how the agent should silently save, update, and link knowledge.</small>
289
345
  </div>
290
346
  <div class="form-row">
291
347
  <label for="cfg-prompt-persona">Persona Management Rules</label>
292
- <textarea id="cfg-prompt-persona" rows="6" class="ambient amb-surface-darker amb-fillet amb-elevation-0 code-font"></textarea>
348
+ <textarea id="cfg-prompt-persona" rows="4"
349
+ class="ambient amb-surface-concave amb-fillet amb-elevation-0 code-font"></textarea>
350
+ <small>Instructions for when/how the agent modifies its own persona traits.</small>
293
351
  </div>
294
352
  <div class="form-row">
295
353
  <label for="cfg-prompt-heartbeat">Heartbeat / Autonomous Rules</label>
296
- <textarea id="cfg-prompt-heartbeat" rows="6" class="ambient amb-surface-darker amb-fillet amb-elevation-0 code-font"></textarea>
297
- <small>Use {{heartbeatFilePath}} as a placeholder for the path below.</small>
354
+ <textarea id="cfg-prompt-heartbeat" rows="4"
355
+ class="ambient amb-surface-concave amb-fillet amb-elevation-0 code-font"></textarea>
356
+ <small>Autonomous loop behavior. Use {{heartbeatFilePath}} as a placeholder for the path below.</small>
298
357
  </div>
299
358
  <div class="form-row">
300
359
  <label for="cfg-prompt-heartbeat-path">Heartbeat File Path</label>
301
- <input id="cfg-prompt-heartbeat-path" type="text" class="ambient amb-surface-darker amb-fillet amb-elevation-0" />
360
+ <input id="cfg-prompt-heartbeat-path" type="text"
361
+ class="ambient amb-surface-concave amb-fillet amb-elevation-0" />
362
+ <small>Absolute path to the heartbeat task file the agent checks on each autonomous loop.</small>
302
363
  </div>
303
364
  </div>
304
365
 
305
366
  <!-- Sleep Cycle -->
306
367
  <div class="config-card config-card-full ambient amb-surface amb-chamfer amb-elevation-2">
307
368
  <h3>πŸ’€ Sleep & Maintenance</h3>
308
- <p class="hint">Adjust the thresholds for background knowledge graph optimization.</p>
369
+ <p class="hint">Thresholds for the background knowledge graph optimization cycle. These run when "Sleep Cycle"
370
+ is triggered.</p>
309
371
  <div class="form-row-grid">
310
372
  <div class="form-row">
311
373
  <label for="cfg-sleep-dedup-threshold">Dedup Similarity</label>
312
- <input id="cfg-sleep-dedup-threshold" type="number" step="0.01" min="0" max="1" class="ambient amb-surface-darker amb-fillet amb-elevation-0" />
313
- <small>Merge memories > this similarity (Default 0.80).</small>
374
+ <input id="cfg-sleep-dedup-threshold" type="number" step="0.01" min="0" max="1" placeholder="0.80"
375
+ class="ambient amb-surface-concave amb-fillet amb-elevation-0" />
376
+ <small>Merge memories with cosine similarity above this threshold. Higher = stricter dedup (fewer merges).
377
+ Default 0.80.</small>
314
378
  </div>
315
379
  <div class="form-row">
316
380
  <label for="cfg-sleep-low-value-age">Cleanup Age (Days)</label>
317
- <input id="cfg-sleep-low-value-age" type="number" min="1" max="365" class="ambient amb-surface-darker amb-fillet amb-elevation-0" />
318
- <small>Archive unused memories older than this.</small>
381
+ <input id="cfg-sleep-low-value-age" type="number" min="1" max="365" placeholder="7"
382
+ class="ambient amb-surface-concave amb-fillet amb-elevation-0" />
383
+ <small>Archive unused memories older than this many days. Prevents memory bloat over time.</small>
319
384
  </div>
320
385
  <div class="form-row">
321
386
  <label for="cfg-sleep-link-min">Link Min Similarity</label>
322
- <input id="cfg-sleep-link-min" type="number" step="0.01" min="0" max="1" class="ambient amb-surface-darker amb-fillet amb-elevation-0" />
387
+ <input id="cfg-sleep-link-min" type="number" step="0.01" min="0" max="1" placeholder="0.65"
388
+ class="ambient amb-surface-concave amb-fillet amb-elevation-0" />
389
+ <small>During sleep, only auto-create links between memories with similarity above this floor.</small>
323
390
  </div>
324
391
  <div class="form-row">
325
392
  <label for="cfg-sleep-link-max">Link Max Similarity</label>
326
- <input id="cfg-sleep-link-max" type="number" step="0.01" min="0" max="1" class="ambient amb-surface-darker amb-fillet amb-elevation-0" />
393
+ <input id="cfg-sleep-link-max" type="number" step="0.01" min="0" max="1" placeholder="0.92"
394
+ class="ambient amb-surface-concave amb-fillet amb-elevation-0" />
395
+ <small>During sleep, skip link creation between memories with similarity above this ceiling (likely
396
+ duplicates).</small>
397
+ </div>
398
+ <div class="form-row">
399
+ <label for="cfg-sleep-episodic-batch">Episodic Batch Limit</label>
400
+ <input id="cfg-sleep-episodic-batch" type="number" min="1" max="100" placeholder="100"
401
+ class="ambient amb-surface-concave amb-fillet amb-elevation-0" />
402
+ <small>Number of episodic log entries to consolidate per sleep cycle.</small>
403
+ </div>
404
+ <div class="form-row">
405
+ <label for="cfg-sleep-dedup-scan">Duplicate Scan Limit</label>
406
+ <input id="cfg-sleep-dedup-scan" type="number" min="1" max="500" placeholder="200"
407
+ class="ambient amb-surface-concave amb-fillet amb-elevation-0" />
408
+ <small>Number of memories to scan for near-duplicates per sleep cycle.</small>
409
+ </div>
410
+ <div class="form-row">
411
+ <label for="cfg-sleep-link-candidates">Link Candidates Per Memory</label>
412
+ <input id="cfg-sleep-link-candidates" type="number" min="1" max="50" placeholder="5"
413
+ class="ambient amb-surface-concave amb-fillet amb-elevation-0" />
414
+ <small>Number of similar memories to consider for link creation per source memory.</small>
415
+ </div>
416
+ <div class="form-row">
417
+ <label for="cfg-sleep-link-batch">Link Batch Size</label>
418
+ <input id="cfg-sleep-link-batch" type="number" min="1" max="100" placeholder="20"
419
+ class="ambient amb-surface-concave amb-fillet amb-elevation-0" />
420
+ <small>Number of candidate pairs to send to LLM for classification in each batch.</small>
421
+ </div>
422
+ <div class="form-row">
423
+ <label for="cfg-sleep-link-scan">Link Scan Limit</label>
424
+ <input id="cfg-sleep-link-scan" type="number" min="1" max="500" placeholder="50"
425
+ class="ambient amb-surface-concave amb-fillet amb-elevation-0" />
426
+ <small>Total number of memories to scan for potential links per sleep cycle.</small>
427
+ </div>
428
+ <div class="form-row">
429
+ <label for="cfg-sleep-protected-tiers">Protected Tiers (Low-Value Cleanup)</label>
430
+ <input id="cfg-sleep-protected-tiers" type="text"
431
+ class="ambient amb-surface-concave amb-fillet amb-elevation-0" placeholder="permanent,stable" />
432
+ <small>Comma-separated list of memory tiers exempt from low-value archival. Default: permanent,
433
+ stable.</small>
327
434
  </div>
328
435
  </div>
329
436
  </div>
330
437
 
331
- <!-- Other -->
438
+ <!-- Technical -->
332
439
  <div class="config-card ambient amb-surface amb-chamfer amb-elevation-2">
333
440
  <h3>πŸ› οΈ Technical</h3>
441
+ <p class="hint">Internal settings for deduplication and event processing.</p>
334
442
  <div class="form-row">
335
443
  <label for="cfg-dedup-cache">Event Cache Size</label>
336
- <input id="cfg-dedup-cache" type="number" min="100" max="10000" class="ambient amb-surface-darker amb-fillet amb-elevation-0" />
337
- <small>Number of event IDs to store to prevent double-processing.</small>
444
+ <input id="cfg-dedup-cache" type="number" min="100" max="10000" placeholder="1000"
445
+ class="ambient amb-surface-concave amb-fillet amb-elevation-0" />
446
+ <small>Number of recent event IDs kept in memory to prevent double-processing. Increase for high-throughput
447
+ agents.</small>
338
448
  </div>
339
449
  </div>
340
450
  </div>
@@ -347,4 +457,5 @@
347
457
 
348
458
  <script src="/app.js"></script>
349
459
  </body>
350
- </html>
460
+
461
+ </html>