@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/.agents/plugins/agentic-senior-core/rules/agentic-senior-core.md +7 -28
- package/.agents/plugins/agentic-senior-core/skills/asc-adapter/SKILL.md +37 -0
- package/.agents/rules/agentic-senior-core.md +7 -28
- package/.claude-plugin/plugin.json +1 -1
- package/.clinerules/agentic-senior-core.md +5 -10
- package/.codex-plugin/plugin.json +1 -1
- package/.continue/rules/agentic-senior-core.md +89 -0
- package/.cursor/rules/agentic-senior-core.mdc +5 -10
- package/.devin/rules/agentic-senior-core.md +89 -0
- package/.devin-plugin/plugin.json +1 -1
- package/.github/copilot-instructions.md +5 -10
- package/.github/plugin/plugin.json +1 -1
- package/.kilocode/rules/agentic-senior-core.md +89 -0
- package/.kiro/steering/agentic-senior-core.md +5 -10
- package/.openhands/microagents/agentic-senior-core.md +89 -0
- package/.roo/rules/agentic-senior-core.md +89 -0
- package/.windsurf/rules/agentic-senior-core.md +5 -10
- package/.zed/rules/agentic-senior-core.md +89 -0
- package/AGENTS.md +7 -28
- package/CONVENTIONS.md +89 -0
- package/README.md +129 -15
- package/bin/agentic-senior-core.js +13 -5
- package/gemini-extension.json +1 -1
- package/lib/cli/commands/adapter.mjs +37 -2
- package/lib/cli/commands/status.mjs +98 -18
- package/lib/cli/commands/uninstall.mjs +80 -0
- package/package.json +16 -1
- package/skills/asc-adapter/SKILL.md +37 -0
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
[](LICENSE)
|
|
8
8
|
[](CONTRIBUTING.md)
|
|
9
9
|
|
|
10
|
-
**Install once. Works across all projects. Supports
|
|
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
|
-
|
|
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>
|
|
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
|
|
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
|
-
|
|
131
|
-
|
|
132
|
-
|
|
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
|
-
|
|
135
|
-
#
|
|
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
|
|
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,
|
|
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 |
|
|
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
|
-
|
|
|
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
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
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 --
|
|
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);
|
package/gemini-extension.json
CHANGED
|
@@ -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] [--
|
|
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
|
-
|
|
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: '
|
|
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, '
|
|
61
|
+
...(IS_WIN ? [path.join(HOME, 'AppData', 'Roaming', 'Windsurf')] : []),
|
|
48
62
|
],
|
|
49
|
-
installHint: 'asc adapter --
|
|
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 --
|
|
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(
|
|
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.
|
|
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.
|