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.
Files changed (196) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +256 -0
  3. package/bin/claude-cognitive.js +9 -0
  4. package/dist/agents/context.d.ts +40 -0
  5. package/dist/agents/context.d.ts.map +1 -0
  6. package/dist/agents/context.js +144 -0
  7. package/dist/agents/context.js.map +1 -0
  8. package/dist/agents/index.d.ts +9 -0
  9. package/dist/agents/index.d.ts.map +1 -0
  10. package/dist/agents/index.js +11 -0
  11. package/dist/agents/index.js.map +1 -0
  12. package/dist/agents/loader.d.ts +48 -0
  13. package/dist/agents/loader.d.ts.map +1 -0
  14. package/dist/agents/loader.js +157 -0
  15. package/dist/agents/loader.js.map +1 -0
  16. package/dist/agents/templates.d.ts +51 -0
  17. package/dist/agents/templates.d.ts.map +1 -0
  18. package/dist/agents/templates.js +186 -0
  19. package/dist/agents/templates.js.map +1 -0
  20. package/dist/agents/types.d.ts +52 -0
  21. package/dist/agents/types.d.ts.map +1 -0
  22. package/dist/agents/types.js +6 -0
  23. package/dist/agents/types.js.map +1 -0
  24. package/dist/cli/commands/config.d.ts +10 -0
  25. package/dist/cli/commands/config.d.ts.map +1 -0
  26. package/dist/cli/commands/config.js +22 -0
  27. package/dist/cli/commands/config.js.map +1 -0
  28. package/dist/cli/commands/index.d.ts +17 -0
  29. package/dist/cli/commands/index.d.ts.map +1 -0
  30. package/dist/cli/commands/index.js +17 -0
  31. package/dist/cli/commands/index.js.map +1 -0
  32. package/dist/cli/commands/init.d.ts +10 -0
  33. package/dist/cli/commands/init.d.ts.map +1 -0
  34. package/dist/cli/commands/init.js +109 -0
  35. package/dist/cli/commands/init.js.map +1 -0
  36. package/dist/cli/commands/install.d.ts +10 -0
  37. package/dist/cli/commands/install.d.ts.map +1 -0
  38. package/dist/cli/commands/install.js +440 -0
  39. package/dist/cli/commands/install.js.map +1 -0
  40. package/dist/cli/commands/learn.d.ts +10 -0
  41. package/dist/cli/commands/learn.d.ts.map +1 -0
  42. package/dist/cli/commands/learn.js +33 -0
  43. package/dist/cli/commands/learn.js.map +1 -0
  44. package/dist/cli/commands/recall.d.ts +10 -0
  45. package/dist/cli/commands/recall.d.ts.map +1 -0
  46. package/dist/cli/commands/recall.js +52 -0
  47. package/dist/cli/commands/recall.js.map +1 -0
  48. package/dist/cli/commands/reflect.d.ts +10 -0
  49. package/dist/cli/commands/reflect.d.ts.map +1 -0
  50. package/dist/cli/commands/reflect.js +48 -0
  51. package/dist/cli/commands/reflect.js.map +1 -0
  52. package/dist/cli/commands/semantic.d.ts +10 -0
  53. package/dist/cli/commands/semantic.d.ts.map +1 -0
  54. package/dist/cli/commands/semantic.js +67 -0
  55. package/dist/cli/commands/semantic.js.map +1 -0
  56. package/dist/cli/commands/serve.d.ts +10 -0
  57. package/dist/cli/commands/serve.d.ts.map +1 -0
  58. package/dist/cli/commands/serve.js +61 -0
  59. package/dist/cli/commands/serve.js.map +1 -0
  60. package/dist/cli/commands/status.d.ts +10 -0
  61. package/dist/cli/commands/status.d.ts.map +1 -0
  62. package/dist/cli/commands/status.js +44 -0
  63. package/dist/cli/commands/status.js.map +1 -0
  64. package/dist/cli/commands/sync.d.ts +10 -0
  65. package/dist/cli/commands/sync.d.ts.map +1 -0
  66. package/dist/cli/commands/sync.js +260 -0
  67. package/dist/cli/commands/sync.js.map +1 -0
  68. package/dist/cli/commands/uninstall.d.ts +10 -0
  69. package/dist/cli/commands/uninstall.d.ts.map +1 -0
  70. package/dist/cli/commands/uninstall.js +205 -0
  71. package/dist/cli/commands/uninstall.js.map +1 -0
  72. package/dist/cli/commands/update-bank.d.ts +10 -0
  73. package/dist/cli/commands/update-bank.d.ts.map +1 -0
  74. package/dist/cli/commands/update-bank.js +129 -0
  75. package/dist/cli/commands/update-bank.js.map +1 -0
  76. package/dist/cli/index.d.ts +6 -0
  77. package/dist/cli/index.d.ts.map +1 -0
  78. package/dist/cli/index.js +56 -0
  79. package/dist/cli/index.js.map +1 -0
  80. package/dist/cli/utils/errors.d.ts +42 -0
  81. package/dist/cli/utils/errors.d.ts.map +1 -0
  82. package/dist/cli/utils/errors.js +78 -0
  83. package/dist/cli/utils/errors.js.map +1 -0
  84. package/dist/cli/utils/index.d.ts +9 -0
  85. package/dist/cli/utils/index.d.ts.map +1 -0
  86. package/dist/cli/utils/index.js +7 -0
  87. package/dist/cli/utils/index.js.map +1 -0
  88. package/dist/cli/utils/output.d.ts +90 -0
  89. package/dist/cli/utils/output.d.ts.map +1 -0
  90. package/dist/cli/utils/output.js +164 -0
  91. package/dist/cli/utils/output.js.map +1 -0
  92. package/dist/client.d.ts +200 -0
  93. package/dist/client.d.ts.map +1 -0
  94. package/dist/client.js +447 -0
  95. package/dist/client.js.map +1 -0
  96. package/dist/config.d.ts +44 -0
  97. package/dist/config.d.ts.map +1 -0
  98. package/dist/config.js +264 -0
  99. package/dist/config.js.map +1 -0
  100. package/dist/errors.d.ts +72 -0
  101. package/dist/errors.d.ts.map +1 -0
  102. package/dist/errors.js +188 -0
  103. package/dist/errors.js.map +1 -0
  104. package/dist/events.d.ts +148 -0
  105. package/dist/events.d.ts.map +1 -0
  106. package/dist/events.js +115 -0
  107. package/dist/events.js.map +1 -0
  108. package/dist/hooks/index.d.ts +7 -0
  109. package/dist/hooks/index.d.ts.map +1 -0
  110. package/dist/hooks/index.js +7 -0
  111. package/dist/hooks/index.js.map +1 -0
  112. package/dist/hooks/inject-context.d.ts +18 -0
  113. package/dist/hooks/inject-context.d.ts.map +1 -0
  114. package/dist/hooks/inject-context.js +57 -0
  115. package/dist/hooks/inject-context.js.map +1 -0
  116. package/dist/hooks/process-session.d.ts +18 -0
  117. package/dist/hooks/process-session.d.ts.map +1 -0
  118. package/dist/hooks/process-session.js +119 -0
  119. package/dist/hooks/process-session.js.map +1 -0
  120. package/dist/index.d.ts +63 -0
  121. package/dist/index.d.ts.map +1 -0
  122. package/dist/index.js +59 -0
  123. package/dist/index.js.map +1 -0
  124. package/dist/learn/analyzers/git.d.ts +62 -0
  125. package/dist/learn/analyzers/git.d.ts.map +1 -0
  126. package/dist/learn/analyzers/git.js +183 -0
  127. package/dist/learn/analyzers/git.js.map +1 -0
  128. package/dist/learn/analyzers/index.d.ts +15 -0
  129. package/dist/learn/analyzers/index.d.ts.map +1 -0
  130. package/dist/learn/analyzers/index.js +10 -0
  131. package/dist/learn/analyzers/index.js.map +1 -0
  132. package/dist/learn/analyzers/package.d.ts +57 -0
  133. package/dist/learn/analyzers/package.d.ts.map +1 -0
  134. package/dist/learn/analyzers/package.js +245 -0
  135. package/dist/learn/analyzers/package.js.map +1 -0
  136. package/dist/learn/analyzers/readme.d.ts +27 -0
  137. package/dist/learn/analyzers/readme.d.ts.map +1 -0
  138. package/dist/learn/analyzers/readme.js +163 -0
  139. package/dist/learn/analyzers/readme.js.map +1 -0
  140. package/dist/learn/analyzers/source.d.ts +70 -0
  141. package/dist/learn/analyzers/source.d.ts.map +1 -0
  142. package/dist/learn/analyzers/source.js +231 -0
  143. package/dist/learn/analyzers/source.js.map +1 -0
  144. package/dist/learn/analyzers/structure.d.ts +39 -0
  145. package/dist/learn/analyzers/structure.d.ts.map +1 -0
  146. package/dist/learn/analyzers/structure.js +172 -0
  147. package/dist/learn/analyzers/structure.js.map +1 -0
  148. package/dist/learn/extractor.d.ts +76 -0
  149. package/dist/learn/extractor.d.ts.map +1 -0
  150. package/dist/learn/extractor.js +302 -0
  151. package/dist/learn/extractor.js.map +1 -0
  152. package/dist/learn/index.d.ts +31 -0
  153. package/dist/learn/index.d.ts.map +1 -0
  154. package/dist/learn/index.js +165 -0
  155. package/dist/learn/index.js.map +1 -0
  156. package/dist/mcp/handlers.d.ts +23 -0
  157. package/dist/mcp/handlers.d.ts.map +1 -0
  158. package/dist/mcp/handlers.js +124 -0
  159. package/dist/mcp/handlers.js.map +1 -0
  160. package/dist/mcp/index.d.ts +32 -0
  161. package/dist/mcp/index.d.ts.map +1 -0
  162. package/dist/mcp/index.js +40 -0
  163. package/dist/mcp/index.js.map +1 -0
  164. package/dist/mcp/server.d.ts +79 -0
  165. package/dist/mcp/server.d.ts.map +1 -0
  166. package/dist/mcp/server.js +277 -0
  167. package/dist/mcp/server.js.map +1 -0
  168. package/dist/mcp/tools.d.ts +59 -0
  169. package/dist/mcp/tools.d.ts.map +1 -0
  170. package/dist/mcp/tools.js +43 -0
  171. package/dist/mcp/tools.js.map +1 -0
  172. package/dist/mcp/types.d.ts +65 -0
  173. package/dist/mcp/types.d.ts.map +1 -0
  174. package/dist/mcp/types.js +6 -0
  175. package/dist/mcp/types.js.map +1 -0
  176. package/dist/mind.d.ts +250 -0
  177. package/dist/mind.d.ts.map +1 -0
  178. package/dist/mind.js +637 -0
  179. package/dist/mind.js.map +1 -0
  180. package/dist/promotion.d.ts +112 -0
  181. package/dist/promotion.d.ts.map +1 -0
  182. package/dist/promotion.js +196 -0
  183. package/dist/promotion.js.map +1 -0
  184. package/dist/retry.d.ts +70 -0
  185. package/dist/retry.d.ts.map +1 -0
  186. package/dist/retry.js +122 -0
  187. package/dist/retry.js.map +1 -0
  188. package/dist/semantic.d.ts +202 -0
  189. package/dist/semantic.d.ts.map +1 -0
  190. package/dist/semantic.js +424 -0
  191. package/dist/semantic.js.map +1 -0
  192. package/dist/types.d.ts +363 -0
  193. package/dist/types.d.ts.map +1 -0
  194. package/dist/types.js +30 -0
  195. package/dist/types.js.map +1 -0
  196. 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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mind.js","sourceRoot":"","sources":["../src/mind.ts"],"names":[],"mappings":"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"}