@ryuenn3123/agentic-senior-core 6.5.3 → 6.6.1
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/kilo-plugin/agentic-senior-core.js +42 -0
- package/.agents/plugins/agentic-senior-core/plugin.json +1 -1
- package/gemini-extension.json +1 -1
- package/lib/cli/commands/adapter.mjs +41 -2
- package/lib/cli/commands/global.mjs +57 -4
- package/lib/cli/commands/status.mjs +7 -2
- package/lib/cli/commands/uninstall.mjs +3 -1
- package/package.json +1 -1
- package/plugin.yaml +1 -1
|
@@ -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
|
+
};
|
package/gemini-extension.json
CHANGED
|
@@ -60,8 +60,11 @@ const ADAPTER_TARGETS = {
|
|
|
60
60
|
},
|
|
61
61
|
kilocode: {
|
|
62
62
|
label: 'Kilo Code',
|
|
63
|
-
targetPath: '.
|
|
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',
|
|
@@ -84,6 +87,21 @@ async function pathExists(filePath) {
|
|
|
84
87
|
}
|
|
85
88
|
}
|
|
86
89
|
|
|
90
|
+
async function copyDirRecursive(src, dest, ignoreNames = []) {
|
|
91
|
+
await fs.mkdir(dest, { recursive: true });
|
|
92
|
+
const entries = await fs.readdir(src, { withFileTypes: true });
|
|
93
|
+
for (const entry of entries) {
|
|
94
|
+
if (ignoreNames.includes(entry.name)) continue;
|
|
95
|
+
const srcPath = path.join(src, entry.name);
|
|
96
|
+
const destPath = path.join(dest, entry.name);
|
|
97
|
+
if (entry.isDirectory()) {
|
|
98
|
+
await copyDirRecursive(srcPath, destPath, ignoreNames);
|
|
99
|
+
} else {
|
|
100
|
+
await fs.copyFile(srcPath, destPath);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
87
105
|
async function generateAdapter(targetDirectory, adapterKey) {
|
|
88
106
|
const adapter = ADAPTER_TARGETS[adapterKey];
|
|
89
107
|
if (!adapter) {
|
|
@@ -117,7 +135,28 @@ async function generateAdapter(targetDirectory, adapterKey) {
|
|
|
117
135
|
}
|
|
118
136
|
|
|
119
137
|
await fs.writeFile(targetPath, finalContent, 'utf8');
|
|
120
|
-
|
|
138
|
+
|
|
139
|
+
if (adapterKey === 'kilocode') {
|
|
140
|
+
if (adapter.pluginSourcePath && adapter.pluginTargetPath) {
|
|
141
|
+
const pluginSource = path.join(REPOSITORY_ROOT, adapter.pluginSourcePath);
|
|
142
|
+
const pluginTarget = path.join(targetDirectory, adapter.pluginTargetPath);
|
|
143
|
+
if (await pathExists(pluginSource)) {
|
|
144
|
+
await fs.mkdir(path.dirname(pluginTarget), { recursive: true });
|
|
145
|
+
await fs.copyFile(pluginSource, pluginTarget);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
const skillsSource = path.join(REPOSITORY_ROOT, '.agents', 'plugins', 'agentic-senior-core', 'skills');
|
|
149
|
+
const localSkillsTarget = path.join(targetDirectory, '.kilo', 'skills');
|
|
150
|
+
if (await pathExists(skillsSource)) {
|
|
151
|
+
await copyDirRecursive(skillsSource, localSkillsTarget);
|
|
152
|
+
}
|
|
153
|
+
if (adapter.legacyTargetPath) {
|
|
154
|
+
const legacyTarget = path.join(targetDirectory, adapter.legacyTargetPath);
|
|
155
|
+
await fs.mkdir(path.dirname(legacyTarget), { recursive: true });
|
|
156
|
+
await fs.writeFile(legacyTarget, finalContent, 'utf8');
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
121
160
|
console.log(` ${adapter.label}: ${adapter.targetPath} ... OK`);
|
|
122
161
|
return true;
|
|
123
162
|
}
|
|
@@ -56,10 +56,13 @@ const GLOBAL_TARGETS = {
|
|
|
56
56
|
},
|
|
57
57
|
kilocode: {
|
|
58
58
|
label: 'Kilo Code',
|
|
59
|
-
kind: '
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
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,52 @@ 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
|
+
const skillsSource = path.join(REPOSITORY_ROOT, '.agents', 'plugins', 'agentic-senior-core', 'skills');
|
|
231
|
+
const globalSkillsTarget = path.join(HOME, '.kilo', 'skills');
|
|
232
|
+
if (await pathExists(skillsSource)) {
|
|
233
|
+
await copyDirRecursive(skillsSource, globalSkillsTarget);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
if (process.env.APPDATA) {
|
|
237
|
+
const appDataKiloPlugin = path.join(process.env.APPDATA, 'kilo', 'plugin', 'agentic-senior-core.js');
|
|
238
|
+
const appDataKiloRules = path.join(process.env.APPDATA, 'kilo', 'rules', 'agentic-senior-core.md');
|
|
239
|
+
try {
|
|
240
|
+
if (await pathExists(pluginSource)) {
|
|
241
|
+
await fs.mkdir(path.dirname(appDataKiloPlugin), { recursive: true });
|
|
242
|
+
await fs.copyFile(pluginSource, appDataKiloPlugin);
|
|
243
|
+
}
|
|
244
|
+
await fs.mkdir(path.dirname(appDataKiloRules), { recursive: true });
|
|
245
|
+
await fs.copyFile(rulesSource, appDataKiloRules);
|
|
246
|
+
} catch (_) {}
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
console.log(` ${target.label}: ${rulesTarget}, ${pluginTarget} & ${globalSkillsTarget} ... OK`);
|
|
250
|
+
return true;
|
|
251
|
+
}
|
|
252
|
+
|
|
204
253
|
async function installAntigravityIde(target) {
|
|
205
254
|
const pluginSource = path.join(REPOSITORY_ROOT, target.pluginSourcePath);
|
|
206
255
|
const rulesSource = path.join(REPOSITORY_ROOT, target.rulesSourcePath);
|
|
@@ -319,6 +368,10 @@ async function installGlobalTarget(targetKey) {
|
|
|
319
368
|
return await installCodexGlobal(target);
|
|
320
369
|
}
|
|
321
370
|
|
|
371
|
+
if (target.kind === 'kilo-global') {
|
|
372
|
+
return await installKiloGlobal(target);
|
|
373
|
+
}
|
|
374
|
+
|
|
322
375
|
const sourcePath = path.join(REPOSITORY_ROOT, target.sourcePath);
|
|
323
376
|
const targetPath = target.targetPath();
|
|
324
377
|
|
|
@@ -111,8 +111,13 @@ const IDE_CHECKS = [
|
|
|
111
111
|
{
|
|
112
112
|
name: 'Kilo Code',
|
|
113
113
|
type: 'adapter',
|
|
114
|
-
checkPaths: [
|
|
115
|
-
|
|
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: '.
|
|
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
package/plugin.yaml
CHANGED