@code-yeongyu/senpi-ai 2026.8.17 → 2026.8.18-2

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.
@@ -25,7 +25,8 @@ function clonePlainGraph(value, seen) {
25
25
  return value;
26
26
  const clone = Object.create(Object.getPrototypeOf(value));
27
27
  seen.set(value, clone);
28
- for (const key of Object.keys(value)) {
28
+ const enumerableSymbols = Object.getOwnPropertySymbols(value).filter((key) => Object.prototype.propertyIsEnumerable.call(value, key));
29
+ for (const key of [...Object.keys(value), ...enumerableSymbols]) {
29
30
  Object.defineProperty(clone, key, {
30
31
  value: clonePlainGraph(Reflect.get(value, key), seen),
31
32
  writable: true,
@@ -1 +1 @@
1
- {"version":3,"file":"recovery-message-snapshot.js","sourceRoot":"","sources":["../../src/tool-call-middleware/recovery-message-snapshot.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AssistantMessage, AssistantMessageEvent, ToolCall } from \"../types.ts\";\n\nfunction isPlainObject(value: object): boolean {\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn prototype === Object.prototype || prototype === null;\n}\n\nfunction clonePlainGraph<T>(value: T, seen: WeakMap<object, unknown>): T {\n\tif (typeof value !== \"object\" || value === null) return value;\n\tconst existing = seen.get(value);\n\tif (existing !== undefined) return existing as T;\n\tif (Array.isArray(value)) {\n\t\tconst clone: unknown[] = new Array(value.length);\n\t\tseen.set(value, clone);\n\t\tfor (const key of Object.keys(value)) {\n\t\t\tObject.defineProperty(clone, key, {\n\t\t\t\tvalue: clonePlainGraph(Reflect.get(value, key), seen),\n\t\t\t\twritable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\t\t\t});\n\t\t}\n\t\treturn clone as T;\n\t}\n\tif (!isPlainObject(value)) return value;\n\tconst clone = Object.create(Object.getPrototypeOf(value)) as Record<string, unknown>;\n\tseen.set(value, clone);\n\tfor (const key of Object.keys(value)) {\n\t\tObject.defineProperty(clone, key, {\n\t\t\tvalue: clonePlainGraph(Reflect.get(value, key), seen),\n\t\t\twritable: true,\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t});\n\t}\n\treturn clone as T;\n}\n\nfunction removeToolScratch(toolCall: ToolCall): void {\n\tdelete (toolCall as ToolCall & { partialJson?: string }).partialJson;\n}\n\nfunction sanitizeMessage(message: AssistantMessage): void {\n\tfor (const block of message.content) {\n\t\tif (block.type === \"toolCall\") removeToolScratch(block);\n\t}\n}\n\n/** Deep-clones enumerable plain message/event state while retaining exotic values by reference. */\nexport function snapshotRecoveryEvent(event: AssistantMessageEvent): AssistantMessageEvent {\n\tconst snapshot = clonePlainGraph(event, new WeakMap());\n\tif (snapshot.type === \"done\") sanitizeMessage(snapshot.message);\n\telse if (snapshot.type === \"error\") sanitizeMessage(snapshot.error);\n\telse {\n\t\tsanitizeMessage(snapshot.partial);\n\t\tif (snapshot.type === \"toolcall_end\") removeToolScratch(snapshot.toolCall);\n\t}\n\treturn snapshot;\n}\n"]}
1
+ {"version":3,"file":"recovery-message-snapshot.js","sourceRoot":"","sources":["../../src/tool-call-middleware/recovery-message-snapshot.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AssistantMessage, AssistantMessageEvent, ToolCall } from \"../types.ts\";\n\nfunction isPlainObject(value: object): boolean {\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn prototype === Object.prototype || prototype === null;\n}\n\nfunction clonePlainGraph<T>(value: T, seen: WeakMap<object, unknown>): T {\n\tif (typeof value !== \"object\" || value === null) return value;\n\tconst existing = seen.get(value);\n\tif (existing !== undefined) return existing as T;\n\tif (Array.isArray(value)) {\n\t\tconst clone: unknown[] = new Array(value.length);\n\t\tseen.set(value, clone);\n\t\tfor (const key of Object.keys(value)) {\n\t\t\tObject.defineProperty(clone, key, {\n\t\t\t\tvalue: clonePlainGraph(Reflect.get(value, key), seen),\n\t\t\t\twritable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\t\t\t});\n\t\t}\n\t\treturn clone as T;\n\t}\n\tif (!isPlainObject(value)) return value;\n\tconst clone = Object.create(Object.getPrototypeOf(value)) as Record<PropertyKey, unknown>;\n\tseen.set(value, clone);\n\tconst enumerableSymbols = Object.getOwnPropertySymbols(value).filter((key) =>\n\t\tObject.prototype.propertyIsEnumerable.call(value, key),\n\t);\n\tfor (const key of [...Object.keys(value), ...enumerableSymbols]) {\n\t\tObject.defineProperty(clone, key, {\n\t\t\tvalue: clonePlainGraph(Reflect.get(value, key), seen),\n\t\t\twritable: true,\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t});\n\t}\n\treturn clone as T;\n}\n\nfunction removeToolScratch(toolCall: ToolCall): void {\n\tdelete (toolCall as ToolCall & { partialJson?: string }).partialJson;\n}\n\nfunction sanitizeMessage(message: AssistantMessage): void {\n\tfor (const block of message.content) {\n\t\tif (block.type === \"toolCall\") removeToolScratch(block);\n\t}\n}\n\n/** Deep-clones enumerable plain message/event state while retaining exotic values by reference. */\nexport function snapshotRecoveryEvent(event: AssistantMessageEvent): AssistantMessageEvent {\n\tconst snapshot = clonePlainGraph(event, new WeakMap());\n\tif (snapshot.type === \"done\") sanitizeMessage(snapshot.message);\n\telse if (snapshot.type === \"error\") sanitizeMessage(snapshot.error);\n\telse {\n\t\tsanitizeMessage(snapshot.partial);\n\t\tif (snapshot.type === \"toolcall_end\") removeToolScratch(snapshot.toolCall);\n\t}\n\treturn snapshot;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/senpi-ai",
3
- "version": "2026.8.17",
3
+ "version": "2026.8.18-2",
4
4
  "description": "Unified LLM API with automatic model discovery and provider configuration",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -73,7 +73,7 @@
73
73
  "@anthropic-ai/sdk": "0.91.1",
74
74
  "@aws-sdk/client-bedrock-runtime": "3.1095.0",
75
75
  "@bufbuild/protobuf": "2.13.0",
76
- "@earendil-works/pi-telemetry": "npm:@code-yeongyu/senpi-telemetry@2026.8.17",
76
+ "@earendil-works/pi-telemetry": "npm:@code-yeongyu/senpi-telemetry@2026.8.18-2",
77
77
  "@google/genai": "2.13.0",
78
78
  "@mistralai/mistralai": "2.5.0",
79
79
  "@opentelemetry/api": "1.9.1",