vite-plugin-opencode-assistant 1.0.4 → 1.0.5

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 (84) hide show
  1. package/es/client/index.d.ts +1 -0
  2. package/es/client/index.js +328 -0
  3. package/es/core/api.d.ts +14 -0
  4. package/es/core/api.js +294 -0
  5. package/es/core/injector.d.ts +2 -0
  6. package/es/core/injector.js +11 -0
  7. package/es/core/service.d.ts +18 -0
  8. package/es/core/service.js +163 -0
  9. package/es/endpoints/context.d.ts +3 -0
  10. package/es/endpoints/context.js +114 -0
  11. package/es/endpoints/index.d.ts +4 -0
  12. package/es/endpoints/index.js +16 -0
  13. package/es/endpoints/sessions.d.ts +3 -0
  14. package/es/endpoints/sessions.js +79 -0
  15. package/es/endpoints/sse.d.ts +3 -0
  16. package/es/endpoints/sse.js +56 -0
  17. package/es/endpoints/start.d.ts +3 -0
  18. package/es/endpoints/start.js +35 -0
  19. package/es/endpoints/types.d.ts +13 -0
  20. package/es/endpoints/widget.d.ts +3 -0
  21. package/es/endpoints/widget.js +57 -0
  22. package/{dist/vite → es}/index.d.ts +1 -1
  23. package/es/index.js +168 -0
  24. package/es/utils/paths.d.ts +3 -0
  25. package/es/utils/paths.js +38 -0
  26. package/es/utils/system.js +241 -0
  27. package/lib/client/index.d.ts +1 -0
  28. package/lib/client/index.js +328 -0
  29. package/lib/client.js +5597 -0
  30. package/lib/core/api.d.ts +14 -0
  31. package/lib/core/api.js +321 -0
  32. package/lib/core/injector.d.ts +2 -0
  33. package/lib/core/injector.js +34 -0
  34. package/lib/core/service.d.ts +18 -0
  35. package/lib/core/service.js +180 -0
  36. package/lib/endpoints/context.d.ts +3 -0
  37. package/lib/endpoints/context.js +137 -0
  38. package/lib/endpoints/index.d.ts +4 -0
  39. package/lib/endpoints/index.js +41 -0
  40. package/lib/endpoints/sessions.d.ts +3 -0
  41. package/lib/endpoints/sessions.js +102 -0
  42. package/lib/endpoints/sse.d.ts +3 -0
  43. package/lib/endpoints/sse.js +79 -0
  44. package/lib/endpoints/start.d.ts +3 -0
  45. package/lib/endpoints/start.js +58 -0
  46. package/lib/endpoints/types.d.ts +13 -0
  47. package/lib/endpoints/types.js +15 -0
  48. package/lib/endpoints/widget.d.ts +3 -0
  49. package/lib/endpoints/widget.js +90 -0
  50. package/lib/index.d.ts +3 -0
  51. package/lib/index.js +190 -0
  52. package/lib/style.css +1 -0
  53. package/lib/utils/paths.d.ts +3 -0
  54. package/lib/utils/paths.js +73 -0
  55. package/lib/utils/system.d.ts +5 -0
  56. package/lib/utils/system.js +274 -0
  57. package/package.json +28 -33
  58. package/README.md +0 -287
  59. package/dist/constants.d.ts +0 -74
  60. package/dist/constants.js +0 -75
  61. package/dist/constants.js.map +0 -1
  62. package/dist/logger.d.ts +0 -64
  63. package/dist/logger.js +0 -311
  64. package/dist/logger.js.map +0 -1
  65. package/dist/opencode/plugins/page-context.d.ts +0 -7
  66. package/dist/opencode/plugins/page-context.js +0 -372
  67. package/dist/opencode/plugins/page-context.js.map +0 -1
  68. package/dist/opencode/web.d.ts +0 -3
  69. package/dist/opencode/web.js +0 -81
  70. package/dist/opencode/web.js.map +0 -1
  71. package/dist/types.d.ts +0 -126
  72. package/dist/types.js +0 -2
  73. package/dist/types.js.map +0 -1
  74. package/dist/vite/client.js +0 -2468
  75. package/dist/vite/client.js.map +0 -1
  76. package/dist/vite/index.js +0 -697
  77. package/dist/vite/index.js.map +0 -1
  78. package/dist/vite/injector.d.ts +0 -2
  79. package/dist/vite/injector.js +0 -6
  80. package/dist/vite/injector.js.map +0 -1
  81. package/dist/vite/utils.js +0 -206
  82. package/dist/vite/utils.js.map +0 -1
  83. /package/{dist/vite/client.d.ts → es/endpoints/types.js} +0 -0
  84. /package/{dist/vite/utils.d.ts → es/utils/system.d.ts} +0 -0
package/dist/logger.js DELETED
@@ -1,311 +0,0 @@
1
- import { LOG_PREFIX } from './constants.js';
2
- export var LogLevel;
3
- (function (LogLevel) {
4
- LogLevel[LogLevel["DEBUG"] = 0] = "DEBUG";
5
- LogLevel[LogLevel["INFO"] = 1] = "INFO";
6
- LogLevel[LogLevel["WARN"] = 2] = "WARN";
7
- LogLevel[LogLevel["ERROR"] = 3] = "ERROR";
8
- LogLevel[LogLevel["NONE"] = 4] = "NONE";
9
- })(LogLevel || (LogLevel = {}));
10
- const COLORS = {
11
- reset: '\x1b[0m',
12
- dim: '\x1b[2m',
13
- bright: '\x1b[1m',
14
- red: '\x1b[31m',
15
- green: '\x1b[32m',
16
- yellow: '\x1b[33m',
17
- blue: '\x1b[34m',
18
- magenta: '\x1b[35m',
19
- cyan: '\x1b[36m',
20
- white: '\x1b[37m',
21
- };
22
- const LEVEL_COLORS = {
23
- [LogLevel.DEBUG]: COLORS.cyan,
24
- [LogLevel.INFO]: COLORS.green,
25
- [LogLevel.WARN]: COLORS.yellow,
26
- [LogLevel.ERROR]: COLORS.red,
27
- [LogLevel.NONE]: COLORS.reset,
28
- };
29
- const LEVEL_NAMES = {
30
- [LogLevel.DEBUG]: 'DEBUG',
31
- [LogLevel.INFO]: 'INFO',
32
- [LogLevel.WARN]: 'WARN',
33
- [LogLevel.ERROR]: 'ERROR',
34
- [LogLevel.NONE]: 'NONE',
35
- };
36
- let globalConfig = {
37
- verbose: false,
38
- level: LogLevel.INFO,
39
- showTimestamp: true,
40
- showCaller: true,
41
- showTrace: false,
42
- indent: ' ',
43
- };
44
- let traceCounter = 0;
45
- export function configureLogger(options) {
46
- globalConfig = { ...globalConfig, ...options };
47
- }
48
- export function setVerbose(verbose) {
49
- globalConfig.verbose = verbose;
50
- globalConfig.level = verbose ? LogLevel.DEBUG : LogLevel.INFO;
51
- }
52
- function getTimestamp() {
53
- const now = new Date();
54
- const hours = String(now.getHours()).padStart(2, '0');
55
- const minutes = String(now.getMinutes()).padStart(2, '0');
56
- const seconds = String(now.getSeconds()).padStart(2, '0');
57
- const ms = String(now.getMilliseconds()).padStart(3, '0');
58
- return `${hours}:${minutes}:${seconds}.${ms}`;
59
- }
60
- function getCallerInfo(depth = 3) {
61
- const stack = new Error().stack;
62
- if (!stack)
63
- return '';
64
- const lines = stack.split('\n');
65
- const targetLine = lines[depth];
66
- if (!targetLine)
67
- return '';
68
- const match = targetLine.match(/at\s+(?:(.+?)\s+\()?(.+?):(\d+):(\d+)\)?/);
69
- if (!match)
70
- return '';
71
- const [, funcName, filePath, line] = match;
72
- const fileName = filePath.split('/').pop() || filePath;
73
- const func = funcName || '<anonymous>';
74
- return `${fileName}:${line} ${func}`;
75
- }
76
- function formatValue(value, depth = 0) {
77
- if (depth > 3)
78
- return '...';
79
- if (value === null)
80
- return 'null';
81
- if (value === undefined)
82
- return 'undefined';
83
- if (typeof value === 'string')
84
- return depth > 0 ? `"${value}"` : value;
85
- if (typeof value === 'number' || typeof value === 'boolean')
86
- return String(value);
87
- if (value instanceof Error) {
88
- return `${value.name}: ${value.message}${value.stack ? `\n${value.stack}` : ''}`;
89
- }
90
- if (Array.isArray(value)) {
91
- if (value.length === 0)
92
- return '[]';
93
- if (value.length > 5) {
94
- const items = value.slice(0, 3).map(v => formatValue(v, depth + 1));
95
- return `[${items.join(', ')}, ... ${value.length - 3} more items]`;
96
- }
97
- const items = value.map(v => formatValue(v, depth + 1));
98
- return `[${items.join(', ')}]`;
99
- }
100
- if (typeof value === 'object') {
101
- const entries = Object.entries(value);
102
- if (entries.length === 0)
103
- return '{}';
104
- if (entries.length > 5) {
105
- const shown = entries.slice(0, 3).map(([k, v]) => `${k}: ${formatValue(v, depth + 1)}`);
106
- return `{${shown.join(', ')}, ... ${entries.length - 3} more keys}`;
107
- }
108
- const formatted = entries.map(([k, v]) => `${k}: ${formatValue(v, depth + 1)}`);
109
- return `{${formatted.join(', ')}}`;
110
- }
111
- return String(value);
112
- }
113
- function formatContext(context) {
114
- if (!context || Object.keys(context).length === 0)
115
- return '';
116
- const parts = [];
117
- if (context.module)
118
- parts.push(`[${context.module}]`);
119
- if (context.operation)
120
- parts.push(`(${context.operation})`);
121
- if (context.traceId)
122
- parts.push(`trace:${context.traceId}`);
123
- if (context.duration !== undefined)
124
- parts.push(`${context.duration}ms`);
125
- const extraKeys = Object.keys(context).filter(k => !['module', 'operation', 'traceId', 'duration', 'error'].includes(k));
126
- if (extraKeys.length > 0) {
127
- const extra = {};
128
- extraKeys.forEach(k => extra[k] = context[k]);
129
- parts.push(formatValue(extra));
130
- }
131
- return parts.join(' ');
132
- }
133
- function log(level, message, context, ...args) {
134
- if (level < globalConfig.level)
135
- return;
136
- const parts = [];
137
- parts.push(`${COLORS.dim}[${process.pid}]${COLORS.reset}`);
138
- if (globalConfig.showTimestamp) {
139
- parts.push(`${COLORS.dim}${getTimestamp()}${COLORS.reset}`);
140
- }
141
- const levelColor = LEVEL_COLORS[level];
142
- const levelName = LEVEL_NAMES[level].padEnd(5);
143
- parts.push(`${levelColor}${levelName}${COLORS.reset}`);
144
- parts.push(`${COLORS.bright}${LOG_PREFIX}${COLORS.reset}`);
145
- const contextStr = formatContext(context);
146
- if (contextStr) {
147
- parts.push(`${COLORS.magenta}${contextStr}${COLORS.reset}`);
148
- }
149
- parts.push(message);
150
- if (globalConfig.showCaller && level >= LogLevel.WARN) {
151
- const caller = getCallerInfo(4);
152
- if (caller) {
153
- parts.push(`${COLORS.dim}(${caller})${COLORS.reset}`);
154
- }
155
- }
156
- const formattedArgs = args.map(a => formatValue(a)).join(' ');
157
- if (formattedArgs) {
158
- parts.push(formattedArgs);
159
- }
160
- const output = parts.join(' ');
161
- if (level >= LogLevel.ERROR) {
162
- console.error(output);
163
- }
164
- else if (level === LogLevel.WARN) {
165
- console.warn(output);
166
- }
167
- else {
168
- console.log(output);
169
- }
170
- if (context?.error && level >= LogLevel.ERROR && globalConfig.showTrace) {
171
- const err = context.error;
172
- if (err instanceof Error && err.stack) {
173
- console.error(`${COLORS.dim}${err.stack}${COLORS.reset}`);
174
- }
175
- }
176
- }
177
- export const logger = {
178
- debug(message, context, ...args) {
179
- log(LogLevel.DEBUG, message, context, ...args);
180
- },
181
- info(message, context, ...args) {
182
- log(LogLevel.INFO, message, context, ...args);
183
- },
184
- warn(message, context, ...args) {
185
- log(LogLevel.WARN, message, context, ...args);
186
- },
187
- error(message, context, ...args) {
188
- log(LogLevel.ERROR, message, context, ...args);
189
- },
190
- group(label, context) {
191
- if (!globalConfig.verbose)
192
- return;
193
- const contextStr = formatContext(context);
194
- console.log(`${COLORS.dim}[${process.pid}]${COLORS.reset} ${COLORS.bright}${LOG_PREFIX}${COLORS.reset} ${COLORS.blue}▼${COLORS.reset} ${label}${contextStr ? ` ${contextStr}` : ''}`);
195
- },
196
- groupEnd() {
197
- if (!globalConfig.verbose)
198
- return;
199
- },
200
- };
201
- export function generateTraceId() {
202
- traceCounter++;
203
- const timestamp = Date.now().toString(36);
204
- const counter = traceCounter.toString(36).padStart(4, '0');
205
- return `${timestamp}-${counter}`;
206
- }
207
- export class PerformanceTimer {
208
- constructor(operation, context) {
209
- this.operation = operation;
210
- this.context = context || {};
211
- this.startTime = performance.now();
212
- logger.debug(`⏱️ Starting: ${operation}`, this.context);
213
- }
214
- end(message) {
215
- const duration = Math.round(performance.now() - this.startTime);
216
- const msg = message || `✓ Completed: ${this.operation}`;
217
- logger.debug(msg, { ...this.context, duration });
218
- return duration;
219
- }
220
- checkpoint(label) {
221
- const elapsed = Math.round(performance.now() - this.startTime);
222
- logger.debug(` ↳ ${label}`, { ...this.context, duration: elapsed });
223
- return elapsed;
224
- }
225
- }
226
- export class RequestContext {
227
- constructor(method, path) {
228
- this.checkpoints = [];
229
- this.traceId = generateTraceId();
230
- this.method = method;
231
- this.path = path;
232
- this.startTime = performance.now();
233
- logger.debug(`→ ${method} ${path}`, { traceId: this.traceId, module: 'HTTP' });
234
- }
235
- checkpoint(label) {
236
- const elapsed = Math.round(performance.now() - this.startTime);
237
- this.checkpoints.push({ time: elapsed, label });
238
- logger.debug(` → ${label}`, { traceId: this.traceId, duration: elapsed });
239
- }
240
- end(statusCode) {
241
- const duration = Math.round(performance.now() - this.startTime);
242
- const statusColor = statusCode < 400 ? COLORS.green : COLORS.red;
243
- logger.debug(`← ${this.method} ${this.path} ${statusColor}${statusCode}${COLORS.reset}`, {
244
- traceId: this.traceId,
245
- duration,
246
- checkpoints: this.checkpoints.length,
247
- });
248
- }
249
- error(error) {
250
- const duration = Math.round(performance.now() - this.startTime);
251
- logger.error(`✗ ${this.method} ${this.path}`, {
252
- traceId: this.traceId,
253
- duration,
254
- error,
255
- });
256
- }
257
- }
258
- export function createLogger(module) {
259
- return {
260
- debug(message, context, ...args) {
261
- logger.debug(message, { ...context, module }, ...args);
262
- },
263
- info(message, context, ...args) {
264
- logger.info(message, { ...context, module }, ...args);
265
- },
266
- warn(message, context, ...args) {
267
- logger.warn(message, { ...context, module }, ...args);
268
- },
269
- error(message, context, ...args) {
270
- logger.error(message, { ...context, module }, ...args);
271
- },
272
- timer(operation, context) {
273
- return new PerformanceTimer(operation, { ...context, module });
274
- },
275
- };
276
- }
277
- export function logMethod(target, propertyKey, descriptor) {
278
- const originalMethod = descriptor.value;
279
- const className = target.constructor.name;
280
- descriptor.value = async function (...args) {
281
- const timer = new PerformanceTimer(`${className}.${propertyKey}`);
282
- try {
283
- const result = await originalMethod.apply(this, args);
284
- timer.end();
285
- return result;
286
- }
287
- catch (error) {
288
- timer.end('❌ Failed');
289
- throw error;
290
- }
291
- };
292
- return descriptor;
293
- }
294
- export function formatBytes(bytes) {
295
- if (bytes === 0)
296
- return '0B';
297
- const k = 1024;
298
- const sizes = ['B', 'KB', 'MB', 'GB'];
299
- const i = Math.floor(Math.log(bytes) / Math.log(k));
300
- return `${parseFloat((bytes / Math.pow(k, i)).toFixed(2))}${sizes[i]}`;
301
- }
302
- export function formatDuration(ms) {
303
- if (ms < 1000)
304
- return `${ms}ms`;
305
- if (ms < 60000)
306
- return `${(ms / 1000).toFixed(2)}s`;
307
- const minutes = Math.floor(ms / 60000);
308
- const seconds = Math.round((ms % 60000) / 1000);
309
- return `${minutes}m ${seconds}s`;
310
- }
311
- //# sourceMappingURL=logger.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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","sourcesContent":["import { LOG_PREFIX } from './constants.js'\n\nexport enum LogLevel {\n DEBUG = 0,\n INFO = 1,\n WARN = 2,\n ERROR = 3,\n NONE = 4,\n}\n\nexport interface LogContext {\n module?: string\n operation?: string\n traceId?: string\n duration?: number\n error?: Error | unknown\n [key: string]: unknown\n}\n\ninterface LoggerConfig {\n verbose: boolean\n level: LogLevel\n showTimestamp: boolean\n showCaller: boolean\n showTrace: boolean\n indent: string\n}\n\nconst COLORS = {\n reset: '\\x1b[0m',\n dim: '\\x1b[2m',\n bright: '\\x1b[1m',\n red: '\\x1b[31m',\n green: '\\x1b[32m',\n yellow: '\\x1b[33m',\n blue: '\\x1b[34m',\n magenta: '\\x1b[35m',\n cyan: '\\x1b[36m',\n white: '\\x1b[37m',\n}\n\nconst LEVEL_COLORS: Record<LogLevel, string> = {\n [LogLevel.DEBUG]: COLORS.cyan,\n [LogLevel.INFO]: COLORS.green,\n [LogLevel.WARN]: COLORS.yellow,\n [LogLevel.ERROR]: COLORS.red,\n [LogLevel.NONE]: COLORS.reset,\n}\n\nconst LEVEL_NAMES: Record<LogLevel, string> = {\n [LogLevel.DEBUG]: 'DEBUG',\n [LogLevel.INFO]: 'INFO',\n [LogLevel.WARN]: 'WARN',\n [LogLevel.ERROR]: 'ERROR',\n [LogLevel.NONE]: 'NONE',\n}\n\nlet globalConfig: LoggerConfig = {\n verbose: false,\n level: LogLevel.INFO,\n showTimestamp: true,\n showCaller: true,\n showTrace: false,\n indent: ' ',\n}\n\nlet traceCounter = 0\n\nexport function configureLogger(options: Partial<LoggerConfig>): void {\n globalConfig = { ...globalConfig, ...options }\n}\n\nexport function setVerbose(verbose: boolean): void {\n globalConfig.verbose = verbose\n globalConfig.level = verbose ? LogLevel.DEBUG : LogLevel.INFO\n}\n\nfunction getTimestamp(): string {\n const now = new Date()\n const hours = String(now.getHours()).padStart(2, '0')\n const minutes = String(now.getMinutes()).padStart(2, '0')\n const seconds = String(now.getSeconds()).padStart(2, '0')\n const ms = String(now.getMilliseconds()).padStart(3, '0')\n return `${hours}:${minutes}:${seconds}.${ms}`\n}\n\nfunction getCallerInfo(depth: number = 3): string {\n const stack = new Error().stack\n if (!stack) return ''\n\n const lines = stack.split('\\n')\n const targetLine = lines[depth]\n if (!targetLine) return ''\n\n const match = targetLine.match(/at\\s+(?:(.+?)\\s+\\()?(.+?):(\\d+):(\\d+)\\)?/)\n if (!match) return ''\n\n const [, funcName, filePath, line] = match\n const fileName = filePath.split('/').pop() || filePath\n const func = funcName || '<anonymous>'\n return `${fileName}:${line} ${func}`\n}\n\nfunction formatValue(value: unknown, depth: number = 0): string {\n if (depth > 3) return '...'\n \n if (value === null) return 'null'\n if (value === undefined) return 'undefined'\n if (typeof value === 'string') return depth > 0 ? `\"${value}\"` : value\n if (typeof value === 'number' || typeof value === 'boolean') return String(value)\n if (value instanceof Error) {\n return `${value.name}: ${value.message}${value.stack ? `\\n${value.stack}` : ''}`\n }\n if (Array.isArray(value)) {\n if (value.length === 0) return '[]'\n if (value.length > 5) {\n const items = value.slice(0, 3).map(v => formatValue(v, depth + 1))\n return `[${items.join(', ')}, ... ${value.length - 3} more items]`\n }\n const items = value.map(v => formatValue(v, depth + 1))\n return `[${items.join(', ')}]`\n }\n if (typeof value === 'object') {\n const entries = Object.entries(value as Record<string, unknown>)\n if (entries.length === 0) return '{}'\n if (entries.length > 5) {\n const shown = entries.slice(0, 3).map(([k, v]) => `${k}: ${formatValue(v, depth + 1)}`)\n return `{${shown.join(', ')}, ... ${entries.length - 3} more keys}`\n }\n const formatted = entries.map(([k, v]) => `${k}: ${formatValue(v, depth + 1)}`)\n return `{${formatted.join(', ')}}`\n }\n return String(value)\n}\n\nfunction formatContext(context?: LogContext): string {\n if (!context || Object.keys(context).length === 0) return ''\n \n const parts: string[] = []\n \n if (context.module) parts.push(`[${context.module}]`)\n if (context.operation) parts.push(`(${context.operation})`)\n if (context.traceId) parts.push(`trace:${context.traceId}`)\n if (context.duration !== undefined) parts.push(`${context.duration}ms`)\n \n const extraKeys = Object.keys(context).filter(\n k => !['module', 'operation', 'traceId', 'duration', 'error'].includes(k)\n )\n if (extraKeys.length > 0) {\n const extra: Record<string, unknown> = {}\n extraKeys.forEach(k => extra[k] = context[k])\n parts.push(formatValue(extra))\n }\n \n return parts.join(' ')\n}\n\nfunction log(level: LogLevel, message: string, context?: LogContext, ...args: unknown[]): void {\n if (level < globalConfig.level) return\n \n const parts: string[] = []\n \n parts.push(`${COLORS.dim}[${process.pid}]${COLORS.reset}`)\n \n if (globalConfig.showTimestamp) {\n parts.push(`${COLORS.dim}${getTimestamp()}${COLORS.reset}`)\n }\n \n const levelColor = LEVEL_COLORS[level]\n const levelName = LEVEL_NAMES[level].padEnd(5)\n parts.push(`${levelColor}${levelName}${COLORS.reset}`)\n \n parts.push(`${COLORS.bright}${LOG_PREFIX}${COLORS.reset}`)\n \n const contextStr = formatContext(context)\n if (contextStr) {\n parts.push(`${COLORS.magenta}${contextStr}${COLORS.reset}`)\n }\n \n parts.push(message)\n \n if (globalConfig.showCaller && level >= LogLevel.WARN) {\n const caller = getCallerInfo(4)\n if (caller) {\n parts.push(`${COLORS.dim}(${caller})${COLORS.reset}`)\n }\n }\n \n const formattedArgs = args.map(a => formatValue(a)).join(' ')\n if (formattedArgs) {\n parts.push(formattedArgs)\n }\n \n const output = parts.join(' ')\n \n if (level >= LogLevel.ERROR) {\n console.error(output)\n } else if (level === LogLevel.WARN) {\n console.warn(output)\n } else {\n console.log(output)\n }\n \n if (context?.error && level >= LogLevel.ERROR && globalConfig.showTrace) {\n const err = context.error\n if (err instanceof Error && err.stack) {\n console.error(`${COLORS.dim}${err.stack}${COLORS.reset}`)\n }\n }\n}\n\nexport const logger = {\n debug(message: string, context?: LogContext, ...args: unknown[]): void {\n log(LogLevel.DEBUG, message, context, ...args)\n },\n \n info(message: string, context?: LogContext, ...args: unknown[]): void {\n log(LogLevel.INFO, message, context, ...args)\n },\n \n warn(message: string, context?: LogContext, ...args: unknown[]): void {\n log(LogLevel.WARN, message, context, ...args)\n },\n \n error(message: string, context?: LogContext, ...args: unknown[]): void {\n log(LogLevel.ERROR, message, context, ...args)\n },\n \n group(label: string, context?: LogContext): void {\n if (!globalConfig.verbose) return\n const contextStr = formatContext(context)\n console.log(`${COLORS.dim}[${process.pid}]${COLORS.reset} ${COLORS.bright}${LOG_PREFIX}${COLORS.reset} ${COLORS.blue}▼${COLORS.reset} ${label}${contextStr ? ` ${contextStr}` : ''}`)\n },\n \n groupEnd(): void {\n if (!globalConfig.verbose) return\n },\n}\n\nexport function generateTraceId(): string {\n traceCounter++\n const timestamp = Date.now().toString(36)\n const counter = traceCounter.toString(36).padStart(4, '0')\n return `${timestamp}-${counter}`\n}\n\nexport class PerformanceTimer {\n private startTime: number\n private context: LogContext\n private operation: string\n \n constructor(operation: string, context?: LogContext) {\n this.operation = operation\n this.context = context || {}\n this.startTime = performance.now()\n \n logger.debug(`⏱️ Starting: ${operation}`, this.context)\n }\n \n end(message?: string): number {\n const duration = Math.round(performance.now() - this.startTime)\n const msg = message || `✓ Completed: ${this.operation}`\n logger.debug(msg, { ...this.context, duration })\n return duration\n }\n \n checkpoint(label: string): number {\n const elapsed = Math.round(performance.now() - this.startTime)\n logger.debug(` ↳ ${label}`, { ...this.context, duration: elapsed })\n return elapsed\n }\n}\n\nexport class RequestContext {\n traceId: string\n method: string\n path: string\n startTime: number\n private checkpoints: Array<{ time: number; label: string }> = []\n \n constructor(method: string, path: string) {\n this.traceId = generateTraceId()\n this.method = method\n this.path = path\n this.startTime = performance.now()\n \n logger.debug(`→ ${method} ${path}`, { traceId: this.traceId, module: 'HTTP' })\n }\n \n checkpoint(label: string): void {\n const elapsed = Math.round(performance.now() - this.startTime)\n this.checkpoints.push({ time: elapsed, label })\n logger.debug(` → ${label}`, { traceId: this.traceId, duration: elapsed })\n }\n \n end(statusCode: number): void {\n const duration = Math.round(performance.now() - this.startTime)\n const statusColor = statusCode < 400 ? COLORS.green : COLORS.red\n logger.debug(`← ${this.method} ${this.path} ${statusColor}${statusCode}${COLORS.reset}`, {\n traceId: this.traceId,\n duration,\n checkpoints: this.checkpoints.length,\n })\n }\n \n error(error: Error | unknown): void {\n const duration = Math.round(performance.now() - this.startTime)\n logger.error(`✗ ${this.method} ${this.path}`, {\n traceId: this.traceId,\n duration,\n error,\n })\n }\n}\n\nexport function createLogger(module: string) {\n return {\n debug(message: string, context?: Omit<LogContext, 'module'>, ...args: unknown[]): void {\n logger.debug(message, { ...context, module }, ...args)\n },\n \n info(message: string, context?: Omit<LogContext, 'module'>, ...args: unknown[]): void {\n logger.info(message, { ...context, module }, ...args)\n },\n \n warn(message: string, context?: Omit<LogContext, 'module'>, ...args: unknown[]): void {\n logger.warn(message, { ...context, module }, ...args)\n },\n \n error(message: string, context?: Omit<LogContext, 'module'>, ...args: unknown[]): void {\n logger.error(message, { ...context, module }, ...args)\n },\n \n timer(operation: string, context?: Omit<LogContext, 'module'>): PerformanceTimer {\n return new PerformanceTimer(operation, { ...context, module })\n },\n }\n}\n\nexport function logMethod(\n target: unknown,\n propertyKey: string,\n descriptor: PropertyDescriptor\n): PropertyDescriptor {\n const originalMethod = descriptor.value\n const className = (target as { constructor: { name: string } }).constructor.name\n \n descriptor.value = async function (...args: unknown[]) {\n const timer = new PerformanceTimer(`${className}.${propertyKey}`)\n try {\n const result = await originalMethod.apply(this, args)\n timer.end()\n return result\n } catch (error) {\n timer.end('❌ Failed')\n throw error\n }\n }\n \n return descriptor\n}\n\nexport function formatBytes(bytes: number): string {\n if (bytes === 0) return '0B'\n const k = 1024\n const sizes = ['B', 'KB', 'MB', 'GB']\n const i = Math.floor(Math.log(bytes) / Math.log(k))\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(2))}${sizes[i]}`\n}\n\nexport function formatDuration(ms: number): string {\n if (ms < 1000) return `${ms}ms`\n if (ms < 60000) return `${(ms / 1000).toFixed(2)}s`\n const minutes = Math.floor(ms / 60000)\n const seconds = Math.round((ms % 60000) / 1000)\n return `${minutes}m ${seconds}s`\n}\n"]}
@@ -1,7 +0,0 @@
1
- /**
2
- * @fileoverview OpenCode 页面上下文插件
3
- * @description 用于将页面上下文信息注入到 AI 对话中
4
- */
5
- import type { Plugin } from "@opencode-ai/plugin";
6
- export declare const PageContextPlugin: Plugin;
7
- export default PageContextPlugin;