claude-cognitive 0.3.4 → 0.4.1
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 +52 -2
- package/dist/agents/context.d.ts.map +1 -1
- package/dist/agents/context.js +7 -7
- package/dist/agents/context.js.map +1 -1
- package/dist/cli/commands/feedback-stats.d.ts +10 -0
- package/dist/cli/commands/feedback-stats.d.ts.map +1 -0
- package/dist/cli/commands/feedback-stats.js +70 -0
- package/dist/cli/commands/feedback-stats.js.map +1 -0
- package/dist/cli/commands/feedback-sync.d.ts +10 -0
- package/dist/cli/commands/feedback-sync.d.ts.map +1 -0
- package/dist/cli/commands/feedback-sync.js +117 -0
- package/dist/cli/commands/feedback-sync.js.map +1 -0
- package/dist/cli/commands/index.d.ts +2 -0
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/index.js +2 -0
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +32 -37
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/index.js +4 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/client.d.ts +121 -22
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +203 -31
- package/dist/client.js.map +1 -1
- package/dist/events.d.ts +20 -0
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js.map +1 -1
- package/dist/feedback/constants.d.ts +72 -0
- package/dist/feedback/constants.d.ts.map +1 -0
- package/dist/feedback/constants.js +145 -0
- package/dist/feedback/constants.js.map +1 -0
- package/dist/feedback/detector.d.ts +75 -0
- package/dist/feedback/detector.d.ts.map +1 -0
- package/dist/feedback/detector.js +393 -0
- package/dist/feedback/detector.js.map +1 -0
- package/dist/feedback/index.d.ts +85 -0
- package/dist/feedback/index.d.ts.map +1 -0
- package/dist/feedback/index.js +194 -0
- package/dist/feedback/index.js.map +1 -0
- package/dist/feedback/offline-queue.d.ts +110 -0
- package/dist/feedback/offline-queue.d.ts.map +1 -0
- package/dist/feedback/offline-queue.js +188 -0
- package/dist/feedback/offline-queue.js.map +1 -0
- package/dist/feedback/scorer.d.ts +81 -0
- package/dist/feedback/scorer.d.ts.map +1 -0
- package/dist/feedback/scorer.js +194 -0
- package/dist/feedback/scorer.js.map +1 -0
- package/dist/feedback/similarity.d.ts +19 -0
- package/dist/feedback/similarity.d.ts.map +1 -0
- package/dist/feedback/similarity.js +49 -0
- package/dist/feedback/similarity.js.map +1 -0
- package/dist/feedback/tracker.d.ts +104 -0
- package/dist/feedback/tracker.d.ts.map +1 -0
- package/dist/feedback/tracker.js +324 -0
- package/dist/feedback/tracker.js.map +1 -0
- package/dist/hooks/process-session.d.ts.map +1 -1
- package/dist/hooks/process-session.js +13 -1
- package/dist/hooks/process-session.js.map +1 -1
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -1
- package/dist/learn/index.d.ts.map +1 -1
- package/dist/learn/index.js +6 -2
- package/dist/learn/index.js.map +1 -1
- package/dist/mcp/handlers.d.ts +9 -1
- package/dist/mcp/handlers.d.ts.map +1 -1
- package/dist/mcp/handlers.js +66 -0
- package/dist/mcp/handlers.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +42 -2
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools.d.ts +77 -0
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +30 -0
- package/dist/mcp/tools.js.map +1 -1
- package/dist/mcp/types.d.ts +16 -0
- package/dist/mcp/types.d.ts.map +1 -1
- package/dist/mind.d.ts +25 -1
- package/dist/mind.d.ts.map +1 -1
- package/dist/mind.js +196 -11
- package/dist/mind.js.map +1 -1
- package/dist/types.d.ts +166 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -43,7 +43,7 @@ claude-cognitive uninstall --delete-bank
|
|
|
43
43
|
|
|
44
44
|
## How It Works
|
|
45
45
|
|
|
46
|
-

|
|
47
47
|
|
|
48
48
|
### Core Operations
|
|
49
49
|
|
|
@@ -67,7 +67,7 @@ claude-cognitive uninstall --delete-bank
|
|
|
67
67
|
|
|
68
68
|
## Architecture
|
|
69
69
|
|
|
70
|
-

|
|
71
71
|
|
|
72
72
|
### Memory Layers
|
|
73
73
|
|
|
@@ -116,6 +116,8 @@ claude-cognitive reflect "query" # Reason about knowledge
|
|
|
116
116
|
claude-cognitive config # Show configuration
|
|
117
117
|
claude-cognitive update # Update global configuration
|
|
118
118
|
claude-cognitive update --check # Check what needs updating
|
|
119
|
+
claude-cognitive feedback-stats # Show feedback queue statistics
|
|
120
|
+
claude-cognitive feedback-sync # Sync pending feedback signals
|
|
119
121
|
claude-cognitive uninstall # Remove from project
|
|
120
122
|
```
|
|
121
123
|
|
|
@@ -175,6 +177,53 @@ When Hindsight becomes available again, offline memories are automatically synce
|
|
|
175
177
|
|
|
176
178
|
---
|
|
177
179
|
|
|
180
|
+
## Feedback Signals
|
|
181
|
+
|
|
182
|
+
claude-cognitive automatically tracks which recalled memories are useful and submits feedback to Hindsight. This enables **query-context aware scoring** - frequently used facts rank higher in future recalls.
|
|
183
|
+
|
|
184
|
+
### How It Works
|
|
185
|
+
|
|
186
|
+
1. **Track** - Recalls are tracked during sessions
|
|
187
|
+
2. **Detect** - 4 detection strategies identify which facts Claude used
|
|
188
|
+
3. **Score** - Signals are aggregated into used/ignored verdicts
|
|
189
|
+
4. **Submit** - Feedback is sent to Hindsight (or queued offline)
|
|
190
|
+
5. **Boost** - Future recalls prioritize frequently-used facts
|
|
191
|
+
|
|
192
|
+
### Detection Strategies
|
|
193
|
+
|
|
194
|
+
| Strategy | Confidence | Description |
|
|
195
|
+
|----------|------------|-------------|
|
|
196
|
+
| Explicit Reference | 0.9 | "I remember...", "As mentioned before..." |
|
|
197
|
+
| Semantic Similarity | 0.7 | Word overlap between response and facts |
|
|
198
|
+
| File Access | 0.4 | Fact mentions files Claude accessed |
|
|
199
|
+
| Task Correlation | 0.5 | Fact topics match completed tasks |
|
|
200
|
+
|
|
201
|
+
### Configuration
|
|
202
|
+
|
|
203
|
+
```json
|
|
204
|
+
{
|
|
205
|
+
"feedback": {
|
|
206
|
+
"enabled": true,
|
|
207
|
+
"detection": {
|
|
208
|
+
"explicit": true,
|
|
209
|
+
"semantic": true,
|
|
210
|
+
"behavioral": true
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
### CLI Commands
|
|
217
|
+
|
|
218
|
+
```bash
|
|
219
|
+
claude-cognitive feedback-stats # Show queue statistics
|
|
220
|
+
claude-cognitive feedback-sync # Sync pending signals
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
See [Feedback Signals](./docs/feedback-signals.md) for full documentation.
|
|
224
|
+
|
|
225
|
+
---
|
|
226
|
+
|
|
178
227
|
## API Usage
|
|
179
228
|
|
|
180
229
|
```typescript
|
|
@@ -220,6 +269,7 @@ Without Hindsight, claude-cognitive works in offline mode - memories are stored
|
|
|
220
269
|
- **[Concepts](./docs/concepts.md)** - Memory networks, operations, architecture
|
|
221
270
|
- **[Configuration](./docs/configuration.md)** - Full configuration reference
|
|
222
271
|
- **[API Reference](./docs/api-reference.md)** - Complete API documentation
|
|
272
|
+
- **[Feedback Signals](./docs/feedback-signals.md)** - Automatic usage tracking
|
|
223
273
|
- **[Performance](./docs/performance.md)** - Benchmarks and optimization
|
|
224
274
|
|
|
225
275
|
---
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/agents/context.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,sBAAsB,EACvB,MAAM,YAAY,CAAC;AAEpB;;;;;;;;;;;;GAYG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,aAAa,EACvB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/agents/context.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,sBAAsB,EACvB,MAAM,YAAY,CAAC;AAEpB;;;;;;;;;;;;GAYG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,aAAa,EACvB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,YAAY,CAAC,CA8BvB;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CA2D/D;AAoBD;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,aAAa,EACvB,IAAI,EAAE,MAAM,GACX,MAAM,CAeR"}
|
package/dist/agents/context.js
CHANGED
|
@@ -17,15 +17,15 @@
|
|
|
17
17
|
*/
|
|
18
18
|
export async function getAgentContext(client, bankId, template, task, options = {}) {
|
|
19
19
|
const { budget = "mid", additionalContext, maxMemories = 10 } = options;
|
|
20
|
-
// Recall memories relevant to the task
|
|
21
|
-
const recallOptions = {
|
|
22
|
-
budget,
|
|
23
|
-
factType: "all", // Agent benefits from all memory types
|
|
24
|
-
includeEntities: true,
|
|
25
|
-
};
|
|
26
20
|
let memories = [];
|
|
27
21
|
try {
|
|
28
|
-
memories = await client.recall(
|
|
22
|
+
memories = await client.recall({
|
|
23
|
+
bankId,
|
|
24
|
+
query: task,
|
|
25
|
+
budget,
|
|
26
|
+
factType: "all", // Agent benefits from all memory types
|
|
27
|
+
includeEntities: true,
|
|
28
|
+
});
|
|
29
29
|
// Limit to maxMemories
|
|
30
30
|
memories = memories.slice(0, maxMemories);
|
|
31
31
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/agents/context.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAuB,EACvB,MAAc,EACd,QAAuB,EACvB,IAAY,EACZ,UAAkC,EAAE;IAEpC,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,iBAAiB,EAAE,WAAW,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC;IAExE,
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/agents/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI feedback-stats command - show feedback queue and processing statistics.
|
|
3
|
+
* @module cli/commands/feedback-stats
|
|
4
|
+
*/
|
|
5
|
+
import type { CAC } from "cac";
|
|
6
|
+
/**
|
|
7
|
+
* Register the feedback-stats command.
|
|
8
|
+
*/
|
|
9
|
+
export declare function registerFeedbackStatsCommand(cli: CAC): void;
|
|
10
|
+
//# sourceMappingURL=feedback-stats.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback-stats.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/feedback-stats.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAuD/B;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAqC3D"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI feedback-stats command - show feedback queue and processing statistics.
|
|
3
|
+
* @module cli/commands/feedback-stats
|
|
4
|
+
*/
|
|
5
|
+
import { Mind } from "../../mind.js";
|
|
6
|
+
import { output, info } from "../utils/index.js";
|
|
7
|
+
/**
|
|
8
|
+
* Format feedback stats for human-readable output.
|
|
9
|
+
*/
|
|
10
|
+
function formatFeedbackStats(result) {
|
|
11
|
+
const lines = [];
|
|
12
|
+
lines.push("Feedback System Status");
|
|
13
|
+
lines.push("=".repeat(40));
|
|
14
|
+
lines.push(`Bank: ${result.bankId}`);
|
|
15
|
+
lines.push(`Feedback enabled: ${result.feedbackEnabled ? "Yes" : "No"}`);
|
|
16
|
+
lines.push(`Mode: ${result.degraded ? "Degraded (offline)" : "Online"}`);
|
|
17
|
+
if (result.queue) {
|
|
18
|
+
lines.push("");
|
|
19
|
+
lines.push("Offline Queue:");
|
|
20
|
+
lines.push(` Total signals: ${result.queue.total}`);
|
|
21
|
+
lines.push(` Pending sync: ${result.queue.pending}`);
|
|
22
|
+
lines.push(` Already synced: ${result.queue.synced}`);
|
|
23
|
+
if (result.queue.lastSyncAttempt) {
|
|
24
|
+
const date = new Date(result.queue.lastSyncAttempt).toLocaleString();
|
|
25
|
+
lines.push(` Last sync attempt: ${date}`);
|
|
26
|
+
}
|
|
27
|
+
if (result.queue.lastSyncSuccess) {
|
|
28
|
+
const date = new Date(result.queue.lastSyncSuccess).toLocaleString();
|
|
29
|
+
lines.push(` Last successful sync: ${date}`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
else if (result.feedbackEnabled) {
|
|
33
|
+
lines.push("");
|
|
34
|
+
lines.push("Offline Queue: No pending signals");
|
|
35
|
+
}
|
|
36
|
+
return lines.join("\n");
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Register the feedback-stats command.
|
|
40
|
+
*/
|
|
41
|
+
export function registerFeedbackStatsCommand(cli) {
|
|
42
|
+
cli
|
|
43
|
+
.command("feedback-stats", "Show feedback queue and processing statistics")
|
|
44
|
+
.option("--project <path>", "Project directory (default: current directory)")
|
|
45
|
+
.option("--json", "Output as JSON")
|
|
46
|
+
.option("--quiet", "Suppress output")
|
|
47
|
+
.action(async (options) => {
|
|
48
|
+
const projectPath = options.project ?? process.cwd();
|
|
49
|
+
const mind = new Mind({ projectPath });
|
|
50
|
+
await mind.init();
|
|
51
|
+
const queue = mind.getOfflineFeedbackQueue();
|
|
52
|
+
const feedbackEnabled = queue !== null;
|
|
53
|
+
const result = {
|
|
54
|
+
feedbackEnabled,
|
|
55
|
+
degraded: mind.isDegraded,
|
|
56
|
+
bankId: mind.getBankId(),
|
|
57
|
+
};
|
|
58
|
+
if (queue) {
|
|
59
|
+
const stats = await queue.getStats();
|
|
60
|
+
result.queue = stats;
|
|
61
|
+
}
|
|
62
|
+
if (!feedbackEnabled && !options.quiet && !options.json) {
|
|
63
|
+
info("Feedback system is not enabled. Enable it in .claudemindrc:", options);
|
|
64
|
+
info(' "feedback": { "enabled": true }', options);
|
|
65
|
+
info("", options);
|
|
66
|
+
}
|
|
67
|
+
output(result, formatFeedbackStats, options);
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=feedback-stats.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback-stats.js","sourceRoot":"","sources":["../../../src/cli/commands/feedback-stats.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI feedback-sync command - sync pending offline feedback signals to Hindsight.
|
|
3
|
+
* @module cli/commands/feedback-sync
|
|
4
|
+
*/
|
|
5
|
+
import type { CAC } from "cac";
|
|
6
|
+
/**
|
|
7
|
+
* Register the feedback-sync command.
|
|
8
|
+
*/
|
|
9
|
+
export declare function registerFeedbackSyncCommand(cli: CAC): void;
|
|
10
|
+
//# sourceMappingURL=feedback-sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback-sync.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/feedback-sync.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AA6C/B;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CA+F1D"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI feedback-sync command - sync pending offline feedback signals to Hindsight.
|
|
3
|
+
* @module cli/commands/feedback-sync
|
|
4
|
+
*/
|
|
5
|
+
import { Mind } from "../../mind.js";
|
|
6
|
+
import { output, info } from "../utils/index.js";
|
|
7
|
+
/**
|
|
8
|
+
* Format feedback sync result for human-readable output.
|
|
9
|
+
*/
|
|
10
|
+
function formatFeedbackSyncResult(result) {
|
|
11
|
+
const lines = [];
|
|
12
|
+
if (result.success) {
|
|
13
|
+
if (result.signalsSynced > 0) {
|
|
14
|
+
lines.push(`Successfully synced ${result.signalsSynced} feedback signal(s) to Hindsight.`);
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
lines.push("No pending feedback signals to sync.");
|
|
18
|
+
}
|
|
19
|
+
if (result.signalsCleared > 0) {
|
|
20
|
+
lines.push(`Cleared ${result.signalsCleared} synced signal(s) from queue.`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
lines.push(`Failed to sync feedback signals: ${result.error ?? "Unknown error"}`);
|
|
25
|
+
if (result.degraded) {
|
|
26
|
+
lines.push("Hindsight is unavailable. Signals will be synced when connection is restored.");
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return lines.join("\n");
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Register the feedback-sync command.
|
|
33
|
+
*/
|
|
34
|
+
export function registerFeedbackSyncCommand(cli) {
|
|
35
|
+
cli
|
|
36
|
+
.command("feedback-sync", "Sync pending offline feedback signals to Hindsight")
|
|
37
|
+
.option("--project <path>", "Project directory (default: current directory)")
|
|
38
|
+
.option("--json", "Output as JSON")
|
|
39
|
+
.option("--quiet", "Suppress output")
|
|
40
|
+
.option("--clear", "Clear synced signals after successful sync")
|
|
41
|
+
.action(async (options) => {
|
|
42
|
+
const projectPath = options.project ?? process.cwd();
|
|
43
|
+
const mind = new Mind({ projectPath });
|
|
44
|
+
await mind.init();
|
|
45
|
+
const queue = mind.getOfflineFeedbackQueue();
|
|
46
|
+
if (!queue) {
|
|
47
|
+
const result = {
|
|
48
|
+
success: false,
|
|
49
|
+
signalsSynced: 0,
|
|
50
|
+
signalsCleared: 0,
|
|
51
|
+
error: "Feedback system is not enabled",
|
|
52
|
+
degraded: mind.isDegraded,
|
|
53
|
+
};
|
|
54
|
+
output(result, formatFeedbackSyncResult, options);
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
// Check if we're in degraded mode
|
|
58
|
+
if (mind.isDegraded) {
|
|
59
|
+
// Attempt recovery first
|
|
60
|
+
info("Hindsight unavailable, attempting recovery...", options);
|
|
61
|
+
const recovered = await mind.attemptRecovery();
|
|
62
|
+
if (!recovered) {
|
|
63
|
+
const result = {
|
|
64
|
+
success: false,
|
|
65
|
+
signalsSynced: 0,
|
|
66
|
+
signalsCleared: 0,
|
|
67
|
+
error: "Hindsight is unavailable",
|
|
68
|
+
degraded: true,
|
|
69
|
+
};
|
|
70
|
+
output(result, formatFeedbackSyncResult, options);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
info("Connection restored!", options);
|
|
74
|
+
}
|
|
75
|
+
// Get pending count before sync
|
|
76
|
+
const statsBefore = await queue.getStats();
|
|
77
|
+
if (statsBefore.pending === 0) {
|
|
78
|
+
const result = {
|
|
79
|
+
success: true,
|
|
80
|
+
signalsSynced: 0,
|
|
81
|
+
signalsCleared: 0,
|
|
82
|
+
degraded: false,
|
|
83
|
+
};
|
|
84
|
+
output(result, formatFeedbackSyncResult, options);
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
info(`Found ${statsBefore.pending} pending signal(s) to sync...`, options);
|
|
88
|
+
// Sync signals
|
|
89
|
+
let signalsSynced = 0;
|
|
90
|
+
let signalsCleared = 0;
|
|
91
|
+
try {
|
|
92
|
+
signalsSynced = await mind.syncOfflineFeedback();
|
|
93
|
+
// Clear synced signals if requested
|
|
94
|
+
if (options.clear && signalsSynced > 0) {
|
|
95
|
+
signalsCleared = await queue.clearSynced();
|
|
96
|
+
}
|
|
97
|
+
const result = {
|
|
98
|
+
success: true,
|
|
99
|
+
signalsSynced,
|
|
100
|
+
signalsCleared,
|
|
101
|
+
degraded: false,
|
|
102
|
+
};
|
|
103
|
+
output(result, formatFeedbackSyncResult, options);
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
const result = {
|
|
107
|
+
success: false,
|
|
108
|
+
signalsSynced: 0,
|
|
109
|
+
signalsCleared: 0,
|
|
110
|
+
error: error instanceof Error ? error.message : String(error),
|
|
111
|
+
degraded: mind.isDegraded,
|
|
112
|
+
};
|
|
113
|
+
output(result, formatFeedbackSyncResult, options);
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=feedback-sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback-sync.js","sourceRoot":"","sources":["../../../src/cli/commands/feedback-sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,4 +16,6 @@ export { registerUninstallCommand } from "./uninstall.js";
|
|
|
16
16
|
export { registerSyncCommand } from "./sync.js";
|
|
17
17
|
export { registerSyncSessionCommand } from "./sync-session.js";
|
|
18
18
|
export { registerUpdateCommand } from "./update.js";
|
|
19
|
+
export { registerFeedbackStatsCommand } from "./feedback-stats.js";
|
|
20
|
+
export { registerFeedbackSyncCommand } from "./feedback-sync.js";
|
|
19
21
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -16,4 +16,6 @@ export { registerUninstallCommand } from "./uninstall.js";
|
|
|
16
16
|
export { registerSyncCommand } from "./sync.js";
|
|
17
17
|
export { registerSyncSessionCommand } from "./sync-session.js";
|
|
18
18
|
export { registerUpdateCommand } from "./update.js";
|
|
19
|
+
export { registerFeedbackStatsCommand } from "./feedback-stats.js";
|
|
20
|
+
export { registerFeedbackSyncCommand } from "./feedback-sync.js";
|
|
19
21
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAqB/B;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAmHlD"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* CLI init command - initialize claude-cognitive for a project.
|
|
3
3
|
* @module cli/commands/init
|
|
4
4
|
*/
|
|
5
|
-
import {
|
|
5
|
+
import { writeFile, access } from "node:fs/promises";
|
|
6
6
|
import { join } from "node:path";
|
|
7
7
|
import { Mind } from "../../mind.js";
|
|
8
8
|
import { CLIError, ExitCode, info, output } from "../utils/index.js";
|
|
@@ -20,15 +20,11 @@ export function registerInitCommand(cli) {
|
|
|
20
20
|
.action(async (options) => {
|
|
21
21
|
const projectPath = options.project ?? process.cwd();
|
|
22
22
|
const rcPath = join(projectPath, ".claudemindrc");
|
|
23
|
-
const semanticDir = join(projectPath, ".claude");
|
|
24
|
-
const semanticPath = join(semanticDir, "memory.md");
|
|
25
23
|
const result = {
|
|
26
24
|
rcPath,
|
|
27
|
-
semanticPath,
|
|
28
25
|
bankId: "",
|
|
29
26
|
created: {
|
|
30
27
|
rc: false,
|
|
31
|
-
semantic: false,
|
|
32
28
|
bank: false,
|
|
33
29
|
},
|
|
34
30
|
};
|
|
@@ -39,11 +35,16 @@ export function registerInitCommand(cli) {
|
|
|
39
35
|
if (rcExists && !options.force) {
|
|
40
36
|
throw new CLIError("Configuration already exists. Use --force to overwrite.", ExitCode.CONFIG_ERROR, `Existing file: ${rcPath}`);
|
|
41
37
|
}
|
|
42
|
-
// Create default configuration
|
|
38
|
+
// Create default configuration with all options
|
|
43
39
|
const defaultConfig = {
|
|
44
40
|
hindsight: {
|
|
45
41
|
host: "localhost",
|
|
46
42
|
port: 8888,
|
|
43
|
+
timeouts: {
|
|
44
|
+
recall: 120000,
|
|
45
|
+
reflect: 180000,
|
|
46
|
+
retain: 90000,
|
|
47
|
+
},
|
|
47
48
|
},
|
|
48
49
|
bankId: options.bankId,
|
|
49
50
|
disposition: {
|
|
@@ -51,42 +52,36 @@ export function registerInitCommand(cli) {
|
|
|
51
52
|
literalism: 3,
|
|
52
53
|
empathy: 3,
|
|
53
54
|
},
|
|
54
|
-
|
|
55
|
-
|
|
55
|
+
background: "",
|
|
56
|
+
context: {
|
|
57
|
+
recentMemoryLimit: 3,
|
|
58
|
+
},
|
|
59
|
+
retain: {
|
|
60
|
+
maxTranscriptLength: 25000,
|
|
61
|
+
filterToolResults: true,
|
|
62
|
+
filterFileContents: true,
|
|
63
|
+
maxCodeBlockLines: 30,
|
|
64
|
+
minSessionLength: 500,
|
|
65
|
+
},
|
|
66
|
+
feedback: {
|
|
67
|
+
enabled: true,
|
|
68
|
+
detection: {
|
|
69
|
+
explicit: true,
|
|
70
|
+
semantic: true,
|
|
71
|
+
behavioral: true,
|
|
72
|
+
semanticThreshold: 0.5,
|
|
73
|
+
},
|
|
74
|
+
hindsight: {
|
|
75
|
+
sendFeedback: true,
|
|
76
|
+
boostByUsefulness: true,
|
|
77
|
+
boostWeight: 0.3,
|
|
78
|
+
},
|
|
56
79
|
},
|
|
57
80
|
};
|
|
58
81
|
// Write .claudemindrc
|
|
59
82
|
await writeFile(rcPath, JSON.stringify(defaultConfig, null, 2) + "\n");
|
|
60
83
|
result.created.rc = true;
|
|
61
84
|
info(`Created ${rcPath}`, options);
|
|
62
|
-
// Create .claude directory and memory.md if they don't exist
|
|
63
|
-
const semanticExists = await access(semanticPath)
|
|
64
|
-
.then(() => true)
|
|
65
|
-
.catch(() => false);
|
|
66
|
-
if (!semanticExists) {
|
|
67
|
-
await mkdir(semanticDir, { recursive: true });
|
|
68
|
-
const defaultSemantic = `# Project Memory
|
|
69
|
-
|
|
70
|
-
## Tech Stack
|
|
71
|
-
|
|
72
|
-
<!-- Add your tech stack here -->
|
|
73
|
-
|
|
74
|
-
## Key Decisions
|
|
75
|
-
|
|
76
|
-
<!-- Document important architectural decisions -->
|
|
77
|
-
|
|
78
|
-
## Critical Paths
|
|
79
|
-
|
|
80
|
-
<!-- List important code paths -->
|
|
81
|
-
|
|
82
|
-
## Observations
|
|
83
|
-
|
|
84
|
-
<!-- Promoted insights from Hindsight -->
|
|
85
|
-
`;
|
|
86
|
-
await writeFile(semanticPath, defaultSemantic);
|
|
87
|
-
result.created.semantic = true;
|
|
88
|
-
info(`Created ${semanticPath}`, options);
|
|
89
|
-
}
|
|
90
85
|
// Initialize Mind to create bank
|
|
91
86
|
try {
|
|
92
87
|
const mind = new Mind({ projectPath });
|
|
@@ -103,7 +98,7 @@ export function registerInitCommand(cli) {
|
|
|
103
98
|
catch (error) {
|
|
104
99
|
info(`Warning: Could not connect to Hindsight: ${error instanceof Error ? error.message : error}`, options);
|
|
105
100
|
}
|
|
106
|
-
output(result, (r) => `Initialized claude-cognitive:\n Config: ${r.rcPath}\n
|
|
101
|
+
output(result, (r) => `Initialized claude-cognitive:\n Config: ${r.rcPath}\n Bank: ${r.bankId || "(not created)"}\n\nContext is managed via .claude/rules/session-context.md at session start.`, options);
|
|
107
102
|
});
|
|
108
103
|
}
|
|
109
104
|
//# sourceMappingURL=init.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.js
CHANGED
|
@@ -4,12 +4,12 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { cac } from "cac";
|
|
6
6
|
import { handleError } from "./utils/index.js";
|
|
7
|
-
import { registerInitCommand, registerInstallCommand, registerUninstallCommand, registerServeCommand, registerStatusCommand, registerLearnCommand, registerRecallCommand, registerReflectCommand, registerSemanticCommand, registerConfigCommand, registerUpdateBankCommand, registerSyncCommand, registerSyncSessionCommand, registerUpdateCommand, } from "./commands/index.js";
|
|
7
|
+
import { registerInitCommand, registerInstallCommand, registerUninstallCommand, registerServeCommand, registerStatusCommand, registerLearnCommand, registerRecallCommand, registerReflectCommand, registerSemanticCommand, registerConfigCommand, registerUpdateBankCommand, registerSyncCommand, registerSyncSessionCommand, registerUpdateCommand, registerFeedbackStatsCommand, registerFeedbackSyncCommand, } from "./commands/index.js";
|
|
8
8
|
import { registerInjectContextCommand } from "../hooks/inject-context.js";
|
|
9
9
|
import { registerProcessSessionCommand } from "../hooks/process-session.js";
|
|
10
10
|
import { registerBufferMessageCommand } from "../hooks/buffer-message.js";
|
|
11
11
|
// Get version from package.json
|
|
12
|
-
const VERSION = "0.
|
|
12
|
+
const VERSION = "0.4.0";
|
|
13
13
|
/**
|
|
14
14
|
* Create and configure the CLI.
|
|
15
15
|
*/
|
|
@@ -30,6 +30,8 @@ function createCLI() {
|
|
|
30
30
|
registerSyncCommand(cli);
|
|
31
31
|
registerSyncSessionCommand(cli);
|
|
32
32
|
registerUpdateCommand(cli);
|
|
33
|
+
registerFeedbackStatsCommand(cli);
|
|
34
|
+
registerFeedbackSyncCommand(cli);
|
|
33
35
|
// Register hook commands
|
|
34
36
|
registerInjectContextCommand(cli);
|
|
35
37
|
registerProcessSessionCommand(cli);
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,GAAG,EAAY,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,wBAAwB,EACxB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,yBAAyB,EACzB,mBAAmB,EACnB,0BAA0B,EAC1B,qBAAqB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,GAAG,EAAY,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,wBAAwB,EACxB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,yBAAyB,EACzB,mBAAmB,EACnB,0BAA0B,EAC1B,qBAAqB,EACrB,4BAA4B,EAC5B,2BAA2B,GAC5B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAC;AAE1E,gCAAgC;AAChC,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB;;GAEG;AACH,SAAS,SAAS;IAChB,MAAM,GAAG,GAAG,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAEpC,oBAAoB;IACpB,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACzB,sBAAsB,CAAC,GAAG,CAAC,CAAC;IAC5B,wBAAwB,CAAC,GAAG,CAAC,CAAC;IAC9B,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC1B,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC3B,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC1B,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC3B,sBAAsB,CAAC,GAAG,CAAC,CAAC;IAC5B,uBAAuB,CAAC,GAAG,CAAC,CAAC;IAC7B,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC3B,yBAAyB,CAAC,GAAG,CAAC,CAAC;IAC/B,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACzB,0BAA0B,CAAC,GAAG,CAAC,CAAC;IAChC,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC3B,4BAA4B,CAAC,GAAG,CAAC,CAAC;IAClC,2BAA2B,CAAC,GAAG,CAAC,CAAC;IAEjC,yBAAyB;IACzB,4BAA4B,CAAC,GAAG,CAAC,CAAC;IAClC,6BAA6B,CAAC,GAAG,CAAC,CAAC;IACnC,4BAA4B,CAAC,GAAG,CAAC,CAAC;IAElC,cAAc;IACd,GAAG,CAAC,IAAI,EAAE,CAAC;IAEX,UAAU;IACV,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAErB,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,IAAI;IACjB,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;IAExB,IAAI,CAAC;QACH,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;QACxC,MAAM,GAAG,CAAC,iBAAiB,EAAE,CAAC;IAChC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACH,CAAC;AAED,iCAAiC;AACjC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,WAAW,CAAC,KAAK,CAAC,CAAC;AACrB,CAAC,CAAC,CAAC"}
|