vg-coder-cli 2.0.8 → 2.0.10

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 (75) hide show
  1. package/README.md +19 -0
  2. package/SYSTEM_PROMPT.md +157 -0
  3. package/coverage/base.css +224 -0
  4. package/coverage/block-navigation.js +87 -0
  5. package/coverage/favicon.png +0 -0
  6. package/coverage/index.html +206 -0
  7. package/coverage/lcov-report/base.css +224 -0
  8. package/coverage/lcov-report/block-navigation.js +87 -0
  9. package/coverage/lcov-report/favicon.png +0 -0
  10. package/coverage/lcov-report/index.html +206 -0
  11. package/coverage/lcov-report/prettify.css +1 -0
  12. package/coverage/lcov-report/prettify.js +2 -0
  13. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  14. package/coverage/lcov-report/sorter.js +210 -0
  15. package/coverage/lcov-report/src/detectors/index.html +116 -0
  16. package/coverage/lcov-report/src/detectors/project-detector.js.html +1084 -0
  17. package/coverage/lcov-report/src/exporter/html-exporter.js.html +2839 -0
  18. package/coverage/lcov-report/src/exporter/index.html +116 -0
  19. package/coverage/lcov-report/src/ignore/ignore-manager.js.html +979 -0
  20. package/coverage/lcov-report/src/ignore/index.html +116 -0
  21. package/coverage/lcov-report/src/index.html +116 -0
  22. package/coverage/lcov-report/src/index.js.html +928 -0
  23. package/coverage/lcov-report/src/scanner/file-scanner.js.html +1903 -0
  24. package/coverage/lcov-report/src/scanner/index.html +116 -0
  25. package/coverage/lcov-report/src/tokenizer/index.html +116 -0
  26. package/coverage/lcov-report/src/tokenizer/token-manager.js.html +1252 -0
  27. package/coverage/lcov-report/src/utils/helpers.js.html +469 -0
  28. package/coverage/lcov-report/src/utils/index.html +116 -0
  29. package/coverage/lcov.info +1396 -0
  30. package/coverage/prettify.css +1 -0
  31. package/coverage/prettify.js +2 -0
  32. package/coverage/sort-arrow-sprite.png +0 -0
  33. package/coverage/sorter.js +210 -0
  34. package/coverage/src/detectors/index.html +116 -0
  35. package/coverage/src/detectors/project-detector.js.html +1084 -0
  36. package/coverage/src/exporter/html-exporter.js.html +2839 -0
  37. package/coverage/src/exporter/index.html +116 -0
  38. package/coverage/src/ignore/ignore-manager.js.html +979 -0
  39. package/coverage/src/ignore/index.html +116 -0
  40. package/coverage/src/index.html +116 -0
  41. package/coverage/src/index.js.html +928 -0
  42. package/coverage/src/scanner/file-scanner.js.html +1903 -0
  43. package/coverage/src/scanner/index.html +116 -0
  44. package/coverage/src/tokenizer/index.html +116 -0
  45. package/coverage/src/tokenizer/token-manager.js.html +1252 -0
  46. package/coverage/src/utils/helpers.js.html +469 -0
  47. package/coverage/src/utils/index.html +116 -0
  48. package/jest.config.js +16 -0
  49. package/package.json +5 -3
  50. package/scripts/build.js +40 -0
  51. package/src/scanner/file-scanner.js +3 -104
  52. package/src/server/api-server.js +74 -18
  53. package/src/server/views/css/structure.css +148 -0
  54. package/src/server/views/dashboard.css +176 -312
  55. package/src/server/views/dashboard.html +153 -85
  56. package/src/server/views/js/api.js +19 -2
  57. package/src/server/views/js/features/structure.js +221 -0
  58. package/src/server/views/js/handlers.js +38 -70
  59. package/src/server/views/js/main.js +60 -0
  60. package/src/server/views/js/utils.js +10 -0
  61. package/src/server/views/vg-coder/assets/icon128.png +0 -0
  62. package/src/server/views/vg-coder/assets/icon16.png +0 -0
  63. package/src/server/views/vg-coder/assets/icon48.png +0 -0
  64. package/src/server/views/vg-coder/background.js +2 -0
  65. package/src/server/views/vg-coder/background.js.LICENSE.txt +118 -0
  66. package/src/server/views/vg-coder/controller.js +1 -0
  67. package/src/server/views/vg-coder/manifest.json +58 -0
  68. package/src/server/views/vg-coder/options.css +164 -0
  69. package/src/server/views/vg-coder/options.html +48 -0
  70. package/src/server/views/vg-coder/options.js +1 -0
  71. package/src/server/views/vg-coder/rules.json +23 -0
  72. package/src/tokenizer/token-manager.js +52 -2
  73. package/vg-coder-cli-2.0.10.tgz +0 -0
  74. package/vg-coder.zip +0 -0
  75. package/vg-coder-cli-2.0.8.tgz +0 -0
@@ -36,325 +36,254 @@
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
+ /* Full viewport height */
47
+ overflow: hidden;
48
+ /* Disable body scroll */
49
+ font-size: 13px;
51
50
  }
52
51
 
53
- .container {
54
- max-width: 800px;
55
- margin: 0 auto;
56
- padding: 20px;
57
- padding-top: calc(20px + var(--safe-area-top));
52
+ /* --- SPLIT LAYOUT STYLES --- */
53
+ .split-layout {
54
+ display: flex;
55
+ height: 100vh;
56
+ width: 100vw;
57
+ }
58
+
59
+ /* Left Panel: VG Coder Tool */
60
+ .left-panel {
61
+ flex: 0 0 450px;
62
+ /* Fixed width: 450px */
63
+ max-width: 50vw;
64
+ /* Max 50% on small screens */
65
+ height: 100%;
66
+ overflow-y: auto;
67
+ /* Scrollable independently */
68
+ background: var(--ios-bg);
69
+ border-right: 1px solid var(--ios-separator);
58
70
  position: relative;
71
+ z-index: 10;
59
72
  }
60
73
 
61
- /* Header iOS Style */
62
- .header {
63
- text-align: left;
64
- margin-bottom: 24px;
65
- padding: 0 4px;
66
- display: flex;
67
- justify-content: space-between;
68
- align-items: flex-start;
74
+ .container {
75
+ padding: 15px;
76
+ padding-top: 15px;
77
+ /* Removed max-width/margin centering since it's inside panel */
69
78
  }
70
79
 
71
- .header-content {
80
+ /* Right Panel: ChatGPT Iframe */
81
+ .right-panel {
72
82
  flex: 1;
83
+ /* Take remaining space */
84
+ height: 100%;
85
+ background: #fff;
86
+ position: relative;
73
87
  }
74
88
 
75
- .header h1 {
76
- color: var(--text-primary);
77
- font-size: 34px;
78
- font-weight: 700;
79
- letter-spacing: -0.5px;
80
- margin-bottom: 8px;
89
+ .right-panel iframe {
90
+ width: 100%;
91
+ height: 100%;
92
+ border: none;
93
+ position: relative;
94
+ z-index: 2;
95
+ /* Sit above placeholder */
81
96
  }
82
97
 
83
- .header p {
98
+ /* Placeholder underneath iframe (visible if iframe fails to load) */
99
+ .iframe-placeholder {
100
+ position: absolute;
101
+ top: 50%;
102
+ left: 50%;
103
+ transform: translate(-50%, -50%);
104
+ text-align: center;
84
105
  color: var(--text-secondary);
85
- font-size: 17px;
86
- line-height: 1.4;
87
- margin-bottom: 12px;
106
+ z-index: 1;
107
+ width: 100%;
108
+ }
109
+
110
+ .link-fallback {
111
+ color: var(--ios-blue);
112
+ text-decoration: none;
113
+ margin-top: 10px;
114
+ display: inline-block;
115
+ }
116
+
117
+ /* --- EXISTING COMPACT STYLES (Preserved & Adjusted) --- */
118
+
119
+ .header {
120
+ display: flex;
121
+ justify-content: space-between;
122
+ margin-bottom: 15px;
123
+ }
124
+
125
+ .header h1 {
126
+ font-size: 20px;
127
+ font-weight: 700;
128
+ margin: 0;
88
129
  }
89
130
 
90
131
  .status {
91
- display: inline-flex;
92
- align-items: center;
93
- padding: 6px 12px;
94
- background: rgba(52, 199, 89, 0.15);
132
+ font-size: 11px;
95
133
  color: var(--ios-green);
96
- border-radius: 20px;
97
- font-size: 13px;
98
- font-weight: 600;
99
- margin-top: 5px;
100
134
  }
101
135
 
102
- /* Theme Toggle Button */
103
136
  .theme-toggle {
104
- background: var(--ios-card);
105
- border: none;
106
- width: 40px;
107
- height: 40px;
137
+ width: 28px;
138
+ height: 28px;
108
139
  border-radius: 50%;
109
- display: flex;
110
- align-items: center;
111
- justify-content: center;
112
- font-size: 20px;
140
+ border: none;
141
+ background: var(--ios-card);
113
142
  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;
117
- }
118
-
119
- .theme-toggle:active {
120
- transform: scale(0.9);
143
+ box-shadow: 0 2px 5px var(--shadow-color);
121
144
  }
122
145
 
123
- /* Card Style (Inset Grouped) */
124
146
  .system-prompt-card,
125
147
  .endpoint-card {
126
148
  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;
149
+ border-radius: 10px;
150
+ padding: 12px;
151
+ margin-bottom: 12px;
152
+ box-shadow: 0 1px 3px var(--shadow-color);
134
153
  }
135
154
 
136
- /* System Prompt */
137
155
  .system-prompt-header {
138
156
  display: flex;
139
157
  justify-content: space-between;
140
- align-items: center;
141
158
  cursor: pointer;
142
- padding: 4px 0;
143
159
  }
144
160
 
145
- /* Container for Icon Button + Title */
146
161
  .header-title-group {
147
162
  display: flex;
148
163
  align-items: center;
149
- gap: 12px;
164
+ gap: 8px;
150
165
  }
151
166
 
152
167
  .system-prompt-header h2 {
153
- color: var(--text-primary);
154
- font-size: 20px;
155
- font-weight: 600;
168
+ font-size: 14px;
156
169
  margin: 0;
157
170
  }
158
171
 
159
- /* Icon Buttons in Headers */
160
172
  .btn-icon-head {
173
+ width: 24px;
174
+ height: 24px;
161
175
  background: rgba(0, 0, 0, 0.05);
162
176
  border: none;
177
+ border-radius: 6px;
163
178
  cursor: pointer;
164
- font-size: 18px;
165
- padding: 6px;
166
- width: 36px;
167
- height: 36px;
168
- border-radius: 8px;
169
- display: flex;
170
- align-items: center;
171
- justify-content: center;
172
- transition: background 0.2s, transform 0.1s;
173
- color: var(--text-primary);
174
- }
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
179
  }
194
180
 
195
181
  .system-prompt-content {
196
182
  max-height: 0;
197
183
  overflow: hidden;
198
- transition: max-height 0.4s cubic-bezier(0.25, 0.1, 0.25, 1), opacity 0.3s;
199
- opacity: 0;
184
+ transition: max-height 0.3s;
200
185
  }
201
186
 
202
187
  .system-prompt-content.open {
203
- max-height: 2000px;
204
- opacity: 1;
205
- margin-top: 16px;
188
+ max-height: 500px;
189
+ margin-top: 10px;
206
190
  }
207
191
 
208
192
  .prompt-text {
209
193
  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;
194
+ padding: 8px;
195
+ border-radius: 6px;
196
+ font-size: 11px;
197
+ font-family: monospace;
198
+ max-height: 150px;
218
199
  overflow-y: auto;
219
- margin-bottom: 16px;
200
+ }
201
+
202
+ /* Extension Steps */
203
+ .extension-steps {
204
+ padding: 10px;
205
+ font-size: 12px;
220
206
  color: var(--text-primary);
221
- -webkit-overflow-scrolling: touch;
222
- transition: background-color 0.3s;
223
207
  }
224
208
 
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;
209
+ .extension-steps ol {
210
+ padding-left: 20px;
211
+ margin-bottom: 10px;
212
+ }
213
+
214
+ .extension-steps li {
215
+ margin-bottom: 5px;
233
216
  }
234
217
 
235
- /* Group method and path on the left */
236
- .endpoint-title-group {
218
+ .endpoint-header {
237
219
  display: flex;
238
- align-items: center;
239
- flex-wrap: wrap;
240
- gap: 10px;
220
+ justify-content: space-between;
221
+ margin-bottom: 8px;
222
+ padding-bottom: 5px;
223
+ border-bottom: 1px solid var(--ios-separator);
241
224
  }
242
225
 
243
- .method {
244
- padding: 4px 10px;
245
- border-radius: 6px;
246
- font-weight: 700;
226
+ .endpoint-path {
227
+ font-family: monospace;
228
+ font-weight: 600;
247
229
  font-size: 12px;
248
- text-transform: uppercase;
249
- letter-spacing: 0.5px;
250
230
  }
251
231
 
252
- .method.post {
253
- background: var(--ios-green);
232
+ .method {
233
+ font-size: 10px;
234
+ padding: 2px 5px;
235
+ border-radius: 4px;
254
236
  color: white;
237
+ margin-right: 5px;
255
238
  }
256
239
 
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;
240
+ .method.post {
241
+ background: var(--ios-green);
263
242
  }
264
243
 
265
- .endpoint-desc {
266
- color: var(--text-secondary);
267
- margin-bottom: 20px;
268
- font-size: 15px;
269
- line-height: 1.4;
244
+ .method.get {
245
+ background: var(--ios-blue);
270
246
  }
271
247
 
272
- /* Forms */
273
248
  .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;
249
+ margin-bottom: 10px;
286
250
  }
287
251
 
288
252
  .form-group input,
289
253
  .form-group textarea {
290
254
  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);
255
+ padding: 6px 10px;
307
256
  background: var(--ios-input-bg);
257
+ border: none;
258
+ border-radius: 6px;
259
+ font-family: monospace;
260
+ font-size: 12px;
308
261
  }
309
262
 
310
263
  .form-group textarea {
311
- min-height: 120px;
312
- resize: none;
264
+ min-height: 60px;
265
+ resize: vertical;
313
266
  }
314
267
 
315
- /* Buttons */
316
268
  .btn-group {
317
269
  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
- }
270
+ gap: 8px;
271
+ margin-top: 10px;
327
272
  }
328
273
 
329
274
  .btn {
275
+ flex: 1;
276
+ padding: 6px 12px;
277
+ border: none;
278
+ border-radius: 6px;
330
279
  background: var(--ios-blue);
331
280
  color: white;
332
- border: none;
333
- padding: 14px 20px;
334
- border-radius: 12px;
281
+ font-size: 12px;
335
282
  cursor: pointer;
336
- font-size: 17px;
337
- font-weight: 600;
338
- transition: transform 0.1s, opacity 0.2s;
339
283
  display: flex;
340
284
  align-items: center;
341
285
  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;
286
+ gap: 5px;
358
287
  }
359
288
 
360
289
  .btn-copy {
@@ -362,127 +291,62 @@ body {
362
291
  color: var(--ios-blue);
363
292
  }
364
293
 
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
294
  .response {
380
- margin-top: 20px;
381
- padding: 16px;
382
- border-radius: 12px;
295
+ margin-top: 10px;
296
+ padding: 8px;
383
297
  background: var(--code-bg);
384
- color: #fff;
298
+ color: white;
299
+ border-radius: 6px;
300
+ font-size: 11px;
385
301
  display: none;
386
- font-size: 13px;
387
- overflow-x: auto;
388
- border-left: none;
302
+ max-height: 200px;
303
+ overflow-y: auto;
389
304
  }
390
305
 
391
306
  .response.show {
392
307
  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
308
  }
404
309
 
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
- }
310
+ /* Tree specific compact override */
311
+ .tree-container {
312
+ margin-top: 10px;
422
313
  }
423
314
 
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;
433
- }
434
-
435
- @keyframes spin {
436
- to {
437
- transform: rotate(360deg);
438
- }
315
+ .tree-content {
316
+ max-height: 300px;
439
317
  }
440
318
 
441
319
  /* Toast */
442
320
  .toast {
443
321
  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;
322
+ bottom: 20px;
323
+ left: 20px;
324
+ /* Move toast to bottom left */
325
+ transform: translateY(100px);
326
+ /* Adjust animation */
466
327
  }
467
328
 
468
329
  .toast.show {
469
- transform: translateX(-50%) translateY(calc(var(--safe-area-top)));
470
- opacity: 1;
330
+ transform: translateY(0);
471
331
  }
472
332
 
473
- .toast::before {
474
- content: '';
475
- display: block;
476
- width: 20px;
477
- height: 20px;
478
- border-radius: 50%;
479
- flex-shrink: 0;
480
- }
333
+ /* Mobile Responsiveness */
334
+ @media (max-width: 768px) {
335
+ .split-layout {
336
+ flex-direction: column;
337
+ }
481
338
 
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
- }
339
+ .left-panel {
340
+ flex: none;
341
+ width: 100%;
342
+ max-width: 100%;
343
+ height: 50vh;
344
+ border-right: none;
345
+ border-bottom: 1px solid var(--ios-separator);
346
+ }
485
347
 
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;
348
+ .right-panel {
349
+ flex: 1;
350
+ height: 50vh;
351
+ }
488
352
  }