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/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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"}
|
package/dist/errors.d.ts
ADDED
|
@@ -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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"}
|