@ryuenn3123/agentic-senior-core 5.8.22 → 5.8.24
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/hooks/post-edit-enforce.js +100 -38
- package/.agents/plugins/agentic-senior-core/hooks/pre-tool-dependency-gate.js +20 -11
- package/.agents/plugins/agentic-senior-core/hooks.json +14 -7
- package/.agents/plugins/agentic-senior-core/plugin.json +10 -4
- package/.agents/plugins/agentic-senior-core/rules/agentic-senior-core.md +2 -0
- package/AGENTS.md +2 -0
- package/README.md +10 -20
- package/gemini-extension.json +10 -4
- package/lib/cli/commands/global.mjs +13 -3
- package/package.json +1 -1
- package/plugin.yaml +1 -1
|
@@ -43,38 +43,116 @@ process.stdin.on('data', function (chunk) { inputBuffer += chunk; });
|
|
|
43
43
|
process.stdin.on('end', function () {
|
|
44
44
|
try {
|
|
45
45
|
const data = JSON.parse(inputBuffer);
|
|
46
|
+
|
|
47
|
+
if (data.invocationNum !== undefined && data.transcriptPath) {
|
|
48
|
+
handleAntigravityPostInvocation(data);
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
|
|
46
52
|
const toolName = data.tool_name || '';
|
|
47
53
|
const toolInput = data.tool_input || {};
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
+
processSingleEdit(toolName, toolInput, function(nudge) {
|
|
55
|
+
emitClaude(nudge);
|
|
56
|
+
});
|
|
57
|
+
} catch (_) {
|
|
58
|
+
// Silent fail
|
|
59
|
+
}
|
|
60
|
+
});
|
|
54
61
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
62
|
+
function handleAntigravityPostInvocation(data) {
|
|
63
|
+
try {
|
|
64
|
+
if (!fs.existsSync(data.transcriptPath)) return;
|
|
65
|
+
const lines = fs.readFileSync(data.transcriptPath, 'utf8').split('\n').filter(Boolean);
|
|
66
|
+
const findings = [];
|
|
67
|
+
|
|
68
|
+
for (let i = 0; i < lines.length; i++) {
|
|
69
|
+
const step = JSON.parse(lines[i]);
|
|
70
|
+
if (step.step_index >= data.initialNumSteps && step.type === 'PLANNER_RESPONSE' && step.tool_calls) {
|
|
71
|
+
for (let j = 0; j < step.tool_calls.length; j++) {
|
|
72
|
+
const tc = step.tool_calls[j];
|
|
73
|
+
let toolName = '';
|
|
74
|
+
let toolInput = {};
|
|
75
|
+
|
|
76
|
+
if (tc.name === 'replace_file_content' || tc.name === 'multi_replace_file_content') {
|
|
77
|
+
toolName = 'Edit';
|
|
78
|
+
toolInput = {
|
|
79
|
+
file_path: tc.args.TargetFile || '',
|
|
80
|
+
new_string: tc.args.ReplacementContent || '',
|
|
81
|
+
old_string: tc.args.TargetContent || ''
|
|
82
|
+
};
|
|
83
|
+
} else if (tc.name === 'write_to_file') {
|
|
84
|
+
toolName = 'Write';
|
|
85
|
+
toolInput = {
|
|
86
|
+
file_path: tc.args.TargetFile || '',
|
|
87
|
+
content: tc.args.CodeContent || ''
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if (toolName) {
|
|
92
|
+
processSingleEdit(toolName, toolInput, function(nudge) {
|
|
93
|
+
findings.push(nudge);
|
|
94
|
+
}, true);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
61
97
|
}
|
|
62
98
|
}
|
|
99
|
+
|
|
100
|
+
if (findings.length > 0) {
|
|
101
|
+
const injectSteps = findings.map(function(f) { return { ephemeralMessage: f }; });
|
|
102
|
+
process.stdout.write(JSON.stringify({ injectSteps: injectSteps }) + '\n');
|
|
103
|
+
} else {
|
|
104
|
+
process.stdout.write(JSON.stringify({}) + '\n');
|
|
105
|
+
}
|
|
106
|
+
} catch (e) {
|
|
107
|
+
process.stdout.write(JSON.stringify({}) + '\n');
|
|
108
|
+
}
|
|
109
|
+
}
|
|
63
110
|
|
|
64
|
-
|
|
111
|
+
function processSingleEdit(toolName, toolInput, emitFn, skipArray) {
|
|
112
|
+
const filePath = toolInput.file_path || '';
|
|
113
|
+
if (!filePath) return;
|
|
114
|
+
const findings = [];
|
|
65
115
|
|
|
66
|
-
|
|
67
|
-
|
|
116
|
+
if (filePath.endsWith('package.json')) {
|
|
117
|
+
checkDependencyAddition(toolName, toolInput, findings);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
const ext = path.extname(filePath).slice(1);
|
|
121
|
+
if (SOURCE_EXTENSIONS.has(ext)) {
|
|
122
|
+
if (toolName === 'Edit') {
|
|
123
|
+
checkLocDelta(toolInput, filePath, findings);
|
|
124
|
+
} else if (toolName === 'Write') {
|
|
125
|
+
checkNewFileSize(toolInput, filePath, findings);
|
|
68
126
|
}
|
|
127
|
+
}
|
|
69
128
|
|
|
70
|
-
|
|
129
|
+
checkLivingDocNudge(filePath, findings);
|
|
71
130
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
} catch (_) {
|
|
75
|
-
// Silent fail — enforcement must not break the session
|
|
131
|
+
if (ext !== 'md') {
|
|
132
|
+
checkWorkflowGate(toolName, filePath, ext, findings);
|
|
76
133
|
}
|
|
77
|
-
|
|
134
|
+
|
|
135
|
+
if (findings.length === 0) return;
|
|
136
|
+
|
|
137
|
+
const nudge = '[ASC enforcement] ' + findings.join(' ') + ' Review the decision ladder before continuing.';
|
|
138
|
+
emitFn(nudge);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
function emitClaude(nudge) {
|
|
142
|
+
try {
|
|
143
|
+
const isCopilot = Boolean(process.env.COPILOT_PLUGIN_DATA);
|
|
144
|
+
let output = {
|
|
145
|
+
hookSpecificOutput: {
|
|
146
|
+
hookEventName: 'PostToolUse',
|
|
147
|
+
additionalContext: nudge,
|
|
148
|
+
},
|
|
149
|
+
};
|
|
150
|
+
if (isCopilot) {
|
|
151
|
+
output = { additionalContext: nudge };
|
|
152
|
+
}
|
|
153
|
+
process.stdout.write(JSON.stringify(output) + '\n');
|
|
154
|
+
} catch (_) {}
|
|
155
|
+
}
|
|
78
156
|
|
|
79
157
|
function checkDependencyAddition(toolName, toolInput, findings) {
|
|
80
158
|
var target = toolName === 'Edit' ? (toolInput.new_string || '') : (toolInput.content || '');
|
|
@@ -215,20 +293,4 @@ function validateDocSpecs(workflow, findings) {
|
|
|
215
293
|
} catch (_) {}
|
|
216
294
|
}
|
|
217
295
|
|
|
218
|
-
|
|
219
|
-
try {
|
|
220
|
-
var isCopilot = Boolean(process.env.COPILOT_PLUGIN_DATA);
|
|
221
|
-
var output = {
|
|
222
|
-
hookSpecificOutput: {
|
|
223
|
-
hookEventName: 'PostToolUse',
|
|
224
|
-
additionalContext: nudge,
|
|
225
|
-
},
|
|
226
|
-
};
|
|
227
|
-
if (isCopilot) {
|
|
228
|
-
output = { additionalContext: nudge };
|
|
229
|
-
}
|
|
230
|
-
process.stdout.write(JSON.stringify(output));
|
|
231
|
-
} catch (_) {
|
|
232
|
-
// EPIPE — silent
|
|
233
|
-
}
|
|
234
|
-
}
|
|
296
|
+
|
|
@@ -27,8 +27,9 @@ process.stdin.on('data', function (chunk) { inputBuffer += chunk; });
|
|
|
27
27
|
process.stdin.on('end', function () {
|
|
28
28
|
try {
|
|
29
29
|
const data = JSON.parse(inputBuffer);
|
|
30
|
-
const
|
|
31
|
-
const
|
|
30
|
+
const isAntigravity = !!data.toolCall;
|
|
31
|
+
const toolName = isAntigravity ? data.toolCall.name : (data.tool_name || data.toolName || '');
|
|
32
|
+
const toolInput = isAntigravity ? data.toolCall.args : (data.tool_input || data.toolInput || {});
|
|
32
33
|
let added = [];
|
|
33
34
|
|
|
34
35
|
const isTerminal = ['Bash', 'run_command', 'run_shell_command', 'terminal', 'execute_command'].includes(toolName);
|
|
@@ -72,15 +73,23 @@ process.stdin.on('end', function () {
|
|
|
72
73
|
+ ' duplicates standard library or native platform features. '
|
|
73
74
|
+ 'Ladder step 3: use stdlib/native features instead, or add to .asc/dependency-allowlist.json to override.';
|
|
74
75
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
76
|
+
let output;
|
|
77
|
+
if (isAntigravity) {
|
|
78
|
+
output = {
|
|
79
|
+
decision: "deny",
|
|
80
|
+
reason: reason
|
|
81
|
+
};
|
|
82
|
+
} else {
|
|
83
|
+
output = {
|
|
84
|
+
allow_tool: false,
|
|
85
|
+
deny_reason: reason,
|
|
86
|
+
hookSpecificOutput: {
|
|
87
|
+
hookEventName: 'PreToolUse',
|
|
88
|
+
permissionDecision: 'deny',
|
|
89
|
+
permissionDecisionReason: reason
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
}
|
|
84
93
|
process.stdout.write(JSON.stringify(output) + '\n');
|
|
85
94
|
process.exit(2);
|
|
86
95
|
return;
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"hooks": [
|
|
7
7
|
{
|
|
8
8
|
"type": "command",
|
|
9
|
-
"command": "node \"
|
|
9
|
+
"command": "node -e \"const p=require('path'),fs=require('fs'),os=require('os');const local=p.join(process.cwd(),'.agents','plugins','agentic-senior-core','hooks','session-start.js');const global=p.join(os.homedir(),'.gemini','config','plugins','agentic-senior-core','hooks','session-start.js');require(fs.existsSync(local)?local:global);\"",
|
|
10
10
|
"commandWindows": "if (Get-Command node -ErrorAction SilentlyContinue) { $root = if ($env:CLAUDE_PLUGIN_ROOT) { $env:CLAUDE_PLUGIN_ROOT } else { \"$env:USERPROFILE\\.gemini\\config\\plugins\\agentic-senior-core\" }; node \"$root\\hooks\\session-start.js\" }",
|
|
11
11
|
"timeout": 5,
|
|
12
12
|
"statusMessage": "Loading ASC rules..."
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"hooks": [
|
|
20
20
|
{
|
|
21
21
|
"type": "command",
|
|
22
|
-
"command": "node \"
|
|
22
|
+
"command": "node -e \"const p=require('path'),fs=require('fs'),os=require('os');const local=p.join(process.cwd(),'.agents','plugins','agentic-senior-core','hooks','subagent-start.js');const global=p.join(os.homedir(),'.gemini','config','plugins','agentic-senior-core','hooks','subagent-start.js');require(fs.existsSync(local)?local:global);\"",
|
|
23
23
|
"commandWindows": "if (Get-Command node -ErrorAction SilentlyContinue) { $root = if ($env:CLAUDE_PLUGIN_ROOT) { $env:CLAUDE_PLUGIN_ROOT } else { \"$env:USERPROFILE\\.gemini\\config\\plugins\\agentic-senior-core\" }; node \"$root\\hooks\\subagent-start.js\" }",
|
|
24
24
|
"timeout": 5,
|
|
25
25
|
"statusMessage": "Loading ASC rules..."
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
{
|
|
35
35
|
"type": "command",
|
|
36
36
|
"if": "Edit(**/package.json)",
|
|
37
|
-
"command": "node \"
|
|
37
|
+
"command": "node -e \"const p=require('path'),fs=require('fs'),os=require('os');const local=p.join(process.cwd(),'.agents','plugins','agentic-senior-core','hooks','pre-tool-dependency-gate.js');const global=p.join(os.homedir(),'.gemini','config','plugins','agentic-senior-core','hooks','pre-tool-dependency-gate.js');require(fs.existsSync(local)?local:global);\"",
|
|
38
38
|
"commandWindows": "if (Get-Command node -ErrorAction SilentlyContinue) { $root = if ($env:CLAUDE_PLUGIN_ROOT) { $env:CLAUDE_PLUGIN_ROOT } else { \"$env:USERPROFILE\\.gemini\\config\\plugins\\agentic-senior-core\" }; node \"$root\\hooks\\pre-tool-dependency-gate.js\" }",
|
|
39
39
|
"timeout": 5,
|
|
40
40
|
"statusMessage": "ASC Pre-tool dependency check (Edit)..."
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
{
|
|
43
43
|
"type": "command",
|
|
44
44
|
"if": "Write(**/package.json)",
|
|
45
|
-
"command": "node \"
|
|
45
|
+
"command": "node -e \"const p=require('path'),fs=require('fs'),os=require('os');const local=p.join(process.cwd(),'.agents','plugins','agentic-senior-core','hooks','pre-tool-dependency-gate.js');const global=p.join(os.homedir(),'.gemini','config','plugins','agentic-senior-core','hooks','pre-tool-dependency-gate.js');require(fs.existsSync(local)?local:global);\"",
|
|
46
46
|
"commandWindows": "if (Get-Command node -ErrorAction SilentlyContinue) { $root = if ($env:CLAUDE_PLUGIN_ROOT) { $env:CLAUDE_PLUGIN_ROOT } else { \"$env:USERPROFILE\\.gemini\\config\\plugins\\agentic-senior-core\" }; node \"$root\\hooks\\pre-tool-dependency-gate.js\" }",
|
|
47
47
|
"timeout": 5,
|
|
48
48
|
"statusMessage": "ASC Pre-tool dependency check (Write)..."
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
"hooks": [
|
|
55
55
|
{
|
|
56
56
|
"type": "command",
|
|
57
|
-
"command": "node \"
|
|
57
|
+
"command": "node -e \"const p=require('path'),fs=require('fs'),os=require('os');const local=p.join(process.cwd(),'.agents','plugins','agentic-senior-core','hooks','pre-tool-dependency-gate.js');const global=p.join(os.homedir(),'.gemini','config','plugins','agentic-senior-core','hooks','pre-tool-dependency-gate.js');require(fs.existsSync(local)?local:global);\"",
|
|
58
58
|
"commandWindows": "if (Get-Command node -ErrorAction SilentlyContinue) { $root = if ($env:CLAUDE_PLUGIN_ROOT) { $env:CLAUDE_PLUGIN_ROOT } else { \"$env:USERPROFILE\\.gemini\\config\\plugins\\agentic-senior-core\" }; node \"$root\\hooks\\pre-tool-dependency-gate.js\" }",
|
|
59
59
|
"timeout": 5,
|
|
60
60
|
"statusMessage": "ASC Pre-tool dependency check (Terminal)..."
|
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
"hooks": [
|
|
69
69
|
{
|
|
70
70
|
"type": "command",
|
|
71
|
-
"command": "node \"
|
|
71
|
+
"command": "node -e \"const p=require('path'),fs=require('fs'),os=require('os');const local=p.join(process.cwd(),'.agents','plugins','agentic-senior-core','hooks','post-edit-enforce.js');const global=p.join(os.homedir(),'.gemini','config','plugins','agentic-senior-core','hooks','post-edit-enforce.js');require(fs.existsSync(local)?local:global);\"",
|
|
72
72
|
"commandWindows": "if (Get-Command node -ErrorAction SilentlyContinue) { $root = if ($env:CLAUDE_PLUGIN_ROOT) { $env:CLAUDE_PLUGIN_ROOT } else { \"$env:USERPROFILE\\.gemini\\config\\plugins\\agentic-senior-core\" }; node \"$root\\hooks\\post-edit-enforce.js\" }",
|
|
73
73
|
"timeout": 5,
|
|
74
74
|
"statusMessage": "ASC ladder & spec gate check..."
|
|
@@ -81,6 +81,13 @@
|
|
|
81
81
|
}
|
|
82
82
|
]
|
|
83
83
|
}
|
|
84
|
+
],
|
|
85
|
+
"PostInvocation": [
|
|
86
|
+
{
|
|
87
|
+
"type": "command",
|
|
88
|
+
"command": "node -e \"const p=require('path'),fs=require('fs'),os=require('os');const local=p.join(process.cwd(),'.agents','plugins','agentic-senior-core','hooks','post-edit-enforce.js');const global=p.join(os.homedir(),'.gemini','config','plugins','agentic-senior-core','hooks','post-edit-enforce.js');require(fs.existsSync(local)?local:global);\"",
|
|
89
|
+
"timeout": 15
|
|
90
|
+
}
|
|
84
91
|
]
|
|
85
92
|
}
|
|
86
|
-
}
|
|
93
|
+
}
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agentic-senior-core",
|
|
3
|
-
"version": "5.8.
|
|
3
|
+
"version": "5.8.24",
|
|
4
4
|
"description": "Universal AI coding rules. Write code like a staff engineer.",
|
|
5
5
|
"contextFileName": "rules/agentic-senior-core.md",
|
|
6
|
-
"rules": [
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
"rules": [
|
|
7
|
+
"rules/"
|
|
8
|
+
],
|
|
9
|
+
"commands": [
|
|
10
|
+
"commands/"
|
|
11
|
+
],
|
|
12
|
+
"skills": [
|
|
13
|
+
"skills/"
|
|
14
|
+
],
|
|
9
15
|
"hooks": "hooks.json"
|
|
10
16
|
}
|
|
@@ -65,6 +65,8 @@ When you pick the minimal option at step 5 or 6, and it isn't obviously trivial:
|
|
|
65
65
|
|
|
66
66
|
## Workflow
|
|
67
67
|
|
|
68
|
+
- Prefix ALL terminal commands with `ascx` to compress output and save tokens (e.g., `ascx <your_command>`).
|
|
69
|
+
|
|
68
70
|
Recognize the scenario and offer the matching command — user decides
|
|
69
71
|
whether to invoke it. Skip this for trivial edits.
|
|
70
72
|
|
package/AGENTS.md
CHANGED
|
@@ -60,6 +60,8 @@ When you pick the minimal option at step 5 or 6, and it isn't obviously trivial:
|
|
|
60
60
|
|
|
61
61
|
## Workflow
|
|
62
62
|
|
|
63
|
+
- Prefix ALL terminal commands with `ascx` to compress output and save tokens (e.g., `ascx <your_command>`).
|
|
64
|
+
|
|
63
65
|
Recognize the scenario and offer the matching command — user decides
|
|
64
66
|
whether to invoke it. Skip this for trivial edits.
|
|
65
67
|
|
package/README.md
CHANGED
|
@@ -224,9 +224,9 @@ Copies one file to `.openhands/microagents/agentic-senior-core.md`. Repeat per p
|
|
|
224
224
|
</details>
|
|
225
225
|
|
|
226
226
|
<details>
|
|
227
|
-
<summary><b>Google Antigravity IDE</b></summary>
|
|
227
|
+
<summary><b>Google Antigravity (2.0, IDE, and CLI)</b></summary>
|
|
228
228
|
|
|
229
|
-
**Option A -- workspace rules (per project):**
|
|
229
|
+
**Option A -- workspace rules (per project for 2.0 and IDE only):**
|
|
230
230
|
|
|
231
231
|
Copy the rules file into your project's `.agents/rules/` directory:
|
|
232
232
|
|
|
@@ -244,9 +244,9 @@ mkdir .agents\rules -Force
|
|
|
244
244
|
cp "$(npm root -g)/@ryuenn3123/agentic-senior-core/.agents/rules/agentic-senior-core.md" .agents\rules\
|
|
245
245
|
```
|
|
246
246
|
|
|
247
|
-
Antigravity IDE
|
|
247
|
+
Antigravity IDE and 2.0 read it automatically with `trigger: always_on`. *(Note: Antigravity CLI does not support workspace plugins, use Option B for CLI).*
|
|
248
248
|
|
|
249
|
-
**Option B -- global install (all projects):**
|
|
249
|
+
**Option B -- global install (all projects and ALL clients):**
|
|
250
250
|
|
|
251
251
|
One command (works on all platforms):
|
|
252
252
|
|
|
@@ -254,25 +254,15 @@ One command (works on all platforms):
|
|
|
254
254
|
asc global --antigravity
|
|
255
255
|
```
|
|
256
256
|
|
|
257
|
-
This
|
|
258
|
-
- **
|
|
257
|
+
This automatically stages the plugin bundle (skills, rules, hooks, and MCP servers) for:
|
|
258
|
+
- **Antigravity 2.0 & IDE** (`~/.gemini/config/plugins/agentic-senior-core/`)
|
|
259
|
+
- **Antigravity CLI** (`~/.gemini/antigravity-cli/plugins/agentic-senior-core/`)
|
|
259
260
|
|
|
260
|
-
If you previously installed to
|
|
261
|
+
If you previously installed to legacy locations (v5.8.4 or earlier), the old paths are cleaned up automatically.
|
|
261
262
|
|
|
262
263
|
> Note: `npm update -g` refreshes the npm package only. The global copy does not auto-update -- re-run `asc global --antigravity` after each update.
|
|
263
264
|
|
|
264
|
-
> **WSL / dual-environment:** `asc global --antigravity` writes to the HOME directory of the current environment. If you use both Windows native and WSL, run it separately in each terminal.
|
|
265
|
-
|
|
266
|
-
</details>
|
|
267
|
-
|
|
268
|
-
<details>
|
|
269
|
-
<summary><b>Google Antigravity CLI</b></summary>
|
|
270
|
-
|
|
271
|
-
Requires [Antigravity CLI](https://antigravity.google) (`agy`) installed separately.
|
|
272
|
-
|
|
273
|
-
```bash
|
|
274
|
-
agy plugin install https://github.com/fatidaprilian/Agentic-Senior-Core.git
|
|
275
|
-
```
|
|
265
|
+
> **WSL / dual-environment:** `asc global --antigravity` writes to the HOME directory of the current environment. If you use both Windows native and WSL, run it separately in each terminal.
|
|
276
266
|
|
|
277
267
|
</details>
|
|
278
268
|
|
|
@@ -307,7 +297,7 @@ asc global --all
|
|
|
307
297
|
|
|
308
298
|
| Tool | Global location | Notes |
|
|
309
299
|
|------|----------------|-------|
|
|
310
|
-
| Google Antigravity IDE | `~/.gemini/config/plugins/
|
|
300
|
+
| Google Antigravity (2.0, IDE, CLI) | `~/.gemini/config/plugins/...` and `~/.gemini/antigravity-cli/plugins/...` | Plugin bundle (skills, hooks, rules) |
|
|
311
301
|
| Cline | `~/Documents/Cline/Rules/` | Toggleable in the Cline rules panel |
|
|
312
302
|
| Kilo Code | `~/.kilocode/rules/` | Or point `instructions:` in `~/.config/kilo/kilo.jsonc` at the npm package path — that variant auto-updates |
|
|
313
303
|
| Kiro | `~/.kiro/steering/` | Some builds have global-steering loading bugs; fall back to `asc adapter --kiro` |
|
package/gemini-extension.json
CHANGED
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agentic-senior-core",
|
|
3
|
-
"version": "5.8.
|
|
3
|
+
"version": "5.8.24",
|
|
4
4
|
"description": "Universal AI coding rules. Write code like a staff engineer.",
|
|
5
5
|
"author": "fatidaprilian",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"contextFileName": ".agents/plugins/agentic-senior-core/rules/agentic-senior-core.md",
|
|
8
|
-
"rules": [
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
"rules": [
|
|
9
|
+
".agents/plugins/agentic-senior-core/rules/"
|
|
10
|
+
],
|
|
11
|
+
"commands": [
|
|
12
|
+
".agents/plugins/agentic-senior-core/commands/"
|
|
13
|
+
],
|
|
14
|
+
"skills": [
|
|
15
|
+
".agents/plugins/agentic-senior-core/skills/"
|
|
16
|
+
],
|
|
11
17
|
"hooks": ".agents/plugins/agentic-senior-core/hooks.json"
|
|
12
18
|
}
|
|
@@ -26,7 +26,7 @@ const OLD_PATHS = [
|
|
|
26
26
|
|
|
27
27
|
const GLOBAL_TARGETS = {
|
|
28
28
|
antigravity: {
|
|
29
|
-
label: 'Google Antigravity IDE',
|
|
29
|
+
label: 'Google Antigravity (2.0, IDE, CLI)',
|
|
30
30
|
kind: 'antigravity-ide',
|
|
31
31
|
pluginSourcePath: '.agents/plugins/agentic-senior-core',
|
|
32
32
|
rulesSourcePath: '.agents/plugins/agentic-senior-core/rules/agentic-senior-core.md',
|
|
@@ -172,6 +172,7 @@ async function installAntigravityIde(target) {
|
|
|
172
172
|
const pluginSource = path.join(REPOSITORY_ROOT, target.pluginSourcePath);
|
|
173
173
|
const rulesSource = path.join(REPOSITORY_ROOT, target.rulesSourcePath);
|
|
174
174
|
const pluginTargetPath = target.pluginTargetPath();
|
|
175
|
+
const cliTargetPath = path.join(HOME, '.gemini', 'antigravity-cli', 'plugins', 'agentic-senior-core');
|
|
175
176
|
const rulesTargetPath = target.rulesTargetPath();
|
|
176
177
|
|
|
177
178
|
if (!(await pathExists(pluginSource))) {
|
|
@@ -183,17 +184,26 @@ async function installAntigravityIde(target) {
|
|
|
183
184
|
return false;
|
|
184
185
|
}
|
|
185
186
|
|
|
186
|
-
// Copy plugin bundle
|
|
187
|
+
// Copy plugin bundle to IDE / 2.0 (~/.gemini/config/plugins/agentic-senior-core/)
|
|
187
188
|
await fs.mkdir(path.dirname(pluginTargetPath), { recursive: true });
|
|
188
189
|
await copyDirRecursive(pluginSource, pluginTargetPath);
|
|
190
|
+
|
|
191
|
+
// Copy plugin bundle to CLI (~/.gemini/antigravity-cli/plugins/agentic-senior-core/)
|
|
192
|
+
await fs.mkdir(path.dirname(cliTargetPath), { recursive: true });
|
|
193
|
+
await copyDirRecursive(pluginSource, cliTargetPath);
|
|
189
194
|
|
|
190
195
|
// Clean up old hooks/hooks.json duplicate from previous versions
|
|
191
196
|
const oldHooksJson = path.join(pluginTargetPath, 'hooks', 'hooks.json');
|
|
192
197
|
if (await pathExists(oldHooksJson)) {
|
|
193
198
|
await fs.rm(oldHooksJson);
|
|
194
199
|
}
|
|
200
|
+
const oldHooksJsonCli = path.join(cliTargetPath, 'hooks', 'hooks.json');
|
|
201
|
+
if (await pathExists(oldHooksJsonCli)) {
|
|
202
|
+
await fs.rm(oldHooksJsonCli);
|
|
203
|
+
}
|
|
195
204
|
|
|
196
|
-
console.log(` ${target.label}: plugin -> ${pluginTargetPath} ... OK`);
|
|
205
|
+
console.log(` ${target.label}: IDE/2.0 plugin -> ${pluginTargetPath} ... OK`);
|
|
206
|
+
console.log(` ${target.label}: CLI plugin -> ${cliTargetPath} ... OK`);
|
|
197
207
|
|
|
198
208
|
// The IDE automatically loads the plugin bundle's internal rules/ folder!
|
|
199
209
|
// Appending to GEMINI.md causes double rules (1,250 tokens x 2).
|
package/package.json
CHANGED
package/plugin.yaml
CHANGED