@ohos-cpf/3rdloop 0.0.4 → 0.0.6

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 (47) hide show
  1. package/README.md +119 -128
  2. package/lib/cli.js +25 -0
  3. package/lib/serve.js +280 -0
  4. package/lib/update.js +46 -6
  5. package/lib/web-ext.js +454 -0
  6. package/lib/web.js +664 -0
  7. package/package.json +2 -1
  8. package/vendor/Server/CLI/opencode/index.js +2 -2
  9. package/vendor/Server/DbUse/StorageManager.js +7 -1
  10. package/vendor/Server/Routes/controllers/FlexRunnerController.js +92 -0
  11. package/vendor/Server/Routes/routes/flexrunner.js +2 -0
  12. package/vendor/Server/Skills/arkts-code-use/SKILL.md +270 -0
  13. package/vendor/Server/Skills/arkts-code-use/assets/TEMPLATES.md +367 -0
  14. package/vendor/Server/Skills/arkts-code-use/references/API_VERIFICATION.md +144 -0
  15. package/vendor/Server/Skills/arkts-code-use/references/ARKTS_RULES.md +240 -0
  16. package/vendor/Server/Skills/arkts-code-use/references/CODE_PATTERNS.md +431 -0
  17. package/vendor/Server/Skills/arkts-code-use/references/SYNTAX_CHECK_GUIDE.md +164 -0
  18. package/vendor/Server/Skills/arkts-code-use/scripts/verify-arkts.cjs +428 -0
  19. package/vendor/Server/Skills/gitcode-repo-fork/SKILL.md +310 -0
  20. package/vendor/Server/Skills/gitcode-repo-fork/assets/FORK_REPORT_TEMPLATE.md +113 -0
  21. package/vendor/Server/Skills/gitcode-repo-fork/references/FORK_DECISION_GUIDE.md +124 -0
  22. package/vendor/Server/Skills/gitcode-repo-fork/references/GITCODE_FORK_API.md +95 -0
  23. package/vendor/Server/Skills/gitcode-repo-fork/scripts/gitcode-fork.cjs +285 -0
  24. package/vendor/VERSION +3 -3
  25. package/web/css/arktslibrarycheck.css +322 -0
  26. package/web/css/codecheck.css +464 -0
  27. package/web/css/flutterlibrarycheck.css +322 -0
  28. package/web/css/knowledge.css +332 -0
  29. package/web/css/loop.css +578 -0
  30. package/web/css/md-reader.css +240 -0
  31. package/web/css/rnlibrarycheck.css +322 -0
  32. package/web/css/theme.css +702 -0
  33. package/web/index.html +713 -0
  34. package/web/js/arktslibrarycheck.js +1495 -0
  35. package/web/js/codecheck.js +1098 -0
  36. package/web/js/flutterlibrarycheck.js +1447 -0
  37. package/web/js/health.js +69 -0
  38. package/web/js/knowledge.js +358 -0
  39. package/web/js/loop.js +1102 -0
  40. package/web/js/md-reader.js +435 -0
  41. package/web/js/navigation.js +238 -0
  42. package/web/js/rnlibrarycheck.js +1462 -0
  43. package/web/js/stats.js +110 -0
  44. package/web/js/theme.js +46 -0
  45. package/web/js/utils.js +228 -0
  46. package/web/knowledge.html +146 -0
  47. package/web/loop.html +219 -0
@@ -0,0 +1,240 @@
1
+ /* ════════════════════════════════════════════════════════════════════
2
+ * MarkdownReader — 独立样式表
3
+ * ════════════════════════════════════════════════════════════════════
4
+ * 依赖 loop.css 中定义的 CSS 变量 (--card, --text, --text2, --border 等)
5
+ * 若在无 loop.css 的环境中使用,需自行定义这些变量或修改为固定值。
6
+ */
7
+
8
+ /* ─── 遮罩层 ─────────────────────────────────────────────────────────── */
9
+ .md-reader-overlay {
10
+ display: none;
11
+ position: fixed;
12
+ inset: 0;
13
+ background: rgba(0, 0, 0, 0.45);
14
+ z-index: 1100;
15
+ justify-content: center;
16
+ align-items: center;
17
+ }
18
+ .md-reader-overlay.show { display: flex; }
19
+
20
+ /* ─── 对话框 ─────────────────────────────────────────────────────────── */
21
+ .md-reader-dialog {
22
+ background: var(--card);
23
+ border-radius: 14px;
24
+ width: 820px;
25
+ max-width: 95vw;
26
+ max-height: 88vh;
27
+ display: flex;
28
+ flex-direction: column;
29
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.18);
30
+ overflow: hidden;
31
+ }
32
+
33
+ /* ─── 头部 ───────────────────────────────────────────────────────────── */
34
+ .md-reader-header {
35
+ display: flex;
36
+ justify-content: space-between;
37
+ align-items: center;
38
+ padding: 16px 20px;
39
+ border-bottom: 1px solid var(--border-light);
40
+ flex-shrink: 0;
41
+ }
42
+ .md-reader-title {
43
+ font-size: 14px;
44
+ font-weight: 600;
45
+ color: var(--text);
46
+ margin: 0;
47
+ overflow: hidden;
48
+ text-overflow: ellipsis;
49
+ white-space: nowrap;
50
+ max-width: 560px;
51
+ }
52
+ .md-reader-header-right {
53
+ display: flex;
54
+ align-items: center;
55
+ gap: 8px;
56
+ flex-shrink: 0;
57
+ }
58
+ .md-reader-btn-raw {
59
+ background: none;
60
+ border: 1px solid var(--border);
61
+ border-radius: 6px;
62
+ padding: 4px 10px;
63
+ font-size: 12px;
64
+ color: var(--text2);
65
+ cursor: pointer;
66
+ transition: all 0.15s;
67
+ }
68
+ .md-reader-btn-raw:hover {
69
+ background: var(--code-bg);
70
+ color: var(--text);
71
+ }
72
+ .md-reader-close {
73
+ background: none;
74
+ border: none;
75
+ font-size: 20px;
76
+ cursor: pointer;
77
+ color: var(--text2);
78
+ padding: 0 4px;
79
+ line-height: 1;
80
+ }
81
+ .md-reader-close:hover { color: var(--text); }
82
+
83
+ /* ─── 正文容器 ───────────────────────────────────────────────────────── */
84
+ .md-reader-body {
85
+ flex: 1;
86
+ overflow-y: auto;
87
+ padding: 24px 28px;
88
+ line-height: 1.7;
89
+ color: var(--text);
90
+ font-size: 14px;
91
+ }
92
+
93
+ /* ─── 源码模式 ───────────────────────────────────────────────────────── */
94
+ .md-reader-raw {
95
+ font-family: "SF Mono", Monaco, "Courier New", monospace;
96
+ font-size: 12px;
97
+ line-height: 1.6;
98
+ white-space: pre-wrap;
99
+ word-break: break-all;
100
+ color: var(--text);
101
+ }
102
+
103
+ /* ─── 标题 ───────────────────────────────────────────────────────────── */
104
+ .md-h { margin: 20px 0 10px; font-weight: 600; line-height: 1.3; }
105
+ .md-h1 { font-size: 22px; border-bottom: 2px solid var(--border-light); padding-bottom: 6px; margin-top: 0; }
106
+ .md-h2 { font-size: 19px; border-bottom: 1px solid var(--border-light); padding-bottom: 5px; }
107
+ .md-h3 { font-size: 16px; }
108
+ .md-h4 { font-size: 15px; }
109
+ .md-h5 { font-size: 14px; color: var(--text2); }
110
+ .md-h6 { font-size: 13px; color: var(--text2); text-transform: uppercase; letter-spacing: 0.5px; }
111
+
112
+ /* ─── 段落 ───────────────────────────────────────────────────────────── */
113
+ .md-p { margin: 8px 0; }
114
+ .md-muted { color: var(--text3); font-style: italic; }
115
+
116
+ /* ─── 行内元素 ───────────────────────────────────────────────────────── */
117
+ .md-link { color: var(--blue); text-decoration: none; border-bottom: 1px solid transparent; transition: border-color 0.15s; }
118
+ .md-link:hover { border-bottom-color: var(--blue); }
119
+ .md-img { max-width: 100%; border-radius: 8px; margin: 8px 0; }
120
+ .md-inline-code {
121
+ font-family: "SF Mono", Monaco, monospace;
122
+ font-size: 12px;
123
+ background: var(--code-bg);
124
+ color: var(--inline-code-text);
125
+ padding: 1px 5px;
126
+ border-radius: 4px;
127
+ border: 1px solid var(--border-light);
128
+ }
129
+ strong { font-weight: 600; }
130
+ em { font-style: italic; }
131
+ del { color: var(--text3); }
132
+
133
+ /* ─── 代码块 ─────────────────────────────────────────────────────────── */
134
+ .md-code-block {
135
+ margin: 12px 0;
136
+ border-radius: 8px;
137
+ overflow: hidden;
138
+ border: 1px solid var(--border-light);
139
+ }
140
+ .md-code-header {
141
+ display: flex;
142
+ justify-content: space-between;
143
+ align-items: center;
144
+ padding: 6px 12px;
145
+ background: var(--code-bg);
146
+ border-bottom: 1px solid var(--border-light);
147
+ font-size: 11px;
148
+ }
149
+ .md-code-lang {
150
+ color: var(--text2);
151
+ text-transform: uppercase;
152
+ letter-spacing: 0.5px;
153
+ font-weight: 500;
154
+ }
155
+ .md-code-copy {
156
+ background: none;
157
+ border: 1px solid var(--border);
158
+ border-radius: 4px;
159
+ padding: 2px 8px;
160
+ font-size: 11px;
161
+ color: var(--text2);
162
+ cursor: pointer;
163
+ transition: all 0.15s;
164
+ }
165
+ .md-code-copy:hover {
166
+ background: var(--card);
167
+ color: var(--text);
168
+ border-color: var(--text2);
169
+ }
170
+ .md-code-block pre {
171
+ margin: 0;
172
+ padding: 14px 16px;
173
+ background: var(--code-bg);
174
+ overflow-x: auto;
175
+ }
176
+ .md-code-block pre code {
177
+ font-family: "SF Mono", Monaco, "Courier New", monospace;
178
+ font-size: 12px;
179
+ line-height: 1.6;
180
+ color: var(--text);
181
+ white-space: pre;
182
+ }
183
+
184
+ /* ─── 列表 ───────────────────────────────────────────────────────────── */
185
+ .md-ul, .md-ol { margin: 8px 0; padding-left: 24px; }
186
+ .md-ul li, .md-ol li { margin: 4px 0; }
187
+ .md-ul-sub { margin-top: 4px; }
188
+ .md-ul li::marker { color: var(--text2); }
189
+ .md-ol li::marker { color: var(--text2); font-weight: 500; }
190
+
191
+ /* ─── 引用 ───────────────────────────────────────────────────────────── */
192
+ .md-quote {
193
+ margin: 12px 0;
194
+ padding: 10px 16px;
195
+ border-left: 3px solid var(--blue);
196
+ background: var(--code-bg);
197
+ border-radius: 0 6px 6px 0;
198
+ color: var(--text2);
199
+ font-style: italic;
200
+ }
201
+ .md-quote p { margin: 4px 0; }
202
+
203
+ /* ─── 分隔线 ─────────────────────────────────────────────────────────── */
204
+ .md-hr {
205
+ border: none;
206
+ border-top: 1px solid var(--border-light);
207
+ margin: 18px 0;
208
+ }
209
+
210
+ /* ─── 表格 ───────────────────────────────────────────────────────────── */
211
+ .md-table-wrap {
212
+ overflow-x: auto;
213
+ margin: 12px 0;
214
+ border-radius: 8px;
215
+ border: 1px solid var(--border-light);
216
+ }
217
+ .md-table {
218
+ width: 100%;
219
+ border-collapse: collapse;
220
+ font-size: 13px;
221
+ }
222
+ .md-table th {
223
+ background: var(--code-bg);
224
+ font-weight: 600;
225
+ padding: 8px 12px;
226
+ border-bottom: 2px solid var(--border);
227
+ white-space: nowrap;
228
+ }
229
+ .md-table td {
230
+ padding: 6px 12px;
231
+ border-bottom: 1px solid var(--border-light);
232
+ }
233
+ .md-table tbody tr:last-child td { border-bottom: none; }
234
+ .md-table tbody tr:hover { background: var(--code-bg); }
235
+
236
+ /* ─── 滚动条 ─────────────────────────────────────────────────────────── */
237
+ .md-reader-body::-webkit-scrollbar { width: 6px; }
238
+ .md-reader-body::-webkit-scrollbar-track { background: transparent; }
239
+ .md-reader-body::-webkit-scrollbar-thumb { background: var(--border); border-radius: 3px; }
240
+ .md-reader-body::-webkit-scrollbar-thumb:hover { background: var(--text3); }
@@ -0,0 +1,322 @@
1
+ /* ════════════════════════════════════════════════════════════════════
2
+ * rnlibrarycheck.css — RN 仓库检视面板专用样式
3
+ *
4
+ * 依赖:theme.css(CSS 变量)、codecheck.css(cc-* 通用卡片/徽章/按钮样式)
5
+ * ════════════════════════════════════════════════════════════════════ */
6
+
7
+ /* ─── 入参说明 ─────────────────────────────────────────────────────── */
8
+ .rn-param-intro {
9
+ background: var(--card);
10
+ border: 1px solid var(--border);
11
+ border-radius: 8px;
12
+ padding: 12px 14px;
13
+ }
14
+
15
+ .rn-param-title {
16
+ font-size: 12px;
17
+ font-weight: 600;
18
+ color: var(--text2);
19
+ margin-bottom: 10px;
20
+ }
21
+
22
+ .rn-param-grid {
23
+ display: grid;
24
+ grid-template-columns: repeat(2, 1fr);
25
+ gap: 8px;
26
+ }
27
+
28
+ @media (max-width: 900px) {
29
+ .rn-param-grid { grid-template-columns: 1fr; }
30
+ }
31
+
32
+ .rn-param-item {
33
+ display: flex;
34
+ flex-direction: column;
35
+ gap: 3px;
36
+ padding: 8px 10px;
37
+ background: var(--bg);
38
+ border: 1px solid var(--border-light);
39
+ border-radius: 6px;
40
+ }
41
+
42
+ .rn-param-name {
43
+ font-size: 11px;
44
+ font-weight: 600;
45
+ color: var(--blue);
46
+ }
47
+
48
+ .rn-param-code {
49
+ font-family: var(--mono);
50
+ font-size: 11px;
51
+ color: var(--text2);
52
+ background: var(--code-bg);
53
+ padding: 2px 6px;
54
+ border-radius: 4px;
55
+ word-break: break-all;
56
+ line-height: 1.5;
57
+ }
58
+
59
+ .rn-param-note {
60
+ font-size: 10px;
61
+ color: var(--text3);
62
+ }
63
+
64
+ .rn-param-tip {
65
+ margin-top: 10px;
66
+ font-size: 11px;
67
+ color: var(--text3);
68
+ padding-top: 8px;
69
+ border-top: 1px dashed var(--border-light);
70
+ }
71
+
72
+ /* ─── 评分概览面板 ─────────────────────────────────────────────────── */
73
+ .rn-score-panel {
74
+ background: var(--bg);
75
+ border: 1px solid var(--border);
76
+ border-radius: 8px;
77
+ padding: 14px 16px;
78
+ }
79
+
80
+ .rn-score-panel-title {
81
+ font-size: 13px;
82
+ font-weight: 600;
83
+ color: var(--text);
84
+ margin-bottom: 10px;
85
+ }
86
+
87
+ .rn-score-overall-row {
88
+ display: flex;
89
+ align-items: center;
90
+ gap: 10px;
91
+ padding: 8px 12px;
92
+ background: var(--card);
93
+ border-radius: 6px;
94
+ margin-bottom: 10px;
95
+ }
96
+
97
+ .rn-score-label {
98
+ font-size: 12px;
99
+ font-weight: 700;
100
+ color: var(--text);
101
+ width: 64px;
102
+ flex-shrink: 0;
103
+ }
104
+
105
+ .rn-score-value {
106
+ font-size: 18px;
107
+ font-weight: 700;
108
+ font-family: var(--mono);
109
+ padding: 3px 12px;
110
+ border-radius: 6px;
111
+ }
112
+
113
+ .rn-score-weights {
114
+ font-size: 10px;
115
+ color: var(--text3);
116
+ margin-left: auto;
117
+ text-align: right;
118
+ }
119
+
120
+ .rn-score-grid {
121
+ display: grid;
122
+ grid-template-columns: repeat(5, 1fr);
123
+ gap: 8px;
124
+ }
125
+
126
+ @media (max-width: 900px) {
127
+ .rn-score-grid { grid-template-columns: repeat(3, 1fr); }
128
+ }
129
+
130
+ .rn-score-item {
131
+ display: flex;
132
+ align-items: center;
133
+ gap: 6px;
134
+ padding: 7px 10px;
135
+ background: var(--card);
136
+ border: 1px solid var(--border-light);
137
+ border-radius: 6px;
138
+ }
139
+
140
+ .rn-score-item-label {
141
+ font-size: 11px;
142
+ color: var(--text2);
143
+ flex-shrink: 0;
144
+ }
145
+
146
+ .rn-score-item-value {
147
+ font-size: 13px;
148
+ font-weight: 700;
149
+ font-family: var(--mono);
150
+ padding: 2px 8px;
151
+ border-radius: 4px;
152
+ color: var(--text3);
153
+ }
154
+
155
+ /* ─── 步骤进度面板 ─────────────────────────────────────────────────── */
156
+ .rn-steps-panel {
157
+ background: var(--bg);
158
+ border: 1px solid var(--border);
159
+ border-radius: 8px;
160
+ padding: 14px 16px;
161
+ }
162
+
163
+ .rn-steps-title-row {
164
+ display: flex;
165
+ align-items: center;
166
+ justify-content: space-between;
167
+ gap: 10px;
168
+ margin-bottom: 10px;
169
+ flex-wrap: wrap;
170
+ }
171
+
172
+ .rn-steps-title {
173
+ font-size: 13px;
174
+ font-weight: 600;
175
+ color: var(--text);
176
+ margin-bottom: 0;
177
+ }
178
+
179
+ /* ─── 打包下载全部报告按钮 ─────────────────────────────────────────── */
180
+ .rn-archive-btn {
181
+ display: inline-flex;
182
+ align-items: center;
183
+ gap: 5px;
184
+ padding: 6px 14px;
185
+ border-radius: 6px;
186
+ font-size: 12px;
187
+ font-weight: 600;
188
+ background: rgba(52,199,89,0.12);
189
+ color: var(--green);
190
+ border: 1px solid rgba(52,199,89,0.3);
191
+ cursor: pointer;
192
+ white-space: nowrap;
193
+ flex-shrink: 0;
194
+ transition: all 0.15s;
195
+ }
196
+ .rn-archive-btn:hover:not(:disabled) {
197
+ background: rgba(52,199,89,0.2);
198
+ border-color: rgba(52,199,89,0.5);
199
+ }
200
+ .rn-archive-btn:disabled { opacity: 0.5; cursor: not-allowed; }
201
+
202
+ .rn-steps-list {
203
+ display: flex;
204
+ flex-direction: column;
205
+ }
206
+
207
+ .rn-step-row {
208
+ display: flex;
209
+ align-items: center;
210
+ gap: 12px;
211
+ padding: 9px 0;
212
+ border-bottom: 1px dashed var(--border-light);
213
+ }
214
+
215
+ .rn-step-row:last-child { border-bottom: none; }
216
+
217
+ .rn-step-icon {
218
+ width: 32px;
219
+ height: 32px;
220
+ font-size: 13px;
221
+ font-weight: 700;
222
+ border: 2px solid var(--border);
223
+ border-radius: 50%;
224
+ display: flex;
225
+ align-items: center;
226
+ justify-content: center;
227
+ background: var(--card);
228
+ color: var(--text2);
229
+ flex-shrink: 0;
230
+ transition: border-color 0.2s, background 0.2s, color 0.2s;
231
+ }
232
+
233
+ .rn-step-icon.running {
234
+ border-color: var(--blue);
235
+ background: rgba(0,113,227,0.08);
236
+ }
237
+ .rn-step-icon.completed {
238
+ border-color: var(--green);
239
+ background: rgba(52,199,89,0.1);
240
+ color: var(--green);
241
+ }
242
+ .rn-step-icon.failed {
243
+ border-color: var(--red);
244
+ background: rgba(255,59,48,0.1);
245
+ color: var(--red);
246
+ }
247
+ .rn-step-icon.skipped {
248
+ border-color: var(--gray);
249
+ background: rgba(142,142,147,0.08);
250
+ color: var(--gray);
251
+ }
252
+
253
+ .rn-step-info { flex: 1; min-width: 0; }
254
+
255
+ .rn-step-name {
256
+ font-size: 13px;
257
+ font-weight: 600;
258
+ color: var(--text);
259
+ margin-bottom: 1px;
260
+ }
261
+
262
+ .rn-step-weight {
263
+ font-size: 10px;
264
+ font-weight: 400;
265
+ color: var(--text3);
266
+ font-family: var(--mono);
267
+ }
268
+
269
+ .rn-step-desc {
270
+ font-size: 11px;
271
+ color: var(--text3);
272
+ font-family: var(--mono);
273
+ }
274
+
275
+ .rn-step-actions {
276
+ display: flex;
277
+ align-items: center;
278
+ gap: 6px;
279
+ flex-shrink: 0;
280
+ }
281
+
282
+ .rn-step-score {
283
+ font-size: 12px;
284
+ font-weight: 700;
285
+ font-family: var(--mono);
286
+ padding: 3px 9px;
287
+ border-radius: 5px;
288
+ }
289
+
290
+ /* ─── 步骤对话按钮 ─────────────────────────────────────────────────── */
291
+ .rn-session-btn {
292
+ display: inline-flex;
293
+ align-items: center;
294
+ justify-content: center;
295
+ width: 30px;
296
+ height: 26px;
297
+ padding: 0;
298
+ border-radius: 6px;
299
+ font-size: 12px;
300
+ background: rgba(175,82,222,0.1);
301
+ color: var(--purple);
302
+ border: 1px solid rgba(175,82,222,0.3);
303
+ cursor: pointer;
304
+ white-space: nowrap;
305
+ transition: all 0.15s;
306
+ }
307
+
308
+ .rn-session-btn:hover:not(:disabled) {
309
+ background: rgba(175,82,222,0.2);
310
+ border-color: rgba(175,82,222,0.5);
311
+ }
312
+
313
+ .rn-session-btn:disabled { opacity: 0.4; cursor: not-allowed; }
314
+
315
+ /* ─── 面板布局 ─────────────────────────────────────────────────────── */
316
+ #p-rnlibrarycheck .panel-pad {
317
+ padding: 20px 24px;
318
+ overflow-y: auto;
319
+ display: flex;
320
+ flex-direction: column;
321
+ gap: 16px;
322
+ }