Skip to content

Commit 3d8c427

Browse files
committed
feat(core): add codeassistant support
Signed-off-by: Александр Мелентьев <aleksandr4842@ya.ru>
1 parent 1b06fdd commit 3d8c427

5 files changed

Lines changed: 40 additions & 1 deletion

File tree

docs/supported-tools.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ You can enable expanded workflows (`new`, `continue`, `ff`, `verify`, `bulk-arch
4747
| Mistral Vibe (`vibe`) | `.vibe/skills/openspec-*/SKILL.md` | Not generated (no command adapter; use skill-based `/openspec-*` invocations) |
4848
| OpenCode (`opencode`) | `.opencode/skills/openspec-*/SKILL.md` | `.opencode/commands/opsx-<id>.md` |
4949
| Pi (`pi`) | `.pi/skills/openspec-*/SKILL.md` | `.pi/prompts/opsx-<id>.md` |
50+
| SourceCraft Code Assistant (`codeassistant`) | `.codeassistant/skills/openspec-*/SKILL.md` | `.codeassistant/commands/opsx-<id>.md` |
5051
| Qoder (`qoder`) | `.qoder/skills/openspec-*/SKILL.md` | `.qoder/commands/opsx/<id>.md` |
5152
| Qwen Code (`qwen`) | `.qwen/skills/openspec-*/SKILL.md` | `.qwen/commands/opsx-<id>.toml` |
5253
| RooCode (`roocode`) | `.roo/skills/openspec-*/SKILL.md` | `.roo/commands/opsx-<id>.md` |
@@ -75,7 +76,7 @@ openspec init --tools none
7576
openspec init --profile core
7677
```
7778

78-
**Available tool IDs (`--tools`):** `amazon-q`, `antigravity`, `auggie`, `bob`, `claude`, `cline`, `codex`, `forgecode`, `codebuddy`, `continue`, `costrict`, `crush`, `cursor`, `factory`, `gemini`, `github-copilot`, `iflow`, `junie`, `kilocode`, `kimi`, `kiro`, `lingma`, `opencode`, `pi`, `qoder`, `qwen`, `roocode`, `trae`, `vibe`, `windsurf`
79+
**Available tool IDs (`--tools`):** `amazon-q`, `antigravity`, `auggie`, `bob`, `claude`, `cline`, `codex`, `forgecode`, `codebuddy`, `continue`, `costrict`, `crush`, `cursor`, `factory`, `gemini`, `github-copilot`, `iflow`, `junie`, `kilocode`, `kimi`, `kiro`, `lingma`, `opencode`, `pi`, `qoder`, `qwen`, `roocode`, `codeassistant`, `trae`, `vibe`, `windsurf`
7980

8081
## Workflow-Dependent Installation
8182

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/**
2+
* SourceCraft Code Assistant Command Adapter
3+
*
4+
* Formats commands for SourceCraft Code Assistant following its frontmatter specification.
5+
*/
6+
7+
import path from 'path';
8+
import type { CommandContent, ToolCommandAdapter } from '../types.js';
9+
import { transformToHyphenCommands } from '../../../utils/command-references.js';
10+
11+
/**
12+
* SourceCraft Code Assistant adapter for command generation.
13+
* File path: .codeassistant/commands/opsx-<id>.md
14+
* Frontmatter: description
15+
*/
16+
export const codeassistantAdapter: ToolCommandAdapter = {
17+
toolId: 'codeassistant',
18+
19+
getFilePath(commandId: string): string {
20+
return path.join('.codeassistant', 'commands', `opsx-${commandId}.md`);
21+
},
22+
23+
formatFile(content: CommandContent): string {
24+
// Transform command references from colon to hyphen format for SourceCraft
25+
const transformedBody = transformToHyphenCommands(content.body);
26+
27+
return `---
28+
description: ${content.description}
29+
---
30+
31+
${transformedBody}
32+
`;
33+
},
34+
};

src/core/command-generation/adapters/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ export { kilocodeAdapter } from './kilocode.js';
2525
export { kiroAdapter } from './kiro.js';
2626
export { opencodeAdapter } from './opencode.js';
2727
export { piAdapter } from './pi.js';
28+
export { codeassistantAdapter } from './codeassistant.js';
2829
export { qoderAdapter } from './qoder.js';
2930
export { lingmaAdapter } from './lingma.js';
3031
export { qwenAdapter } from './qwen.js';

src/core/command-generation/registry.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import { kilocodeAdapter } from './adapters/kilocode.js';
2727
import { kiroAdapter } from './adapters/kiro.js';
2828
import { opencodeAdapter } from './adapters/opencode.js';
2929
import { piAdapter } from './adapters/pi.js';
30+
import { codeassistantAdapter } from './adapters/codeassistant.js';
3031
import { qoderAdapter } from './adapters/qoder.js';
3132
import { lingmaAdapter } from './adapters/lingma.js';
3233
import { qwenAdapter } from './adapters/qwen.js';
@@ -62,6 +63,7 @@ export class CommandAdapterRegistry {
6263
CommandAdapterRegistry.register(kiroAdapter);
6364
CommandAdapterRegistry.register(opencodeAdapter);
6465
CommandAdapterRegistry.register(piAdapter);
66+
CommandAdapterRegistry.register(codeassistantAdapter);
6567
CommandAdapterRegistry.register(qoderAdapter);
6668
CommandAdapterRegistry.register(lingmaAdapter);
6769
CommandAdapterRegistry.register(qwenAdapter);

src/core/config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ export const AI_TOOLS: AIToolOption[] = [
4444
{ name: 'Mistral Vibe', value: 'vibe', available: true, successLabel: 'Mistral Vibe', skillsDir: '.vibe' },
4545
{ name: 'OpenCode', value: 'opencode', available: true, successLabel: 'OpenCode', skillsDir: '.opencode' },
4646
{ name: 'Pi', value: 'pi', available: true, successLabel: 'Pi', skillsDir: '.pi' },
47+
{ name: 'SourceCraft Code Assistant', value: 'codeassistant', available: true, successLabel: 'SourceCraft Code Assistant', skillsDir: '.codeassistant' },
4748
{ name: 'Qoder', value: 'qoder', available: true, successLabel: 'Qoder', skillsDir: '.qoder' },
4849
{ name: 'Qwen Code', value: 'qwen', available: true, successLabel: 'Qwen Code', skillsDir: '.qwen' },
4950
{ name: 'RooCode', value: 'roocode', available: true, successLabel: 'RooCode', skillsDir: '.roo' },

0 commit comments

Comments
 (0)