@ryuenn3123/agentic-senior-core 6.5.3 → 6.6.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.
@@ -0,0 +1,42 @@
1
+ // Native Kilo / OpenCode Plugin for Agentic Senior Core
2
+ // Hooks into system prompt transform, session compaction, and shell environment.
3
+
4
+ const ASC_GUARDRAILS = `
5
+ # Agentic Senior Core Rules
6
+ - Write code like a staff engineer. Efficient, safe, maintainable.
7
+ - Before writing code: 1) Need built? 2) Codebase reuse? 3) Stdlib? 4) Dependency? 5) One function? 6) Minimum code.
8
+ - Parameterize all queries. Validate inputs at trust boundaries. Never commit secrets.
9
+ - Early returns over deep nesting. Delete code that carries no value.
10
+ `;
11
+
12
+ const server = async ({ project, directory, worktree }) => {
13
+ return {
14
+ "experimental.chat.system.transform": async (input, output) => {
15
+ if (Array.isArray(output.system)) {
16
+ const hasASC = output.system.some(item => typeof item === 'string' && item.includes('Agentic Senior Core'));
17
+ if (!hasASC) {
18
+ output.system.push(ASC_GUARDRAILS.trim());
19
+ }
20
+ }
21
+ },
22
+ "experimental.session.compacting": async (input, output) => {
23
+ if (Array.isArray(output.context)) {
24
+ output.context.push(
25
+ "## Agentic Senior Core (Persisted Context)\n" +
26
+ "- Maintain strict security guardrails and non-breaking API contracts.\n" +
27
+ "- Prefer clean minimal logic over premature abstractions."
28
+ );
29
+ }
30
+ },
31
+ "shell.env": async (input, output) => {
32
+ if (output.env) {
33
+ output.env.ASC_ENABLED = "1";
34
+ }
35
+ },
36
+ };
37
+ };
38
+
39
+ export default {
40
+ id: "agentic-senior-core",
41
+ server,
42
+ };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentic-senior-core",
3
- "version": "6.5.3",
3
+ "version": "6.6.0",
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": [
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentic-senior-core",
3
- "version": "6.5.3",
3
+ "version": "6.6.0",
4
4
  "description": "Universal AI coding rules. Write code like a staff engineer.",
5
5
  "author": "fatidaprilian",
6
6
  "license": "MIT",
@@ -60,8 +60,11 @@ const ADAPTER_TARGETS = {
60
60
  },
61
61
  kilocode: {
62
62
  label: 'Kilo Code',
63
- targetPath: '.kilocode/rules/agentic-senior-core.md',
63
+ targetPath: '.kilo/rules/agentic-senior-core.md',
64
+ legacyTargetPath: '.kilocode/rules/agentic-senior-core.md',
65
+ pluginTargetPath: '.kilo/plugin/agentic-senior-core.js',
64
66
  sourcePath: '.agents/plugins/agentic-senior-core/rules/agentic-senior-core.md',
67
+ pluginSourcePath: '.agents/plugins/agentic-senior-core/kilo-plugin/agentic-senior-core.js',
65
68
  },
66
69
  roo: {
67
70
  label: 'Roo Code',
@@ -117,7 +120,23 @@ async function generateAdapter(targetDirectory, adapterKey) {
117
120
  }
118
121
 
119
122
  await fs.writeFile(targetPath, finalContent, 'utf8');
120
-
123
+
124
+ if (adapterKey === 'kilocode') {
125
+ if (adapter.pluginSourcePath && adapter.pluginTargetPath) {
126
+ const pluginSource = path.join(REPOSITORY_ROOT, adapter.pluginSourcePath);
127
+ const pluginTarget = path.join(targetDirectory, adapter.pluginTargetPath);
128
+ if (await pathExists(pluginSource)) {
129
+ await fs.mkdir(path.dirname(pluginTarget), { recursive: true });
130
+ await fs.copyFile(pluginSource, pluginTarget);
131
+ }
132
+ }
133
+ if (adapter.legacyTargetPath) {
134
+ const legacyTarget = path.join(targetDirectory, adapter.legacyTargetPath);
135
+ await fs.mkdir(path.dirname(legacyTarget), { recursive: true });
136
+ await fs.writeFile(legacyTarget, finalContent, 'utf8');
137
+ }
138
+ }
139
+
121
140
  console.log(` ${adapter.label}: ${adapter.targetPath} ... OK`);
122
141
  return true;
123
142
  }
@@ -56,10 +56,13 @@ const GLOBAL_TARGETS = {
56
56
  },
57
57
  kilocode: {
58
58
  label: 'Kilo Code',
59
- kind: 'file',
60
- sourcePath: '.agents/plugins/agentic-senior-core/rules/agentic-senior-core.md',
61
- targetPath: () => path.join(HOME, '.kilocode', 'rules', 'agentic-senior-core.md'),
62
- note: 'Kilo v7+: prefer adding the file path to the instructions array in ~/.config/kilo/kilo.jsonc (auto-updates with npm).',
59
+ kind: 'kilo-global',
60
+ rulesSourcePath: '.agents/plugins/agentic-senior-core/rules/agentic-senior-core.md',
61
+ pluginSourcePath: '.agents/plugins/agentic-senior-core/kilo-plugin/agentic-senior-core.js',
62
+ targetPath: () => path.join(HOME, '.config', 'kilo', 'rules', 'agentic-senior-core.md'),
63
+ legacyTargetPath: () => path.join(HOME, '.kilocode', 'rules', 'agentic-senior-core.md'),
64
+ pluginTargetPath: () => path.join(HOME, '.config', 'kilo', 'plugin', 'agentic-senior-core.js'),
65
+ note: 'Installs global plugin to ~/.config/kilo/plugin/ and rules to ~/.config/kilo/rules/.',
63
66
  },
64
67
  kiro: {
65
68
  label: 'Kiro',
@@ -201,6 +204,46 @@ async function installCodexGlobal(target) {
201
204
  return true;
202
205
  }
203
206
 
207
+ async function installKiloGlobal(target) {
208
+ const rulesSource = path.join(REPOSITORY_ROOT, target.rulesSourcePath);
209
+ const pluginSource = path.join(REPOSITORY_ROOT, target.pluginSourcePath);
210
+ const rulesTarget = target.targetPath();
211
+ const pluginTarget = target.pluginTargetPath();
212
+ const legacyRulesTarget = target.legacyTargetPath();
213
+
214
+ if (!(await pathExists(rulesSource))) {
215
+ console.error(` ${target.label}: rules source not found ... FAIL`);
216
+ return false;
217
+ }
218
+
219
+ await fs.mkdir(path.dirname(rulesTarget), { recursive: true });
220
+ await fs.copyFile(rulesSource, rulesTarget);
221
+
222
+ await fs.mkdir(path.dirname(legacyRulesTarget), { recursive: true });
223
+ await fs.copyFile(rulesSource, legacyRulesTarget);
224
+
225
+ if (await pathExists(pluginSource)) {
226
+ await fs.mkdir(path.dirname(pluginTarget), { recursive: true });
227
+ await fs.copyFile(pluginSource, pluginTarget);
228
+ }
229
+
230
+ if (process.env.APPDATA) {
231
+ const appDataKiloPlugin = path.join(process.env.APPDATA, 'kilo', 'plugin', 'agentic-senior-core.js');
232
+ const appDataKiloRules = path.join(process.env.APPDATA, 'kilo', 'rules', 'agentic-senior-core.md');
233
+ try {
234
+ if (await pathExists(pluginSource)) {
235
+ await fs.mkdir(path.dirname(appDataKiloPlugin), { recursive: true });
236
+ await fs.copyFile(pluginSource, appDataKiloPlugin);
237
+ }
238
+ await fs.mkdir(path.dirname(appDataKiloRules), { recursive: true });
239
+ await fs.copyFile(rulesSource, appDataKiloRules);
240
+ } catch (_) {}
241
+ }
242
+
243
+ console.log(` ${target.label}: ${rulesTarget} & ${pluginTarget} ... OK`);
244
+ return true;
245
+ }
246
+
204
247
  async function installAntigravityIde(target) {
205
248
  const pluginSource = path.join(REPOSITORY_ROOT, target.pluginSourcePath);
206
249
  const rulesSource = path.join(REPOSITORY_ROOT, target.rulesSourcePath);
@@ -319,6 +362,10 @@ async function installGlobalTarget(targetKey) {
319
362
  return await installCodexGlobal(target);
320
363
  }
321
364
 
365
+ if (target.kind === 'kilo-global') {
366
+ return await installKiloGlobal(target);
367
+ }
368
+
322
369
  const sourcePath = path.join(REPOSITORY_ROOT, target.sourcePath);
323
370
  const targetPath = target.targetPath();
324
371
 
@@ -111,8 +111,13 @@ const IDE_CHECKS = [
111
111
  {
112
112
  name: 'Kilo Code',
113
113
  type: 'adapter',
114
- checkPaths: [path.join(HOME, '.kilocode')],
115
- installHint: 'asc adapter --kilocode',
114
+ checkPaths: [
115
+ path.join(HOME, '.config', 'kilo'),
116
+ path.join(HOME, '.kilo'),
117
+ path.join(HOME, '.kilocode'),
118
+ ...(process.env.APPDATA ? [path.join(process.env.APPDATA, 'kilo')] : []),
119
+ ],
120
+ installHint: 'asc global --kilocode',
116
121
  },
117
122
  {
118
123
  name: 'Roo Code',
@@ -14,7 +14,9 @@ const ADAPTER_FILES = [
14
14
  { label: 'Continue', path: '.continue/rules/agentic-senior-core.md' },
15
15
  { label: 'Zed', path: '.zed/rules/agentic-senior-core.md' },
16
16
  { label: 'Aider', path: 'CONVENTIONS.md' },
17
- { label: 'Kilo Code', path: '.kilocode/rules/agentic-senior-core.md' },
17
+ { label: 'Kilo Code (modern rules)', path: '.kilo/rules/agentic-senior-core.md' },
18
+ { label: 'Kilo Code (modern plugin)', path: '.kilo/plugin/agentic-senior-core.js' },
19
+ { label: 'Kilo Code (legacy rules)', path: '.kilocode/rules/agentic-senior-core.md' },
18
20
  { label: 'Roo Code', path: '.roo/rules/agentic-senior-core.md' },
19
21
  { label: 'OpenHands', path: '.openhands/microagents/agentic-senior-core.md' },
20
22
  { label: 'ASC Compiled Validator', path: '.asc/hooks/pre-commit-validator.cjs' },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ryuenn3123/agentic-senior-core",
3
- "version": "6.5.3",
3
+ "version": "6.6.0",
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.5.3
2
+ version: 6.6.0
3
3
  description: Universal AI coding rules. Write code like a staff engineer.
4
4
  author: fatidaprilian
5
5
  provides_hooks: