synapse-sdk 1.0.0a96__py3-none-any.whl → 1.0.0b1__py3-none-any.whl

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.

Potentially problematic release.


This version of synapse-sdk might be problematic. Click here for more details.

Files changed (66) hide show
  1. synapse_sdk/cli/__init__.py +139 -84
  2. synapse_sdk/cli/code_server.py +169 -0
  3. synapse_sdk/cli/config.py +105 -4
  4. synapse_sdk/cli/devtools.py +54 -34
  5. synapse_sdk/clients/base.py +3 -4
  6. synapse_sdk/devtools/server.py +24 -791
  7. synapse_sdk/devtools/streamlit_app/__init__.py +5 -0
  8. synapse_sdk/devtools/streamlit_app/app.py +128 -0
  9. synapse_sdk/devtools/streamlit_app/services/__init__.py +11 -0
  10. synapse_sdk/devtools/streamlit_app/services/job_service.py +233 -0
  11. synapse_sdk/devtools/streamlit_app/services/plugin_service.py +236 -0
  12. synapse_sdk/devtools/streamlit_app/services/serve_service.py +95 -0
  13. synapse_sdk/devtools/streamlit_app/ui/__init__.py +15 -0
  14. synapse_sdk/devtools/streamlit_app/ui/config_tab.py +76 -0
  15. synapse_sdk/devtools/streamlit_app/ui/deployment_tab.py +66 -0
  16. synapse_sdk/devtools/streamlit_app/ui/http_tab.py +125 -0
  17. synapse_sdk/devtools/streamlit_app/ui/jobs_tab.py +573 -0
  18. synapse_sdk/devtools/streamlit_app/ui/serve_tab.py +346 -0
  19. synapse_sdk/devtools/streamlit_app/ui/status_bar.py +118 -0
  20. synapse_sdk/devtools/streamlit_app/utils/__init__.py +40 -0
  21. synapse_sdk/devtools/streamlit_app/utils/json_viewer.py +197 -0
  22. synapse_sdk/devtools/streamlit_app/utils/log_formatter.py +38 -0
  23. synapse_sdk/devtools/streamlit_app/utils/styles.py +241 -0
  24. synapse_sdk/devtools/streamlit_app/utils/ui_components.py +289 -0
  25. synapse_sdk/devtools/streamlit_app.py +10 -0
  26. synapse_sdk/plugins/categories/upload/actions/upload.py +2 -1
  27. synapse_sdk/utils/converters/dm/__init__.py +0 -1
  28. synapse_sdk/utils/converters/pascal/from_dm.py +32 -10
  29. synapse_sdk/utils/storage/providers/file_system.py +15 -13
  30. {synapse_sdk-1.0.0a96.dist-info → synapse_sdk-1.0.0b1.dist-info}/METADATA +4 -6
  31. {synapse_sdk-1.0.0a96.dist-info → synapse_sdk-1.0.0b1.dist-info}/RECORD +35 -46
  32. synapse_sdk/devtools/models.py +0 -55
  33. synapse_sdk/devtools/utils.py +0 -52
  34. synapse_sdk/devtools/web/.gitignore +0 -2
  35. synapse_sdk/devtools/web/README.md +0 -34
  36. synapse_sdk/devtools/web/dist/index.html +0 -17
  37. synapse_sdk/devtools/web/index.html +0 -16
  38. synapse_sdk/devtools/web/jsconfig.json +0 -15
  39. synapse_sdk/devtools/web/package-lock.json +0 -2609
  40. synapse_sdk/devtools/web/package.json +0 -27
  41. synapse_sdk/devtools/web/pnpm-lock.yaml +0 -1055
  42. synapse_sdk/devtools/web/src/App.jsx +0 -14
  43. synapse_sdk/devtools/web/src/App.module.css +0 -33
  44. synapse_sdk/devtools/web/src/assets/favicon.ico +0 -0
  45. synapse_sdk/devtools/web/src/components/Breadcrumbs.jsx +0 -42
  46. synapse_sdk/devtools/web/src/components/Layout.jsx +0 -12
  47. synapse_sdk/devtools/web/src/components/LogViewer.jsx +0 -280
  48. synapse_sdk/devtools/web/src/components/MessageViewer.jsx +0 -150
  49. synapse_sdk/devtools/web/src/components/NavigationSidebar.jsx +0 -128
  50. synapse_sdk/devtools/web/src/components/ServerStatusBar.jsx +0 -245
  51. synapse_sdk/devtools/web/src/components/icons.jsx +0 -325
  52. synapse_sdk/devtools/web/src/index.css +0 -470
  53. synapse_sdk/devtools/web/src/index.jsx +0 -15
  54. synapse_sdk/devtools/web/src/logo.svg +0 -1
  55. synapse_sdk/devtools/web/src/router.jsx +0 -34
  56. synapse_sdk/devtools/web/src/utils/api.js +0 -442
  57. synapse_sdk/devtools/web/src/views/ApplicationDetailView.jsx +0 -241
  58. synapse_sdk/devtools/web/src/views/ApplicationsView.jsx +0 -224
  59. synapse_sdk/devtools/web/src/views/HomeView.jsx +0 -197
  60. synapse_sdk/devtools/web/src/views/JobDetailView.jsx +0 -310
  61. synapse_sdk/devtools/web/src/views/PluginView.jsx +0 -914
  62. synapse_sdk/devtools/web/vite.config.js +0 -13
  63. {synapse_sdk-1.0.0a96.dist-info → synapse_sdk-1.0.0b1.dist-info}/WHEEL +0 -0
  64. {synapse_sdk-1.0.0a96.dist-info → synapse_sdk-1.0.0b1.dist-info}/entry_points.txt +0 -0
  65. {synapse_sdk-1.0.0a96.dist-info → synapse_sdk-1.0.0b1.dist-info}/licenses/LICENSE +0 -0
  66. {synapse_sdk-1.0.0a96.dist-info → synapse_sdk-1.0.0b1.dist-info}/top_level.txt +0 -0
@@ -1,470 +0,0 @@
1
- @import "tailwindcss";
2
- @plugin "daisyui";
3
-
4
- /* Professional theme overrides */
5
- :root {
6
- /* Set default font size to sm for higher density */
7
- font-size: 14px;
8
- line-height: 1.5;
9
- font-weight: 400;
10
-
11
- /* Professional color scheme */
12
- color: #0f172a; /* slate-900 */
13
- background-color: #f8fafc; /* slate-50 */
14
-
15
- font-synthesis: none;
16
- text-rendering: optimizeLegibility;
17
- -webkit-font-smoothing: antialiased;
18
- -moz-osx-font-smoothing: grayscale;
19
- -webkit-text-size-adjust: 100%;
20
- }
21
-
22
- html {
23
- font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif;
24
- }
25
-
26
- body {
27
- margin: 0;
28
- min-height: 100vh;
29
- background-color: #f8fafc; /* slate-50 */
30
- }
31
-
32
- /* Professional focus styles */
33
- *:focus-visible {
34
- outline: 2px solid #0f172a;
35
- outline-offset: 2px;
36
- }
37
-
38
- /* Custom utility classes for professional design */
39
- .text-compact {
40
- font-size: 0.875rem; /* 14px */
41
- line-height: 1.25rem;
42
- }
43
-
44
- .shadow-professional {
45
- box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
46
- }
47
-
48
- .glass-effect {
49
- background-color: rgb(255 255 255 / 0.95);
50
- backdrop-filter: blur(8px);
51
- }
52
-
53
- /* DaisyUI component customizations */
54
- .btn {
55
- font-size: 0.875rem;
56
- font-weight: 500;
57
- min-height: 2.25rem; /* 36px - more compact */
58
- }
59
-
60
- .btn-sm {
61
- min-height: 2rem; /* 32px */
62
- font-size: 0.75rem;
63
- }
64
-
65
- /* Professional card styling */
66
- .card {
67
- box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
68
- }
69
-
70
- /* Professional table styling */
71
- .table {
72
- font-size: 0.875rem;
73
- line-height: 1.25rem;
74
- }
75
-
76
- .table th {
77
- font-size: 0.75rem;
78
- font-weight: 500;
79
- border-bottom-color: #e2e8f0;
80
- }
81
-
82
- .table td {
83
- border-bottom-color: #f1f5f9;
84
- }
85
-
86
- /* Professional form styling */
87
- .input, .textarea, .select {
88
- font-size: 0.875rem;
89
- line-height: 1.25rem;
90
- min-height: 2.25rem;
91
- }
92
-
93
- .input:focus, .textarea:focus, .select:focus {
94
- border-color: #0f172a;
95
- box-shadow: 0 0 0 2px #0f172a33;
96
- }
97
-
98
- /* Professional alert styling */
99
- .alert {
100
- font-size: 0.875rem;
101
- line-height: 1.25rem;
102
- }
103
-
104
- /* Professional tabs */
105
- .tabs-bordered .tab {
106
- font-size: 0.875rem;
107
- line-height: 1.25rem;
108
- border-bottom-color: #e2e8f0;
109
- }
110
-
111
- .tabs-bordered .tab-active {
112
- border-bottom-color: #0f172a;
113
- color: #0f172a;
114
- }
115
-
116
- /* Code syntax highlighting (for logs and JSON) */
117
- .hljs {
118
- background: #f8fafc !important;
119
- color: #334155 !important;
120
- }
121
-
122
- /* Loading animations */
123
- @keyframes pulse-professional {
124
- 0%, 100% {
125
- opacity: 0.4;
126
- }
127
- 50% {
128
- opacity: 0.8;
129
- }
130
- }
131
-
132
- .animate-pulse-professional {
133
- animation: pulse-professional 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
134
- }
135
-
136
- /* Professional scrollbars */
137
- ::-webkit-scrollbar {
138
- width: 6px;
139
- height: 6px;
140
- }
141
-
142
- ::-webkit-scrollbar-track {
143
- background: #f1f5f9;
144
- }
145
-
146
- ::-webkit-scrollbar-thumb {
147
- background: #cbd5e1;
148
- border-radius: 3px;
149
- }
150
-
151
- ::-webkit-scrollbar-thumb:hover {
152
- background: #94a3b8;
153
- }
154
-
155
- /* Message Viewer Styles */
156
- .message-viewer {
157
- font-family: ui-monospace, SFMono-Regular, "SF Mono", Consolas, "Liberation Mono", Menlo, monospace;
158
- font-size: 13px;
159
- line-height: 1.45;
160
- }
161
-
162
- .message-content::-webkit-scrollbar {
163
- width: 8px;
164
- }
165
-
166
- .message-content::-webkit-scrollbar-track {
167
- background: #f6f8fa;
168
- }
169
-
170
- .message-content::-webkit-scrollbar-thumb {
171
- background: #d1d9e0;
172
- border-radius: 4px;
173
- }
174
-
175
- .message-content::-webkit-scrollbar-thumb:hover {
176
- background: #a8b3c1;
177
- }
178
-
179
- /* ANSI color styling */
180
- .ansi-red { color: #d1242f; }
181
- .ansi-green { color: #28a745; }
182
- .ansi-yellow { color: #ffc107; }
183
- .ansi-blue { color: #0366d6; }
184
- .ansi-magenta { color: #6f42c1; }
185
- .ansi-cyan { color: #17a2b8; }
186
- .ansi-white { color: #24292f; }
187
- .ansi-gray { color: #6a737d; }
188
- .ansi-bright-red { color: #cb2431; }
189
- .ansi-bright-green { color: #22863a; }
190
- .ansi-bright-yellow { color: #e36209; }
191
- .ansi-bright-blue { color: #0366d6; }
192
- .ansi-bright-magenta { color: #6f42c1; }
193
- .ansi-bright-cyan { color: #17a2b8; }
194
- .ansi-bright-white { color: #24292f; }
195
- .ansi-bold { font-weight: 600; }
196
-
197
- /* Pattern highlighting */
198
- .pattern-error { color: #d1242f; font-weight: 600; }
199
- .pattern-warning { color: #e36209; font-weight: 600; }
200
- .pattern-success { color: #28a745; font-weight: 600; }
201
- .pattern-info { color: #0366d6; font-weight: 600; }
202
-
203
- /* Link and file path styling */
204
- .message-url { color: #0366d6; text-decoration: underline; }
205
- .message-url:hover { color: #0366d6; text-decoration: none; }
206
- .message-filepath { color: #6f42c1; font-weight: 500; }
207
-
208
- /* JSON syntax highlighting */
209
- .token.string { color: #032f62; }
210
- .token.number { color: #005cc5; }
211
- .token.boolean { color: #d73a49; }
212
- .token.null { color: #d73a49; }
213
- .token.property { color: #22863a; }
214
- .token.punctuation { color: #24292f; }
215
-
216
- /* GitHub Actions log styling */
217
- .github-log-viewer {
218
- background: #0d1117;
219
- border: 1px solid #30363d;
220
- border-radius: 6px;
221
- font-family: ui-monospace, SFMono-Regular, "SF Mono", Consolas, "Liberation Mono", Menlo, monospace;
222
- font-size: 12px;
223
- overflow: hidden;
224
- }
225
-
226
- .log-header {
227
- background: #161b22;
228
- border-bottom: 1px solid #30363d;
229
- padding: 8px 16px;
230
- display: flex;
231
- align-items: center;
232
- justify-content: space-between;
233
- }
234
-
235
- .log-title {
236
- display: flex;
237
- align-items: center;
238
- gap: 8px;
239
- color: #f0f6fc;
240
- font-weight: 600;
241
- font-size: 14px;
242
- }
243
-
244
- .octicon {
245
- fill: #f0f6fc;
246
- }
247
-
248
- .log-controls {
249
- display: flex;
250
- gap: 8px;
251
- }
252
-
253
- .control-btn {
254
- background: transparent;
255
- border: 1px solid #30363d;
256
- color: #f0f6fc;
257
- padding: 4px 8px;
258
- border-radius: 3px;
259
- font-size: 12px;
260
- cursor: pointer;
261
- transition: all 0.15s ease;
262
- }
263
-
264
- .control-btn:hover {
265
- background: #21262d;
266
- border-color: #8b949e;
267
- }
268
-
269
- .control-btn.active {
270
- background: #238636;
271
- border-color: #238636;
272
- color: #ffffff;
273
- }
274
-
275
- .log-container {
276
- min-height: 30vh;
277
- height: 500px;
278
- max-height: 70vh;
279
- overflow: auto;
280
- background: #0d1117;
281
- scrollbar-width: thin;
282
- scrollbar-color: #6e7681 #21262d;
283
- }
284
-
285
- .log-container::-webkit-scrollbar {
286
- width: 12px;
287
- }
288
-
289
- .log-container::-webkit-scrollbar-track {
290
- background: #21262d;
291
- }
292
-
293
- .log-container::-webkit-scrollbar-thumb {
294
- background: #6e7681;
295
- border-radius: 6px;
296
- border: 2px solid #21262d;
297
- }
298
-
299
- .log-container::-webkit-scrollbar-thumb:hover {
300
- background: #8b949e;
301
- }
302
-
303
- .log-empty {
304
- display: flex;
305
- align-items: center;
306
- justify-content: center;
307
- height: 100%;
308
- color: #8b949e;
309
- }
310
-
311
- .empty-state {
312
- text-align: center;
313
- }
314
-
315
- .empty-icon {
316
- fill: #6e7681;
317
- margin-bottom: 8px;
318
- }
319
-
320
- .empty-subtitle {
321
- font-size: 11px;
322
- color: #6e7681;
323
- margin-top: 4px;
324
- }
325
-
326
- .log-content {
327
- padding: 0;
328
- }
329
-
330
- .log-line {
331
- display: flex;
332
- align-items: flex-start;
333
- min-height: 20px;
334
- padding: 2px 0;
335
- color: #e6edf3;
336
- cursor: pointer;
337
- border-left: 3px solid transparent;
338
- white-space: pre-wrap;
339
- word-break: break-word;
340
- }
341
-
342
- .log-line:hover {
343
- background: rgba(56, 139, 253, 0.1);
344
- }
345
-
346
- .log-line.highlighted {
347
- background: rgba(56, 139, 253, 0.15);
348
- border-left-color: #388bfd;
349
- }
350
-
351
- .line-number {
352
- color: #6e7681;
353
- padding: 0 8px;
354
- text-align: right;
355
- min-width: 40px;
356
- user-select: none;
357
- flex-shrink: 0;
358
- font-size: 11px;
359
- line-height: 20px;
360
- }
361
-
362
- .log-timestamp {
363
- color: #8b949e;
364
- padding-right: 8px;
365
- font-size: 11px;
366
- flex-shrink: 0;
367
- line-height: 20px;
368
- }
369
-
370
- .log-level-badge {
371
- font-size: 11px;
372
- font-weight: 500;
373
- margin-right: 8px;
374
- flex-shrink: 0;
375
- line-height: 20px;
376
- font-family: inherit;
377
- }
378
-
379
- .log-level-error .log-level-badge {
380
- color: #ff7b72;
381
- }
382
-
383
- .log-level-warn .log-level-badge {
384
- color: #f2cc60;
385
- }
386
-
387
- .log-level-info .log-level-badge {
388
- color: #8b949e;
389
- }
390
-
391
- .log-level-debug .log-level-badge {
392
- color: #6e7681;
393
- }
394
-
395
- .log-message {
396
- flex: 1;
397
- line-height: 20px;
398
- padding-right: 16px;
399
- }
400
-
401
- .log-footer {
402
- background: #161b22;
403
- border-top: 1px solid #30363d;
404
- padding: 8px 16px;
405
- display: flex;
406
- align-items: center;
407
- justify-content: space-between;
408
- font-size: 11px;
409
- color: #8b949e;
410
- }
411
-
412
- .streaming-status {
413
- display: flex;
414
- align-items: center;
415
- gap: 6px;
416
- }
417
-
418
- .streaming-dot {
419
- width: 6px;
420
- height: 6px;
421
- background: #238636;
422
- border-radius: 50%;
423
- animation: pulse 2s infinite;
424
- }
425
-
426
- @keyframes pulse {
427
- 0%, 100% {
428
- opacity: 1;
429
- }
430
- 50% {
431
- opacity: 0.5;
432
- }
433
- }
434
-
435
- /* GitHub Actions ANSI color styling */
436
- .github-log-viewer .ansi-red { color: #ff7b72; }
437
- .github-log-viewer .ansi-green { color: #7ee787; }
438
- .github-log-viewer .ansi-yellow { color: #f2cc60; }
439
- .github-log-viewer .ansi-blue { color: #79c0ff; }
440
- .github-log-viewer .ansi-magenta { color: #d2a8ff; }
441
- .github-log-viewer .ansi-cyan { color: #a5f3fc; }
442
- .github-log-viewer .ansi-white { color: #f0f6fc; }
443
- .github-log-viewer .ansi-gray { color: #8b949e; }
444
- .github-log-viewer .ansi-bright-red { color: #ffa198; }
445
- .github-log-viewer .ansi-bright-green { color: #56d364; }
446
- .github-log-viewer .ansi-bright-yellow { color: #e3b341; }
447
- .github-log-viewer .ansi-bright-blue { color: #58a6ff; }
448
- .github-log-viewer .ansi-bright-magenta { color: #bc8cff; }
449
- .github-log-viewer .ansi-bright-cyan { color: #39d0d6; }
450
- .github-log-viewer .ansi-bright-white { color: #ffffff; }
451
- .github-log-viewer .ansi-bold { font-weight: bold; }
452
-
453
- /* GitHub Actions pattern highlighting */
454
- .github-log-viewer .pattern-error { color: #ff7b72; font-weight: 600; }
455
- .github-log-viewer .pattern-warning { color: #f2cc60; font-weight: 600; }
456
- .github-log-viewer .pattern-success { color: #7ee787; font-weight: 600; }
457
- .github-log-viewer .pattern-info { color: #79c0ff; font-weight: 600; }
458
-
459
- /* GitHub Actions link and file path styling */
460
- .github-log-viewer .log-url { color: #58a6ff; text-decoration: underline; }
461
- .github-log-viewer .log-url:hover { color: #79c0ff; }
462
- .github-log-viewer .log-filepath { color: #a5f3fc; font-weight: 500; }
463
-
464
- /* GitHub Actions JSON syntax highlighting */
465
- .github-log-viewer .token.string { color: #7ee787; }
466
- .github-log-viewer .token.number { color: #79c0ff; }
467
- .github-log-viewer .token.boolean { color: #d2a8ff; }
468
- .github-log-viewer .token.null { color: #ff7b72; }
469
- .github-log-viewer .token.property { color: #79c0ff; }
470
- .github-log-viewer .token.punctuation { color: #e6edf3; }
@@ -1,15 +0,0 @@
1
- /* @refresh reload */
2
- import { render } from 'solid-js/web';
3
-
4
- import './index.css';
5
- import App from './App';
6
-
7
- const root = document.getElementById('root');
8
-
9
- if (import.meta.env.DEV && !(root instanceof HTMLElement)) {
10
- throw new Error(
11
- 'Root element not found. Did you forget to add it to your index.html? Or maybe the id attribute got misspelled?',
12
- );
13
- }
14
-
15
- render(() => <App />, root);
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 166 155.3"><path d="M163 35S110-4 69 5l-3 1c-6 2-11 5-14 9l-2 3-15 26 26 5c11 7 25 10 38 7l46 9 18-30z" fill="#76b3e1"/><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="27.5" y1="3" x2="152" y2="63.5"><stop offset=".1" stop-color="#76b3e1"/><stop offset=".3" stop-color="#dcf2fd"/><stop offset="1" stop-color="#76b3e1"/></linearGradient><path d="M163 35S110-4 69 5l-3 1c-6 2-11 5-14 9l-2 3-15 26 26 5c11 7 25 10 38 7l46 9 18-30z" opacity=".3" fill="url(#a)"/><path d="M52 35l-4 1c-17 5-22 21-13 35 10 13 31 20 48 15l62-21S92 26 52 35z" fill="#518ac8"/><linearGradient id="b" gradientUnits="userSpaceOnUse" x1="95.8" y1="32.6" x2="74" y2="105.2"><stop offset="0" stop-color="#76b3e1"/><stop offset=".5" stop-color="#4377bb"/><stop offset="1" stop-color="#1f3b77"/></linearGradient><path d="M52 35l-4 1c-17 5-22 21-13 35 10 13 31 20 48 15l62-21S92 26 52 35z" opacity=".3" fill="url(#b)"/><linearGradient id="c" gradientUnits="userSpaceOnUse" x1="18.4" y1="64.2" x2="144.3" y2="149.8"><stop offset="0" stop-color="#315aa9"/><stop offset=".5" stop-color="#518ac8"/><stop offset="1" stop-color="#315aa9"/></linearGradient><path d="M134 80a45 45 0 00-48-15L24 85 4 120l112 19 20-36c4-7 3-15-2-23z" fill="url(#c)"/><linearGradient id="d" gradientUnits="userSpaceOnUse" x1="75.2" y1="74.5" x2="24.4" y2="260.8"><stop offset="0" stop-color="#4377bb"/><stop offset=".5" stop-color="#1a336b"/><stop offset="1" stop-color="#1a336b"/></linearGradient><path d="M114 115a45 45 0 00-48-15L4 120s53 40 94 30l3-1c17-5 23-21 13-34z" fill="url(#d)"/></svg>
@@ -1,34 +0,0 @@
1
- import { Router, Route } from "@solidjs/router";
2
- import { lazy } from "solid-js";
3
- import Layout from "./components/Layout";
4
-
5
- // Lazy load views for better performance
6
- const HomeView = lazy(() => import("./views/HomeView"));
7
- const JobDetailView = lazy(() => import("./views/JobDetailView"));
8
- const PluginView = lazy(() => import("./views/PluginView"));
9
- const ApplicationsView = lazy(() => import("./views/ApplicationsView"));
10
- const ApplicationDetailView = lazy(() => import("./views/ApplicationDetailView"));
11
-
12
- export function AppRouter(props) {
13
- return (
14
- <Router>
15
- <Route path="/" component={() => <Layout><HomeView /></Layout>} />
16
- <Route path="/job/:id" component={() => <Layout><JobDetailView /></Layout>} />
17
- <Route path="/plugin" component={() => <Layout><PluginView /></Layout>} />
18
- <Route path="/serve_applications" component={() => <Layout><ApplicationsView /></Layout>} />
19
- <Route path="/serve_application/:id" component={() => <Layout><ApplicationDetailView /></Layout>} />
20
-
21
- {/* Legacy redirects */}
22
- <Route path="/applications" component={() => {
23
- window.location.replace("/serve_applications");
24
- return null;
25
- }} />
26
- <Route path="/config" component={() => {
27
- window.location.replace("/plugin");
28
- return null;
29
- }} />
30
-
31
- {props.children}
32
- </Router>
33
- );
34
- }