vg-coder-cli 2.0.9 → 2.0.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.
Files changed (73) hide show
  1. package/DEVELOPMENT.md +95 -0
  2. package/README.md +19 -0
  3. package/SYSTEM_PROMPT.md +157 -0
  4. package/coverage/base.css +224 -0
  5. package/coverage/block-navigation.js +87 -0
  6. package/coverage/favicon.png +0 -0
  7. package/coverage/index.html +206 -0
  8. package/coverage/lcov-report/base.css +224 -0
  9. package/coverage/lcov-report/block-navigation.js +87 -0
  10. package/coverage/lcov-report/favicon.png +0 -0
  11. package/coverage/lcov-report/index.html +206 -0
  12. package/coverage/lcov-report/prettify.css +1 -0
  13. package/coverage/lcov-report/prettify.js +2 -0
  14. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  15. package/coverage/lcov-report/sorter.js +210 -0
  16. package/coverage/lcov-report/src/detectors/index.html +116 -0
  17. package/coverage/lcov-report/src/detectors/project-detector.js.html +1084 -0
  18. package/coverage/lcov-report/src/exporter/html-exporter.js.html +2839 -0
  19. package/coverage/lcov-report/src/exporter/index.html +116 -0
  20. package/coverage/lcov-report/src/ignore/ignore-manager.js.html +979 -0
  21. package/coverage/lcov-report/src/ignore/index.html +116 -0
  22. package/coverage/lcov-report/src/index.html +116 -0
  23. package/coverage/lcov-report/src/index.js.html +928 -0
  24. package/coverage/lcov-report/src/scanner/file-scanner.js.html +1903 -0
  25. package/coverage/lcov-report/src/scanner/index.html +116 -0
  26. package/coverage/lcov-report/src/tokenizer/index.html +116 -0
  27. package/coverage/lcov-report/src/tokenizer/token-manager.js.html +1252 -0
  28. package/coverage/lcov-report/src/utils/helpers.js.html +469 -0
  29. package/coverage/lcov-report/src/utils/index.html +116 -0
  30. package/coverage/lcov.info +1396 -0
  31. package/coverage/prettify.css +1 -0
  32. package/coverage/prettify.js +2 -0
  33. package/coverage/sort-arrow-sprite.png +0 -0
  34. package/coverage/sorter.js +210 -0
  35. package/coverage/src/detectors/index.html +116 -0
  36. package/coverage/src/detectors/project-detector.js.html +1084 -0
  37. package/coverage/src/exporter/html-exporter.js.html +2839 -0
  38. package/coverage/src/exporter/index.html +116 -0
  39. package/coverage/src/ignore/ignore-manager.js.html +979 -0
  40. package/coverage/src/ignore/index.html +116 -0
  41. package/coverage/src/index.html +116 -0
  42. package/coverage/src/index.js.html +928 -0
  43. package/coverage/src/scanner/file-scanner.js.html +1903 -0
  44. package/coverage/src/scanner/index.html +116 -0
  45. package/coverage/src/tokenizer/index.html +116 -0
  46. package/coverage/src/tokenizer/token-manager.js.html +1252 -0
  47. package/coverage/src/utils/helpers.js.html +469 -0
  48. package/coverage/src/utils/index.html +116 -0
  49. package/jest.config.js +16 -0
  50. package/package.json +5 -3
  51. package/scripts/build.js +40 -0
  52. package/src/server/api-server.js +15 -0
  53. package/src/server/views/css/iframe.css +84 -0
  54. package/src/server/views/css/structure.css +63 -37
  55. package/src/server/views/dashboard.css +127 -310
  56. package/src/server/views/dashboard.html +165 -119
  57. package/src/server/views/js/features/iframe-manager.js +56 -0
  58. package/src/server/views/js/main.js +64 -0
  59. package/src/server/views/vg-coder/assets/icon128.png +0 -0
  60. package/src/server/views/vg-coder/assets/icon16.png +0 -0
  61. package/src/server/views/vg-coder/assets/icon48.png +0 -0
  62. package/src/server/views/vg-coder/background.js +2 -0
  63. package/src/server/views/vg-coder/background.js.LICENSE.txt +118 -0
  64. package/src/server/views/vg-coder/controller.js +1 -0
  65. package/src/server/views/vg-coder/manifest.json +58 -0
  66. package/src/server/views/vg-coder/options.css +164 -0
  67. package/src/server/views/vg-coder/options.html +48 -0
  68. package/src/server/views/vg-coder/options.js +1 -0
  69. package/src/server/views/vg-coder/rules.json +23 -0
  70. package/vg-coder-cli-2.0.11.tgz +0 -0
  71. package/vg-coder.zip +0 -0
  72. package/vg-coder-cli-2.0.8.tgz +0 -0
  73. package/vg-coder-cli-2.0.9.tgz +0 -0
@@ -36,325 +36,215 @@
36
36
  margin: 0;
37
37
  padding: 0;
38
38
  box-sizing: border-box;
39
- -webkit-tap-highlight-color: transparent;
40
39
  }
41
40
 
42
41
  body {
43
- font-family: -apple-system, BlinkMacSystemFont, "SF Pro Text", "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
42
+ font-family: -apple-system, BlinkMacSystemFont, "SF Pro Text", "Segoe UI", Roboto, sans-serif;
44
43
  background-color: var(--ios-bg);
45
44
  color: var(--text-primary);
46
- min-height: 100vh;
47
- padding: 0;
48
- padding-bottom: calc(20px + var(--safe-area-bottom));
49
- -webkit-font-smoothing: antialiased;
50
- transition: background-color 0.3s ease, color 0.3s ease;
45
+ height: 100vh;
46
+ overflow: hidden;
47
+ font-size: 13px;
51
48
  }
52
49
 
53
- .container {
54
- max-width: 800px;
55
- margin: 0 auto;
56
- padding: 20px;
57
- padding-top: calc(20px + var(--safe-area-top));
50
+ /* --- SPLIT LAYOUT STYLES --- */
51
+ .split-layout {
52
+ display: flex;
53
+ height: 100vh;
54
+ width: 100vw;
55
+ }
56
+
57
+ /* Left Panel: VG Coder Tool */
58
+ .left-panel {
59
+ flex: 0 0 450px;
60
+ max-width: 50vw;
61
+ height: 100%;
62
+ overflow-y: auto;
63
+ background: var(--ios-bg);
64
+ border-right: 1px solid var(--ios-separator);
58
65
  position: relative;
66
+ z-index: 10;
67
+ }
68
+
69
+ .container {
70
+ padding: 15px;
71
+ padding-top: 15px;
59
72
  }
60
73
 
61
- /* Header iOS Style */
74
+ /* --- COMPONENT STYLES --- */
62
75
  .header {
63
- text-align: left;
64
- margin-bottom: 24px;
65
- padding: 0 4px;
66
76
  display: flex;
67
77
  justify-content: space-between;
68
- align-items: flex-start;
69
- }
70
-
71
- .header-content {
72
- flex: 1;
78
+ margin-bottom: 15px;
73
79
  }
74
80
 
75
81
  .header h1 {
76
- color: var(--text-primary);
77
- font-size: 34px;
82
+ font-size: 20px;
78
83
  font-weight: 700;
79
- letter-spacing: -0.5px;
80
- margin-bottom: 8px;
81
- }
82
-
83
- .header p {
84
- color: var(--text-secondary);
85
- font-size: 17px;
86
- line-height: 1.4;
87
- margin-bottom: 12px;
84
+ margin: 0;
88
85
  }
89
86
 
90
87
  .status {
91
- display: inline-flex;
92
- align-items: center;
93
- padding: 6px 12px;
94
- background: rgba(52, 199, 89, 0.15);
88
+ font-size: 11px;
95
89
  color: var(--ios-green);
96
- border-radius: 20px;
97
- font-size: 13px;
98
- font-weight: 600;
99
- margin-top: 5px;
100
90
  }
101
91
 
102
- /* Theme Toggle Button */
103
92
  .theme-toggle {
104
- background: var(--ios-card);
105
- border: none;
106
- width: 40px;
107
- height: 40px;
93
+ width: 28px;
94
+ height: 28px;
108
95
  border-radius: 50%;
109
- display: flex;
110
- align-items: center;
111
- justify-content: center;
112
- font-size: 20px;
96
+ border: none;
97
+ background: var(--ios-card);
113
98
  cursor: pointer;
114
- box-shadow: 0 2px 8px var(--shadow-color);
115
- color: var(--text-primary);
116
- transition: transform 0.2s, background-color 0.3s;
99
+ box-shadow: 0 2px 5px var(--shadow-color);
117
100
  }
118
101
 
119
- .theme-toggle:active {
120
- transform: scale(0.9);
121
- }
122
-
123
- /* Card Style (Inset Grouped) */
124
102
  .system-prompt-card,
125
103
  .endpoint-card {
126
104
  background: var(--ios-card);
127
- border-radius: 16px;
128
- padding: 20px;
129
- margin-bottom: 20px;
130
- box-shadow: 0 2px 8px var(--shadow-color);
131
- overflow: hidden;
132
- position: relative;
133
- transition: background-color 0.3s ease;
105
+ border-radius: 10px;
106
+ padding: 12px;
107
+ margin-bottom: 12px;
108
+ box-shadow: 0 1px 3px var(--shadow-color);
134
109
  }
135
110
 
136
- /* System Prompt */
137
111
  .system-prompt-header {
138
112
  display: flex;
139
113
  justify-content: space-between;
140
- align-items: center;
141
114
  cursor: pointer;
142
- padding: 4px 0;
143
115
  }
144
116
 
145
- /* Container for Icon Button + Title */
146
117
  .header-title-group {
147
118
  display: flex;
148
119
  align-items: center;
149
- gap: 12px;
120
+ gap: 8px;
150
121
  }
151
122
 
152
123
  .system-prompt-header h2 {
153
- color: var(--text-primary);
154
- font-size: 20px;
155
- font-weight: 600;
124
+ font-size: 14px;
156
125
  margin: 0;
157
126
  }
158
127
 
159
- /* Icon Buttons in Headers */
160
128
  .btn-icon-head {
129
+ width: 24px;
130
+ height: 24px;
161
131
  background: rgba(0, 0, 0, 0.05);
162
132
  border: none;
133
+ border-radius: 6px;
163
134
  cursor: pointer;
164
- font-size: 18px;
165
- padding: 6px;
166
- width: 36px;
167
- height: 36px;
168
- border-radius: 8px;
169
135
  display: flex;
170
136
  align-items: center;
171
137
  justify-content: center;
172
- transition: background 0.2s, transform 0.1s;
138
+ text-decoration: none;
173
139
  color: var(--text-primary);
174
140
  }
175
- [data-theme="dark"] .btn-icon-head {
176
- background: rgba(255, 255, 255, 0.1);
177
- }
178
- .btn-icon-head:hover {
179
- background: rgba(0, 122, 255, 0.15);
180
- }
181
- .btn-icon-head:active {
182
- transform: scale(0.95);
183
- }
184
-
185
- .toggle-icon {
186
- color: var(--text-secondary);
187
- font-size: 14px;
188
- transition: transform 0.3s cubic-bezier(0.25, 0.1, 0.25, 1);
189
- }
190
-
191
- .toggle-icon.open {
192
- transform: rotate(180deg);
193
- }
194
141
 
195
142
  .system-prompt-content {
196
143
  max-height: 0;
197
144
  overflow: hidden;
198
- transition: max-height 0.4s cubic-bezier(0.25, 0.1, 0.25, 1), opacity 0.3s;
199
- opacity: 0;
145
+ transition: max-height 0.3s;
200
146
  }
201
147
 
202
148
  .system-prompt-content.open {
203
- max-height: 2000px;
204
- opacity: 1;
205
- margin-top: 16px;
149
+ max-height: 500px;
150
+ margin-top: 10px;
206
151
  }
207
152
 
208
153
  .prompt-text {
209
154
  background: var(--ios-input-bg);
210
- border: none;
211
- border-radius: 12px;
212
- padding: 16px;
213
- font-family: 'SF Mono', 'Menlo', 'Monaco', 'Courier New', monospace;
214
- font-size: 13px;
215
- line-height: 1.5;
216
- white-space: pre-wrap;
217
- max-height: 300px;
155
+ padding: 8px;
156
+ border-radius: 6px;
157
+ font-size: 11px;
158
+ font-family: monospace;
159
+ max-height: 150px;
218
160
  overflow-y: auto;
219
- margin-bottom: 16px;
161
+ }
162
+
163
+ /* Extension Steps */
164
+ .extension-steps {
165
+ padding: 10px;
166
+ font-size: 12px;
220
167
  color: var(--text-primary);
221
- -webkit-overflow-scrolling: touch;
222
- transition: background-color 0.3s;
223
168
  }
224
169
 
225
- /* Endpoints */
226
- .endpoint-header {
227
- display: flex;
228
- align-items: center;
229
- justify-content: space-between; /* Spread items to edges */
230
- margin-bottom: 12px;
231
- border-bottom: 0.5px solid var(--ios-separator);
232
- padding-bottom: 12px;
170
+ .extension-steps ol {
171
+ padding-left: 20px;
172
+ margin-bottom: 10px;
233
173
  }
234
174
 
235
- /* Group method and path on the left */
236
- .endpoint-title-group {
175
+ .extension-steps li {
176
+ margin-bottom: 5px;
177
+ }
178
+
179
+ .endpoint-header {
237
180
  display: flex;
238
- align-items: center;
239
- flex-wrap: wrap;
240
- gap: 10px;
181
+ justify-content: space-between;
182
+ margin-bottom: 8px;
183
+ padding-bottom: 5px;
184
+ border-bottom: 1px solid var(--ios-separator);
241
185
  }
242
186
 
243
- .method {
244
- padding: 4px 10px;
245
- border-radius: 6px;
246
- font-weight: 700;
187
+ .endpoint-path {
188
+ font-family: monospace;
189
+ font-weight: 600;
247
190
  font-size: 12px;
248
- text-transform: uppercase;
249
- letter-spacing: 0.5px;
250
191
  }
251
192
 
252
- .method.post {
253
- background: var(--ios-green);
193
+ .method {
194
+ font-size: 10px;
195
+ padding: 2px 5px;
196
+ border-radius: 4px;
254
197
  color: white;
198
+ margin-right: 5px;
255
199
  }
256
200
 
257
- .endpoint-path {
258
- font-family: 'SF Mono', 'Menlo', monospace;
259
- color: var(--text-primary);
260
- font-size: 16px;
261
- font-weight: 600;
262
- word-break: break-all;
201
+ .method.post {
202
+ background: var(--ios-green);
263
203
  }
264
204
 
265
- .endpoint-desc {
266
- color: var(--text-secondary);
267
- margin-bottom: 20px;
268
- font-size: 15px;
269
- line-height: 1.4;
205
+ .method.get {
206
+ background: var(--ios-blue);
270
207
  }
271
208
 
272
- /* Forms */
273
209
  .form-group {
274
- margin-bottom: 20px;
275
- }
276
-
277
- .form-group label {
278
- display: block;
279
- margin-bottom: 8px;
280
- color: var(--text-primary);
281
- font-weight: 500;
282
- font-size: 14px;
283
- text-transform: uppercase;
284
- letter-spacing: 0.3px;
285
- opacity: 0.6;
210
+ margin-bottom: 10px;
286
211
  }
287
212
 
288
213
  .form-group input,
289
214
  .form-group textarea {
290
215
  width: 100%;
291
- padding: 14px;
292
- background: var(--ios-input-bg);
293
- border: 1px solid transparent;
294
- border-radius: 12px;
295
- font-size: 17px;
296
- font-family: 'SF Mono', 'Menlo', monospace;
297
- color: var(--text-primary);
298
- transition: background 0.2s, border-color 0.2s;
299
- appearance: none;
300
- -webkit-appearance: none;
301
- }
302
-
303
- .form-group input:focus,
304
- .form-group textarea:focus {
305
- outline: none;
306
- border-color: var(--ios-blue);
216
+ padding: 6px 10px;
307
217
  background: var(--ios-input-bg);
218
+ border: none;
219
+ border-radius: 6px;
220
+ font-family: monospace;
221
+ font-size: 12px;
308
222
  }
309
223
 
310
224
  .form-group textarea {
311
- min-height: 120px;
312
- resize: none;
225
+ min-height: 60px;
226
+ resize: vertical;
313
227
  }
314
228
 
315
- /* Buttons */
316
229
  .btn-group {
317
230
  display: flex;
318
- gap: 12px;
319
- margin-top: 24px;
320
- flex-direction: column;
321
- }
322
-
323
- @media (min-width: 640px) {
324
- .btn-group {
325
- flex-direction: row;
326
- }
231
+ gap: 8px;
232
+ margin-top: 10px;
327
233
  }
328
234
 
329
235
  .btn {
236
+ flex: 1;
237
+ padding: 6px 12px;
238
+ border: none;
239
+ border-radius: 6px;
330
240
  background: var(--ios-blue);
331
241
  color: white;
332
- border: none;
333
- padding: 14px 20px;
334
- border-radius: 12px;
242
+ font-size: 12px;
335
243
  cursor: pointer;
336
- font-size: 17px;
337
- font-weight: 600;
338
- transition: transform 0.1s, opacity 0.2s;
339
244
  display: flex;
340
245
  align-items: center;
341
246
  justify-content: center;
342
- gap: 8px;
343
- width: 100%;
344
- position: relative;
345
- overflow: hidden;
346
- }
347
-
348
- .btn:active {
349
- transform: scale(0.98);
350
- opacity: 0.9;
351
- }
352
-
353
- .btn:disabled {
354
- background: var(--ios-gray-light);
355
- color: var(--ios-gray);
356
- cursor: not-allowed;
357
- transform: none;
247
+ gap: 5px;
358
248
  }
359
249
 
360
250
  .btn-copy {
@@ -362,127 +252,54 @@ body {
362
252
  color: var(--ios-blue);
363
253
  }
364
254
 
365
- .system-prompt-content .btn-copy {
366
- margin-top: 8px;
367
- }
368
-
369
- .btn-copy:active {
370
- background: rgba(0, 122, 255, 0.2);
371
- }
372
-
373
- .btn-copy.copied {
374
- background: var(--ios-green);
375
- color: white;
376
- }
377
-
378
- /* Response Area */
379
255
  .response {
380
- margin-top: 20px;
381
- padding: 16px;
382
- border-radius: 12px;
256
+ margin-top: 10px;
257
+ padding: 8px;
383
258
  background: var(--code-bg);
384
- color: #fff;
259
+ color: white;
260
+ border-radius: 6px;
261
+ font-size: 11px;
385
262
  display: none;
386
- font-size: 13px;
387
- overflow-x: auto;
388
- border-left: none;
263
+ max-height: 200px;
264
+ overflow-y: auto;
389
265
  }
390
266
 
391
267
  .response.show {
392
268
  display: block;
393
- animation: fadeIn 0.3s ease;
394
- }
395
-
396
- .response.success {
397
- border: 1px solid rgba(52, 199, 89, 0.3);
398
- }
399
-
400
- .response.error {
401
- border: 1px solid rgba(255, 59, 48, 0.3);
402
- background: #2C1515;
403
- }
404
-
405
- .response pre {
406
- margin: 0;
407
- font-family: 'SF Mono', 'Menlo', monospace;
408
- white-space: pre-wrap;
409
- word-wrap: break-word;
410
- }
411
-
412
- @keyframes fadeIn {
413
- from {
414
- opacity: 0;
415
- transform: translateY(5px);
416
- }
417
-
418
- to {
419
- opacity: 1;
420
- transform: translateY(0);
421
- }
422
269
  }
423
270
 
424
- /* Loading Spinner */
425
- .loading {
426
- display: inline-block;
427
- width: 18px;
428
- height: 18px;
429
- border: 2px solid rgba(255, 255, 255, 0.3);
430
- border-radius: 50%;
431
- border-top-color: currentColor;
432
- animation: spin 0.8s linear infinite;
271
+ /* Tree specific compact override */
272
+ .tree-container {
273
+ margin-top: 10px;
433
274
  }
434
275
 
435
- @keyframes spin {
436
- to {
437
- transform: rotate(360deg);
438
- }
276
+ .tree-content {
277
+ max-height: 300px;
439
278
  }
440
279
 
441
280
  /* Toast */
442
281
  .toast {
443
282
  position: fixed;
444
- top: 10px;
445
- left: 50%;
446
- transform: translateX(-50%) translateY(-100px);
447
- padding: 12px 20px;
448
- border-radius: 25px;
449
- color: #000;
450
- background: rgba(255, 255, 255, 0.95);
451
- backdrop-filter: blur(20px);
452
- -webkit-backdrop-filter: blur(20px);
453
- font-weight: 500;
454
- font-size: 15px;
455
- box-shadow: 0 4px 15px rgba(0, 0, 0, 0.15);
456
- transition: transform 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275), opacity 0.3s;
457
- z-index: 2000;
458
- display: flex;
459
- align-items: center;
460
- gap: 10px;
461
- width: auto;
462
- max-width: 90%;
463
- white-space: nowrap;
464
- opacity: 0;
465
- pointer-events: none;
283
+ bottom: 20px;
284
+ left: 20px;
285
+ transform: translateY(100px);
466
286
  }
467
287
 
468
288
  .toast.show {
469
- transform: translateX(-50%) translateY(calc(var(--safe-area-top)));
470
- opacity: 1;
289
+ transform: translateY(0);
471
290
  }
472
291
 
473
- .toast::before {
474
- content: '';
475
- display: block;
476
- width: 20px;
477
- height: 20px;
478
- border-radius: 50%;
479
- flex-shrink: 0;
480
- }
481
-
482
- .toast.success::before {
483
- background: var(--ios-green) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke='white'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M5 13l4 4L19 7'/%3E%3C/svg%3E") center/12px no-repeat;
484
- }
292
+ @media (max-width: 768px) {
293
+ .split-layout {
294
+ flex-direction: column;
295
+ }
485
296
 
486
- .toast.error::before {
487
- background: var(--ios-red) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke='white'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 18L18 6M6 6l12 12'/%3E%3C/svg%3E") center/12px no-repeat;
297
+ .left-panel {
298
+ flex: none;
299
+ width: 100%;
300
+ max-width: 100%;
301
+ height: 50vh;
302
+ border-right: none;
303
+ border-bottom: 1px solid var(--ios-separator);
304
+ }
488
305
  }