@pixelbyte-software/pixcode 1.35.5 → 1.36.1
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.
- package/README.de.md +116 -198
- package/README.ja.md +116 -192
- package/README.ko.md +116 -192
- package/README.md +211 -218
- package/README.ru.md +116 -198
- package/README.tr.md +215 -170
- package/README.zh-CN.md +116 -192
- package/dist/api-automation.html +110 -0
- package/dist/api-docs.html +18 -18
- package/dist/assets/{index-BnoShb9v.js → index-D3aq3WpJ.js} +181 -180
- package/dist/assets/index-Dx7QyTSN.css +32 -0
- package/dist/docs.html +294 -0
- package/dist/features.html +112 -0
- package/dist/humans.txt +15 -0
- package/dist/index.html +2 -2
- package/dist/landing.html +217 -0
- package/dist/llms-full.txt +117 -0
- package/dist/llms.txt +53 -0
- package/dist/openapi.yaml +12 -9
- package/dist/orchestration.html +125 -0
- package/dist/robots.txt +4 -0
- package/dist/site.css +536 -0
- package/dist/sitemap.xml +51 -0
- package/dist/sw.js +8 -0
- package/dist-server/server/cli.js +51 -2
- package/dist-server/server/cli.js.map +1 -1
- package/dist-server/server/daemon/manager.js +0 -1
- package/dist-server/server/daemon/manager.js.map +1 -1
- package/dist-server/server/database/db.js +3 -2
- package/dist-server/server/database/db.js.map +1 -1
- package/dist-server/server/middleware/auth.js +9 -8
- package/dist-server/server/middleware/auth.js.map +1 -1
- package/dist-server/server/modules/orchestration/workflows/workflow-runner.js +156 -32
- package/dist-server/server/modules/orchestration/workflows/workflow-runner.js.map +1 -1
- package/dist-server/server/modules/orchestration/workflows/workflow.routes.js +27 -2
- package/dist-server/server/modules/orchestration/workflows/workflow.routes.js.map +1 -1
- package/dist-server/server/modules/providers/provider.routes.js +8 -1
- package/dist-server/server/modules/providers/provider.routes.js.map +1 -1
- package/dist-server/server/routes/agent.js +72 -11
- package/dist-server/server/routes/agent.js.map +1 -1
- package/dist-server/server/services/notification-orchestrator.js +11 -2
- package/dist-server/server/services/notification-orchestrator.js.map +1 -1
- package/dist-server/server/services/provider-cli-versions.js +142 -0
- package/dist-server/server/services/provider-cli-versions.js.map +1 -0
- package/dist-server/server/services/startup-update.js +208 -0
- package/dist-server/server/services/startup-update.js.map +1 -0
- package/package.json +35 -10
- package/server/cli.js +58 -3
- package/server/daemon/manager.js +0 -1
- package/server/database/db.js +3 -2
- package/server/middleware/auth.js +9 -8
- package/server/modules/orchestration/workflows/workflow-runner.ts +172 -32
- package/server/modules/orchestration/workflows/workflow.routes.ts +29 -2
- package/server/modules/providers/provider.routes.ts +8 -1
- package/server/routes/agent.js +75 -10
- package/server/services/notification-orchestrator.js +11 -2
- package/server/services/provider-cli-versions.js +149 -0
- package/server/services/startup-update.js +234 -0
- package/dist/assets/index-Btxg-Dbl.css +0 -32
package/dist/site.css
ADDED
|
@@ -0,0 +1,536 @@
|
|
|
1
|
+
:root {
|
|
2
|
+
color-scheme: dark;
|
|
3
|
+
--bg: #080a0c;
|
|
4
|
+
--bg-soft: #101316;
|
|
5
|
+
--bg-warm: #15120d;
|
|
6
|
+
--panel: rgba(18, 22, 25, 0.92);
|
|
7
|
+
--panel-strong: #151a1d;
|
|
8
|
+
--ink: #f3f7f4;
|
|
9
|
+
--muted: #b9c3bd;
|
|
10
|
+
--soft: #87938d;
|
|
11
|
+
--line: rgba(190, 203, 194, 0.2);
|
|
12
|
+
--line-strong: rgba(190, 203, 194, 0.34);
|
|
13
|
+
--green: #20d17d;
|
|
14
|
+
--green-soft: rgba(32, 209, 125, 0.16);
|
|
15
|
+
--cyan: #40c9d8;
|
|
16
|
+
--amber: #f0b84f;
|
|
17
|
+
--rose: #ef6f75;
|
|
18
|
+
--code: #b8f7cf;
|
|
19
|
+
--shadow: 0 22px 70px rgba(0, 0, 0, 0.42);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
* {
|
|
23
|
+
box-sizing: border-box;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
html {
|
|
27
|
+
scroll-behavior: smooth;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
body {
|
|
31
|
+
margin: 0;
|
|
32
|
+
background:
|
|
33
|
+
linear-gradient(180deg, rgba(32, 209, 125, 0.08), rgba(8, 10, 12, 0) 360px),
|
|
34
|
+
var(--bg);
|
|
35
|
+
color: var(--ink);
|
|
36
|
+
font-family:
|
|
37
|
+
Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI",
|
|
38
|
+
sans-serif;
|
|
39
|
+
line-height: 1.6;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
a {
|
|
43
|
+
color: inherit;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
code,
|
|
47
|
+
pre {
|
|
48
|
+
font-family:
|
|
49
|
+
"SFMono-Regular", "Cascadia Code", "Liberation Mono", Menlo, Consolas, monospace;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
img {
|
|
53
|
+
max-width: 100%;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.site-nav {
|
|
57
|
+
position: sticky;
|
|
58
|
+
top: 0;
|
|
59
|
+
z-index: 20;
|
|
60
|
+
display: flex;
|
|
61
|
+
align-items: center;
|
|
62
|
+
justify-content: space-between;
|
|
63
|
+
gap: 18px;
|
|
64
|
+
min-height: 64px;
|
|
65
|
+
padding: 12px clamp(18px, 5vw, 72px);
|
|
66
|
+
border-bottom: 1px solid var(--line);
|
|
67
|
+
background: rgba(8, 10, 12, 0.84);
|
|
68
|
+
backdrop-filter: blur(18px);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.brand {
|
|
72
|
+
display: inline-flex;
|
|
73
|
+
align-items: center;
|
|
74
|
+
gap: 10px;
|
|
75
|
+
color: var(--ink);
|
|
76
|
+
font-weight: 900;
|
|
77
|
+
text-decoration: none;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.brand img {
|
|
81
|
+
width: 32px;
|
|
82
|
+
height: 32px;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.nav-links {
|
|
86
|
+
display: flex;
|
|
87
|
+
align-items: center;
|
|
88
|
+
gap: 18px;
|
|
89
|
+
color: #d9e3dd;
|
|
90
|
+
font-size: 14px;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.nav-links a {
|
|
94
|
+
text-decoration: none;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.nav-links a:hover,
|
|
98
|
+
.brand:hover {
|
|
99
|
+
color: var(--green);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.hero {
|
|
103
|
+
display: grid;
|
|
104
|
+
grid-template-columns: minmax(0, 1.05fr) minmax(320px, 0.95fr);
|
|
105
|
+
gap: clamp(28px, 5vw, 72px);
|
|
106
|
+
align-items: center;
|
|
107
|
+
min-height: calc(100vh - 64px);
|
|
108
|
+
padding: clamp(52px, 8vw, 96px) clamp(18px, 5vw, 72px);
|
|
109
|
+
border-bottom: 1px solid var(--line);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.hero.docs-hero {
|
|
113
|
+
min-height: auto;
|
|
114
|
+
grid-template-columns: minmax(0, 1fr) minmax(300px, 0.72fr);
|
|
115
|
+
padding-top: 62px;
|
|
116
|
+
padding-bottom: 46px;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
.eyebrow {
|
|
120
|
+
color: var(--green);
|
|
121
|
+
font-size: 13px;
|
|
122
|
+
font-weight: 900;
|
|
123
|
+
letter-spacing: 0.08em;
|
|
124
|
+
text-transform: uppercase;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
h1,
|
|
128
|
+
h2,
|
|
129
|
+
h3 {
|
|
130
|
+
letter-spacing: 0;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
h1 {
|
|
134
|
+
margin: 12px 0 18px;
|
|
135
|
+
max-width: 880px;
|
|
136
|
+
font-size: clamp(50px, 8vw, 104px);
|
|
137
|
+
line-height: 0.94;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
.docs-hero h1 {
|
|
141
|
+
font-size: clamp(40px, 6vw, 76px);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
h2 {
|
|
145
|
+
margin: 0 0 14px;
|
|
146
|
+
font-size: clamp(30px, 4.4vw, 56px);
|
|
147
|
+
line-height: 1.03;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
h3 {
|
|
151
|
+
margin: 0 0 10px;
|
|
152
|
+
font-size: 20px;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
.lead {
|
|
156
|
+
max-width: 820px;
|
|
157
|
+
margin: 0;
|
|
158
|
+
color: #dce7df;
|
|
159
|
+
font-size: clamp(18px, 2.1vw, 24px);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
.sublead {
|
|
163
|
+
max-width: 860px;
|
|
164
|
+
margin: 0 0 30px;
|
|
165
|
+
color: var(--muted);
|
|
166
|
+
font-size: 18px;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
.actions {
|
|
170
|
+
display: flex;
|
|
171
|
+
flex-wrap: wrap;
|
|
172
|
+
gap: 12px;
|
|
173
|
+
margin-top: 28px;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
.button {
|
|
177
|
+
display: inline-flex;
|
|
178
|
+
min-height: 44px;
|
|
179
|
+
align-items: center;
|
|
180
|
+
justify-content: center;
|
|
181
|
+
padding: 0 18px;
|
|
182
|
+
border: 1px solid var(--line-strong);
|
|
183
|
+
border-radius: 8px;
|
|
184
|
+
background: #151a1d;
|
|
185
|
+
color: var(--ink);
|
|
186
|
+
font-weight: 850;
|
|
187
|
+
text-decoration: none;
|
|
188
|
+
transition:
|
|
189
|
+
transform 160ms ease,
|
|
190
|
+
border-color 160ms ease,
|
|
191
|
+
background 160ms ease;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
.button:hover {
|
|
195
|
+
transform: translateY(-1px);
|
|
196
|
+
border-color: var(--green);
|
|
197
|
+
background: #18211d;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
.button.primary {
|
|
201
|
+
border-color: rgba(32, 209, 125, 0.8);
|
|
202
|
+
background: #0f7c50;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
.button.primary:hover {
|
|
206
|
+
background: #11935d;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
.hero-panel,
|
|
210
|
+
.panel,
|
|
211
|
+
.card,
|
|
212
|
+
.code-panel,
|
|
213
|
+
.image-slot {
|
|
214
|
+
border: 1px solid var(--line);
|
|
215
|
+
border-radius: 8px;
|
|
216
|
+
background: var(--panel);
|
|
217
|
+
box-shadow: var(--shadow);
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
.hero-panel {
|
|
221
|
+
overflow: hidden;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
.hero-panel img {
|
|
225
|
+
display: block;
|
|
226
|
+
width: 100%;
|
|
227
|
+
border-bottom: 1px solid var(--line);
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
.terminal-strip {
|
|
231
|
+
display: grid;
|
|
232
|
+
gap: 8px;
|
|
233
|
+
padding: 16px;
|
|
234
|
+
color: var(--code);
|
|
235
|
+
font-size: 13px;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
.prompt-line {
|
|
239
|
+
display: flex;
|
|
240
|
+
gap: 10px;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
.prompt-line span:first-child {
|
|
244
|
+
color: var(--green);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
.section {
|
|
248
|
+
padding: 78px clamp(18px, 5vw, 72px);
|
|
249
|
+
border-bottom: 1px solid var(--line);
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
.section.alt {
|
|
253
|
+
background: var(--bg-soft);
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
.section.warm {
|
|
257
|
+
background: var(--bg-warm);
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
.grid {
|
|
261
|
+
display: grid;
|
|
262
|
+
gap: 16px;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
.grid.three {
|
|
266
|
+
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
.grid.two {
|
|
270
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
.grid.sidebar {
|
|
274
|
+
grid-template-columns: minmax(240px, 0.34fr) minmax(0, 1fr);
|
|
275
|
+
align-items: start;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
.card,
|
|
279
|
+
.panel,
|
|
280
|
+
.code-panel {
|
|
281
|
+
padding: 22px;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
.card strong {
|
|
285
|
+
display: block;
|
|
286
|
+
margin-bottom: 8px;
|
|
287
|
+
color: #ffffff;
|
|
288
|
+
font-size: 18px;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
.card p,
|
|
292
|
+
.panel p {
|
|
293
|
+
margin: 0;
|
|
294
|
+
color: var(--muted);
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
.feature-list {
|
|
298
|
+
display: grid;
|
|
299
|
+
gap: 10px;
|
|
300
|
+
margin: 18px 0 0;
|
|
301
|
+
padding: 0;
|
|
302
|
+
list-style: none;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
.feature-list li {
|
|
306
|
+
position: relative;
|
|
307
|
+
padding-left: 18px;
|
|
308
|
+
color: #d7e1db;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
.feature-list li::before {
|
|
312
|
+
position: absolute;
|
|
313
|
+
left: 0;
|
|
314
|
+
color: var(--green);
|
|
315
|
+
content: ">";
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
.toc {
|
|
319
|
+
position: sticky;
|
|
320
|
+
top: 88px;
|
|
321
|
+
display: grid;
|
|
322
|
+
gap: 8px;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
.toc a {
|
|
326
|
+
display: block;
|
|
327
|
+
padding: 9px 10px;
|
|
328
|
+
border: 1px solid var(--line);
|
|
329
|
+
border-radius: 8px;
|
|
330
|
+
color: #dce7df;
|
|
331
|
+
text-decoration: none;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
.toc a:hover {
|
|
335
|
+
border-color: var(--green);
|
|
336
|
+
color: var(--green);
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
.doc-content {
|
|
340
|
+
display: grid;
|
|
341
|
+
gap: 46px;
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
.doc-section {
|
|
345
|
+
scroll-margin-top: 94px;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
.doc-section p {
|
|
349
|
+
max-width: 940px;
|
|
350
|
+
color: var(--muted);
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
.doc-section h2 {
|
|
354
|
+
max-width: 960px;
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
.doc-section h3 {
|
|
358
|
+
margin-top: 24px;
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
.image-slot {
|
|
362
|
+
display: grid;
|
|
363
|
+
min-height: 280px;
|
|
364
|
+
place-items: center;
|
|
365
|
+
padding: 24px;
|
|
366
|
+
color: #c3cec7;
|
|
367
|
+
text-align: center;
|
|
368
|
+
background:
|
|
369
|
+
linear-gradient(135deg, rgba(32, 209, 125, 0.12), rgba(64, 201, 216, 0.08)),
|
|
370
|
+
repeating-linear-gradient(
|
|
371
|
+
45deg,
|
|
372
|
+
rgba(255, 255, 255, 0.04),
|
|
373
|
+
rgba(255, 255, 255, 0.04) 10px,
|
|
374
|
+
rgba(255, 255, 255, 0.01) 10px,
|
|
375
|
+
rgba(255, 255, 255, 0.01) 20px
|
|
376
|
+
),
|
|
377
|
+
#101316;
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
.image-slot.tall {
|
|
381
|
+
min-height: 520px;
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
.image-slot.wide {
|
|
385
|
+
min-height: 360px;
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
.image-slot span {
|
|
389
|
+
display: block;
|
|
390
|
+
max-width: 520px;
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
.image-slot strong {
|
|
394
|
+
display: block;
|
|
395
|
+
margin-bottom: 8px;
|
|
396
|
+
color: var(--ink);
|
|
397
|
+
font-size: 18px;
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
.screen-grid {
|
|
401
|
+
display: grid;
|
|
402
|
+
grid-template-columns: 1.35fr 0.7fr;
|
|
403
|
+
gap: 16px;
|
|
404
|
+
align-items: start;
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
.screen-grid img {
|
|
408
|
+
width: 100%;
|
|
409
|
+
border: 1px solid var(--line);
|
|
410
|
+
border-radius: 8px;
|
|
411
|
+
background: #050607;
|
|
412
|
+
box-shadow: var(--shadow);
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
pre {
|
|
416
|
+
overflow: auto;
|
|
417
|
+
margin: 0;
|
|
418
|
+
color: var(--code);
|
|
419
|
+
font-size: 14px;
|
|
420
|
+
line-height: 1.55;
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
.code-panel {
|
|
424
|
+
background: #070908;
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
.chips {
|
|
428
|
+
display: flex;
|
|
429
|
+
flex-wrap: wrap;
|
|
430
|
+
gap: 10px;
|
|
431
|
+
margin-top: 22px;
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
.chip {
|
|
435
|
+
border: 1px solid var(--line);
|
|
436
|
+
border-radius: 999px;
|
|
437
|
+
padding: 8px 12px;
|
|
438
|
+
color: #e0e8e2;
|
|
439
|
+
background: rgba(18, 22, 25, 0.75);
|
|
440
|
+
font-size: 14px;
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
.kpi-row {
|
|
444
|
+
display: grid;
|
|
445
|
+
grid-template-columns: repeat(4, minmax(0, 1fr));
|
|
446
|
+
gap: 14px;
|
|
447
|
+
margin-top: 30px;
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
.kpi {
|
|
451
|
+
border: 1px solid var(--line);
|
|
452
|
+
border-radius: 8px;
|
|
453
|
+
padding: 18px;
|
|
454
|
+
background: rgba(18, 22, 25, 0.82);
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
.kpi strong {
|
|
458
|
+
display: block;
|
|
459
|
+
color: var(--green);
|
|
460
|
+
font-size: 24px;
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
.kpi span {
|
|
464
|
+
color: var(--muted);
|
|
465
|
+
font-size: 13px;
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
.accent-green {
|
|
469
|
+
color: var(--green);
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
.accent-cyan {
|
|
473
|
+
color: var(--cyan);
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
.accent-amber {
|
|
477
|
+
color: var(--amber);
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
.accent-rose {
|
|
481
|
+
color: var(--rose);
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
.disclaimer {
|
|
485
|
+
color: var(--soft);
|
|
486
|
+
font-size: 13px;
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
.footer {
|
|
490
|
+
padding: 36px clamp(18px, 5vw, 72px);
|
|
491
|
+
color: var(--soft);
|
|
492
|
+
background: #050607;
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
.footer a {
|
|
496
|
+
color: #dce7df;
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
@media (max-width: 980px) {
|
|
500
|
+
.hero,
|
|
501
|
+
.hero.docs-hero,
|
|
502
|
+
.grid.sidebar,
|
|
503
|
+
.screen-grid {
|
|
504
|
+
grid-template-columns: 1fr;
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
.grid.three,
|
|
508
|
+
.grid.two,
|
|
509
|
+
.kpi-row {
|
|
510
|
+
grid-template-columns: 1fr;
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
.toc {
|
|
514
|
+
position: static;
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
@media (max-width: 720px) {
|
|
519
|
+
.site-nav {
|
|
520
|
+
align-items: flex-start;
|
|
521
|
+
flex-direction: column;
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
.nav-links {
|
|
525
|
+
flex-wrap: wrap;
|
|
526
|
+
gap: 12px;
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
.hero {
|
|
530
|
+
min-height: auto;
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
h1 {
|
|
534
|
+
font-size: clamp(42px, 15vw, 70px);
|
|
535
|
+
}
|
|
536
|
+
}
|
package/dist/sitemap.xml
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
|
3
|
+
<url>
|
|
4
|
+
<loc>https://alicomert.github.io/pixcode/landing.html</loc>
|
|
5
|
+
<lastmod>2026-05-08</lastmod>
|
|
6
|
+
<changefreq>weekly</changefreq>
|
|
7
|
+
<priority>1.0</priority>
|
|
8
|
+
</url>
|
|
9
|
+
<url>
|
|
10
|
+
<loc>https://alicomert.github.io/pixcode/docs.html</loc>
|
|
11
|
+
<lastmod>2026-05-08</lastmod>
|
|
12
|
+
<changefreq>weekly</changefreq>
|
|
13
|
+
<priority>0.95</priority>
|
|
14
|
+
</url>
|
|
15
|
+
<url>
|
|
16
|
+
<loc>https://alicomert.github.io/pixcode/features.html</loc>
|
|
17
|
+
<lastmod>2026-05-08</lastmod>
|
|
18
|
+
<changefreq>weekly</changefreq>
|
|
19
|
+
<priority>0.9</priority>
|
|
20
|
+
</url>
|
|
21
|
+
<url>
|
|
22
|
+
<loc>https://alicomert.github.io/pixcode/orchestration.html</loc>
|
|
23
|
+
<lastmod>2026-05-08</lastmod>
|
|
24
|
+
<changefreq>weekly</changefreq>
|
|
25
|
+
<priority>0.9</priority>
|
|
26
|
+
</url>
|
|
27
|
+
<url>
|
|
28
|
+
<loc>https://alicomert.github.io/pixcode/api-automation.html</loc>
|
|
29
|
+
<lastmod>2026-05-08</lastmod>
|
|
30
|
+
<changefreq>weekly</changefreq>
|
|
31
|
+
<priority>0.85</priority>
|
|
32
|
+
</url>
|
|
33
|
+
<url>
|
|
34
|
+
<loc>https://alicomert.github.io/pixcode/llms.txt</loc>
|
|
35
|
+
<lastmod>2026-05-08</lastmod>
|
|
36
|
+
<changefreq>weekly</changefreq>
|
|
37
|
+
<priority>0.7</priority>
|
|
38
|
+
</url>
|
|
39
|
+
<url>
|
|
40
|
+
<loc>https://alicomert.github.io/pixcode/llms-full.txt</loc>
|
|
41
|
+
<lastmod>2026-05-08</lastmod>
|
|
42
|
+
<changefreq>weekly</changefreq>
|
|
43
|
+
<priority>0.7</priority>
|
|
44
|
+
</url>
|
|
45
|
+
<url>
|
|
46
|
+
<loc>https://alicomert.github.io/pixcode/openapi.yaml</loc>
|
|
47
|
+
<lastmod>2026-05-08</lastmod>
|
|
48
|
+
<changefreq>weekly</changefreq>
|
|
49
|
+
<priority>0.75</priority>
|
|
50
|
+
</url>
|
|
51
|
+
</urlset>
|
package/dist/sw.js
CHANGED
|
@@ -18,6 +18,14 @@ self.addEventListener('install', event => {
|
|
|
18
18
|
// Fetch event — network-first for everything except hashed assets
|
|
19
19
|
self.addEventListener('fetch', event => {
|
|
20
20
|
const url = event.request.url;
|
|
21
|
+
const requestUrl = new URL(url);
|
|
22
|
+
|
|
23
|
+
// Let the browser handle third-party APIs directly. This keeps GitHub
|
|
24
|
+
// release checks out of the service worker so a rate-limit response is
|
|
25
|
+
// not reported as "from service worker" in DevTools.
|
|
26
|
+
if (requestUrl.origin !== self.location.origin) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
21
29
|
|
|
22
30
|
// Never intercept API requests or WebSocket upgrades
|
|
23
31
|
if (url.includes('/api/') || url.includes('/ws')) {
|
|
@@ -17,8 +17,10 @@ import fs from 'fs';
|
|
|
17
17
|
import path from 'path';
|
|
18
18
|
import os from 'os';
|
|
19
19
|
import net from 'node:net';
|
|
20
|
+
import { spawn } from 'node:child_process';
|
|
20
21
|
import { findAppRoot, getModuleDir } from './utils/runtime-paths.js';
|
|
21
22
|
import { buildDaemonCliCommand, handleDaemonCommand, hasInstalledDaemonUnit } from './daemon-manager.js';
|
|
23
|
+
import { runStartupAutoUpdate, startupUpdateReexecEnv } from './services/startup-update.js';
|
|
22
24
|
const __dirname = getModuleDir(import.meta.url);
|
|
23
25
|
// The CLI is compiled into dist-server/server, but it still needs to read the top-level
|
|
24
26
|
// package.json and .env file. Resolving the app root once keeps those lookups stable.
|
|
@@ -55,6 +57,7 @@ const c = {
|
|
|
55
57
|
// Load package.json for version info
|
|
56
58
|
const packageJsonPath = path.join(APP_ROOT, 'package.json');
|
|
57
59
|
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
|
|
60
|
+
const installMode = fs.existsSync(path.join(APP_ROOT, '.git')) ? 'git' : 'npm';
|
|
58
61
|
// Match the runtime fallback in load-env.js so "pixcode status" reports the same default
|
|
59
62
|
// database location that the backend will actually use when no DATABASE_PATH is configured.
|
|
60
63
|
const DEFAULT_DATABASE_PATH = path.join(os.homedir(), '.pixcode', 'auth.db');
|
|
@@ -591,11 +594,54 @@ async function sandboxCommand(args) {
|
|
|
591
594
|
// ── Server ──────────────────────────────────────────────────
|
|
592
595
|
// Start the server
|
|
593
596
|
async function startServer() {
|
|
594
|
-
// Check for updates silently on startup
|
|
595
|
-
checkForUpdates(true);
|
|
596
597
|
// Import and run the server
|
|
597
598
|
await import('./index.js');
|
|
598
599
|
}
|
|
600
|
+
async function reexecAfterStartupUpdate() {
|
|
601
|
+
await new Promise((resolve, reject) => {
|
|
602
|
+
const child = spawn(process.execPath, process.argv.slice(1), {
|
|
603
|
+
cwd: process.cwd(),
|
|
604
|
+
env: startupUpdateReexecEnv(),
|
|
605
|
+
stdio: 'inherit',
|
|
606
|
+
windowsHide: false,
|
|
607
|
+
});
|
|
608
|
+
child.on('error', reject);
|
|
609
|
+
child.on('close', (code, signal) => {
|
|
610
|
+
if (signal) {
|
|
611
|
+
process.kill(process.pid, signal);
|
|
612
|
+
return;
|
|
613
|
+
}
|
|
614
|
+
process.exit(code ?? 0);
|
|
615
|
+
});
|
|
616
|
+
});
|
|
617
|
+
}
|
|
618
|
+
async function runStartupUpdateGate() {
|
|
619
|
+
const result = await runStartupAutoUpdate({
|
|
620
|
+
appRoot: APP_ROOT,
|
|
621
|
+
currentVersion: packageJson.version,
|
|
622
|
+
installMode,
|
|
623
|
+
color: c,
|
|
624
|
+
});
|
|
625
|
+
if (result.failed) {
|
|
626
|
+
console.log(`${c.warn('[WARN]')} Startup update check failed: ${result.error}`);
|
|
627
|
+
console.log(`${c.tip('[TIP]')} Continuing with the current version (${packageJson.version}).`);
|
|
628
|
+
return false;
|
|
629
|
+
}
|
|
630
|
+
if (result.skipped && result.reason && process.env.PIXCODE_DEBUG_STARTUP_UPDATE === '1') {
|
|
631
|
+
console.log(`${c.dim('[INFO]')} Startup update skipped: ${result.reason}`);
|
|
632
|
+
}
|
|
633
|
+
if (!result.updated) {
|
|
634
|
+
return false;
|
|
635
|
+
}
|
|
636
|
+
console.log(`${c.ok('[OK]')} Startup update applied${result.version ? ` (${result.version})` : ''}.`);
|
|
637
|
+
if (result.restartMode === 'exit42') {
|
|
638
|
+
console.log(`${c.info('[INFO]')} Restarting through the desktop wrapper before opening the port...`);
|
|
639
|
+
process.exit(42);
|
|
640
|
+
}
|
|
641
|
+
console.log(`${c.info('[INFO]')} Restarting Pixcode on the updated code before opening the port...`);
|
|
642
|
+
await reexecAfterStartupUpdate();
|
|
643
|
+
return true;
|
|
644
|
+
}
|
|
599
645
|
async function isPortOpen(port, timeoutMs = 800) {
|
|
600
646
|
return await new Promise((resolve) => {
|
|
601
647
|
const socket = net.createConnection({ host: '127.0.0.1', port: Number(port) });
|
|
@@ -804,6 +850,9 @@ async function main() {
|
|
|
804
850
|
}
|
|
805
851
|
switch (command) {
|
|
806
852
|
case 'start':
|
|
853
|
+
if (await runStartupUpdateGate()) {
|
|
854
|
+
break;
|
|
855
|
+
}
|
|
807
856
|
if (await maybeAutoDaemonStart(options)) {
|
|
808
857
|
break;
|
|
809
858
|
}
|