@lylyuanliang/agent-feedback-vite-plugin 0.0.0-stage → 1.0.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 ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 lylyuanliang
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,87 @@
1
+ /**
2
+ * @agent-feedback/vite-plugin
3
+ * In-App Agent Feedback Bridge - Zero-Code Bundler Plugin & DevServer Middleware
4
+ */
5
+ import type { InAppFeedback, FeedbackDateIndex, FeedbackTheme } from '@lylyuanliang/agent-feedback-core';
6
+ /**
7
+ * 获取本地 YYYY-MM-DD 日期字符串
8
+ */
9
+ export declare function getLocalDateString(d?: Date | number | string): string;
10
+ /**
11
+ * 读取日级索引文件
12
+ */
13
+ export declare function readIndex(feedbackDir: string): FeedbackDateIndex;
14
+ /**
15
+ * 写入日级索引文件
16
+ */
17
+ export declare function writeIndex(feedbackDir: string, index: FeedbackDateIndex): void;
18
+ /**
19
+ * 读取指定日期的分片文件
20
+ */
21
+ export declare function readShard(feedbackDir: string, date: string): InAppFeedback[];
22
+ /**
23
+ * 写入指定日期的分片文件
24
+ */
25
+ export declare function writeShard(feedbackDir: string, date: string, items: InAppFeedback[]): void;
26
+ /**
27
+ * 重新扫描分片目录并重建索引文件
28
+ */
29
+ export declare function rebuildIndex(feedbackDir: string): FeedbackDateIndex;
30
+ /**
31
+ * 向后兼容:将旧的 feedback_queue.json 自动迁移并合并到按天分片中
32
+ */
33
+ export declare function migrateLegacyQueue(feedbackDir: string): void;
34
+ /**
35
+ * 同步将分片所有数据汇总至 feedback_queue.json,保证向下兼容
36
+ */
37
+ export declare function syncLegacyQueue(feedbackDir: string): void;
38
+ /**
39
+ * 插件配置项
40
+ */
41
+ export interface AgentFeedbackPluginOptions {
42
+ /**
43
+ * 是否自动启动临时 HTTPS 穿透 (Cloudflare / Pinggy)
44
+ * 默认 false
45
+ */
46
+ tunnel?: boolean;
47
+ /**
48
+ * 本地反馈持久化队列目录 (相对项目根路径)
49
+ * 默认 '.agent/feedback'
50
+ */
51
+ storageDir?: string;
52
+ /**
53
+ * 默认主题:dark | light | auto
54
+ * 默认 'dark'
55
+ */
56
+ theme?: FeedbackTheme;
57
+ /**
58
+ * 主题主色 (Primary Color),如 '#4edea3' 或 '#2563eb'
59
+ */
60
+ primaryColor?: string;
61
+ /**
62
+ * 显式指定外部 API 服务基地址 (如内网穿透公网域名 https://xxx.cpolar.top 或特定主机)
63
+ * 默认空字符串 (自动采用同源相对路径,即使用项目自身的 Vite DevServer 服务)
64
+ */
65
+ apiBase?: string;
66
+ }
67
+ /**
68
+ * Vite 插件轻量契约定义 (兼容 Vite 4 / 5 / 6 及无显式依赖环境)
69
+ */
70
+ export interface AgentFeedbackPlugin {
71
+ name: string;
72
+ apply: 'serve' | 'build';
73
+ configResolved?: (config: any) => void;
74
+ configureServer?: (server: any) => void;
75
+ transformIndexHtml?: (html: string, ctx?: any) => any;
76
+ resolveId?: (id: string, importer?: string, options?: any) => any;
77
+ load?: (id: string, options?: any) => any;
78
+ [key: string]: any;
79
+ }
80
+ export type Plugin = AgentFeedbackPlugin;
81
+ /**
82
+ * 创建 Agent Feedback Vite 插件
83
+ * 具备 100% Zero-DCE 特性:仅在 dev (serve) 模式生效,生产 build 零体积残留
84
+ */
85
+ export declare function agentFeedback(options?: AgentFeedbackPluginOptions): AgentFeedbackPlugin;
86
+ export default agentFeedback;
87
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EACV,aAAa,EACb,iBAAiB,EAGjB,aAAa,EACd,MAAM,mCAAmC,CAAC;AAE3C;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,GAAE,IAAI,GAAG,MAAM,GAAG,MAAmB,GAAG,MAAM,CAUjF;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,iBAAiB,CAWhE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAG9E;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,CAY5E;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,IAAI,CAG1F;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,iBAAiB,CA2BnE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAsC5D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAWzD;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,KAAK,CAAC,EAAE,aAAa,CAAC;IAEtB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC;IACvC,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC;IACxC,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,KAAK,GAAG,CAAC;IACtD,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,KAAK,GAAG,CAAC;IAClE,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,KAAK,GAAG,CAAC;IAC1C,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,MAAM,MAAM,GAAG,mBAAmB,CAAC;AAEzC;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,GAAE,0BAA+B,GAAG,mBAAmB,CAoY3F;AAED,eAAe,aAAa,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,517 @@
1
+ /**
2
+ * @agent-feedback/vite-plugin
3
+ * In-App Agent Feedback Bridge - Zero-Code Bundler Plugin & DevServer Middleware
4
+ */
5
+ import fs from 'node:fs';
6
+ import path from 'node:path';
7
+ /**
8
+ * 获取本地 YYYY-MM-DD 日期字符串
9
+ */
10
+ export function getLocalDateString(d = new Date()) {
11
+ const dateObj = typeof d === 'object' && d instanceof Date ? d : new Date(d);
12
+ if (isNaN(dateObj.getTime())) {
13
+ const fallback = new Date();
14
+ return `${fallback.getFullYear()}-${String(fallback.getMonth() + 1).padStart(2, '0')}-${String(fallback.getDate()).padStart(2, '0')}`;
15
+ }
16
+ const year = dateObj.getFullYear();
17
+ const month = String(dateObj.getMonth() + 1).padStart(2, '0');
18
+ const day = String(dateObj.getDate()).padStart(2, '0');
19
+ return `${year}-${month}-${day}`;
20
+ }
21
+ /**
22
+ * 读取日级索引文件
23
+ */
24
+ export function readIndex(feedbackDir) {
25
+ const indexFile = path.resolve(feedbackDir, 'feedback_index.json');
26
+ if (fs.existsSync(indexFile)) {
27
+ try {
28
+ const parsed = JSON.parse(fs.readFileSync(indexFile, 'utf-8'));
29
+ if (Array.isArray(parsed?.dates)) {
30
+ return parsed;
31
+ }
32
+ }
33
+ catch { }
34
+ }
35
+ return rebuildIndex(feedbackDir);
36
+ }
37
+ /**
38
+ * 写入日级索引文件
39
+ */
40
+ export function writeIndex(feedbackDir, index) {
41
+ const indexFile = path.resolve(feedbackDir, 'feedback_index.json');
42
+ fs.writeFileSync(indexFile, JSON.stringify(index, null, 2), 'utf-8');
43
+ }
44
+ /**
45
+ * 读取指定日期的分片文件
46
+ */
47
+ export function readShard(feedbackDir, date) {
48
+ const shardFile = path.resolve(feedbackDir, `feedback_${date}.json`);
49
+ if (fs.existsSync(shardFile)) {
50
+ try {
51
+ const content = fs.readFileSync(shardFile, 'utf-8');
52
+ const parsed = JSON.parse(content);
53
+ if (Array.isArray(parsed)) {
54
+ return parsed;
55
+ }
56
+ }
57
+ catch { }
58
+ }
59
+ return [];
60
+ }
61
+ /**
62
+ * 写入指定日期的分片文件
63
+ */
64
+ export function writeShard(feedbackDir, date, items) {
65
+ const shardFile = path.resolve(feedbackDir, `feedback_${date}.json`);
66
+ fs.writeFileSync(shardFile, JSON.stringify(items, null, 2), 'utf-8');
67
+ }
68
+ /**
69
+ * 重新扫描分片目录并重建索引文件
70
+ */
71
+ export function rebuildIndex(feedbackDir) {
72
+ if (!fs.existsSync(feedbackDir)) {
73
+ return { dates: [], totalCount: 0, updatedAt: new Date().toISOString() };
74
+ }
75
+ const files = fs.readdirSync(feedbackDir);
76
+ const shardFiles = files.filter(f => f.startsWith('feedback_') && f.endsWith('.json') && f !== 'feedback_index.json' && f !== 'feedback_queue.json');
77
+ const dates = [];
78
+ let totalCount = 0;
79
+ for (const file of shardFiles) {
80
+ const match = file.match(/^feedback_(\d{4}-\d{2}-\d{2})\.json$/);
81
+ if (match) {
82
+ const date = match[1];
83
+ dates.push(date);
84
+ const items = readShard(feedbackDir, date);
85
+ totalCount += items.length;
86
+ }
87
+ }
88
+ dates.sort((a, b) => b.localeCompare(a));
89
+ const index = {
90
+ dates,
91
+ totalCount,
92
+ updatedAt: new Date().toISOString()
93
+ };
94
+ writeIndex(feedbackDir, index);
95
+ return index;
96
+ }
97
+ /**
98
+ * 向后兼容:将旧的 feedback_queue.json 自动迁移并合并到按天分片中
99
+ */
100
+ export function migrateLegacyQueue(feedbackDir) {
101
+ const queueFile = path.resolve(feedbackDir, 'feedback_queue.json');
102
+ if (!fs.existsSync(queueFile))
103
+ return;
104
+ try {
105
+ const raw = fs.readFileSync(queueFile, 'utf-8');
106
+ const items = JSON.parse(raw);
107
+ if (!Array.isArray(items) || items.length === 0)
108
+ return;
109
+ const dateMap = new Map();
110
+ for (const item of items) {
111
+ const itemDate = item.date || getLocalDateString(item.receivedAt || item.timestamp);
112
+ item.date = itemDate;
113
+ item.type = item.type || 'user_feedback';
114
+ if (!dateMap.has(itemDate)) {
115
+ dateMap.set(itemDate, []);
116
+ }
117
+ dateMap.get(itemDate).push(item);
118
+ }
119
+ for (const [date, newItems] of dateMap.entries()) {
120
+ const shardItems = readShard(feedbackDir, date);
121
+ const existingIds = new Set(shardItems.map(i => i.id));
122
+ for (const it of newItems) {
123
+ if (!existingIds.has(it.id)) {
124
+ shardItems.push(it);
125
+ existingIds.add(it.id);
126
+ }
127
+ }
128
+ shardItems.sort((a, b) => b.id - a.id);
129
+ writeShard(feedbackDir, date, shardItems);
130
+ }
131
+ rebuildIndex(feedbackDir);
132
+ }
133
+ catch {
134
+ // 忽略损坏的旧队列
135
+ }
136
+ }
137
+ /**
138
+ * 同步将分片所有数据汇总至 feedback_queue.json,保证向下兼容
139
+ */
140
+ export function syncLegacyQueue(feedbackDir) {
141
+ try {
142
+ const index = readIndex(feedbackDir);
143
+ const allItems = [];
144
+ for (const date of index.dates) {
145
+ allItems.push(...readShard(feedbackDir, date));
146
+ }
147
+ allItems.sort((a, b) => b.id - a.id);
148
+ const queueFile = path.resolve(feedbackDir, 'feedback_queue.json');
149
+ fs.writeFileSync(queueFile, JSON.stringify(allItems, null, 2), 'utf-8');
150
+ }
151
+ catch { }
152
+ }
153
+ /**
154
+ * 创建 Agent Feedback Vite 插件
155
+ * 具备 100% Zero-DCE 特性:仅在 dev (serve) 模式生效,生产 build 零体积残留
156
+ */
157
+ export function agentFeedback(options = {}) {
158
+ let isDev = true;
159
+ const storageRelDir = options.storageDir || '.agent/feedback';
160
+ const defaultTheme = options.theme || 'dark';
161
+ const primaryColor = options.primaryColor;
162
+ return {
163
+ name: 'agent-feedback-plugin',
164
+ // 关键架构:enforce 'serve',保证在 vite build (生产打包) 时彻底被 Vite 剥离 (Zero-DCE)
165
+ apply: 'serve',
166
+ configResolved(config) {
167
+ if (config && typeof config.command === 'string') {
168
+ isDev = config.command === 'serve';
169
+ }
170
+ },
171
+ configureServer(server) {
172
+ if (!isDev)
173
+ return;
174
+ const projectRoot = server?.config?.root || process.cwd();
175
+ const feedbackDir = path.resolve(projectRoot, storageRelDir);
176
+ const screenshotsDir = path.resolve(feedbackDir, 'screenshots');
177
+ // 确保本地持久化存储目录存在
178
+ if (!fs.existsSync(feedbackDir)) {
179
+ fs.mkdirSync(feedbackDir, { recursive: true });
180
+ }
181
+ // 向后兼容迁移:启动时自动将 feedback_queue.json 迁移合并到分片中
182
+ migrateLegacyQueue(feedbackDir);
183
+ // 自动检查与配置根目录 .gitignore,确保 .agent/ 敏感数据与截图不被意外提交
184
+ const gitignorePath = path.resolve(projectRoot, '.gitignore');
185
+ try {
186
+ if (fs.existsSync(gitignorePath)) {
187
+ const gitignoreContent = fs.readFileSync(gitignorePath, 'utf-8');
188
+ if (!gitignoreContent.includes('.agent/') && !gitignoreContent.includes('.agent\n') && !gitignoreContent.endsWith('.agent')) {
189
+ const prefix = gitignoreContent.length > 0 && !gitignoreContent.endsWith('\n') ? '\n' : '';
190
+ fs.appendFileSync(gitignorePath, `${prefix}# Agent Feedback Bridge local storage\n.agent/\n`, 'utf-8');
191
+ }
192
+ }
193
+ else {
194
+ fs.writeFileSync(gitignorePath, '# Agent Feedback Bridge local storage\n.agent/\n', 'utf-8');
195
+ }
196
+ }
197
+ catch {
198
+ // 忽略 .gitignore 写入权限异常,不阻塞 DevServer
199
+ }
200
+ // 挂载 Connect API 中间件
201
+ if (server?.middlewares?.use) {
202
+ server.middlewares.use((req, res, next) => {
203
+ const rawUrl = req.url || '';
204
+ const urlPath = rawUrl.split('?')[0];
205
+ if (!urlPath.startsWith('/api/__agent_feedback')) {
206
+ return next();
207
+ }
208
+ // 统一 CORS 响应头,支持跨源与移动端访问
209
+ res.setHeader('Access-Control-Allow-Origin', '*');
210
+ res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
211
+ res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
212
+ if (req.method === 'OPTIONS') {
213
+ res.statusCode = 204;
214
+ res.end();
215
+ return;
216
+ }
217
+ // 1. 提交反馈端点: POST /api/__agent_feedback/submit
218
+ if (req.method === 'POST' && urlPath === '/api/__agent_feedback/submit') {
219
+ let body = '';
220
+ req.on('data', (chunk) => {
221
+ body += chunk;
222
+ });
223
+ req.on('end', () => {
224
+ try {
225
+ const data = body ? JSON.parse(body) : {};
226
+ // 规范基础标识与状态
227
+ if (!data.id) {
228
+ data.id = Date.now();
229
+ }
230
+ if (!data.timestamp) {
231
+ data.timestamp = Date.now();
232
+ }
233
+ if (!data.receivedAt) {
234
+ data.receivedAt = new Date().toISOString();
235
+ }
236
+ if (!data.status) {
237
+ data.status = 'pending';
238
+ }
239
+ if (!data.type) {
240
+ data.type = 'user_feedback';
241
+ }
242
+ if (!data.date) {
243
+ data.date = getLocalDateString(data.timestamp);
244
+ }
245
+ // 处理并转存截图文件
246
+ const rawScreenshots = [];
247
+ if (Array.isArray(data.screenshots)) {
248
+ rawScreenshots.push(...data.screenshots);
249
+ }
250
+ else if (typeof data.screenshots === 'string') {
251
+ rawScreenshots.push(data.screenshots);
252
+ }
253
+ if (typeof data.screenshot === 'string') {
254
+ rawScreenshots.push(data.screenshot);
255
+ }
256
+ if (rawScreenshots.length > 0) {
257
+ if (!fs.existsSync(screenshotsDir)) {
258
+ fs.mkdirSync(screenshotsDir, { recursive: true });
259
+ }
260
+ const savedPaths = [];
261
+ rawScreenshots.forEach((shot, index) => {
262
+ try {
263
+ let base64Data = shot;
264
+ let ext = 'png';
265
+ const match = shot.match(/^data:image\/([a-zA-Z0-9-+]+);base64,(.+)$/);
266
+ if (match) {
267
+ ext = match[1] === 'jpeg' ? 'jpg' : match[1];
268
+ base64Data = match[2];
269
+ }
270
+ else if (shot.length > 100 && /^[A-Za-z0-9+/=\s]+$/.test(shot)) {
271
+ base64Data = shot.trim();
272
+ }
273
+ else {
274
+ // 已是相对路径或外部 URL,保留
275
+ savedPaths.push(shot);
276
+ return;
277
+ }
278
+ const fileName = rawScreenshots.length === 1
279
+ ? `${data.id}.${ext}`
280
+ : `${data.id}_${index}.${ext}`;
281
+ const filePath = path.resolve(screenshotsDir, fileName);
282
+ fs.writeFileSync(filePath, Buffer.from(base64Data, 'base64'));
283
+ savedPaths.push(`screenshots/${fileName}`);
284
+ }
285
+ catch {
286
+ // 截图持久化容错
287
+ }
288
+ });
289
+ if (savedPaths.length > 0) {
290
+ data.screenshots = savedPaths;
291
+ delete data.screenshot;
292
+ }
293
+ }
294
+ // 持久化至当天分片并更新索引
295
+ const today = data.date;
296
+ const shardItems = readShard(feedbackDir, today);
297
+ shardItems.unshift(data);
298
+ writeShard(feedbackDir, today, shardItems);
299
+ rebuildIndex(feedbackDir);
300
+ syncLegacyQueue(feedbackDir);
301
+ res.setHeader('Content-Type', 'application/json');
302
+ res.statusCode = 200;
303
+ res.end(JSON.stringify({ success: true, id: data.id }));
304
+ }
305
+ catch (err) {
306
+ res.statusCode = 500;
307
+ res.setHeader('Content-Type', 'application/json');
308
+ res.end(JSON.stringify({ error: err?.message || 'Failed to parse feedback payload' }));
309
+ }
310
+ });
311
+ return;
312
+ }
313
+ // 2. 提交系统通知端点: POST /api/__agent_feedback/notice
314
+ if (req.method === 'POST' && urlPath === '/api/__agent_feedback/notice') {
315
+ let body = '';
316
+ req.on('data', (chunk) => {
317
+ body += chunk;
318
+ });
319
+ req.on('end', () => {
320
+ try {
321
+ const data = body ? JSON.parse(body) : {};
322
+ const now = Date.now();
323
+ const noticeItem = {
324
+ id: data.id || now,
325
+ type: 'agent_notice',
326
+ status: 'completed',
327
+ content: data.content || data.message || '系统通知',
328
+ receivedAt: data.receivedAt || new Date(now).toISOString(),
329
+ timestamp: data.timestamp || now,
330
+ date: data.date || getLocalDateString(data.timestamp || now),
331
+ reply: data.reply || '系统主动推送的 Agent 通知',
332
+ telemetry: data.telemetry || {
333
+ route: 'cli',
334
+ viewport: { width: 0, height: 0, dpr: 1 },
335
+ userAgent: '@lylyuanliang/agent-feedback-vite-plugin',
336
+ platform: 'desktop'
337
+ }
338
+ };
339
+ const today = noticeItem.date;
340
+ const shardItems = readShard(feedbackDir, today);
341
+ shardItems.unshift(noticeItem);
342
+ writeShard(feedbackDir, today, shardItems);
343
+ rebuildIndex(feedbackDir);
344
+ syncLegacyQueue(feedbackDir);
345
+ res.setHeader('Content-Type', 'application/json');
346
+ res.statusCode = 200;
347
+ res.end(JSON.stringify({ success: true, id: noticeItem.id, item: noticeItem }));
348
+ }
349
+ catch (err) {
350
+ res.statusCode = 500;
351
+ res.setHeader('Content-Type', 'application/json');
352
+ res.end(JSON.stringify({ error: err?.message || 'Failed to parse notice payload' }));
353
+ }
354
+ });
355
+ return;
356
+ }
357
+ // 3. 日级索引端点: GET /api/__agent_feedback/dates
358
+ if (req.method === 'GET' && urlPath === '/api/__agent_feedback/dates') {
359
+ res.setHeader('Content-Type', 'application/json');
360
+ res.statusCode = 200;
361
+ const index = readIndex(feedbackDir);
362
+ const latestDate = index.dates.length > 0 ? index.dates[0] : '';
363
+ res.end(JSON.stringify({
364
+ dates: index.dates,
365
+ totalCount: index.totalCount,
366
+ latestDate
367
+ }));
368
+ return;
369
+ }
370
+ // 4. 获取反馈历史端点: GET /api/__agent_feedback/list
371
+ if (req.method === 'GET' && urlPath === '/api/__agent_feedback/list') {
372
+ res.setHeader('Content-Type', 'application/json');
373
+ res.statusCode = 200;
374
+ const urlObj = new URL(rawUrl, 'http://localhost');
375
+ const dateParam = urlObj.searchParams.get('date');
376
+ if (dateParam) {
377
+ // 指定了 date 参数:返回该日分片列表
378
+ const shardList = readShard(feedbackDir, dateParam);
379
+ res.end(JSON.stringify(shardList));
380
+ return;
381
+ }
382
+ // 未传 date:返回最新一天的工单列表以保持 API 兼容
383
+ const index = readIndex(feedbackDir);
384
+ if (index.dates.length > 0) {
385
+ const latestShard = readShard(feedbackDir, index.dates[0]);
386
+ res.end(JSON.stringify(latestShard));
387
+ }
388
+ else {
389
+ res.end(JSON.stringify([]));
390
+ }
391
+ return;
392
+ }
393
+ // 5. 跨分片更新状态: POST /api/__agent_feedback/status
394
+ if (req.method === 'POST' && urlPath === '/api/__agent_feedback/status') {
395
+ let body = '';
396
+ req.on('data', (chunk) => {
397
+ body += chunk;
398
+ });
399
+ req.on('end', () => {
400
+ try {
401
+ const data = body ? JSON.parse(body) : {};
402
+ const id = data.id !== undefined ? Number(data.id) : NaN;
403
+ const status = data.status;
404
+ const reply = data.reply;
405
+ if (isNaN(id) || !status) {
406
+ res.statusCode = 400;
407
+ res.setHeader('Content-Type', 'application/json');
408
+ res.end(JSON.stringify({ error: 'Missing required id or status parameter' }));
409
+ return;
410
+ }
411
+ const index = readIndex(feedbackDir);
412
+ let updatedItem = null;
413
+ for (const date of index.dates) {
414
+ const shardItems = readShard(feedbackDir, date);
415
+ const target = shardItems.find(i => i.id === id);
416
+ if (target) {
417
+ target.status = status;
418
+ if (reply !== undefined) {
419
+ target.reply = reply;
420
+ }
421
+ target.updatedAt = new Date().toISOString();
422
+ writeShard(feedbackDir, date, shardItems);
423
+ updatedItem = target;
424
+ break;
425
+ }
426
+ }
427
+ if (updatedItem) {
428
+ syncLegacyQueue(feedbackDir);
429
+ res.setHeader('Content-Type', 'application/json');
430
+ res.statusCode = 200;
431
+ res.end(JSON.stringify({ success: true, item: updatedItem }));
432
+ }
433
+ else {
434
+ res.statusCode = 404;
435
+ res.setHeader('Content-Type', 'application/json');
436
+ res.end(JSON.stringify({ error: `Feedback item with id ${id} not found` }));
437
+ }
438
+ }
439
+ catch (err) {
440
+ res.statusCode = 500;
441
+ res.setHeader('Content-Type', 'application/json');
442
+ res.end(JSON.stringify({ error: err?.message || 'Failed to update feedback status' }));
443
+ }
444
+ });
445
+ return;
446
+ }
447
+ // 6. 静态服务截图文件: GET /api/__agent_feedback/screenshots/<filename>
448
+ if (req.method === 'GET' && urlPath.startsWith('/api/__agent_feedback/screenshots/')) {
449
+ const fileName = path.basename(urlPath);
450
+ const filePath = path.resolve(screenshotsDir, fileName);
451
+ if (fs.existsSync(filePath)) {
452
+ const ext = path.extname(filePath).slice(1).toLowerCase();
453
+ const mime = ext === 'jpg' || ext === 'jpeg' ? 'image/jpeg' : ext === 'webp' ? 'image/webp' : 'image/png';
454
+ res.setHeader('Content-Type', mime);
455
+ res.statusCode = 200;
456
+ res.end(fs.readFileSync(filePath));
457
+ return;
458
+ }
459
+ else {
460
+ res.statusCode = 404;
461
+ res.setHeader('Content-Type', 'application/json');
462
+ res.end(JSON.stringify({ error: 'Screenshot not found' }));
463
+ return;
464
+ }
465
+ }
466
+ next();
467
+ });
468
+ }
469
+ },
470
+ transformIndexHtml(html, ctx) {
471
+ const command = ctx?.command;
472
+ const isBuild = command === 'build' || (!command && !isDev);
473
+ if (isBuild)
474
+ return html;
475
+ // 仅在 dev 模式自动在 HTML 中注入端侧客户端入口脚本
476
+ return [
477
+ {
478
+ tag: 'script',
479
+ attrs: {
480
+ type: 'module',
481
+ src: '/@agent-feedback/client'
482
+ },
483
+ injectTo: 'body'
484
+ }
485
+ ];
486
+ },
487
+ resolveId(id) {
488
+ if (id === '/@agent-feedback/client' ||
489
+ id === '@agent-feedback/client' ||
490
+ id === '/@lylyuanliang/agent-feedback-client' ||
491
+ id === '@lylyuanliang/agent-feedback-client') {
492
+ return '\0agent-feedback-client-virtual';
493
+ }
494
+ },
495
+ load(id) {
496
+ if (id === '\0agent-feedback-client-virtual') {
497
+ const themeLiteral = JSON.stringify(defaultTheme);
498
+ const colorLiteral = primaryColor ? JSON.stringify(primaryColor) : 'undefined';
499
+ const apiBaseLiteral = options.apiBase ? JSON.stringify(options.apiBase.trim().replace(/\/+$/, '')) : 'undefined';
500
+ // 输出虚拟客户端代码,驱动 Shadow DOM 自定义元素注册、主题透传与挂载
501
+ return `
502
+ if (typeof window !== 'undefined') {
503
+ window.__AGENT_FEEDBACK_OPTIONS__ = {
504
+ theme: ${themeLiteral},
505
+ primaryColor: ${colorLiteral},
506
+ apiBase: ${apiBaseLiteral}
507
+ };
508
+ }
509
+ import '@lylyuanliang/agent-feedback-client';
510
+ console.log('[Agent Feedback Bridge] In-App nervous system initialized.');
511
+ `.trim();
512
+ }
513
+ }
514
+ };
515
+ }
516
+ export default agentFeedback;
517
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,42 @@
1
1
  {
2
2
  "name": "@lylyuanliang/agent-feedback-vite-plugin",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "1.0.0",
4
+ "description": "Zero-code bundler plugin & DevServer middleware for Agent Feedback Bridge",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "module": "dist/index.js",
8
+ "types": "dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js",
13
+ "default": "./dist/index.js"
14
+ }
15
+ },
16
+ "files": [
17
+ "dist",
18
+ "README.md",
19
+ "LICENSE"
20
+ ],
21
+ "publishConfig": {
22
+ "access": "public"
23
+ },
24
+ "dependencies": {
25
+ "@lylyuanliang/agent-feedback-core": "1.0.0"
26
+ },
27
+ "peerDependencies": {
28
+ "vite": "^4.0.0 || ^5.0.0 || ^6.0.0"
29
+ },
30
+ "keywords": [
31
+ "vite",
32
+ "vite-plugin",
33
+ "agent-feedback",
34
+ "zero-code",
35
+ "dev-server"
36
+ ],
37
+ "license": "MIT",
38
+ "scripts": {
39
+ "build": "tsc",
40
+ "test": "node --experimental-strip-types --test tests/plugin.test.ts"
41
+ }
6
42
  }
package/README.md DELETED
@@ -1,3 +0,0 @@
1
- # Temporary Holding Version
2
-
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.