@pixelbyte-software/pixcode 1.51.1 → 1.51.3
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/CODE_OF_CONDUCT.md +41 -41
- package/CONTRIBUTING.md +155 -155
- package/LICENSE +718 -718
- package/README.de.md +169 -169
- package/README.ja.md +167 -167
- package/README.ko.md +167 -167
- package/README.md +419 -419
- package/README.ru.md +169 -169
- package/README.tr.md +298 -298
- package/README.zh-CN.md +167 -167
- package/SECURITY.md +46 -46
- package/dist/api-automation.html +110 -110
- package/dist/api-docs.html +548 -548
- package/dist/assets/{index-DARIZgoD.js → index-17CwxHSZ.js} +185 -185
- package/dist/assets/index-B9N-gfOQ.css +32 -0
- package/dist/clear-cache.html +85 -85
- package/dist/convert-icons.md +52 -52
- package/dist/docs.html +308 -308
- package/dist/favicon.svg +8 -8
- package/dist/features.html +133 -133
- package/dist/generate-icons.js +48 -48
- package/dist/humans.txt +15 -15
- package/dist/icons/codex-white.svg +3 -3
- package/dist/icons/codex.svg +3 -3
- package/dist/icons/cursor-white.svg +11 -11
- package/dist/icons/icon-128x128.svg +9 -9
- package/dist/icons/icon-144x144.svg +9 -9
- package/dist/icons/icon-152x152.svg +9 -9
- package/dist/icons/icon-192x192.svg +9 -9
- package/dist/icons/icon-384x384.svg +9 -9
- package/dist/icons/icon-512x512.svg +9 -9
- package/dist/icons/icon-72x72.svg +9 -9
- package/dist/icons/icon-96x96.svg +9 -9
- package/dist/icons/icon-template.svg +9 -9
- package/dist/icons/qwen-logo.svg +14 -14
- package/dist/index.html +59 -59
- package/dist/landing.html +268 -268
- package/dist/llms-full.txt +119 -119
- package/dist/llms.txt +53 -53
- package/dist/logo.svg +12 -12
- package/dist/manifest.json +60 -60
- package/dist/openapi.yaml +1696 -1696
- package/dist/orchestration.html +125 -125
- package/dist/robots.txt +4 -4
- package/dist/site.css +692 -692
- package/dist/sitemap.xml +51 -51
- package/dist/sw.js +132 -132
- package/dist-server/server/cli.js +96 -96
- package/dist-server/server/daemon/manager.js +33 -33
- package/dist-server/server/daemon-manager.js +64 -64
- package/dist-server/server/index.js +125 -4
- package/dist-server/server/index.js.map +1 -1
- package/dist-server/server/modules/orchestration/a2a/adapters/json-event.adapter.js +84 -0
- package/dist-server/server/modules/orchestration/a2a/adapters/json-event.adapter.js.map +1 -0
- package/dist-server/server/modules/orchestration/a2a/adapters/json-event.adapter.test.js +43 -0
- package/dist-server/server/modules/orchestration/a2a/adapters/json-event.adapter.test.js.map +1 -0
- package/dist-server/server/modules/orchestration/hermes/hermes.routes.js +55 -1
- package/dist-server/server/modules/orchestration/hermes/hermes.routes.js.map +1 -1
- package/dist-server/server/modules/orchestration/index.js +1 -0
- package/dist-server/server/modules/orchestration/index.js.map +1 -1
- package/dist-server/server/routes/commands.js +25 -25
- package/dist-server/server/routes/git.js +17 -17
- package/dist-server/server/routes/live-view.js +46 -46
- package/dist-server/server/services/hermes-gateway.js +310 -0
- package/dist-server/server/services/hermes-gateway.js.map +1 -1
- package/dist-server/server/services/public-api-manifest.js +59 -51
- package/dist-server/server/services/public-api-manifest.js.map +1 -1
- package/package.json +222 -222
- package/scripts/fix-node-pty.js +67 -67
- package/scripts/github/create-v1.38-issues.mjs +351 -351
- package/scripts/github/create-vscode-workbench-issues.mjs +121 -121
- package/scripts/hermes/configure-pixcode-mcp.mjs +165 -163
- package/scripts/hermes/pixcode-mcp-server.mjs +1009 -958
- package/scripts/smoke/changes-panel-layout.mjs +48 -48
- package/scripts/smoke/chat-composer-fixed-layout.mjs +55 -55
- package/scripts/smoke/chat-message-timeline-order.mjs +41 -41
- package/scripts/smoke/chat-realtime-hydration.mjs +44 -44
- package/scripts/smoke/chat-session-provider-pools.mjs +35 -35
- package/scripts/smoke/chat-session-state.mjs +19 -19
- package/scripts/smoke/code-editor-theme.mjs +55 -55
- package/scripts/smoke/code-editor-vscode-engine.mjs +91 -91
- package/scripts/smoke/command-center-agent-writes.mjs +79 -79
- package/scripts/smoke/command-center-non-git.mjs +46 -46
- package/scripts/smoke/context-packet.mjs +43 -43
- package/scripts/smoke/control-room-ux-redesign.mjs +91 -91
- package/scripts/smoke/daemon-entrypoint.mjs +20 -20
- package/scripts/smoke/default-landing-routing.mjs +33 -33
- package/scripts/smoke/desktop-native-notifications.mjs +30 -30
- package/scripts/smoke/desktop-tray-icon.mjs +33 -33
- package/scripts/smoke/discord-release-workflow.mjs +24 -24
- package/scripts/smoke/git-install-update.mjs +255 -255
- package/scripts/smoke/handoff-artifact-protocol.mjs +50 -50
- package/scripts/smoke/hermes-api-install.mjs +56 -56
- package/scripts/smoke/hermes-gateway-persistence.mjs +104 -104
- package/scripts/smoke/hermes-mcp-pixcode-roundtrip.mjs +426 -367
- package/scripts/smoke/hermes-rest-chat-api.mjs +162 -162
- package/scripts/smoke/hermes-rest-chat-live.mjs +45 -45
- package/scripts/smoke/hermes-rest-codex-launch.mjs +209 -209
- package/scripts/smoke/hermes-rest-gateway.mjs +79 -70
- package/scripts/smoke/hermes-rest-live.mjs +42 -42
- package/scripts/smoke/hermes-roundtrip.mjs +167 -167
- package/scripts/smoke/hermes-settings-commands.mjs +349 -346
- package/scripts/smoke/hermes-smoke-launcher-guard.mjs +34 -34
- package/scripts/smoke/live-view-diagnostics.mjs +53 -53
- package/scripts/smoke/live-view-environment.mjs +92 -92
- package/scripts/smoke/live-view-integration.mjs +450 -450
- package/scripts/smoke/mac-desktop-runtime.mjs +37 -37
- package/scripts/smoke/mobile-tunnel-guidance.mjs +29 -29
- package/scripts/smoke/model-registry.mjs +36 -36
- package/scripts/smoke/multi-project-ui.mjs +45 -45
- package/scripts/smoke/multi-worker-slots.mjs +42 -42
- package/scripts/smoke/notification-center.mjs +87 -87
- package/scripts/smoke/notification-inapp-preference.mjs +23 -23
- package/scripts/smoke/notification-taxonomy.mjs +58 -58
- package/scripts/smoke/orchestration-api.mjs +172 -172
- package/scripts/smoke/orchestration-execution-dashboard.mjs +33 -33
- package/scripts/smoke/orchestration-live-run.mjs +176 -176
- package/scripts/smoke/orchestration-mobile-scroll.mjs +29 -29
- package/scripts/smoke/orchestration-model-sync.mjs +30 -30
- package/scripts/smoke/orchestration-permission-fallback.mjs +34 -34
- package/scripts/smoke/orchestration-runtime-guards.mjs +48 -48
- package/scripts/smoke/orchestration-user-facing-output.mjs +25 -25
- package/scripts/smoke/permission-policy.mjs +50 -50
- package/scripts/smoke/pixcode-workbench-1-48.mjs +167 -164
- package/scripts/smoke/provider-models-opencode-live.mjs +66 -66
- package/scripts/smoke/provider-rest-api.mjs +124 -124
- package/scripts/smoke/provider-selection-status.mjs +52 -52
- package/scripts/smoke/run-state-refresh.mjs +52 -52
- package/scripts/smoke/runtime-manager.mjs +99 -99
- package/scripts/smoke/shell-manual-disconnect.mjs +30 -30
- package/scripts/smoke/side-panel-editor-layout.mjs +34 -34
- package/scripts/smoke/static-root-routing.mjs +21 -21
- package/scripts/smoke/strict-handoff-compact.mjs +60 -60
- package/scripts/smoke/taskmaster-config.mjs +24 -24
- package/scripts/smoke/taskmaster-execution-telegram.mjs +3 -3
- package/scripts/smoke/taskmaster-onboarding.mjs +3 -3
- package/scripts/smoke/taskmaster-run-graph.mjs +3 -3
- package/scripts/smoke/telegram-control.mjs +242 -242
- package/scripts/smoke/tunnel-persistence.mjs +56 -56
- package/scripts/smoke/update-issue-progress.mjs +69 -69
- package/scripts/smoke/update-ux.mjs +55 -55
- package/scripts/smoke/v138-completion.mjs +132 -132
- package/scripts/smoke/v138-desktop-release-hardening.mjs +69 -69
- package/scripts/smoke/v138-diagnostics.mjs +63 -63
- package/scripts/smoke/v138-issue-planner.mjs +33 -33
- package/scripts/smoke/v143-remote-control.mjs +76 -76
- package/scripts/smoke/v144-production-loop.mjs +47 -47
- package/scripts/smoke/v145-platformization.mjs +46 -46
- package/scripts/smoke/v146-control-room-ui.mjs +150 -150
- package/scripts/smoke/version-modal-autoshow.mjs +29 -29
- package/scripts/smoke/vscode-workbench-layout.mjs +63 -63
- package/scripts/smoke/vscode-workbench-polish.mjs +461 -436
- package/scripts/smoke/workflow-fallback-replay.mjs +56 -56
- package/scripts/smoke/workflow-templates.mjs +43 -43
- package/scripts/smoke/workflow-trace-timeline.mjs +46 -46
- package/scripts/update-git-install.mjs +293 -293
- package/server/claude-sdk.js +920 -920
- package/server/cli.js +1039 -1039
- package/server/constants/config.js +4 -4
- package/server/cursor-cli.js +344 -344
- package/server/daemon/manager.js +563 -563
- package/server/daemon-manager.js +964 -964
- package/server/database/db.js +921 -921
- package/server/database/json-store.js +197 -197
- package/server/gemini-cli.js +550 -550
- package/server/gemini-response-handler.js +79 -79
- package/server/index.js +131 -3
- package/server/load-env.js +35 -35
- package/server/middleware/auth.js +175 -175
- package/server/modules/orchestration/a2a/adapter-registry.ts +108 -108
- package/server/modules/orchestration/a2a/adapters/abstract-a2a.adapter.ts +63 -63
- package/server/modules/orchestration/a2a/adapters/claude-code.adapter.ts +286 -286
- package/server/modules/orchestration/a2a/adapters/codex.adapter.ts +244 -244
- package/server/modules/orchestration/a2a/adapters/cursor.adapter.ts +249 -249
- package/server/modules/orchestration/a2a/adapters/gemini.adapter.ts +248 -248
- package/server/modules/orchestration/a2a/adapters/json-event.adapter.test.ts +60 -0
- package/server/modules/orchestration/a2a/adapters/json-event.adapter.ts +101 -0
- package/server/modules/orchestration/a2a/adapters/opencode.adapter.ts +248 -248
- package/server/modules/orchestration/a2a/adapters/qwen.adapter.ts +248 -248
- package/server/modules/orchestration/a2a/agent-card.ts +55 -55
- package/server/modules/orchestration/a2a/routes.ts +590 -590
- package/server/modules/orchestration/a2a/task-store.ts +178 -178
- package/server/modules/orchestration/a2a/types.ts +126 -126
- package/server/modules/orchestration/a2a/validator.ts +113 -113
- package/server/modules/orchestration/hermes/hermes.routes.ts +642 -583
- package/server/modules/orchestration/index.ts +101 -100
- package/server/modules/orchestration/preview/port-watcher.ts +112 -112
- package/server/modules/orchestration/preview/preview-proxy.ts +60 -60
- package/server/modules/orchestration/preview/types.ts +19 -19
- package/server/modules/orchestration/security/permission-policy.ts +401 -401
- package/server/modules/orchestration/tasks/orchestration-task-store.ts +41 -41
- package/server/modules/orchestration/tasks/orchestration-task.routes.ts +64 -64
- package/server/modules/orchestration/tasks/orchestration-task.service.ts +209 -209
- package/server/modules/orchestration/tasks/orchestration-task.types.ts +40 -40
- package/server/modules/orchestration/tasks/task-run-graph.ts +155 -155
- package/server/modules/orchestration/workflows/approval-queue.ts +106 -106
- package/server/modules/orchestration/workflows/built-in-workflows.ts +127 -127
- package/server/modules/orchestration/workflows/context-packet.ts +186 -186
- package/server/modules/orchestration/workflows/handoff-artifact.ts +175 -175
- package/server/modules/orchestration/workflows/workflow-fallback-policy.ts +161 -161
- package/server/modules/orchestration/workflows/workflow-replay.ts +254 -254
- package/server/modules/orchestration/workflows/workflow-runner.ts +2070 -2070
- package/server/modules/orchestration/workflows/workflow-store.ts +97 -97
- package/server/modules/orchestration/workflows/workflow-templates.ts +272 -272
- package/server/modules/orchestration/workflows/workflow-trace.ts +424 -424
- package/server/modules/orchestration/workflows/workflow.routes.ts +586 -586
- package/server/modules/orchestration/workflows/workflow.types.ts +111 -111
- package/server/modules/orchestration/workflows/workspace-target.ts +122 -122
- package/server/modules/orchestration/workspace/docker-workspace.ts +136 -136
- package/server/modules/orchestration/workspace/path-safety.ts +55 -55
- package/server/modules/orchestration/workspace/types.ts +52 -52
- package/server/modules/orchestration/workspace/workspace-manager.ts +102 -102
- package/server/modules/orchestration/workspace/worktree-workspace.ts +126 -126
- package/server/modules/providers/index.ts +2 -2
- package/server/modules/providers/list/claude/claude-auth.provider.ts +146 -146
- package/server/modules/providers/list/claude/claude-mcp.provider.ts +135 -135
- package/server/modules/providers/list/claude/claude-sessions.provider.ts +306 -306
- package/server/modules/providers/list/claude/claude.provider.ts +15 -15
- package/server/modules/providers/list/codex/codex-auth.provider.ts +117 -117
- package/server/modules/providers/list/codex/codex-mcp.provider.ts +135 -135
- package/server/modules/providers/list/codex/codex-sessions.provider.ts +319 -319
- package/server/modules/providers/list/codex/codex.provider.ts +15 -15
- package/server/modules/providers/list/cursor/cursor-auth.provider.ts +147 -147
- package/server/modules/providers/list/cursor/cursor-mcp.provider.ts +108 -108
- package/server/modules/providers/list/cursor/cursor-sessions.provider.ts +421 -421
- package/server/modules/providers/list/cursor/cursor.provider.ts +15 -15
- package/server/modules/providers/list/gemini/gemini-auth.provider.ts +173 -173
- package/server/modules/providers/list/gemini/gemini-mcp.provider.ts +110 -110
- package/server/modules/providers/list/gemini/gemini-sessions.provider.ts +227 -227
- package/server/modules/providers/list/gemini/gemini.provider.ts +15 -15
- package/server/modules/providers/list/opencode/opencode-auth.provider.ts +131 -131
- package/server/modules/providers/list/opencode/opencode-mcp.provider.ts +126 -126
- package/server/modules/providers/list/opencode/opencode-sessions.provider.ts +286 -286
- package/server/modules/providers/list/opencode/opencode.provider.ts +29 -29
- package/server/modules/providers/list/qwen/qwen-auth.provider.ts +146 -146
- package/server/modules/providers/list/qwen/qwen-mcp.provider.ts +114 -114
- package/server/modules/providers/list/qwen/qwen-sessions.provider.ts +265 -265
- package/server/modules/providers/list/qwen/qwen.provider.ts +21 -21
- package/server/modules/providers/provider.registry.ts +40 -40
- package/server/modules/providers/provider.routes.ts +944 -944
- package/server/modules/providers/services/mcp.service.ts +86 -86
- package/server/modules/providers/services/provider-auth.service.ts +26 -26
- package/server/modules/providers/services/sessions.service.ts +45 -45
- package/server/modules/providers/shared/base/abstract.provider.ts +20 -20
- package/server/modules/providers/shared/mcp/mcp.provider.ts +151 -151
- package/server/modules/providers/shared/provider-configs.ts +142 -142
- package/server/modules/providers/tests/mcp.test.ts +293 -293
- package/server/openai-codex.js +462 -462
- package/server/opencode-cli.js +491 -491
- package/server/opencode-response-handler.js +111 -111
- package/server/projects.js +3008 -3008
- package/server/qwen-code-cli.js +410 -410
- package/server/qwen-response-handler.js +73 -73
- package/server/routes/agent.js +1435 -1435
- package/server/routes/auth.js +159 -159
- package/server/routes/codex.js +20 -20
- package/server/routes/commands.js +570 -570
- package/server/routes/cursor.js +61 -61
- package/server/routes/diagnostics.js +41 -41
- package/server/routes/gemini.js +25 -25
- package/server/routes/git.js +1650 -1650
- package/server/routes/live-view.js +411 -411
- package/server/routes/mcp-utils.js +13 -13
- package/server/routes/messages.js +62 -62
- package/server/routes/network.js +125 -125
- package/server/routes/platformization.js +212 -212
- package/server/routes/plugins.js +320 -320
- package/server/routes/production-agent-loop.js +90 -90
- package/server/routes/projects.js +917 -917
- package/server/routes/public-api.js +34 -34
- package/server/routes/qwen.js +27 -27
- package/server/routes/remote.js +55 -55
- package/server/routes/settings.js +321 -321
- package/server/routes/telegram.js +140 -140
- package/server/routes/user.js +125 -125
- package/server/routes/webhooks.js +63 -63
- package/server/services/control-room.js +102 -102
- package/server/services/diagnostics.js +165 -165
- package/server/services/external-access.js +375 -375
- package/server/services/hermes-gateway.js +1562 -1247
- package/server/services/hermes-install-jobs.js +729 -729
- package/server/services/install-jobs.js +715 -715
- package/server/services/live-view.js +956 -956
- package/server/services/managed-runtimes.js +493 -493
- package/server/services/model-registry.js +144 -144
- package/server/services/notification-orchestrator.js +365 -365
- package/server/services/notification-taxonomy.js +204 -204
- package/server/services/platformization.js +815 -815
- package/server/services/production-agent-loop.js +248 -248
- package/server/services/provider-cli-versions.js +149 -149
- package/server/services/provider-credentials.js +189 -189
- package/server/services/provider-models.js +396 -396
- package/server/services/public-api-manifest.js +190 -182
- package/server/services/remote-connection.js +127 -127
- package/server/services/runtime-manager.js +323 -323
- package/server/services/startup-update.js +234 -234
- package/server/services/telegram/bot.js +331 -331
- package/server/services/telegram/control-center.js +979 -979
- package/server/services/telegram/telegram-http-client.js +151 -151
- package/server/services/telegram/translations.js +340 -340
- package/server/services/vapid-keys.js +36 -36
- package/server/services/webhooks.js +216 -216
- package/server/sessionManager.js +225 -225
- package/server/shared/interfaces.ts +54 -54
- package/server/shared/types.ts +172 -172
- package/server/shared/utils.ts +193 -193
- package/server/tsconfig.json +36 -36
- package/server/utils/colors.js +21 -21
- package/server/utils/commandParser.js +305 -305
- package/server/utils/frontmatter.js +18 -18
- package/server/utils/gitConfig.js +34 -34
- package/server/utils/plugin-loader.js +457 -457
- package/server/utils/plugin-process-manager.js +185 -185
- package/server/utils/port-access.js +209 -209
- package/server/utils/runtime-paths.js +37 -37
- package/server/utils/url-detection.js +71 -71
- package/server/vite-daemon.js +79 -79
- package/shared/modelConstants.js +161 -161
- package/shared/networkHosts.js +22 -22
- package/dist/assets/index-DMz0zv6T.css +0 -32
package/dist/sitemap.xml
CHANGED
|
@@ -1,51 +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-11</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-11</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-11</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-11</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-11</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-11</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-11</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-11</lastmod>
|
|
48
|
-
<changefreq>weekly</changefreq>
|
|
49
|
-
<priority>0.75</priority>
|
|
50
|
-
</url>
|
|
51
|
-
</urlset>
|
|
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-11</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-11</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-11</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-11</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-11</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-11</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-11</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-11</lastmod>
|
|
48
|
+
<changefreq>weekly</changefreq>
|
|
49
|
+
<priority>0.75</priority>
|
|
50
|
+
</url>
|
|
51
|
+
</urlset>
|
package/dist/sw.js
CHANGED
|
@@ -1,132 +1,132 @@
|
|
|
1
|
-
// Service Worker for Pixcode PWA
|
|
2
|
-
// Cache only manifest (needed for PWA install). HTML and JS are never pre-cached
|
|
3
|
-
// so a rebuild + refresh always picks up the latest assets.
|
|
4
|
-
const CACHE_NAME = 'pixcode-v3';
|
|
5
|
-
const urlsToCache = [
|
|
6
|
-
'/manifest.json'
|
|
7
|
-
];
|
|
8
|
-
|
|
9
|
-
// Install event
|
|
10
|
-
self.addEventListener('install', event => {
|
|
11
|
-
event.waitUntil(
|
|
12
|
-
caches.open(CACHE_NAME)
|
|
13
|
-
.then(cache => cache.addAll(urlsToCache))
|
|
14
|
-
);
|
|
15
|
-
self.skipWaiting();
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
// Fetch event — network-first for everything except hashed assets
|
|
19
|
-
self.addEventListener('fetch', event => {
|
|
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
|
-
}
|
|
29
|
-
|
|
30
|
-
// Never intercept API requests or WebSocket upgrades
|
|
31
|
-
if (url.includes('/api/') || url.includes('/ws')) {
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
// Navigation requests (HTML) — always go to network, no caching
|
|
36
|
-
if (event.request.mode === 'navigate') {
|
|
37
|
-
event.respondWith(
|
|
38
|
-
fetch(event.request).catch(() => caches.match('/manifest.json').then(() =>
|
|
39
|
-
new Response('<h1>Offline</h1><p>Please check your connection.</p>', {
|
|
40
|
-
headers: { 'Content-Type': 'text/html' }
|
|
41
|
-
})
|
|
42
|
-
))
|
|
43
|
-
);
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
// Hashed assets (JS/CSS in /assets/) — cache-first since filenames change per build
|
|
48
|
-
if (url.includes('/assets/')) {
|
|
49
|
-
event.respondWith(
|
|
50
|
-
caches.match(event.request).then(cached => {
|
|
51
|
-
if (cached) return cached;
|
|
52
|
-
return fetch(event.request).then(response => {
|
|
53
|
-
const clone = response.clone();
|
|
54
|
-
caches.open(CACHE_NAME).then(cache => cache.put(event.request, clone));
|
|
55
|
-
return response;
|
|
56
|
-
});
|
|
57
|
-
})
|
|
58
|
-
);
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
// Everything else — network-first
|
|
63
|
-
event.respondWith(
|
|
64
|
-
fetch(event.request).catch(() => caches.match(event.request))
|
|
65
|
-
);
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
// Activate event — purge old caches
|
|
69
|
-
self.addEventListener('activate', event => {
|
|
70
|
-
event.waitUntil(
|
|
71
|
-
caches.keys().then(cacheNames =>
|
|
72
|
-
Promise.all(
|
|
73
|
-
cacheNames
|
|
74
|
-
.filter(name => name !== CACHE_NAME)
|
|
75
|
-
.map(name => caches.delete(name))
|
|
76
|
-
)
|
|
77
|
-
)
|
|
78
|
-
);
|
|
79
|
-
self.clients.claim();
|
|
80
|
-
});
|
|
81
|
-
|
|
82
|
-
// Push notification event
|
|
83
|
-
self.addEventListener('push', event => {
|
|
84
|
-
if (!event.data) return;
|
|
85
|
-
|
|
86
|
-
let payload;
|
|
87
|
-
try {
|
|
88
|
-
payload = event.data.json();
|
|
89
|
-
} catch {
|
|
90
|
-
payload = { title: 'Pixcode', body: event.data.text() };
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
const options = {
|
|
94
|
-
body: payload.body || '',
|
|
95
|
-
icon: '/logo-256.png',
|
|
96
|
-
badge: '/logo-128.png',
|
|
97
|
-
data: payload.data || {},
|
|
98
|
-
tag: payload.data?.tag || `${payload.data?.sessionId || 'global'}:${payload.data?.code || 'default'}`,
|
|
99
|
-
renotify: true
|
|
100
|
-
};
|
|
101
|
-
|
|
102
|
-
event.waitUntil(
|
|
103
|
-
self.registration.showNotification(payload.title || 'Pixcode', options)
|
|
104
|
-
);
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
// Notification click event
|
|
108
|
-
self.addEventListener('notificationclick', event => {
|
|
109
|
-
event.notification.close();
|
|
110
|
-
|
|
111
|
-
const sessionId = event.notification.data?.sessionId;
|
|
112
|
-
const provider = event.notification.data?.provider || null;
|
|
113
|
-
const urlPath = sessionId ? `/session/${sessionId}` : '/';
|
|
114
|
-
|
|
115
|
-
event.waitUntil(
|
|
116
|
-
self.clients.matchAll({ type: 'window', includeUncontrolled: true }).then(async clientList => {
|
|
117
|
-
for (const client of clientList) {
|
|
118
|
-
if (client.url.includes(self.location.origin)) {
|
|
119
|
-
await client.focus();
|
|
120
|
-
client.postMessage({
|
|
121
|
-
type: 'notification:navigate',
|
|
122
|
-
sessionId: sessionId || null,
|
|
123
|
-
provider,
|
|
124
|
-
urlPath
|
|
125
|
-
});
|
|
126
|
-
return;
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
return self.clients.openWindow(urlPath);
|
|
130
|
-
})
|
|
131
|
-
);
|
|
132
|
-
});
|
|
1
|
+
// Service Worker for Pixcode PWA
|
|
2
|
+
// Cache only manifest (needed for PWA install). HTML and JS are never pre-cached
|
|
3
|
+
// so a rebuild + refresh always picks up the latest assets.
|
|
4
|
+
const CACHE_NAME = 'pixcode-v3';
|
|
5
|
+
const urlsToCache = [
|
|
6
|
+
'/manifest.json'
|
|
7
|
+
];
|
|
8
|
+
|
|
9
|
+
// Install event
|
|
10
|
+
self.addEventListener('install', event => {
|
|
11
|
+
event.waitUntil(
|
|
12
|
+
caches.open(CACHE_NAME)
|
|
13
|
+
.then(cache => cache.addAll(urlsToCache))
|
|
14
|
+
);
|
|
15
|
+
self.skipWaiting();
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
// Fetch event — network-first for everything except hashed assets
|
|
19
|
+
self.addEventListener('fetch', event => {
|
|
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
|
+
}
|
|
29
|
+
|
|
30
|
+
// Never intercept API requests or WebSocket upgrades
|
|
31
|
+
if (url.includes('/api/') || url.includes('/ws')) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// Navigation requests (HTML) — always go to network, no caching
|
|
36
|
+
if (event.request.mode === 'navigate') {
|
|
37
|
+
event.respondWith(
|
|
38
|
+
fetch(event.request).catch(() => caches.match('/manifest.json').then(() =>
|
|
39
|
+
new Response('<h1>Offline</h1><p>Please check your connection.</p>', {
|
|
40
|
+
headers: { 'Content-Type': 'text/html' }
|
|
41
|
+
})
|
|
42
|
+
))
|
|
43
|
+
);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Hashed assets (JS/CSS in /assets/) — cache-first since filenames change per build
|
|
48
|
+
if (url.includes('/assets/')) {
|
|
49
|
+
event.respondWith(
|
|
50
|
+
caches.match(event.request).then(cached => {
|
|
51
|
+
if (cached) return cached;
|
|
52
|
+
return fetch(event.request).then(response => {
|
|
53
|
+
const clone = response.clone();
|
|
54
|
+
caches.open(CACHE_NAME).then(cache => cache.put(event.request, clone));
|
|
55
|
+
return response;
|
|
56
|
+
});
|
|
57
|
+
})
|
|
58
|
+
);
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// Everything else — network-first
|
|
63
|
+
event.respondWith(
|
|
64
|
+
fetch(event.request).catch(() => caches.match(event.request))
|
|
65
|
+
);
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
// Activate event — purge old caches
|
|
69
|
+
self.addEventListener('activate', event => {
|
|
70
|
+
event.waitUntil(
|
|
71
|
+
caches.keys().then(cacheNames =>
|
|
72
|
+
Promise.all(
|
|
73
|
+
cacheNames
|
|
74
|
+
.filter(name => name !== CACHE_NAME)
|
|
75
|
+
.map(name => caches.delete(name))
|
|
76
|
+
)
|
|
77
|
+
)
|
|
78
|
+
);
|
|
79
|
+
self.clients.claim();
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
// Push notification event
|
|
83
|
+
self.addEventListener('push', event => {
|
|
84
|
+
if (!event.data) return;
|
|
85
|
+
|
|
86
|
+
let payload;
|
|
87
|
+
try {
|
|
88
|
+
payload = event.data.json();
|
|
89
|
+
} catch {
|
|
90
|
+
payload = { title: 'Pixcode', body: event.data.text() };
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
const options = {
|
|
94
|
+
body: payload.body || '',
|
|
95
|
+
icon: '/logo-256.png',
|
|
96
|
+
badge: '/logo-128.png',
|
|
97
|
+
data: payload.data || {},
|
|
98
|
+
tag: payload.data?.tag || `${payload.data?.sessionId || 'global'}:${payload.data?.code || 'default'}`,
|
|
99
|
+
renotify: true
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
event.waitUntil(
|
|
103
|
+
self.registration.showNotification(payload.title || 'Pixcode', options)
|
|
104
|
+
);
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
// Notification click event
|
|
108
|
+
self.addEventListener('notificationclick', event => {
|
|
109
|
+
event.notification.close();
|
|
110
|
+
|
|
111
|
+
const sessionId = event.notification.data?.sessionId;
|
|
112
|
+
const provider = event.notification.data?.provider || null;
|
|
113
|
+
const urlPath = sessionId ? `/session/${sessionId}` : '/';
|
|
114
|
+
|
|
115
|
+
event.waitUntil(
|
|
116
|
+
self.clients.matchAll({ type: 'window', includeUncontrolled: true }).then(async clientList => {
|
|
117
|
+
for (const client of clientList) {
|
|
118
|
+
if (client.url.includes(self.location.origin)) {
|
|
119
|
+
await client.focus();
|
|
120
|
+
client.postMessage({
|
|
121
|
+
type: 'notification:navigate',
|
|
122
|
+
sessionId: sessionId || null,
|
|
123
|
+
provider,
|
|
124
|
+
urlPath
|
|
125
|
+
});
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return self.clients.openWindow(urlPath);
|
|
130
|
+
})
|
|
131
|
+
);
|
|
132
|
+
});
|
|
@@ -140,54 +140,54 @@ function showStatus() {
|
|
|
140
140
|
}
|
|
141
141
|
// Show help
|
|
142
142
|
function showHelp() {
|
|
143
|
-
console.log(`
|
|
144
|
-
╔═══════════════════════════════════════════════════════════════╗
|
|
145
|
-
║ Pixcode - Command Line Tool ║
|
|
146
|
-
╚═══════════════════════════════════════════════════════════════╝
|
|
147
|
-
|
|
148
|
-
Usage:
|
|
149
|
-
pixcode [command] [options]
|
|
150
|
-
|
|
151
|
-
Commands:
|
|
152
|
-
start Start the Pixcode server (default)
|
|
153
|
-
daemon Manage persistent Linux service (system-first)
|
|
154
|
-
sandbox Manage Docker sandbox environments
|
|
155
|
-
status Show configuration and data locations
|
|
156
|
-
update Update to the latest version
|
|
157
|
-
help Show this help information
|
|
158
|
-
version Show version information
|
|
159
|
-
|
|
160
|
-
Options:
|
|
161
|
-
-p, --port <port> Set server port (default: 3001)
|
|
162
|
-
--database-path <path> Set custom database location
|
|
163
|
-
--no-daemon Disable automatic daemon startup on Linux
|
|
164
|
-
--restart-daemon Restart daemon automatically after update
|
|
165
|
-
-h, --help Show this help information
|
|
166
|
-
-v, --version Show version information
|
|
167
|
-
|
|
168
|
-
Examples:
|
|
169
|
-
$ pixcode # Start with defaults
|
|
170
|
-
$ pixcode --port 8080 # Start on port 8080
|
|
171
|
-
$ pixcode --no-daemon # Force foreground mode
|
|
172
|
-
$ sudo pixcode daemon install --mode system --port 3001
|
|
173
|
-
$ pixcode daemon install --mode user --port 3001 --single-port
|
|
174
|
-
$ pixcode daemon doctor --mode system
|
|
175
|
-
$ pixcode update --restart-daemon
|
|
176
|
-
$ pixcode sandbox ~/my-project # Run in a Docker sandbox
|
|
177
|
-
$ pixcode status # Show configuration
|
|
178
|
-
|
|
179
|
-
Environment Variables:
|
|
180
|
-
SERVER_PORT Set server port (default: 3001)
|
|
181
|
-
PORT Set server port (default: 3001) (LEGACY)
|
|
182
|
-
DATABASE_PATH Set custom database location
|
|
183
|
-
CLAUDE_CLI_PATH Set custom Claude CLI path
|
|
184
|
-
CONTEXT_WINDOW Set context window size (default: 160000)
|
|
185
|
-
|
|
186
|
-
Documentation:
|
|
187
|
-
${packageJson.homepage || 'https://github.com/alicomert/pixcode'}
|
|
188
|
-
|
|
189
|
-
Report Issues:
|
|
190
|
-
${packageJson.bugs?.url || 'https://github.com/alicomert/pixcode/issues'}
|
|
143
|
+
console.log(`
|
|
144
|
+
╔═══════════════════════════════════════════════════════════════╗
|
|
145
|
+
║ Pixcode - Command Line Tool ║
|
|
146
|
+
╚═══════════════════════════════════════════════════════════════╝
|
|
147
|
+
|
|
148
|
+
Usage:
|
|
149
|
+
pixcode [command] [options]
|
|
150
|
+
|
|
151
|
+
Commands:
|
|
152
|
+
start Start the Pixcode server (default)
|
|
153
|
+
daemon Manage persistent Linux service (system-first)
|
|
154
|
+
sandbox Manage Docker sandbox environments
|
|
155
|
+
status Show configuration and data locations
|
|
156
|
+
update Update to the latest version
|
|
157
|
+
help Show this help information
|
|
158
|
+
version Show version information
|
|
159
|
+
|
|
160
|
+
Options:
|
|
161
|
+
-p, --port <port> Set server port (default: 3001)
|
|
162
|
+
--database-path <path> Set custom database location
|
|
163
|
+
--no-daemon Disable automatic daemon startup on Linux
|
|
164
|
+
--restart-daemon Restart daemon automatically after update
|
|
165
|
+
-h, --help Show this help information
|
|
166
|
+
-v, --version Show version information
|
|
167
|
+
|
|
168
|
+
Examples:
|
|
169
|
+
$ pixcode # Start with defaults
|
|
170
|
+
$ pixcode --port 8080 # Start on port 8080
|
|
171
|
+
$ pixcode --no-daemon # Force foreground mode
|
|
172
|
+
$ sudo pixcode daemon install --mode system --port 3001
|
|
173
|
+
$ pixcode daemon install --mode user --port 3001 --single-port
|
|
174
|
+
$ pixcode daemon doctor --mode system
|
|
175
|
+
$ pixcode update --restart-daemon
|
|
176
|
+
$ pixcode sandbox ~/my-project # Run in a Docker sandbox
|
|
177
|
+
$ pixcode status # Show configuration
|
|
178
|
+
|
|
179
|
+
Environment Variables:
|
|
180
|
+
SERVER_PORT Set server port (default: 3001)
|
|
181
|
+
PORT Set server port (default: 3001) (LEGACY)
|
|
182
|
+
DATABASE_PATH Set custom database location
|
|
183
|
+
CLAUDE_CLI_PATH Set custom Claude CLI path
|
|
184
|
+
CONTEXT_WINDOW Set context window size (default: 160000)
|
|
185
|
+
|
|
186
|
+
Documentation:
|
|
187
|
+
${packageJson.homepage || 'https://github.com/alicomert/pixcode'}
|
|
188
|
+
|
|
189
|
+
Report Issues:
|
|
190
|
+
${packageJson.bugs?.url || 'https://github.com/alicomert/pixcode/issues'}
|
|
191
191
|
`);
|
|
192
192
|
}
|
|
193
193
|
// Show version
|
|
@@ -375,54 +375,54 @@ function parseSandboxArgs(args) {
|
|
|
375
375
|
return result;
|
|
376
376
|
}
|
|
377
377
|
function showSandboxHelp() {
|
|
378
|
-
console.log(`
|
|
379
|
-
${c.bright('Pixcode Sandbox')} — Run Pixcode inside Docker Sandboxes
|
|
380
|
-
|
|
381
|
-
Usage:
|
|
382
|
-
pixcode sandbox <workspace> Create and start a sandbox
|
|
383
|
-
pixcode sandbox <subcommand> [name] Manage sandboxes
|
|
384
|
-
|
|
385
|
-
Subcommands:
|
|
386
|
-
${c.bright('(default)')} Create a sandbox and start the web UI
|
|
387
|
-
${c.bright('ls')} List all sandboxes
|
|
388
|
-
${c.bright('start')} Restart a stopped sandbox and re-launch the web UI
|
|
389
|
-
${c.bright('stop')} Stop a sandbox (preserves state)
|
|
390
|
-
${c.bright('rm')} Remove a sandbox
|
|
391
|
-
${c.bright('logs')} Show Pixcode server logs
|
|
392
|
-
${c.bright('help')} Show this help
|
|
393
|
-
|
|
394
|
-
Options:
|
|
395
|
-
-a, --agent <agent> Agent to use: claude, codex, gemini (default: claude)
|
|
396
|
-
-n, --name <name> Sandbox name (default: derived from workspace folder)
|
|
397
|
-
-t, --template <image> Custom template image
|
|
398
|
-
-e, --env <KEY=VALUE> Set environment variable (repeatable)
|
|
399
|
-
--port <port> Host port for the web UI (default: 3001)
|
|
400
|
-
|
|
401
|
-
Examples:
|
|
402
|
-
$ pixcode sandbox ~/my-project
|
|
403
|
-
$ pixcode sandbox ~/my-project --agent codex --port 8080
|
|
404
|
-
$ pixcode sandbox ~/my-project --env SERVER_PORT=8080 --env HOST=0.0.0.0
|
|
405
|
-
$ pixcode sandbox ls
|
|
406
|
-
$ pixcode sandbox stop my-project
|
|
407
|
-
$ pixcode sandbox start my-project
|
|
408
|
-
$ pixcode sandbox rm my-project
|
|
409
|
-
|
|
410
|
-
Prerequisites:
|
|
411
|
-
1. Install sbx CLI: https://docs.docker.com/ai/sandboxes/get-started/
|
|
412
|
-
2. Authenticate and store your API key:
|
|
413
|
-
sbx login
|
|
414
|
-
sbx secret set -g anthropic # for Claude
|
|
415
|
-
sbx secret set -g openai # for Codex
|
|
416
|
-
sbx secret set -g google # for Gemini
|
|
417
|
-
|
|
418
|
-
Advanced usage:
|
|
419
|
-
For branch mode, multiple workspaces, memory limits, network policies,
|
|
420
|
-
or passing prompts to the agent, use sbx directly with the template:
|
|
421
|
-
|
|
422
|
-
sbx run --template ghcr.io/alicomert/pixcode-sandbox:claude-code claude ~/my-project --branch my-feature
|
|
423
|
-
sbx run --template ghcr.io/alicomert/pixcode-sandbox:claude-code claude ~/project ~/libs:ro --memory 8g
|
|
424
|
-
|
|
425
|
-
Full Docker Sandboxes docs: https://docs.docker.com/ai/sandboxes/usage/
|
|
378
|
+
console.log(`
|
|
379
|
+
${c.bright('Pixcode Sandbox')} — Run Pixcode inside Docker Sandboxes
|
|
380
|
+
|
|
381
|
+
Usage:
|
|
382
|
+
pixcode sandbox <workspace> Create and start a sandbox
|
|
383
|
+
pixcode sandbox <subcommand> [name] Manage sandboxes
|
|
384
|
+
|
|
385
|
+
Subcommands:
|
|
386
|
+
${c.bright('(default)')} Create a sandbox and start the web UI
|
|
387
|
+
${c.bright('ls')} List all sandboxes
|
|
388
|
+
${c.bright('start')} Restart a stopped sandbox and re-launch the web UI
|
|
389
|
+
${c.bright('stop')} Stop a sandbox (preserves state)
|
|
390
|
+
${c.bright('rm')} Remove a sandbox
|
|
391
|
+
${c.bright('logs')} Show Pixcode server logs
|
|
392
|
+
${c.bright('help')} Show this help
|
|
393
|
+
|
|
394
|
+
Options:
|
|
395
|
+
-a, --agent <agent> Agent to use: claude, codex, gemini (default: claude)
|
|
396
|
+
-n, --name <name> Sandbox name (default: derived from workspace folder)
|
|
397
|
+
-t, --template <image> Custom template image
|
|
398
|
+
-e, --env <KEY=VALUE> Set environment variable (repeatable)
|
|
399
|
+
--port <port> Host port for the web UI (default: 3001)
|
|
400
|
+
|
|
401
|
+
Examples:
|
|
402
|
+
$ pixcode sandbox ~/my-project
|
|
403
|
+
$ pixcode sandbox ~/my-project --agent codex --port 8080
|
|
404
|
+
$ pixcode sandbox ~/my-project --env SERVER_PORT=8080 --env HOST=0.0.0.0
|
|
405
|
+
$ pixcode sandbox ls
|
|
406
|
+
$ pixcode sandbox stop my-project
|
|
407
|
+
$ pixcode sandbox start my-project
|
|
408
|
+
$ pixcode sandbox rm my-project
|
|
409
|
+
|
|
410
|
+
Prerequisites:
|
|
411
|
+
1. Install sbx CLI: https://docs.docker.com/ai/sandboxes/get-started/
|
|
412
|
+
2. Authenticate and store your API key:
|
|
413
|
+
sbx login
|
|
414
|
+
sbx secret set -g anthropic # for Claude
|
|
415
|
+
sbx secret set -g openai # for Codex
|
|
416
|
+
sbx secret set -g google # for Gemini
|
|
417
|
+
|
|
418
|
+
Advanced usage:
|
|
419
|
+
For branch mode, multiple workspaces, memory limits, network policies,
|
|
420
|
+
or passing prompts to the agent, use sbx directly with the template:
|
|
421
|
+
|
|
422
|
+
sbx run --template ghcr.io/alicomert/pixcode-sandbox:claude-code claude ~/my-project --branch my-feature
|
|
423
|
+
sbx run --template ghcr.io/alicomert/pixcode-sandbox:claude-code claude ~/project ~/libs:ro --memory 8g
|
|
424
|
+
|
|
425
|
+
Full Docker Sandboxes docs: https://docs.docker.com/ai/sandboxes/usage/
|
|
426
426
|
`);
|
|
427
427
|
}
|
|
428
428
|
async function sandboxCommand(args) {
|
|
@@ -149,19 +149,19 @@ function buildLinuxSystemdUnit({ nodePath, cliEntryPath, serverPort, databasePat
|
|
|
149
149
|
const startArgs = buildDaemonStartArgs({ serverPort, databasePath });
|
|
150
150
|
const execStart = [quoteSystemdArg(nodePath), quoteSystemdArg(cliEntryPath), ...startArgs.map(quoteSystemdArg)].join(' ');
|
|
151
151
|
const execStop = [quoteSystemdArg(nodePath), quoteSystemdArg(cliEntryPath), quoteSystemdArg('daemon'), quoteSystemdArg('stop')].join(' ');
|
|
152
|
-
return `[Unit]
|
|
153
|
-
Description=Pixcode daemon bootstrap
|
|
154
|
-
After=network-online.target
|
|
155
|
-
Wants=network-online.target
|
|
156
|
-
|
|
157
|
-
[Service]
|
|
158
|
-
Type=oneshot
|
|
159
|
-
RemainAfterExit=yes
|
|
160
|
-
ExecStart=${execStart}
|
|
161
|
-
ExecStop=${execStop}
|
|
162
|
-
|
|
163
|
-
[Install]
|
|
164
|
-
WantedBy=default.target
|
|
152
|
+
return `[Unit]
|
|
153
|
+
Description=Pixcode daemon bootstrap
|
|
154
|
+
After=network-online.target
|
|
155
|
+
Wants=network-online.target
|
|
156
|
+
|
|
157
|
+
[Service]
|
|
158
|
+
Type=oneshot
|
|
159
|
+
RemainAfterExit=yes
|
|
160
|
+
ExecStart=${execStart}
|
|
161
|
+
ExecStop=${execStop}
|
|
162
|
+
|
|
163
|
+
[Install]
|
|
164
|
+
WantedBy=default.target
|
|
165
165
|
`;
|
|
166
166
|
}
|
|
167
167
|
function enableLinuxAutostart(options) {
|
|
@@ -211,26 +211,26 @@ function getLinuxAutostartStatus() {
|
|
|
211
211
|
function buildMacLaunchAgent({ nodePath, cliEntryPath, serverPort, databasePath }) {
|
|
212
212
|
const args = [nodePath, cliEntryPath, ...buildDaemonStartArgs({ serverPort, databasePath })];
|
|
213
213
|
const xmlArgs = args.map((arg) => ` <string>${xmlEscape(arg)}</string>`).join('\n');
|
|
214
|
-
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
215
|
-
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
216
|
-
<plist version="1.0">
|
|
217
|
-
<dict>
|
|
218
|
-
<key>Label</key>
|
|
219
|
-
<string>${MACOS_LAUNCH_AGENT_LABEL}</string>
|
|
220
|
-
<key>ProgramArguments</key>
|
|
221
|
-
<array>
|
|
222
|
-
${xmlArgs}
|
|
223
|
-
</array>
|
|
224
|
-
<key>RunAtLoad</key>
|
|
225
|
-
<true/>
|
|
226
|
-
<key>KeepAlive</key>
|
|
227
|
-
<false/>
|
|
228
|
-
<key>StandardOutPath</key>
|
|
229
|
-
<string>${xmlEscape(LOG_FILE)}</string>
|
|
230
|
-
<key>StandardErrorPath</key>
|
|
231
|
-
<string>${xmlEscape(LOG_FILE)}</string>
|
|
232
|
-
</dict>
|
|
233
|
-
</plist>
|
|
214
|
+
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
215
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
216
|
+
<plist version="1.0">
|
|
217
|
+
<dict>
|
|
218
|
+
<key>Label</key>
|
|
219
|
+
<string>${MACOS_LAUNCH_AGENT_LABEL}</string>
|
|
220
|
+
<key>ProgramArguments</key>
|
|
221
|
+
<array>
|
|
222
|
+
${xmlArgs}
|
|
223
|
+
</array>
|
|
224
|
+
<key>RunAtLoad</key>
|
|
225
|
+
<true/>
|
|
226
|
+
<key>KeepAlive</key>
|
|
227
|
+
<false/>
|
|
228
|
+
<key>StandardOutPath</key>
|
|
229
|
+
<string>${xmlEscape(LOG_FILE)}</string>
|
|
230
|
+
<key>StandardErrorPath</key>
|
|
231
|
+
<string>${xmlEscape(LOG_FILE)}</string>
|
|
232
|
+
</dict>
|
|
233
|
+
</plist>
|
|
234
234
|
`;
|
|
235
235
|
}
|
|
236
236
|
function enableMacAutostart(options) {
|