@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
|
@@ -6,24 +6,69 @@ import TOML from '@iarna/toml';
|
|
|
6
6
|
|
|
7
7
|
import type { IProviderModels } from '@/shared/interfaces.js';
|
|
8
8
|
import type {
|
|
9
|
-
ProviderChangeActiveModelInput,
|
|
10
9
|
ProviderCurrentActiveModel,
|
|
11
|
-
ProviderModelOption,
|
|
12
10
|
ProviderModelsDefinition,
|
|
13
|
-
ProviderSessionActiveModelChange,
|
|
14
11
|
} from '@/shared/types.js';
|
|
15
12
|
import {
|
|
16
13
|
buildDefaultProviderCurrentActiveModel,
|
|
17
14
|
readObjectRecord,
|
|
18
15
|
readOptionalString,
|
|
19
|
-
writeProviderSessionActiveModelChange,
|
|
20
16
|
} from '@/shared/utils.js';
|
|
21
17
|
|
|
22
|
-
|
|
18
|
+
/** Curated Codex catalog shipped as immutable CloudCLI defaults. */
|
|
19
|
+
export const CODEX_PREDEFINED_MODELS: ProviderModelsDefinition = {
|
|
23
20
|
OPTIONS: [
|
|
21
|
+
{
|
|
22
|
+
value: 'gpt-5.6-sol',
|
|
23
|
+
label: 'GPT-5.6 Sol',
|
|
24
|
+
description: 'Latest frontier agentic coding model.',
|
|
25
|
+
effort: {
|
|
26
|
+
default: 'low',
|
|
27
|
+
values: [
|
|
28
|
+
{ value: 'low' },
|
|
29
|
+
{ value: 'medium' },
|
|
30
|
+
{ value: 'high' },
|
|
31
|
+
{ value: 'xhigh' },
|
|
32
|
+
{ value: 'max' },
|
|
33
|
+
{ value: 'ultra' },
|
|
34
|
+
],
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
value: 'gpt-5.6-terra',
|
|
39
|
+
label: 'GPT-5.6 Terra',
|
|
40
|
+
description: 'Balanced agentic coding model for everyday work.',
|
|
41
|
+
effort: {
|
|
42
|
+
default: 'medium',
|
|
43
|
+
values: [
|
|
44
|
+
{ value: 'low' },
|
|
45
|
+
{ value: 'medium' },
|
|
46
|
+
{ value: 'high' },
|
|
47
|
+
{ value: 'xhigh' },
|
|
48
|
+
{ value: 'max' },
|
|
49
|
+
{ value: 'ultra' },
|
|
50
|
+
],
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
value: 'gpt-5.6-luna',
|
|
55
|
+
label: 'GPT-5.6 Luna',
|
|
56
|
+
description: 'Fast and affordable agentic coding model.',
|
|
57
|
+
effort: {
|
|
58
|
+
default: 'medium',
|
|
59
|
+
values: [
|
|
60
|
+
{ value: 'low' },
|
|
61
|
+
{ value: 'medium' },
|
|
62
|
+
{ value: 'high' },
|
|
63
|
+
{ value: 'xhigh' },
|
|
64
|
+
{ value: 'max' },
|
|
65
|
+
],
|
|
66
|
+
},
|
|
67
|
+
},
|
|
24
68
|
{
|
|
25
69
|
value: 'gpt-5.5',
|
|
26
|
-
label: '
|
|
70
|
+
label: 'GPT-5.5',
|
|
71
|
+
description: 'Frontier model for complex coding, research, and real-world work.',
|
|
27
72
|
effort: {
|
|
28
73
|
default: 'medium',
|
|
29
74
|
values: [{ value: 'low' }, { value: 'medium' }, { value: 'high' }, { value: 'xhigh' }],
|
|
@@ -31,7 +76,8 @@ export const CODEX_FALLBACK_MODELS: ProviderModelsDefinition = {
|
|
|
31
76
|
},
|
|
32
77
|
{
|
|
33
78
|
value: 'gpt-5.4',
|
|
34
|
-
label: '
|
|
79
|
+
label: 'GPT-5.4',
|
|
80
|
+
description: 'Strong model for everyday coding.',
|
|
35
81
|
effort: {
|
|
36
82
|
default: 'medium',
|
|
37
83
|
values: [{ value: 'low' }, { value: 'medium' }, { value: 'high' }, { value: 'xhigh' }],
|
|
@@ -39,113 +85,23 @@ export const CODEX_FALLBACK_MODELS: ProviderModelsDefinition = {
|
|
|
39
85
|
},
|
|
40
86
|
{
|
|
41
87
|
value: 'gpt-5.4-mini',
|
|
42
|
-
label: '
|
|
88
|
+
label: 'GPT-5.4 Mini',
|
|
89
|
+
description: 'Small, fast, and cost-efficient model for simpler coding tasks.',
|
|
43
90
|
effort: {
|
|
44
91
|
default: 'medium',
|
|
45
92
|
values: [{ value: 'low' }, { value: 'medium' }, { value: 'high' }, { value: 'xhigh' }],
|
|
46
93
|
},
|
|
47
94
|
},
|
|
48
95
|
],
|
|
49
|
-
DEFAULT: 'gpt-5.
|
|
50
|
-
};
|
|
51
|
-
|
|
52
|
-
type CodexCachedModel = {
|
|
53
|
-
slug?: string;
|
|
54
|
-
display_name?: string;
|
|
55
|
-
description?: string;
|
|
56
|
-
priority?: number;
|
|
57
|
-
visibility?: string;
|
|
58
|
-
supported_in_api?: boolean;
|
|
59
|
-
default_reasoning_level?: string;
|
|
60
|
-
supported_reasoning_levels?: Array<{
|
|
61
|
-
effort?: string;
|
|
62
|
-
description?: string;
|
|
63
|
-
}>;
|
|
96
|
+
DEFAULT: 'gpt-5.6-sol',
|
|
64
97
|
};
|
|
65
98
|
|
|
66
|
-
const CODEX_MODELS_CACHE_PATH = path.join(os.homedir(), '.codex', 'models_cache.json');
|
|
67
99
|
const CODEX_CONFIG_PATH = path.join(os.homedir(), '.codex', 'config.toml');
|
|
68
100
|
|
|
69
|
-
|
|
70
|
-
const record = readObjectRecord(value);
|
|
71
|
-
return Boolean(record && readOptionalString(record.slug));
|
|
72
|
-
};
|
|
73
|
-
|
|
74
|
-
const readCodexPriority = (value: unknown): number => (
|
|
75
|
-
typeof value === 'number' && Number.isFinite(value) ? value : Number.MAX_SAFE_INTEGER
|
|
76
|
-
);
|
|
77
|
-
|
|
78
|
-
const mapCodexModel = (model: CodexCachedModel): ProviderModelOption => {
|
|
79
|
-
const effortValues = Array.isArray(model.supported_reasoning_levels)
|
|
80
|
-
? model.supported_reasoning_levels
|
|
81
|
-
.map((level) => {
|
|
82
|
-
const value = readOptionalString(level?.effort);
|
|
83
|
-
if (!value) {
|
|
84
|
-
return null;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
return {
|
|
88
|
-
value,
|
|
89
|
-
description: readOptionalString(level?.description),
|
|
90
|
-
};
|
|
91
|
-
})
|
|
92
|
-
.filter((level): level is NonNullable<typeof level> => Boolean(level))
|
|
93
|
-
: [];
|
|
94
|
-
|
|
95
|
-
return {
|
|
96
|
-
value: model.slug as string,
|
|
97
|
-
label: readOptionalString(model.display_name) ?? (model.slug as string),
|
|
98
|
-
description: readOptionalString(model.description),
|
|
99
|
-
effort: effortValues.length > 0
|
|
100
|
-
? {
|
|
101
|
-
default: readOptionalString(model.default_reasoning_level) ?? undefined,
|
|
102
|
-
values: effortValues,
|
|
103
|
-
}
|
|
104
|
-
: undefined,
|
|
105
|
-
};
|
|
106
|
-
};
|
|
107
|
-
|
|
108
|
-
const buildCodexModelsDefinition = (models: CodexCachedModel[]): ProviderModelsDefinition => {
|
|
109
|
-
const sortedModels = [...models]
|
|
110
|
-
.filter((model) => model.visibility === 'list' && model.supported_in_api !== false)
|
|
111
|
-
.sort((left, right) => readCodexPriority(left.priority) - readCodexPriority(right.priority));
|
|
112
|
-
|
|
113
|
-
const options: ProviderModelOption[] = [];
|
|
114
|
-
const seenValues = new Set<string>();
|
|
115
|
-
|
|
116
|
-
for (const model of sortedModels) {
|
|
117
|
-
const mappedModel = mapCodexModel(model);
|
|
118
|
-
if (seenValues.has(mappedModel.value)) {
|
|
119
|
-
continue;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
seenValues.add(mappedModel.value);
|
|
123
|
-
options.push(mappedModel);
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
if (options.length === 0) {
|
|
127
|
-
return CODEX_FALLBACK_MODELS;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
return {
|
|
131
|
-
OPTIONS: options,
|
|
132
|
-
DEFAULT: options[0]?.value ?? CODEX_FALLBACK_MODELS.DEFAULT,
|
|
133
|
-
};
|
|
134
|
-
};
|
|
135
|
-
|
|
101
|
+
/** Provider registry model adapter for Codex predefined models and active config. */
|
|
136
102
|
export class CodexProviderModels implements IProviderModels {
|
|
137
103
|
async getSupportedModels(): Promise<ProviderModelsDefinition> {
|
|
138
|
-
|
|
139
|
-
const raw = await readFile(CODEX_MODELS_CACHE_PATH, 'utf8');
|
|
140
|
-
const parsed = readObjectRecord(JSON.parse(raw));
|
|
141
|
-
const models = Array.isArray(parsed?.models)
|
|
142
|
-
? parsed.models.filter(isCodexCachedModel)
|
|
143
|
-
: [];
|
|
144
|
-
|
|
145
|
-
return buildCodexModelsDefinition(models);
|
|
146
|
-
} catch {
|
|
147
|
-
return CODEX_FALLBACK_MODELS;
|
|
148
|
-
}
|
|
104
|
+
return CODEX_PREDEFINED_MODELS;
|
|
149
105
|
}
|
|
150
106
|
|
|
151
107
|
async getCurrentActiveModel(): Promise<ProviderCurrentActiveModel> {
|
|
@@ -164,10 +120,4 @@ export class CodexProviderModels implements IProviderModels {
|
|
|
164
120
|
return buildDefaultProviderCurrentActiveModel(await this.getSupportedModels());
|
|
165
121
|
}
|
|
166
122
|
}
|
|
167
|
-
|
|
168
|
-
async changeActiveModel(
|
|
169
|
-
input: ProviderChangeActiveModelInput,
|
|
170
|
-
): Promise<ProviderSessionActiveModelChange> {
|
|
171
|
-
return writeProviderSessionActiveModelChange('codex', input);
|
|
172
|
-
}
|
|
173
123
|
}
|
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
* =============================
|
|
4
4
|
*
|
|
5
5
|
* This module provides integration with the OpenAI Codex SDK for non-interactive
|
|
6
|
-
* chat sessions. It mirrors the
|
|
6
|
+
* chat sessions. It mirrors the Claude runtime adapter for consistency.
|
|
7
7
|
*
|
|
8
8
|
* ## Usage
|
|
9
9
|
*
|
|
10
|
-
* -
|
|
10
|
+
* - codexRuntime.run(command, options, writer, context) - Execute a streamed prompt
|
|
11
11
|
* - abortCodexSession(sessionId) - Cancel an active session
|
|
12
12
|
* - isCodexSessionActive(sessionId) - Check if a session is running
|
|
13
13
|
* - getActiveCodexSessions() - List all active sessions
|
|
@@ -15,12 +15,13 @@
|
|
|
15
15
|
|
|
16
16
|
import { Codex } from '@openai/codex-sdk';
|
|
17
17
|
|
|
18
|
-
import {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
import {
|
|
18
|
+
import {
|
|
19
|
+
appendFilesInputTag,
|
|
20
|
+
buildCodexInputItems,
|
|
21
|
+
normalizeImageDescriptors
|
|
22
|
+
} from '@/shared/image-attachments.js';
|
|
23
|
+
import { notifyRunFailed, notifyRunStopped } from '@/modules/notifications/index.js';
|
|
24
|
+
import { createCompleteMessage, createNormalizedMessage } from '@/shared/utils.js';
|
|
24
25
|
|
|
25
26
|
const activeCodexSessions = new Map();
|
|
26
27
|
|
|
@@ -222,7 +223,7 @@ function mapPermissionModeToCodexOptions(permissionMode) {
|
|
|
222
223
|
* @param {object} options - Options including cwd, sessionId, model, permissionMode
|
|
223
224
|
* @param {WebSocket|object} ws - WebSocket connection or response writer
|
|
224
225
|
*/
|
|
225
|
-
export async function queryCodex(command, options = {}, ws) {
|
|
226
|
+
export async function queryCodex(command, options = {}, ws, context) {
|
|
226
227
|
const {
|
|
227
228
|
sessionId,
|
|
228
229
|
sessionSummary,
|
|
@@ -231,18 +232,19 @@ export async function queryCodex(command, options = {}, ws) {
|
|
|
231
232
|
model,
|
|
232
233
|
effort,
|
|
233
234
|
images,
|
|
235
|
+
files,
|
|
234
236
|
permissionMode = 'default'
|
|
235
237
|
} = options;
|
|
236
238
|
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
);
|
|
239
|
+
// Callers pass the stable app session id; the SDK resumes threads with the
|
|
240
|
+
// provider-native id recorded on the session row.
|
|
241
|
+
const providerSessionId = context.resolveProviderSessionId(sessionId);
|
|
242
|
+
|
|
243
|
+
const resolvedModel = await context.resolveResumeModel(sessionId, model);
|
|
242
244
|
|
|
243
245
|
const workingDirectory = cwd || projectPath || process.cwd();
|
|
244
246
|
const { sandboxMode, approvalPolicy } = mapPermissionModeToCodexOptions(permissionMode);
|
|
245
|
-
const catalog =
|
|
247
|
+
const catalog = await context.getProviderModels();
|
|
246
248
|
const selectedModel = catalog.OPTIONS.find((option) => option.value === resolvedModel) || null;
|
|
247
249
|
const allowedEfforts = selectedModel?.effort?.values?.map((value) => value.value) || [];
|
|
248
250
|
const resolvedEffort = typeof effort === 'string' && effort !== 'default' && allowedEfforts.includes(effort)
|
|
@@ -251,10 +253,15 @@ export async function queryCodex(command, options = {}, ws) {
|
|
|
251
253
|
|
|
252
254
|
let codex;
|
|
253
255
|
let thread;
|
|
254
|
-
|
|
256
|
+
// Provider-native thread id (starts as the resume id, or is captured from
|
|
257
|
+
// the stream for brand-new sessions).
|
|
258
|
+
let capturedSessionId = providerSessionId;
|
|
255
259
|
let sessionCreatedSent = false;
|
|
256
260
|
let terminalFailure = null;
|
|
257
261
|
const abortController = new AbortController();
|
|
262
|
+
// Session-map key: the app session id when the caller supplied one, else
|
|
263
|
+
// the provider-native thread id once captured (legacy/direct API callers).
|
|
264
|
+
const sessionKey = () => sessionId || capturedSessionId || null;
|
|
258
265
|
|
|
259
266
|
try {
|
|
260
267
|
codex = new Codex();
|
|
@@ -268,8 +275,8 @@ export async function queryCodex(command, options = {}, ws) {
|
|
|
268
275
|
modelReasoningEffort: resolvedEffort,
|
|
269
276
|
};
|
|
270
277
|
|
|
271
|
-
if (
|
|
272
|
-
thread = codex.resumeThread(
|
|
278
|
+
if (providerSessionId) {
|
|
279
|
+
thread = codex.resumeThread(providerSessionId, threadOptions);
|
|
273
280
|
} else {
|
|
274
281
|
thread = codex.startThread(threadOptions);
|
|
275
282
|
}
|
|
@@ -287,15 +294,16 @@ export async function queryCodex(command, options = {}, ws) {
|
|
|
287
294
|
});
|
|
288
295
|
};
|
|
289
296
|
|
|
290
|
-
if (
|
|
291
|
-
registerSession(
|
|
297
|
+
if (sessionKey()) {
|
|
298
|
+
registerSession(sessionKey());
|
|
292
299
|
}
|
|
293
300
|
|
|
294
301
|
// Execute with streaming. Turns with image attachments send structured
|
|
295
302
|
// input items so Codex reads the images from their local asset paths.
|
|
303
|
+
const promptWithFiles = appendFilesInputTag(command, files);
|
|
296
304
|
const turnInput = normalizeImageDescriptors(images).length > 0
|
|
297
|
-
? buildCodexInputItems(
|
|
298
|
-
:
|
|
305
|
+
? buildCodexInputItems(promptWithFiles, images, workingDirectory)
|
|
306
|
+
: promptWithFiles;
|
|
299
307
|
const streamedTurn = await thread.runStreamed(turnInput, {
|
|
300
308
|
signal: abortController.signal
|
|
301
309
|
});
|
|
@@ -306,13 +314,13 @@ export async function queryCodex(command, options = {}, ws) {
|
|
|
306
314
|
const discoveredSessionId = event.thread_id || event.id || null;
|
|
307
315
|
if (discoveredSessionId && !capturedSessionId) {
|
|
308
316
|
capturedSessionId = discoveredSessionId;
|
|
309
|
-
registerSession(
|
|
317
|
+
registerSession(sessionKey());
|
|
310
318
|
|
|
311
319
|
if (ws.setSessionId && typeof ws.setSessionId === 'function') {
|
|
312
320
|
ws.setSessionId(capturedSessionId);
|
|
313
321
|
}
|
|
314
322
|
|
|
315
|
-
if (!
|
|
323
|
+
if (!providerSessionId && !sessionCreatedSent) {
|
|
316
324
|
sessionCreatedSent = true;
|
|
317
325
|
sendMessage(ws, createNormalizedMessage({ kind: 'session_created', newSessionId: capturedSessionId, sessionId: capturedSessionId, provider: 'codex' }));
|
|
318
326
|
}
|
|
@@ -323,8 +331,8 @@ export async function queryCodex(command, options = {}, ws) {
|
|
|
323
331
|
if (abortController.signal.aborted) {
|
|
324
332
|
break;
|
|
325
333
|
}
|
|
326
|
-
if (
|
|
327
|
-
const session = activeCodexSessions.get(
|
|
334
|
+
if (sessionKey()) {
|
|
335
|
+
const session = activeCodexSessions.get(sessionKey());
|
|
328
336
|
if (session?.status === 'aborted') {
|
|
329
337
|
break;
|
|
330
338
|
}
|
|
@@ -337,17 +345,18 @@ export async function queryCodex(command, options = {}, ws) {
|
|
|
337
345
|
const transformed = transformCodexEvent(event);
|
|
338
346
|
|
|
339
347
|
// Normalize the transformed event into NormalizedMessage(s) via adapter
|
|
340
|
-
const normalizedMsgs =
|
|
348
|
+
const normalizedMsgs = context.normalizeMessage(transformed, capturedSessionId || sessionId || null);
|
|
341
349
|
for (const msg of normalizedMsgs) {
|
|
342
350
|
sendMessage(ws, msg);
|
|
343
351
|
}
|
|
344
352
|
|
|
345
353
|
if (event.type === 'turn.failed' && !terminalFailure) {
|
|
346
354
|
terminalFailure = event.error || new Error('Turn failed');
|
|
355
|
+
// Notifications are app-facing, so they carry the app session id.
|
|
347
356
|
notifyRunFailed({
|
|
348
357
|
userId: ws?.userId || null,
|
|
349
358
|
provider: 'codex',
|
|
350
|
-
sessionId:
|
|
359
|
+
sessionId: sessionId || capturedSessionId || null,
|
|
351
360
|
sessionName: sessionSummary,
|
|
352
361
|
error: terminalFailure
|
|
353
362
|
});
|
|
@@ -364,7 +373,7 @@ export async function queryCodex(command, options = {}, ws) {
|
|
|
364
373
|
|
|
365
374
|
// Send the terminal completion event — skipped for aborted runs, whose
|
|
366
375
|
// terminal `complete` (aborted: true) was already sent by abort-session.
|
|
367
|
-
const runSession =
|
|
376
|
+
const runSession = sessionKey() ? activeCodexSessions.get(sessionKey()) : null;
|
|
368
377
|
const runAborted = runSession?.status === 'aborted' || abortController.signal.aborted;
|
|
369
378
|
if (!runAborted) {
|
|
370
379
|
sendMessage(ws, createCompleteMessage({
|
|
@@ -377,7 +386,7 @@ export async function queryCodex(command, options = {}, ws) {
|
|
|
377
386
|
notifyRunStopped({
|
|
378
387
|
userId: ws?.userId || null,
|
|
379
388
|
provider: 'codex',
|
|
380
|
-
sessionId:
|
|
389
|
+
sessionId: sessionId || capturedSessionId || null,
|
|
381
390
|
sessionName: sessionSummary,
|
|
382
391
|
stopReason: 'completed'
|
|
383
392
|
});
|
|
@@ -385,7 +394,7 @@ export async function queryCodex(command, options = {}, ws) {
|
|
|
385
394
|
}
|
|
386
395
|
|
|
387
396
|
} catch (error) {
|
|
388
|
-
const session =
|
|
397
|
+
const session = sessionKey() ? activeCodexSessions.get(sessionKey()) : null;
|
|
389
398
|
const wasAborted =
|
|
390
399
|
session?.status === 'aborted' ||
|
|
391
400
|
error?.name === 'AbortError' ||
|
|
@@ -395,7 +404,7 @@ export async function queryCodex(command, options = {}, ws) {
|
|
|
395
404
|
console.error('[Codex] Error:', error);
|
|
396
405
|
|
|
397
406
|
// Check if Codex SDK is available for a clearer error message
|
|
398
|
-
const installed = await
|
|
407
|
+
const installed = await context.isProviderInstalled();
|
|
399
408
|
const errorContent = !installed
|
|
400
409
|
? 'Codex CLI is not configured. Please set up authentication first.'
|
|
401
410
|
: error.message;
|
|
@@ -410,7 +419,7 @@ export async function queryCodex(command, options = {}, ws) {
|
|
|
410
419
|
notifyRunFailed({
|
|
411
420
|
userId: ws?.userId || null,
|
|
412
421
|
provider: 'codex',
|
|
413
|
-
sessionId:
|
|
422
|
+
sessionId: sessionId || capturedSessionId || null,
|
|
414
423
|
sessionName: sessionSummary,
|
|
415
424
|
error
|
|
416
425
|
});
|
|
@@ -419,8 +428,8 @@ export async function queryCodex(command, options = {}, ws) {
|
|
|
419
428
|
|
|
420
429
|
} finally {
|
|
421
430
|
// Update session status
|
|
422
|
-
if (
|
|
423
|
-
const session = activeCodexSessions.get(
|
|
431
|
+
if (sessionKey()) {
|
|
432
|
+
const session = activeCodexSessions.get(sessionKey());
|
|
424
433
|
if (session) {
|
|
425
434
|
session.status = session.status === 'aborted' ? 'aborted' : 'completed';
|
|
426
435
|
}
|
|
@@ -480,6 +489,11 @@ export function getActiveCodexSessions() {
|
|
|
480
489
|
return sessions;
|
|
481
490
|
}
|
|
482
491
|
|
|
492
|
+
export const codexRuntime = {
|
|
493
|
+
run: queryCodex,
|
|
494
|
+
abort: abortCodexSession,
|
|
495
|
+
};
|
|
496
|
+
|
|
483
497
|
/**
|
|
484
498
|
* Helper to send message via WebSocket or writer
|
|
485
499
|
* @param {WebSocket|object} ws - WebSocket or response writer
|
|
@@ -500,7 +514,7 @@ function sendMessage(ws, data) {
|
|
|
500
514
|
}
|
|
501
515
|
|
|
502
516
|
// Clean up old completed sessions periodically
|
|
503
|
-
setInterval(() => {
|
|
517
|
+
const completedSessionCleanupTimer = setInterval(() => {
|
|
504
518
|
const now = Date.now();
|
|
505
519
|
const maxAge = 30 * 60 * 1000; // 30 minutes
|
|
506
520
|
|
|
@@ -513,3 +527,7 @@ setInterval(() => {
|
|
|
513
527
|
}
|
|
514
528
|
}
|
|
515
529
|
}, 5 * 60 * 1000); // Every 5 minutes
|
|
530
|
+
|
|
531
|
+
// Runtime cleanup should not keep focused tests or one-off scripts alive after
|
|
532
|
+
// their provider work has completed.
|
|
533
|
+
completedSessionCleanupTimer.unref?.();
|
|
@@ -134,23 +134,7 @@ export class CodexSessionSynchronizer implements IProviderSessionSynchronizer {
|
|
|
134
134
|
};
|
|
135
135
|
}
|
|
136
136
|
|
|
137
|
-
|
|
138
|
-
// app-allocated session_id mapped to the provider id. For these we title the
|
|
139
|
-
// conversation from the first user message the user typed, instead of the
|
|
140
|
-
// generic "Untitled Codex Session" placeholder. Sessions discovered purely
|
|
141
|
-
// by indexing (session_id === provider_session_id) keep the existing
|
|
142
|
-
// thread_name/last-agent-message setup below.
|
|
143
|
-
const isAppCreated =
|
|
144
|
-
existingSession != null &&
|
|
145
|
-
existingSession.provider_session_id != null &&
|
|
146
|
-
existingSession.session_id !== existingSession.provider_session_id;
|
|
147
|
-
|
|
148
|
-
let sessionName = isAppCreated
|
|
149
|
-
? await this.extractFirstUserMessageFromStart(filePath)
|
|
150
|
-
: undefined;
|
|
151
|
-
if (!sessionName) {
|
|
152
|
-
sessionName = nameMap.get(parsed.sessionId);
|
|
153
|
-
}
|
|
137
|
+
let sessionName = nameMap.get(parsed.sessionId);
|
|
154
138
|
if (!sessionName) {
|
|
155
139
|
sessionName = await this.extractLastAgentMessageFromEnd(filePath);
|
|
156
140
|
}
|
|
@@ -180,49 +164,6 @@ export class CodexSessionSynchronizer implements IProviderSessionSynchronizer {
|
|
|
180
164
|
return typeof source === 'object' && source !== null && 'subagent' in source;
|
|
181
165
|
}
|
|
182
166
|
|
|
183
|
-
/**
|
|
184
|
-
* Returns the first user message text in a Codex transcript, used to title
|
|
185
|
-
* app-created sessions from the prompt the user sent from cloudcli.
|
|
186
|
-
*
|
|
187
|
-
* Reads the `event_msg`/`user_message` payload rather than the raw
|
|
188
|
-
* `response_item` user turn so injected `<environment_context>` boilerplate is
|
|
189
|
-
* never mistaken for the user's prompt.
|
|
190
|
-
*/
|
|
191
|
-
private async extractFirstUserMessageFromStart(filePath: string): Promise<string | undefined> {
|
|
192
|
-
try {
|
|
193
|
-
const content = await readFile(filePath, 'utf8');
|
|
194
|
-
const lines = content.split(/\r?\n/);
|
|
195
|
-
|
|
196
|
-
for (const rawLine of lines) {
|
|
197
|
-
const line = rawLine.trim();
|
|
198
|
-
if (!line) {
|
|
199
|
-
continue;
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
let parsed: unknown;
|
|
203
|
-
try {
|
|
204
|
-
parsed = JSON.parse(line);
|
|
205
|
-
} catch {
|
|
206
|
-
continue;
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
const data = parsed as Record<string, unknown>;
|
|
210
|
-
const eventType = typeof data.type === 'string' ? data.type : undefined;
|
|
211
|
-
const payload = data.payload as Record<string, unknown> | undefined;
|
|
212
|
-
const payloadType = typeof payload?.type === 'string' ? payload.type : undefined;
|
|
213
|
-
const message = typeof payload?.message === 'string' ? payload.message : undefined;
|
|
214
|
-
|
|
215
|
-
if (eventType === 'event_msg' && payloadType === 'user_message' && message?.trim()) {
|
|
216
|
-
return message;
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
} catch {
|
|
220
|
-
// Ignore missing/unreadable files so sync can continue.
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
return undefined;
|
|
224
|
-
}
|
|
225
|
-
|
|
226
167
|
private async extractLastAgentMessageFromEnd(filePath: string): Promise<string | undefined> {
|
|
227
168
|
try {
|
|
228
169
|
const content = await readFile(filePath, 'utf8');
|