@cloudcli-ai/cloudcli 1.36.3 → 1.37.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/dist/assets/index-D3jfzuKN.css +32 -0
- package/dist/assets/index-DTMWjJj8.js +1550 -0
- package/dist/index.html +2 -2
- package/dist-server/server/constants/config.js.map +1 -1
- package/dist-server/server/index.js +73 -1224
- package/dist-server/server/index.js.map +1 -1
- package/dist-server/server/load-env.js +17 -4
- package/dist-server/server/load-env.js.map +1 -1
- package/dist-server/server/modules/agent/agent.module.js +37 -0
- package/dist-server/server/modules/agent/agent.module.js.map +1 -0
- package/dist-server/server/modules/agent/agent.routes.js +1161 -0
- package/dist-server/server/modules/agent/agent.routes.js.map +1 -0
- package/dist-server/server/modules/agent/index.js +3 -0
- package/dist-server/server/modules/agent/index.js.map +1 -0
- package/dist-server/server/modules/agent/tests/agent.routes.test.js +176 -0
- package/dist-server/server/modules/agent/tests/agent.routes.test.js.map +1 -0
- package/dist-server/server/modules/assets/assets.routes.js +56 -15
- package/dist-server/server/modules/assets/assets.routes.js.map +1 -1
- package/dist-server/server/modules/assets/index.js +2 -2
- package/dist-server/server/modules/assets/index.js.map +1 -1
- package/dist-server/server/modules/assets/services/image-assets.service.js +39 -1
- package/dist-server/server/modules/assets/services/image-assets.service.js.map +1 -1
- package/dist-server/server/modules/assets/tests/image-assets.service.test.js +21 -1
- package/dist-server/server/modules/assets/tests/image-assets.service.test.js.map +1 -1
- package/dist-server/server/{middleware/auth.js → modules/auth/auth.middleware.js} +30 -8
- package/dist-server/server/modules/auth/auth.middleware.js.map +1 -0
- package/dist-server/server/modules/auth/auth.module.js +29 -0
- package/dist-server/server/modules/auth/auth.module.js.map +1 -0
- package/dist-server/server/modules/auth/auth.routes.js +45 -0
- package/dist-server/server/modules/auth/auth.routes.js.map +1 -0
- package/dist-server/server/modules/auth/auth.service.js +113 -0
- package/dist-server/server/modules/auth/auth.service.js.map +1 -0
- package/dist-server/server/modules/auth/index.js +9 -0
- package/dist-server/server/modules/auth/index.js.map +1 -0
- package/dist-server/server/modules/auth/tests/auth.service.test.js +80 -0
- package/dist-server/server/modules/auth/tests/auth.service.test.js.map +1 -0
- package/dist-server/server/{browser-use-mcp.js → modules/browser-use/browser-use-mcp.js} +3 -1
- package/dist-server/server/modules/browser-use/browser-use-mcp.js.map +1 -0
- package/dist-server/server/modules/browser-use/browser-use.service.js +3 -4
- package/dist-server/server/modules/browser-use/browser-use.service.js.map +1 -1
- package/dist-server/server/modules/browser-use/index.js +9 -0
- package/dist-server/server/modules/browser-use/index.js.map +1 -0
- package/dist-server/server/modules/cli/cli.js +11 -0
- package/dist-server/server/modules/cli/cli.js.map +1 -0
- package/dist-server/server/modules/cli/cli.module.js +86 -0
- package/dist-server/server/modules/cli/cli.module.js.map +1 -0
- package/dist-server/server/modules/cli/cli.service.js +244 -0
- package/dist-server/server/modules/cli/cli.service.js.map +1 -0
- package/dist-server/server/modules/cli/index.js +3 -0
- package/dist-server/server/modules/cli/index.js.map +1 -0
- package/dist-server/server/modules/cli/sandbox.service.js +332 -0
- package/dist-server/server/modules/cli/sandbox.service.js.map +1 -0
- package/dist-server/server/modules/cli/tests/cli.service.test.js +78 -0
- package/dist-server/server/modules/cli/tests/cli.service.test.js.map +1 -0
- package/dist-server/server/modules/cli/tests/sandbox.service.test.js +55 -0
- package/dist-server/server/modules/cli/tests/sandbox.service.test.js.map +1 -0
- package/dist-server/server/modules/commands/commands.module.js +20 -0
- package/dist-server/server/modules/commands/commands.module.js.map +1 -0
- package/dist-server/server/modules/commands/commands.routes.js +497 -0
- package/dist-server/server/modules/commands/commands.routes.js.map +1 -0
- package/dist-server/server/modules/commands/index.js +3 -0
- package/dist-server/server/modules/commands/index.js.map +1 -0
- package/dist-server/server/modules/commands/tests/commands.test.js +91 -0
- package/dist-server/server/modules/commands/tests/commands.test.js.map +1 -0
- package/dist-server/server/modules/database/index.js +3 -0
- package/dist-server/server/modules/database/index.js.map +1 -1
- package/dist-server/server/modules/database/migrations.js +31 -1
- package/dist-server/server/modules/database/migrations.js.map +1 -1
- package/dist-server/server/modules/database/repositories/provider-models.js +112 -0
- package/dist-server/server/modules/database/repositories/provider-models.js.map +1 -0
- package/dist-server/server/modules/database/repositories/sessions.db.js +76 -7
- package/dist-server/server/modules/database/repositories/sessions.db.js.map +1 -1
- package/dist-server/server/modules/database/schema.js +29 -0
- package/dist-server/server/modules/database/schema.js.map +1 -1
- package/dist-server/server/modules/database/tests/provider-models.db.integration.test.js +102 -0
- package/dist-server/server/modules/database/tests/provider-models.db.integration.test.js.map +1 -0
- package/dist-server/server/modules/database/tests/sessions-provider-mapping.test.js +2 -1
- package/dist-server/server/modules/database/tests/sessions-provider-mapping.test.js.map +1 -1
- package/dist-server/server/modules/database/tests/sessions.db.integration.test.js +22 -0
- package/dist-server/server/modules/database/tests/sessions.db.integration.test.js.map +1 -1
- package/dist-server/server/modules/file-tree/file-tree.module.js +95 -0
- package/dist-server/server/modules/file-tree/file-tree.module.js.map +1 -0
- package/dist-server/server/modules/file-tree/file-tree.routes.js +208 -0
- package/dist-server/server/modules/file-tree/file-tree.routes.js.map +1 -0
- package/dist-server/server/modules/file-tree/file-tree.service.js +576 -0
- package/dist-server/server/modules/file-tree/file-tree.service.js.map +1 -0
- package/dist-server/server/modules/file-tree/index.js +3 -0
- package/dist-server/server/modules/file-tree/index.js.map +1 -0
- package/dist-server/server/modules/file-tree/tests/file-tree.routes.test.js +123 -0
- package/dist-server/server/modules/file-tree/tests/file-tree.routes.test.js.map +1 -0
- package/dist-server/server/modules/file-tree/tests/file-tree.service.test.js +260 -0
- package/dist-server/server/modules/file-tree/tests/file-tree.service.test.js.map +1 -0
- package/dist-server/server/modules/git/git-parsing.service.js +61 -0
- package/dist-server/server/modules/git/git-parsing.service.js.map +1 -0
- package/dist-server/server/modules/git/git.module.js +14 -0
- package/dist-server/server/modules/git/git.module.js.map +1 -0
- package/dist-server/server/modules/git/git.routes.js +1339 -0
- package/dist-server/server/modules/git/git.routes.js.map +1 -0
- package/dist-server/server/modules/git/index.js +3 -0
- package/dist-server/server/modules/git/index.js.map +1 -0
- package/dist-server/server/modules/git/tests/git-init.routes.test.js +48 -0
- package/dist-server/server/modules/git/tests/git-init.routes.test.js.map +1 -0
- package/dist-server/server/{routes → modules/git/tests}/git.test.js +1 -1
- package/dist-server/server/modules/git/tests/git.test.js.map +1 -0
- package/dist-server/server/modules/notifications/index.js +15 -1
- package/dist-server/server/modules/notifications/index.js.map +1 -1
- package/dist-server/server/modules/notifications/tests/notification-orchestrator.integration.test.js +44 -0
- package/dist-server/server/modules/notifications/tests/notification-orchestrator.integration.test.js.map +1 -0
- package/dist-server/server/{services/vapid-keys.js → modules/notifications/vapid-keys.service.js} +3 -2
- package/dist-server/server/modules/notifications/vapid-keys.service.js.map +1 -0
- package/dist-server/server/modules/plugins/index.js +9 -0
- package/dist-server/server/modules/plugins/index.js.map +1 -0
- package/dist-server/server/{utils/plugin-process-manager.js → modules/plugins/plugin-process.service.js} +3 -2
- package/dist-server/server/modules/plugins/plugin-process.service.js.map +1 -0
- package/dist-server/server/{utils/plugin-loader.js → modules/plugins/plugin-registry.service.js} +2 -1
- package/dist-server/server/modules/plugins/plugin-registry.service.js.map +1 -0
- package/dist-server/server/modules/plugins/plugins.module.js +30 -0
- package/dist-server/server/modules/plugins/plugins.module.js.map +1 -0
- package/dist-server/server/modules/plugins/plugins.routes.js +70 -0
- package/dist-server/server/modules/plugins/plugins.routes.js.map +1 -0
- package/dist-server/server/modules/plugins/plugins.service.js +123 -0
- package/dist-server/server/modules/plugins/plugins.service.js.map +1 -0
- package/dist-server/server/modules/plugins/tests/plugins.service.test.js +28 -0
- package/dist-server/server/modules/plugins/tests/plugins.service.test.js.map +1 -0
- package/dist-server/server/modules/projects/index.js +5 -0
- package/dist-server/server/modules/projects/index.js.map +1 -1
- package/dist-server/server/modules/providers/index.js +3 -0
- package/dist-server/server/modules/providers/index.js.map +1 -1
- package/dist-server/server/modules/providers/list/claude/claude-auth.provider.js +6 -0
- package/dist-server/server/modules/providers/list/claude/claude-auth.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/claude/claude-models.provider.js +47 -18
- package/dist-server/server/modules/providers/list/claude/claude-models.provider.js.map +1 -1
- package/dist-server/server/{claude-sdk.js → modules/providers/list/claude/claude-runtime.provider.js} +69 -55
- package/dist-server/server/modules/providers/list/claude/claude-runtime.provider.js.map +1 -0
- package/dist-server/server/modules/providers/list/claude/claude-session-synchronizer.provider.js +6 -4
- package/dist-server/server/modules/providers/list/claude/claude-session-synchronizer.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/claude/claude-sessions.provider.js +23 -4
- package/dist-server/server/modules/providers/list/claude/claude-sessions.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/claude/claude.provider.js +2 -0
- package/dist-server/server/modules/providers/list/claude/claude.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/codex/codex-models.provider.js +59 -75
- package/dist-server/server/modules/providers/list/codex/codex-models.provider.js.map +1 -1
- package/dist-server/server/{openai-codex.js → modules/providers/list/codex/codex-runtime.provider.js} +48 -34
- package/dist-server/server/modules/providers/list/codex/codex-runtime.provider.js.map +1 -0
- package/dist-server/server/modules/providers/list/codex/codex-session-synchronizer.provider.js +1 -54
- package/dist-server/server/modules/providers/list/codex/codex-session-synchronizer.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/codex/codex-sessions.provider.js +290 -6
- package/dist-server/server/modules/providers/list/codex/codex-sessions.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/codex/codex-skills.provider.js +5 -0
- package/dist-server/server/modules/providers/list/codex/codex-skills.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/codex/codex.provider.js +2 -0
- package/dist-server/server/modules/providers/list/codex/codex.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/cursor/cursor-models.provider.js +33 -673
- package/dist-server/server/modules/providers/list/cursor/cursor-models.provider.js.map +1 -1
- package/dist-server/server/{cursor-cli.js → modules/providers/list/cursor/cursor-runtime.provider.js} +40 -28
- package/dist-server/server/modules/providers/list/cursor/cursor-runtime.provider.js.map +1 -0
- package/dist-server/server/modules/providers/list/cursor/cursor-sessions.provider.js +21 -14
- package/dist-server/server/modules/providers/list/cursor/cursor-sessions.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/cursor/cursor.provider.js +2 -0
- package/dist-server/server/modules/providers/list/cursor/cursor.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/opencode/opencode-models.provider.js +112 -333
- package/dist-server/server/modules/providers/list/opencode/opencode-models.provider.js.map +1 -1
- package/dist-server/server/{opencode-cli.js → modules/providers/list/opencode/opencode-runtime.provider.js} +38 -25
- package/dist-server/server/modules/providers/list/opencode/opencode-runtime.provider.js.map +1 -0
- package/dist-server/server/{opencode-cli.test.js → modules/providers/list/opencode/opencode-runtime.provider.test.js} +27 -4
- package/dist-server/server/modules/providers/list/opencode/opencode-runtime.provider.test.js.map +1 -0
- package/dist-server/server/modules/providers/list/opencode/opencode-session-synchronizer.provider.js +0 -12
- package/dist-server/server/modules/providers/list/opencode/opencode-session-synchronizer.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/opencode/opencode-sessions.provider.js +11 -5
- package/dist-server/server/modules/providers/list/opencode/opencode-sessions.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/opencode/opencode.provider.js +2 -0
- package/dist-server/server/modules/providers/list/opencode/opencode.provider.js.map +1 -1
- package/dist-server/server/modules/providers/provider.routes.js +169 -37
- package/dist-server/server/modules/providers/provider.routes.js.map +1 -1
- package/dist-server/server/modules/providers/services/provider-capabilities.service.js +5 -1
- package/dist-server/server/modules/providers/services/provider-capabilities.service.js.map +1 -1
- package/dist-server/server/modules/providers/services/provider-models.service.js +247 -184
- package/dist-server/server/modules/providers/services/provider-models.service.js.map +1 -1
- package/dist-server/server/modules/providers/services/provider-runtime.service.js +66 -0
- package/dist-server/server/modules/providers/services/provider-runtime.service.js.map +1 -0
- package/dist-server/server/modules/providers/services/provider-token-usage.service.js +268 -0
- package/dist-server/server/modules/providers/services/provider-token-usage.service.js.map +1 -0
- package/dist-server/server/modules/providers/services/session-conversations-search.service.js +12 -4
- package/dist-server/server/modules/providers/services/session-conversations-search.service.js.map +1 -1
- package/dist-server/server/modules/providers/services/sessions-watcher.service.js +2 -0
- package/dist-server/server/modules/providers/services/sessions-watcher.service.js.map +1 -1
- package/dist-server/server/modules/providers/services/sessions.service.js +116 -3
- package/dist-server/server/modules/providers/services/sessions.service.js.map +1 -1
- package/dist-server/server/modules/providers/shared/base/abstract.provider.js +2 -3
- package/dist-server/server/modules/providers/shared/base/abstract.provider.js.map +1 -1
- package/dist-server/server/modules/providers/tests/claude-auth.test.js +122 -0
- package/dist-server/server/modules/providers/tests/claude-auth.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/claude-sessions.test.js +44 -0
- package/dist-server/server/modules/providers/tests/claude-sessions.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/codex-sessions.test.js +76 -4
- package/dist-server/server/modules/providers/tests/codex-sessions.test.js.map +1 -1
- package/dist-server/server/modules/providers/tests/opencode-models.test.js +15 -126
- package/dist-server/server/modules/providers/tests/opencode-models.test.js.map +1 -1
- package/dist-server/server/modules/providers/tests/opencode-sessions.test.js +5 -5
- package/dist-server/server/modules/providers/tests/opencode-sessions.test.js.map +1 -1
- package/dist-server/server/modules/providers/tests/{provider-image-history.test.js → provider-attachment-history.test.js} +60 -2
- package/dist-server/server/modules/providers/tests/provider-attachment-history.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/provider-models.service.test.js +241 -271
- package/dist-server/server/modules/providers/tests/provider-models.service.test.js.map +1 -1
- package/dist-server/server/modules/providers/tests/provider-runtime.service.test.js +126 -0
- package/dist-server/server/modules/providers/tests/provider-runtime.service.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/provider-token-usage.service.test.js +166 -0
- package/dist-server/server/modules/providers/tests/provider-token-usage.service.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/provider.routes.test.js +126 -0
- package/dist-server/server/modules/providers/tests/provider.routes.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/sessions-details.test.js +62 -0
- package/dist-server/server/modules/providers/tests/sessions-details.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/sessions.service.test.js +87 -0
- package/dist-server/server/modules/providers/tests/sessions.service.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/skills.test.js +4 -2
- package/dist-server/server/modules/providers/tests/skills.test.js.map +1 -1
- package/dist-server/server/modules/settings/index.js +3 -0
- package/dist-server/server/modules/settings/index.js.map +1 -0
- package/dist-server/server/modules/settings/settings.module.js +35 -0
- package/dist-server/server/modules/settings/settings.module.js.map +1 -0
- package/dist-server/server/modules/settings/settings.routes.js +34 -0
- package/dist-server/server/modules/settings/settings.routes.js.map +1 -0
- package/dist-server/server/modules/settings/settings.service.js +116 -0
- package/dist-server/server/modules/settings/settings.service.js.map +1 -0
- package/dist-server/server/modules/settings/tests/settings.service.test.js +48 -0
- package/dist-server/server/modules/settings/tests/settings.service.test.js.map +1 -0
- package/dist-server/server/modules/system/index.js +3 -0
- package/dist-server/server/modules/system/index.js.map +1 -0
- package/dist-server/server/modules/system/system.module.js +44 -0
- package/dist-server/server/modules/system/system.module.js.map +1 -0
- package/dist-server/server/modules/system/system.routes.js +16 -0
- package/dist-server/server/modules/system/system.routes.js.map +1 -0
- package/dist-server/server/modules/system/system.service.js +45 -0
- package/dist-server/server/modules/system/system.service.js.map +1 -0
- package/dist-server/server/modules/system/tests/system.service.test.js +100 -0
- package/dist-server/server/modules/system/tests/system.service.test.js.map +1 -0
- package/dist-server/server/modules/taskmaster/index.js +3 -0
- package/dist-server/server/modules/taskmaster/index.js.map +1 -0
- package/dist-server/server/modules/taskmaster/taskmaster.module.js +20 -0
- package/dist-server/server/modules/taskmaster/taskmaster.module.js.map +1 -0
- package/dist-server/server/modules/taskmaster/taskmaster.routes.js +1372 -0
- package/dist-server/server/modules/taskmaster/taskmaster.routes.js.map +1 -0
- package/dist-server/server/modules/taskmaster/taskmaster.service.js +107 -0
- package/dist-server/server/modules/taskmaster/taskmaster.service.js.map +1 -0
- package/dist-server/server/modules/taskmaster/tests/taskmaster.routes.test.js +132 -0
- package/dist-server/server/modules/taskmaster/tests/taskmaster.routes.test.js.map +1 -0
- package/dist-server/server/modules/taskmaster/tests/taskmaster.service.test.js +85 -0
- package/dist-server/server/modules/taskmaster/tests/taskmaster.service.test.js.map +1 -0
- package/dist-server/server/modules/user/index.js +3 -0
- package/dist-server/server/modules/user/index.js.map +1 -0
- package/dist-server/server/modules/user/tests/user.service.test.js +53 -0
- package/dist-server/server/modules/user/tests/user.service.test.js.map +1 -0
- package/dist-server/server/modules/user/user.module.js +47 -0
- package/dist-server/server/modules/user/user.module.js.map +1 -0
- package/dist-server/server/modules/user/user.routes.js +44 -0
- package/dist-server/server/modules/user/user.routes.js.map +1 -0
- package/dist-server/server/modules/user/user.service.js +59 -0
- package/dist-server/server/modules/user/user.service.js.map +1 -0
- package/dist-server/server/modules/voice/index.js +3 -0
- package/dist-server/server/modules/voice/index.js.map +1 -0
- package/dist-server/server/modules/voice/tests/voice.service.test.js +86 -0
- package/dist-server/server/modules/voice/tests/voice.service.test.js.map +1 -0
- package/dist-server/server/modules/voice/voice.module.js +44 -0
- package/dist-server/server/modules/voice/voice.module.js.map +1 -0
- package/dist-server/server/modules/voice/voice.routes.js +87 -0
- package/dist-server/server/modules/voice/voice.routes.js.map +1 -0
- package/dist-server/server/modules/voice/voice.service.js +148 -0
- package/dist-server/server/modules/voice/voice.service.js.map +1 -0
- package/dist-server/server/modules/websocket/services/chat-session-writer.service.js +2 -2
- package/dist-server/server/modules/websocket/services/chat-websocket.service.js +44 -29
- package/dist-server/server/modules/websocket/services/chat-websocket.service.js.map +1 -1
- package/dist-server/server/modules/websocket/services/shell-websocket.service.js +76 -8
- package/dist-server/server/modules/websocket/services/shell-websocket.service.js.map +1 -1
- package/dist-server/server/modules/websocket/services/websocket-server.service.js +51 -20
- package/dist-server/server/modules/websocket/services/websocket-server.service.js.map +1 -1
- package/dist-server/server/modules/websocket/tests/{chat-image-filter.test.js → chat-attachment-filter.test.js} +10 -3
- package/dist-server/server/modules/websocket/tests/chat-attachment-filter.test.js.map +1 -0
- package/dist-server/server/modules/websocket/tests/shell-websocket.service.test.js +97 -0
- package/dist-server/server/modules/websocket/tests/shell-websocket.service.test.js.map +1 -0
- package/dist-server/server/modules/websocket/tests/websocket-heartbeat.service.test.js +61 -0
- package/dist-server/server/modules/websocket/tests/websocket-heartbeat.service.test.js.map +1 -0
- package/dist-server/server/modules/worktrees/index.js +3 -0
- package/dist-server/server/modules/worktrees/index.js.map +1 -0
- package/dist-server/server/modules/worktrees/services/worktree-create-and-open.service.js +37 -0
- package/dist-server/server/modules/worktrees/services/worktree-create-and-open.service.js.map +1 -0
- package/dist-server/server/modules/worktrees/services/worktree-create.service.js +67 -0
- package/dist-server/server/modules/worktrees/services/worktree-create.service.js.map +1 -0
- package/dist-server/server/modules/worktrees/services/worktree-git.service.js +172 -0
- package/dist-server/server/modules/worktrees/services/worktree-git.service.js.map +1 -0
- package/dist-server/server/modules/worktrees/services/worktree-list.service.js +91 -0
- package/dist-server/server/modules/worktrees/services/worktree-list.service.js.map +1 -0
- package/dist-server/server/modules/worktrees/services/worktree-merge.service.js +118 -0
- package/dist-server/server/modules/worktrees/services/worktree-merge.service.js.map +1 -0
- package/dist-server/server/modules/worktrees/services/worktree-open.service.js +58 -0
- package/dist-server/server/modules/worktrees/services/worktree-open.service.js.map +1 -0
- package/dist-server/server/modules/worktrees/services/worktree-remove.service.js +65 -0
- package/dist-server/server/modules/worktrees/services/worktree-remove.service.js.map +1 -0
- package/dist-server/server/modules/worktrees/tests/worktree-create-and-open.service.test.js +58 -0
- package/dist-server/server/modules/worktrees/tests/worktree-create-and-open.service.test.js.map +1 -0
- package/dist-server/server/modules/worktrees/tests/worktree-create.service.test.js +85 -0
- package/dist-server/server/modules/worktrees/tests/worktree-create.service.test.js.map +1 -0
- package/dist-server/server/modules/worktrees/tests/worktree-git.service.test.js +58 -0
- package/dist-server/server/modules/worktrees/tests/worktree-git.service.test.js.map +1 -0
- package/dist-server/server/modules/worktrees/tests/worktree-list.service.test.js +34 -0
- package/dist-server/server/modules/worktrees/tests/worktree-list.service.test.js.map +1 -0
- package/dist-server/server/modules/worktrees/tests/worktree-merge.service.test.js +137 -0
- package/dist-server/server/modules/worktrees/tests/worktree-merge.service.test.js.map +1 -0
- package/dist-server/server/modules/worktrees/tests/worktree-open.service.test.js +99 -0
- package/dist-server/server/modules/worktrees/tests/worktree-open.service.test.js.map +1 -0
- package/dist-server/server/modules/worktrees/tests/worktree-remove.service.test.js +157 -0
- package/dist-server/server/modules/worktrees/tests/worktree-remove.service.test.js.map +1 -0
- package/dist-server/server/modules/worktrees/tests/worktrees.routes.test.js +167 -0
- package/dist-server/server/modules/worktrees/tests/worktrees.routes.test.js.map +1 -0
- package/dist-server/server/modules/worktrees/worktrees.module.js +97 -0
- package/dist-server/server/modules/worktrees/worktrees.module.js.map +1 -0
- package/dist-server/server/modules/worktrees/worktrees.routes.js +84 -0
- package/dist-server/server/modules/worktrees/worktrees.routes.js.map +1 -0
- package/dist-server/server/shared/image-attachments.js +90 -17
- package/dist-server/server/shared/image-attachments.js.map +1 -1
- package/dist-server/server/shared/tests/image-attachments.test.js +43 -1
- package/dist-server/server/shared/tests/image-attachments.test.js.map +1 -1
- package/dist-server/server/shared/utils.js +66 -142
- package/dist-server/server/shared/utils.js.map +1 -1
- package/package.json +9 -5
- package/server/index.ts +401 -0
- package/server/{load-env.js → load-env.ts} +18 -5
- package/server/modules/agent/agent.module.ts +51 -0
- package/server/modules/agent/agent.routes.ts +1287 -0
- package/server/modules/agent/index.ts +2 -0
- package/server/modules/agent/tests/agent.routes.test.ts +205 -0
- package/server/modules/assets/assets.routes.ts +63 -16
- package/server/modules/assets/index.ts +2 -2
- package/server/modules/assets/services/image-assets.service.ts +46 -1
- package/server/modules/assets/tests/image-assets.service.test.ts +28 -0
- package/server/{middleware/auth.js → modules/auth/auth.middleware.ts} +38 -7
- package/server/modules/auth/auth.module.ts +38 -0
- package/server/modules/auth/auth.routes.ts +57 -0
- package/server/modules/auth/auth.service.ts +155 -0
- package/server/modules/auth/index.ts +9 -0
- package/server/modules/auth/tests/auth.service.test.ts +95 -0
- package/server/{browser-use-mcp.ts → modules/browser-use/browser-use-mcp.ts} +3 -1
- package/server/modules/browser-use/browser-use.service.ts +3 -4
- package/server/modules/browser-use/index.ts +8 -0
- package/server/modules/cli/cli.module.ts +96 -0
- package/server/modules/cli/cli.service.ts +281 -0
- package/server/modules/cli/cli.ts +13 -0
- package/server/modules/cli/index.ts +2 -0
- package/server/modules/cli/sandbox.service.ts +413 -0
- package/server/modules/cli/tests/cli.service.test.ts +91 -0
- package/server/modules/cli/tests/sandbox.service.test.ts +61 -0
- package/server/modules/commands/commands.module.ts +22 -0
- package/server/{routes/commands.js → modules/commands/commands.routes.ts} +46 -38
- package/server/modules/commands/index.ts +2 -0
- package/server/modules/commands/tests/commands.test.ts +114 -0
- package/server/modules/database/index.ts +3 -0
- package/server/modules/database/migrations.ts +35 -0
- package/server/modules/database/repositories/provider-models.ts +168 -0
- package/server/modules/database/repositories/sessions.db.ts +103 -8
- package/server/modules/database/schema.ts +30 -0
- package/server/modules/database/tests/provider-models.db.integration.test.ts +125 -0
- package/server/modules/database/tests/sessions-provider-mapping.test.ts +2 -1
- package/server/modules/database/tests/sessions.db.integration.test.ts +32 -0
- package/server/modules/file-tree/file-tree.module.ts +116 -0
- package/server/modules/file-tree/file-tree.routes.ts +258 -0
- package/server/modules/file-tree/file-tree.service.ts +664 -0
- package/server/modules/file-tree/index.ts +2 -0
- package/server/modules/file-tree/tests/file-tree.routes.test.ts +157 -0
- package/server/modules/file-tree/tests/file-tree.service.test.ts +317 -0
- package/server/modules/git/git-parsing.service.ts +66 -0
- package/server/modules/git/git.module.ts +22 -0
- package/server/{routes/git.js → modules/git/git.routes.ts} +91 -132
- package/server/modules/git/index.ts +2 -0
- package/server/modules/git/tests/git-init.routes.test.ts +52 -0
- package/server/{routes/git.test.js → modules/git/tests/git.test.ts} +3 -3
- package/server/modules/notifications/index.ts +9 -0
- package/server/modules/notifications/tests/notification-orchestrator.integration.test.ts +55 -0
- package/server/{services/vapid-keys.js → modules/notifications/vapid-keys.service.ts} +3 -1
- package/server/modules/plugins/index.ts +9 -0
- package/server/{utils/plugin-process-manager.js → modules/plugins/plugin-process.service.ts} +3 -1
- package/server/{utils/plugin-loader.js → modules/plugins/plugin-registry.service.ts} +1 -0
- package/server/modules/plugins/plugins.module.ts +33 -0
- package/server/modules/plugins/plugins.routes.ts +66 -0
- package/server/modules/plugins/plugins.service.ts +147 -0
- package/server/modules/plugins/tests/plugins.service.test.ts +32 -0
- package/server/modules/projects/index.ts +5 -0
- package/server/modules/providers/README.md +41 -9
- package/server/modules/providers/index.ts +4 -0
- package/server/modules/providers/list/claude/claude-auth.provider.ts +8 -0
- package/server/modules/providers/list/claude/claude-models.provider.ts +47 -26
- package/server/{claude-sdk.js → modules/providers/list/claude/claude-runtime.provider.js} +73 -59
- package/server/modules/providers/list/claude/claude-session-synchronizer.provider.ts +6 -4
- package/server/modules/providers/list/claude/claude-sessions.provider.ts +27 -4
- package/server/modules/providers/list/claude/claude.provider.ts +3 -0
- package/server/modules/providers/list/codex/codex-models.provider.ts +58 -108
- package/server/{openai-codex.js → modules/providers/list/codex/codex-runtime.provider.js} +54 -36
- package/server/modules/providers/list/codex/codex-session-synchronizer.provider.ts +1 -60
- package/server/modules/providers/list/codex/codex-sessions.provider.ts +331 -7
- package/server/modules/providers/list/codex/codex-skills.provider.ts +5 -0
- package/server/modules/providers/list/codex/codex.provider.ts +3 -0
- package/server/modules/providers/list/cursor/cursor-models.provider.ts +32 -719
- package/server/{cursor-cli.js → modules/providers/list/cursor/cursor-runtime.provider.js} +58 -27
- package/server/modules/providers/list/cursor/cursor-sessions.provider.ts +26 -15
- package/server/modules/providers/list/cursor/cursor.provider.ts +3 -0
- package/server/modules/providers/list/opencode/opencode-models.provider.ts +112 -423
- package/server/{opencode-cli.js → modules/providers/list/opencode/opencode-runtime.provider.js} +56 -28
- package/server/{opencode-cli.test.js → modules/providers/list/opencode/opencode-runtime.provider.test.js} +41 -3
- package/server/modules/providers/list/opencode/opencode-session-synchronizer.provider.ts +0 -13
- package/server/modules/providers/list/opencode/opencode-sessions.provider.ts +13 -5
- package/server/modules/providers/list/opencode/opencode.provider.ts +3 -0
- package/server/modules/providers/provider.routes.ts +228 -39
- package/server/modules/providers/services/provider-capabilities.service.ts +7 -1
- package/server/modules/providers/services/provider-models.service.ts +312 -269
- package/server/modules/providers/services/provider-runtime.service.ts +108 -0
- package/server/modules/providers/services/provider-token-usage.service.ts +357 -0
- package/server/modules/providers/services/session-conversations-search.service.ts +12 -4
- package/server/modules/providers/services/sessions-watcher.service.ts +2 -0
- package/server/modules/providers/services/sessions.service.ts +166 -3
- package/server/modules/providers/shared/base/abstract.provider.ts +4 -3
- package/server/modules/providers/tests/claude-auth.test.ts +150 -0
- package/server/modules/providers/tests/claude-sessions.test.ts +61 -0
- package/server/modules/providers/tests/codex-sessions.test.ts +83 -4
- package/server/modules/providers/tests/opencode-models.test.ts +34 -135
- package/server/modules/providers/tests/opencode-sessions.test.ts +5 -5
- package/server/modules/providers/tests/{provider-image-history.test.ts → provider-attachment-history.test.ts} +68 -1
- package/server/modules/providers/tests/provider-models.service.test.ts +300 -296
- package/server/modules/providers/tests/provider-runtime.service.test.ts +138 -0
- package/server/modules/providers/tests/provider-token-usage.service.test.ts +186 -0
- package/server/modules/providers/tests/provider.routes.test.ts +183 -0
- package/server/modules/providers/tests/sessions-details.test.ts +73 -0
- package/server/modules/providers/tests/sessions.service.test.ts +127 -0
- package/server/modules/providers/tests/skills.test.ts +9 -2
- package/server/modules/settings/index.ts +2 -0
- package/server/modules/settings/settings.module.ts +50 -0
- package/server/modules/settings/settings.routes.ts +51 -0
- package/server/modules/settings/settings.service.ts +186 -0
- package/server/modules/settings/tests/settings.service.test.ts +54 -0
- package/server/modules/system/index.ts +2 -0
- package/server/modules/system/system.module.ts +62 -0
- package/server/modules/system/system.routes.ts +21 -0
- package/server/modules/system/system.service.ts +76 -0
- package/server/modules/system/tests/system.service.test.ts +118 -0
- package/server/modules/taskmaster/index.ts +2 -0
- package/server/modules/taskmaster/taskmaster.module.ts +24 -0
- package/server/modules/taskmaster/taskmaster.routes.ts +1482 -0
- package/server/modules/taskmaster/taskmaster.service.ts +132 -0
- package/server/modules/taskmaster/tests/taskmaster.routes.test.ts +144 -0
- package/server/modules/taskmaster/tests/taskmaster.service.test.ts +97 -0
- package/server/modules/user/index.ts +2 -0
- package/server/modules/user/tests/user.service.test.ts +61 -0
- package/server/modules/user/user.module.ts +58 -0
- package/server/modules/user/user.routes.ts +50 -0
- package/server/modules/user/user.service.ts +85 -0
- package/server/modules/voice/index.ts +2 -0
- package/server/modules/voice/tests/voice.service.test.ts +98 -0
- package/server/modules/voice/voice.module.ts +47 -0
- package/server/modules/voice/voice.routes.ts +113 -0
- package/server/modules/voice/voice.service.ts +192 -0
- package/server/modules/websocket/README.md +7 -7
- package/server/modules/websocket/services/chat-session-writer.service.ts +2 -2
- package/server/modules/websocket/services/chat-websocket.service.ts +77 -61
- package/server/modules/websocket/services/shell-websocket.service.ts +88 -12
- package/server/modules/websocket/services/websocket-server.service.ts +63 -19
- package/server/modules/websocket/tests/{chat-image-filter.test.ts → chat-attachment-filter.test.ts} +17 -2
- package/server/modules/websocket/tests/shell-websocket.service.test.ts +119 -0
- package/server/modules/websocket/tests/websocket-heartbeat.service.test.ts +78 -0
- package/server/modules/worktrees/index.ts +2 -0
- package/server/modules/worktrees/services/worktree-create-and-open.service.ts +53 -0
- package/server/modules/worktrees/services/worktree-create.service.ts +104 -0
- package/server/modules/worktrees/services/worktree-git.service.ts +207 -0
- package/server/modules/worktrees/services/worktree-list.service.ts +143 -0
- package/server/modules/worktrees/services/worktree-merge.service.ts +157 -0
- package/server/modules/worktrees/services/worktree-open.service.ts +85 -0
- package/server/modules/worktrees/services/worktree-remove.service.ts +88 -0
- package/server/modules/worktrees/tests/worktree-create-and-open.service.test.ts +68 -0
- package/server/modules/worktrees/tests/worktree-create.service.test.ts +142 -0
- package/server/modules/worktrees/tests/worktree-git.service.test.ts +84 -0
- package/server/modules/worktrees/tests/worktree-list.service.test.ts +45 -0
- package/server/modules/worktrees/tests/worktree-merge.service.test.ts +213 -0
- package/server/modules/worktrees/tests/worktree-open.service.test.ts +122 -0
- package/server/modules/worktrees/tests/worktree-remove.service.test.ts +227 -0
- package/server/modules/worktrees/tests/worktrees.routes.test.ts +199 -0
- package/server/modules/worktrees/worktrees.module.ts +113 -0
- package/server/modules/worktrees/worktrees.routes.ts +116 -0
- package/server/shared/image-attachments.ts +112 -18
- package/server/shared/interfaces.ts +33 -25
- package/server/shared/tests/image-attachments.test.ts +55 -0
- package/server/shared/types.ts +685 -36
- package/server/shared/utils.ts +77 -212
- package/dist/assets/index-CcCsKitq.js +0 -1423
- package/dist/assets/index-DLmhQ15L.css +0 -32
- package/dist-server/server/browser-use-mcp.js.map +0 -1
- package/dist-server/server/claude-sdk.js.map +0 -1
- package/dist-server/server/cli.js +0 -647
- package/dist-server/server/cli.js.map +0 -1
- package/dist-server/server/cursor-cli.js.map +0 -1
- package/dist-server/server/middleware/auth.js.map +0 -1
- package/dist-server/server/modules/providers/tests/provider-image-history.test.js.map +0 -1
- package/dist-server/server/modules/websocket/tests/chat-image-filter.test.js.map +0 -1
- package/dist-server/server/openai-codex.js.map +0 -1
- package/dist-server/server/opencode-cli.js.map +0 -1
- package/dist-server/server/opencode-cli.test.js.map +0 -1
- package/dist-server/server/routes/agent.js +0 -1155
- package/dist-server/server/routes/agent.js.map +0 -1
- package/dist-server/server/routes/auth.js +0 -119
- package/dist-server/server/routes/auth.js.map +0 -1
- package/dist-server/server/routes/commands.js +0 -492
- package/dist-server/server/routes/commands.js.map +0 -1
- package/dist-server/server/routes/cursor.js +0 -49
- package/dist-server/server/routes/cursor.js.map +0 -1
- package/dist-server/server/routes/git.js +0 -1389
- package/dist-server/server/routes/git.js.map +0 -1
- package/dist-server/server/routes/git.test.js.map +0 -1
- package/dist-server/server/routes/mcp-utils.js +0 -29
- package/dist-server/server/routes/mcp-utils.js.map +0 -1
- package/dist-server/server/routes/plugins.js +0 -266
- package/dist-server/server/routes/plugins.js.map +0 -1
- package/dist-server/server/routes/settings.js +0 -249
- package/dist-server/server/routes/settings.js.map +0 -1
- package/dist-server/server/routes/taskmaster.js +0 -1362
- package/dist-server/server/routes/taskmaster.js.map +0 -1
- package/dist-server/server/routes/tests/commands.test.js +0 -76
- package/dist-server/server/routes/tests/commands.test.js.map +0 -1
- package/dist-server/server/routes/user.js +0 -116
- package/dist-server/server/routes/user.js.map +0 -1
- package/dist-server/server/services/notification-orchestrator.js +0 -2
- package/dist-server/server/services/notification-orchestrator.js.map +0 -1
- package/dist-server/server/services/tests/notification-orchestrator.test.js +0 -64
- package/dist-server/server/services/tests/notification-orchestrator.test.js.map +0 -1
- package/dist-server/server/services/vapid-keys.js.map +0 -1
- package/dist-server/server/utils/colors.js +0 -20
- package/dist-server/server/utils/colors.js.map +0 -1
- package/dist-server/server/utils/commandParser.js +0 -255
- package/dist-server/server/utils/commandParser.js.map +0 -1
- package/dist-server/server/utils/gitConfig.js +0 -37
- package/dist-server/server/utils/gitConfig.js.map +0 -1
- package/dist-server/server/utils/mcp-detector.js +0 -134
- package/dist-server/server/utils/mcp-detector.js.map +0 -1
- package/dist-server/server/utils/plugin-loader.js.map +0 -1
- package/dist-server/server/utils/plugin-process-manager.js.map +0 -1
- package/dist-server/server/utils/runtime-paths.js +0 -30
- package/dist-server/server/utils/runtime-paths.js.map +0 -1
- package/dist-server/server/utils/taskmaster-websocket.js +0 -124
- package/dist-server/server/utils/taskmaster-websocket.js.map +0 -1
- package/dist-server/server/utils/url-detection.js +0 -58
- package/dist-server/server/utils/url-detection.js.map +0 -1
- package/dist-server/server/voice-proxy.js +0 -226
- package/dist-server/server/voice-proxy.js.map +0 -1
- package/server/cli.js +0 -695
- package/server/index.js +0 -1651
- package/server/routes/agent.js +0 -1257
- package/server/routes/auth.js +0 -137
- package/server/routes/cursor.js +0 -52
- package/server/routes/mcp-utils.js +0 -31
- package/server/routes/plugins.js +0 -307
- package/server/routes/settings.js +0 -282
- package/server/routes/taskmaster.js +0 -1470
- package/server/routes/tests/commands.test.js +0 -82
- package/server/routes/user.js +0 -124
- package/server/services/notification-orchestrator.js +0 -7
- package/server/services/tests/notification-orchestrator.test.js +0 -80
- package/server/utils/colors.js +0 -21
- package/server/utils/commandParser.js +0 -305
- package/server/utils/gitConfig.js +0 -35
- package/server/utils/mcp-detector.js +0 -147
- package/server/utils/runtime-paths.js +0 -37
- package/server/utils/taskmaster-websocket.js +0 -135
- package/server/utils/url-detection.js +0 -71
- package/server/voice-proxy.js +0 -224
- /package/server/constants/{config.js → config.ts} +0 -0
|
@@ -19,19 +19,20 @@ import path from 'path';
|
|
|
19
19
|
|
|
20
20
|
import { query } from '@anthropic-ai/claude-agent-sdk';
|
|
21
21
|
|
|
22
|
-
import {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
22
|
+
import {
|
|
23
|
+
appendFilesInputTag,
|
|
24
|
+
buildClaudeUserContent,
|
|
25
|
+
normalizeImageDescriptors
|
|
26
|
+
} from '@/shared/image-attachments.js';
|
|
27
|
+
import { CLAUDE_PREDEFINED_MODELS } from '@/modules/providers/list/claude/claude-models.provider.js';
|
|
28
|
+
import { resolveClaudeCodeExecutablePath } from '@/shared/claude-cli-path.js';
|
|
26
29
|
import {
|
|
27
30
|
createNotificationEvent,
|
|
28
31
|
notifyRunFailed,
|
|
29
32
|
notifyRunStopped,
|
|
30
33
|
notifyUserIfEnabled
|
|
31
|
-
} from '
|
|
32
|
-
import {
|
|
33
|
-
import { providerAuthService } from './modules/providers/services/provider-auth.service.js';
|
|
34
|
-
import { createCompleteMessage, createNormalizedMessage } from './shared/utils.js';
|
|
34
|
+
} from '@/modules/notifications/index.js';
|
|
35
|
+
import { createCompleteMessage, createNormalizedMessage } from '@/shared/utils.js';
|
|
35
36
|
|
|
36
37
|
const activeSessions = new Map();
|
|
37
38
|
const pendingToolApprovals = new Map();
|
|
@@ -44,7 +45,7 @@ const TOOL_APPROVAL_TIMEOUT_MS = parseInt(process.env.CLAUDE_TOOL_APPROVAL_TIMEO
|
|
|
44
45
|
|
|
45
46
|
const TOOLS_REQUIRING_INTERACTION = new Set(['AskUserQuestion', 'ExitPlanMode']);
|
|
46
47
|
|
|
47
|
-
function resolveClaudeEffort(model, effort, modelsDefinition =
|
|
48
|
+
function resolveClaudeEffort(model, effort, modelsDefinition = CLAUDE_PREDEFINED_MODELS) {
|
|
48
49
|
const selectedModel = modelsDefinition?.OPTIONS?.find((option) => option.value === model) || null;
|
|
49
50
|
const allowedEfforts = selectedModel?.effort?.values
|
|
50
51
|
?.map((value) => value.value) || [];
|
|
@@ -158,12 +159,15 @@ function matchesToolPermission(entry, toolName, input) {
|
|
|
158
159
|
}
|
|
159
160
|
|
|
160
161
|
function mapCliOptionsToSDK(options = {}) {
|
|
161
|
-
const {
|
|
162
|
+
const { providerSessionId, cwd, toolsSettings, permissionMode, effort } = options;
|
|
162
163
|
|
|
163
164
|
const sdkOptions = {};
|
|
164
165
|
|
|
165
166
|
// Forward all host env vars (e.g. ANTHROPIC_BASE_URL) to the subprocess.
|
|
166
167
|
// Since SDK 0.2.113, options.env replaces process.env instead of overlaying it.
|
|
168
|
+
// This snapshot is also how CLI-side knobs reach the child: e.g. how long the CLI waits for
|
|
169
|
+
// still-running background agents after a turn ends is set by CLAUDE_CODE_PRINT_BG_WAIT_CEILING_MS
|
|
170
|
+
// (default 600000 ms; 0 = wait indefinitely) on this server's own environment.
|
|
167
171
|
sdkOptions.env = { ...process.env };
|
|
168
172
|
|
|
169
173
|
// Resolve the executable eagerly on Windows because the SDK uses raw child_process.spawn,
|
|
@@ -208,12 +212,12 @@ function mapCliOptionsToSDK(options = {}) {
|
|
|
208
212
|
|
|
209
213
|
sdkOptions.disallowedTools = settings.disallowedTools || [];
|
|
210
214
|
|
|
211
|
-
sdkOptions.model = options.model ||
|
|
215
|
+
sdkOptions.model = options.model || CLAUDE_PREDEFINED_MODELS.DEFAULT;
|
|
212
216
|
|
|
213
217
|
const resolvedEffort = resolveClaudeEffort(
|
|
214
218
|
sdkOptions.model,
|
|
215
219
|
effort,
|
|
216
|
-
options.effortModels ||
|
|
220
|
+
options.effortModels || CLAUDE_PREDEFINED_MODELS,
|
|
217
221
|
);
|
|
218
222
|
if (resolvedEffort) {
|
|
219
223
|
sdkOptions.effort = resolvedEffort;
|
|
@@ -226,8 +230,9 @@ function mapCliOptionsToSDK(options = {}) {
|
|
|
226
230
|
|
|
227
231
|
sdkOptions.settingSources = ['project', 'user', 'local'];
|
|
228
232
|
|
|
229
|
-
|
|
230
|
-
|
|
233
|
+
// The SDK resumes with the provider-native session id, never the app id.
|
|
234
|
+
if (providerSessionId) {
|
|
235
|
+
sdkOptions.resume = providerSessionId;
|
|
231
236
|
}
|
|
232
237
|
|
|
233
238
|
return sdkOptions;
|
|
@@ -371,15 +376,17 @@ function extractTokenBudget(sdkMessage) {
|
|
|
371
376
|
*
|
|
372
377
|
* @param {string} command - User prompt
|
|
373
378
|
* @param {Array} images - Image descriptors ({ path, name?, mimeType? })
|
|
374
|
-
* @param {
|
|
379
|
+
* @param {Array} files - Non-image attachment descriptors
|
|
380
|
+
* @param {string} cwd - Project working directory attachment paths resolve against
|
|
375
381
|
* @returns {Promise<string|AsyncIterable>} SDK prompt payload
|
|
376
382
|
*/
|
|
377
|
-
async function buildPromptPayload(command, images, cwd) {
|
|
383
|
+
async function buildPromptPayload(command, images, files, cwd) {
|
|
384
|
+
const promptWithFiles = appendFilesInputTag(command, files);
|
|
378
385
|
if (normalizeImageDescriptors(images).length === 0) {
|
|
379
|
-
return
|
|
386
|
+
return promptWithFiles;
|
|
380
387
|
}
|
|
381
388
|
|
|
382
|
-
const content = await buildClaudeUserContent(
|
|
389
|
+
const content = await buildClaudeUserContent(promptWithFiles, images, cwd);
|
|
383
390
|
return (async function* () {
|
|
384
391
|
yield {
|
|
385
392
|
type: 'user',
|
|
@@ -455,12 +462,21 @@ async function loadMcpConfig(cwd) {
|
|
|
455
462
|
* @param {string} command - User prompt/command
|
|
456
463
|
* @param {Object} options - Query options
|
|
457
464
|
* @param {Object} ws - WebSocket connection
|
|
465
|
+
* @param {Object} context - Provider-scoped model, session, and auth lookups
|
|
458
466
|
* @returns {Promise<void>}
|
|
459
467
|
*/
|
|
460
|
-
async function queryClaudeSDK(command, options = {}, ws) {
|
|
468
|
+
async function queryClaudeSDK(command, options = {}, ws, context) {
|
|
461
469
|
const { sessionId, sessionSummary } = options;
|
|
462
|
-
|
|
470
|
+
// Callers pass the stable app session id; the SDK only understands the
|
|
471
|
+
// provider-native id recorded on the session row.
|
|
472
|
+
const providerSessionId = context.resolveProviderSessionId(sessionId);
|
|
473
|
+
// Provider-native id as the SDK reports it (starts as the resume id, or is
|
|
474
|
+
// captured from the stream for brand-new sessions).
|
|
475
|
+
let capturedSessionId = providerSessionId;
|
|
463
476
|
let sessionCreatedSent = false;
|
|
477
|
+
// Process-map key: the app session id when the caller supplied one, else
|
|
478
|
+
// the provider-native id once captured (legacy/direct API callers).
|
|
479
|
+
const sessionKey = () => sessionId || capturedSessionId || null;
|
|
464
480
|
|
|
465
481
|
const emitNotification = (event) => {
|
|
466
482
|
notifyUserIfEnabled({
|
|
@@ -471,20 +487,17 @@ async function queryClaudeSDK(command, options = {}, ws) {
|
|
|
471
487
|
};
|
|
472
488
|
|
|
473
489
|
try {
|
|
474
|
-
const resolvedModel = await
|
|
475
|
-
|
|
476
|
-
sessionId,
|
|
477
|
-
options.model,
|
|
478
|
-
);
|
|
479
|
-
let effortModels = CLAUDE_FALLBACK_MODELS;
|
|
490
|
+
const resolvedModel = await context.resolveResumeModel(sessionId, options.model);
|
|
491
|
+
let effortModels = CLAUDE_PREDEFINED_MODELS;
|
|
480
492
|
try {
|
|
481
|
-
effortModels =
|
|
493
|
+
effortModels = await context.getProviderModels();
|
|
482
494
|
} catch (error) {
|
|
483
495
|
console.warn('[Claude SDK] Unable to load provider models for effort validation:', error);
|
|
484
496
|
}
|
|
485
497
|
|
|
486
498
|
const sdkOptions = mapCliOptionsToSDK({
|
|
487
499
|
...options,
|
|
500
|
+
providerSessionId,
|
|
488
501
|
model: resolvedModel || options.model,
|
|
489
502
|
effortModels,
|
|
490
503
|
});
|
|
@@ -497,22 +510,23 @@ async function queryClaudeSDK(command, options = {}, ws) {
|
|
|
497
510
|
// Turns with image attachments switch to streaming input so the images
|
|
498
511
|
// ride along as real content blocks. Built per query attempt because an
|
|
499
512
|
// async generator cannot be replayed once consumed.
|
|
500
|
-
const createPrompt = () => buildPromptPayload(command, options.images, options.cwd);
|
|
513
|
+
const createPrompt = () => buildPromptPayload(command, options.images, options.files, options.cwd);
|
|
501
514
|
|
|
502
515
|
sdkOptions.hooks = {
|
|
503
516
|
Notification: [{
|
|
504
517
|
matcher: '',
|
|
505
518
|
hooks: [async (input) => {
|
|
506
519
|
const message = typeof input?.message === 'string' ? input.message : 'Claude requires your attention.';
|
|
520
|
+
// Notifications are app-facing, so they carry the app session id.
|
|
507
521
|
emitNotification(createNotificationEvent({
|
|
508
522
|
provider: 'claude',
|
|
509
|
-
sessionId:
|
|
523
|
+
sessionId: sessionId || capturedSessionId || null,
|
|
510
524
|
kind: 'action_required',
|
|
511
525
|
code: 'agent.notification',
|
|
512
526
|
meta: { message, sessionName: sessionSummary },
|
|
513
527
|
severity: 'warning',
|
|
514
528
|
requiresUserAction: true,
|
|
515
|
-
dedupeKey: `claude:hook:notification:${
|
|
529
|
+
dedupeKey: `claude:hook:notification:${sessionId || capturedSessionId || 'none'}:${message}`
|
|
516
530
|
}));
|
|
517
531
|
return {};
|
|
518
532
|
}]
|
|
@@ -552,20 +566,22 @@ async function queryClaudeSDK(command, options = {}, ws) {
|
|
|
552
566
|
ws.send(createNormalizedMessage({ kind: 'permission_request', requestId, toolName, input, sessionId: capturedSessionId || sessionId || null, provider: 'claude' }));
|
|
553
567
|
emitNotification(createNotificationEvent({
|
|
554
568
|
provider: 'claude',
|
|
555
|
-
sessionId:
|
|
569
|
+
sessionId: sessionId || capturedSessionId || null,
|
|
556
570
|
kind: 'action_required',
|
|
557
571
|
code: 'permission.required',
|
|
558
572
|
meta: { toolName, sessionName: sessionSummary },
|
|
559
573
|
severity: 'warning',
|
|
560
574
|
requiresUserAction: true,
|
|
561
|
-
dedupeKey: `claude:permission:${
|
|
575
|
+
dedupeKey: `claude:permission:${sessionId || capturedSessionId || 'none'}:${requestId}`
|
|
562
576
|
}));
|
|
563
577
|
|
|
564
578
|
const decision = await waitForToolApproval(requestId, {
|
|
565
579
|
timeoutMs: requiresInteraction ? 0 : undefined,
|
|
566
580
|
signal: context?.signal,
|
|
567
581
|
metadata: {
|
|
568
|
-
|
|
582
|
+
// Keyed by the app session id so `chat.subscribe` can look pending
|
|
583
|
+
// approvals up directly; provider id only for legacy callers.
|
|
584
|
+
_sessionId: sessionId || capturedSessionId || null,
|
|
569
585
|
_toolName: toolName,
|
|
570
586
|
_input: input,
|
|
571
587
|
_receivedAt: new Date(),
|
|
@@ -597,10 +613,6 @@ async function queryClaudeSDK(command, options = {}, ws) {
|
|
|
597
613
|
return { behavior: 'deny', message: decision.message ?? 'User denied tool use' };
|
|
598
614
|
};
|
|
599
615
|
|
|
600
|
-
// Query constructor reads this synchronously.
|
|
601
|
-
const prevStreamTimeout = process.env.CLAUDE_CODE_STREAM_CLOSE_TIMEOUT;
|
|
602
|
-
process.env.CLAUDE_CODE_STREAM_CLOSE_TIMEOUT = '300000';
|
|
603
|
-
|
|
604
616
|
let queryInstance;
|
|
605
617
|
try {
|
|
606
618
|
queryInstance = query({
|
|
@@ -618,16 +630,9 @@ async function queryClaudeSDK(command, options = {}, ws) {
|
|
|
618
630
|
});
|
|
619
631
|
}
|
|
620
632
|
|
|
621
|
-
// Restore immediately — Query constructor already captured the value
|
|
622
|
-
if (prevStreamTimeout !== undefined) {
|
|
623
|
-
process.env.CLAUDE_CODE_STREAM_CLOSE_TIMEOUT = prevStreamTimeout;
|
|
624
|
-
} else {
|
|
625
|
-
delete process.env.CLAUDE_CODE_STREAM_CLOSE_TIMEOUT;
|
|
626
|
-
}
|
|
627
|
-
|
|
628
633
|
// Track the query instance for abort capability
|
|
629
|
-
if (
|
|
630
|
-
addSession(
|
|
634
|
+
if (sessionKey()) {
|
|
635
|
+
addSession(sessionKey(), queryInstance, ws);
|
|
631
636
|
}
|
|
632
637
|
|
|
633
638
|
// Process streaming messages
|
|
@@ -637,15 +642,15 @@ async function queryClaudeSDK(command, options = {}, ws) {
|
|
|
637
642
|
if (message.session_id && !capturedSessionId) {
|
|
638
643
|
|
|
639
644
|
capturedSessionId = message.session_id;
|
|
640
|
-
addSession(
|
|
645
|
+
addSession(sessionKey(), queryInstance, ws);
|
|
641
646
|
|
|
642
647
|
// Set session ID on writer
|
|
643
648
|
if (ws.setSessionId && typeof ws.setSessionId === 'function') {
|
|
644
649
|
ws.setSessionId(capturedSessionId);
|
|
645
650
|
}
|
|
646
651
|
|
|
647
|
-
// Send session-created event only once for
|
|
648
|
-
if (!
|
|
652
|
+
// Send session-created event only once for sessions with nothing to resume
|
|
653
|
+
if (!providerSessionId && !sessionCreatedSent) {
|
|
649
654
|
sessionCreatedSent = true;
|
|
650
655
|
ws.send(createNormalizedMessage({ kind: 'session_created', newSessionId: capturedSessionId, sessionId: capturedSessionId, provider: 'claude' }));
|
|
651
656
|
}
|
|
@@ -658,7 +663,7 @@ async function queryClaudeSDK(command, options = {}, ws) {
|
|
|
658
663
|
const sid = capturedSessionId || sessionId || null;
|
|
659
664
|
|
|
660
665
|
// Use adapter to normalize SDK events into NormalizedMessage[]
|
|
661
|
-
const normalized =
|
|
666
|
+
const normalized = context.normalizeMessage(transformedMessage, sid);
|
|
662
667
|
for (const msg of normalized) {
|
|
663
668
|
// Preserve parentToolUseId from SDK wrapper for subagent tool grouping
|
|
664
669
|
if (transformedMessage.parentToolUseId && !msg.parentToolUseId) {
|
|
@@ -675,20 +680,20 @@ async function queryClaudeSDK(command, options = {}, ws) {
|
|
|
675
680
|
}
|
|
676
681
|
|
|
677
682
|
// Clean up session on completion
|
|
678
|
-
if (
|
|
679
|
-
removeSession(
|
|
683
|
+
if (sessionKey()) {
|
|
684
|
+
removeSession(sessionKey());
|
|
680
685
|
}
|
|
681
686
|
|
|
682
687
|
// Send the terminal completion event — skipped for aborted runs, whose
|
|
683
688
|
// terminal `complete` (aborted: true) was already sent by abort-session.
|
|
684
|
-
const wasAborted =
|
|
689
|
+
const wasAborted = sessionKey() ? abortedSessionIds.delete(sessionKey()) : false;
|
|
685
690
|
if (!wasAborted) {
|
|
686
691
|
ws.send(createCompleteMessage({ provider: 'claude', sessionId: capturedSessionId || sessionId || null, exitCode: 0 }));
|
|
687
692
|
}
|
|
688
693
|
notifyRunStopped({
|
|
689
694
|
userId: ws?.userId || null,
|
|
690
695
|
provider: 'claude',
|
|
691
|
-
sessionId:
|
|
696
|
+
sessionId: sessionId || capturedSessionId || null,
|
|
692
697
|
sessionName: sessionSummary,
|
|
693
698
|
stopReason: wasAborted ? 'aborted' : 'completed'
|
|
694
699
|
});
|
|
@@ -698,11 +703,11 @@ async function queryClaudeSDK(command, options = {}, ws) {
|
|
|
698
703
|
console.error('SDK query error:', error);
|
|
699
704
|
|
|
700
705
|
// Clean up session on error
|
|
701
|
-
if (
|
|
702
|
-
removeSession(
|
|
706
|
+
if (sessionKey()) {
|
|
707
|
+
removeSession(sessionKey());
|
|
703
708
|
}
|
|
704
709
|
|
|
705
|
-
const wasAborted =
|
|
710
|
+
const wasAborted = sessionKey() ? abortedSessionIds.delete(sessionKey()) : false;
|
|
706
711
|
if (wasAborted) {
|
|
707
712
|
// The abort already produced the terminal complete; a generator throw
|
|
708
713
|
// caused by interrupt() is expected noise, not a user-facing error.
|
|
@@ -710,7 +715,7 @@ async function queryClaudeSDK(command, options = {}, ws) {
|
|
|
710
715
|
}
|
|
711
716
|
|
|
712
717
|
// Check if Claude CLI is installed for a clearer error message
|
|
713
|
-
const installed = await
|
|
718
|
+
const installed = await context.isProviderInstalled();
|
|
714
719
|
const errorContent = !installed
|
|
715
720
|
? 'Claude Code is not installed. Please install it first: https://docs.anthropic.com/en/docs/claude-code'
|
|
716
721
|
: error.message;
|
|
@@ -721,7 +726,7 @@ async function queryClaudeSDK(command, options = {}, ws) {
|
|
|
721
726
|
notifyRunFailed({
|
|
722
727
|
userId: ws?.userId || null,
|
|
723
728
|
provider: 'claude',
|
|
724
|
-
sessionId:
|
|
729
|
+
sessionId: sessionId || capturedSessionId || null,
|
|
725
730
|
sessionName: sessionSummary,
|
|
726
731
|
error
|
|
727
732
|
});
|
|
@@ -821,6 +826,15 @@ function reconnectSessionWriter(sessionId, newRawWs) {
|
|
|
821
826
|
return true;
|
|
822
827
|
}
|
|
823
828
|
|
|
829
|
+
export const claudeRuntime = {
|
|
830
|
+
run: queryClaudeSDK,
|
|
831
|
+
abort: abortClaudeSDKSession,
|
|
832
|
+
permissions: {
|
|
833
|
+
resolve: resolveToolApproval,
|
|
834
|
+
listPending: getPendingApprovalsForSession,
|
|
835
|
+
},
|
|
836
|
+
};
|
|
837
|
+
|
|
824
838
|
// Export public API
|
|
825
839
|
export {
|
|
826
840
|
queryClaudeSDK,
|
|
@@ -26,10 +26,11 @@ export class ClaudeSessionSynchronizer implements IProviderSessionSynchronizer {
|
|
|
26
26
|
private readonly claudeHome = path.join(os.homedir(), '.claude');
|
|
27
27
|
|
|
28
28
|
/**
|
|
29
|
-
* Returns true when a JSONL file is a subagent transcript
|
|
30
|
-
* top-level session.
|
|
29
|
+
* Returns true when a JSONL file is a subagent transcript or tool result
|
|
30
|
+
* rather than a top-level session.
|
|
31
31
|
*
|
|
32
|
-
* Claude stores subagent transcripts under a `subagents/` directory
|
|
32
|
+
* Claude stores subagent transcripts under a `subagents/` directory and
|
|
33
|
+
* tool results under a `tool-results/` directory, e.g.
|
|
33
34
|
* `~/.claude/projects/<encoded-cwd>/<session-id>/subagents/agent-<id>.jsonl`.
|
|
34
35
|
* Those files repeat the parent session's `sessionId`, so indexing them as
|
|
35
36
|
* standalone sessions overwrites the parent row's `jsonl_path` and corrupts
|
|
@@ -37,7 +38,8 @@ export class ClaudeSessionSynchronizer implements IProviderSessionSynchronizer {
|
|
|
37
38
|
* them, so both entry points must skip them.
|
|
38
39
|
*/
|
|
39
40
|
private isSubagentTranscript(filePath: string): boolean {
|
|
40
|
-
|
|
41
|
+
const pathParts = path.normalize(filePath).split(path.sep);
|
|
42
|
+
return pathParts.includes('subagents') || pathParts.includes('tool-results');
|
|
41
43
|
}
|
|
42
44
|
|
|
43
45
|
/**
|
|
@@ -5,6 +5,7 @@ import readline from 'node:readline';
|
|
|
5
5
|
|
|
6
6
|
import type { IProviderSessions } from '@/shared/interfaces.js';
|
|
7
7
|
import type { AnyRecord, FetchHistoryOptions, FetchHistoryResult, NormalizedMessage } from '@/shared/types.js';
|
|
8
|
+
import { parseFilesInputTag } from '@/shared/image-attachments.js';
|
|
8
9
|
import { createNormalizedMessage, generateMessageId, readObjectRecord, sliceTailPage } from '@/shared/utils.js';
|
|
9
10
|
import { sessionsDb } from '@/modules/database/index.js';
|
|
10
11
|
|
|
@@ -211,11 +212,19 @@ async function getSessionMessages(
|
|
|
211
212
|
* - local command payloads (`<command-name>...`) and stdout wrappers
|
|
212
213
|
* (`<local-command-stdout>...`) should be remapped into normal chat messages
|
|
213
214
|
* instead of being discarded as internal content
|
|
215
|
+
*
|
|
216
|
+
* Skill bodies belong in the first group. When a skill is invoked, Claude
|
|
217
|
+
* injects the entire SKILL.md as a synthetic user turn. Persisted transcripts
|
|
218
|
+
* tag it `isMeta: true`, but the live SDK stream does not, so without a
|
|
219
|
+
* content-level check the same payload renders as a huge user bubble during the
|
|
220
|
+
* run and then vanishes on reload. The skill is already represented by the
|
|
221
|
+
* `Skill` tool call, so it is never user-visible content.
|
|
214
222
|
*/
|
|
215
223
|
const INTERNAL_CONTENT_PREFIXES = [
|
|
216
224
|
'<system-reminder>',
|
|
217
225
|
'Caveat:',
|
|
218
226
|
'[Request interrupted',
|
|
227
|
+
'Base directory for this skill:',
|
|
219
228
|
] as const;
|
|
220
229
|
|
|
221
230
|
function isInternalContent(content: string): boolean {
|
|
@@ -324,6 +333,7 @@ export class ClaudeSessionsProvider implements IProviderSessions {
|
|
|
324
333
|
}
|
|
325
334
|
}
|
|
326
335
|
let imagesAttached = false;
|
|
336
|
+
let filesAttached = false;
|
|
327
337
|
|
|
328
338
|
for (let partIndex = 0; partIndex < raw.message.content.length; partIndex++) {
|
|
329
339
|
const part = raw.message.content[partIndex];
|
|
@@ -342,7 +352,11 @@ export class ClaudeSessionsProvider implements IProviderSessions {
|
|
|
342
352
|
}));
|
|
343
353
|
} else if (part.type === 'text') {
|
|
344
354
|
const text = part.text || '';
|
|
345
|
-
|
|
355
|
+
const parsedFiles = parseFilesInputTag(text);
|
|
356
|
+
if (
|
|
357
|
+
(parsedFiles.text || parsedFiles.attachments.length > 0)
|
|
358
|
+
&& !isInternalContent(parsedFiles.text)
|
|
359
|
+
) {
|
|
346
360
|
messages.push(createNormalizedMessage({
|
|
347
361
|
id: `${baseId}_text_${partIndex}`,
|
|
348
362
|
sessionId,
|
|
@@ -350,10 +364,14 @@ export class ClaudeSessionsProvider implements IProviderSessions {
|
|
|
350
364
|
provider: PROVIDER,
|
|
351
365
|
kind: 'text',
|
|
352
366
|
role: 'user',
|
|
353
|
-
content: text,
|
|
367
|
+
content: parsedFiles.text,
|
|
354
368
|
images: !imagesAttached && imageAttachments.length > 0 ? imageAttachments : undefined,
|
|
369
|
+
files: !filesAttached && parsedFiles.attachments.length > 0
|
|
370
|
+
? parsedFiles.attachments
|
|
371
|
+
: undefined,
|
|
355
372
|
}));
|
|
356
373
|
imagesAttached = true;
|
|
374
|
+
filesAttached = filesAttached || parsedFiles.attachments.length > 0;
|
|
357
375
|
}
|
|
358
376
|
}
|
|
359
377
|
}
|
|
@@ -468,7 +486,11 @@ export class ClaudeSessionsProvider implements IProviderSessions {
|
|
|
468
486
|
return messages;
|
|
469
487
|
}
|
|
470
488
|
|
|
471
|
-
|
|
489
|
+
const parsedFiles = parseFilesInputTag(text);
|
|
490
|
+
if (
|
|
491
|
+
(parsedFiles.text || parsedFiles.attachments.length > 0)
|
|
492
|
+
&& !isInternalContent(parsedFiles.text)
|
|
493
|
+
) {
|
|
472
494
|
messages.push(createNormalizedMessage({
|
|
473
495
|
id: baseId,
|
|
474
496
|
sessionId,
|
|
@@ -476,7 +498,8 @@ export class ClaudeSessionsProvider implements IProviderSessions {
|
|
|
476
498
|
provider: PROVIDER,
|
|
477
499
|
kind: 'text',
|
|
478
500
|
role: 'user',
|
|
479
|
-
content: text,
|
|
501
|
+
content: parsedFiles.text,
|
|
502
|
+
files: parsedFiles.attachments.length > 0 ? parsedFiles.attachments : undefined,
|
|
480
503
|
}));
|
|
481
504
|
}
|
|
482
505
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { AbstractProvider } from '@/modules/providers/shared/base/abstract.provider.js';
|
|
2
2
|
import { ClaudeProviderAuth } from '@/modules/providers/list/claude/claude-auth.provider.js';
|
|
3
3
|
import { ClaudeProviderModels } from '@/modules/providers/list/claude/claude-models.provider.js';
|
|
4
|
+
import { claudeRuntime } from '@/modules/providers/list/claude/claude-runtime.provider.js';
|
|
4
5
|
import { ClaudeMcpProvider } from '@/modules/providers/list/claude/claude-mcp.provider.js';
|
|
5
6
|
import { ClaudeSessionSynchronizer } from '@/modules/providers/list/claude/claude-session-synchronizer.provider.js';
|
|
6
7
|
import { ClaudeSessionsProvider } from '@/modules/providers/list/claude/claude-sessions.provider.js';
|
|
@@ -8,12 +9,14 @@ import { ClaudeSkillsProvider } from '@/modules/providers/list/claude/claude-ski
|
|
|
8
9
|
import type {
|
|
9
10
|
IProviderAuth,
|
|
10
11
|
IProviderModels,
|
|
12
|
+
IProviderRuntime,
|
|
11
13
|
IProviderSessionSynchronizer,
|
|
12
14
|
IProviderSkills,
|
|
13
15
|
IProviderSessions,
|
|
14
16
|
} from '@/shared/interfaces.js';
|
|
15
17
|
|
|
16
18
|
export class ClaudeProvider extends AbstractProvider {
|
|
19
|
+
readonly runtime: IProviderRuntime = claudeRuntime;
|
|
17
20
|
readonly models: IProviderModels = new ClaudeProviderModels();
|
|
18
21
|
readonly mcp = new ClaudeMcpProvider();
|
|
19
22
|
readonly auth: IProviderAuth = new ClaudeProviderAuth();
|