claude-cognitive 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +256 -0
- package/bin/claude-cognitive.js +9 -0
- package/dist/agents/context.d.ts +40 -0
- package/dist/agents/context.d.ts.map +1 -0
- package/dist/agents/context.js +144 -0
- package/dist/agents/context.js.map +1 -0
- package/dist/agents/index.d.ts +9 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +11 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/loader.d.ts +48 -0
- package/dist/agents/loader.d.ts.map +1 -0
- package/dist/agents/loader.js +157 -0
- package/dist/agents/loader.js.map +1 -0
- package/dist/agents/templates.d.ts +51 -0
- package/dist/agents/templates.d.ts.map +1 -0
- package/dist/agents/templates.js +186 -0
- package/dist/agents/templates.js.map +1 -0
- package/dist/agents/types.d.ts +52 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +6 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/cli/commands/config.d.ts +10 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +22 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/index.d.ts +17 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/index.js +17 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/init.d.ts +10 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +109 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/install.d.ts +10 -0
- package/dist/cli/commands/install.d.ts.map +1 -0
- package/dist/cli/commands/install.js +440 -0
- package/dist/cli/commands/install.js.map +1 -0
- package/dist/cli/commands/learn.d.ts +10 -0
- package/dist/cli/commands/learn.d.ts.map +1 -0
- package/dist/cli/commands/learn.js +33 -0
- package/dist/cli/commands/learn.js.map +1 -0
- package/dist/cli/commands/recall.d.ts +10 -0
- package/dist/cli/commands/recall.d.ts.map +1 -0
- package/dist/cli/commands/recall.js +52 -0
- package/dist/cli/commands/recall.js.map +1 -0
- package/dist/cli/commands/reflect.d.ts +10 -0
- package/dist/cli/commands/reflect.d.ts.map +1 -0
- package/dist/cli/commands/reflect.js +48 -0
- package/dist/cli/commands/reflect.js.map +1 -0
- package/dist/cli/commands/semantic.d.ts +10 -0
- package/dist/cli/commands/semantic.d.ts.map +1 -0
- package/dist/cli/commands/semantic.js +67 -0
- package/dist/cli/commands/semantic.js.map +1 -0
- package/dist/cli/commands/serve.d.ts +10 -0
- package/dist/cli/commands/serve.d.ts.map +1 -0
- package/dist/cli/commands/serve.js +61 -0
- package/dist/cli/commands/serve.js.map +1 -0
- package/dist/cli/commands/status.d.ts +10 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +44 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/sync.d.ts +10 -0
- package/dist/cli/commands/sync.d.ts.map +1 -0
- package/dist/cli/commands/sync.js +260 -0
- package/dist/cli/commands/sync.js.map +1 -0
- package/dist/cli/commands/uninstall.d.ts +10 -0
- package/dist/cli/commands/uninstall.d.ts.map +1 -0
- package/dist/cli/commands/uninstall.js +205 -0
- package/dist/cli/commands/uninstall.js.map +1 -0
- package/dist/cli/commands/update-bank.d.ts +10 -0
- package/dist/cli/commands/update-bank.d.ts.map +1 -0
- package/dist/cli/commands/update-bank.js +129 -0
- package/dist/cli/commands/update-bank.js.map +1 -0
- package/dist/cli/index.d.ts +6 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +56 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/utils/errors.d.ts +42 -0
- package/dist/cli/utils/errors.d.ts.map +1 -0
- package/dist/cli/utils/errors.js +78 -0
- package/dist/cli/utils/errors.js.map +1 -0
- package/dist/cli/utils/index.d.ts +9 -0
- package/dist/cli/utils/index.d.ts.map +1 -0
- package/dist/cli/utils/index.js +7 -0
- package/dist/cli/utils/index.js.map +1 -0
- package/dist/cli/utils/output.d.ts +90 -0
- package/dist/cli/utils/output.d.ts.map +1 -0
- package/dist/cli/utils/output.js +164 -0
- package/dist/cli/utils/output.js.map +1 -0
- package/dist/client.d.ts +200 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +447 -0
- package/dist/client.js.map +1 -0
- package/dist/config.d.ts +44 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +264 -0
- package/dist/config.js.map +1 -0
- package/dist/errors.d.ts +72 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +188 -0
- package/dist/errors.js.map +1 -0
- package/dist/events.d.ts +148 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +115 -0
- package/dist/events.js.map +1 -0
- package/dist/hooks/index.d.ts +7 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +7 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/inject-context.d.ts +18 -0
- package/dist/hooks/inject-context.d.ts.map +1 -0
- package/dist/hooks/inject-context.js +57 -0
- package/dist/hooks/inject-context.js.map +1 -0
- package/dist/hooks/process-session.d.ts +18 -0
- package/dist/hooks/process-session.d.ts.map +1 -0
- package/dist/hooks/process-session.js +119 -0
- package/dist/hooks/process-session.js.map +1 -0
- package/dist/index.d.ts +63 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +59 -0
- package/dist/index.js.map +1 -0
- package/dist/learn/analyzers/git.d.ts +62 -0
- package/dist/learn/analyzers/git.d.ts.map +1 -0
- package/dist/learn/analyzers/git.js +183 -0
- package/dist/learn/analyzers/git.js.map +1 -0
- package/dist/learn/analyzers/index.d.ts +15 -0
- package/dist/learn/analyzers/index.d.ts.map +1 -0
- package/dist/learn/analyzers/index.js +10 -0
- package/dist/learn/analyzers/index.js.map +1 -0
- package/dist/learn/analyzers/package.d.ts +57 -0
- package/dist/learn/analyzers/package.d.ts.map +1 -0
- package/dist/learn/analyzers/package.js +245 -0
- package/dist/learn/analyzers/package.js.map +1 -0
- package/dist/learn/analyzers/readme.d.ts +27 -0
- package/dist/learn/analyzers/readme.d.ts.map +1 -0
- package/dist/learn/analyzers/readme.js +163 -0
- package/dist/learn/analyzers/readme.js.map +1 -0
- package/dist/learn/analyzers/source.d.ts +70 -0
- package/dist/learn/analyzers/source.d.ts.map +1 -0
- package/dist/learn/analyzers/source.js +231 -0
- package/dist/learn/analyzers/source.js.map +1 -0
- package/dist/learn/analyzers/structure.d.ts +39 -0
- package/dist/learn/analyzers/structure.d.ts.map +1 -0
- package/dist/learn/analyzers/structure.js +172 -0
- package/dist/learn/analyzers/structure.js.map +1 -0
- package/dist/learn/extractor.d.ts +76 -0
- package/dist/learn/extractor.d.ts.map +1 -0
- package/dist/learn/extractor.js +302 -0
- package/dist/learn/extractor.js.map +1 -0
- package/dist/learn/index.d.ts +31 -0
- package/dist/learn/index.d.ts.map +1 -0
- package/dist/learn/index.js +165 -0
- package/dist/learn/index.js.map +1 -0
- package/dist/mcp/handlers.d.ts +23 -0
- package/dist/mcp/handlers.d.ts.map +1 -0
- package/dist/mcp/handlers.js +124 -0
- package/dist/mcp/handlers.js.map +1 -0
- package/dist/mcp/index.d.ts +32 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +40 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +79 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +277 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools.d.ts +59 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +43 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/mcp/types.d.ts +65 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +6 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/mind.d.ts +250 -0
- package/dist/mind.d.ts.map +1 -0
- package/dist/mind.js +637 -0
- package/dist/mind.js.map +1 -0
- package/dist/promotion.d.ts +112 -0
- package/dist/promotion.d.ts.map +1 -0
- package/dist/promotion.js +196 -0
- package/dist/promotion.js.map +1 -0
- package/dist/retry.d.ts +70 -0
- package/dist/retry.d.ts.map +1 -0
- package/dist/retry.js +122 -0
- package/dist/retry.js.map +1 -0
- package/dist/semantic.d.ts +202 -0
- package/dist/semantic.d.ts.map +1 -0
- package/dist/semantic.js +424 -0
- package/dist/semantic.js.map +1 -0
- package/dist/types.d.ts +363 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +30 -0
- package/dist/types.js.map +1 -0
- package/package.json +70 -0
package/dist/mind.js
ADDED
|
@@ -0,0 +1,637 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mind class - the orchestrator for claude-cognitive.
|
|
3
|
+
* @module mind
|
|
4
|
+
*/
|
|
5
|
+
import { readFile } from "node:fs/promises";
|
|
6
|
+
import { basename, join } from "node:path";
|
|
7
|
+
import { BUILT_IN_TEMPLATES, getAgentContext as prepareAgentContext, formatAgentPrompt, loadCustomAgents, isBuiltInAgent, } from "./agents/index.js";
|
|
8
|
+
import { HindsightClient } from "./client.js";
|
|
9
|
+
import { loadConfig } from "./config.js";
|
|
10
|
+
import { HindsightError } from "./errors.js";
|
|
11
|
+
import { TypedEventEmitter } from "./events.js";
|
|
12
|
+
import { PromotionManager, DEFAULT_PROMOTION_THRESHOLD, } from "./promotion.js";
|
|
13
|
+
import { SemanticMemory } from "./semantic.js";
|
|
14
|
+
// ============================================
|
|
15
|
+
// Default Values
|
|
16
|
+
// ============================================
|
|
17
|
+
/** Default disposition if none provided */
|
|
18
|
+
const DEFAULT_DISPOSITION = {
|
|
19
|
+
skepticism: 3,
|
|
20
|
+
literalism: 3,
|
|
21
|
+
empathy: 3,
|
|
22
|
+
};
|
|
23
|
+
/** First-person perspective prefix for bank background */
|
|
24
|
+
const FIRST_PERSON_PREFIX = "I am Claude, an AI assistant. I speak in first person (I believe, I noticed, I learned). " +
|
|
25
|
+
"When forming opinions, I say 'I believe...' not 'User believes...'. ";
|
|
26
|
+
// ============================================
|
|
27
|
+
// Mind Class
|
|
28
|
+
// ============================================
|
|
29
|
+
/**
|
|
30
|
+
* Mind is the orchestrator layer that wraps HindsightClient and provides
|
|
31
|
+
* session lifecycle management, graceful degradation, and event emission.
|
|
32
|
+
*
|
|
33
|
+
* Claude operates as a **project manager** through Mind:
|
|
34
|
+
* - Manages session workflow and delegates to specialized agents
|
|
35
|
+
* - Owns all memory operations (agents don't access memory)
|
|
36
|
+
* - Synthesizes findings from multiple agents
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```typescript
|
|
40
|
+
* const mind = new Mind({
|
|
41
|
+
* projectPath: '/path/to/project',
|
|
42
|
+
* disposition: { skepticism: 4, literalism: 4, empathy: 2 },
|
|
43
|
+
* background: 'Developer assistant for a React app',
|
|
44
|
+
* });
|
|
45
|
+
*
|
|
46
|
+
* await mind.init();
|
|
47
|
+
*
|
|
48
|
+
* // Session start - get context to inject
|
|
49
|
+
* const context = await mind.onSessionStart();
|
|
50
|
+
*
|
|
51
|
+
* // During work - recall when helpful
|
|
52
|
+
* const memories = await mind.recall('authentication');
|
|
53
|
+
*
|
|
54
|
+
* // Session end - reflect and store observations
|
|
55
|
+
* await mind.onSessionEnd(transcript);
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
export class Mind extends TypedEventEmitter {
|
|
59
|
+
// Configuration
|
|
60
|
+
projectPath;
|
|
61
|
+
pendingOptions;
|
|
62
|
+
// Resolved configuration (set in init())
|
|
63
|
+
bankId = "";
|
|
64
|
+
disposition = DEFAULT_DISPOSITION;
|
|
65
|
+
background;
|
|
66
|
+
/** Path to semantic memory file. Used in Phase 3. */
|
|
67
|
+
semanticPath = ".claude/memory.md";
|
|
68
|
+
// Client (nullable for graceful degradation)
|
|
69
|
+
client = null;
|
|
70
|
+
// State
|
|
71
|
+
initialized = false;
|
|
72
|
+
degraded = false;
|
|
73
|
+
sessionActive = false;
|
|
74
|
+
/** Session start time. Used for duration tracking. */
|
|
75
|
+
sessionStartTime = null;
|
|
76
|
+
// Agent templates (loaded in init())
|
|
77
|
+
customAgents = [];
|
|
78
|
+
// Semantic memory (loaded in init())
|
|
79
|
+
semantic = null;
|
|
80
|
+
promotionManager = null;
|
|
81
|
+
/**
|
|
82
|
+
* Create a new Mind instance.
|
|
83
|
+
*
|
|
84
|
+
* @param options - Mind configuration options
|
|
85
|
+
*/
|
|
86
|
+
constructor(options = {}) {
|
|
87
|
+
super();
|
|
88
|
+
this.projectPath = options.projectPath ?? process.cwd();
|
|
89
|
+
this.pendingOptions = options;
|
|
90
|
+
}
|
|
91
|
+
// ============================================
|
|
92
|
+
// Initialization
|
|
93
|
+
// ============================================
|
|
94
|
+
/**
|
|
95
|
+
* Initialize the Mind instance.
|
|
96
|
+
*
|
|
97
|
+
* This method:
|
|
98
|
+
* 1. Loads configuration from multiple sources
|
|
99
|
+
* 2. Creates HindsightClient
|
|
100
|
+
* 3. Performs health check
|
|
101
|
+
* 4. Creates bank if it doesn't exist
|
|
102
|
+
* 5. Loads custom agent templates
|
|
103
|
+
*
|
|
104
|
+
* @throws {Error} If init() is called twice
|
|
105
|
+
*/
|
|
106
|
+
async init() {
|
|
107
|
+
if (this.initialized) {
|
|
108
|
+
throw new Error("Mind already initialized. Call init() only once.");
|
|
109
|
+
}
|
|
110
|
+
// Build config overrides, only including defined values
|
|
111
|
+
const hindsightOverrides = {};
|
|
112
|
+
if (this.pendingOptions.host !== undefined) {
|
|
113
|
+
hindsightOverrides.host = this.pendingOptions.host;
|
|
114
|
+
}
|
|
115
|
+
if (this.pendingOptions.port !== undefined) {
|
|
116
|
+
hindsightOverrides.port = this.pendingOptions.port;
|
|
117
|
+
}
|
|
118
|
+
if (this.pendingOptions.apiKey !== undefined) {
|
|
119
|
+
hindsightOverrides.apiKey = this.pendingOptions.apiKey;
|
|
120
|
+
}
|
|
121
|
+
// Build overrides object, only including defined values
|
|
122
|
+
const overrides = {};
|
|
123
|
+
if (Object.keys(hindsightOverrides).length > 0) {
|
|
124
|
+
overrides.hindsight = hindsightOverrides;
|
|
125
|
+
}
|
|
126
|
+
if (this.pendingOptions.bankId !== undefined) {
|
|
127
|
+
overrides.bankId = this.pendingOptions.bankId;
|
|
128
|
+
}
|
|
129
|
+
if (this.pendingOptions.disposition !== undefined) {
|
|
130
|
+
overrides.disposition = this.pendingOptions.disposition;
|
|
131
|
+
}
|
|
132
|
+
if (this.pendingOptions.background !== undefined) {
|
|
133
|
+
overrides.background = this.pendingOptions.background;
|
|
134
|
+
}
|
|
135
|
+
if (this.pendingOptions.semanticPath !== undefined) {
|
|
136
|
+
overrides.semantic = { path: this.pendingOptions.semanticPath };
|
|
137
|
+
}
|
|
138
|
+
// Load config with pending options as overrides
|
|
139
|
+
const config = await loadConfig(this.projectPath, overrides);
|
|
140
|
+
// Resolve configuration
|
|
141
|
+
this.bankId = config.bankId ?? (await this.deriveBankId());
|
|
142
|
+
this.disposition = config.disposition ?? DEFAULT_DISPOSITION;
|
|
143
|
+
if (config.background) {
|
|
144
|
+
this.background = config.background;
|
|
145
|
+
}
|
|
146
|
+
this.semanticPath = config.semantic?.path ?? ".claude/memory.md";
|
|
147
|
+
// Create HindsightClient
|
|
148
|
+
const clientOptions = {
|
|
149
|
+
host: config.hindsight.host,
|
|
150
|
+
port: config.hindsight.port,
|
|
151
|
+
};
|
|
152
|
+
if (config.hindsight.apiKey) {
|
|
153
|
+
clientOptions.apiKey = config.hindsight.apiKey;
|
|
154
|
+
}
|
|
155
|
+
this.client = new HindsightClient(clientOptions);
|
|
156
|
+
// Health check
|
|
157
|
+
const health = await this.client.health();
|
|
158
|
+
if (!health.healthy) {
|
|
159
|
+
this.enterDegradedMode(`Hindsight unavailable: ${health.error ?? "unknown"}`);
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
// Ensure bank exists
|
|
163
|
+
await this.ensureBank();
|
|
164
|
+
}
|
|
165
|
+
// Load custom agents from .claude/agents/
|
|
166
|
+
this.customAgents = await loadCustomAgents(this.projectPath);
|
|
167
|
+
// Load semantic memory
|
|
168
|
+
this.semantic = new SemanticMemory(this.projectPath, this.semanticPath);
|
|
169
|
+
try {
|
|
170
|
+
await this.semantic.load();
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
// Semantic memory is optional - emit error but continue
|
|
174
|
+
this.emit("error", error instanceof Error ? error : new Error(String(error)));
|
|
175
|
+
}
|
|
176
|
+
// Initialize promotion manager
|
|
177
|
+
if (this.semantic.isLoaded()) {
|
|
178
|
+
this.promotionManager = new PromotionManager(this.semantic, this, {
|
|
179
|
+
threshold: DEFAULT_PROMOTION_THRESHOLD,
|
|
180
|
+
});
|
|
181
|
+
this.promotionManager.startListening();
|
|
182
|
+
}
|
|
183
|
+
// Mark initialized
|
|
184
|
+
this.initialized = true;
|
|
185
|
+
// Emit ready event
|
|
186
|
+
this.emit("ready");
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Derive bank ID from project name if not specified.
|
|
190
|
+
* @internal
|
|
191
|
+
*/
|
|
192
|
+
async deriveBankId() {
|
|
193
|
+
// Try to read package.json name
|
|
194
|
+
try {
|
|
195
|
+
const pkgPath = join(this.projectPath, "package.json");
|
|
196
|
+
const pkgContent = await readFile(pkgPath, "utf-8");
|
|
197
|
+
const pkg = JSON.parse(pkgContent);
|
|
198
|
+
if (typeof pkg.name === "string" && pkg.name.length > 0) {
|
|
199
|
+
return this.sanitizeBankId(pkg.name);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
catch {
|
|
203
|
+
// Fall through to directory name
|
|
204
|
+
}
|
|
205
|
+
// Fall back to directory name
|
|
206
|
+
return this.sanitizeBankId(basename(this.projectPath));
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Sanitize a string to be a valid bank ID.
|
|
210
|
+
* @internal
|
|
211
|
+
*/
|
|
212
|
+
sanitizeBankId(name) {
|
|
213
|
+
return name.toLowerCase().replace(/[^a-z0-9-]/g, "-");
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Ensure the bank exists, creating it if necessary.
|
|
217
|
+
* @internal
|
|
218
|
+
*/
|
|
219
|
+
async ensureBank() {
|
|
220
|
+
if (!this.client || this.degraded)
|
|
221
|
+
return;
|
|
222
|
+
try {
|
|
223
|
+
await this.client.getBank(this.bankId);
|
|
224
|
+
}
|
|
225
|
+
catch (error) {
|
|
226
|
+
if (HindsightError.isHindsightError(error) && error.isBankNotFound) {
|
|
227
|
+
// Bank doesn't exist, create it with first-person perspective
|
|
228
|
+
const background = this.background
|
|
229
|
+
? FIRST_PERSON_PREFIX + this.background
|
|
230
|
+
: FIRST_PERSON_PREFIX.trim();
|
|
231
|
+
await this.client.createBank({
|
|
232
|
+
bankId: this.bankId,
|
|
233
|
+
disposition: this.disposition,
|
|
234
|
+
background,
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
else {
|
|
238
|
+
throw error;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
// ============================================
|
|
243
|
+
// Session Lifecycle
|
|
244
|
+
// ============================================
|
|
245
|
+
/**
|
|
246
|
+
* Called at session start. Returns context to inject.
|
|
247
|
+
*
|
|
248
|
+
* This method:
|
|
249
|
+
* 1. Loads semantic memory (Phase 3)
|
|
250
|
+
* 2. Recalls recent experiences
|
|
251
|
+
* 3. Formats as context string
|
|
252
|
+
*
|
|
253
|
+
* @returns Formatted context string for injection
|
|
254
|
+
*/
|
|
255
|
+
async onSessionStart() {
|
|
256
|
+
this.assertInitialized();
|
|
257
|
+
this.sessionActive = true;
|
|
258
|
+
this.sessionStartTime = new Date();
|
|
259
|
+
const contextParts = [];
|
|
260
|
+
// Load semantic memory context
|
|
261
|
+
if (this.semantic?.isLoaded()) {
|
|
262
|
+
const semanticContext = this.semantic.toContext();
|
|
263
|
+
if (semanticContext.trim().length > 0) {
|
|
264
|
+
contextParts.push(semanticContext);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
// Recall recent experiences (if not degraded)
|
|
268
|
+
if (!this.degraded && this.client) {
|
|
269
|
+
try {
|
|
270
|
+
const recent = await this.client.recent(this.bankId, 7);
|
|
271
|
+
if (recent.length > 0) {
|
|
272
|
+
this.emit("memory:recalled", recent);
|
|
273
|
+
contextParts.push(this.formatRecentMemories(recent));
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
catch (error) {
|
|
277
|
+
this.handleError(error, "onSessionStart recall");
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
return contextParts.join("\n\n");
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Called at session end. Reflects on session and stores observations.
|
|
284
|
+
*
|
|
285
|
+
* This method:
|
|
286
|
+
* 1. Retains transcript if provided
|
|
287
|
+
* 2. Reflects on the session
|
|
288
|
+
* 3. Emits opinion events
|
|
289
|
+
*
|
|
290
|
+
* @param transcript - Optional session transcript to store
|
|
291
|
+
* @returns Reflection result, or null in degraded mode
|
|
292
|
+
*/
|
|
293
|
+
async onSessionEnd(transcript) {
|
|
294
|
+
this.assertInitialized();
|
|
295
|
+
// Retain transcript if provided
|
|
296
|
+
if (transcript && !this.degraded && this.client) {
|
|
297
|
+
try {
|
|
298
|
+
await this.client.retain(this.bankId, transcript, "Session transcript");
|
|
299
|
+
this.emit("memory:retained", transcript);
|
|
300
|
+
}
|
|
301
|
+
catch (error) {
|
|
302
|
+
this.handleError(error, "onSessionEnd retain");
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
// Reflect on session (if not degraded)
|
|
306
|
+
let result = null;
|
|
307
|
+
if (!this.degraded && this.client) {
|
|
308
|
+
try {
|
|
309
|
+
result = await this.client.reflect(this.bankId, "What insights can I draw from this session?");
|
|
310
|
+
// Emit opinion events
|
|
311
|
+
for (const opinion of result.opinions) {
|
|
312
|
+
this.emit("opinion:formed", opinion);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
catch (error) {
|
|
316
|
+
this.handleError(error, "onSessionEnd reflect");
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
// Clear promotion cache for next session
|
|
320
|
+
if (this.promotionManager) {
|
|
321
|
+
this.promotionManager.clearCache();
|
|
322
|
+
}
|
|
323
|
+
// Reset session state
|
|
324
|
+
this.sessionActive = false;
|
|
325
|
+
this.sessionStartTime = null;
|
|
326
|
+
return result;
|
|
327
|
+
}
|
|
328
|
+
// ============================================
|
|
329
|
+
// Core Operations
|
|
330
|
+
// ============================================
|
|
331
|
+
/**
|
|
332
|
+
* Search memories for relevant context.
|
|
333
|
+
*
|
|
334
|
+
* In degraded mode, returns an empty array.
|
|
335
|
+
*
|
|
336
|
+
* @param query - What to search for
|
|
337
|
+
* @param options - Search options (budget, factType, etc.)
|
|
338
|
+
* @returns Matching memories
|
|
339
|
+
*/
|
|
340
|
+
async recall(query, options) {
|
|
341
|
+
this.assertInitialized();
|
|
342
|
+
// Degraded mode: return empty array
|
|
343
|
+
if (this.degraded || !this.client) {
|
|
344
|
+
return [];
|
|
345
|
+
}
|
|
346
|
+
try {
|
|
347
|
+
const memories = await this.client.recall(this.bankId, query, options);
|
|
348
|
+
this.emit("memory:recalled", memories);
|
|
349
|
+
return memories;
|
|
350
|
+
}
|
|
351
|
+
catch (error) {
|
|
352
|
+
this.handleError(error, "recall");
|
|
353
|
+
return [];
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* Reason about accumulated knowledge and form opinions.
|
|
358
|
+
*
|
|
359
|
+
* @param query - What to think about or reason through
|
|
360
|
+
* @returns Reflection result with opinions
|
|
361
|
+
* @throws {HindsightError} If in degraded mode (reflect requires Hindsight)
|
|
362
|
+
*/
|
|
363
|
+
async reflect(query) {
|
|
364
|
+
this.assertInitialized();
|
|
365
|
+
// Degraded mode: throw (reflect requires Hindsight)
|
|
366
|
+
if (this.degraded || !this.client) {
|
|
367
|
+
throw new HindsightError("reflect() requires Hindsight connection", "HINDSIGHT_UNAVAILABLE", { isRetryable: false });
|
|
368
|
+
}
|
|
369
|
+
const result = await this.client.reflect(this.bankId, query);
|
|
370
|
+
// Emit opinion events
|
|
371
|
+
for (const opinion of result.opinions) {
|
|
372
|
+
this.emit("opinion:formed", opinion);
|
|
373
|
+
}
|
|
374
|
+
return result;
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Store content in memory.
|
|
378
|
+
*
|
|
379
|
+
* In degraded mode, skips silently and emits an error event.
|
|
380
|
+
*
|
|
381
|
+
* @param content - Content to store
|
|
382
|
+
* @param context - Optional additional context
|
|
383
|
+
*/
|
|
384
|
+
async retain(content, context) {
|
|
385
|
+
this.assertInitialized();
|
|
386
|
+
// Degraded mode: skip silently
|
|
387
|
+
if (this.degraded || !this.client) {
|
|
388
|
+
this.emit("error", new Error("retain() skipped: Hindsight unavailable"));
|
|
389
|
+
return;
|
|
390
|
+
}
|
|
391
|
+
await this.client.retain(this.bankId, content, context);
|
|
392
|
+
this.emit("memory:retained", content);
|
|
393
|
+
}
|
|
394
|
+
// ============================================
|
|
395
|
+
// Learn Operation
|
|
396
|
+
// ============================================
|
|
397
|
+
/**
|
|
398
|
+
* Bootstrap memory from an existing codebase.
|
|
399
|
+
*
|
|
400
|
+
* This solves the **cold start problem** when adopting claude-cognitive
|
|
401
|
+
* on a mature project.
|
|
402
|
+
*
|
|
403
|
+
* @param options - Learn options (depth, git history, etc.)
|
|
404
|
+
* @returns Learn result with summary and stats
|
|
405
|
+
* @throws {HindsightError} If in degraded mode (learn requires Hindsight)
|
|
406
|
+
*/
|
|
407
|
+
async learn(options) {
|
|
408
|
+
this.assertInitialized();
|
|
409
|
+
// Degraded mode: throw (learn requires Hindsight)
|
|
410
|
+
if (this.degraded || !this.client) {
|
|
411
|
+
throw new HindsightError("learn() requires Hindsight connection", "HINDSIGHT_UNAVAILABLE", { isRetryable: false });
|
|
412
|
+
}
|
|
413
|
+
const depth = options?.depth ?? "standard";
|
|
414
|
+
this.emit("learn:start", { depth });
|
|
415
|
+
// Import learn function dynamically to avoid circular deps
|
|
416
|
+
const { learn } = await import("./learn/index.js");
|
|
417
|
+
const result = await learn(this.client, this.bankId, this.projectPath, options);
|
|
418
|
+
// Emit opinion events
|
|
419
|
+
for (const opinion of result.opinions) {
|
|
420
|
+
this.emit("opinion:formed", opinion);
|
|
421
|
+
}
|
|
422
|
+
this.emit("learn:complete", {
|
|
423
|
+
summary: result.summary,
|
|
424
|
+
worldFacts: result.worldFacts,
|
|
425
|
+
});
|
|
426
|
+
return result;
|
|
427
|
+
}
|
|
428
|
+
// ============================================
|
|
429
|
+
// Agent Support
|
|
430
|
+
// ============================================
|
|
431
|
+
/**
|
|
432
|
+
* Get all available agent templates (built-in + custom).
|
|
433
|
+
*
|
|
434
|
+
* @returns Array of agent templates
|
|
435
|
+
*/
|
|
436
|
+
getAgentTemplates() {
|
|
437
|
+
return [...Object.values(BUILT_IN_TEMPLATES), ...this.customAgents];
|
|
438
|
+
}
|
|
439
|
+
/**
|
|
440
|
+
* Get a specific agent template by name.
|
|
441
|
+
*
|
|
442
|
+
* @param name - Agent template name
|
|
443
|
+
* @returns Agent template, or undefined if not found
|
|
444
|
+
*/
|
|
445
|
+
getAgentTemplate(name) {
|
|
446
|
+
// Check built-in first
|
|
447
|
+
if (isBuiltInAgent(name)) {
|
|
448
|
+
return BUILT_IN_TEMPLATES[name];
|
|
449
|
+
}
|
|
450
|
+
// Then custom
|
|
451
|
+
return this.customAgents.find((a) => a.name === name);
|
|
452
|
+
}
|
|
453
|
+
/**
|
|
454
|
+
* Prepare context for delegating to an agent.
|
|
455
|
+
*
|
|
456
|
+
* This should be called by the orchestrator before delegation.
|
|
457
|
+
* It retrieves relevant memories and formats them for the agent.
|
|
458
|
+
*
|
|
459
|
+
* @param agentType - Name of the agent (built-in or custom)
|
|
460
|
+
* @param task - The task description to delegate
|
|
461
|
+
* @param options - Optional configuration
|
|
462
|
+
* @returns Formatted prompt string for the agent
|
|
463
|
+
*/
|
|
464
|
+
async getAgentContext(agentType, task, options) {
|
|
465
|
+
this.assertInitialized();
|
|
466
|
+
const template = this.getAgentTemplate(agentType);
|
|
467
|
+
if (!template) {
|
|
468
|
+
throw new Error(`Unknown agent type: ${agentType}`);
|
|
469
|
+
}
|
|
470
|
+
this.emit("agent:context-prepared", { agent: agentType, task });
|
|
471
|
+
// If we're in degraded mode or no client, return minimal context
|
|
472
|
+
if (this.degraded || !this.client) {
|
|
473
|
+
return `# Agent: ${template.name}
|
|
474
|
+
|
|
475
|
+
## Mission
|
|
476
|
+
${template.mission}
|
|
477
|
+
|
|
478
|
+
## Constraints
|
|
479
|
+
${template.constraints.map((c) => `- ${c}`).join("\n")}
|
|
480
|
+
|
|
481
|
+
## Your Task
|
|
482
|
+
${task}
|
|
483
|
+
|
|
484
|
+
## Expected Output Format
|
|
485
|
+
${template.outputFormat}
|
|
486
|
+
`;
|
|
487
|
+
}
|
|
488
|
+
// Prepare full context with memories
|
|
489
|
+
const context = await prepareAgentContext(this.client, this.bankId, template, task, options);
|
|
490
|
+
return formatAgentPrompt(context);
|
|
491
|
+
}
|
|
492
|
+
// ============================================
|
|
493
|
+
// Graceful Degradation
|
|
494
|
+
// ============================================
|
|
495
|
+
/**
|
|
496
|
+
* Whether the Mind is in degraded mode (Hindsight unavailable).
|
|
497
|
+
*/
|
|
498
|
+
get isDegraded() {
|
|
499
|
+
return this.degraded;
|
|
500
|
+
}
|
|
501
|
+
/**
|
|
502
|
+
* Attempt to recover from degraded mode.
|
|
503
|
+
*
|
|
504
|
+
* @returns True if recovery was successful
|
|
505
|
+
*/
|
|
506
|
+
async attemptRecovery() {
|
|
507
|
+
if (!this.degraded || !this.client) {
|
|
508
|
+
return !this.degraded;
|
|
509
|
+
}
|
|
510
|
+
const health = await this.client.health();
|
|
511
|
+
if (health.healthy) {
|
|
512
|
+
this.exitDegradedMode();
|
|
513
|
+
await this.ensureBank();
|
|
514
|
+
return true;
|
|
515
|
+
}
|
|
516
|
+
return false;
|
|
517
|
+
}
|
|
518
|
+
/**
|
|
519
|
+
* Enter degraded mode.
|
|
520
|
+
* @internal
|
|
521
|
+
*/
|
|
522
|
+
enterDegradedMode(reason) {
|
|
523
|
+
if (!this.degraded) {
|
|
524
|
+
this.degraded = true;
|
|
525
|
+
this.emit("degraded:change", true);
|
|
526
|
+
this.emit("error", new Error(`Degraded mode: ${reason}`));
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
/**
|
|
530
|
+
* Exit degraded mode.
|
|
531
|
+
* @internal
|
|
532
|
+
*/
|
|
533
|
+
exitDegradedMode() {
|
|
534
|
+
if (this.degraded) {
|
|
535
|
+
this.degraded = false;
|
|
536
|
+
this.emit("degraded:change", false);
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
/**
|
|
540
|
+
* Handle an error, potentially entering degraded mode.
|
|
541
|
+
* @internal
|
|
542
|
+
*/
|
|
543
|
+
handleError(error, operation) {
|
|
544
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
545
|
+
// Check if this is a connection failure
|
|
546
|
+
if (HindsightError.isHindsightError(error) && error.isUnavailable) {
|
|
547
|
+
this.enterDegradedMode(`${operation}: ${err.message}`);
|
|
548
|
+
}
|
|
549
|
+
this.emit("error", err);
|
|
550
|
+
}
|
|
551
|
+
// ============================================
|
|
552
|
+
// Utilities
|
|
553
|
+
// ============================================
|
|
554
|
+
/**
|
|
555
|
+
* Get bank information.
|
|
556
|
+
*
|
|
557
|
+
* @returns Bank info, or null if in degraded mode
|
|
558
|
+
*/
|
|
559
|
+
async getBank() {
|
|
560
|
+
this.assertInitialized();
|
|
561
|
+
if (this.degraded || !this.client) {
|
|
562
|
+
return null;
|
|
563
|
+
}
|
|
564
|
+
return this.client.getBank(this.bankId);
|
|
565
|
+
}
|
|
566
|
+
/**
|
|
567
|
+
* Get the current bank ID.
|
|
568
|
+
*/
|
|
569
|
+
getBankId() {
|
|
570
|
+
return this.bankId;
|
|
571
|
+
}
|
|
572
|
+
/**
|
|
573
|
+
* Get the project path.
|
|
574
|
+
*/
|
|
575
|
+
getProjectPath() {
|
|
576
|
+
return this.projectPath;
|
|
577
|
+
}
|
|
578
|
+
/**
|
|
579
|
+
* Check if a session is currently active.
|
|
580
|
+
*/
|
|
581
|
+
isSessionActive() {
|
|
582
|
+
return this.sessionActive;
|
|
583
|
+
}
|
|
584
|
+
/**
|
|
585
|
+
* Get the path to semantic memory file.
|
|
586
|
+
*/
|
|
587
|
+
getSemanticPath() {
|
|
588
|
+
return this.semanticPath;
|
|
589
|
+
}
|
|
590
|
+
/**
|
|
591
|
+
* Get the SemanticMemory instance.
|
|
592
|
+
*
|
|
593
|
+
* @returns SemanticMemory or null if not initialized
|
|
594
|
+
*/
|
|
595
|
+
getSemanticMemory() {
|
|
596
|
+
return this.semantic;
|
|
597
|
+
}
|
|
598
|
+
/**
|
|
599
|
+
* Get the PromotionManager instance.
|
|
600
|
+
*
|
|
601
|
+
* @returns PromotionManager or null if not initialized
|
|
602
|
+
*/
|
|
603
|
+
getPromotionManager() {
|
|
604
|
+
return this.promotionManager;
|
|
605
|
+
}
|
|
606
|
+
/**
|
|
607
|
+
* Get the session start time, or null if no session is active.
|
|
608
|
+
*/
|
|
609
|
+
getSessionStartTime() {
|
|
610
|
+
return this.sessionStartTime;
|
|
611
|
+
}
|
|
612
|
+
/**
|
|
613
|
+
* Assert that init() has been called.
|
|
614
|
+
* @internal
|
|
615
|
+
*/
|
|
616
|
+
assertInitialized() {
|
|
617
|
+
if (!this.initialized) {
|
|
618
|
+
throw new Error("Mind not initialized. Call init() first.");
|
|
619
|
+
}
|
|
620
|
+
}
|
|
621
|
+
/**
|
|
622
|
+
* Format recent memories as context string.
|
|
623
|
+
* @internal
|
|
624
|
+
*/
|
|
625
|
+
formatRecentMemories(memories) {
|
|
626
|
+
if (memories.length === 0)
|
|
627
|
+
return "";
|
|
628
|
+
const lines = ["### Recent Context"];
|
|
629
|
+
for (const mem of memories.slice(0, 5)) {
|
|
630
|
+
const date = new Date(mem.createdAt).toLocaleDateString();
|
|
631
|
+
const text = mem.text.length > 100 ? `${mem.text.slice(0, 100)}...` : mem.text;
|
|
632
|
+
lines.push(`- ${date}: ${text}`);
|
|
633
|
+
}
|
|
634
|
+
return lines.join("\n");
|
|
635
|
+
}
|
|
636
|
+
}
|
|
637
|
+
//# sourceMappingURL=mind.js.map
|
package/dist/mind.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mind.js","sourceRoot":"","sources":["../src/mind.ts"],"names":[],"mappings":"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"}
|