Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
76 changes: 76 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,79 @@
<p align="center">
<a href="https://www.atlascloud.ai/?utm_source=github&utm_medium=link&utm_campaign=emdash">
<img src="https://www.atlascloud.ai/logo.png" alt="Atlas Cloud" width="200">
</a>
</p>

> **[Atlas Cloud](https://www.atlascloud.ai/?utm_source=github&utm_medium=link&utm_campaign=emdash)** is a full-modal AI inference platform — 59 frontier models (DeepSeek-V4, Qwen3, Kimi K2, GPT-5, Gemini 2.5 Pro, Claude, Grok-4…) via a single OpenAI-compatible endpoint. Power your Emdash agents with Atlas Cloud. [View all models](https://www.atlascloud.ai/models) · [Coding Plan](https://www.atlascloud.ai/console/coding-plan)

<details>
<summary>📋 59 models available on Atlas Cloud</summary>

| Model | Type |
|-------|------|
| deepseek-ai/deepseek-v4-pro | LLM |
| deepseek-ai/deepseek-v4-0520 | LLM |
| deepseek-ai/deepseek-v4-flash | LLM |
| deepseek-ai/deepseek-r2 | LLM |
| deepseek-ai/deepseek-r2-0528 | LLM |
| deepseek-ai/deepseek-r1-0528 | LLM |
| deepseek-ai/deepseek-r1 | LLM |
| deepseek-ai/deepseek-prover-v2 | LLM |
| moonshot-ai/kimi-k2 | LLM |
| moonshot-ai/kimi-k2-0711 | LLM |
| moonshot-ai/kimi-k1.5-long | LLM |
| qwen/qwen3-235b-a22b | LLM |
| qwen/qwen3-30b-a3b | LLM |
| qwen/qwen3-32b | LLM |
| qwen/qwq-32b | LLM |
| openai/gpt-5 | LLM |
| openai/gpt-5-mini | LLM |
| openai/gpt-4.1 | LLM |
| openai/gpt-4o | LLM |
| openai/o3 | LLM |
| openai/o4-mini | LLM |
| openai/o3-mini | LLM |
| anthropic/claude-sonnet-4-5 | LLM |
| anthropic/claude-opus-4 | LLM |
| anthropic/claude-sonnet-4 | LLM |
| anthropic/claude-haiku-4-5 | LLM |
| google/gemini-2.5-pro | LLM |
| google/gemini-2.5-flash | LLM |
| google/gemini-2.5-flash-lite | LLM |
| google/gemini-2.0-flash | LLM |
| xai/grok-4 | LLM |
| xai/grok-3 | LLM |
| xai/grok-3-mini | LLM |
| meta-llama/llama-4-scout | LLM |
| meta-llama/llama-4-maverick | LLM |
| meta-llama/llama-3.3-70b | LLM |
| cohere/command-a | LLM |
| mistral/mistral-large | LLM |
| minimax/minimax-m1 | LLM |
| 01ai/yi-lightning | LLM |
| seedance/seedance-v1-pro | Video |
| seedance/seedance-v1-pro-fast | Video |
| seedance/seedance-v1-lite | Video |
| kling/kling-v2.1-pro | Video |
| kling/kling-v2.1-standard | Video |
| kling/kling-v1.6-pro | Video |
| kling/kling-v1.6-standard | Video |
| wan2/wan2.1-t2v-turbo | Video |
| wan2/wan2.1-i2v-turbo | Video |
| veo/veo3.1-fast | Video |
| veo/veo3-fast | Video |
| veo/veo3 | Video |
| runway/gen4-turbo | Video |
| stable-diffusion/sd3.5-large | Image |
| flux/flux1.1-pro-ultra | Image |
| flux/flux1.1-pro | Image |
| ideogram/ideogram-v3 | Image |
| recraft/recraft-v3 | Image |
| minimax/hailuo-i2v-01-live | Video |
</details>

---

<img alt="Emdash" src="https://github.com/user-attachments/assets/a2ecaf3c-9d84-40ca-9a8e-d4f612cc1c6f" />

<div align="center">
Expand Down
2 changes: 2 additions & 0 deletions apps/emdash-desktop/src/renderer/lib/providers/meta.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import ampcodeIcon from '@/assets/images/ampcode.svg?raw';
import atlascloudIcon from '@/assets/images/atlas.png';
import antigravityIcon from '@/assets/images/antigravity.svg?raw';
import atlassianIcon from '@/assets/images/atlassian.png';
import augmentcodeIcon from '@/assets/images/Auggie.svg?raw';
Expand Down Expand Up @@ -57,6 +58,7 @@ const ICONS: Record<string, string> = {
'kiro.png': kiroIcon,
'letta.svg': lettaIcon,
'atlassian.png': atlassianIcon,
'atlas.png': atlascloudIcon,
'cline.png': clineIcon,
'continue.png': continueIcon,
'codebuff.png': codebuffIcon,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ export const AGENT_PROVIDER_IDS = [
'pi',
'letta',
'autohand',
'atlascloud',
] as const;

export type AgentProviderId = (typeof AGENT_PROVIDER_IDS)[number];
Expand Down Expand Up @@ -657,6 +658,26 @@ export const AGENT_PROVIDERS: AgentProviderDefinition[] = [
alt: 'Autohand Code CLI',
terminalOnly: true,
},
{
id: 'atlascloud',
name: 'Atlas Cloud',
description:
'Atlas Cloud provides 59 frontier models (DeepSeek-V4, Qwen3, Kimi K2, GPT-5, Gemini 2.5 Pro, Claude, Grok-4…) via a single OpenAI-compatible endpoint. Configure any OpenAI-compatible agent CLI to use Atlas Cloud as the LLM backend.',
docUrl: 'https://www.atlascloud.ai/docs',
installCommand: 'npm install -g opencode-ai',
commands: ['opencode'],
versionArgs: ['--version'],
cli: 'opencode',
autoApproveViaEnv: true,
initialPromptFlag: '--prompt',
resumeFlag: '--session',
sessionIdFlag: '--session',
sessionIdOnResumeOnly: true,
resumeWithoutSessionFlag: '--continue',
icon: 'atlas.png',
alt: 'Atlas Cloud',
terminalOnly: true,
},
Comment on lines +662 to +683

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Duplicate command detection with existing opencode provider

Both atlascloud and the existing opencode provider set commands: ['opencode'] and installCommand: 'npm install -g opencode-ai'. The buildAgentDependencies() function in registry.ts creates an independent DependencyDescriptor per provider, so both descriptors resolve the same binary. This means any user who has opencode on their PATH will see both "Atlas Cloud" and "OpenCode" reported as available simultaneously — even though they have only one binary installed. This is likely to confuse users browsing the provider list.

Prompt To Fix With AI
This is a comment left during a code review.
Path: apps/emdash-desktop/src/shared/core/agents/agent-provider-registry.ts
Line: 662-680

Comment:
**Duplicate command detection with existing `opencode` provider**

Both `atlascloud` and the existing `opencode` provider set `commands: ['opencode']` and `installCommand: 'npm install -g opencode-ai'`. The `buildAgentDependencies()` function in `registry.ts` creates an independent `DependencyDescriptor` per provider, so both descriptors resolve the same binary. This means any user who has `opencode` on their `PATH` will see *both* "Atlas Cloud" and "OpenCode" reported as `available` simultaneously — even though they have only one binary installed. This is likely to confuse users browsing the provider list.

How can I resolve this? If you propose a fix, please make it concise.

Comment on lines +662 to +683

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 No actual API endpoint configuration for Atlas Cloud

The atlascloud entry installs and invokes the stock opencode-ai CLI, which by default points at opencode's own inference backend — not Atlas Cloud's API. There is no mechanism here (no env var injection, no config file write, no extra CLI flags) to redirect the CLI to Atlas Cloud's endpoint. The description even acknowledges this gap ("Configure any OpenAI-compatible agent CLI to use Atlas Cloud as the LLM backend"), but the provider registration provides no guidance or automation for that step. Without configuration, a user who picks this provider will get a plain opencode session backed by opencode's default models, indistinguishable from choosing the opencode provider.

Prompt To Fix With AI
This is a comment left during a code review.
Path: apps/emdash-desktop/src/shared/core/agents/agent-provider-registry.ts
Line: 662-680

Comment:
**No actual API endpoint configuration for Atlas Cloud**

The `atlascloud` entry installs and invokes the stock `opencode-ai` CLI, which by default points at opencode's own inference backend — not Atlas Cloud's API. There is no mechanism here (no env var injection, no config file write, no extra CLI flags) to redirect the CLI to Atlas Cloud's endpoint. The description even acknowledges this gap ("Configure any OpenAI-compatible agent CLI to use Atlas Cloud as the LLM backend"), but the provider registration provides no guidance or automation for that step. Without configuration, a user who picks this provider will get a plain opencode session backed by opencode's default models, indistinguishable from choosing the `opencode` provider.

How can I resolve this? If you propose a fix, please make it concise.

];
Comment on lines +679 to 684

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Missing supportsHooks: true

The opencode provider sets supportsHooks: true, which enables emdash hooks (e.g. the SessionStart hook that captures the rollout session ID for reliable conversation resumption). The atlascloud entry uses the exact same CLI (opencode) but omits this flag, so hooks will silently not fire during Atlas Cloud sessions even though the underlying binary fully supports them.

Suggested change
resumeWithoutSessionFlag: '--continue',
icon: 'atlas.png',
alt: 'Atlas Cloud',
terminalOnly: true,
},
];
resumeWithoutSessionFlag: '--continue',
icon: 'atlas.png',
alt: 'Atlas Cloud',
terminalOnly: true,
supportsHooks: true,
},
];
Prompt To Fix With AI
This is a comment left during a code review.
Path: apps/emdash-desktop/src/shared/core/agents/agent-provider-registry.ts
Line: 676-681

Comment:
**Missing `supportsHooks: true`**

The `opencode` provider sets `supportsHooks: true`, which enables emdash hooks (e.g. the `SessionStart` hook that captures the rollout session ID for reliable conversation resumption). The `atlascloud` entry uses the exact same CLI (`opencode`) but omits this flag, so hooks will silently not fire during Atlas Cloud sessions even though the underlying binary fully supports them.

```suggestion
    resumeWithoutSessionFlag: '--continue',
    icon: 'atlas.png',
    alt: 'Atlas Cloud',
    terminalOnly: true,
    supportsHooks: true,
  },
];
```

How can I resolve this? If you propose a fix, please make it concise.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!


const PROVIDER_MAP = new Map<string, AgentProviderDefinition>(
Expand Down