-
-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathpatch_script.py
More file actions
145 lines (132 loc) · 5.2 KB
/
Copy pathpatch_script.py
File metadata and controls
145 lines (132 loc) · 5.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#!/usr/bin/env python3
"""Patch index.tsx: apply all known-safe stubs + remove useMemo."""
with open('frontend/pages/index.tsx.fullbak', 'r', encoding='utf-8') as f:
content = f.read()
# 1. Replace useEffect import and calls
content = content.replace(
"import React, { useCallback, useEffect, useMemo, useRef, useState, type JSX } from 'react';",
"import React, { useCallback, useMemo, useRef, useState, type JSX } from 'react';\nfunction useXffect(_fn, _deps): void {}"
)
content = content.replace('useEffect(', 'useXffect(')
# 2. Stub store hooks
content = content.replace(
' const messages = useSessionMessages(sessionId);\n const isStreaming = useSessionStreaming(sessionId);\n const { addToast } = useAddToast();',
' // STUB: store hooks\n const messages: Message[] = [];\n const isStreaming = false;\n const addToast = () => {};'
)
# 3. Stub useResizableSize
old_rs = (
" const [sidebarWidth, setSidebarWidth, resetSidebarWidth] = useResizableSize(\n"
" 'agenthub.layout.sidebarWidth',\n"
" 320,\n"
" 240,\n"
" 480,\n"
" );\n"
" // 右侧预览面板宽度:默认 540px,可在 360-960 之间调整\n"
" const [previewWidth, setPreviewWidth, resetPreviewWidth] = useResizableSize(\n"
" 'agenthub.layout.previewWidth',\n"
" 540,\n"
" 360,\n"
" 960,\n"
" );"
)
new_rs = (
" // STUB: useResizableSize\n"
" const sidebarWidth = 320;\n"
" const setSidebarWidth = () => {};\n"
" const resetSidebarWidth = () => {};\n"
" const previewWidth = 540;\n"
" const setPreviewWidth = () => {};\n"
" const resetPreviewWidth = () => {};"
)
content = content.replace(old_rs, new_rs)
# 4. Stub useFileUpload
old_fu = (
" const { handleFileChange, handlePasteFiles, handleRemoveFile } = useFileUpload({\n"
" authHeaders, setAttachedFiles, setNotice,\n"
" });"
)
new_fu = (
" // STUB: useFileUpload\n"
" const handleFileChange = () => {};\n"
" const handlePasteFiles = () => {};\n"
" const handleRemoveFile = () => {};"
)
content = content.replace(old_fu, new_fu)
# 5. Replace useMemo calls
replacements = [
(
" const filteredAgents = useMemo(() => agents.filter((agent) => {\n"
" if (selectedRiskLevel === 'all') return true;\n"
" return agent.riskLevel === selectedRiskLevel;\n"
" }), [agents, selectedRiskLevel]);",
" const filteredAgents = FALLBACK_AGENTS; // STUB: useMemo"
),
(
" const filteredWorkflows = useMemo(() => workflows.filter((w) => {\n"
" const q = mentionSearch.toLowerCase();\n"
" return w.name.toLowerCase().includes(q) || (w.description && w.description.toLowerCase().includes(q));\n"
" }), [workflows, mentionSearch]);",
" const filteredWorkflows: WorkflowSummary[] = []; // STUB: useMemo"
),
(
" const filteredSkills = useMemo(() => skills.filter((s) => {\n"
" const q = mentionSearch.toLowerCase();\n"
" return s.name.toLowerCase().includes(q) || s.description.toLowerCase().includes(q);\n"
" }), [skills, mentionSearch]);",
" const filteredSkills: SkillMeta[] = []; // STUB: useMemo"
),
]
for old, new in replacements:
if old in content:
content = content.replace(old, new)
print(f"Replaced useMemo block")
else:
print(f"NOT FOUND (first 60 chars): {old[:60]}...")
# 5b. Try other useMemo calls
# sessionName
old_sn = (
" const sessionName = useMemo(() => {\n"
" if (!sessionId) return '';\n"
" if (editingId && editName) return editName;\n"
" const s = sessions.find((s) => s.id === sessionId);\n"
" return s ? (s.name || s.id || '') : '';\n"
" }, [sessions, sessionId, editingId, editName]);"
)
if old_sn in content:
content = content.replace(old_sn, " const sessionName = ''; // STUB: useMemo")
print("Replaced sessionName useMemo")
# currentSession
old_cs = (
" const currentSession = useMemo(() => {\n"
" return sessions.find((s) => s.id === sessionId) || null;\n"
" }, [sessions, sessionId]);"
)
if old_cs in content:
content = content.replace(old_cs, " const currentSession = null; // STUB: useMemo")
print("Replaced currentSession useMemo")
# percent
old_pct = (
" const percent = useMemo(() => {\n"
" if (!dag || dag.total === 0) return 0;\n"
" return Math.round((dag.completed / dag.total) * 100);\n"
" }, [dag]);"
)
if old_pct in content:
content = content.replace(old_pct, " const percent = 0; // STUB: useMemo")
print("Replaced percent useMemo")
# filteredSessions
old_fs = (
" const filteredSessions = useMemo(() => sortSessions(\n"
" sessions.filter((s) => {\n"
" if (!sessionQuery.trim()) return true;\n"
" const q = sessionQuery.toLowerCase();\n"
" return (s.name || s.id || '').toLowerCase().includes(q);\n"
" })\n"
" ), [sessions, sessionQuery]);"
)
if old_fs in content:
content = content.replace(old_fs, " const filteredSessions: ChatSession[] = []; // STUB: useMemo")
print("Replaced filteredSessions useMemo")
with open('frontend/pages/index.tsx', 'w', encoding='utf-8') as f:
f.write(content)
print("Done patching")