Add deepseek tui init support#1066
Conversation
Register DeepSeek TUI as a supported init tool with .deepseek skills output and adapterless command-skip behavior. Update docs and init parity tests to keep tool onboarding semantics consistent with existing supported tools. Co-authored-by: Cursor <cursoragent@cursor.com>
Add .cursor to gitignore to avoid committing local Cursor workspace files and settings generated during development. Co-authored-by: Cursor <cursoragent@cursor.com>
📝 WalkthroughWalkthroughThis PR extends OpenSpec's ChangesDeepSeek TUI Initialization Support
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Possibly related PRs
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Tip 💬 Introducing Slack Agent: The best way for teams to turn conversations into code.Slack Agent is built on CodeRabbit's deep understanding of your code, so your team can collaborate across the entire SDLC without losing context.
Built for teams:
One agent for your entire SDLC. Right inside Slack. Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@test/core/init.test.ts`:
- Around line 219-239: The parity it.each test relies on implicit default
delivery mode; explicitly call saveGlobalConfig({ delivery: 'both' }) before
invoking InitCommand.execute to ensure command-generation is attempted for
cursor and the test's hasCommands assertions are deterministic — modify the test
block that constructs InitCommand (InitCommand, initCommand.execute, testDir) to
invoke saveGlobalConfig({ delivery: 'both' }) right before await
initCommand.execute(testDir).
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 4ceb13c7-2e7e-4a87-8421-b82eee80b24c
📒 Files selected for processing (13)
.gitignoredocs/cli.mddocs/commands.mddocs/supported-tools.mdopenspec/changes/add-deepseek-tui-init-support/.openspec.yamlopenspec/changes/add-deepseek-tui-init-support/design.mdopenspec/changes/add-deepseek-tui-init-support/proposal.mdopenspec/changes/add-deepseek-tui-init-support/specs/ai-tool-paths/spec.mdopenspec/changes/add-deepseek-tui-init-support/specs/cli-init/spec.mdopenspec/changes/add-deepseek-tui-init-support/tasks.mdsrc/core/config.tstest/core/init.test.tstest/core/shared/tool-detection.test.ts
| it.each([ | ||
| { tool: 'cursor', skillsDir: '.cursor', commandPath: ['.cursor', 'commands', 'opsx-explore.md'], hasCommands: true }, | ||
| { tool: 'kimi', skillsDir: '.kimi', commandPath: ['.kimi', 'commands'], hasCommands: false }, | ||
| { tool: 'deepseek', skillsDir: '.deepseek', commandPath: ['.deepseek', 'commands'], hasCommands: false }, | ||
| ])( | ||
| 'should keep init parity semantics for $tool', | ||
| async ({ tool, skillsDir, commandPath, hasCommands }) => { | ||
| const initCommand = new InitCommand({ tools: tool, force: true }); | ||
| await initCommand.execute(testDir); | ||
|
|
||
| const skillFile = path.join(testDir, skillsDir, 'skills', 'openspec-explore', 'SKILL.md'); | ||
| expect(await fileExists(skillFile)).toBe(true); | ||
|
|
||
| const commandTarget = path.join(testDir, ...commandPath); | ||
| if (hasCommands) { | ||
| expect(await fileExists(commandTarget)).toBe(true); | ||
| } else { | ||
| expect(await directoryExists(commandTarget)).toBe(false); | ||
| } | ||
| }, | ||
| ); |
There was a problem hiding this comment.
Add explicit saveGlobalConfig to make the parity test's delivery assumption concrete.
The standalone DeepSeek (line 195) and Kimi (line 171) adapterless tests both call saveGlobalConfig({ delivery: 'both' }) before initCommand.execute, establishing the scenario where command generation is attempted but skipped due to no adapter. The it.each parity test omits this setup, so the cursor hasCommands: true assertion silently relies on whatever default config the fresh temp dir produces. If the default delivery mode is ever 'skills', cursor won't emit command files and the assertion fails; conversely, the kimi/deepseek hasCommands: false assertions would pass vacuously for the wrong reason (delivery gating rather than adapter absence).
🛡️ Proposed fix
)(
'should keep init parity semantics for $tool',
async ({ tool, skillsDir, commandPath, hasCommands }) => {
+ saveGlobalConfig({
+ featureFlags: {},
+ profile: 'core',
+ delivery: 'both',
+ });
const initCommand = new InitCommand({ tools: tool, force: true });
await initCommand.execute(testDir);🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@test/core/init.test.ts` around lines 219 - 239, The parity it.each test
relies on implicit default delivery mode; explicitly call saveGlobalConfig({
delivery: 'both' }) before invoking InitCommand.execute to ensure
command-generation is attempted for cursor and the test's hasCommands assertions
are deterministic — modify the test block that constructs InitCommand
(InitCommand, initCommand.execute, testDir) to invoke saveGlobalConfig({
delivery: 'both' }) right before await initCommand.execute(testDir).
Summary
Add DeepSeek TUI support to
openspec initby registeringdeepseekinAI_TOOLSwithskillsDir: '.deepseek'.openspec init --tools deepseekis now valid.deepseek/skills/...Commands skipped for: deepseek (no adapter)Also updates tool docs and adds focused init/tool-detection tests.
Test Plan
pnpm exec vitest run test/core/init.test.ts test/core/shared/tool-detection.test.ts pnpm run buildNotes
pnpm teston this machine includes unrelated environment-sensitive zsh completion test failures (Oh My Zsh detection path)..cursor/to.gitignoreto avoid committing local Cursor workspace files.openspec/changes/add-deepseek-tui-init-supportis not archived yet.Summary by CodeRabbit
New Features
.deepseek/directory when DeepSeek TUI is selectedDocumentation
Chores
.gitignoreto exclude the.cursor/directory