@vectorize-io/hindsight-client 0.0.11

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 (87) hide show
  1. package/README.md +57 -0
  2. package/dist/generated/client/client.gen.d.ts +3 -0
  3. package/dist/generated/client/client.gen.d.ts.map +1 -0
  4. package/dist/generated/client/client.gen.js +233 -0
  5. package/dist/generated/client/client.gen.js.map +1 -0
  6. package/dist/generated/client/index.d.ts +9 -0
  7. package/dist/generated/client/index.d.ts.map +1 -0
  8. package/dist/generated/client/index.js +18 -0
  9. package/dist/generated/client/index.js.map +1 -0
  10. package/dist/generated/client/types.gen.d.ts +118 -0
  11. package/dist/generated/client/types.gen.d.ts.map +1 -0
  12. package/dist/generated/client/types.gen.js +4 -0
  13. package/dist/generated/client/types.gen.js.map +1 -0
  14. package/dist/generated/client/utils.gen.d.ts +34 -0
  15. package/dist/generated/client/utils.gen.d.ts.map +1 -0
  16. package/dist/generated/client/utils.gen.js +245 -0
  17. package/dist/generated/client/utils.gen.js.map +1 -0
  18. package/dist/generated/client.gen.d.ts +13 -0
  19. package/dist/generated/client.gen.d.ts.map +1 -0
  20. package/dist/generated/client.gen.js +7 -0
  21. package/dist/generated/client.gen.js.map +1 -0
  22. package/dist/generated/core/auth.gen.d.ts +19 -0
  23. package/dist/generated/core/auth.gen.d.ts.map +1 -0
  24. package/dist/generated/core/auth.gen.js +19 -0
  25. package/dist/generated/core/auth.gen.js.map +1 -0
  26. package/dist/generated/core/bodySerializer.gen.d.ts +26 -0
  27. package/dist/generated/core/bodySerializer.gen.d.ts.map +1 -0
  28. package/dist/generated/core/bodySerializer.gen.js +61 -0
  29. package/dist/generated/core/bodySerializer.gen.js.map +1 -0
  30. package/dist/generated/core/params.gen.d.ts +44 -0
  31. package/dist/generated/core/params.gen.d.ts.map +1 -0
  32. package/dist/generated/core/params.gen.js +105 -0
  33. package/dist/generated/core/params.gen.js.map +1 -0
  34. package/dist/generated/core/pathSerializer.gen.d.ts +34 -0
  35. package/dist/generated/core/pathSerializer.gen.d.ts.map +1 -0
  36. package/dist/generated/core/pathSerializer.gen.js +124 -0
  37. package/dist/generated/core/pathSerializer.gen.js.map +1 -0
  38. package/dist/generated/core/queryKeySerializer.gen.d.ts +19 -0
  39. package/dist/generated/core/queryKeySerializer.gen.d.ts.map +1 -0
  40. package/dist/generated/core/queryKeySerializer.gen.js +106 -0
  41. package/dist/generated/core/queryKeySerializer.gen.js.map +1 -0
  42. package/dist/generated/core/serverSentEvents.gen.d.ts +72 -0
  43. package/dist/generated/core/serverSentEvents.gen.d.ts.map +1 -0
  44. package/dist/generated/core/serverSentEvents.gen.js +140 -0
  45. package/dist/generated/core/serverSentEvents.gen.js.map +1 -0
  46. package/dist/generated/core/types.gen.d.ts +79 -0
  47. package/dist/generated/core/types.gen.d.ts.map +1 -0
  48. package/dist/generated/core/types.gen.js +4 -0
  49. package/dist/generated/core/types.gen.js.map +1 -0
  50. package/dist/generated/core/utils.gen.d.ts +20 -0
  51. package/dist/generated/core/utils.gen.d.ts.map +1 -0
  52. package/dist/generated/core/utils.gen.js +94 -0
  53. package/dist/generated/core/utils.gen.js.map +1 -0
  54. package/dist/generated/index.d.ts +3 -0
  55. package/dist/generated/index.d.ts.map +1 -0
  56. package/dist/generated/index.js +19 -0
  57. package/dist/generated/index.js.map +1 -0
  58. package/dist/generated/sdk.gen.d.ts +200 -0
  59. package/dist/generated/sdk.gen.d.ts.map +1 -0
  60. package/dist/generated/sdk.gen.js +254 -0
  61. package/dist/generated/sdk.gen.js.map +1 -0
  62. package/dist/generated/types.gen.d.ts +1437 -0
  63. package/dist/generated/types.gen.d.ts.map +1 -0
  64. package/dist/generated/types.gen.js +4 -0
  65. package/dist/generated/types.gen.js.map +1 -0
  66. package/dist/src/index.d.ts +100 -0
  67. package/dist/src/index.d.ts.map +1 -0
  68. package/dist/src/index.js +216 -0
  69. package/dist/src/index.js.map +1 -0
  70. package/generated/client/client.gen.ts +301 -0
  71. package/generated/client/index.ts +25 -0
  72. package/generated/client/types.gen.ts +241 -0
  73. package/generated/client/utils.gen.ts +332 -0
  74. package/generated/client.gen.ts +16 -0
  75. package/generated/core/auth.gen.ts +42 -0
  76. package/generated/core/bodySerializer.gen.ts +100 -0
  77. package/generated/core/params.gen.ts +176 -0
  78. package/generated/core/pathSerializer.gen.ts +181 -0
  79. package/generated/core/queryKeySerializer.gen.ts +136 -0
  80. package/generated/core/serverSentEvents.gen.ts +264 -0
  81. package/generated/core/types.gen.ts +118 -0
  82. package/generated/core/utils.gen.ts +143 -0
  83. package/generated/index.ts +4 -0
  84. package/generated/sdk.gen.ts +267 -0
  85. package/generated/types.gen.ts +1577 -0
  86. package/package.json +42 -0
  87. package/src/index.ts +273 -0
package/package.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "@vectorize-io/hindsight-client",
3
+ "version": "0.0.11",
4
+ "description": "TypeScript client for Hindsight - Semantic memory system with personality-driven thinking",
5
+ "main": "./dist/src/index.js",
6
+ "types": "./dist/src/index.d.ts",
7
+ "scripts": {
8
+ "build": "tsc",
9
+ "clean": "rm -rf dist",
10
+ "generate": "npx @hey-api/openapi-ts",
11
+ "prepublishOnly": "npm run build",
12
+ "test": "jest"
13
+ },
14
+ "keywords": [
15
+ "hindsight",
16
+ "memory",
17
+ "api",
18
+ "client",
19
+ "typescript"
20
+ ],
21
+ "author": "Hindsight Team",
22
+ "license": "MIT",
23
+ "repository": {
24
+ "type": "git",
25
+ "url": "https://github.com/nicoloboschi/hindsight.git",
26
+ "directory": "hindsight-clients/typescript"
27
+ },
28
+ "devDependencies": {
29
+ "@hey-api/openapi-ts": "^0.88.0",
30
+ "@types/jest": "^29.0.0",
31
+ "@types/node": "^20.0.0",
32
+ "jest": "^29.0.0",
33
+ "ts-jest": "^29.0.0",
34
+ "typescript": "^5.0.0"
35
+ },
36
+ "files": [
37
+ "dist",
38
+ "src",
39
+ "generated",
40
+ "README.md"
41
+ ]
42
+ }
package/src/index.ts ADDED
@@ -0,0 +1,273 @@
1
+ /**
2
+ * Hindsight Client - Clean, TypeScript SDK for the Hindsight API.
3
+ *
4
+ * Example:
5
+ * ```typescript
6
+ * import { HindsightClient } from '@hindsight/client';
7
+ *
8
+ * const client = new HindsightClient({ baseUrl: 'http://localhost:8888' });
9
+ *
10
+ * // Retain a memory
11
+ * await client.retain('alice', 'Alice loves AI');
12
+ *
13
+ * // Recall memories
14
+ * const results = await client.recall('alice', 'What does Alice like?');
15
+ *
16
+ * // Generate contextual answer
17
+ * const answer = await client.reflect('alice', 'What are my interests?');
18
+ * ```
19
+ */
20
+
21
+ import { createClient, createConfig } from '../generated/client';
22
+ import type { Client } from '../generated/client';
23
+ import * as sdk from '../generated/sdk.gen';
24
+ import type {
25
+ RetainRequest,
26
+ RetainResponse,
27
+ RecallRequest,
28
+ RecallResponse,
29
+ RecallResult,
30
+ ReflectRequest,
31
+ ReflectResponse,
32
+ ListMemoryUnitsResponse,
33
+ BankProfileResponse,
34
+ CreateBankRequest,
35
+ Budget,
36
+ } from '../generated/types.gen';
37
+
38
+ export interface HindsightClientOptions {
39
+ baseUrl: string;
40
+ }
41
+
42
+ export interface MemoryItemInput {
43
+ content: string;
44
+ timestamp?: string | Date;
45
+ context?: string;
46
+ metadata?: Record<string, string>;
47
+ document_id?: string;
48
+ }
49
+
50
+ export class HindsightClient {
51
+ private client: Client;
52
+
53
+ constructor(options: HindsightClientOptions) {
54
+ this.client = createClient(
55
+ createConfig({
56
+ baseUrl: options.baseUrl,
57
+ })
58
+ );
59
+ }
60
+
61
+ /**
62
+ * Retain a single memory for a bank.
63
+ */
64
+ async retain(
65
+ bankId: string,
66
+ content: string,
67
+ options?: { timestamp?: Date | string; context?: string; metadata?: Record<string, string> }
68
+ ): Promise<RetainResponse> {
69
+ const item: { content: string; timestamp?: string; context?: string; metadata?: Record<string, string> } = { content };
70
+ if (options?.timestamp) {
71
+ item.timestamp =
72
+ options.timestamp instanceof Date
73
+ ? options.timestamp.toISOString()
74
+ : options.timestamp;
75
+ }
76
+ if (options?.context) {
77
+ item.context = options.context;
78
+ }
79
+ if (options?.metadata) {
80
+ item.metadata = options.metadata;
81
+ }
82
+
83
+ const response = await sdk.retainMemories({
84
+ client: this.client,
85
+ path: { bank_id: bankId },
86
+ body: { items: [item] },
87
+ });
88
+
89
+ return response.data!;
90
+ }
91
+
92
+ /**
93
+ * Retain multiple memories in batch.
94
+ */
95
+ async retainBatch(bankId: string, items: MemoryItemInput[], options?: { documentId?: string; async?: boolean }): Promise<RetainResponse> {
96
+ const processedItems = items.map((item) => ({
97
+ content: item.content,
98
+ context: item.context,
99
+ metadata: item.metadata,
100
+ document_id: item.document_id,
101
+ timestamp:
102
+ item.timestamp instanceof Date
103
+ ? item.timestamp.toISOString()
104
+ : item.timestamp,
105
+ }));
106
+
107
+ // If documentId is provided at the batch level, add it to all items that don't have one
108
+ const itemsWithDocId = processedItems.map(item => ({
109
+ ...item,
110
+ document_id: item.document_id || options?.documentId
111
+ }));
112
+
113
+ const response = await sdk.retainMemories({
114
+ client: this.client,
115
+ path: { bank_id: bankId },
116
+ body: {
117
+ items: itemsWithDocId,
118
+ async: options?.async,
119
+ },
120
+ });
121
+
122
+ return response.data!;
123
+ }
124
+
125
+ /**
126
+ * Recall memories with a natural language query.
127
+ * Returns a simplified list of recall results.
128
+ */
129
+ async recall(
130
+ bankId: string,
131
+ query: string,
132
+ options?: { maxTokens?: number; budget?: Budget }
133
+ ): Promise<RecallResult[]> {
134
+ const response = await sdk.recallMemories({
135
+ client: this.client,
136
+ path: { bank_id: bankId },
137
+ body: {
138
+ query,
139
+ max_tokens: options?.maxTokens,
140
+ budget: options?.budget || 'mid',
141
+ },
142
+ });
143
+
144
+ return response.data?.results ?? [];
145
+ }
146
+
147
+ /**
148
+ * Recall memories with full options and response.
149
+ */
150
+ async recallMemories(
151
+ bankId: string,
152
+ options: {
153
+ query: string;
154
+ types?: string[];
155
+ maxTokens?: number;
156
+ trace?: boolean;
157
+ budget?: Budget;
158
+ }
159
+ ): Promise<RecallResponse> {
160
+ const response = await sdk.recallMemories({
161
+ client: this.client,
162
+ path: { bank_id: bankId },
163
+ body: {
164
+ query: options.query,
165
+ types: options.types,
166
+ max_tokens: options.maxTokens,
167
+ trace: options.trace,
168
+ budget: options.budget || 'mid',
169
+ },
170
+ });
171
+
172
+ if (!response.data) {
173
+ console.error('recallMemories: No data in response', { response, error: response.error });
174
+ throw new Error(`API returned no data: ${JSON.stringify(response.error || 'Unknown error')}`);
175
+ }
176
+
177
+ return response.data;
178
+ }
179
+
180
+ /**
181
+ * Reflect and generate a contextual answer using the bank's identity and memories.
182
+ */
183
+ async reflect(
184
+ bankId: string,
185
+ query: string,
186
+ options?: { context?: string; budget?: Budget }
187
+ ): Promise<ReflectResponse> {
188
+ const response = await sdk.reflect({
189
+ client: this.client,
190
+ path: { bank_id: bankId },
191
+ body: {
192
+ query,
193
+ context: options?.context,
194
+ budget: options?.budget || 'low',
195
+ },
196
+ });
197
+
198
+ return response.data!;
199
+ }
200
+
201
+ /**
202
+ * List memories with pagination.
203
+ */
204
+ async listMemories(
205
+ bankId: string,
206
+ options?: { limit?: number; offset?: number; type?: string; q?: string }
207
+ ): Promise<ListMemoryUnitsResponse> {
208
+ const response = await sdk.listMemories({
209
+ client: this.client,
210
+ path: { bank_id: bankId },
211
+ query: {
212
+ limit: options?.limit,
213
+ offset: options?.offset,
214
+ type: options?.type,
215
+ q: options?.q,
216
+ },
217
+ });
218
+
219
+ return response.data!;
220
+ }
221
+
222
+ /**
223
+ * Create or update a bank with personality and background.
224
+ */
225
+ async createBank(
226
+ bankId: string,
227
+ options: { name?: string; background?: string; personality?: any }
228
+ ): Promise<BankProfileResponse> {
229
+ const response = await sdk.createOrUpdateBank({
230
+ client: this.client,
231
+ path: { bank_id: bankId },
232
+ body: {
233
+ name: options.name,
234
+ background: options.background,
235
+ personality: options.personality,
236
+ },
237
+ });
238
+
239
+ return response.data!;
240
+ }
241
+
242
+ /**
243
+ * Get a bank's profile.
244
+ */
245
+ async getBankProfile(bankId: string): Promise<BankProfileResponse> {
246
+ const response = await sdk.getBankProfile({
247
+ client: this.client,
248
+ path: { bank_id: bankId },
249
+ });
250
+
251
+ return response.data!;
252
+ }
253
+ }
254
+
255
+ // Re-export types for convenience
256
+ export type {
257
+ RetainRequest,
258
+ RetainResponse,
259
+ RecallRequest,
260
+ RecallResponse,
261
+ RecallResult,
262
+ ReflectRequest,
263
+ ReflectResponse,
264
+ ListMemoryUnitsResponse,
265
+ BankProfileResponse,
266
+ CreateBankRequest,
267
+ Budget,
268
+ };
269
+
270
+ // Also export low-level SDK functions for advanced usage
271
+ export * as sdk from '../generated/sdk.gen';
272
+ export { createClient, createConfig } from '../generated/client';
273
+ export type { Client } from '../generated/client';