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/config.js ADDED
@@ -0,0 +1,264 @@
1
+ /**
2
+ * Configuration loading for claude-cognitive.
3
+ * @module config
4
+ */
5
+ import { readFile } from "node:fs/promises";
6
+ import { join } from "node:path";
7
+ /**
8
+ * Default configuration values.
9
+ */
10
+ const DEFAULT_CONFIG = {
11
+ hindsight: {
12
+ host: "localhost",
13
+ port: 8888,
14
+ timeout: 10000,
15
+ },
16
+ semantic: {
17
+ path: ".claude/memory.md",
18
+ },
19
+ };
20
+ /**
21
+ * Check if a value is a plain object (not array, null, etc.).
22
+ * @internal
23
+ */
24
+ function isPlainObject(value) {
25
+ return typeof value === "object" && value !== null && !Array.isArray(value);
26
+ }
27
+ /**
28
+ * Deep merge configuration objects.
29
+ * @internal
30
+ */
31
+ function mergeConfig(target, source) {
32
+ const result = {
33
+ hindsight: { ...target.hindsight },
34
+ };
35
+ // Copy optional fields from target only if defined
36
+ if (target.semantic !== undefined) {
37
+ result.semantic = { ...target.semantic };
38
+ }
39
+ if (target.bankId !== undefined) {
40
+ result.bankId = target.bankId;
41
+ }
42
+ if (target.disposition !== undefined) {
43
+ result.disposition = target.disposition;
44
+ }
45
+ if (target.background !== undefined) {
46
+ result.background = target.background;
47
+ }
48
+ // Merge hindsight settings
49
+ if (source.hindsight) {
50
+ if (source.hindsight.host !== undefined) {
51
+ result.hindsight.host = source.hindsight.host;
52
+ }
53
+ if (source.hindsight.port !== undefined) {
54
+ result.hindsight.port = source.hindsight.port;
55
+ }
56
+ if (source.hindsight.apiKey !== undefined) {
57
+ result.hindsight.apiKey = source.hindsight.apiKey;
58
+ }
59
+ if (source.hindsight.timeout !== undefined) {
60
+ result.hindsight.timeout = source.hindsight.timeout;
61
+ }
62
+ }
63
+ // Merge semantic settings
64
+ if (source.semantic) {
65
+ if (!result.semantic) {
66
+ result.semantic = { path: ".claude/memory.md" };
67
+ }
68
+ if (source.semantic.path !== undefined) {
69
+ result.semantic.path = source.semantic.path;
70
+ }
71
+ }
72
+ // Merge top-level optional fields
73
+ if (source.bankId !== undefined) {
74
+ result.bankId = source.bankId;
75
+ }
76
+ if (source.disposition !== undefined) {
77
+ result.disposition = source.disposition;
78
+ }
79
+ if (source.background !== undefined) {
80
+ result.background = source.background;
81
+ }
82
+ return result;
83
+ }
84
+ /**
85
+ * Safely read and parse a JSON file.
86
+ * Returns undefined if file doesn't exist or is invalid JSON.
87
+ * @internal
88
+ */
89
+ async function readJsonFile(path) {
90
+ try {
91
+ const content = await readFile(path, "utf-8");
92
+ return JSON.parse(content);
93
+ }
94
+ catch {
95
+ return undefined;
96
+ }
97
+ }
98
+ /**
99
+ * Load configuration from package.json "claudemind" key.
100
+ * @internal
101
+ */
102
+ async function loadPackageJsonConfig(projectPath) {
103
+ const pkgPath = join(projectPath, "package.json");
104
+ const pkg = await readJsonFile(pkgPath);
105
+ if (isPlainObject(pkg) && isPlainObject(pkg["claudemind"])) {
106
+ return pkg["claudemind"];
107
+ }
108
+ return undefined;
109
+ }
110
+ /**
111
+ * Load configuration from .claudemindrc file.
112
+ * @internal
113
+ */
114
+ async function loadRcConfig(projectPath) {
115
+ const rcPath = join(projectPath, ".claudemindrc");
116
+ const rc = await readJsonFile(rcPath);
117
+ if (isPlainObject(rc)) {
118
+ return rc;
119
+ }
120
+ return undefined;
121
+ }
122
+ /**
123
+ * Apply environment variable overrides to config.
124
+ * @internal
125
+ */
126
+ function applyEnvConfig(config) {
127
+ const result = {
128
+ hindsight: { ...config.hindsight },
129
+ };
130
+ // Copy optional fields from config only if defined
131
+ if (config.semantic !== undefined) {
132
+ result.semantic = { ...config.semantic };
133
+ }
134
+ if (config.bankId !== undefined) {
135
+ result.bankId = config.bankId;
136
+ }
137
+ if (config.disposition !== undefined) {
138
+ result.disposition = config.disposition;
139
+ }
140
+ if (config.background !== undefined) {
141
+ result.background = config.background;
142
+ }
143
+ // Hindsight connection settings
144
+ const host = process.env["HINDSIGHT_HOST"];
145
+ if (host) {
146
+ result.hindsight.host = host;
147
+ }
148
+ const port = process.env["HINDSIGHT_PORT"];
149
+ if (port) {
150
+ const parsed = parseInt(port, 10);
151
+ if (!isNaN(parsed) && parsed > 0 && parsed < 65536) {
152
+ result.hindsight.port = parsed;
153
+ }
154
+ }
155
+ const apiKey = process.env["HINDSIGHT_API_KEY"];
156
+ if (apiKey) {
157
+ result.hindsight.apiKey = apiKey;
158
+ }
159
+ // Bank settings
160
+ const bankId = process.env["CLAUDEMIND_BANK_ID"];
161
+ if (bankId) {
162
+ result.bankId = bankId;
163
+ }
164
+ return result;
165
+ }
166
+ /**
167
+ * Validate disposition values are in valid range.
168
+ * @internal
169
+ */
170
+ function validateDisposition(disposition) {
171
+ if (!isPlainObject(disposition)) {
172
+ return false;
173
+ }
174
+ const traits = ["skepticism", "literalism", "empathy"];
175
+ for (const trait of traits) {
176
+ const value = disposition[trait];
177
+ if (typeof value !== "number" ||
178
+ !Number.isInteger(value) ||
179
+ value < 1 ||
180
+ value > 5) {
181
+ return false;
182
+ }
183
+ }
184
+ return true;
185
+ }
186
+ /**
187
+ * Clone a configuration object.
188
+ * @internal
189
+ */
190
+ function cloneConfig(config) {
191
+ const result = {
192
+ hindsight: { ...config.hindsight },
193
+ };
194
+ if (config.semantic !== undefined) {
195
+ result.semantic = { ...config.semantic };
196
+ }
197
+ if (config.bankId !== undefined) {
198
+ result.bankId = config.bankId;
199
+ }
200
+ if (config.disposition !== undefined) {
201
+ result.disposition = { ...config.disposition };
202
+ }
203
+ if (config.background !== undefined) {
204
+ result.background = config.background;
205
+ }
206
+ return result;
207
+ }
208
+ /**
209
+ * Load configuration from multiple sources with priority order:
210
+ *
211
+ * 1. Constructor overrides (highest priority)
212
+ * 2. Environment variables
213
+ * 3. .claudemindrc file
214
+ * 4. package.json "claudemind" key
215
+ * 5. Default values (lowest priority)
216
+ *
217
+ * @param projectPath - Root directory of the project (default: process.cwd())
218
+ * @param overrides - Explicit configuration overrides
219
+ * @returns Merged configuration
220
+ *
221
+ * @example
222
+ * ```typescript
223
+ * // Load from current directory with defaults
224
+ * const config = await loadConfig();
225
+ *
226
+ * // Load from specific directory with overrides
227
+ * const config = await loadConfig('/path/to/project', {
228
+ * hindsight: { host: 'hindsight.example.com' }
229
+ * });
230
+ * ```
231
+ */
232
+ export async function loadConfig(projectPath = process.cwd(), overrides) {
233
+ // Start with defaults
234
+ let config = cloneConfig(DEFAULT_CONFIG);
235
+ // Load from package.json "claudemind" key (lowest priority file config)
236
+ const pkgConfig = await loadPackageJsonConfig(projectPath);
237
+ if (pkgConfig) {
238
+ config = mergeConfig(config, pkgConfig);
239
+ }
240
+ // Load from .claudemindrc (higher priority than package.json)
241
+ const rcConfig = await loadRcConfig(projectPath);
242
+ if (rcConfig) {
243
+ config = mergeConfig(config, rcConfig);
244
+ }
245
+ // Apply environment variables (higher priority than files)
246
+ config = applyEnvConfig(config);
247
+ // Apply explicit overrides (highest priority)
248
+ if (overrides) {
249
+ config = mergeConfig(config, overrides);
250
+ }
251
+ // Validate disposition if present
252
+ if (config.disposition && !validateDisposition(config.disposition)) {
253
+ throw new Error("Invalid disposition in configuration: values must be integers between 1 and 5");
254
+ }
255
+ return config;
256
+ }
257
+ /**
258
+ * Get default configuration without loading from files.
259
+ * Useful for testing or when you want explicit control.
260
+ */
261
+ export function getDefaultConfig() {
262
+ return cloneConfig(DEFAULT_CONFIG);
263
+ }
264
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Error handling for claude-cognitive Hindsight client.
3
+ * @module errors
4
+ */
5
+ import type { HindsightErrorCode } from "./types.js";
6
+ /**
7
+ * Base error class for all Hindsight-related errors.
8
+ *
9
+ * Includes error code for programmatic handling,
10
+ * isRetryable flag for retry logic, and preserves
11
+ * cause for debugging.
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * try {
16
+ * await client.recall(bankId, query);
17
+ * } catch (error) {
18
+ * if (HindsightError.isHindsightError(error)) {
19
+ * if (error.isRetryable) {
20
+ * // Retry the operation
21
+ * }
22
+ * console.error(`Error ${error.code}: ${error.message}`);
23
+ * }
24
+ * }
25
+ * ```
26
+ */
27
+ export declare class HindsightError extends Error {
28
+ /** Error code for programmatic handling */
29
+ readonly code: HindsightErrorCode;
30
+ /** Whether this error can be retried */
31
+ readonly isRetryable: boolean;
32
+ /** HTTP status code if this was an HTTP error */
33
+ readonly statusCode?: number;
34
+ constructor(message: string, code: HindsightErrorCode, options?: {
35
+ cause?: Error;
36
+ isRetryable?: boolean;
37
+ statusCode?: number;
38
+ });
39
+ /**
40
+ * Type guard to check if an error is a HindsightError.
41
+ */
42
+ static isHindsightError(error: unknown): error is HindsightError;
43
+ /** Check if Hindsight server is unavailable */
44
+ get isUnavailable(): boolean;
45
+ /** Check if bank was not found */
46
+ get isBankNotFound(): boolean;
47
+ /** Check if this is a validation error */
48
+ get isValidationError(): boolean;
49
+ /** Check if this is a timeout error */
50
+ get isTimeout(): boolean;
51
+ }
52
+ /**
53
+ * Extract error message from an API response body.
54
+ * @internal
55
+ */
56
+ export declare function extractErrorMessage(body: unknown): string | undefined;
57
+ /**
58
+ * Parse Retry-After header value to milliseconds.
59
+ * @internal
60
+ */
61
+ export declare function parseRetryAfter(header: string | null): number | undefined;
62
+ /**
63
+ * Create a HindsightError from an HTTP response.
64
+ * @internal
65
+ */
66
+ export declare function createErrorFromResponse(response: Response, body: unknown, path: string): HindsightError;
67
+ /**
68
+ * Create a HindsightError from a network failure.
69
+ * @internal
70
+ */
71
+ export declare function createErrorFromNetworkFailure(error: Error): HindsightError;
72
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,cAAe,SAAQ,KAAK;IACvC,2CAA2C;IAC3C,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAElC,wCAAwC;IACxC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAE9B,iDAAiD;IACjD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;gBAG3B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,kBAAkB,EACxB,OAAO,GAAE;QACP,KAAK,CAAC,EAAE,KAAK,CAAC;QACd,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,UAAU,CAAC,EAAE,MAAM,CAAC;KAChB;IAeR;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc;IAIhE,+CAA+C;IAC/C,IAAI,aAAa,IAAI,OAAO,CAE3B;IAED,kCAAkC;IAClC,IAAI,cAAc,IAAI,OAAO,CAE5B;IAED,0CAA0C;IAC1C,IAAI,iBAAiB,IAAI,OAAO,CAI/B;IAED,uCAAuC;IACvC,IAAI,SAAS,IAAI,OAAO,CAEvB;CACF;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAgBrE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAmBzE;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,MAAM,GACX,cAAc,CAkFhB;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,KAAK,GAAG,cAAc,CAsC1E"}
package/dist/errors.js ADDED
@@ -0,0 +1,188 @@
1
+ /**
2
+ * Error handling for claude-cognitive Hindsight client.
3
+ * @module errors
4
+ */
5
+ /**
6
+ * Base error class for all Hindsight-related errors.
7
+ *
8
+ * Includes error code for programmatic handling,
9
+ * isRetryable flag for retry logic, and preserves
10
+ * cause for debugging.
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * try {
15
+ * await client.recall(bankId, query);
16
+ * } catch (error) {
17
+ * if (HindsightError.isHindsightError(error)) {
18
+ * if (error.isRetryable) {
19
+ * // Retry the operation
20
+ * }
21
+ * console.error(`Error ${error.code}: ${error.message}`);
22
+ * }
23
+ * }
24
+ * ```
25
+ */
26
+ export class HindsightError extends Error {
27
+ /** Error code for programmatic handling */
28
+ code;
29
+ /** Whether this error can be retried */
30
+ isRetryable;
31
+ /** HTTP status code if this was an HTTP error */
32
+ statusCode;
33
+ constructor(message, code, options = {}) {
34
+ super(message, { cause: options.cause });
35
+ // Fix prototype chain for instanceof checks
36
+ Object.setPrototypeOf(this, new.target.prototype);
37
+ this.name = "HindsightError";
38
+ this.code = code;
39
+ this.isRetryable = options.isRetryable ?? false;
40
+ if (options.statusCode !== undefined) {
41
+ this.statusCode = options.statusCode;
42
+ }
43
+ }
44
+ /**
45
+ * Type guard to check if an error is a HindsightError.
46
+ */
47
+ static isHindsightError(error) {
48
+ return error instanceof HindsightError;
49
+ }
50
+ /** Check if Hindsight server is unavailable */
51
+ get isUnavailable() {
52
+ return this.code === "HINDSIGHT_UNAVAILABLE";
53
+ }
54
+ /** Check if bank was not found */
55
+ get isBankNotFound() {
56
+ return this.code === "BANK_NOT_FOUND";
57
+ }
58
+ /** Check if this is a validation error */
59
+ get isValidationError() {
60
+ return (this.code === "VALIDATION_ERROR" || this.code === "INVALID_DISPOSITION");
61
+ }
62
+ /** Check if this is a timeout error */
63
+ get isTimeout() {
64
+ return this.code === "CONNECTION_TIMEOUT";
65
+ }
66
+ }
67
+ /**
68
+ * Extract error message from an API response body.
69
+ * @internal
70
+ */
71
+ export function extractErrorMessage(body) {
72
+ if (body === null || body === undefined) {
73
+ return undefined;
74
+ }
75
+ if (typeof body === "object") {
76
+ const obj = body;
77
+ if (typeof obj["message"] === "string") {
78
+ return obj["message"];
79
+ }
80
+ if (typeof obj["error"] === "string") {
81
+ return obj["error"];
82
+ }
83
+ }
84
+ return undefined;
85
+ }
86
+ /**
87
+ * Parse Retry-After header value to milliseconds.
88
+ * @internal
89
+ */
90
+ export function parseRetryAfter(header) {
91
+ if (!header) {
92
+ return undefined;
93
+ }
94
+ // Try parsing as seconds (integer)
95
+ const seconds = parseInt(header, 10);
96
+ if (!isNaN(seconds)) {
97
+ return seconds * 1000;
98
+ }
99
+ // Try parsing as HTTP date
100
+ const date = Date.parse(header);
101
+ if (!isNaN(date)) {
102
+ const delay = date - Date.now();
103
+ return delay > 0 ? delay : undefined;
104
+ }
105
+ return undefined;
106
+ }
107
+ /**
108
+ * Create a HindsightError from an HTTP response.
109
+ * @internal
110
+ */
111
+ export function createErrorFromResponse(response, body, path) {
112
+ const status = response.status;
113
+ const message = extractErrorMessage(body) || response.statusText || "Request failed";
114
+ switch (status) {
115
+ case 400:
116
+ return new HindsightError(`Bad request: ${message}`, "VALIDATION_ERROR", {
117
+ statusCode: status,
118
+ isRetryable: false,
119
+ });
120
+ case 401:
121
+ case 403:
122
+ return new HindsightError(`Authentication failed: ${message}`, "VALIDATION_ERROR", { statusCode: status, isRetryable: false });
123
+ case 404:
124
+ // Check if this is a bank not found error
125
+ if (path.includes("/banks/")) {
126
+ return new HindsightError(`Bank not found: ${message}`, "BANK_NOT_FOUND", {
127
+ statusCode: 404,
128
+ isRetryable: false,
129
+ });
130
+ }
131
+ return new HindsightError(`Not found: ${message}`, "VALIDATION_ERROR", {
132
+ statusCode: 404,
133
+ isRetryable: false,
134
+ });
135
+ case 422:
136
+ // Check if this is a disposition validation error
137
+ if (message.toLowerCase().includes("disposition")) {
138
+ return new HindsightError(`Invalid disposition: ${message}`, "INVALID_DISPOSITION", { statusCode: 422, isRetryable: false });
139
+ }
140
+ return new HindsightError(`Validation failed: ${message}`, "VALIDATION_ERROR", { statusCode: 422, isRetryable: false });
141
+ case 429:
142
+ return new HindsightError(`Rate limited: ${message}`, "RATE_LIMITED", {
143
+ statusCode: 429,
144
+ isRetryable: true,
145
+ });
146
+ case 500:
147
+ case 502:
148
+ case 503:
149
+ case 504:
150
+ return new HindsightError(`Server error (${status}): ${message}`, "SERVER_ERROR", { statusCode: status, isRetryable: true });
151
+ default:
152
+ if (status >= 500) {
153
+ return new HindsightError(`Server error (${status}): ${message}`, "SERVER_ERROR", { statusCode: status, isRetryable: true });
154
+ }
155
+ return new HindsightError(`HTTP error (${status}): ${message}`, "UNKNOWN_ERROR", { statusCode: status, isRetryable: false });
156
+ }
157
+ }
158
+ /**
159
+ * Create a HindsightError from a network failure.
160
+ * @internal
161
+ */
162
+ export function createErrorFromNetworkFailure(error) {
163
+ // Timeout via AbortSignal.timeout()
164
+ if (error.name === "TimeoutError") {
165
+ return new HindsightError("Request timed out", "CONNECTION_TIMEOUT", {
166
+ cause: error,
167
+ isRetryable: true,
168
+ });
169
+ }
170
+ // User-initiated abort
171
+ if (error.name === "AbortError") {
172
+ return new HindsightError("Request was cancelled", "UNKNOWN_ERROR", {
173
+ cause: error,
174
+ isRetryable: false,
175
+ });
176
+ }
177
+ // Network failure (DNS, connection refused, etc.)
178
+ const message = error.message.toLowerCase();
179
+ if (message.includes("econnrefused") ||
180
+ message.includes("enotfound") ||
181
+ message.includes("fetch failed") ||
182
+ message.includes("network")) {
183
+ return new HindsightError("Cannot connect to Hindsight server", "HINDSIGHT_UNAVAILABLE", { cause: error, isRetryable: true });
184
+ }
185
+ // Unknown error
186
+ return new HindsightError(`Network error: ${error.message}`, "HINDSIGHT_UNAVAILABLE", { cause: error, isRetryable: true });
187
+ }
188
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}