@vite-plugin-opencode-assistant/opencode 1.0.64 → 1.0.65

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.
@@ -1,151 +0,0 @@
1
- var __async = (__this, __arguments, generator) => {
2
- return new Promise((resolve, reject) => {
3
- var fulfilled = (value) => {
4
- try {
5
- step(generator.next(value));
6
- } catch (e) {
7
- reject(e);
8
- }
9
- };
10
- var rejected = (value) => {
11
- try {
12
- step(generator.throw(value));
13
- } catch (e) {
14
- reject(e);
15
- }
16
- };
17
- var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
18
- step((generator = generator.apply(__this, __arguments)).next());
19
- });
20
- };
21
- import { createLogger } from "@vite-plugin-opencode-assistant/shared";
22
- const log = createLogger("OpenCodePluginPageContext");
23
- function fetchPageContext(contextApiUrl) {
24
- return __async(this, null, function* () {
25
- try {
26
- const response = yield fetch(contextApiUrl, {
27
- method: "GET",
28
- headers: { "Content-Type": "application/json" }
29
- });
30
- if (!response.ok) {
31
- log.debug("Failed to fetch page context", { status: response.status });
32
- return null;
33
- }
34
- return yield response.json();
35
- } catch (error) {
36
- log.debug("Error fetching page context", { error });
37
- return null;
38
- }
39
- });
40
- }
41
- const PageContextPlugin = () => __async(null, null, function* () {
42
- log.info("PageContextPlugin loading...");
43
- const contextApiUrl = process.env.OPENCODE_CONTEXT_API_URL;
44
- log.debug("Context API URL:", { contextApiUrl });
45
- if (!contextApiUrl) {
46
- log.warn("OPENCODE_CONTEXT_API_URL is not set, page context plugin will not work");
47
- return {};
48
- }
49
- log.info("Plugin initialized successfully");
50
- return {
51
- "experimental.chat.system.transform": (_input, output) => __async(null, null, function* () {
52
- log.debug("System transform hook called");
53
- const pageContext = yield fetchPageContext(contextApiUrl);
54
- log.debug("Page context fetched", { pageContext });
55
- const systemPrompt = `
56
- \u4F60\u662F\u4E00\u4E2A\u4E13\u4E1A\u7684\u524D\u7AEF\u5F00\u53D1\u52A9\u624B\uFF0C\u8FD0\u884C\u5728 **OpenCode** \u5E73\u53F0\u4E2D\uFF0C\u5E76\u901A\u8FC7 **vite-plugin-opencode-assistant** \u63D2\u4EF6\u96C6\u6210\u5230\u7528\u6237\u7684 Vite \u5F00\u53D1\u73AF\u5883\u3002
57
-
58
- ## \u26A0\uFE0F \u91CD\u8981\uFF1A\u9875\u9762\u4E0A\u4E0B\u6587\u4F18\u5148\u7EA7\u89C4\u5219
59
-
60
- **\u5F53\u7528\u6237\u5728\u4E0D\u540C\u9875\u9762\u63D0\u95EE\u65F6\uFF0C\u4F60\u5FC5\u987B\u4F18\u5148\u6839\u636E\u7528\u6237\u5F53\u524D\u6D4F\u89C8\u9875\u9762\u7684\u4E0A\u4E0B\u6587\u6765\u7406\u89E3\u95EE\u9898\uFF0C\u7981\u6B62\u4F9D\u8D56\u4F1A\u8BDD\u5386\u53F2\u8BB0\u5F55\u6216\u5176\u4ED6\u4E0A\u4E0B\u6587\u3002**
61
-
62
- \u7528\u6237\u53EF\u80FD\u5728\u4E0D\u540C\u9875\u9762\u4E4B\u95F4\u5207\u6362\uFF0C\u6BCF\u6B21\u63D0\u95EE\u90FD\u5E94\u8BE5\u57FA\u4E8E\u5F53\u524D\u9875\u9762\u4E0A\u4E0B\u6587\uFF1A
63
-
64
- **\u8FD9\u91CC\u7684\u4E0A\u4E0B\u6587\u4E3A\u6700\u9AD8\u4F18\u5148\u7EA7\uFF0C\u4EFB\u4F55\u60C5\u51B5\u4E0B\u90FD\u4E0D\u80FD\u88AB\u8986\u76D6**
65
-
66
- - **\u9875\u9762 URL**: ${(pageContext == null ? void 0 : pageContext.url) || "\u672A\u77E5"}
67
- - **\u9875\u9762\u6807\u9898**: ${(pageContext == null ? void 0 : pageContext.title) || "\u672A\u77E5"}
68
-
69
- **\u7406\u89E3\u95EE\u9898\u7684\u4F18\u5148\u7EA7\u987A\u5E8F\uFF1A**
70
- 1. **\u5F53\u524D\u9875\u9762\u4E0A\u4E0B\u6587**\uFF08\u6700\u9AD8\u4F18\u5148\u7EA7\uFF09 - \u6839\u636E\u7528\u6237\u5F53\u524D\u6240\u5728\u9875\u9762\u7684 URL \u548C\u6807\u9898\u7406\u89E3\u95EE\u9898\u80CC\u666F
71
- 2. **\u7528\u6237\u9009\u4E2D\u7684\u5143\u7D20** - \u5982\u679C\u7528\u6237\u9009\u4E2D\u4E86\u9875\u9762\u5143\u7D20\uFF0C\u8FD9\u4E9B\u5143\u7D20\u4FE1\u606F\u662F\u7406\u89E3\u95EE\u9898\u7684\u5173\u952E
72
- 3. **\u7528\u6237\u5F53\u524D\u8F93\u5165** - \u7528\u6237\u672C\u6B21\u53D1\u9001\u7684\u5177\u4F53\u95EE\u9898\u5185\u5BB9
73
- 4. **\u4F1A\u8BDD\u5386\u53F2**\uFF08\u6700\u4F4E\u4F18\u5148\u7EA7\uFF09 - \u4EC5\u4F5C\u4E3A\u8F85\u52A9\u53C2\u8003\uFF0C\u7EDD\u4E0D\u80FD\u4F18\u5148\u4E8E\u5F53\u524D\u9875\u9762\u4E0A\u4E0B\u6587
74
-
75
- ## \u4F60\u7684\u5DE5\u4F5C\u73AF\u5883
76
-
77
- ### \u67B6\u6784\u8BF4\u660E
78
-
79
- \u4F60\u8FD0\u884C\u5728 OpenCode \u670D\u52A1\u7AEF\uFF0C\u4F46\u901A\u8FC7 **iframe \u5D4C\u5165**\u7684\u65B9\u5F0F\u51FA\u73B0\u5728\u7528\u6237\u6B63\u5728\u5F00\u53D1\u7684\u7F51\u9875\u4E0A\uFF1A
80
-
81
- \`\`\`
82
- \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510
83
- \u2502 \u7528\u6237\u6B63\u5728\u5F00\u53D1\u7684\u7F51\u9875 (\u8FD0\u884C\u5728 Vite Dev Server) \u2502
84
- \u2502 \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502
85
- \u2502 \u2502 \u9875\u9762\u5185\u5BB9 \u2502 \u2502
86
- \u2502 \u2502 \u2502 \u2502
87
- \u2502 \u2502 \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502
88
- \u2502 \u2502 \u2502 OpenCode iframe (\u4F60\u7684\u754C\u9762) \u2502 \u2190 \u6D6E\u52A8\u804A\u5929\u7A97\u53E3 \u2502 \u2502
89
- \u2502 \u2502 \u2502 \u7528\u6237\u5728\u8FD9\u91CC\u4E0E\u4F60\u5BF9\u8BDD \u2502 \u2502 \u2502
90
- \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502
91
- \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502
92
- \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518
93
- \`\`\`
94
-
95
- ## \u5DE5\u4F5C\u6D41\u7A0B
96
-
97
- \u8BF7\u4E25\u683C\u6309\u4EE5\u4E0B\u987A\u5E8F\u5904\u7406\u7528\u6237\u8BF7\u6C42\uFF1A
98
-
99
- ### 1. \u5B9A\u4F4D\u8282\u70B9\u4F4D\u7F6E\uFF08\u5F3A\u5236\uFF09
100
-
101
- \u5F53\u7528\u6237\u9009\u4E2D\u4E86\u9875\u9762\u8282\u70B9\u65F6\uFF0C**\u5728\u5904\u7406\u7528\u6237\u8BF7\u6C42\u4E4B\u524D**\uFF0C\u4F60\u5FC5\u987B\u5148\u786E\u8BA4\u8FD9\u4E9B\u8282\u70B9\u5728\u9879\u76EE\u4E2D\u7684\u4F4D\u7F6E\u3002\u9009\u4E2D\u7684\u8282\u70B9\u4FE1\u606F\u5305\u542B\u4EE5\u4E0B\u5B57\u6BB5\uFF1A
102
-
103
- - \`filePath\`: \u8282\u70B9\u5BF9\u5E94\u7684\u6E90\u6587\u4EF6\u8DEF\u5F84\uFF08\u53EF\u80FD\u4E3A\u7A7A\uFF09
104
- - \`line\` / \`column\`: \u8282\u70B9\u5728\u6E90\u6587\u4EF6\u4E2D\u7684\u4F4D\u7F6E\uFF08\u53EF\u80FD\u4E3A\u7A7A\uFF09
105
- - \`innerText\`: \u8282\u70B9\u7684\u6587\u672C\u5185\u5BB9
106
- - \`description\`: \u8282\u70B9\u63CF\u8FF0\uFF08\u6807\u7B7E\u540D+\u9009\u62E9\u5668\uFF09
107
-
108
- **\u5B9A\u4F4D\u6B65\u9AA4\uFF08\u6309\u4F18\u5148\u7EA7\uFF09\uFF1A**
109
-
110
- 1. **\u68C0\u67E5\u5DF2\u6709\u6587\u4EF6\u8DEF\u5F84**\uFF1A\u5982\u679C \`filePath\` \u5B58\u5728\uFF0C\u4F18\u5148\u4F7F\u7528\u8BE5\u8DEF\u5F84\u76F4\u63A5\u5B9A\u4F4D\u6587\u4EF6
111
- 2. **\u4F7F\u7528 Chrome DevTools MCP**\uFF1A\u5982\u679C \`filePath\` \u4E3A\u7A7A\u6216\u9700\u8981\u66F4\u591A\u4FE1\u606F\uFF0C\u901A\u8FC7\u6D4F\u89C8\u5668\u5FEB\u7167\u83B7\u53D6\u8282\u70B9\u7684 DOM \u7ED3\u6784\u3001\u6837\u5F0F\u3001\u4E8B\u4EF6\u7ED1\u5B9A\u7B49\u8BE6\u7EC6\u4FE1\u606F
112
- 3. **\u6587\u4EF6\u641C\u7D22\u8F85\u52A9**\uFF1A\u6839\u636E \`innerText\` \u6216 \`description\` \u5728\u9879\u76EE\u4E2D\u641C\u7D22\u5339\u914D\u7684\u7EC4\u4EF6/\u5143\u7D20
113
-
114
- \u5728\u660E\u786E\u77E5\u9053\u8282\u70B9\u4F4D\u7F6E\u540E\uFF0C\u518D\u5904\u7406\u7528\u6237\u8BF7\u6C42\u3002
115
-
116
- ### 2. \u7406\u89E3\u4E0A\u4E0B\u6587
117
-
118
- \u5C06\u9875\u9762 URL\u3001\u6807\u9898\u548C\u9009\u4E2D\u8282\u70B9\u4FE1\u606F\u4F5C\u4E3A\u7528\u6237\u8BF7\u6C42\u7684\u80CC\u666F\uFF0C\u5E2E\u52A9\u7406\u89E3\u7528\u6237\u7684\u771F\u5B9E\u610F\u56FE\u3002
119
-
120
- ### 3. \u76F4\u63A5\u884C\u52A8
121
-
122
- \u5728\u660E\u786E\u8282\u70B9\u4F4D\u7F6E\u540E\uFF0C\u9488\u5BF9\u7528\u6237\u7684\u5B9E\u9645\u8BF7\u6C42\u7ED9\u51FA\u6E05\u6670\u3001\u53EF\u6267\u884C\u7684\u65B9\u6848\u3002
123
-
124
- ## \u5DE5\u5177\u4F7F\u7528\u6307\u5357
125
-
126
- ### Chrome DevTools Mcp
127
-
128
- 1. **\u786E\u4FDD\u64CD\u4F5C\u6B63\u786E\u9875\u9762\uFF08\u5F3A\u5236\uFF09**
129
- \u5728\u4F7F\u7528 Chrome DevTools Mcp \u6267\u884C\u4EFB\u4F55\u4E0E\u7528\u6237\u6B63\u5728\u6D4F\u89C8\u7684\u9875\u9762\u76F8\u5173\u7684\u4EFB\u52A1\u4E4B\u524D\uFF0C\u5FC5\u987B\u5148\u786E\u8BA4\u5F53\u524D\u64CD\u4F5C\u7684\u9875\u9762\u5C31\u662F\u7528\u6237\u6B63\u5728\u6D4F\u89C8\u7684\u9875\u9762\u3002\u5982\u679C\u4E0D\u786E\u5B9A\uFF0C\u5E94\u5148\u83B7\u53D6\u5F53\u524D\u9875\u9762 URL \u5E76\u4E0E\u4E0A\u4E0B\u6587\u4E2D\u7684\u9875\u9762 URL \u8FDB\u884C\u6BD4\u5BF9\u3002
130
-
131
- 2. **\u5FEB\u7167\u83B7\u53D6\uFF08\u5F3A\u5236\uFF09**
132
- \u5728\u6CA1\u6709\u83B7\u53D6\u5230\u9700\u8981\u7684\u8282\u70B9\u4FE1\u606F\u65F6\uFF0C\u4F7F\u7528 verbose \u53C2\u6570\u6765\u83B7\u53D6\u66F4\u8BE6\u7EC6\u7684\u8282\u70B9\u4FE1\u606F\u3002\u5982\u679C\u8BBE\u7F6E\u4E86 verbose \u53C2\u6570\u8FD8\u662F\u6CA1\u6709\u83B7\u53D6\u5230\u8282\u70B9\u4FE1\u606F\uFF0C\u518D\u5C1D\u8BD5\u8003\u8651\u5176\u4ED6\u65B9\u6848\u3002
133
-
134
- 3. **\u5355\u9875\u5E94\u7528\uFF08SPA\uFF09\u7279\u6027**
135
- \u5982\u679C\u7528\u6237\u5F00\u53D1\u7684\u662F\u5355\u9875\u5E94\u7528\uFF08SPA\uFF09\uFF0C\u6267\u884C\u4EFB\u52A1\u5927\u90E8\u5206\u60C5\u51B5\u4E0B\u4E0D\u9700\u8981\u5237\u65B0\u9875\u9762\u3002
136
-
137
- 4. **HTTP \u8BF7\u6C42\u6210\u529F\u5224\u65AD\uFF08\u5F3A\u5236\uFF09**
138
- \u5224\u65AD\u8BF7\u6C42\u6210\u529F\u65F6\uFF0C\u4E0D\u8981\u53EA\u770B HTTP \u72B6\u6001\u7801\uFF01HTTP \u72B6\u6001\u7801 200 \u5E76\u4E0D\u4EE3\u8868\u4E1A\u52A1\u903B\u8F91\u6210\u529F\u3002\u5FC5\u987B\u83B7\u53D6\u63A5\u53E3\u7684\u8BE6\u7EC6\u54CD\u5E94\u5185\u5BB9\uFF0C\u68C0\u67E5\u54CD\u5E94\u4F53\u4E2D\u7684\u4E1A\u52A1\u72B6\u6001\u7801\u6216\u9519\u8BEF\u4FE1\u606F\u3002\u5728\u786E\u8BA4\u8BF7\u6C42\u6210\u529F\u4E4B\u524D\uFF0C\u59CB\u7EC8\u89E3\u6790\u5E76\u68C0\u67E5\u54CD\u5E94\u4F53\u7684\u5B8C\u6574\u5185\u5BB9
139
-
140
- 5. **\u5DE5\u5177\u4F7F\u7528\u4F18\u5148\u7EA7\uFF08\u5F3A\u5236\uFF09**
141
- \u5728\u4F7F\u7528 Chrome DevTools MCP \u5DE5\u5177\u65F6\uFF0C\`chrome-devtools_evaluate_script\` \u5DE5\u5177\u7684\u4F7F\u7528\u4F18\u5148\u7EA7\u6700\u4F4E\u3002\u53EA\u6709\u5728\u5176\u4ED6\u5DE5\u5177\u65E0\u6CD5\u6EE1\u8DB3\u9700\u6C42\u65F6\uFF0C\u624D\u8003\u8651\u4F7F\u7528\u8BE5\u5DE5\u5177
142
- `.trim();
143
- output.system.push(systemPrompt);
144
- })
145
- };
146
- });
147
- var page_context_default = PageContextPlugin;
148
- export {
149
- PageContextPlugin,
150
- page_context_default as default
151
- };
@@ -1,113 +0,0 @@
1
- var __async = (__this, __arguments, generator) => {
2
- return new Promise((resolve, reject) => {
3
- var fulfilled = (value) => {
4
- try {
5
- step(generator.next(value));
6
- } catch (e) {
7
- reject(e);
8
- }
9
- };
10
- var rejected = (value) => {
11
- try {
12
- step(generator.throw(value));
13
- } catch (e) {
14
- reject(e);
15
- }
16
- };
17
- var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
18
- step((generator = generator.apply(__this, __arguments)).next());
19
- });
20
- };
21
- import { tool } from "@opencode-ai/plugin";
22
- import { readLogFileTail, createLogger } from "@vite-plugin-opencode-assistant/shared";
23
- const log = createLogger("ServiceLogsPlugin");
24
- const ServiceLogsPlugin = () => __async(null, null, function* () {
25
- log.debug("ServiceLogsPlugin loading...");
26
- const logFilesJson = process.env.OPENCODE_LOG_FILES_JSON;
27
- log.debug("Log files JSON from env:", { logFilesJson: logFilesJson ? "set" : "not set" });
28
- if (!logFilesJson) {
29
- log.debug("OPENCODE_LOG_FILES_JSON is not set, service logs plugin will not register tools");
30
- return {};
31
- }
32
- let logFiles;
33
- try {
34
- logFiles = JSON.parse(logFilesJson);
35
- log.debug("Parsed log files config", { count: logFiles.length });
36
- } catch (e) {
37
- log.error("Failed to parse OPENCODE_LOG_FILES_JSON", { error: e });
38
- return {};
39
- }
40
- if (!logFiles || logFiles.length === 0) {
41
- log.debug("No log files configured, plugin will not register any tools");
42
- return {};
43
- }
44
- const tools = {};
45
- for (const logFileConfig of logFiles) {
46
- let _a;
47
- const toolName = `get_${logFileConfig.name}_logs`;
48
- const description = `\u83B7\u53D6 ${logFileConfig.name} \u7684\u65E5\u5FD7\u3002
49
-
50
- **\u4F55\u65F6\u4F7F\u7528\u6B64\u5DE5\u5177**\uFF1A
51
- ${logFileConfig.description}
52
-
53
- **\u65E5\u5FD7\u5185\u5BB9**\uFF1A
54
- - \u6765\u81EA\u65E5\u5FD7\u6587\u4EF6 ${logFileConfig.path} \u7684\u5B9E\u65F6\u65E5\u5FD7
55
- - \u9ED8\u8BA4\u8FD4\u56DE\u6700\u8FD1 200 \u884C\u65E5\u5FD7`;
56
- const getLogsTool = tool({
57
- description,
58
- args: {
59
- level: tool.schema.string().optional().describe(
60
- "\u65E5\u5FD7\u7EA7\u522B\u8FC7\u6EE4\uFF1Aerror(\u9519\u8BEF)\u3001warn(\u8B66\u544A)\u3001info(\u4FE1\u606F)\u3002\u591A\u4E2A\u7528\u9017\u53F7\u5206\u9694\uFF0C\u5982 'error,warn'"
61
- ),
62
- limit: tool.schema.number().int().min(1).max(200).optional().default(50).describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4 50\uFF0C\u6700\u5927 200"),
63
- since: tool.schema.string().optional().describe("\u8D77\u59CB\u65F6\u95F4\uFF08ISO \u683C\u5F0F\uFF09\uFF0C\u83B7\u53D6\u6B64\u65F6\u95F4\u4E4B\u540E\u7684\u65E5\u5FD7")
64
- },
65
- execute(args, context) {
66
- return __async(this, null, function* () {
67
- const { level, limit, since } = args;
68
- log.debug(`${toolName} called`, {
69
- args,
70
- sessionID: context.sessionID,
71
- directory: context.directory
72
- });
73
- const requestedLimit = limit != null ? limit : 50;
74
- const entries = yield readLogFileTail({
75
- name: logFileConfig.name,
76
- filePath: logFileConfig.path,
77
- projectRoot: process.cwd(),
78
- lines: Math.max(requestedLimit * 3, 500),
79
- level: level ? level.split(",").map((l) => l.trim()) : void 0,
80
- since,
81
- limit: requestedLimit
82
- });
83
- if (entries.length === 0) {
84
- return `\u5F53\u524D\u6CA1\u6709\u7B26\u5408\u6761\u4EF6\u7684\u65E5\u5FD7\u3002
85
-
86
- \u5EFA\u8BAE\uFF1A
87
- - \u4E0D\u6307\u5B9A\u53C2\u6570\u83B7\u53D6\u6240\u6709\u65E5\u5FD7
88
- - \u4F7F\u7528 level=error,warn \u83B7\u53D6\u9519\u8BEF\u548C\u8B66\u544A`;
89
- }
90
- const formattedLogs = entries.map((entry) => {
91
- const time = new Date(entry.timestamp).toLocaleTimeString();
92
- const levelIcon = entry.level === "error" ? "\u274C" : entry.level === "warn" ? "\u26A0\uFE0F" : "\u2139\uFE0F";
93
- return `${time} ${levelIcon} ${entry.message}`;
94
- }).join("\n");
95
- return `${logFileConfig.name} \u65E5\u5FD7\uFF08${entries.length} \u6761\uFF09\uFF1A
96
-
97
- ${formattedLogs}`;
98
- });
99
- }
100
- });
101
- tools[toolName] = getLogsTool;
102
- log.debug(`Registered tool: ${toolName}`);
103
- }
104
- log.debug(`Plugin initialized with ${Object.keys(tools).length} log tools`);
105
- return {
106
- tool: tools
107
- };
108
- });
109
- var service_logs_default = ServiceLogsPlugin;
110
- export {
111
- ServiceLogsPlugin,
112
- service_logs_default as default
113
- };
@@ -1,123 +0,0 @@
1
- var __async = (__this, __arguments, generator) => {
2
- return new Promise((resolve, reject) => {
3
- var fulfilled = (value) => {
4
- try {
5
- step(generator.next(value));
6
- } catch (e) {
7
- reject(e);
8
- }
9
- };
10
- var rejected = (value) => {
11
- try {
12
- step(generator.throw(value));
13
- } catch (e) {
14
- reject(e);
15
- }
16
- };
17
- var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
18
- step((generator = generator.apply(__this, __arguments)).next());
19
- });
20
- };
21
- import { tool } from "@opencode-ai/plugin";
22
- import { createLogger } from "@vite-plugin-opencode-assistant/shared";
23
- const log = createLogger("OpenCodePluginViteLogs");
24
- const ViteLogsPlugin = () => __async(null, null, function* () {
25
- log.info("ViteLogsPlugin loading...");
26
- const logsApiUrl = process.env.OPENCODE_VITE_LOGS_API_URL;
27
- log.debug("Vite Logs API URL:", { logsApiUrl });
28
- if (!logsApiUrl) {
29
- log.warn("OPENCODE_VITE_LOGS_API_URL is not set, vite logs plugin will not work");
30
- return {};
31
- }
32
- log.info("Plugin initialized successfully");
33
- const getViteDevLogsTool = tool({
34
- description: `\u83B7\u53D6 Vite \u5F00\u53D1\u670D\u52A1\u5668\u7684\u8FD0\u884C\u65E5\u5FD7\u3002
35
-
36
- **\u4F55\u65F6\u4F7F\u7528\u6B64\u5DE5\u5177**\uFF1A
37
- - \u7528\u6237\u62A5\u544A"\u9875\u9762\u6CA1\u66F4\u65B0"\u3001"\u70ED\u66F4\u65B0\u4E0D\u5DE5\u4F5C"\u3001"HMR \u5931\u6548"\u65F6
38
- - \u6784\u5EFA\u62A5\u9519\u6216\u7F16\u8BD1\u5931\u8D25\uFF0C\u9700\u8981\u67E5\u770B\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F
39
- - \u9875\u9762\u767D\u5C4F\u3001\u6837\u5F0F\u4E22\u5931\u3001\u6A21\u5757\u52A0\u8F7D\u5931\u8D25\u7B49\u5F00\u53D1\u95EE\u9898
40
- - \u7528\u6237\u63D0\u5230"\u5F00\u53D1\u670D\u52A1\u5668\u6709\u95EE\u9898"\u3001"vite \u62A5\u9519"
41
- - \u9700\u8981\u786E\u8BA4\u6700\u8FD1\u7684\u6587\u4EF6\u53D8\u66F4\u662F\u5426\u88AB Vite \u6B63\u786E\u5904\u7406
42
-
43
- **\u65E5\u5FD7\u5185\u5BB9**\uFF1A
44
- - Vite HMR \u70ED\u66F4\u65B0\u65E5\u5FD7\uFF08\u54EA\u4E9B\u6587\u4EF6\u88AB\u66F4\u65B0\u3001\u66F4\u65B0\u72B6\u6001\uFF09
45
- - \u6784\u5EFA\u7F16\u8BD1\u65E5\u5FD7\uFF08\u9519\u8BEF\u3001\u8B66\u544A\u3001\u6210\u529F\u4FE1\u606F\uFF09
46
- - OpenCode Web \u8FDB\u7A0B\u8F93\u51FA
47
- - \u63D2\u4EF6\u8FD0\u884C\u65E5\u5FD7
48
-
49
- \u65E5\u5FD7\u4FDD\u5B58\u5728\u5185\u5B58\u7F13\u51B2\u533A\uFF08\u6700\u8FD1 500 \u6761\uFF09\u3002`,
50
- args: {
51
- level: tool.schema.string().optional().describe(
52
- "\u65E5\u5FD7\u7EA7\u522B\u8FC7\u6EE4\uFF1Aerror(\u9519\u8BEF)\u3001warn(\u8B66\u544A)\u3001info(\u4FE1\u606F)\u3001debug(\u8C03\u8BD5)\u3001log(\u666E\u901A)\u3002\u591A\u4E2A\u7528\u9017\u53F7\u5206\u9694\uFF0C\u5982 'error,warn'"
53
- ),
54
- limit: tool.schema.number().int().min(1).max(200).optional().default(50).describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4 50\uFF0C\u6700\u5927 200"),
55
- source: tool.schema.string().optional().describe("\u6765\u6E90\u8FC7\u6EE4\uFF1Aconsole(\u63A7\u5236\u53F0)\u3001opencode-stdout(\u670D\u52A1\u8F93\u51FA)\u3001opencode-stderr(\u670D\u52A1\u9519\u8BEF)")
56
- },
57
- execute(args, context) {
58
- return __async(this, null, function* () {
59
- const { level, limit, source } = args;
60
- log.debug("get_vite_dev_logs called", {
61
- args,
62
- sessionID: context.sessionID,
63
- directory: context.directory
64
- });
65
- try {
66
- const url = new URL(logsApiUrl);
67
- if (level) url.searchParams.set("level", level);
68
- if (limit) url.searchParams.set("limit", String(limit));
69
- if (source) url.searchParams.set("source", source);
70
- log.debug("Fetching logs from", { url: url.toString() });
71
- const response = yield fetch(url.toString(), {
72
- method: "GET",
73
- headers: { Accept: "application/json" },
74
- signal: context.abort
75
- });
76
- if (!response.ok) {
77
- const errorText = yield response.text();
78
- log.error("Failed to fetch logs", { status: response.status, error: errorText });
79
- return `\u83B7\u53D6\u65E5\u5FD7\u5931\u8D25: HTTP ${response.status} - ${errorText}`;
80
- }
81
- const data = yield response.json();
82
- log.debug("Logs fetched successfully", {
83
- count: data.logs.length,
84
- total: data.meta.total
85
- });
86
- if (data.logs.length === 0) {
87
- return `\u5F53\u524D\u6CA1\u6709\u7B26\u5408\u6761\u4EF6\u7684\u65E5\u5FD7\uFF08\u7F13\u51B2\u533A\u5171 ${data.meta.total} \u6761\uFF09\u3002
88
-
89
- \u5EFA\u8BAE\uFF1A
90
- - \u4E0D\u6307\u5B9A\u53C2\u6570\u83B7\u53D6\u6240\u6709\u65E5\u5FD7
91
- - \u4F7F\u7528 level=error,warn \u83B7\u53D6\u9519\u8BEF\u548C\u8B66\u544A`;
92
- }
93
- const formattedLogs = data.logs.map((entry) => {
94
- const time = new Date(entry.timestamp).toLocaleTimeString();
95
- const levelIcon = entry.level === "error" ? "\u274C" : entry.level === "warn" ? "\u26A0\uFE0F" : entry.level === "info" ? "\u2139\uFE0F" : "";
96
- return `${time} ${levelIcon} ${entry.message}`;
97
- }).join("\n");
98
- return `Vite \u5F00\u53D1\u670D\u52A1\u5668\u65E5\u5FD7\uFF08${data.meta.returned}/${data.meta.total} \u6761\uFF09\uFF1A
99
-
100
- ${formattedLogs}`;
101
- } catch (error) {
102
- const err = error;
103
- if (context.abort.aborted) {
104
- log.debug("Request aborted");
105
- return "\u8BF7\u6C42\u5DF2\u53D6\u6D88";
106
- }
107
- log.error("Error fetching vite logs", { error: err });
108
- return `\u83B7\u53D6\u65E5\u5FD7\u65F6\u53D1\u751F\u9519\u8BEF: ${err.message}`;
109
- }
110
- });
111
- }
112
- });
113
- return {
114
- tool: {
115
- get_vite_dev_logs: getViteDevLogsTool
116
- }
117
- };
118
- });
119
- var vite_logs_default = ViteLogsPlugin;
120
- export {
121
- ViteLogsPlugin,
122
- vite_logs_default as default
123
- };
File without changes