@haisto/opencode-mem 2.14.3-beta.5 → 2.14.3-beta.6

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.
@@ -1 +1 @@
1
- {"version":3,"file":"google-gemini.d.ts","sourceRoot":"","sources":["../../../../src/services/ai/providers/google-gemini.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAIlE;;;GAGG;AACH,qBAAa,oBAAqB,SAAQ,cAAc;IACtD,OAAO,CAAC,gBAAgB,CAAmB;gBAE/B,MAAM,EAAE,GAAG,EAAE,gBAAgB,EAAE,gBAAgB;IAK3D,eAAe,IAAI,MAAM;IAIzB,eAAe,IAAI,OAAO;IAI1B,OAAO,CAAC,eAAe;IA4BjB,eAAe,CACnB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,kBAAkB,EAC9B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,cAAc,CAAC;CA2N3B"}
1
+ {"version":3,"file":"google-gemini.d.ts","sourceRoot":"","sources":["../../../../src/services/ai/providers/google-gemini.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAIlE;;;GAGG;AACH,qBAAa,oBAAqB,SAAQ,cAAc;IACtD,OAAO,CAAC,gBAAgB,CAAmB;gBAE/B,MAAM,EAAE,GAAG,EAAE,gBAAgB,EAAE,gBAAgB;IAK3D,eAAe,IAAI,MAAM;IAIzB,eAAe,IAAI,OAAO;IAI1B,OAAO,CAAC,eAAe;IA4BjB,eAAe,CACnB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,kBAAkB,EAC9B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,cAAc,CAAC;CAiO3B"}
@@ -193,6 +193,15 @@ export class GoogleGeminiProvider extends BaseAIProvider {
193
193
  if (toolCall.function.name === toolSchema.function.name) {
194
194
  try {
195
195
  const parsed = JSON.parse(toolCall.function.arguments);
196
+ // Recover when the model double-encodes arrays as JSON strings
197
+ for (const key of ["preferences", "patterns", "workflows"]) {
198
+ if (typeof parsed[key] === "string") {
199
+ try {
200
+ parsed[key] = JSON.parse(parsed[key]);
201
+ }
202
+ catch { /* keep as-is */ }
203
+ }
204
+ }
196
205
  const result = UserProfileValidator.validate(parsed);
197
206
  if (!result.valid)
198
207
  throw new Error(result.errors.join(", "));
@@ -202,13 +211,13 @@ export class GoogleGeminiProvider extends BaseAIProvider {
202
211
  catch (validationError) {
203
212
  const errorMessage = `Validation failed: ${String(validationError)}`;
204
213
  this.addToolResponse(session.id, contents, toolCall.id, JSON.stringify({ success: false, error: errorMessage }));
205
- return { success: false, error: errorMessage, iterations };
214
+ break;
206
215
  }
207
216
  }
208
217
  }
209
218
  }
210
219
  // Retry if no tool call was made
211
- const retryPrompt = "Please use the save_memories tool as instructed.";
220
+ const retryPrompt = `Please use the ${toolSchema.function.name} tool as instructed.`;
212
221
  const retrySequence = this.aiSessionManager.getLastSequence(session.id) + 1;
213
222
  this.aiSessionManager.addMessage({
214
223
  aiSessionId: session.id,
@@ -1 +1 @@
1
- {"version":3,"file":"openai-chat-completion.d.ts","sourceRoot":"","sources":["../../../../src/services/ai/providers/openai-chat-completion.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,KAAK,cAAc,EACnB,KAAK,cAAc,EAEpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAgElE,qBAAa,4BAA6B,SAAQ,cAAc;IAC9D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;gBAExC,MAAM,EAAE,cAAc,EAAE,gBAAgB,EAAE,gBAAgB;IAKtE,eAAe,IAAI,MAAM;IAIzB,eAAe,IAAI,OAAO;IAI1B,OAAO,CAAC,eAAe;IAqBvB,SAAS,CAAC,iCAAiC,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE;IAwCzE,eAAe,CACnB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,kBAAkB,EAC9B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,cAAc,CAAC;CAmS3B"}
1
+ {"version":3,"file":"openai-chat-completion.d.ts","sourceRoot":"","sources":["../../../../src/services/ai/providers/openai-chat-completion.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,KAAK,cAAc,EACnB,KAAK,cAAc,EAEpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAgElE,qBAAa,4BAA6B,SAAQ,cAAc;IAC9D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;gBAExC,MAAM,EAAE,cAAc,EAAE,gBAAgB,EAAE,gBAAgB;IAKtE,eAAe,IAAI,MAAM;IAIzB,eAAe,IAAI,OAAO;IAI1B,OAAO,CAAC,eAAe;IAqBvB,SAAS,CAAC,iCAAiC,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE;IAwCzE,eAAe,CACnB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,kBAAkB,EAC9B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,cAAc,CAAC;CAoS3B"}
@@ -245,7 +245,16 @@ export class OpenAIChatCompletionProvider extends BaseAIProvider {
245
245
  const toolCallId = toolCall.id;
246
246
  if (toolCall.function.name === toolSchema.function.name) {
247
247
  try {
248
- const parsed = JSON.parse(toolCall.function.arguments);
248
+ let parsed = JSON.parse(toolCall.function.arguments);
249
+ // Recover when the model double-encodes arrays as JSON strings
250
+ for (const key of ["preferences", "patterns", "workflows"]) {
251
+ if (typeof parsed[key] === "string") {
252
+ try {
253
+ parsed[key] = JSON.parse(parsed[key]);
254
+ }
255
+ catch { /* keep as-is */ }
256
+ }
257
+ }
249
258
  const result = UserProfileValidator.validate(parsed);
250
259
  if (!result.valid) {
251
260
  throw new Error(result.errors.join(", "));
@@ -271,11 +280,7 @@ export class OpenAIChatCompletionProvider extends BaseAIProvider {
271
280
  });
272
281
  const errorMessage = `Validation failed: ${String(validationError)}`;
273
282
  this.addToolResponse(session.id, messages, toolCallId, JSON.stringify({ success: false, error: errorMessage }));
274
- return {
275
- success: false,
276
- error: errorMessage,
277
- iterations,
278
- };
283
+ break;
279
284
  }
280
285
  }
281
286
  const wrongToolMessage = `Wrong tool called. Please use ${toolSchema.function.name} instead.`;
@@ -284,7 +289,7 @@ export class OpenAIChatCompletionProvider extends BaseAIProvider {
284
289
  }
285
290
  }
286
291
  const retrySequence = this.aiSessionManager.getLastSequence(session.id) + 1;
287
- const retryPrompt = "Please use the save_memories tool to extract and save the memories from the conversation as instructed.";
292
+ const retryPrompt = `Please use the ${toolSchema.function.name} tool as instructed.`;
288
293
  this.aiSessionManager.addMessage({
289
294
  aiSessionId: session.id,
290
295
  sequence: retrySequence,
@@ -1 +1 @@
1
- {"version":3,"file":"openai-responses.d.ts","sourceRoot":"","sources":["../../../../src/services/ai/providers/openai-responses.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,KAAK,cAAc,EAAwB,MAAM,oBAAoB,CAAC;AAC/F,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAuB,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAsBvF,qBAAa,uBAAwB,SAAQ,cAAc;IACzD,OAAO,CAAC,gBAAgB,CAAmB;gBAE/B,MAAM,EAAE,GAAG,EAAE,gBAAgB,EAAE,gBAAgB;IAK3D,eAAe,IAAI,MAAM;IAIzB,eAAe,IAAI,OAAO;IAIpB,eAAe,CACnB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,kBAAkB,EAC9B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,cAAc,CAAC;IA0H1B,OAAO,CAAC,eAAe;IA+BvB,OAAO,CAAC,gBAAgB;IAgBxB,OAAO,CAAC,gBAAgB;CAsBzB"}
1
+ {"version":3,"file":"openai-responses.d.ts","sourceRoot":"","sources":["../../../../src/services/ai/providers/openai-responses.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,KAAK,cAAc,EAAwB,MAAM,oBAAoB,CAAC;AAC/F,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAuB,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAsBvF,qBAAa,uBAAwB,SAAQ,cAAc;IACzD,OAAO,CAAC,gBAAgB,CAAmB;gBAE/B,MAAM,EAAE,GAAG,EAAE,gBAAgB,EAAE,gBAAgB;IAK3D,eAAe,IAAI,MAAM;IAIzB,eAAe,IAAI,OAAO;IAIpB,eAAe,CACnB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,kBAAkB,EAC9B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,cAAc,CAAC;IA0H1B,OAAO,CAAC,eAAe;IAqCvB,OAAO,CAAC,gBAAgB;IAgBxB,OAAO,CAAC,gBAAgB;CAsBzB"}
@@ -127,6 +127,15 @@ export class OpenAIResponsesProvider extends BaseAIProvider {
127
127
  if (item.arguments) {
128
128
  try {
129
129
  const parsed = JSON.parse(item.arguments);
130
+ // Recover when the model double-encodes arrays as JSON strings
131
+ for (const key of ["preferences", "patterns", "workflows"]) {
132
+ if (typeof parsed[key] === "string") {
133
+ try {
134
+ parsed[key] = JSON.parse(parsed[key]);
135
+ }
136
+ catch { /* keep as-is */ }
137
+ }
138
+ }
130
139
  return parsed;
131
140
  }
132
141
  catch (error) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haisto/opencode-mem",
3
- "version": "2.14.3-beta.5",
3
+ "version": "2.14.3-beta.6",
4
4
  "description": "OpenCode plugin that gives coding agents persistent memory using local vector database",
5
5
  "type": "module",
6
6
  "main": "dist/plugin.js",