opencode-tui-image-clipboard-fix 1.0.8 → 1.0.9

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/lib/index.js CHANGED
@@ -1,43 +1,7 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.ImageStoragePlugin = void 0;
37
- const os = __importStar(require("os"));
38
- const path = __importStar(require("path"));
39
- const storage_1 = require("./storage");
40
- const utils_1 = require("./utils");
1
+ import * as os from "os";
2
+ import * as path from "path";
3
+ import { ImageStorageManager } from "./storage.js";
4
+ import { formatSize } from "./utils.js";
41
5
  const DEFAULT_CONFIG = {
42
6
  maxStorageMB: 2048,
43
7
  minFreeSpaceMB: 512,
@@ -54,11 +18,11 @@ const messageImagePaths = new Map();
54
18
  * 3. 在发送给模型时替换 [Image N] 占位符为实际文件路径(不影响界面显示)
55
19
  * 4. 移除 FilePart,只保留文本(避免不支持图片的模型报错)
56
20
  */
57
- exports.ImageStoragePlugin = Object.assign(async ({ client, directory }) => {
21
+ export const ImageStoragePlugin = Object.assign(async ({ client, directory }) => {
58
22
  const config = {
59
23
  ...DEFAULT_CONFIG,
60
24
  };
61
- const storageManager = new storage_1.ImageStorageManager(config);
25
+ const storageManager = new ImageStorageManager(config);
62
26
  await storageManager.initialize();
63
27
  /**
64
28
  * 处理消息中的图片,保存并返回路径映射
@@ -200,7 +164,7 @@ exports.ImageStoragePlugin = Object.assign(async ({ client, directory }) => {
200
164
  const stats = await storageManager.getStats();
201
165
  console.log("=== Image Storage Stats ===");
202
166
  console.log(`Total Files: ${stats.totalFiles}`);
203
- console.log(`Total Size: ${(0, utils_1.formatSize)(stats.totalSize)}`);
167
+ console.log(`Total Size: ${formatSize(stats.totalSize)}`);
204
168
  console.log(`Oldest File: ${stats.oldestFile || "N/A"}`);
205
169
  console.log(`Newest File: ${stats.newestFile || "N/A"}`);
206
170
  console.log(`Storage Dir: ${config.storageDir}`);
@@ -213,4 +177,4 @@ exports.ImageStoragePlugin = Object.assign(async ({ client, directory }) => {
213
177
  },
214
178
  };
215
179
  }, { name: "image-clipboard-fix" });
216
- exports.default = exports.ImageStoragePlugin;
180
+ export default ImageStoragePlugin;
package/lib/storage.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { ImageMetadata, StorageStats, PluginConfig } from './types';
1
+ import { ImageMetadata, StorageStats, PluginConfig } from './types.js';
2
2
  /**
3
3
  * 图片存储管理器
4
4
  *
package/lib/storage.js CHANGED
@@ -1,42 +1,6 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.ImageStorageManager = void 0;
37
- const fs = __importStar(require("fs/promises"));
38
- const path = __importStar(require("path"));
39
- const utils_1 = require("./utils");
1
+ import * as fs from 'fs/promises';
2
+ import * as path from 'path';
3
+ import { extractImageInfo, generateHash, getImageDimensions } from './utils.js';
40
4
  /**
41
5
  * 图片存储管理器
42
6
  *
@@ -46,10 +10,12 @@ const utils_1 = require("./utils");
46
10
  * - 自动清理(LRU 策略)
47
11
  * - 元数据管理
48
12
  */
49
- class ImageStorageManager {
13
+ export class ImageStorageManager {
14
+ config;
15
+ metadataFile;
16
+ metadata = new Map();
50
17
  constructor(config) {
51
18
  this.config = config;
52
- this.metadata = new Map();
53
19
  this.metadataFile = path.join(config.storageDir, 'metadata.json');
54
20
  }
55
21
  /**
@@ -86,12 +52,12 @@ class ImageStorageManager {
86
52
  * @returns 图片元数据,如果图片已存在则返回现有元数据
87
53
  */
88
54
  async saveImage(dataUrl) {
89
- const imageInfo = (0, utils_1.extractImageInfo)(dataUrl);
55
+ const imageInfo = extractImageInfo(dataUrl);
90
56
  if (!imageInfo) {
91
57
  // Invalid data URL format
92
58
  return null;
93
59
  }
94
- const hash = (0, utils_1.generateHash)(imageInfo.base64);
60
+ const hash = generateHash(imageInfo.base64);
95
61
  // 检查是否已存在相同图片
96
62
  const existingImage = Array.from(this.metadata.values()).find(m => m.hash === hash);
97
63
  if (existingImage) {
@@ -100,7 +66,7 @@ class ImageStorageManager {
100
66
  }
101
67
  const buffer = Buffer.from(imageInfo.base64, 'base64');
102
68
  const mimeType = `image/${imageInfo.type}`;
103
- const dimensions = (0, utils_1.getImageDimensions)(buffer, mimeType);
69
+ const dimensions = getImageDimensions(buffer, mimeType);
104
70
  const timestamp = Date.now();
105
71
  const filename = `${timestamp}_${hash}.${imageInfo.type}`;
106
72
  const filepath = path.join(this.config.storageDir, filename);
@@ -200,4 +166,3 @@ class ImageStorageManager {
200
166
  return metadata.path;
201
167
  }
202
168
  }
203
- exports.ImageStorageManager = ImageStorageManager;
package/lib/types.js CHANGED
@@ -1,2 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ export {};
package/lib/utils.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { ImageInfo } from './types';
1
+ import { ImageInfo } from './types.js';
2
2
  /**
3
3
  * 格式化字节大小为人类可读格式
4
4
  */
package/lib/utils.js CHANGED
@@ -1,15 +1,8 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.formatSize = formatSize;
4
- exports.extractImageInfo = extractImageInfo;
5
- exports.generateHash = generateHash;
6
- exports.getPNGDimensions = getPNGDimensions;
7
- exports.getImageDimensions = getImageDimensions;
8
- const crypto_1 = require("crypto");
1
+ import { createHash } from 'crypto';
9
2
  /**
10
3
  * 格式化字节大小为人类可读格式
11
4
  */
12
- function formatSize(bytes) {
5
+ export function formatSize(bytes) {
13
6
  const units = ['B', 'KB', 'MB', 'GB'];
14
7
  let size = bytes;
15
8
  let unitIndex = 0;
@@ -22,7 +15,7 @@ function formatSize(bytes) {
22
15
  /**
23
16
  * 从 data URL 提取图片信息
24
17
  */
25
- function extractImageInfo(dataUrl) {
18
+ export function extractImageInfo(dataUrl) {
26
19
  const match = dataUrl.match(/^data:image\/(png|jpeg|jpg|gif|webp);base64,(.+)$/);
27
20
  if (!match)
28
21
  return null;
@@ -34,13 +27,13 @@ function extractImageInfo(dataUrl) {
34
27
  /**
35
28
  * 生成 base64 数据的哈希值
36
29
  */
37
- function generateHash(base64) {
38
- return (0, crypto_1.createHash)('sha256').update(base64).digest('hex').substring(0, 16);
30
+ export function generateHash(base64) {
31
+ return createHash('sha256').update(base64).digest('hex').substring(0, 16);
39
32
  }
40
33
  /**
41
34
  * 获取 PNG 图片尺寸
42
35
  */
43
- function getPNGDimensions(buffer) {
36
+ export function getPNGDimensions(buffer) {
44
37
  try {
45
38
  // PNG signature check
46
39
  if (buffer.toString('hex', 0, 8) !== '89504e470d0a1a0a') {
@@ -58,7 +51,7 @@ function getPNGDimensions(buffer) {
58
51
  /**
59
52
  * 获取图片尺寸(目前仅支持 PNG)
60
53
  */
61
- function getImageDimensions(buffer, mimeType) {
54
+ export function getImageDimensions(buffer, mimeType) {
62
55
  if (mimeType === 'image/png') {
63
56
  return getPNGDimensions(buffer);
64
57
  }
package/package.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "opencode-tui-image-clipboard-fix",
3
- "version": "1.0.8",
3
+ "version": "1.0.9",
4
+ "type": "module",
4
5
  "displayName": "Image Clipboard Fix",
5
6
  "description": "OpenCode TUI plugin to fix image paste/drag issues - saves images locally and replaces [Image N] with file paths",
6
7
  "main": "lib/index.js",