@ryuenn3123/agentic-senior-core 6.2.0 → 6.2.2

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.
@@ -0,0 +1,14 @@
1
+ {
2
+ "name": "agentic-senior-core",
3
+ "version": "6.2.2",
4
+ "description": "Universal AI coding rules. Write code like a staff engineer.",
5
+ "skills": "./skills/",
6
+ "hooks": "./hooks/hooks.json",
7
+ "interface": {
8
+ "displayName": "Agentic Senior Core",
9
+ "shortDescription": "Universal AI coding rules and workflows",
10
+ "longDescription": "Write code like a staff engineer, not a junior. Universal rules, decision ladder, and deterministic quality gates.",
11
+ "developerName": "fatidaprilian",
12
+ "category": "Productivity"
13
+ }
14
+ }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentic-senior-core",
3
- "version": "6.2.0",
3
+ "version": "6.2.2",
4
4
  "description": "Universal AI coding rules. Because your AI writes code like it gets paid by the line.",
5
5
  "contextFileName": "rules/agentic-senior-core.md",
6
6
  "rules": [
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "agentic-senior-core-marketplace",
3
+ "interface": {
4
+ "displayName": "Agentic Senior Core Plugins"
5
+ },
6
+ "plugins": [
7
+ {
8
+ "name": "agentic-senior-core",
9
+ "source": {
10
+ "source": "local",
11
+ "path": "./agentic-senior-core"
12
+ },
13
+ "policy": {
14
+ "installation": "AVAILABLE",
15
+ "authentication": "ON_INSTALL"
16
+ },
17
+ "category": "Productivity"
18
+ }
19
+ ]
20
+ }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentic-senior-core",
3
- "version": "6.2.0",
3
+ "version": "6.2.2",
4
4
  "description": "Universal AI coding rules. Write code like a staff engineer.",
5
5
  "author": "fatidaprilian",
6
6
  "license": "MIT",
@@ -3,6 +3,7 @@ import path from 'node:path';
3
3
 
4
4
  import { runAscx } from './runtime.mjs';
5
5
  import { estimateOutputTokens } from './token-estimate.mjs';
6
+ import { getDefaultTeeDirectory } from './tee-writer.mjs';
6
7
 
7
8
  function combineOutput(stdout, stderr) {
8
9
  return [stdout, stderr].filter(Boolean).join('\n');
@@ -115,7 +116,7 @@ async function evaluateFixture(fixtureEntry, options) {
115
116
  export async function evaluateAscxFixtures(fixtures, options = {}) {
116
117
  const cwd = options.cwd || process.cwd();
117
118
  const teeDirectoryPath = path.resolve(
118
- options.teeDirectoryPath || path.join(cwd, '.agent-context', 'state', 'token-saver', 'tee')
119
+ options.teeDirectoryPath || getDefaultTeeDirectory(cwd)
119
120
  );
120
121
  const results = [];
121
122
 
@@ -1,5 +1,7 @@
1
1
  import fs from 'node:fs/promises';
2
+ import { existsSync } from 'node:fs';
2
3
  import path from 'node:path';
4
+ import os from 'node:os';
3
5
 
4
6
  export const MAX_TEE_FILES = 20;
5
7
 
@@ -12,7 +14,11 @@ function sanitizeFileNamePart(rawValue) {
12
14
  }
13
15
 
14
16
  export function getDefaultTeeDirectory(cwd = process.cwd()) {
15
- return path.resolve(cwd, '.agent-context', 'state', 'token-saver', 'tee');
17
+ const localLegacyDir = path.resolve(cwd, '.agent-context', 'state', 'token-saver', 'tee');
18
+ if (existsSync(localLegacyDir)) {
19
+ return localLegacyDir;
20
+ }
21
+ return path.join(os.homedir(), '.asc', 'state', 'token-saver', 'tee');
16
22
  }
17
23
 
18
24
  async function sweepOldTeeFiles(directoryPath, maxFiles = MAX_TEE_FILES) {
@@ -60,4 +66,3 @@ export async function writeRawTeeFile({
60
66
 
61
67
  return teeFilePath;
62
68
  }
63
-
@@ -12,6 +12,11 @@ const ADAPTER_TARGETS = {
12
12
  targetPath: '.cursor/rules/agentic-senior-core.mdc',
13
13
  sourcePath: '.agents/plugins/agentic-senior-core/rules/agentic-senior-core.md',
14
14
  },
15
+ codex: {
16
+ label: 'Codex CLI / Extension',
17
+ targetPath: '.codex/AGENTS.md',
18
+ sourcePath: '.agents/plugins/agentic-senior-core/rules/agentic-senior-core.md',
19
+ },
15
20
  windsurf: {
16
21
  label: 'Windsurf (legacy)',
17
22
  targetPath: '.windsurf/rules/agentic-senior-core.md',
@@ -138,7 +143,7 @@ export async function runAdapterCommand(commandArguments) {
138
143
 
139
144
  if (requestedAdapters.length === 0) {
140
145
  console.log('Agentic Senior Core -- Adapter Generator\n');
141
- console.log('Usage: asc adapter [--cursor] [--devin] [--cline] [--copilot] [--kiro] [--continue] [--zed] [--aider] [--kilocode] [--roo] [--openhands] [--windsurf] [--all]\n');
146
+ console.log('Usage: asc adapter [--cursor] [--codex] [--devin] [--cline] [--copilot] [--kiro] [--continue] [--zed] [--aider] [--kilocode] [--roo] [--openhands] [--windsurf] [--all]\n');
142
147
  console.log('Generates instruction-tier adapter files for IDEs without plugin support.');
143
148
  console.log('Each adapter is a single file containing the universal coding rules.\n');
144
149
  process.exit(0);
@@ -20,10 +20,6 @@ function vscodeUserPromptsDirectory() {
20
20
  return path.join(HOME, '.config', 'Code', 'User', 'prompts');
21
21
  }
22
22
 
23
- const OLD_PATHS = [
24
- path.join(HOME, '.gemini', 'config', 'skills'),
25
- ];
26
-
27
23
  const GLOBAL_TARGETS = {
28
24
  antigravity: {
29
25
  label: 'Google Antigravity (2.0, IDE, CLI)',
@@ -35,6 +31,15 @@ const GLOBAL_TARGETS = {
35
31
  targetPath: () => path.join(HOME, '.gemini', 'config', 'plugins', 'agentic-senior-core'),
36
32
  note: 'Plugin bundle (rules + skills) in ~/.gemini/config/plugins/.',
37
33
  },
34
+ codex: {
35
+ label: 'Codex CLI / Extension',
36
+ kind: 'codex-global',
37
+ rulesSourcePath: '.agents/plugins/agentic-senior-core/rules/agentic-senior-core.md',
38
+ pluginSourcePath: '.agents/plugins',
39
+ targetPath: () => path.join(HOME, '.codex', 'AGENTS.md'),
40
+ pluginTargetPath: () => path.join(HOME, '.agents', 'plugins'),
41
+ note: 'Installs global rules to ~/.codex/AGENTS.md and plugin marketplace to ~/.agents/plugins/.',
42
+ },
38
43
  cline: {
39
44
  label: 'Cline',
40
45
  kind: 'file',
@@ -103,6 +108,64 @@ async function pathExists(filePath) {
103
108
  }
104
109
  }
105
110
 
111
+ async function copyDirRecursive(src, dest) {
112
+ await fs.mkdir(dest, { recursive: true });
113
+ const entries = await fs.readdir(src, { withFileTypes: true });
114
+ for (const entry of entries) {
115
+ const srcPath = path.join(src, entry.name);
116
+ const destPath = path.join(dest, entry.name);
117
+ if (entry.isDirectory()) {
118
+ await copyDirRecursive(srcPath, destPath);
119
+ } else {
120
+ await fs.copyFile(srcPath, destPath);
121
+ }
122
+ }
123
+ }
124
+
125
+ async function installCodexGlobal(target) {
126
+ const rulesSource = path.join(REPOSITORY_ROOT, target.rulesSourcePath);
127
+ const pluginSource = path.join(REPOSITORY_ROOT, target.pluginSourcePath);
128
+ const rulesTarget = target.targetPath();
129
+ const pluginTarget = target.pluginTargetPath();
130
+
131
+ if (!(await pathExists(rulesSource)) || !(await pathExists(pluginSource))) {
132
+ console.error(` ${target.label}: source not found ... FAIL`);
133
+ return false;
134
+ }
135
+
136
+ // Copy global AGENTS.md instructions (~/.codex/AGENTS.md)
137
+ await fs.mkdir(path.dirname(rulesTarget), { recursive: true });
138
+ await fs.copyFile(rulesSource, rulesTarget);
139
+
140
+ // Copy plugin bundle & marketplace catalog (~/.agents/plugins/)
141
+ await fs.mkdir(pluginTarget, { recursive: true });
142
+ await copyDirRecursive(pluginSource, pluginTarget);
143
+
144
+ console.log(` ${target.label}: ${rulesTarget} & ${pluginTarget} ... OK`);
145
+ return true;
146
+ }
147
+
148
+ async function installAntigravityIde(target) {
149
+ const pluginSource = path.join(REPOSITORY_ROOT, target.pluginSourcePath);
150
+ const rulesSource = path.join(REPOSITORY_ROOT, target.rulesSourcePath);
151
+ const pluginTargetPath = target.pluginTargetPath();
152
+ const cliTargetPath = path.join(HOME, '.gemini', 'antigravity-cli', 'plugins', 'agentic-senior-core');
153
+
154
+ if (!(await pathExists(pluginSource)) || !(await pathExists(rulesSource))) {
155
+ console.error(` ${target.label}: plugin source not found ... FAIL`);
156
+ return false;
157
+ }
158
+
159
+ await fs.mkdir(path.dirname(pluginTargetPath), { recursive: true });
160
+ await copyDirRecursive(pluginSource, pluginTargetPath);
161
+
162
+ await fs.mkdir(path.dirname(cliTargetPath), { recursive: true });
163
+ await copyDirRecursive(pluginSource, cliTargetPath);
164
+
165
+ console.log(` ${target.label}: ${pluginTargetPath} ... OK`);
166
+ return true;
167
+ }
168
+
106
169
  async function installGlobalTarget(targetKey) {
107
170
  const target = GLOBAL_TARGETS[targetKey];
108
171
 
@@ -110,6 +173,10 @@ async function installGlobalTarget(targetKey) {
110
173
  return await installAntigravityIde(target);
111
174
  }
112
175
 
176
+ if (target.kind === 'codex-global') {
177
+ return await installCodexGlobal(target);
178
+ }
179
+
113
180
  const sourcePath = path.join(REPOSITORY_ROOT, target.sourcePath);
114
181
  const targetPath = target.targetPath();
115
182
 
@@ -122,11 +189,9 @@ async function installGlobalTarget(targetKey) {
122
189
  const rawRules = await fs.readFile(sourcePath, 'utf8');
123
190
  const formattedRules = `---\ntrigger: always_on\n---\n\n${rawRules}`;
124
191
 
125
- // Modern path (~/.windsurf/rules/agentic-senior-core.md)
126
192
  await fs.mkdir(path.dirname(targetPath), { recursive: true });
127
193
  await fs.writeFile(targetPath, formattedRules, 'utf8');
128
194
 
129
- // Legacy path (~/.codeium/windsurf/memories/global_rules.md)
130
195
  const legacyPath = target.legacyTargetPath();
131
196
  if (!await pathExists(legacyPath)) {
132
197
  await fs.mkdir(path.dirname(legacyPath), { recursive: true });
@@ -137,21 +202,6 @@ async function installGlobalTarget(targetKey) {
137
202
  return true;
138
203
  }
139
204
 
140
- if (target.kind === 'guarded-file') {
141
- if (await pathExists(targetPath)) {
142
- const existingContent = await fs.readFile(targetPath, 'utf8');
143
- if (!existingContent.startsWith(ASC_MARKER)) {
144
- console.log(` ${target.label}: existing ${path.basename(targetPath)} found (not ASC) ... SKIPPED`);
145
- console.log(' Append the contents of AGENTS.md manually to keep your own rules.');
146
- return false;
147
- }
148
- }
149
- await fs.mkdir(path.dirname(targetPath), { recursive: true });
150
- await fs.copyFile(sourcePath, targetPath);
151
- console.log(` ${target.label}: ${targetPath} ... OK`);
152
- return true;
153
- }
154
-
155
205
  if (target.kind === 'copilot-user-instructions') {
156
206
  const rulesContent = await fs.readFile(sourcePath, 'utf8');
157
207
  const instructionsContent = `---\napplyTo: '**'\n---\n\n${rulesContent}`;
@@ -167,58 +217,6 @@ async function installGlobalTarget(targetKey) {
167
217
  return true;
168
218
  }
169
219
 
170
- async function copyDirRecursive(src, dest) {
171
- await fs.mkdir(dest, { recursive: true });
172
- const entries = await fs.readdir(src, { withFileTypes: true });
173
- for (const entry of entries) {
174
- const srcPath = path.join(src, entry.name);
175
- const destPath = path.join(dest, entry.name);
176
- if (entry.isDirectory()) {
177
- await copyDirRecursive(srcPath, destPath);
178
- } else {
179
- await fs.copyFile(srcPath, destPath);
180
- }
181
- }
182
- }
183
-
184
- async function installAntigravityIde(target) {
185
- const pluginSource = path.join(REPOSITORY_ROOT, target.pluginSourcePath);
186
- const rulesSource = path.join(REPOSITORY_ROOT, target.rulesSourcePath);
187
- const pluginTargetPath = target.pluginTargetPath();
188
- const cliTargetPath = path.join(HOME, '.gemini', 'antigravity-cli', 'plugins', 'agentic-senior-core');
189
- const rulesTargetPath = target.rulesTargetPath();
190
-
191
- if (!(await pathExists(pluginSource))) {
192
- console.error(` ${target.label}: plugin source not found (${pluginSource}) ... FAIL`);
193
- return false;
194
- }
195
- if (!(await pathExists(rulesSource))) {
196
- console.error(` ${target.label}: rules source not found (${rulesSource}) ... FAIL`);
197
- return false;
198
- }
199
-
200
- // Copy plugin bundle to IDE / 2.0 (~/.gemini/config/plugins/agentic-senior-core/)
201
- await fs.mkdir(path.dirname(pluginTargetPath), { recursive: true });
202
- await copyDirRecursive(pluginSource, pluginTargetPath);
203
-
204
- // Copy plugin bundle to CLI (~/.gemini/antigravity-cli/plugins/agentic-senior-core/)
205
- await fs.mkdir(path.dirname(cliTargetPath), { recursive: true });
206
- await copyDirRecursive(pluginSource, cliTargetPath);
207
-
208
- // Clean up old hooks/hooks.json duplicate from previous versions
209
- const oldHooksJson = path.join(pluginTargetPath, 'hooks', 'hooks.json');
210
- if (await pathExists(oldHooksJson)) {
211
- await fs.rm(oldHooksJson);
212
- }
213
- const oldHooksJsonCli = path.join(cliTargetPath, 'hooks', 'hooks.json');
214
- if (await pathExists(oldHooksJsonCli)) {
215
- await fs.rm(oldHooksJsonCli);
216
- }
217
-
218
- console.log(` ${target.label}: ${pluginTargetPath} ... OK`);
219
- return true;
220
- }
221
-
222
220
  export async function runGlobalCommand(commandArguments) {
223
221
  const requestedTargets = [];
224
222
 
@@ -240,7 +238,7 @@ export async function runGlobalCommand(commandArguments) {
240
238
 
241
239
  if (requestedTargets.length === 0) {
242
240
  console.log('Agentic Senior Core -- Global Rules Installer\n');
243
- console.log('Usage: asc global [--antigravity] [--cline] [--roo] [--kilocode] [--kiro] [--openhands] [--windsurf] [--copilot] [--all]\n');
241
+ console.log('Usage: asc global [--antigravity] [--codex] [--cline] [--roo] [--kilocode] [--kiro] [--openhands] [--windsurf] [--copilot] [--all]\n');
244
242
  console.log('Installs user-level global rules that apply to ALL projects.\n');
245
243
  console.log('Supported automatic global targets:');
246
244
  for (const [key, target] of Object.entries(GLOBAL_TARGETS)) {
@@ -5,6 +5,7 @@ const ASC_SIGNATURE = '# Agentic Senior Core';
5
5
 
6
6
  const ADAPTER_FILES = [
7
7
  { label: 'Cursor', path: '.cursor/rules/agentic-senior-core.mdc' },
8
+ { label: 'Codex CLI / Extension', path: '.codex/AGENTS.md' },
8
9
  { label: 'Windsurf (legacy)', path: '.windsurf/rules/agentic-senior-core.md' },
9
10
  { label: 'Devin Desktop', path: '.devin/rules/agentic-senior-core.md' },
10
11
  { label: 'Cline', path: '.clinerules/agentic-senior-core.md' },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ryuenn3123/agentic-senior-core",
3
- "version": "6.2.0",
3
+ "version": "6.2.2",
4
4
  "type": "module",
5
5
  "description": "Agentic Senior Core: Universal AI coding rules and workflows. Write code like a staff engineer, not a junior.",
6
6
  "bin": {
package/plugin.yaml CHANGED
@@ -1,5 +1,5 @@
1
1
  name: agentic-senior-core
2
- version: 6.2.0
2
+ version: 6.2.2
3
3
  description: Universal AI coding rules. Write code like a staff engineer.
4
4
  author: fatidaprilian
5
5
  provides_hooks: