@ryuenn3123/agentic-senior-core 5.1.0 → 5.3.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.
@@ -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.1.0",
3
+ "version": "5.3.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.
@@ -1,21 +0,0 @@
1
- {
2
- "name": "agentic-senior-core",
3
- "interface": {
4
- "displayName": "Agentic Senior Core"
5
- },
6
- "plugins": [
7
- {
8
- "name": "agentic-senior-core",
9
- "source": {
10
- "source": "url",
11
- "url": "https://github.com/fatidaprilian/Agentic-Senior-Core.git",
12
- "ref": "main"
13
- },
14
- "policy": {
15
- "installation": "AVAILABLE",
16
- "authentication": "ON_INSTALL"
17
- },
18
- "category": "Productivity"
19
- }
20
- ]
21
- }