@ryuenn3123/agentic-senior-core 5.2.0 → 5.4.0

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/README.md CHANGED
@@ -7,7 +7,7 @@
7
7
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
8
8
  [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](CONTRIBUTING.md)
9
9
 
10
- **Install once. Works across all projects. Supports 16+ AI coding agents.**
10
+ **Install once. Works across all projects. Supports 23+ AI coding agents.**
11
11
 
12
12
  </div>
13
13
 
@@ -75,13 +75,21 @@ This copies one file to `.cursor/rules/agentic-senior-core.mdc`. Cursor reads it
75
75
  </details>
76
76
 
77
77
  <details>
78
- <summary><b>Windsurf</b> (IDE)</summary>
78
+ <summary><b>Windsurf / Devin Desktop</b> (IDE)</summary>
79
+
80
+ Windsurf was acquired by Cognition and renamed to Devin Desktop. Use `--devin` for the preferred path:
81
+
82
+ ```bash
83
+ asc adapter --devin
84
+ ```
85
+
86
+ This copies one file to `.devin/rules/agentic-senior-core.md`. For legacy Windsurf installations:
79
87
 
80
88
  ```bash
81
89
  asc adapter --windsurf
82
90
  ```
83
91
 
84
- Copies one file to `.windsurf/rules/agentic-senior-core.md`. Repeat per project.
92
+ Repeat per project.
85
93
 
86
94
  </details>
87
95
 
@@ -119,26 +127,123 @@ Copies one file to `.kiro/steering/agentic-senior-core.md`. Repeat per project.
119
127
  </details>
120
128
 
121
129
  <details>
122
- <summary><b>Google Antigravity</b> (IDE)</summary>
130
+ <summary><b>Continue</b> (VS Code extension)</summary>
131
+
132
+ ```bash
133
+ asc adapter --continue
134
+ ```
135
+
136
+ Copies one file to `.continue/rules/agentic-senior-core.md`. Repeat per project.
137
+
138
+ </details>
139
+
140
+ <details>
141
+ <summary><b>Zed</b> (IDE)</summary>
142
+
143
+ ```bash
144
+ asc adapter --zed
145
+ ```
146
+
147
+ Copies one file to `.zed/rules/agentic-senior-core.md`. Zed also reads `AGENTS.md` natively, so this is optional if you already have AGENTS.md in your project. Repeat per project.
148
+
149
+ </details>
150
+
151
+ <details>
152
+ <summary><b>Aider</b> (terminal agent)</summary>
153
+
154
+ ```bash
155
+ asc adapter --aider
156
+ ```
157
+
158
+ Copies one file to `CONVENTIONS.md` at project root. Aider reads this automatically. Repeat per project.
159
+
160
+ </details>
161
+
162
+ <details>
163
+ <summary><b>Kilo Code</b> (VS Code extension)</summary>
164
+
165
+ ```bash
166
+ asc adapter --kilocode
167
+ ```
168
+
169
+ Copies one file to `.kilocode/rules/agentic-senior-core.md`. Repeat per project.
170
+
171
+ </details>
172
+
173
+ <details>
174
+ <summary><b>Roo Code</b> (VS Code extension)</summary>
175
+
176
+ ```bash
177
+ asc adapter --roo
178
+ ```
179
+
180
+ Copies one file to `.roo/rules/agentic-senior-core.md`. Repeat per project.
181
+
182
+ </details>
183
+
184
+ <details>
185
+ <summary><b>OpenHands</b></summary>
186
+
187
+ ```bash
188
+ asc adapter --openhands
189
+ ```
190
+
191
+ Copies one file to `.openhands/microagents/agentic-senior-core.md`. Repeat per project.
192
+
193
+ </details>
194
+
195
+ <details>
196
+ <summary><b>Google Antigravity IDE</b></summary>
123
197
 
124
198
  **Option A -- workspace rules (per project):**
125
199
 
126
- Copy `.agents/rules/agentic-senior-core.md` into your project. Antigravity reads it automatically with `trigger: always_on`.
200
+ Copy the rules file into your project's `.agents/rules/` directory:
201
+
202
+ ```bash
203
+ # Create the directory first, then copy
204
+ mkdir -p .agents/rules
205
+
206
+ # From the npm package (after Step 1)
207
+ cp "$(npm root -g)/@ryuenn3123/agentic-senior-core/.agents/rules/agentic-senior-core.md" .agents/rules/
208
+ ```
209
+
210
+ PowerShell (Windows):
211
+ ```powershell
212
+ mkdir .agents\rules -Force
213
+ cp "$(npm root -g)/@ryuenn3123/agentic-senior-core/.agents/rules/agentic-senior-core.md" .agents\rules\
214
+ ```
215
+
216
+ Antigravity IDE reads it automatically with `trigger: always_on`.
127
217
 
128
218
  **Option B -- global plugin (all projects):**
129
219
 
130
- ```bash
131
- # Via Antigravity CLI
132
- agy plugin install https://github.com/fatidaprilian/Agentic-Senior-Core.git
220
+ Copy the plugin bundle to Antigravity's global plugin directory:
221
+
222
+ ```powershell
223
+ # Windows
224
+ xcopy /E /I "%APPDATA%\npm\node_modules\@ryuenn3123\agentic-senior-core\.agents\plugins\agentic-senior-core" "%USERPROFILE%\.gemini\config\plugins\agentic-senior-core"
225
+ ```
133
226
 
134
- # Or manually copy the plugin bundle to:
135
- # ~/.gemini/config/plugins/agentic-senior-core/
227
+ ```bash
228
+ # macOS / Linux
229
+ cp -r "$(npm root -g)/@ryuenn3123/agentic-senior-core/.agents/plugins/agentic-senior-core" ~/.gemini/config/plugins/
136
230
  ```
137
231
 
138
232
  The plugin bundle includes rules, skills (`/asc-review`, `/asc-audit`, `/asc-refactor`), and `plugin.json`.
139
233
 
140
234
  </details>
141
235
 
236
+ <details>
237
+ <summary><b>Google Antigravity CLI</b></summary>
238
+
239
+ Requires [Antigravity CLI](https://antigravity.google) (`agy`) installed separately.
240
+
241
+ ```bash
242
+ agy plugin install https://github.com/fatidaprilian/Agentic-Senior-Core.git
243
+ ```
244
+
245
+ </details>
246
+
142
247
  <details>
143
248
  <summary><b>Devin / Hermes / OpenCode / OpenClaw</b></summary>
144
249
 
@@ -153,12 +258,12 @@ Plugin manifests ship in the npm package at their standard paths (`.devin-plugin
153
258
  asc adapter --all
154
259
  ```
155
260
 
156
- Generates adapter files for Cursor, Windsurf, Cline, Copilot, and Kiro in one go.
261
+ Generates adapter files for Cursor, Devin Desktop, Windsurf, Cline, Copilot, Kiro, Continue, Zed, Aider, Kilo Code, Roo Code, and OpenHands in one go.
157
262
 
158
263
  </details>
159
264
 
160
265
  **Terminal agents** (Claude Code, Codex, Gemini, Copilot CLI) = install once, always-on, zero per-project files.
161
- **IDE agents** (Cursor, Windsurf, Cline, Copilot VS Code, Kiro, Antigravity) = one file per project via `asc adapter` or copy.
266
+ **IDE agents** (Cursor, Devin Desktop, Cline, Copilot VS Code, Kiro, Continue, Zed, Aider, Kilo Code, Roo Code, OpenHands, Antigravity) = one file per project via `asc adapter` or copy.
162
267
 
163
268
  ### Updating
164
269
 
@@ -205,12 +310,20 @@ Input validation at trust boundaries, parameterized queries, auth checks, error
205
310
  | Hermes | Terminal agent | Plugin registration | No |
206
311
  | OpenCode | Terminal agent | Auto-detected | No |
207
312
  | OpenClaw | Terminal agent | Auto-detected | No |
208
- | Antigravity | IDE | `agy plugin install` or copy rules | No (plugin) / Yes (rules) |
313
+ | Antigravity IDE | IDE | Copy rules or plugin bundle | No (global) / Yes (rules) |
314
+ | Antigravity CLI | Terminal agent | `agy plugin install` | No |
209
315
  | Cursor | IDE | `asc adapter --cursor` | Yes (1 file) |
210
- | Windsurf | IDE | `asc adapter --windsurf` | Yes (1 file) |
316
+ | Devin Desktop | IDE | `asc adapter --devin` | Yes (1 file) |
317
+ | Windsurf (legacy) | IDE | `asc adapter --windsurf` | Yes (1 file) |
211
318
  | Cline | VS Code ext | `asc adapter --cline` | Yes (1 file) |
212
319
  | GitHub Copilot | VS Code ext | `asc adapter --copilot` | Yes (1 file) |
213
320
  | Kiro | IDE | `asc adapter --kiro` | Yes (1 file) |
321
+ | Continue | VS Code ext | `asc adapter --continue` | Yes (1 file) |
322
+ | Zed | IDE | `asc adapter --zed` | Yes (1 file) |
323
+ | Aider | Terminal agent | `asc adapter --aider` | Yes (1 file) |
324
+ | Kilo Code | VS Code ext | `asc adapter --kilocode` | Yes (1 file) |
325
+ | Roo Code | VS Code ext | `asc adapter --roo` | Yes (1 file) |
326
+ | OpenHands | Agent | `asc adapter --openhands` | Yes (1 file) |
214
327
 
215
328
  ---
216
329
 
@@ -230,7 +343,8 @@ Available on plugin hosts (Claude Code, Codex, Gemini CLI):
230
343
  ## CLI
231
344
 
232
345
  ```bash
233
- asc adapter [--cursor|--windsurf|--cline|--copilot|--kiro|--all]
346
+ asc adapter [--cursor|--devin|--windsurf|--cline|--copilot|--kiro|--continue|--zed|--aider|--kilocode|--roo|--openhands|--all]
347
+ asc uninstall [--dry-run]
234
348
  asc clean [--dry-run]
235
349
  asc status
236
350
  asc mcp
@@ -3,10 +3,11 @@
3
3
  * Agentic-Senior-Core CLI v5 -- Universal plugin system.
4
4
  *
5
5
  * Commands:
6
- * adapter Generate instruction-tier adapter files for IDEs without plugin support
7
- * clean Remove v4 per-project artifacts (.agent-context/, bridge files)
8
- * status Show detected IDEs and install hints
9
- * mcp Start MCP stdio server
6
+ * adapter Generate instruction-tier adapter files for IDEs without plugin support
7
+ * uninstall Remove ASC adapter files from the current project
8
+ * clean Remove v4 per-project artifacts (.agent-context/, bridge files)
9
+ * status Show detected IDEs and install hints
10
+ * mcp Start MCP stdio server
10
11
  */
11
12
  import { exit } from 'node:process';
12
13
  import { readFileSync } from 'node:fs';
@@ -25,9 +26,10 @@ function printUsage() {
25
26
  console.log(' Claude Code: /plugin marketplace add fatidaprilian/Agentic-Senior-Core');
26
27
  console.log(' Codex CLI: codex plugins install agentic-senior-core\n');
27
28
  console.log('Adapter install (one file per project):');
28
- console.log(' asc adapter --cursor --windsurf --cline --copilot --kiro --all\n');
29
+ console.log(' asc adapter --cursor --devin --cline --copilot --kiro --continue --zed --aider --kilocode --roo --openhands --windsurf --all\n');
29
30
  console.log('Commands:');
30
31
  console.log(' adapter Generate instruction-tier adapter files');
32
+ console.log(' uninstall Remove ASC adapter files from this project');
31
33
  console.log(' clean Remove v4 per-project artifacts');
32
34
  console.log(' status Show detected IDEs and install hints');
33
35
  console.log(' mcp Start MCP stdio server');
@@ -55,6 +57,12 @@ async function main() {
55
57
  return;
56
58
  }
57
59
 
60
+ if (commandArgument === 'uninstall') {
61
+ const { runUninstallCommand } = await import('../lib/cli/commands/uninstall.mjs');
62
+ await runUninstallCommand(commandArguments);
63
+ return;
64
+ }
65
+
58
66
  if (commandArgument === 'clean') {
59
67
  const { runCleanCommand } = await import('../lib/cli/commands/clean.mjs');
60
68
  await runCleanCommand(commandArguments);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentic-senior-core",
3
- "version": "5.2.0",
3
+ "version": "5.4.0",
4
4
  "description": "Universal AI coding rules. Write code like a staff engineer.",
5
5
  "author": "fatidaprilian",
6
6
  "license": "MIT",
@@ -13,10 +13,15 @@ const ADAPTER_TARGETS = {
13
13
  sourcePath: '.cursor/rules/agentic-senior-core.mdc',
14
14
  },
15
15
  windsurf: {
16
- label: 'Windsurf',
16
+ label: 'Windsurf (legacy)',
17
17
  targetPath: '.windsurf/rules/agentic-senior-core.md',
18
18
  sourcePath: '.windsurf/rules/agentic-senior-core.md',
19
19
  },
20
+ devin: {
21
+ label: 'Devin Desktop',
22
+ targetPath: '.devin/rules/agentic-senior-core.md',
23
+ sourcePath: '.devin/rules/agentic-senior-core.md',
24
+ },
20
25
  cline: {
21
26
  label: 'Cline',
22
27
  targetPath: '.clinerules/agentic-senior-core.md',
@@ -32,6 +37,36 @@ const ADAPTER_TARGETS = {
32
37
  targetPath: '.kiro/steering/agentic-senior-core.md',
33
38
  sourcePath: '.kiro/steering/agentic-senior-core.md',
34
39
  },
40
+ continue: {
41
+ label: 'Continue',
42
+ targetPath: '.continue/rules/agentic-senior-core.md',
43
+ sourcePath: '.continue/rules/agentic-senior-core.md',
44
+ },
45
+ zed: {
46
+ label: 'Zed',
47
+ targetPath: '.zed/rules/agentic-senior-core.md',
48
+ sourcePath: '.zed/rules/agentic-senior-core.md',
49
+ },
50
+ aider: {
51
+ label: 'Aider',
52
+ targetPath: 'CONVENTIONS.md',
53
+ sourcePath: 'CONVENTIONS.md',
54
+ },
55
+ kilocode: {
56
+ label: 'Kilo Code',
57
+ targetPath: '.kilocode/rules/agentic-senior-core.md',
58
+ sourcePath: '.kilocode/rules/agentic-senior-core.md',
59
+ },
60
+ roo: {
61
+ label: 'Roo Code',
62
+ targetPath: '.roo/rules/agentic-senior-core.md',
63
+ sourcePath: '.roo/rules/agentic-senior-core.md',
64
+ },
65
+ openhands: {
66
+ label: 'OpenHands',
67
+ targetPath: '.openhands/microagents/agentic-senior-core.md',
68
+ sourcePath: '.openhands/microagents/agentic-senior-core.md',
69
+ },
35
70
  };
36
71
 
37
72
  async function pathExists(filePath) {
@@ -87,7 +122,7 @@ export async function runAdapterCommand(commandArguments) {
87
122
 
88
123
  if (requestedAdapters.length === 0) {
89
124
  console.log('Agentic Senior Core -- Adapter Generator\n');
90
- console.log('Usage: asc adapter [--cursor] [--windsurf] [--cline] [--copilot] [--kiro] [--all]\n');
125
+ console.log('Usage: asc adapter [--cursor] [--devin] [--cline] [--copilot] [--kiro] [--continue] [--zed] [--aider] [--kilocode] [--roo] [--openhands] [--windsurf] [--all]\n');
91
126
  console.log('Generates instruction-tier adapter files for IDEs without plugin support.');
92
127
  console.log('Each adapter is a single file containing the universal coding rules.\n');
93
128
  console.log('Available adapters:');
@@ -1,62 +1,131 @@
1
1
  import fs from 'node:fs/promises';
2
2
  import path from 'node:path';
3
3
  import os from 'node:os';
4
+ import { execSync } from 'node:child_process';
4
5
 
5
6
  const HOME = os.homedir();
7
+ const IS_WIN = process.platform === 'win32';
8
+ const IS_MAC = process.platform === 'darwin';
9
+
10
+ function commandExists(name) {
11
+ try {
12
+ execSync(IS_WIN ? `where ${name}` : `which ${name}`, { stdio: 'ignore' });
13
+ return true;
14
+ } catch {
15
+ return false;
16
+ }
17
+ }
6
18
 
7
19
  const IDE_CHECKS = [
8
20
  {
9
21
  name: 'Claude Code',
10
22
  type: 'plugin',
11
- checkPaths: [
12
- path.join(HOME, '.claude'),
13
- ],
14
- installHint: '/plugin marketplace add fatidaprilian/Agentic-Senior-Core',
23
+ checkPaths: [path.join(HOME, '.claude')],
24
+ installHint: 'claude plugin add fatidaprilian/Agentic-Senior-Core',
15
25
  },
16
26
  {
17
27
  name: 'Codex CLI',
18
28
  type: 'plugin',
19
- checkPaths: [
20
- path.join(HOME, '.codex'),
21
- ],
29
+ checkPaths: [path.join(HOME, '.codex')],
22
30
  installHint: 'codex plugins install agentic-senior-core',
23
31
  },
24
32
  {
25
33
  name: 'Gemini CLI',
26
34
  type: 'plugin',
27
- checkPaths: [
28
- path.join(HOME, '.gemini'),
29
- ],
35
+ checkPaths: [path.join(HOME, '.gemini')],
30
36
  installHint: 'Auto-detected via gemini-extension.json',
31
37
  },
38
+ {
39
+ name: 'Antigravity',
40
+ type: 'plugin',
41
+ checkPaths: [path.join(HOME, '.gemini')],
42
+ checkCommands: ['agy'],
43
+ installHint: 'agy plugin install https://github.com/fatidaprilian/Agentic-Senior-Core.git',
44
+ },
32
45
  {
33
46
  name: 'Cursor',
34
47
  type: 'adapter',
35
48
  checkPaths: [
36
49
  path.join(HOME, '.cursor'),
37
- path.join(HOME, 'AppData', 'Roaming', 'Cursor'),
38
- path.join(HOME, '.config', 'Cursor'),
50
+ ...(IS_WIN ? [path.join(HOME, 'AppData', 'Roaming', 'Cursor')] : []),
51
+ ...(!IS_WIN ? [path.join(HOME, '.config', 'Cursor')] : []),
39
52
  ],
40
53
  installHint: 'asc adapter --cursor',
41
54
  },
42
55
  {
43
- name: 'Windsurf',
56
+ name: 'Devin Desktop',
44
57
  type: 'adapter',
45
58
  checkPaths: [
59
+ path.join(HOME, '.devin'),
46
60
  path.join(HOME, '.codeium'),
47
- path.join(HOME, '.windsurf'),
61
+ ...(IS_WIN ? [path.join(HOME, 'AppData', 'Roaming', 'Windsurf')] : []),
48
62
  ],
49
- installHint: 'asc adapter --windsurf',
63
+ installHint: 'asc adapter --devin',
50
64
  },
51
65
  {
52
66
  name: 'Cline',
53
67
  type: 'adapter',
54
68
  checkPaths: [
55
- path.join(HOME, 'Documents', 'Cline'),
56
69
  path.join(HOME, '.cline'),
70
+ ...(IS_WIN ? [path.join(HOME, 'Documents', 'Cline')] : []),
57
71
  ],
58
72
  installHint: 'asc adapter --cline',
59
73
  },
74
+ {
75
+ name: 'GitHub Copilot',
76
+ type: 'adapter',
77
+ checkPaths: [
78
+ path.join(HOME, '.config', 'github-copilot'),
79
+ ...(IS_WIN ? [path.join(HOME, 'AppData', 'Local', 'GitHub Copilot')] : []),
80
+ ],
81
+ installHint: 'asc adapter --copilot',
82
+ },
83
+ {
84
+ name: 'Kiro',
85
+ type: 'adapter',
86
+ checkPaths: [path.join(HOME, '.kiro')],
87
+ installHint: 'asc adapter --kiro',
88
+ },
89
+ {
90
+ name: 'Continue',
91
+ type: 'adapter',
92
+ checkPaths: [path.join(HOME, '.continue')],
93
+ installHint: 'asc adapter --continue',
94
+ },
95
+ {
96
+ name: 'Zed',
97
+ type: 'adapter',
98
+ checkPaths: [
99
+ path.join(HOME, '.config', 'zed'),
100
+ ...(IS_MAC ? [path.join(HOME, 'Library', 'Application Support', 'Zed')] : []),
101
+ ],
102
+ installHint: 'asc adapter --zed',
103
+ },
104
+ {
105
+ name: 'Aider',
106
+ type: 'adapter',
107
+ checkPaths: [],
108
+ checkCommands: ['aider'],
109
+ installHint: 'asc adapter --aider',
110
+ },
111
+ {
112
+ name: 'Kilo Code',
113
+ type: 'adapter',
114
+ checkPaths: [path.join(HOME, '.kilocode')],
115
+ installHint: 'asc adapter --kilocode',
116
+ },
117
+ {
118
+ name: 'Roo Code',
119
+ type: 'adapter',
120
+ checkPaths: [path.join(HOME, '.roo')],
121
+ installHint: 'asc adapter --roo',
122
+ },
123
+ {
124
+ name: 'OpenHands',
125
+ type: 'adapter',
126
+ checkPaths: [path.join(HOME, '.openhands')],
127
+ installHint: 'asc adapter --openhands',
128
+ },
60
129
  ];
61
130
 
62
131
  async function pathExists(filePath) {
@@ -69,10 +138,11 @@ async function pathExists(filePath) {
69
138
  }
70
139
 
71
140
  export async function runStatusCommand() {
72
- console.log('Agentic Senior Core -- IDE Status\n');
141
+ console.log('Agentic Senior Core -- Host Status\n');
73
142
 
74
143
  for (const ide of IDE_CHECKS) {
75
144
  let detected = false;
145
+
76
146
  for (const checkPath of ide.checkPaths) {
77
147
  if (await pathExists(checkPath)) {
78
148
  detected = true;
@@ -80,9 +150,18 @@ export async function runStatusCommand() {
80
150
  }
81
151
  }
82
152
 
153
+ if (!detected && ide.checkCommands) {
154
+ for (const cmd of ide.checkCommands) {
155
+ if (commandExists(cmd)) {
156
+ detected = true;
157
+ break;
158
+ }
159
+ }
160
+ }
161
+
83
162
  const icon = detected ? '[x]' : '[ ]';
84
163
  const support = ide.type === 'plugin' ? '(plugin)' : '(adapter)';
85
- console.log(` ${icon} ${ide.name.padEnd(15)} ${support.padEnd(10)} ${detected ? 'detected' : 'not found'}`);
164
+ console.log(` ${icon} ${ide.name.padEnd(18)} ${support.padEnd(10)} ${detected ? 'detected' : 'not found'}`);
86
165
 
87
166
  if (detected) {
88
167
  console.log(` Install: ${ide.installHint}`);
@@ -91,4 +170,5 @@ export async function runStatusCommand() {
91
170
 
92
171
  console.log('\nPlugin hosts get always-on rules via SessionStart hook.');
93
172
  console.log('Adapter hosts need one file per project via "asc adapter".');
173
+ console.log('\nTip: run "asc adapter --all" to generate adapters for all supported hosts.');
94
174
  }
@@ -0,0 +1,80 @@
1
+ import fs from 'node:fs/promises';
2
+ import path from 'node:path';
3
+
4
+ const ASC_SIGNATURE = '# Agentic Senior Core';
5
+
6
+ const ADAPTER_FILES = [
7
+ { label: 'Cursor', path: '.cursor/rules/agentic-senior-core.mdc' },
8
+ { label: 'Windsurf (legacy)', path: '.windsurf/rules/agentic-senior-core.md' },
9
+ { label: 'Devin Desktop', path: '.devin/rules/agentic-senior-core.md' },
10
+ { label: 'Cline', path: '.clinerules/agentic-senior-core.md' },
11
+ { label: 'GitHub Copilot', path: '.github/copilot-instructions.md' },
12
+ { label: 'Kiro', path: '.kiro/steering/agentic-senior-core.md' },
13
+ { label: 'Continue', path: '.continue/rules/agentic-senior-core.md' },
14
+ { label: 'Zed', path: '.zed/rules/agentic-senior-core.md' },
15
+ { label: 'Aider', path: 'CONVENTIONS.md' },
16
+ { label: 'Kilo Code', path: '.kilocode/rules/agentic-senior-core.md' },
17
+ { label: 'Roo Code', path: '.roo/rules/agentic-senior-core.md' },
18
+ { label: 'OpenHands', path: '.openhands/microagents/agentic-senior-core.md' },
19
+ ];
20
+
21
+ async function pathExists(filePath) {
22
+ try {
23
+ await fs.access(filePath);
24
+ return true;
25
+ } catch {
26
+ return false;
27
+ }
28
+ }
29
+
30
+ async function isAscFile(filePath) {
31
+ try {
32
+ const content = await fs.readFile(filePath, 'utf8');
33
+ return content.includes(ASC_SIGNATURE);
34
+ } catch {
35
+ return false;
36
+ }
37
+ }
38
+
39
+ export async function runUninstallCommand(commandArguments) {
40
+ const targetDirectory = process.cwd();
41
+ const dryRun = commandArguments.includes('--dry-run');
42
+
43
+ console.log('Agentic Senior Core -- Uninstall adapters\n');
44
+ console.log(`Target: ${targetDirectory}`);
45
+ if (dryRun) console.log('Mode: dry-run (no files will be deleted)\n');
46
+ else console.log('');
47
+
48
+ let found = 0;
49
+ let removed = 0;
50
+
51
+ for (const adapter of ADAPTER_FILES) {
52
+ const fullPath = path.join(targetDirectory, adapter.path);
53
+ if (!(await pathExists(fullPath))) continue;
54
+ if (!(await isAscFile(fullPath))) {
55
+ console.log(` skip: ${adapter.path} (not an ASC file)`);
56
+ continue;
57
+ }
58
+
59
+ found++;
60
+
61
+ if (dryRun) {
62
+ console.log(` would remove: ${adapter.path} (${adapter.label})`);
63
+ } else {
64
+ await fs.rm(fullPath);
65
+ console.log(` removed: ${adapter.path} (${adapter.label})`);
66
+ removed++;
67
+ }
68
+ }
69
+
70
+ if (found === 0) {
71
+ console.log('No ASC adapter files found in this project.');
72
+ return;
73
+ }
74
+
75
+ if (dryRun) {
76
+ console.log(`\n${found} adapter file(s) found. Run without --dry-run to remove.`);
77
+ } else {
78
+ console.log(`\n${removed} adapter file(s) removed.`);
79
+ }
80
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ryuenn3123/agentic-senior-core",
3
- "version": "5.2.0",
3
+ "version": "5.4.0",
4
4
  "type": "module",
5
5
  "description": "Universal AI coding rules. Write code like a staff engineer, not a junior.",
6
6
  "bin": {
@@ -12,6 +12,7 @@
12
12
  "bin/",
13
13
  "lib/cli/commands/adapter.mjs",
14
14
  "lib/cli/commands/clean.mjs",
15
+ "lib/cli/commands/uninstall.mjs",
15
16
  "lib/cli/commands/status.mjs",
16
17
  "lib/cli/commands/mcp.mjs",
17
18
  "lib/cli/ascx/",
@@ -25,8 +26,15 @@
25
26
  ".opencode/",
26
27
  ".cursor/rules/",
27
28
  ".windsurf/rules/",
29
+ ".devin/rules/",
28
30
  ".clinerules/",
29
31
  ".kiro/steering/",
32
+ ".continue/rules/",
33
+ ".zed/rules/",
34
+ ".kilocode/rules/",
35
+ ".roo/rules/",
36
+ ".openhands/microagents/",
37
+ "CONVENTIONS.md",
30
38
  "gemini-extension.json",
31
39
  "plugin.yaml",
32
40
  "__init__.py",
@@ -63,6 +71,13 @@
63
71
  "hermes",
64
72
  "opencode",
65
73
  "openclaw",
74
+ "zed",
75
+ "continue",
76
+ "aider",
77
+ "kilocode",
78
+ "roo-code",
79
+ "openhands",
80
+ "antigravity",
66
81
  "plugin",
67
82
  "universal",
68
83
  "clean-code",
@@ -0,0 +1,37 @@
1
+ # ASC Adapter
2
+
3
+ Detect installed AI coding hosts and generate adapter files for the current project.
4
+
5
+ ## When to use
6
+
7
+ Run this when setting up a new project or when a developer wants ASC rules active across all their AI coding tools.
8
+
9
+ ## Steps
10
+
11
+ 1. Run `asc status` to detect which AI coding hosts are installed on this system.
12
+ 2. Check which adapter files already exist in the current project directory.
13
+ 3. For any detected host that is missing an adapter, run `asc adapter --<host>` to generate it.
14
+ 4. Use `asc adapter --all` to generate adapters for all supported hosts at once.
15
+
16
+ ## Supported hosts
17
+
18
+ Plugin hosts (always-on, no adapter needed): Claude Code, Codex CLI, Gemini CLI, Antigravity CLI, Copilot CLI, Devin CLI, Hermes, OpenCode, OpenClaw.
19
+
20
+ Adapter hosts (one file per project): Cursor, Devin Desktop, Cline, GitHub Copilot, Kiro, Continue, Zed, Aider, Kilo Code, Roo Code, OpenHands.
21
+
22
+ ## Commands
23
+
24
+ ```bash
25
+ asc status # Show detected hosts
26
+ asc adapter --all # Generate all adapters
27
+ asc adapter --cursor # Generate for specific host
28
+ asc uninstall # Remove all ASC adapter files
29
+ asc uninstall --dry-run # Preview what would be removed
30
+ ```
31
+
32
+ ## Notes
33
+
34
+ - Adapter files contain the ASC universal coding rules, compressed to fit within each host's size limits.
35
+ - Cursor uses `.mdc` format with `alwaysApply: true` frontmatter.
36
+ - Windsurf is now Devin Desktop. Use `--devin` for the preferred path, `--windsurf` for legacy.
37
+ - Zed also reads `AGENTS.md` natively, so the adapter is optional.