@aipanel/core 1.2.0-beta.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.
Files changed (53) hide show
  1. package/es/constants.d.ts +145 -0
  2. package/es/constants.mjs +124 -0
  3. package/es/file-log-watcher.d.ts +20 -0
  4. package/es/file-log-watcher.mjs +126 -0
  5. package/es/index.d.ts +7 -0
  6. package/es/index.mjs +7 -0
  7. package/es/logger-core.d.ts +37 -0
  8. package/es/logger-core.mjs +143 -0
  9. package/es/logger.d.ts +15 -0
  10. package/es/logger.mjs +127 -0
  11. package/es/node-logger.d.ts +38 -0
  12. package/es/node-logger.mjs +230 -0
  13. package/es/node-utils.d.ts +28 -0
  14. package/es/node-utils.mjs +56 -0
  15. package/es/node.d.ts +6 -0
  16. package/es/node.mjs +6 -0
  17. package/es/options.d.ts +63 -0
  18. package/es/options.mjs +30 -0
  19. package/es/process-logger.d.ts +97 -0
  20. package/es/process-logger.mjs +193 -0
  21. package/es/provider.d.ts +160 -0
  22. package/es/provider.mjs +0 -0
  23. package/es/types.d.ts +275 -0
  24. package/es/types.mjs +40 -0
  25. package/es/utils.d.ts +34 -0
  26. package/es/utils.mjs +53 -0
  27. package/lib/constants.cjs +188 -0
  28. package/lib/constants.d.ts +145 -0
  29. package/lib/file-log-watcher.cjs +160 -0
  30. package/lib/file-log-watcher.d.ts +20 -0
  31. package/lib/index.cjs +33 -0
  32. package/lib/index.d.ts +7 -0
  33. package/lib/logger-core.cjs +177 -0
  34. package/lib/logger-core.d.ts +37 -0
  35. package/lib/logger.cjs +145 -0
  36. package/lib/logger.d.ts +15 -0
  37. package/lib/node-logger.cjs +252 -0
  38. package/lib/node-logger.d.ts +38 -0
  39. package/lib/node-utils.cjs +93 -0
  40. package/lib/node-utils.d.ts +28 -0
  41. package/lib/node.cjs +31 -0
  42. package/lib/node.d.ts +6 -0
  43. package/lib/options.cjs +54 -0
  44. package/lib/options.d.ts +63 -0
  45. package/lib/process-logger.cjs +217 -0
  46. package/lib/process-logger.d.ts +97 -0
  47. package/lib/provider.cjs +15 -0
  48. package/lib/provider.d.ts +160 -0
  49. package/lib/types.cjs +64 -0
  50. package/lib/types.d.ts +275 -0
  51. package/lib/utils.cjs +80 -0
  52. package/lib/utils.d.ts +34 -0
  53. package/package.json +34 -0
package/es/utils.mjs ADDED
@@ -0,0 +1,53 @@
1
+ function truncate(value, maxLength) {
2
+ if (value.length <= maxLength) {
3
+ return value;
4
+ }
5
+ return `${value.slice(0, maxLength)}...`;
6
+ }
7
+ function sleep(ms) {
8
+ return new Promise((resolve) => setTimeout(resolve, ms));
9
+ }
10
+ function base64Encode(str) {
11
+ if (!str) {
12
+ throw new Error("base64Encode: input string is required");
13
+ }
14
+ const bytes = new TextEncoder().encode(str);
15
+ const binString = Array.from(bytes, (byte) => String.fromCodePoint(byte)).join("");
16
+ return btoa(binString).replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "");
17
+ }
18
+ function base64Decode(base64) {
19
+ const standard = base64.replace(/-/g, "+").replace(/_/g, "/");
20
+ const binString = atob(standard);
21
+ const bytes = Uint8Array.from(binString, (c) => c.charCodeAt(0));
22
+ return new TextDecoder().decode(bytes);
23
+ }
24
+ function extractTextFromResponse(data) {
25
+ if (!data || typeof data !== "object") return null;
26
+ const obj = data;
27
+ if (obj.parts && Array.isArray(obj.parts)) {
28
+ const textParts = obj.parts.filter(
29
+ (p) => p && typeof p === "object" && p.type === "text"
30
+ ).map((p) => p.text).filter(Boolean);
31
+ if (textParts.length > 0) return textParts.join("");
32
+ }
33
+ if (obj.text && typeof obj.text === "string") {
34
+ return obj.text;
35
+ }
36
+ if (obj.content && typeof obj.content === "string") {
37
+ return obj.content;
38
+ }
39
+ if (obj.message && typeof obj.message === "string") {
40
+ return obj.message;
41
+ }
42
+ if (typeof data === "string") {
43
+ return data;
44
+ }
45
+ return null;
46
+ }
47
+ export {
48
+ base64Decode,
49
+ base64Encode,
50
+ extractTextFromResponse,
51
+ sleep,
52
+ truncate
53
+ };
@@ -0,0 +1,188 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var constants_exports = {};
19
+ __export(constants_exports, {
20
+ AUTO_OPEN_DELAY: () => AUTO_OPEN_DELAY,
21
+ BRIDGE_SCRIPT_PATH: () => BRIDGE_SCRIPT_PATH,
22
+ CHROME_DEVTOOLS_CHECK_TIMEOUT: () => CHROME_DEVTOOLS_CHECK_TIMEOUT,
23
+ CHROME_DEVTOOLS_PORT: () => CHROME_DEVTOOLS_PORT,
24
+ CONFIG_DATA_ATTR: () => CONFIG_DATA_ATTR,
25
+ CONTEXT_API_PATH: () => CONTEXT_API_PATH,
26
+ CONTEXT_MARKER: () => CONTEXT_MARKER,
27
+ CONTEXT_UPDATE_INTERVAL: () => CONTEXT_UPDATE_INTERVAL,
28
+ DEFAULT_HOSTNAME: () => DEFAULT_HOSTNAME,
29
+ DEFAULT_PROXY_PORT: () => DEFAULT_PROXY_PORT,
30
+ DEFAULT_RETRIES: () => DEFAULT_RETRIES,
31
+ DEFAULT_WEB_PORT: () => DEFAULT_WEB_PORT,
32
+ ENV_VSCODE_MODE: () => ENV_VSCODE_MODE,
33
+ ENV_VSCODE_PORT: () => ENV_VSCODE_PORT,
34
+ EXT_BROADCAST: () => EXT_BROADCAST,
35
+ EXT_MSG: () => EXT_MSG,
36
+ INIT_MARKER: () => INIT_MARKER,
37
+ INSPECTOR_CHECK_INTERVAL: () => INSPECTOR_CHECK_INTERVAL,
38
+ LOGS_API_PATH: () => LOGS_API_PATH,
39
+ LOG_PREFIX: () => LOG_PREFIX,
40
+ MAX_PORT_TRIES: () => MAX_PORT_TRIES,
41
+ MAX_TEXT_LENGTH: () => MAX_TEXT_LENGTH,
42
+ MCP_API_PATH: () => MCP_API_PATH,
43
+ NOTIFICATION_DURATION: () => NOTIFICATION_DURATION,
44
+ PAGE_CONTEXT_MARKER: () => PAGE_CONTEXT_MARKER,
45
+ PAGE_CONTEXT_MAX_TEXT_LENGTH: () => PAGE_CONTEXT_MAX_TEXT_LENGTH,
46
+ RETRY_DELAY: () => RETRY_DELAY,
47
+ SELECTED_ELEMENTS_KEY: () => SELECTED_ELEMENTS_KEY,
48
+ SERVER_CHECK_INTERVAL: () => SERVER_CHECK_INTERVAL,
49
+ SERVER_START_TIMEOUT: () => SERVER_START_TIMEOUT,
50
+ SERVER_SYNC_INTERVAL: () => SERVER_SYNC_INTERVAL,
51
+ SESSIONS_API_PATH: () => SESSIONS_API_PATH,
52
+ SEVERITY_ERROR: () => SEVERITY_ERROR,
53
+ SEVERITY_WARN: () => SEVERITY_WARN,
54
+ SSE_EVENTS_PATH: () => SSE_EVENTS_PATH,
55
+ START_API_PATH: () => START_API_PATH,
56
+ VSCODE_EXTENSION_PORT: () => VSCODE_EXTENSION_PORT,
57
+ VUE_DEVTOOLS_ACTIONS: () => VUE_DEVTOOLS_ACTIONS,
58
+ WARMUP_API_PATH: () => WARMUP_API_PATH,
59
+ WIDGET_MSG: () => WIDGET_MSG,
60
+ WIDGET_SCRIPT_PATH: () => WIDGET_SCRIPT_PATH,
61
+ WIDGET_STYLE_PATH: () => WIDGET_STYLE_PATH
62
+ });
63
+ module.exports = __toCommonJS(constants_exports);
64
+ const DEFAULT_HOSTNAME = "127.0.0.1";
65
+ const DEFAULT_WEB_PORT = 5097;
66
+ const DEFAULT_PROXY_PORT = 6097;
67
+ const SERVER_START_TIMEOUT = 3e5;
68
+ const SERVER_CHECK_INTERVAL = 100;
69
+ const DEFAULT_RETRIES = 5;
70
+ const RETRY_DELAY = 500;
71
+ const MAX_PORT_TRIES = 10;
72
+ const LOG_PREFIX = "[vite-plugin-aipanel]";
73
+ const WIDGET_SCRIPT_PATH = "/__aipanel_widget__.js";
74
+ const CONFIG_DATA_ATTR = "data-aipanel-config";
75
+ const CONTEXT_API_PATH = "/__aipanel_context__";
76
+ const START_API_PATH = "/__aipanel_start__";
77
+ const SESSIONS_API_PATH = "/__aipanel_sessions__";
78
+ const MCP_API_PATH = "/__aipanel_mcp__";
79
+ const SSE_EVENTS_PATH = "/__aipanel_events__";
80
+ const CONTEXT_UPDATE_INTERVAL = 500;
81
+ const SERVER_SYNC_INTERVAL = 2e3;
82
+ const INSPECTOR_CHECK_INTERVAL = 500;
83
+ const AUTO_OPEN_DELAY = 1e3;
84
+ const NOTIFICATION_DURATION = 3e3;
85
+ const INIT_MARKER = "__AIPANEL_INITIALIZED__";
86
+ const SELECTED_ELEMENTS_KEY = "__aipanel_selected_elements__";
87
+ const CHROME_DEVTOOLS_PORT = 9222;
88
+ const CHROME_DEVTOOLS_CHECK_TIMEOUT = 2e3;
89
+ const EXT_BROADCAST = {
90
+ PAGE_CONTEXT: "PAGE_CONTEXT",
91
+ THEME_CHANGE: "THEME_CHANGE",
92
+ SERVICE_APPEARED: "SERVICE_APPEARED",
93
+ SERVICE_GONE: "SERVICE_GONE"
94
+ };
95
+ const EXT_MSG = {
96
+ ...EXT_BROADCAST,
97
+ GET_PORT_INFO: "GET_PORT_INFO",
98
+ TAB_SWITCHED: "TAB_SWITCHED",
99
+ REQUEST_PAGE_CONTEXT: "REQUEST_PAGE_CONTEXT",
100
+ SELECTION_START: "SELECTION_START",
101
+ SELECTION_STOP: "SELECTION_STOP",
102
+ CS_QUERY_WINDOW: "__CS_QUERY_WINDOW__"
103
+ };
104
+ const WIDGET_MSG = {
105
+ READY: "AIPANEL_READY",
106
+ KEYDOWN: "AIPANEL_KEYDOWN",
107
+ SET_THEME: "AIPANEL_SET_THEME",
108
+ INSERT_FILE_PART: "AIPANEL_INSERT_FILE_PART",
109
+ SELECT_MODE_CHANGE: "AIPANEL_SELECT_MODE_CHANGE",
110
+ ELEMENT_SELECTED: "AIPANEL_ELEMENT_SELECTED",
111
+ SELECTION_CANCELLED: "AIPANEL_SELECTION_CANCELLED",
112
+ SELECTOR_START: "AIPANEL_SELECTOR_START",
113
+ SELECTOR_STOP: "AIPANEL_SELECTOR_STOP",
114
+ SERVICE_INFO: "AIPANEL_SERVICE_INFO",
115
+ MINIMIZE_STATE: "MINIMIZE_STATE_CHANGE",
116
+ PROMPT_DOCK_VISIBILITY: "PROMPT_DOCK_VISIBILITY_CHANGE",
117
+ REVIEW_PANEL_TOGGLE: "REVIEW_PANEL_TOGGLE",
118
+ /** 无 deepLink 能力的 Provider:通知 iframe 聚焦指定会话 */
119
+ FOCUS_SESSION: "AIPANEL_FOCUS_SESSION",
120
+ /** 无 deepLink 能力的 Provider:iframe 确认目标会话已激活且渲染稳定(携带 sessionId) */
121
+ SESSION_READY: "AIPANEL_SESSION_READY"
122
+ };
123
+ const WARMUP_API_PATH = "/__aipanel_warmup__";
124
+ const BRIDGE_SCRIPT_PATH = "/__aipanel_bridge__.js";
125
+ const LOGS_API_PATH = "/__aipanel_process_logs__";
126
+ const WIDGET_STYLE_PATH = "/__aipanel_widget__.css";
127
+ const MAX_TEXT_LENGTH = 100;
128
+ const CONTEXT_MARKER = "[\u5143\u7D20\u4E0A\u4E0B\u6587]";
129
+ const PAGE_CONTEXT_MARKER = "__AIPANEL_CONTEXT__";
130
+ const PAGE_CONTEXT_MAX_TEXT_LENGTH = 1e4;
131
+ const SEVERITY_ERROR = 1;
132
+ const SEVERITY_WARN = 2;
133
+ const VSCODE_EXTENSION_PORT = 51939;
134
+ const ENV_VSCODE_MODE = "AIPANEL_VSCODE_MODE";
135
+ const ENV_VSCODE_PORT = "AIPANEL_VSCODE_PORT";
136
+ const VUE_DEVTOOLS_ACTIONS = {
137
+ GET_COMPONENT_TREE: "getComponentTree",
138
+ GET_COMPONENT_STATE: "getComponentState",
139
+ GET_COMPONENT_RENDER_CODE: "getComponentRenderCode",
140
+ GET_APPS: "getApps",
141
+ TOGGLE_APP: "toggleApp",
142
+ GET_ROUTER_INFO: "getRouterInfo"
143
+ };
144
+ // Annotate the CommonJS export names for ESM import in node:
145
+ 0 && (module.exports = {
146
+ AUTO_OPEN_DELAY,
147
+ BRIDGE_SCRIPT_PATH,
148
+ CHROME_DEVTOOLS_CHECK_TIMEOUT,
149
+ CHROME_DEVTOOLS_PORT,
150
+ CONFIG_DATA_ATTR,
151
+ CONTEXT_API_PATH,
152
+ CONTEXT_MARKER,
153
+ CONTEXT_UPDATE_INTERVAL,
154
+ DEFAULT_HOSTNAME,
155
+ DEFAULT_PROXY_PORT,
156
+ DEFAULT_RETRIES,
157
+ DEFAULT_WEB_PORT,
158
+ ENV_VSCODE_MODE,
159
+ ENV_VSCODE_PORT,
160
+ EXT_BROADCAST,
161
+ EXT_MSG,
162
+ INIT_MARKER,
163
+ INSPECTOR_CHECK_INTERVAL,
164
+ LOGS_API_PATH,
165
+ LOG_PREFIX,
166
+ MAX_PORT_TRIES,
167
+ MAX_TEXT_LENGTH,
168
+ MCP_API_PATH,
169
+ NOTIFICATION_DURATION,
170
+ PAGE_CONTEXT_MARKER,
171
+ PAGE_CONTEXT_MAX_TEXT_LENGTH,
172
+ RETRY_DELAY,
173
+ SELECTED_ELEMENTS_KEY,
174
+ SERVER_CHECK_INTERVAL,
175
+ SERVER_START_TIMEOUT,
176
+ SERVER_SYNC_INTERVAL,
177
+ SESSIONS_API_PATH,
178
+ SEVERITY_ERROR,
179
+ SEVERITY_WARN,
180
+ SSE_EVENTS_PATH,
181
+ START_API_PATH,
182
+ VSCODE_EXTENSION_PORT,
183
+ VUE_DEVTOOLS_ACTIONS,
184
+ WARMUP_API_PATH,
185
+ WIDGET_MSG,
186
+ WIDGET_SCRIPT_PATH,
187
+ WIDGET_STYLE_PATH
188
+ });
@@ -0,0 +1,145 @@
1
+ /**
2
+ * @fileoverview 通用常量定义(Provider 无关)
3
+ * Provider 专属常量已下沉至 @aipanel/provider-opencode。
4
+ */
5
+ /** ==================== 网络相关 ==================== */
6
+ /** 默认主机名 */
7
+ export declare const DEFAULT_HOSTNAME = "127.0.0.1";
8
+ /** 默认 Web 服务端口 */
9
+ export declare const DEFAULT_WEB_PORT = 5097;
10
+ /** 默认代理服务端口 */
11
+ export declare const DEFAULT_PROXY_PORT = 6097;
12
+ /** 服务器启动超时时间(毫秒) */
13
+ export declare const SERVER_START_TIMEOUT = 300000;
14
+ /** 服务器检查间隔(毫秒) */
15
+ export declare const SERVER_CHECK_INTERVAL = 100;
16
+ /** ==================== 重试相关 ==================== */
17
+ /** 默认重试次数 */
18
+ export declare const DEFAULT_RETRIES = 5;
19
+ /** 重试延迟(毫秒) */
20
+ export declare const RETRY_DELAY = 500;
21
+ /** ==================== 端口查找 ==================== */
22
+ /** 最大端口尝试次数 */
23
+ export declare const MAX_PORT_TRIES = 10;
24
+ /** ==================== 日志相关 ==================== */
25
+ /** 插件日志前缀 */
26
+ export declare const LOG_PREFIX = "[vite-plugin-aipanel]";
27
+ /** ==================== 挂件相关 ==================== */
28
+ /** 挂件脚本路径 */
29
+ export declare const WIDGET_SCRIPT_PATH = "/__aipanel_widget__.js";
30
+ /** 配置数据属性名 */
31
+ export declare const CONFIG_DATA_ATTR = "data-aipanel-config";
32
+ /** 上下文 API 路径 */
33
+ export declare const CONTEXT_API_PATH = "/__aipanel_context__";
34
+ /** 启动 API 路径 */
35
+ export declare const START_API_PATH = "/__aipanel_start__";
36
+ /** 会话列表 API 路径 */
37
+ export declare const SESSIONS_API_PATH = "/__aipanel_sessions__";
38
+ /** MCP 代理 API 路径 */
39
+ export declare const MCP_API_PATH = "/__aipanel_mcp__";
40
+ /** SSE 事件流路径 */
41
+ export declare const SSE_EVENTS_PATH = "/__aipanel_events__";
42
+ /** 上下文更新间隔(毫秒) */
43
+ export declare const CONTEXT_UPDATE_INTERVAL = 500;
44
+ /** 服务器同步间隔(毫秒) */
45
+ export declare const SERVER_SYNC_INTERVAL = 2000;
46
+ /** Vue Inspector 检查间隔(毫秒) */
47
+ export declare const INSPECTOR_CHECK_INTERVAL = 500;
48
+ /** 自动打开延迟(毫秒) */
49
+ export declare const AUTO_OPEN_DELAY = 1000;
50
+ /** 通知显示时间(毫秒) */
51
+ export declare const NOTIFICATION_DURATION = 3000;
52
+ /** ==================== 存储相关 ==================== */
53
+ /** 初始化标记 */
54
+ export declare const INIT_MARKER = "__AIPANEL_INITIALIZED__";
55
+ /** 选中元素存储键 */
56
+ export declare const SELECTED_ELEMENTS_KEY = "__aipanel_selected_elements__";
57
+ /** ==================== Chrome DevTools ==================== */
58
+ /** Chrome DevTools Protocol 默认端口 */
59
+ export declare const CHROME_DEVTOOLS_PORT = 9222;
60
+ /** Chrome DevTools 检查超时时间(毫秒) */
61
+ export declare const CHROME_DEVTOOLS_CHECK_TIMEOUT = 2000;
62
+ /** ==================== 扩展消息类型 ==================== */
63
+ /** 需要后台转发的消息类型(多实例间通信) */
64
+ export declare const EXT_BROADCAST: {
65
+ readonly PAGE_CONTEXT: "PAGE_CONTEXT";
66
+ readonly THEME_CHANGE: "THEME_CHANGE";
67
+ readonly SERVICE_APPEARED: "SERVICE_APPEARED";
68
+ readonly SERVICE_GONE: "SERVICE_GONE";
69
+ };
70
+ /** Chrome 扩展内部消息类型(chrome.runtime.sendMessage) */
71
+ export declare const EXT_MSG: {
72
+ readonly GET_PORT_INFO: "GET_PORT_INFO";
73
+ readonly TAB_SWITCHED: "TAB_SWITCHED";
74
+ readonly REQUEST_PAGE_CONTEXT: "REQUEST_PAGE_CONTEXT";
75
+ readonly SELECTION_START: "SELECTION_START";
76
+ readonly SELECTION_STOP: "SELECTION_STOP";
77
+ readonly CS_QUERY_WINDOW: "__CS_QUERY_WINDOW__";
78
+ readonly PAGE_CONTEXT: "PAGE_CONTEXT";
79
+ readonly THEME_CHANGE: "THEME_CHANGE";
80
+ readonly SERVICE_APPEARED: "SERVICE_APPEARED";
81
+ readonly SERVICE_GONE: "SERVICE_GONE";
82
+ };
83
+ /** ==================== Widget PostMessage 类型 ==================== */
84
+ /** Widget PostMessage 消息类型 */
85
+ export declare const WIDGET_MSG: {
86
+ readonly READY: "AIPANEL_READY";
87
+ readonly KEYDOWN: "AIPANEL_KEYDOWN";
88
+ readonly SET_THEME: "AIPANEL_SET_THEME";
89
+ readonly INSERT_FILE_PART: "AIPANEL_INSERT_FILE_PART";
90
+ readonly SELECT_MODE_CHANGE: "AIPANEL_SELECT_MODE_CHANGE";
91
+ readonly ELEMENT_SELECTED: "AIPANEL_ELEMENT_SELECTED";
92
+ readonly SELECTION_CANCELLED: "AIPANEL_SELECTION_CANCELLED";
93
+ readonly SELECTOR_START: "AIPANEL_SELECTOR_START";
94
+ readonly SELECTOR_STOP: "AIPANEL_SELECTOR_STOP";
95
+ readonly SERVICE_INFO: "AIPANEL_SERVICE_INFO";
96
+ readonly MINIMIZE_STATE: "MINIMIZE_STATE_CHANGE";
97
+ readonly PROMPT_DOCK_VISIBILITY: "PROMPT_DOCK_VISIBILITY_CHANGE";
98
+ readonly REVIEW_PANEL_TOGGLE: "REVIEW_PANEL_TOGGLE";
99
+ /** 无 deepLink 能力的 Provider:通知 iframe 聚焦指定会话 */
100
+ readonly FOCUS_SESSION: "AIPANEL_FOCUS_SESSION";
101
+ /** 无 deepLink 能力的 Provider:iframe 确认目标会话已激活且渲染稳定(携带 sessionId) */
102
+ readonly SESSION_READY: "AIPANEL_SESSION_READY";
103
+ };
104
+ /** ==================== API 路径补充 ==================== */
105
+ /** Provider 预热 API 路径 */
106
+ export declare const WARMUP_API_PATH = "/__aipanel_warmup__";
107
+ /** Bridge 脚本路径 */
108
+ export declare const BRIDGE_SCRIPT_PATH = "/__aipanel_bridge__.js";
109
+ /** 进程日志 API 路径 */
110
+ export declare const LOGS_API_PATH = "/__aipanel_process_logs__";
111
+ /** Widget 样式路径 */
112
+ export declare const WIDGET_STYLE_PATH = "/__aipanel_widget__.css";
113
+ /** ==================== 文本处理 ==================== */
114
+ /** 元素文本最大显示长度 */
115
+ export declare const MAX_TEXT_LENGTH = 100;
116
+ /** 元素上下文标记 */
117
+ export declare const CONTEXT_MARKER = "[\u5143\u7D20\u4E0A\u4E0B\u6587]";
118
+ /** 页面上下文内部标记(用于插件) */
119
+ export declare const PAGE_CONTEXT_MARKER = "__AIPANEL_CONTEXT__";
120
+ /** 页面上下文文本最大长度 */
121
+ export declare const PAGE_CONTEXT_MAX_TEXT_LENGTH = 10000;
122
+ /** ==================== 诊断 Severity ==================== */
123
+ /**
124
+ * 诊断 severity 常量,使用 LSP DiagnosticSeverity 规范值
125
+ * Error=1, Warning=2, Information=3, Hint=4
126
+ */
127
+ export declare const SEVERITY_ERROR = 1;
128
+ export declare const SEVERITY_WARN = 2;
129
+ /** ==================== VS Code 扩展桥接 ==================== */
130
+ /** VS Code 扩展 HTTP 服务端口(vscode-extension ↔ provider 通信协议) */
131
+ export declare const VSCODE_EXTENSION_PORT = 51939;
132
+ /** VS Code 扩展相关环境变量名 */
133
+ export declare const ENV_VSCODE_MODE = "AIPANEL_VSCODE_MODE";
134
+ export declare const ENV_VSCODE_PORT = "AIPANEL_VSCODE_PORT";
135
+ /** ==================== Vue DevTools API ==================== */
136
+ /** Vue DevTools API action 名称 */
137
+ export declare const VUE_DEVTOOLS_ACTIONS: {
138
+ readonly GET_COMPONENT_TREE: "getComponentTree";
139
+ readonly GET_COMPONENT_STATE: "getComponentState";
140
+ readonly GET_COMPONENT_RENDER_CODE: "getComponentRenderCode";
141
+ readonly GET_APPS: "getApps";
142
+ readonly TOGGLE_APP: "toggleApp";
143
+ readonly GET_ROUTER_INFO: "getRouterInfo";
144
+ };
145
+ export type VueDevtoolsAction = (typeof VUE_DEVTOOLS_ACTIONS)[keyof typeof VUE_DEVTOOLS_ACTIONS];
@@ -0,0 +1,160 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+ var file_log_watcher_exports = {};
29
+ __export(file_log_watcher_exports, {
30
+ readLogFile: () => readLogFile,
31
+ readLogFileTail: () => readLogFileTail
32
+ });
33
+ module.exports = __toCommonJS(file_log_watcher_exports);
34
+ var import_fs = __toESM(require("fs"));
35
+ var import_path = __toESM(require("path"));
36
+ var import_logger = require("./logger.cjs");
37
+ const log = (0, import_logger.createLogger)("FileLogReader");
38
+ function detectLogLevel(line) {
39
+ const lowerLine = line.toLowerCase();
40
+ if (lowerLine.includes("error") || lowerLine.includes("err") || lowerLine.includes("fatal")) {
41
+ return "error";
42
+ }
43
+ if (lowerLine.includes("warn") || lowerLine.includes("warning")) {
44
+ return "warn";
45
+ }
46
+ return "info";
47
+ }
48
+ async function readLogFile(options) {
49
+ const { name, filePath, projectRoot, level, limit } = options;
50
+ const resolvedPath = resolvePath(filePath, projectRoot);
51
+ if (!import_fs.default.existsSync(resolvedPath)) {
52
+ log.debug(`Log file does not exist: ${resolvedPath}`);
53
+ return [];
54
+ }
55
+ try {
56
+ const content = await import_fs.default.promises.readFile(resolvedPath, "utf-8");
57
+ const lines = content.split("\n").filter((line) => line.trim());
58
+ const entries = [];
59
+ for (const line of lines) {
60
+ const entry = {
61
+ level: detectLogLevel(line),
62
+ message: line,
63
+ source: `file:${name}`
64
+ };
65
+ if (level) {
66
+ const levels = Array.isArray(level) ? level : [level];
67
+ if (!levels.includes(entry.level)) {
68
+ continue;
69
+ }
70
+ }
71
+ entries.push(entry);
72
+ }
73
+ if (limit && limit > 0) {
74
+ return entries.slice(-limit);
75
+ }
76
+ return entries;
77
+ } catch (err) {
78
+ log.error(`Error reading log file ${resolvedPath}`, { error: err });
79
+ return [];
80
+ }
81
+ }
82
+ async function readLogFileTail(options) {
83
+ const { name, filePath, projectRoot, lines = 200, limit, level } = options;
84
+ const resolvedPath = resolvePath(filePath, projectRoot);
85
+ if (!import_fs.default.existsSync(resolvedPath)) {
86
+ log.debug(`Log file does not exist: ${resolvedPath}`);
87
+ return [];
88
+ }
89
+ try {
90
+ const stat = import_fs.default.statSync(resolvedPath);
91
+ const fd = import_fs.default.openSync(resolvedPath, "r");
92
+ const chunkSize = 16 * 1024;
93
+ let position = stat.size;
94
+ let buffer = Buffer.alloc(0);
95
+ let lineCount = 0;
96
+ while (position > 0 && lineCount <= lines) {
97
+ const readSize = Math.min(chunkSize, position);
98
+ position -= readSize;
99
+ const chunk = Buffer.alloc(readSize);
100
+ import_fs.default.readSync(fd, chunk, 0, readSize, position);
101
+ buffer = Buffer.concat([chunk, buffer]);
102
+ const newLineCount = buffer.filter((byte) => byte === 10).length;
103
+ lineCount = newLineCount;
104
+ if (newLineCount >= lines) {
105
+ const linesArray = buffer.toString("utf-8").split("\n");
106
+ const excessLines = newLineCount - lines;
107
+ let charsToRemove = 0;
108
+ let count = 0;
109
+ for (let i = 0; i < linesArray.length; i++) {
110
+ count += linesArray[i].length + 1;
111
+ if (count > excessLines) {
112
+ charsToRemove = linesArray.slice(0, i + 1).join("\n").length + 1;
113
+ break;
114
+ }
115
+ }
116
+ buffer = buffer.slice(charsToRemove);
117
+ break;
118
+ }
119
+ }
120
+ import_fs.default.closeSync(fd);
121
+ const content = buffer.toString("utf-8").trim();
122
+ const logLines = content.split("\n").filter((line) => line.trim());
123
+ const entries = [];
124
+ for (const line of logLines) {
125
+ const entry = {
126
+ level: detectLogLevel(line),
127
+ message: line,
128
+ source: `file:${name}`
129
+ };
130
+ if (level) {
131
+ const levels = Array.isArray(level) ? level : [level];
132
+ if (!levels.includes(entry.level)) {
133
+ continue;
134
+ }
135
+ }
136
+ entries.push(entry);
137
+ }
138
+ if (limit && limit > 0) {
139
+ return entries.slice(-limit);
140
+ }
141
+ return entries;
142
+ } catch (err) {
143
+ log.error(`Error reading log file ${resolvedPath}`, { error: err });
144
+ return [];
145
+ }
146
+ }
147
+ function resolvePath(filePath, projectRoot) {
148
+ if (import_path.default.isAbsolute(filePath)) {
149
+ return filePath;
150
+ }
151
+ if (projectRoot) {
152
+ return import_path.default.resolve(projectRoot, filePath);
153
+ }
154
+ return import_path.default.resolve(process.cwd(), filePath);
155
+ }
156
+ // Annotate the CommonJS export names for ESM import in node:
157
+ 0 && (module.exports = {
158
+ readLogFile,
159
+ readLogFileTail
160
+ });
@@ -0,0 +1,20 @@
1
+ export interface FileLogEntry {
2
+ level: "info" | "warn" | "error";
3
+ message: string;
4
+ source: string;
5
+ }
6
+ export interface LogFileOptions {
7
+ name: string;
8
+ filePath: string;
9
+ }
10
+ export declare function readLogFile(options: LogFileOptions & {
11
+ projectRoot?: string;
12
+ level?: ("info" | "warn" | "error") | ("info" | "warn" | "error")[];
13
+ limit?: number;
14
+ }): Promise<FileLogEntry[]>;
15
+ export declare function readLogFileTail(options: LogFileOptions & {
16
+ projectRoot?: string;
17
+ lines?: number;
18
+ limit?: number;
19
+ level?: ("info" | "warn" | "error") | ("info" | "warn" | "error")[];
20
+ }): Promise<FileLogEntry[]>;
package/lib/index.cjs ADDED
@@ -0,0 +1,33 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __copyProps = (to, from, except, desc) => {
6
+ if (from && typeof from === "object" || typeof from === "function") {
7
+ for (let key of __getOwnPropNames(from))
8
+ if (!__hasOwnProp.call(to, key) && key !== except)
9
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
10
+ }
11
+ return to;
12
+ };
13
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
14
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
+ var lib_exports = {};
16
+ module.exports = __toCommonJS(lib_exports);
17
+ __reExport(lib_exports, require("./constants.cjs"), module.exports);
18
+ __reExport(lib_exports, require("./logger-core.cjs"), module.exports);
19
+ __reExport(lib_exports, require("./logger.cjs"), module.exports);
20
+ __reExport(lib_exports, require("./options.cjs"), module.exports);
21
+ __reExport(lib_exports, require("./provider.cjs"), module.exports);
22
+ __reExport(lib_exports, require("./types.cjs"), module.exports);
23
+ __reExport(lib_exports, require("./utils.cjs"), module.exports);
24
+ // Annotate the CommonJS export names for ESM import in node:
25
+ 0 && (module.exports = {
26
+ ...require("./constants.cjs"),
27
+ ...require("./logger-core.cjs"),
28
+ ...require("./logger.cjs"),
29
+ ...require("./options.cjs"),
30
+ ...require("./provider.cjs"),
31
+ ...require("./types.cjs"),
32
+ ...require("./utils.cjs")
33
+ });
package/lib/index.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ export * from "./constants";
2
+ export * from "./logger-core";
3
+ export * from "./logger";
4
+ export * from "./options";
5
+ export * from "./provider";
6
+ export * from "./types";
7
+ export * from "./utils";