@pixelbyte-software/pixcode 1.51.2 → 1.51.4
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-B9N-gfOQ.css +32 -0
- package/dist/assets/{index-EN9ngyxf.js → index-HfGHXhD6.js} +175 -175
- 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/database/db.js +14 -2
- package/dist-server/server/database/db.js.map +1 -1
- package/dist-server/server/index.js +191 -31
- package/dist-server/server/index.js.map +1 -1
- package/dist-server/server/middleware/auth.js +16 -5
- package/dist-server/server/middleware/auth.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/auth.js +12 -5
- package/dist-server/server/routes/auth.js.map +1 -1
- package/dist-server/server/routes/commands.js +25 -25
- package/dist-server/server/routes/git.js +29 -17
- package/dist-server/server/routes/git.js.map +1 -1
- package/dist-server/server/routes/live-view.js +46 -46
- package/dist-server/server/routes/platformization.js +7 -6
- package/dist-server/server/routes/platformization.js.map +1 -1
- 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/platformization.js +58 -2
- package/dist-server/server/services/platformization.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 -167
- 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 +908 -895
- 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 +201 -30
- package/server/load-env.js +35 -35
- package/server/middleware/auth.js +171 -156
- 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 +154 -146
- 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 -1635
- 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 +198 -197
- 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 +844 -779
- 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
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MCP UTILITIES API ROUTES
|
|
3
|
-
* ========================
|
|
4
|
-
*
|
|
5
|
-
* API endpoints for MCP server detection and configuration utilities.
|
|
6
|
-
* These endpoints expose centralized MCP detection functionality.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import express from 'express';
|
|
10
|
-
|
|
11
|
-
const router = express.Router();
|
|
12
|
-
|
|
13
|
-
export default router;
|
|
1
|
+
/**
|
|
2
|
+
* MCP UTILITIES API ROUTES
|
|
3
|
+
* ========================
|
|
4
|
+
*
|
|
5
|
+
* API endpoints for MCP server detection and configuration utilities.
|
|
6
|
+
* These endpoints expose centralized MCP detection functionality.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import express from 'express';
|
|
10
|
+
|
|
11
|
+
const router = express.Router();
|
|
12
|
+
|
|
13
|
+
export default router;
|
|
@@ -1,62 +1,62 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Unified messages endpoint.
|
|
3
|
-
*
|
|
4
|
-
* GET /api/sessions/:sessionId/messages?provider=claude&projectName=foo&limit=50&offset=0
|
|
5
|
-
*
|
|
6
|
-
* Replaces the four provider-specific session message endpoints with a single route
|
|
7
|
-
* that delegates to the appropriate adapter via the provider registry.
|
|
8
|
-
*
|
|
9
|
-
* @module routes/messages
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
import express from 'express';
|
|
13
|
-
|
|
14
|
-
import { sessionsService } from '../modules/providers/services/sessions.service.js';
|
|
15
|
-
|
|
16
|
-
const router = express.Router();
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* GET /api/sessions/:sessionId/messages
|
|
20
|
-
*
|
|
21
|
-
* Auth: authenticateToken applied at mount level in index.js
|
|
22
|
-
*
|
|
23
|
-
* Query params:
|
|
24
|
-
* provider - 'claude' | 'cursor' | 'codex' | 'gemini' (default: 'claude')
|
|
25
|
-
* projectName - required for claude provider
|
|
26
|
-
* projectPath - required for cursor provider (absolute path used for cwdId hash)
|
|
27
|
-
* limit - page size (omit or null for all)
|
|
28
|
-
* offset - pagination offset (default: 0)
|
|
29
|
-
*/
|
|
30
|
-
router.get('/:sessionId/messages', async (req, res) => {
|
|
31
|
-
try {
|
|
32
|
-
const { sessionId } = req.params;
|
|
33
|
-
const provider = String(req.query.provider || 'claude').trim().toLowerCase();
|
|
34
|
-
const projectName = req.query.projectName || '';
|
|
35
|
-
const projectPath = req.query.projectPath || '';
|
|
36
|
-
const limitParam = req.query.limit;
|
|
37
|
-
const limit = limitParam !== undefined && limitParam !== null && limitParam !== ''
|
|
38
|
-
? parseInt(limitParam, 10)
|
|
39
|
-
: null;
|
|
40
|
-
const offset = parseInt(req.query.offset || '0', 10);
|
|
41
|
-
|
|
42
|
-
const availableProviders = sessionsService.listProviderIds();
|
|
43
|
-
if (!availableProviders.includes(provider)) {
|
|
44
|
-
const available = availableProviders.join(', ');
|
|
45
|
-
return res.status(400).json({ error: `Unknown provider: ${provider}. Available: ${available}` });
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
const result = await sessionsService.fetchHistory(provider, sessionId, {
|
|
49
|
-
projectName,
|
|
50
|
-
projectPath,
|
|
51
|
-
limit,
|
|
52
|
-
offset,
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
return res.json(result);
|
|
56
|
-
} catch (error) {
|
|
57
|
-
console.error('Error fetching unified messages:', error);
|
|
58
|
-
return res.status(500).json({ error: 'Failed to fetch messages' });
|
|
59
|
-
}
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
export default router;
|
|
1
|
+
/**
|
|
2
|
+
* Unified messages endpoint.
|
|
3
|
+
*
|
|
4
|
+
* GET /api/sessions/:sessionId/messages?provider=claude&projectName=foo&limit=50&offset=0
|
|
5
|
+
*
|
|
6
|
+
* Replaces the four provider-specific session message endpoints with a single route
|
|
7
|
+
* that delegates to the appropriate adapter via the provider registry.
|
|
8
|
+
*
|
|
9
|
+
* @module routes/messages
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import express from 'express';
|
|
13
|
+
|
|
14
|
+
import { sessionsService } from '../modules/providers/services/sessions.service.js';
|
|
15
|
+
|
|
16
|
+
const router = express.Router();
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* GET /api/sessions/:sessionId/messages
|
|
20
|
+
*
|
|
21
|
+
* Auth: authenticateToken applied at mount level in index.js
|
|
22
|
+
*
|
|
23
|
+
* Query params:
|
|
24
|
+
* provider - 'claude' | 'cursor' | 'codex' | 'gemini' (default: 'claude')
|
|
25
|
+
* projectName - required for claude provider
|
|
26
|
+
* projectPath - required for cursor provider (absolute path used for cwdId hash)
|
|
27
|
+
* limit - page size (omit or null for all)
|
|
28
|
+
* offset - pagination offset (default: 0)
|
|
29
|
+
*/
|
|
30
|
+
router.get('/:sessionId/messages', async (req, res) => {
|
|
31
|
+
try {
|
|
32
|
+
const { sessionId } = req.params;
|
|
33
|
+
const provider = String(req.query.provider || 'claude').trim().toLowerCase();
|
|
34
|
+
const projectName = req.query.projectName || '';
|
|
35
|
+
const projectPath = req.query.projectPath || '';
|
|
36
|
+
const limitParam = req.query.limit;
|
|
37
|
+
const limit = limitParam !== undefined && limitParam !== null && limitParam !== ''
|
|
38
|
+
? parseInt(limitParam, 10)
|
|
39
|
+
: null;
|
|
40
|
+
const offset = parseInt(req.query.offset || '0', 10);
|
|
41
|
+
|
|
42
|
+
const availableProviders = sessionsService.listProviderIds();
|
|
43
|
+
if (!availableProviders.includes(provider)) {
|
|
44
|
+
const available = availableProviders.join(', ');
|
|
45
|
+
return res.status(400).json({ error: `Unknown provider: ${provider}. Available: ${available}` });
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const result = await sessionsService.fetchHistory(provider, sessionId, {
|
|
49
|
+
projectName,
|
|
50
|
+
projectPath,
|
|
51
|
+
limit,
|
|
52
|
+
offset,
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
return res.json(result);
|
|
56
|
+
} catch (error) {
|
|
57
|
+
console.error('Error fetching unified messages:', error);
|
|
58
|
+
return res.status(500).json({ error: 'Failed to fetch messages' });
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
export default router;
|
package/server/routes/network.js
CHANGED
|
@@ -1,125 +1,125 @@
|
|
|
1
|
-
import os from 'os';
|
|
2
|
-
|
|
3
|
-
import express from 'express';
|
|
4
|
-
|
|
5
|
-
import {
|
|
6
|
-
getTunnelState,
|
|
7
|
-
getUpnpState,
|
|
8
|
-
startTunnel,
|
|
9
|
-
stopTunnel,
|
|
10
|
-
} from '../services/external-access.js';
|
|
11
|
-
|
|
12
|
-
const router = express.Router();
|
|
13
|
-
|
|
14
|
-
// Accept any env key the rest of the server honors. Keep this aligned with server/cli.js.
|
|
15
|
-
const resolveServerPort = () => {
|
|
16
|
-
const raw = process.env.SERVER_PORT || process.env.PORT || '3001';
|
|
17
|
-
const port = Number(raw);
|
|
18
|
-
return Number.isFinite(port) && port > 0 ? port : 3001;
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
// Filter to usable LAN addresses. We skip:
|
|
22
|
-
// - internal (loopback) addresses, since QR-ing "127.0.0.1" is useless for a phone
|
|
23
|
-
// - link-local IPv6, since pasting "fe80::…%iface" into a phone browser won't resolve
|
|
24
|
-
// - IPv6 addresses in general for the first pass (most users want the v4 QR)
|
|
25
|
-
const listLanEndpoints = () => {
|
|
26
|
-
const interfaces = os.networkInterfaces();
|
|
27
|
-
const endpoints = [];
|
|
28
|
-
|
|
29
|
-
for (const [ifaceName, addrs] of Object.entries(interfaces)) {
|
|
30
|
-
if (!addrs) continue;
|
|
31
|
-
for (const addr of addrs) {
|
|
32
|
-
if (addr.internal) continue;
|
|
33
|
-
if (addr.family !== 'IPv4' && addr.family !== 4) continue;
|
|
34
|
-
endpoints.push({
|
|
35
|
-
host: addr.address,
|
|
36
|
-
label: ifaceName,
|
|
37
|
-
family: 'IPv4',
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
return endpoints;
|
|
43
|
-
};
|
|
44
|
-
|
|
45
|
-
router.get('/endpoints', (req, res) => {
|
|
46
|
-
try {
|
|
47
|
-
const port = resolveServerPort();
|
|
48
|
-
const endpoints = listLanEndpoints().map((entry) => ({
|
|
49
|
-
...entry,
|
|
50
|
-
url: `http://${entry.host}:${port}`,
|
|
51
|
-
}));
|
|
52
|
-
|
|
53
|
-
res.json({
|
|
54
|
-
port,
|
|
55
|
-
hostname: os.hostname(),
|
|
56
|
-
endpoints,
|
|
57
|
-
});
|
|
58
|
-
} catch (error) {
|
|
59
|
-
console.error('Error listing network endpoints:', error);
|
|
60
|
-
res.status(500).json({ error: 'Failed to list network endpoints' });
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
// ============================================================================
|
|
65
|
-
// External access (UPnP + tunnel)
|
|
66
|
-
// ============================================================================
|
|
67
|
-
|
|
68
|
-
router.get('/external', (req, res) => {
|
|
69
|
-
try {
|
|
70
|
-
res.json({
|
|
71
|
-
upnp: getUpnpState(),
|
|
72
|
-
tunnel: getTunnelState(),
|
|
73
|
-
});
|
|
74
|
-
} catch (error) {
|
|
75
|
-
console.error('Error reading external-access state:', error);
|
|
76
|
-
res.status(500).json({ error: 'Failed to read external access state' });
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
// UPnP endpoints removed in v1.32 (see external-access.js for rationale).
|
|
81
|
-
// Clients hitting /upnp get a 410 so the UI can show a clear "moved to
|
|
82
|
-
// tunnel" hint without mistaking the absence for a transient 404.
|
|
83
|
-
router.post('/upnp', (_req, res) => {
|
|
84
|
-
res.status(410).json({
|
|
85
|
-
error: 'UPnP removed in v1.32 — use cloudflared or ngrok tunnels instead',
|
|
86
|
-
upnp: getUpnpState(),
|
|
87
|
-
});
|
|
88
|
-
});
|
|
89
|
-
router.delete('/upnp', (_req, res) => {
|
|
90
|
-
res.status(410).json({
|
|
91
|
-
error: 'UPnP removed in v1.32 — use cloudflared or ngrok tunnels instead',
|
|
92
|
-
upnp: getUpnpState(),
|
|
93
|
-
});
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
router.post('/tunnel', async (req, res) => {
|
|
97
|
-
const port = resolveServerPort();
|
|
98
|
-
try {
|
|
99
|
-
const state = await startTunnel({ port, persistPreference: true });
|
|
100
|
-
res.json({ success: true, tunnel: state });
|
|
101
|
-
} catch (error) {
|
|
102
|
-
console.error('Tunnel start failed:', error);
|
|
103
|
-
// 424 Failed Dependency is the best match for "we can't start because a
|
|
104
|
-
// required external binary is missing" — it tells the UI to show the
|
|
105
|
-
// "install cloudflared/ngrok" hint rather than a generic server error.
|
|
106
|
-
const status = error?.code === 'ENOENT_TUNNEL' ? 424 : 502;
|
|
107
|
-
res.status(status).json({
|
|
108
|
-
error: error?.message || 'Tunnel start failed',
|
|
109
|
-
installHint: error?.installHint,
|
|
110
|
-
tunnel: getTunnelState(),
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
});
|
|
114
|
-
|
|
115
|
-
router.delete('/tunnel', async (req, res) => {
|
|
116
|
-
try {
|
|
117
|
-
const state = await stopTunnel({ persistPreference: true });
|
|
118
|
-
res.json({ success: true, tunnel: state });
|
|
119
|
-
} catch (error) {
|
|
120
|
-
console.error('Tunnel stop failed:', error);
|
|
121
|
-
res.status(502).json({ error: error?.message || 'Tunnel stop failed', tunnel: getTunnelState() });
|
|
122
|
-
}
|
|
123
|
-
});
|
|
124
|
-
|
|
125
|
-
export default router;
|
|
1
|
+
import os from 'os';
|
|
2
|
+
|
|
3
|
+
import express from 'express';
|
|
4
|
+
|
|
5
|
+
import {
|
|
6
|
+
getTunnelState,
|
|
7
|
+
getUpnpState,
|
|
8
|
+
startTunnel,
|
|
9
|
+
stopTunnel,
|
|
10
|
+
} from '../services/external-access.js';
|
|
11
|
+
|
|
12
|
+
const router = express.Router();
|
|
13
|
+
|
|
14
|
+
// Accept any env key the rest of the server honors. Keep this aligned with server/cli.js.
|
|
15
|
+
const resolveServerPort = () => {
|
|
16
|
+
const raw = process.env.SERVER_PORT || process.env.PORT || '3001';
|
|
17
|
+
const port = Number(raw);
|
|
18
|
+
return Number.isFinite(port) && port > 0 ? port : 3001;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
// Filter to usable LAN addresses. We skip:
|
|
22
|
+
// - internal (loopback) addresses, since QR-ing "127.0.0.1" is useless for a phone
|
|
23
|
+
// - link-local IPv6, since pasting "fe80::…%iface" into a phone browser won't resolve
|
|
24
|
+
// - IPv6 addresses in general for the first pass (most users want the v4 QR)
|
|
25
|
+
const listLanEndpoints = () => {
|
|
26
|
+
const interfaces = os.networkInterfaces();
|
|
27
|
+
const endpoints = [];
|
|
28
|
+
|
|
29
|
+
for (const [ifaceName, addrs] of Object.entries(interfaces)) {
|
|
30
|
+
if (!addrs) continue;
|
|
31
|
+
for (const addr of addrs) {
|
|
32
|
+
if (addr.internal) continue;
|
|
33
|
+
if (addr.family !== 'IPv4' && addr.family !== 4) continue;
|
|
34
|
+
endpoints.push({
|
|
35
|
+
host: addr.address,
|
|
36
|
+
label: ifaceName,
|
|
37
|
+
family: 'IPv4',
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return endpoints;
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
router.get('/endpoints', (req, res) => {
|
|
46
|
+
try {
|
|
47
|
+
const port = resolveServerPort();
|
|
48
|
+
const endpoints = listLanEndpoints().map((entry) => ({
|
|
49
|
+
...entry,
|
|
50
|
+
url: `http://${entry.host}:${port}`,
|
|
51
|
+
}));
|
|
52
|
+
|
|
53
|
+
res.json({
|
|
54
|
+
port,
|
|
55
|
+
hostname: os.hostname(),
|
|
56
|
+
endpoints,
|
|
57
|
+
});
|
|
58
|
+
} catch (error) {
|
|
59
|
+
console.error('Error listing network endpoints:', error);
|
|
60
|
+
res.status(500).json({ error: 'Failed to list network endpoints' });
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
// ============================================================================
|
|
65
|
+
// External access (UPnP + tunnel)
|
|
66
|
+
// ============================================================================
|
|
67
|
+
|
|
68
|
+
router.get('/external', (req, res) => {
|
|
69
|
+
try {
|
|
70
|
+
res.json({
|
|
71
|
+
upnp: getUpnpState(),
|
|
72
|
+
tunnel: getTunnelState(),
|
|
73
|
+
});
|
|
74
|
+
} catch (error) {
|
|
75
|
+
console.error('Error reading external-access state:', error);
|
|
76
|
+
res.status(500).json({ error: 'Failed to read external access state' });
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
// UPnP endpoints removed in v1.32 (see external-access.js for rationale).
|
|
81
|
+
// Clients hitting /upnp get a 410 so the UI can show a clear "moved to
|
|
82
|
+
// tunnel" hint without mistaking the absence for a transient 404.
|
|
83
|
+
router.post('/upnp', (_req, res) => {
|
|
84
|
+
res.status(410).json({
|
|
85
|
+
error: 'UPnP removed in v1.32 — use cloudflared or ngrok tunnels instead',
|
|
86
|
+
upnp: getUpnpState(),
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
router.delete('/upnp', (_req, res) => {
|
|
90
|
+
res.status(410).json({
|
|
91
|
+
error: 'UPnP removed in v1.32 — use cloudflared or ngrok tunnels instead',
|
|
92
|
+
upnp: getUpnpState(),
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
router.post('/tunnel', async (req, res) => {
|
|
97
|
+
const port = resolveServerPort();
|
|
98
|
+
try {
|
|
99
|
+
const state = await startTunnel({ port, persistPreference: true });
|
|
100
|
+
res.json({ success: true, tunnel: state });
|
|
101
|
+
} catch (error) {
|
|
102
|
+
console.error('Tunnel start failed:', error);
|
|
103
|
+
// 424 Failed Dependency is the best match for "we can't start because a
|
|
104
|
+
// required external binary is missing" — it tells the UI to show the
|
|
105
|
+
// "install cloudflared/ngrok" hint rather than a generic server error.
|
|
106
|
+
const status = error?.code === 'ENOENT_TUNNEL' ? 424 : 502;
|
|
107
|
+
res.status(status).json({
|
|
108
|
+
error: error?.message || 'Tunnel start failed',
|
|
109
|
+
installHint: error?.installHint,
|
|
110
|
+
tunnel: getTunnelState(),
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
router.delete('/tunnel', async (req, res) => {
|
|
116
|
+
try {
|
|
117
|
+
const state = await stopTunnel({ persistPreference: true });
|
|
118
|
+
res.json({ success: true, tunnel: state });
|
|
119
|
+
} catch (error) {
|
|
120
|
+
console.error('Tunnel stop failed:', error);
|
|
121
|
+
res.status(502).json({ error: error?.message || 'Tunnel stop failed', tunnel: getTunnelState() });
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
export default router;
|