@hirohsu/user-web-feedback 2.8.10 → 2.8.11
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/README.md +953 -953
- package/dist/cli.cjs +33283 -46043
- package/dist/index.cjs +35747 -48509
- package/dist/static/app.js +385 -385
- package/dist/static/components/navbar.css +406 -406
- package/dist/static/components/navbar.html +49 -49
- package/dist/static/components/navbar.js +211 -211
- package/dist/static/dashboard.css +495 -495
- package/dist/static/dashboard.html +95 -95
- package/dist/static/dashboard.js +540 -540
- package/dist/static/favicon.svg +27 -27
- package/dist/static/index.html +541 -541
- package/dist/static/logs.html +376 -376
- package/dist/static/logs.js +442 -442
- package/dist/static/mcp-settings.html +797 -797
- package/dist/static/mcp-settings.js +884 -884
- package/dist/static/modules/app-core.js +124 -124
- package/dist/static/modules/conversation-panel.js +247 -247
- package/dist/static/modules/feedback-handler.js +1420 -1420
- package/dist/static/modules/image-handler.js +155 -155
- package/dist/static/modules/log-viewer.js +296 -296
- package/dist/static/modules/mcp-manager.js +474 -474
- package/dist/static/modules/prompt-manager.js +364 -364
- package/dist/static/modules/settings-manager.js +299 -299
- package/dist/static/modules/socket-manager.js +170 -170
- package/dist/static/modules/state-manager.js +352 -352
- package/dist/static/modules/timer-controller.js +243 -243
- package/dist/static/modules/ui-helpers.js +246 -246
- package/dist/static/settings.html +426 -426
- package/dist/static/settings.js +767 -767
- package/dist/static/style.css +2156 -2156
- package/dist/static/terminals.html +357 -357
- package/dist/static/terminals.js +321 -321
- package/package.json +95 -95
|
@@ -1,352 +1,352 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* state-manager.js
|
|
3
|
-
* 全域狀態管理模組
|
|
4
|
-
* 集中管理 app.js 中的所有全域狀態變數
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
const AppState = {
|
|
8
|
-
// Socket.IO 連線
|
|
9
|
-
socket: null,
|
|
10
|
-
sessionId: null,
|
|
11
|
-
|
|
12
|
-
// 專案資訊
|
|
13
|
-
currentProjectName: null,
|
|
14
|
-
currentProjectPath: null,
|
|
15
|
-
|
|
16
|
-
// AI 相關
|
|
17
|
-
workSummary: null,
|
|
18
|
-
aiSettings: null,
|
|
19
|
-
maxToolRounds: 5,
|
|
20
|
-
debugMode: false,
|
|
21
|
-
|
|
22
|
-
// 圖片
|
|
23
|
-
currentImages: [],
|
|
24
|
-
|
|
25
|
-
// 提示詞
|
|
26
|
-
prompts: [],
|
|
27
|
-
isEditingPrompt: false,
|
|
28
|
-
editingPromptId: null,
|
|
29
|
-
|
|
30
|
-
// 使用者偏好
|
|
31
|
-
preferences: {},
|
|
32
|
-
|
|
33
|
-
// 計時器狀態
|
|
34
|
-
DIALOG_TIMEOUT_SECONDS: 60,
|
|
35
|
-
AUTO_REPLY_TIMER_SECONDS: 300,
|
|
36
|
-
autoReplyTimerRemaining: 0,
|
|
37
|
-
autoReplyTimerPaused: false,
|
|
38
|
-
autoReplyPausedByFocus: false,
|
|
39
|
-
autoReplyData: null,
|
|
40
|
-
|
|
41
|
-
// 計時器 ID
|
|
42
|
-
dialogTimeoutInterval: null,
|
|
43
|
-
closeCountdownInterval: null,
|
|
44
|
-
autoReplyTimerInterval: null,
|
|
45
|
-
autoReplyCountdownInterval: null,
|
|
46
|
-
autoReplyWarningTimeout: null,
|
|
47
|
-
autoReplyConfirmationTimeout: null,
|
|
48
|
-
|
|
49
|
-
// Streaming
|
|
50
|
-
streamingAbortController: null,
|
|
51
|
-
|
|
52
|
-
// MCP Servers
|
|
53
|
-
mcpServers: [],
|
|
54
|
-
editingMcpServerId: null,
|
|
55
|
-
|
|
56
|
-
// 日誌
|
|
57
|
-
currentLogPage: 1,
|
|
58
|
-
totalLogPages: 1,
|
|
59
|
-
logSources: [],
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
// Getter 函數
|
|
63
|
-
export function getSocket() {
|
|
64
|
-
return AppState.socket;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
export function getSessionId() {
|
|
68
|
-
return AppState.sessionId;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
export function getWorkSummary() {
|
|
72
|
-
return AppState.workSummary;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
export function getCurrentImages() {
|
|
76
|
-
return AppState.currentImages;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
export function getPrompts() {
|
|
80
|
-
return AppState.prompts;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
export function getAISettings() {
|
|
84
|
-
return AppState.aiSettings;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
export function getPreferences() {
|
|
88
|
-
return AppState.preferences;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
export function getMaxToolRounds() {
|
|
92
|
-
return AppState.maxToolRounds;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
export function getDebugMode() {
|
|
96
|
-
return AppState.debugMode;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
export function getDialogTimeoutSeconds() {
|
|
100
|
-
return AppState.DIALOG_TIMEOUT_SECONDS;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
export function getAutoReplyTimerSeconds() {
|
|
104
|
-
return AppState.AUTO_REPLY_TIMER_SECONDS;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
export function getCurrentProjectName() {
|
|
108
|
-
return AppState.currentProjectName;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
export function getCurrentProjectPath() {
|
|
112
|
-
return AppState.currentProjectPath;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
export function getStreamingAbortController() {
|
|
116
|
-
return AppState.streamingAbortController;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
export function getMcpServers() {
|
|
120
|
-
return AppState.mcpServers;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
export function getEditingMcpServerId() {
|
|
124
|
-
return AppState.editingMcpServerId;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
export function isEditingPrompt() {
|
|
128
|
-
return AppState.isEditingPrompt;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
export function getEditingPromptId() {
|
|
132
|
-
return AppState.editingPromptId;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
export function getAutoReplyTimerRemaining() {
|
|
136
|
-
return AppState.autoReplyTimerRemaining;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
export function isAutoReplyTimerPaused() {
|
|
140
|
-
return AppState.autoReplyTimerPaused;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
export function isAutoReplyPausedByFocus() {
|
|
144
|
-
return AppState.autoReplyPausedByFocus;
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
export function getAutoReplyData() {
|
|
148
|
-
return AppState.autoReplyData;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
// Timer ID getters
|
|
152
|
-
export function getDialogTimeoutInterval() {
|
|
153
|
-
return AppState.dialogTimeoutInterval;
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
export function getCloseCountdownInterval() {
|
|
157
|
-
return AppState.closeCountdownInterval;
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
export function getAutoReplyTimerInterval() {
|
|
161
|
-
return AppState.autoReplyTimerInterval;
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
export function getAutoReplyCountdownInterval() {
|
|
165
|
-
return AppState.autoReplyCountdownInterval;
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
export function getAutoReplyWarningTimeout() {
|
|
169
|
-
return AppState.autoReplyWarningTimeout;
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
export function getAutoReplyConfirmationTimeout() {
|
|
173
|
-
return AppState.autoReplyConfirmationTimeout;
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
// Log getters
|
|
177
|
-
export function getCurrentLogPage() {
|
|
178
|
-
return AppState.currentLogPage;
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
export function getTotalLogPages() {
|
|
182
|
-
return AppState.totalLogPages;
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
export function getLogSources() {
|
|
186
|
-
return AppState.logSources;
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
// Setter 函數
|
|
190
|
-
export function setSocket(socket) {
|
|
191
|
-
AppState.socket = socket;
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
export function setSessionId(id) {
|
|
195
|
-
AppState.sessionId = id;
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
export function setWorkSummary(summary) {
|
|
199
|
-
AppState.workSummary = summary;
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
export function setCurrentImages(images) {
|
|
203
|
-
AppState.currentImages = images;
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
export function addImage(image) {
|
|
207
|
-
AppState.currentImages.push(image);
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
export function removeImageAt(index) {
|
|
211
|
-
AppState.currentImages.splice(index, 1);
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
export function clearImages() {
|
|
215
|
-
AppState.currentImages = [];
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
export function setPrompts(prompts) {
|
|
219
|
-
AppState.prompts = prompts;
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
export function setAISettings(settings) {
|
|
223
|
-
AppState.aiSettings = settings;
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
export function setPreferences(prefs) {
|
|
227
|
-
AppState.preferences = prefs;
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
export function setMaxToolRounds(rounds) {
|
|
231
|
-
AppState.maxToolRounds = rounds;
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
export function setDebugMode(mode) {
|
|
235
|
-
AppState.debugMode = mode;
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
export function setDialogTimeoutSeconds(seconds) {
|
|
239
|
-
AppState.DIALOG_TIMEOUT_SECONDS = seconds;
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
export function setAutoReplyTimerSeconds(seconds) {
|
|
243
|
-
AppState.AUTO_REPLY_TIMER_SECONDS = seconds;
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
export function setCurrentProjectName(name) {
|
|
247
|
-
AppState.currentProjectName = name;
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
export function setCurrentProjectPath(path) {
|
|
251
|
-
AppState.currentProjectPath = path;
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
export function setStreamingAbortController(controller) {
|
|
255
|
-
AppState.streamingAbortController = controller;
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
export function setMcpServers(servers) {
|
|
259
|
-
AppState.mcpServers = servers;
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
export function setEditingMcpServerId(id) {
|
|
263
|
-
AppState.editingMcpServerId = id;
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
export function setIsEditingPrompt(editing) {
|
|
267
|
-
AppState.isEditingPrompt = editing;
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
export function setEditingPromptId(id) {
|
|
271
|
-
AppState.editingPromptId = id;
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
export function setAutoReplyTimerRemaining(remaining) {
|
|
275
|
-
AppState.autoReplyTimerRemaining = remaining;
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
export function setAutoReplyTimerPaused(paused) {
|
|
279
|
-
AppState.autoReplyTimerPaused = paused;
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
export function setAutoReplyPausedByFocus(paused) {
|
|
283
|
-
AppState.autoReplyPausedByFocus = paused;
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
export function setAutoReplyData(data) {
|
|
287
|
-
AppState.autoReplyData = data;
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
// Timer ID setters
|
|
291
|
-
export function setDialogTimeoutInterval(id) {
|
|
292
|
-
AppState.dialogTimeoutInterval = id;
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
export function setCloseCountdownInterval(id) {
|
|
296
|
-
AppState.closeCountdownInterval = id;
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
export function setAutoReplyTimerInterval(id) {
|
|
300
|
-
AppState.autoReplyTimerInterval = id;
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
export function setAutoReplyCountdownInterval(id) {
|
|
304
|
-
AppState.autoReplyCountdownInterval = id;
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
export function setAutoReplyWarningTimeout(id) {
|
|
308
|
-
AppState.autoReplyWarningTimeout = id;
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
export function setAutoReplyConfirmationTimeout(id) {
|
|
312
|
-
AppState.autoReplyConfirmationTimeout = id;
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
// Log setters
|
|
316
|
-
export function setCurrentLogPage(page) {
|
|
317
|
-
AppState.currentLogPage = page;
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
export function setTotalLogPages(pages) {
|
|
321
|
-
AppState.totalLogPages = pages;
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
export function setLogSources(sources) {
|
|
325
|
-
AppState.logSources = sources;
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
// 工具函數
|
|
329
|
-
export function findPromptById(id) {
|
|
330
|
-
return AppState.prompts.find((p) => p.id === id);
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
export function findMcpServerById(id) {
|
|
334
|
-
return AppState.mcpServers.find((s) => s.id === id);
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
// 清除所有計時器 ID
|
|
338
|
-
export function clearAllTimerIds() {
|
|
339
|
-
AppState.dialogTimeoutInterval = null;
|
|
340
|
-
AppState.closeCountdownInterval = null;
|
|
341
|
-
AppState.autoReplyTimerInterval = null;
|
|
342
|
-
AppState.autoReplyCountdownInterval = null;
|
|
343
|
-
AppState.autoReplyWarningTimeout = null;
|
|
344
|
-
AppState.autoReplyConfirmationTimeout = null;
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
// 匯出整個狀態(僅供調試)
|
|
348
|
-
export function getFullState() {
|
|
349
|
-
return { ...AppState };
|
|
350
|
-
}
|
|
351
|
-
|
|
352
|
-
export default AppState;
|
|
1
|
+
/**
|
|
2
|
+
* state-manager.js
|
|
3
|
+
* 全域狀態管理模組
|
|
4
|
+
* 集中管理 app.js 中的所有全域狀態變數
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
const AppState = {
|
|
8
|
+
// Socket.IO 連線
|
|
9
|
+
socket: null,
|
|
10
|
+
sessionId: null,
|
|
11
|
+
|
|
12
|
+
// 專案資訊
|
|
13
|
+
currentProjectName: null,
|
|
14
|
+
currentProjectPath: null,
|
|
15
|
+
|
|
16
|
+
// AI 相關
|
|
17
|
+
workSummary: null,
|
|
18
|
+
aiSettings: null,
|
|
19
|
+
maxToolRounds: 5,
|
|
20
|
+
debugMode: false,
|
|
21
|
+
|
|
22
|
+
// 圖片
|
|
23
|
+
currentImages: [],
|
|
24
|
+
|
|
25
|
+
// 提示詞
|
|
26
|
+
prompts: [],
|
|
27
|
+
isEditingPrompt: false,
|
|
28
|
+
editingPromptId: null,
|
|
29
|
+
|
|
30
|
+
// 使用者偏好
|
|
31
|
+
preferences: {},
|
|
32
|
+
|
|
33
|
+
// 計時器狀態
|
|
34
|
+
DIALOG_TIMEOUT_SECONDS: 60,
|
|
35
|
+
AUTO_REPLY_TIMER_SECONDS: 300,
|
|
36
|
+
autoReplyTimerRemaining: 0,
|
|
37
|
+
autoReplyTimerPaused: false,
|
|
38
|
+
autoReplyPausedByFocus: false,
|
|
39
|
+
autoReplyData: null,
|
|
40
|
+
|
|
41
|
+
// 計時器 ID
|
|
42
|
+
dialogTimeoutInterval: null,
|
|
43
|
+
closeCountdownInterval: null,
|
|
44
|
+
autoReplyTimerInterval: null,
|
|
45
|
+
autoReplyCountdownInterval: null,
|
|
46
|
+
autoReplyWarningTimeout: null,
|
|
47
|
+
autoReplyConfirmationTimeout: null,
|
|
48
|
+
|
|
49
|
+
// Streaming
|
|
50
|
+
streamingAbortController: null,
|
|
51
|
+
|
|
52
|
+
// MCP Servers
|
|
53
|
+
mcpServers: [],
|
|
54
|
+
editingMcpServerId: null,
|
|
55
|
+
|
|
56
|
+
// 日誌
|
|
57
|
+
currentLogPage: 1,
|
|
58
|
+
totalLogPages: 1,
|
|
59
|
+
logSources: [],
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
// Getter 函數
|
|
63
|
+
export function getSocket() {
|
|
64
|
+
return AppState.socket;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export function getSessionId() {
|
|
68
|
+
return AppState.sessionId;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export function getWorkSummary() {
|
|
72
|
+
return AppState.workSummary;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export function getCurrentImages() {
|
|
76
|
+
return AppState.currentImages;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export function getPrompts() {
|
|
80
|
+
return AppState.prompts;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export function getAISettings() {
|
|
84
|
+
return AppState.aiSettings;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export function getPreferences() {
|
|
88
|
+
return AppState.preferences;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export function getMaxToolRounds() {
|
|
92
|
+
return AppState.maxToolRounds;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export function getDebugMode() {
|
|
96
|
+
return AppState.debugMode;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export function getDialogTimeoutSeconds() {
|
|
100
|
+
return AppState.DIALOG_TIMEOUT_SECONDS;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
export function getAutoReplyTimerSeconds() {
|
|
104
|
+
return AppState.AUTO_REPLY_TIMER_SECONDS;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
export function getCurrentProjectName() {
|
|
108
|
+
return AppState.currentProjectName;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export function getCurrentProjectPath() {
|
|
112
|
+
return AppState.currentProjectPath;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
export function getStreamingAbortController() {
|
|
116
|
+
return AppState.streamingAbortController;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
export function getMcpServers() {
|
|
120
|
+
return AppState.mcpServers;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
export function getEditingMcpServerId() {
|
|
124
|
+
return AppState.editingMcpServerId;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
export function isEditingPrompt() {
|
|
128
|
+
return AppState.isEditingPrompt;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
export function getEditingPromptId() {
|
|
132
|
+
return AppState.editingPromptId;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
export function getAutoReplyTimerRemaining() {
|
|
136
|
+
return AppState.autoReplyTimerRemaining;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
export function isAutoReplyTimerPaused() {
|
|
140
|
+
return AppState.autoReplyTimerPaused;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
export function isAutoReplyPausedByFocus() {
|
|
144
|
+
return AppState.autoReplyPausedByFocus;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
export function getAutoReplyData() {
|
|
148
|
+
return AppState.autoReplyData;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// Timer ID getters
|
|
152
|
+
export function getDialogTimeoutInterval() {
|
|
153
|
+
return AppState.dialogTimeoutInterval;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
export function getCloseCountdownInterval() {
|
|
157
|
+
return AppState.closeCountdownInterval;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
export function getAutoReplyTimerInterval() {
|
|
161
|
+
return AppState.autoReplyTimerInterval;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
export function getAutoReplyCountdownInterval() {
|
|
165
|
+
return AppState.autoReplyCountdownInterval;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
export function getAutoReplyWarningTimeout() {
|
|
169
|
+
return AppState.autoReplyWarningTimeout;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
export function getAutoReplyConfirmationTimeout() {
|
|
173
|
+
return AppState.autoReplyConfirmationTimeout;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
// Log getters
|
|
177
|
+
export function getCurrentLogPage() {
|
|
178
|
+
return AppState.currentLogPage;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
export function getTotalLogPages() {
|
|
182
|
+
return AppState.totalLogPages;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
export function getLogSources() {
|
|
186
|
+
return AppState.logSources;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// Setter 函數
|
|
190
|
+
export function setSocket(socket) {
|
|
191
|
+
AppState.socket = socket;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
export function setSessionId(id) {
|
|
195
|
+
AppState.sessionId = id;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
export function setWorkSummary(summary) {
|
|
199
|
+
AppState.workSummary = summary;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
export function setCurrentImages(images) {
|
|
203
|
+
AppState.currentImages = images;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
export function addImage(image) {
|
|
207
|
+
AppState.currentImages.push(image);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
export function removeImageAt(index) {
|
|
211
|
+
AppState.currentImages.splice(index, 1);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
export function clearImages() {
|
|
215
|
+
AppState.currentImages = [];
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
export function setPrompts(prompts) {
|
|
219
|
+
AppState.prompts = prompts;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
export function setAISettings(settings) {
|
|
223
|
+
AppState.aiSettings = settings;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
export function setPreferences(prefs) {
|
|
227
|
+
AppState.preferences = prefs;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
export function setMaxToolRounds(rounds) {
|
|
231
|
+
AppState.maxToolRounds = rounds;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
export function setDebugMode(mode) {
|
|
235
|
+
AppState.debugMode = mode;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
export function setDialogTimeoutSeconds(seconds) {
|
|
239
|
+
AppState.DIALOG_TIMEOUT_SECONDS = seconds;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
export function setAutoReplyTimerSeconds(seconds) {
|
|
243
|
+
AppState.AUTO_REPLY_TIMER_SECONDS = seconds;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
export function setCurrentProjectName(name) {
|
|
247
|
+
AppState.currentProjectName = name;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
export function setCurrentProjectPath(path) {
|
|
251
|
+
AppState.currentProjectPath = path;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
export function setStreamingAbortController(controller) {
|
|
255
|
+
AppState.streamingAbortController = controller;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
export function setMcpServers(servers) {
|
|
259
|
+
AppState.mcpServers = servers;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
export function setEditingMcpServerId(id) {
|
|
263
|
+
AppState.editingMcpServerId = id;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
export function setIsEditingPrompt(editing) {
|
|
267
|
+
AppState.isEditingPrompt = editing;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
export function setEditingPromptId(id) {
|
|
271
|
+
AppState.editingPromptId = id;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
export function setAutoReplyTimerRemaining(remaining) {
|
|
275
|
+
AppState.autoReplyTimerRemaining = remaining;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
export function setAutoReplyTimerPaused(paused) {
|
|
279
|
+
AppState.autoReplyTimerPaused = paused;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
export function setAutoReplyPausedByFocus(paused) {
|
|
283
|
+
AppState.autoReplyPausedByFocus = paused;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
export function setAutoReplyData(data) {
|
|
287
|
+
AppState.autoReplyData = data;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
// Timer ID setters
|
|
291
|
+
export function setDialogTimeoutInterval(id) {
|
|
292
|
+
AppState.dialogTimeoutInterval = id;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
export function setCloseCountdownInterval(id) {
|
|
296
|
+
AppState.closeCountdownInterval = id;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
export function setAutoReplyTimerInterval(id) {
|
|
300
|
+
AppState.autoReplyTimerInterval = id;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
export function setAutoReplyCountdownInterval(id) {
|
|
304
|
+
AppState.autoReplyCountdownInterval = id;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
export function setAutoReplyWarningTimeout(id) {
|
|
308
|
+
AppState.autoReplyWarningTimeout = id;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
export function setAutoReplyConfirmationTimeout(id) {
|
|
312
|
+
AppState.autoReplyConfirmationTimeout = id;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
// Log setters
|
|
316
|
+
export function setCurrentLogPage(page) {
|
|
317
|
+
AppState.currentLogPage = page;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
export function setTotalLogPages(pages) {
|
|
321
|
+
AppState.totalLogPages = pages;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
export function setLogSources(sources) {
|
|
325
|
+
AppState.logSources = sources;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
// 工具函數
|
|
329
|
+
export function findPromptById(id) {
|
|
330
|
+
return AppState.prompts.find((p) => p.id === id);
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
export function findMcpServerById(id) {
|
|
334
|
+
return AppState.mcpServers.find((s) => s.id === id);
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
// 清除所有計時器 ID
|
|
338
|
+
export function clearAllTimerIds() {
|
|
339
|
+
AppState.dialogTimeoutInterval = null;
|
|
340
|
+
AppState.closeCountdownInterval = null;
|
|
341
|
+
AppState.autoReplyTimerInterval = null;
|
|
342
|
+
AppState.autoReplyCountdownInterval = null;
|
|
343
|
+
AppState.autoReplyWarningTimeout = null;
|
|
344
|
+
AppState.autoReplyConfirmationTimeout = null;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
// 匯出整個狀態(僅供調試)
|
|
348
|
+
export function getFullState() {
|
|
349
|
+
return { ...AppState };
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
export default AppState;
|