ai-global 1.13.0 → 1.14.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.
- package/README.md +34 -54
- package/ai-global +217 -193
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -36,7 +36,7 @@ This will:
|
|
|
36
36
|
|
|
37
37
|
1. Scan your system for installed AI tools
|
|
38
38
|
2. Backup original configs to `~/.ai-global/backups/`
|
|
39
|
-
3. Merge
|
|
39
|
+
3. Merge AGENTS.md/skills/agents/rules/commands from all tools
|
|
40
40
|
4. Create symlinks from each tool's config to shared directories
|
|
41
41
|
|
|
42
42
|
### Commands
|
|
@@ -50,16 +50,12 @@ This will:
|
|
|
50
50
|
| `ai-global unlink <key>` | Restore a tool's original config |
|
|
51
51
|
| `ai-global unlink all` | Restore all tools |
|
|
52
52
|
| `ai-global skill <user/repo>` | Add a skill |
|
|
53
|
-
| `ai-global agent <source>` | Add an agent |
|
|
54
|
-
| `ai-global rule <source>` | Add a rule |
|
|
55
|
-
| `ai-global command <source>` | Add a command |
|
|
56
|
-
| `ai-global prompt <source>` | Add a prompt |
|
|
57
53
|
| `ai-global upgrade` | Upgrade to latest version |
|
|
58
54
|
| `ai-global uninstall` | Completely remove ai-global |
|
|
59
55
|
| `ai-global version` | Show version |
|
|
60
56
|
| `ai-global help` | Show help |
|
|
61
57
|
|
|
62
|
-
### Add
|
|
58
|
+
### Add skills
|
|
63
59
|
|
|
64
60
|
```bash
|
|
65
61
|
ai-global skill user/repo
|
|
@@ -70,25 +66,23 @@ ai-global skill https://github.com/user/repo
|
|
|
70
66
|
|
|
71
67
|
```
|
|
72
68
|
~/.ai-global/
|
|
73
|
-
├──
|
|
69
|
+
├── AGENTS.md <- Shared AGENTS.md (edit this)
|
|
74
70
|
├── skills/ <- Shared skills (merged from all tools)
|
|
75
71
|
├── agents/ <- Shared agents
|
|
76
72
|
├── rules/ <- Shared rules
|
|
77
73
|
├── commands/ <- Shared slash commands
|
|
78
|
-
├── prompts/ <- Shared prompt templates
|
|
79
74
|
└── backups/ <- Original configs (backup)
|
|
80
75
|
|
|
81
76
|
Each AI tool's config directory contains symlinks:
|
|
82
77
|
|
|
83
78
|
~/.claude/
|
|
84
|
-
├── CLAUDE.md -> ~/.ai-global/
|
|
79
|
+
├── CLAUDE.md -> ~/.ai-global/AGENTS.md (symlink)
|
|
85
80
|
├── skills/ -> ~/.ai-global/skills/ (symlink)
|
|
86
81
|
└── commands/ -> ~/.ai-global/commands/ (symlink)
|
|
87
82
|
|
|
88
83
|
~/.cursor/
|
|
89
|
-
├── rules/
|
|
90
|
-
|
|
91
|
-
└── prompts/ -> ~/.ai-global/prompts/ (symlink)
|
|
84
|
+
├── rules/AGENTS.md -> ~/.ai-global/AGENTS.md (symlink)
|
|
85
|
+
└── skills/ -> ~/.ai-global/skills/ (symlink)
|
|
92
86
|
|
|
93
87
|
... and more tools
|
|
94
88
|
```
|
|
@@ -105,48 +99,34 @@ The first file found wins (dedup by filename).
|
|
|
105
99
|
|
|
106
100
|
## Supported Tools
|
|
107
101
|
|
|
108
|
-
| Tool
|
|
109
|
-
|
|
|
110
|
-
| Claude Code
|
|
111
|
-
|
|
|
112
|
-
|
|
|
113
|
-
| Factory Droid
|
|
114
|
-
|
|
|
115
|
-
|
|
|
116
|
-
|
|
|
117
|
-
|
|
|
118
|
-
|
|
|
119
|
-
|
|
|
120
|
-
|
|
|
121
|
-
|
|
|
122
|
-
|
|
|
123
|
-
|
|
|
124
|
-
|
|
|
125
|
-
|
|
|
126
|
-
|
|
|
127
|
-
|
|
|
128
|
-
|
|
|
129
|
-
|
|
|
130
|
-
|
|
|
131
|
-
|
|
|
132
|
-
|
|
|
133
|
-
|
|
|
134
|
-
|
|
|
135
|
-
|
|
|
136
|
-
| Supermaven | `supermaven` | ✓ | | | | | |
|
|
137
|
-
| CodeStory | `codestory` | ✓ | | | | | |
|
|
138
|
-
| Double | `double` | ✓ | | | | | |
|
|
139
|
-
| Blackbox AI | `blackbox` | ✓ | | | | | |
|
|
140
|
-
| Amazon Q | `amazonq` | ✓ | | | | | |
|
|
141
|
-
| Copilot Workspace | `copilot-workspace` | ✓ | | | | | |
|
|
142
|
-
| Goose AI | `goose` | ✓ | | | | | |
|
|
143
|
-
| Mentat | `mentat` | ✓ | | | | | |
|
|
144
|
-
| Melty | `melty` | ✓ | | | | | |
|
|
145
|
-
| Void | `void` | ✓ | | | | | |
|
|
146
|
-
| Qoder | `qoder` | ✓ | | | | | |
|
|
147
|
-
| Augment | `augment` | ✓ | | ✓ | ✓ | | |
|
|
148
|
-
| Codebuff | `codebuff` | ✓ | | ✓ | | | |
|
|
149
|
-
| CodeBuddy | `codebuddy` | ✓ | | ✓ | | | |
|
|
102
|
+
| Tool | Key | Global | Rules | Commands | Skills | Agents |
|
|
103
|
+
| -------------- | ------------- | :----: | :---: | :------: | :----: | :----: |
|
|
104
|
+
| Claude Code | `claude` | ✓ | | ✓ | ✓ | ✓ |
|
|
105
|
+
| OpenAI Codex | `codex` | ✓ | ✓ | | ✓ | ✓ |
|
|
106
|
+
| Cursor | `cursor` | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
107
|
+
| Factory Droid | `droid` | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
108
|
+
| Amp | `amp` | ✓ | ✓ | ✓ | ✓ | |
|
|
109
|
+
| Antigravity | `antigravity` | ✓ | | | ✓ | |
|
|
110
|
+
| Gemini CLI | `gemini` | ✓ | | | ✓ | |
|
|
111
|
+
| Kiro CLI | `kiro` | ✓ | ✓ | | ✓ | ✓ |
|
|
112
|
+
| OpenCode | `opencode` | ✓ | | ✓ | ✓ | ✓ |
|
|
113
|
+
| Qoder | `qoder` | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
114
|
+
| Qodo | `qodo` | ✓ | | | | ✓ |
|
|
115
|
+
| GitHub Copilot | `copilot` | ✓ | | | ✓ | ✓ |
|
|
116
|
+
| Continue | `continue` | ✓ | ✓ | | | |
|
|
117
|
+
| Windsurf | `windsurf` | ✓ | ✓ | | ✓ | |
|
|
118
|
+
| Roo Code | `roo` | ✓ | ✓ | ✓ | ✓ | |
|
|
119
|
+
| Cline | `cline` | ✓ | ✓ | | ✓ | |
|
|
120
|
+
| Blackbox AI | `blackbox` | | | | ✓ | |
|
|
121
|
+
| Goose AI | `goose` | ✓ | | | ✓ | |
|
|
122
|
+
| Augment | `augment` | ✓ | ✓ | ✓ | | ✓ |
|
|
123
|
+
| Clawdbot Code | `clawdbot` | ✓ | | | ✓ | ✓ |
|
|
124
|
+
| Command Code | `commandcode` | ✓ | | ✓ | ✓ | |
|
|
125
|
+
| Kilo Code | `kilocode` | ✓ | ✓ | ✓ | ✓ | |
|
|
126
|
+
| Neovate | `neovate` | ✓ | | ✓ | ✓ | ✓ |
|
|
127
|
+
| OpenHands | `openhands` | ✓ | | | ✓ | |
|
|
128
|
+
| TRAE | `trae` | ✓ | ✓ | | ✓ | |
|
|
129
|
+
| Zencoder | `zencoder` | ✓ | ✓ | | ✓ | |
|
|
150
130
|
|
|
151
131
|
## Uninstall
|
|
152
132
|
|
package/ai-global
CHANGED
|
@@ -7,15 +7,14 @@ set -e
|
|
|
7
7
|
|
|
8
8
|
CONFIG_DIR="$HOME/.ai-global"
|
|
9
9
|
BACKUP_DIR="$CONFIG_DIR/backups"
|
|
10
|
-
|
|
10
|
+
AGENTS_MD="$CONFIG_DIR/AGENTS.md"
|
|
11
11
|
SKILLS_DIR="$CONFIG_DIR/skills"
|
|
12
12
|
AGENTS_DIR="$CONFIG_DIR/agents"
|
|
13
13
|
RULES_DIR="$CONFIG_DIR/rules"
|
|
14
14
|
COMMANDS_DIR="$CONFIG_DIR/commands"
|
|
15
|
-
PROMPTS_DIR="$CONFIG_DIR/prompts"
|
|
16
15
|
|
|
17
16
|
# Version
|
|
18
|
-
VERSION="1.
|
|
17
|
+
VERSION="1.14.0"
|
|
19
18
|
|
|
20
19
|
# Colors
|
|
21
20
|
RED='\033[0;31m'
|
|
@@ -24,6 +23,7 @@ YELLOW='\033[0;33m'
|
|
|
24
23
|
BLUE='\033[0;34m'
|
|
25
24
|
CYAN='\033[0;36m'
|
|
26
25
|
MAGENTA='\033[0;35m'
|
|
26
|
+
GRAY='\033[0;90m'
|
|
27
27
|
BRIGHT_RED='\033[1;31m'
|
|
28
28
|
BRIGHT_GREEN='\033[1;32m'
|
|
29
29
|
BRIGHT_YELLOW='\033[1;33m'
|
|
@@ -32,19 +32,35 @@ BRIGHT_MAGENTA='\033[1;35m'
|
|
|
32
32
|
BRIGHT_CYAN='\033[1;36m'
|
|
33
33
|
NC='\033[0m'
|
|
34
34
|
|
|
35
|
-
# Tool color palette (using xterm-256 colors for
|
|
36
|
-
#
|
|
35
|
+
# Tool color palette (using bright xterm-256 colors for 26 tools)
|
|
36
|
+
# All colors are bright and visually distinct for better visibility
|
|
37
37
|
TOOL_COLORS=(
|
|
38
|
-
"\033[38;5;
|
|
39
|
-
"\033[38;5;
|
|
40
|
-
"\033[38;5;
|
|
41
|
-
"\033[38;5;
|
|
42
|
-
"\033[38;5;
|
|
43
|
-
"\033[38;5;
|
|
44
|
-
"\033[38;5;
|
|
45
|
-
"\033[38;5;
|
|
46
|
-
"\033[38;5;
|
|
47
|
-
"\033[38;5;
|
|
38
|
+
"\033[38;5;226m" # Bright Yellow
|
|
39
|
+
"\033[38;5;46m" # Bright Green
|
|
40
|
+
"\033[38;5;51m" # Bright Cyan
|
|
41
|
+
"\033[38;5;180m" # Light Blue (replaced Bright Blue)
|
|
42
|
+
"\033[38;5;201m" # Bright Magenta
|
|
43
|
+
"\033[38;5;208m" # Bright Orange
|
|
44
|
+
"\033[38;5;9m" # Red
|
|
45
|
+
"\033[38;5;11m" # Yellow
|
|
46
|
+
"\033[38;5;10m" # Green
|
|
47
|
+
"\033[38;5;14m" # Cyan
|
|
48
|
+
"\033[38;5;12m" # Blue
|
|
49
|
+
"\033[38;5;13m" # Magenta
|
|
50
|
+
"\033[38;5;214m" # Orange
|
|
51
|
+
"\033[38;5;220m" # Gold
|
|
52
|
+
"\033[38;5;82m" # Aquamarine
|
|
53
|
+
"\033[38;5;117m" # Light Blue
|
|
54
|
+
"\033[38;5;165m" # Purple
|
|
55
|
+
"\033[38;5;118m" # Lime Green
|
|
56
|
+
"\033[38;5;225m" # Pink
|
|
57
|
+
"\033[38;5;39m" # Sky Blue
|
|
58
|
+
"\033[38;5;129m" # Bright Purple
|
|
59
|
+
"\033[38;5;203m" # Rose
|
|
60
|
+
"\033[38;5;77m" # Spring Green
|
|
61
|
+
"\033[38;5;215m" # Salmon
|
|
62
|
+
"\033[38;5;159m" # Light Cyan
|
|
63
|
+
"\033[38;5;147m" # Pale Blue
|
|
48
64
|
)
|
|
49
65
|
|
|
50
66
|
beautify_path() {
|
|
@@ -90,49 +106,34 @@ log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
|
|
|
90
106
|
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
|
|
91
107
|
|
|
92
108
|
# Known AI tool patterns
|
|
93
|
-
# Format: dir|key|name|
|
|
109
|
+
# Format: dir|key|name|agents_md|rules_dir|commands_dir|skills_dir|agents_dir
|
|
94
110
|
declare -a KNOWN_PATTERNS=(
|
|
95
|
-
".claude|claude|Claude Code|CLAUDE.md|skills
|
|
96
|
-
".
|
|
97
|
-
".
|
|
98
|
-
".
|
|
99
|
-
".
|
|
100
|
-
".gemini|
|
|
101
|
-
".
|
|
102
|
-
".
|
|
103
|
-
".
|
|
104
|
-
".
|
|
105
|
-
".
|
|
106
|
-
".
|
|
107
|
-
".continue|continue|Continue|
|
|
108
|
-
".codeium|
|
|
109
|
-
".
|
|
110
|
-
".
|
|
111
|
-
".
|
|
112
|
-
".
|
|
113
|
-
".
|
|
114
|
-
".
|
|
115
|
-
".
|
|
116
|
-
".
|
|
117
|
-
".
|
|
118
|
-
".
|
|
119
|
-
".
|
|
120
|
-
".
|
|
121
|
-
".supermaven|supermaven|Supermaven|config.json|.|.|.|.|."
|
|
122
|
-
".codestory|codestory|CodeStory|instructions.md|.|.|.|.|."
|
|
123
|
-
".double|double|Double|instructions.md|.|.|.|.|."
|
|
124
|
-
".blackbox|blackbox|Blackbox AI|config.json|.|.|.|.|."
|
|
125
|
-
".amazonq|amazonq|Amazon Q|instructions.md|.|.|.|.|."
|
|
126
|
-
".copilot-workspace|copilot-workspace|Copilot Workspace|instructions.md|.|.|.|.|."
|
|
127
|
-
".codex|codex|OpenAI Codex|instructions.md|skills|agents|rules|.|."
|
|
128
|
-
".goose|goose|Goose AI|instructions.md|skills|agents|rules|.|."
|
|
129
|
-
".mentat|mentat|Mentat|instructions.md|skills|agents|rules|.|."
|
|
130
|
-
".gpt-engineer|gpt-engineer|GPT Engineer|instructions.md|skills|agents|rules|.|prompts"
|
|
131
|
-
".smol|smol|Smol Developer|instructions.md|skills|agents|rules|.|prompts"
|
|
132
|
-
".config/opencode|opencode|OpenCode Config|instructions.md|.|.|.|.|."
|
|
133
|
-
".augment|augment|Augment|instructions.md|.|agents|rules|.|."
|
|
134
|
-
".codebuff|codebuff|Codebuff|instructions.md|.|agents|.|.|."
|
|
135
|
-
".codebuddy|codebuddy|CodeBuddy|settings.json|.|agents|.|.|."
|
|
111
|
+
".claude|claude|Claude Code|CLAUDE.md|.|commands|skills|agents"
|
|
112
|
+
".codex|codex|OpenAI Codex|AGENTS.md|rules|.|skills|agents"
|
|
113
|
+
".cursor|cursor|Cursor|AGENTS.md|rules|commands|skills|agents"
|
|
114
|
+
".factory|droid|Factory Droid|AGENTS.md|rules|commands|skills|droids"
|
|
115
|
+
".amp|amp|Amp|AGENTS.md|rules|commands|skills|."
|
|
116
|
+
".gemini|antigravity|Antigravity|GEMINI.md|.|.|antigravity/skills|."
|
|
117
|
+
".gemini|gemini|Gemini CLI|GEMINI.md|.|.|skills|."
|
|
118
|
+
".kiro|kiro|Kiro CLI|steering/AGENTS.md|steering|.|skills|agents"
|
|
119
|
+
".config/opencode|opencode|OpenCode|AGENTS.md|.|command|skill|agents"
|
|
120
|
+
".qoder|qoder|Qoder|AGENTS.md|rules|commands|skills|agents"
|
|
121
|
+
".qodo|qodo|Qodo|AGENTS.md|.|.|.|agents"
|
|
122
|
+
".copilot|copilot|GitHub Copilot|AGENTS.md|.|.|skills|agents"
|
|
123
|
+
".continue|continue|Continue|AGENTS.md|rules|.|.|."
|
|
124
|
+
".codeium/windsurf|windsurf|Windsurf|AGENTS.md|rules|.|skills|."
|
|
125
|
+
".roo|roo|Roo Code|AGENTS.md|rules|commands|skills|."
|
|
126
|
+
".cline|cline|Cline|AGENTS.md|rules|.|skills|."
|
|
127
|
+
".blackbox|blackbox|Blackbox AI|.|.|.|skills|."
|
|
128
|
+
".goose|goose|Goose AI|AGENTS.md|.|.|skills|."
|
|
129
|
+
".augment|augment|Augment|AGENTS.md|rules|commands|.|agents"
|
|
130
|
+
".clawdbot|clawdbot|Clawdbot Code|AGENTS.md|.|.|skills|subagents"
|
|
131
|
+
".commandcode|commandcode|Command Code|AGENTS.md|.|.|skills|."
|
|
132
|
+
".kilocode|kilocode|Kilo Code|AGENTS.md|rules|commands|skills|."
|
|
133
|
+
".neovate|neovate|Neovate|AGENTS.md|.|commands|skills|agents"
|
|
134
|
+
".openhands|openhands|OpenHands|AGENTS.md|.|.|skills|."
|
|
135
|
+
".trae|trae|TRAE|AGENTS.md|rules|.|skills|."
|
|
136
|
+
".zencoder|zencoder|Zencoder|AGENTS.md|rules|.|skills|."
|
|
136
137
|
)
|
|
137
138
|
|
|
138
139
|
# Backup a file or directory
|
|
@@ -229,13 +230,12 @@ show_status() {
|
|
|
229
230
|
|
|
230
231
|
local total_links=0
|
|
231
232
|
|
|
232
|
-
# Instructions
|
|
233
233
|
local instr_output=""
|
|
234
234
|
for pattern in "${KNOWN_PATTERNS[@]}"; do
|
|
235
|
-
local p_dir p_name p_instr p_skills p_agents p_rules p_cmds
|
|
236
|
-
IFS='|' read -r p_dir p_key p_name p_instr
|
|
235
|
+
local p_dir p_name p_instr p_skills p_agents p_rules p_cmds
|
|
236
|
+
IFS='|' read -r p_dir p_key p_name p_instr p_rules p_cmds p_skills p_agents <<< "$pattern"
|
|
237
237
|
|
|
238
|
-
if [[ "$p_instr" != "." ]] && [[ "$p_instr"
|
|
238
|
+
if [[ "$p_instr" != "." ]] && [[ "$p_instr" == *.md ]]; then
|
|
239
239
|
local target="$HOME/$p_dir/$p_instr"
|
|
240
240
|
if [[ -L "$target" ]]; then
|
|
241
241
|
local link_target=$(readlink "$target" 2>/dev/null || true)
|
|
@@ -249,23 +249,22 @@ show_status() {
|
|
|
249
249
|
done
|
|
250
250
|
|
|
251
251
|
if [[ -n "$instr_output" ]]; then
|
|
252
|
-
echo -e "${BLUE}[
|
|
252
|
+
echo -e "${BLUE}[AGENTS.md]${NC}"
|
|
253
253
|
echo -e -n "$instr_output"
|
|
254
254
|
fi
|
|
255
255
|
|
|
256
|
-
for type_name in
|
|
256
|
+
for type_name in rules commands skills agents; do
|
|
257
257
|
local type_output=""
|
|
258
258
|
for pattern in "${KNOWN_PATTERNS[@]}"; do
|
|
259
|
-
local p_dir p_name p_instr p_skills p_agents p_rules p_cmds
|
|
260
|
-
IFS='|' read -r p_dir p_key p_name p_instr
|
|
259
|
+
local p_dir p_name p_instr p_skills p_agents p_rules p_cmds
|
|
260
|
+
IFS='|' read -r p_dir p_key p_name p_instr p_rules p_cmds p_skills p_agents <<< "$pattern"
|
|
261
261
|
|
|
262
262
|
local type_dir=""
|
|
263
263
|
case "$type_name" in
|
|
264
|
-
skills) type_dir="$p_skills" ;;
|
|
265
|
-
agents) type_dir="$p_agents" ;;
|
|
266
264
|
rules) type_dir="$p_rules" ;;
|
|
267
265
|
commands) type_dir="$p_cmds" ;;
|
|
268
|
-
|
|
266
|
+
skills) type_dir="$p_skills" ;;
|
|
267
|
+
agents) type_dir="$p_agents" ;;
|
|
269
268
|
esac
|
|
270
269
|
|
|
271
270
|
if [[ "$type_dir" != "." ]]; then
|
|
@@ -292,46 +291,88 @@ show_status() {
|
|
|
292
291
|
fi
|
|
293
292
|
|
|
294
293
|
echo ""
|
|
295
|
-
log_info "Shared items:
|
|
294
|
+
log_info "Shared items: rules=$(count_items "$RULES_DIR"), commands=$(count_items "$COMMANDS_DIR"), skills=$(count_items "$SKILLS_DIR"), agents=$(count_items "$AGENTS_DIR")"
|
|
296
295
|
}
|
|
297
296
|
|
|
298
297
|
# List supported tools
|
|
299
298
|
list_supported() {
|
|
300
299
|
log_info "Supported AI tools:"
|
|
301
300
|
echo ""
|
|
302
|
-
printf " ${BLUE}%-
|
|
303
|
-
echo "
|
|
301
|
+
printf " ${BLUE}%-16s %-12s %-15s %-7s %-7s %-7s %-6s %-11s %s${NC}\n" "Tool" "Key" "Directory" "AGENTS.md" "Rules" "Commands" "Skills" "Agents" "Status"
|
|
302
|
+
echo " ----------------------------------------------------------------------------------------------------"
|
|
304
303
|
|
|
305
304
|
for pattern in "${KNOWN_PATTERNS[@]}"; do
|
|
306
|
-
local p_dir p_name p_instr p_skills p_agents p_rules p_cmds
|
|
307
|
-
IFS='|' read -r p_dir p_key p_name p_instr
|
|
305
|
+
local p_dir p_name p_instr p_skills p_agents p_rules p_cmds
|
|
306
|
+
IFS='|' read -r p_dir p_key p_name p_instr p_rules p_cmds p_skills p_agents <<< "$pattern"
|
|
308
307
|
local full_path="$HOME/$p_dir"
|
|
309
308
|
|
|
310
|
-
local
|
|
309
|
+
local g_str="." s_str="." a_str="." r_str="." c_str="."
|
|
310
|
+
|
|
311
|
+
# Check what the tool supports based on KNOWN_PATTERNS
|
|
312
|
+
if [[ "$p_instr" != "." ]]; then
|
|
313
|
+
g_str="○"
|
|
314
|
+
else
|
|
315
|
+
g_str="${GRAY}.${NC}"
|
|
316
|
+
fi
|
|
317
|
+
if [[ "$p_skills" != "." ]]; then
|
|
318
|
+
s_str="○"
|
|
319
|
+
else
|
|
320
|
+
s_str="${GRAY}.${NC}"
|
|
321
|
+
fi
|
|
322
|
+
if [[ "$p_agents" != "." ]]; then
|
|
323
|
+
a_str="○"
|
|
324
|
+
else
|
|
325
|
+
a_str="${GRAY}.${NC}"
|
|
326
|
+
fi
|
|
327
|
+
if [[ "$p_rules" != "." ]]; then
|
|
328
|
+
r_str="○"
|
|
329
|
+
else
|
|
330
|
+
r_str="${GRAY}.${NC}"
|
|
331
|
+
fi
|
|
332
|
+
if [[ "$p_cmds" != "." ]]; then
|
|
333
|
+
c_str="○"
|
|
334
|
+
else
|
|
335
|
+
c_str="${GRAY}.${NC}"
|
|
336
|
+
fi
|
|
337
|
+
|
|
338
|
+
# If tool is installed, check if the configs actually exist
|
|
311
339
|
if [[ -d "$full_path" ]]; then
|
|
312
|
-
[[ "$
|
|
313
|
-
[[ "$
|
|
314
|
-
[[ "$
|
|
315
|
-
[[ "$
|
|
316
|
-
|
|
317
|
-
[[ "$p_prompts" != "." && -e "$full_path/$p_prompts" ]] && p_str="✓"
|
|
340
|
+
[[ "$p_instr" != "." && "$p_instr" == *.md && -f "$full_path/$p_instr" ]] && g_str="○"
|
|
341
|
+
[[ "$p_skills" != "." && -d "$full_path/$p_skills" ]] && s_str="○"
|
|
342
|
+
[[ "$p_agents" != "." && -d "$full_path/$p_agents" ]] && a_str="○"
|
|
343
|
+
[[ "$p_rules" != "." && -d "$full_path/$p_rules" ]] && r_str="○"
|
|
344
|
+
[[ "$p_cmds" != "." && -d "$full_path/$p_cmds" ]] && c_str="○"
|
|
318
345
|
fi
|
|
319
346
|
|
|
320
347
|
local status=""
|
|
321
348
|
local tool_color=""
|
|
349
|
+
|
|
322
350
|
if [[ -d "$full_path" ]]; then
|
|
323
351
|
status="${GREEN}Installed${NC}"
|
|
324
352
|
tool_color=$(get_tool_color "$p_name")
|
|
325
353
|
else
|
|
326
|
-
status="${
|
|
327
|
-
tool_color="${
|
|
354
|
+
status="${GRAY}Not found${NC}"
|
|
355
|
+
tool_color="${GRAY}"
|
|
356
|
+
|
|
357
|
+
# For not found tools, make all symbols gray too
|
|
358
|
+
if [[ "$g_str" == "○" ]]; then
|
|
359
|
+
g_str="${GRAY}○${NC}"
|
|
360
|
+
fi
|
|
361
|
+
if [[ "$s_str" == "○" ]]; then
|
|
362
|
+
s_str="${GRAY}○${NC}"
|
|
363
|
+
fi
|
|
364
|
+
if [[ "$a_str" == "○" ]]; then
|
|
365
|
+
a_str="${GRAY}○${NC}"
|
|
366
|
+
fi
|
|
367
|
+
if [[ "$r_str" == "○" ]]; then
|
|
368
|
+
r_str="${GRAY}○${NC}"
|
|
369
|
+
fi
|
|
370
|
+
if [[ "$c_str" == "○" ]]; then
|
|
371
|
+
c_str="${GRAY}○${NC}"
|
|
372
|
+
fi
|
|
328
373
|
fi
|
|
329
374
|
|
|
330
|
-
#
|
|
331
|
-
# Each category block matches the header's "%-10s " (11 characters total).
|
|
332
|
-
# We use indicator + 10 spaces = 11 characters.
|
|
333
|
-
printf " %b%-18s %-18s %-22s%b %s %s %s %s %s %b\n" \
|
|
334
|
-
"$tool_color" "$p_name" "$p_key" "$p_dir" "$NC" "$s_str" "$a_str" "$r_str" "$c_str" "$p_str" "$status"
|
|
375
|
+
echo -e " ${tool_color}${p_name:0:16}$(printf '%*s' $((16 - ${#p_name})) | tr ' ' ' ') ${p_key:0:12}$(printf '%*s' $((12 - ${#p_key})) | tr ' ' ' ') ${p_dir:0:19}$(printf '%*s' $((19 - ${#p_dir})) | tr ' ' ' ')${NC} ${g_str} ${r_str} ${c_str} ${s_str} ${a_str} ${status}"
|
|
335
376
|
done
|
|
336
377
|
echo ""
|
|
337
378
|
}
|
|
@@ -350,7 +391,7 @@ list_backups() {
|
|
|
350
391
|
return
|
|
351
392
|
fi
|
|
352
393
|
|
|
353
|
-
printf " ${BLUE}%-
|
|
394
|
+
printf " ${BLUE}%-18s %-10s %s${NC}\n" "Tool" "Type" "Backup File"
|
|
354
395
|
echo " -----------------------------------------------------------------------------------"
|
|
355
396
|
|
|
356
397
|
while read -r filename; do
|
|
@@ -359,8 +400,10 @@ list_backups() {
|
|
|
359
400
|
local type=""
|
|
360
401
|
|
|
361
402
|
# Improved regex to handle various path characters
|
|
362
|
-
|
|
363
|
-
|
|
403
|
+
# Format: backup_name.type.timestamp where backup_name has '/' replaced with '_'
|
|
404
|
+
if [[ "$filename" =~ ^(.+)\.([^.]+)\.([0-9]+)$ ]]; then
|
|
405
|
+
# Convert underscores back to slashes for display
|
|
406
|
+
tool_name="${BASH_REMATCH[1]//_//}"
|
|
364
407
|
type="${BASH_REMATCH[2]}"
|
|
365
408
|
else
|
|
366
409
|
tool_name="$filename"
|
|
@@ -370,21 +413,21 @@ list_backups() {
|
|
|
370
413
|
local tool_color=$(get_tool_color "${tool_name//_/ }")
|
|
371
414
|
# Print the backup filename as a path prefixed with ~/ using beautify_path
|
|
372
415
|
local backup_path=$(beautify_path "$BACKUP_DIR/$filename")
|
|
373
|
-
printf " %s%-
|
|
416
|
+
printf " %s%-18s %-10s %s%b\n" "$tool_color" "$tool_name" "$type" "$backup_path" "$NC"
|
|
374
417
|
done <<< "$backups_list"
|
|
375
418
|
echo ""
|
|
376
419
|
}
|
|
377
420
|
|
|
378
|
-
# Collect and merge
|
|
379
|
-
|
|
421
|
+
# Collect and merge AGENTS.md from all tools
|
|
422
|
+
collect_agents_md() {
|
|
380
423
|
local merged_content=""
|
|
381
424
|
local found_count=0
|
|
382
425
|
|
|
383
426
|
for pattern in "${KNOWN_PATTERNS[@]}"; do
|
|
384
|
-
IFS='|' read -r dir_name key tool_name
|
|
427
|
+
IFS='|' read -r dir_name key tool_name agents_md rules commands skills agents <<< "$pattern"
|
|
385
428
|
|
|
386
|
-
if [[ "$
|
|
387
|
-
local actual_path="$HOME/$dir_name/$
|
|
429
|
+
if [[ "$agents_md" != "." ]] && [[ "$agents_md" == *.md ]]; then
|
|
430
|
+
local actual_path="$HOME/$dir_name/$agents_md"
|
|
388
431
|
[[ -L "$actual_path" ]] && continue
|
|
389
432
|
|
|
390
433
|
if [[ -f "$actual_path" ]]; then
|
|
@@ -400,23 +443,23 @@ collect_instructions() {
|
|
|
400
443
|
fi
|
|
401
444
|
done
|
|
402
445
|
|
|
403
|
-
# Skip if
|
|
404
|
-
if [[ -f "$
|
|
405
|
-
log_ok "Preserved existing
|
|
446
|
+
# Skip if AGENTS.md already exists
|
|
447
|
+
if [[ -f "$AGENTS_MD" ]]; then
|
|
448
|
+
log_ok "Preserved existing AGENTS.md (skipped merge)"
|
|
406
449
|
return
|
|
407
450
|
fi
|
|
408
451
|
|
|
409
|
-
# Only create and merge if
|
|
452
|
+
# Only create and merge if AGENTS.md doesn't exist
|
|
410
453
|
if [[ $found_count -gt 0 ]]; then
|
|
411
|
-
echo -e "$merged_content" > "$
|
|
412
|
-
log_ok "Merged
|
|
454
|
+
echo -e "$merged_content" > "$AGENTS_MD"
|
|
455
|
+
log_ok "Merged AGENTS.md from $found_count tool(s) to $AGENTS_MD"
|
|
413
456
|
else
|
|
414
|
-
cat > "$
|
|
415
|
-
# AI Assistant
|
|
457
|
+
cat > "$AGENTS_MD" << 'EOF'
|
|
458
|
+
# AI Coding Assistant
|
|
416
459
|
|
|
417
|
-
<!-- Add your
|
|
460
|
+
<!-- Add your prompts here. They will sync to all AI tools. -->
|
|
418
461
|
EOF
|
|
419
|
-
log_ok "Created: $
|
|
462
|
+
log_ok "Created: $AGENTS_MD"
|
|
420
463
|
fi
|
|
421
464
|
}
|
|
422
465
|
|
|
@@ -425,14 +468,21 @@ update_tools() {
|
|
|
425
468
|
log_info "Scanning for AI tools..."
|
|
426
469
|
echo ""
|
|
427
470
|
|
|
428
|
-
mkdir -p "$SKILLS_DIR" "$AGENTS_DIR" "$RULES_DIR" "$COMMANDS_DIR" "$
|
|
471
|
+
mkdir -p "$SKILLS_DIR" "$AGENTS_DIR" "$RULES_DIR" "$COMMANDS_DIR" "$BACKUP_DIR"
|
|
429
472
|
|
|
430
|
-
|
|
473
|
+
# Check and rename global.md to AGENTS.md if it exists
|
|
474
|
+
if [[ -f "$CONFIG_DIR/global.md" ]]; then
|
|
475
|
+
log_info "Found legacy global.md file, renaming to AGENTS.md..."
|
|
476
|
+
mv "$CONFIG_DIR/global.md" "$CONFIG_DIR/AGENTS.md"
|
|
477
|
+
log_ok "Renamed global.md to AGENTS.md"
|
|
478
|
+
fi
|
|
479
|
+
|
|
480
|
+
collect_agents_md
|
|
431
481
|
|
|
432
482
|
local tool_count=0
|
|
433
483
|
|
|
434
484
|
for pattern in "${KNOWN_PATTERNS[@]}"; do
|
|
435
|
-
IFS='|' read -r dir_name key tool_name
|
|
485
|
+
IFS='|' read -r dir_name key tool_name agents_md rules commands skills agents <<< "$pattern"
|
|
436
486
|
local full_path="$HOME/$dir_name"
|
|
437
487
|
|
|
438
488
|
if [[ -d "$full_path" ]]; then
|
|
@@ -440,30 +490,28 @@ update_tools() {
|
|
|
440
490
|
echo -e "${GREEN}[OK]${NC} ${color}Found: $tool_name${NC}"
|
|
441
491
|
((tool_count++))
|
|
442
492
|
|
|
443
|
-
if [[ "$
|
|
444
|
-
local actual_path="$HOME/$dir_name/$
|
|
445
|
-
backup_item "$actual_path" "$dir_name" "
|
|
493
|
+
if [[ "$agents_md" != "." ]] && [[ "$agents_md" == *.md ]]; then
|
|
494
|
+
local actual_path="$HOME/$dir_name/$agents_md"
|
|
495
|
+
backup_item "$actual_path" "$dir_name" "AGENTS.md"
|
|
446
496
|
fi
|
|
447
497
|
|
|
448
|
-
for type_name in
|
|
498
|
+
for type_name in rules commands skills agents; do
|
|
449
499
|
local type_dir=""
|
|
450
500
|
case "$type_name" in
|
|
451
|
-
skills) type_dir="$skills" ;;
|
|
452
|
-
agents) type_dir="$agents" ;;
|
|
453
501
|
rules) type_dir="$rules" ;;
|
|
454
502
|
commands) type_dir="$commands" ;;
|
|
455
|
-
|
|
503
|
+
skills) type_dir="$skills" ;;
|
|
504
|
+
agents) type_dir="$agents" ;;
|
|
456
505
|
esac
|
|
457
506
|
if [[ "$type_dir" != "." ]]; then
|
|
458
507
|
local path="$HOME/$dir_name/$type_dir"
|
|
459
508
|
backup_item "$path" "$dir_name" "$type_name"
|
|
460
509
|
local target_dir=""
|
|
461
510
|
case "$type_name" in
|
|
462
|
-
skills) target_dir="$SKILLS_DIR" ;;
|
|
463
|
-
agents) target_dir="$AGENTS_DIR" ;;
|
|
464
511
|
rules) target_dir="$RULES_DIR" ;;
|
|
465
512
|
commands) target_dir="$COMMANDS_DIR" ;;
|
|
466
|
-
|
|
513
|
+
skills) target_dir="$SKILLS_DIR" ;;
|
|
514
|
+
agents) target_dir="$AGENTS_DIR" ;;
|
|
467
515
|
esac
|
|
468
516
|
merge_items "$path" "$target_dir" "$type_name" "$tool_name"
|
|
469
517
|
fi
|
|
@@ -480,63 +528,60 @@ update_tools() {
|
|
|
480
528
|
log_info "Creating symlinks..."
|
|
481
529
|
|
|
482
530
|
for pattern in "${KNOWN_PATTERNS[@]}"; do
|
|
483
|
-
IFS='|' read -r dir_name key tool_name
|
|
531
|
+
IFS='|' read -r dir_name key tool_name agents_md rules commands skills agents <<< "$pattern"
|
|
484
532
|
local full_path="$HOME/$dir_name"
|
|
485
533
|
|
|
486
534
|
if [[ -d "$full_path" ]]; then
|
|
487
535
|
local tool_color=$(get_tool_color "$tool_name")
|
|
488
|
-
if [[ "$
|
|
489
|
-
local target="$HOME/$dir_name/$
|
|
490
|
-
create_symlink "$
|
|
491
|
-
printf "
|
|
536
|
+
if [[ "$agents_md" != "." ]] && [[ "$agents_md" == *.md ]]; then
|
|
537
|
+
local target="$HOME/$dir_name/$agents_md"
|
|
538
|
+
create_symlink "$AGENTS_MD" "$target"
|
|
539
|
+
printf "${tool_color}%-40s -> %s${NC}\n" "$(beautify_path "$target")" "$(beautify_path "$AGENTS_MD")"
|
|
492
540
|
fi
|
|
493
541
|
|
|
494
|
-
for type_name in
|
|
542
|
+
for type_name in rules commands skills agents; do
|
|
495
543
|
local type_dir=""
|
|
496
544
|
local source_dir=""
|
|
497
545
|
case "$type_name" in
|
|
498
|
-
skills) type_dir="$skills"; source_dir="$SKILLS_DIR" ;;
|
|
499
|
-
agents) type_dir="$agents"; source_dir="$AGENTS_DIR" ;;
|
|
500
546
|
rules) type_dir="$rules"; source_dir="$RULES_DIR" ;;
|
|
501
547
|
commands) type_dir="$commands"; source_dir="$COMMANDS_DIR" ;;
|
|
502
|
-
|
|
548
|
+
skills) type_dir="$skills"; source_dir="$SKILLS_DIR" ;;
|
|
549
|
+
agents) type_dir="$agents"; source_dir="$AGENTS_DIR" ;;
|
|
503
550
|
esac
|
|
504
551
|
if [[ "$type_dir" != "." ]]; then
|
|
505
552
|
local target="$HOME/$dir_name/$type_dir"
|
|
506
553
|
create_symlink "$source_dir" "$target"
|
|
507
|
-
printf "
|
|
554
|
+
printf "${tool_color}%-40s -> %s${NC}\n" "$(beautify_path "$target")" "$(beautify_path "$source_dir")/"
|
|
508
555
|
fi
|
|
509
556
|
done
|
|
510
557
|
fi
|
|
511
558
|
done
|
|
512
559
|
|
|
513
560
|
echo ""
|
|
514
|
-
log_info "Done! Shared:
|
|
561
|
+
log_info "Done! Shared: rules=$(count_items "$RULES_DIR"), commands=$(count_items "$COMMANDS_DIR"), skills=$(count_items "$SKILLS_DIR"), agents=$(count_items "$AGENTS_DIR")"
|
|
515
562
|
}
|
|
516
563
|
|
|
517
564
|
# Unlink a single tool
|
|
518
565
|
unlink_single_tool() {
|
|
519
566
|
local tool_name="$1"
|
|
520
567
|
local dir_name="$2"
|
|
521
|
-
local
|
|
522
|
-
local
|
|
523
|
-
local
|
|
524
|
-
local
|
|
525
|
-
local
|
|
526
|
-
local
|
|
527
|
-
local silent="${9:-false}"
|
|
568
|
+
local agents_md="$3"
|
|
569
|
+
local rules="$4"
|
|
570
|
+
local commands="$5"
|
|
571
|
+
local skills="$6"
|
|
572
|
+
local agents="$7"
|
|
573
|
+
local silent="${8:-false}"
|
|
528
574
|
|
|
529
575
|
local backup_name=$(echo "$dir_name" | tr '/' '_')
|
|
530
576
|
local worked=false
|
|
531
577
|
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
local target="$HOME/$dir_name/$instr_file"
|
|
578
|
+
if [[ "$agents_md" != "." ]]; then
|
|
579
|
+
local target="$HOME/$dir_name/$agents_md"
|
|
535
580
|
if [[ -L "$target" ]]; then
|
|
536
581
|
local link_target=$(readlink "$target" 2>/dev/null || true)
|
|
537
582
|
if [[ "$link_target" == *".ai-global"* ]]; then
|
|
538
583
|
rm "$target"
|
|
539
|
-
local backup_file=$(ls -t "$BACKUP_DIR"/${backup_name}.
|
|
584
|
+
local backup_file=$(ls -t "$BACKUP_DIR"/${backup_name}.AGENTS.md.* 2>/dev/null | head -1)
|
|
540
585
|
[[ -f "$backup_file" ]] && cp "$backup_file" "$target"
|
|
541
586
|
worked=true
|
|
542
587
|
fi
|
|
@@ -544,14 +589,13 @@ unlink_single_tool() {
|
|
|
544
589
|
fi
|
|
545
590
|
|
|
546
591
|
# Check for components links
|
|
547
|
-
for type_name in
|
|
592
|
+
for type_name in rules commands skills agents; do
|
|
548
593
|
local type_dir=""
|
|
549
594
|
case "$type_name" in
|
|
550
|
-
skills) type_dir="$skills" ;;
|
|
551
|
-
agents) type_dir="$agents" ;;
|
|
552
595
|
rules) type_dir="$rules" ;;
|
|
553
596
|
commands) type_dir="$commands" ;;
|
|
554
|
-
|
|
597
|
+
skills) type_dir="$skills" ;;
|
|
598
|
+
agents) type_dir="$agents" ;;
|
|
555
599
|
esac
|
|
556
600
|
if [[ "$type_dir" != "." ]]; then
|
|
557
601
|
local target="$HOME/$dir_name/$type_dir"
|
|
@@ -595,8 +639,8 @@ unlink_all_tools() {
|
|
|
595
639
|
local unlinked_count=0
|
|
596
640
|
# Scan all known patterns to find and remove any symlinks
|
|
597
641
|
for pattern in "${KNOWN_PATTERNS[@]}"; do
|
|
598
|
-
IFS='|' read -r dir_name key tool_name
|
|
599
|
-
if unlink_single_tool "$tool_name" "$dir_name" "$
|
|
642
|
+
IFS='|' read -r dir_name key tool_name agents_md rules commands skills agents <<< "$pattern"
|
|
643
|
+
if unlink_single_tool "$tool_name" "$dir_name" "$agents_md" "$rules" "$commands" "$skills" "$agents"; then
|
|
600
644
|
((unlinked_count++))
|
|
601
645
|
fi
|
|
602
646
|
done
|
|
@@ -641,12 +685,12 @@ unlink_tool() {
|
|
|
641
685
|
local found=false
|
|
642
686
|
|
|
643
687
|
for pattern in "${KNOWN_PATTERNS[@]}"; do
|
|
644
|
-
IFS='|' read -r dir_name key tool_name
|
|
688
|
+
IFS='|' read -r dir_name key tool_name agents_md rules commands skills agents <<< "$pattern"
|
|
645
689
|
local tool_lower=$(echo "$tool_name" | tr '[:upper:]' '[:lower:]')
|
|
646
690
|
local query_lower=$(echo "$tool_query" | tr '[:upper:]' '[:lower:]')
|
|
647
691
|
|
|
648
692
|
if [[ "$tool_lower" == *"$query_lower"* ]] || [[ "$dir_name" == *"$query_lower"* ]] || [[ "$key" == "$query_lower" ]]; then
|
|
649
|
-
if ! unlink_single_tool "$tool_name" "$dir_name" "$
|
|
693
|
+
if ! unlink_single_tool "$tool_name" "$dir_name" "$agents_md" "$rules" "$commands" "$skills" "$agents"; then
|
|
650
694
|
log_info "$tool_name is not currently linked."
|
|
651
695
|
fi
|
|
652
696
|
found=true
|
|
@@ -832,51 +876,32 @@ download_from_github() {
|
|
|
832
876
|
fi
|
|
833
877
|
}
|
|
834
878
|
|
|
835
|
-
# Add
|
|
836
|
-
|
|
837
|
-
local
|
|
838
|
-
local input="$2"
|
|
879
|
+
# Add skill to skills directory
|
|
880
|
+
add_skill() {
|
|
881
|
+
local input="$1"
|
|
839
882
|
|
|
840
883
|
if [[ -z "$input" ]]; then
|
|
841
|
-
log_error "Usage: ai-global
|
|
884
|
+
log_error "Usage: ai-global skill <file|github-repo>"
|
|
842
885
|
echo ""
|
|
843
886
|
echo "Examples:"
|
|
844
|
-
echo " ai-global
|
|
845
|
-
echo " ai-global
|
|
846
|
-
echo " ai-global $type user/repo"
|
|
847
|
-
echo " ai-global $type https://github.com/user/repo"
|
|
848
|
-
echo " ai-global $type user/repo/path/to/file.md"
|
|
887
|
+
echo " ai-global skill user/repo"
|
|
888
|
+
echo " ai-global skill https://github.com/user/repo"
|
|
849
889
|
return 1
|
|
850
890
|
fi
|
|
851
891
|
|
|
852
|
-
local target_dir=""
|
|
853
|
-
case "$type" in
|
|
854
|
-
skill) target_dir="$SKILLS_DIR" ;;
|
|
855
|
-
agent) target_dir="$AGENTS_DIR" ;;
|
|
856
|
-
rule) target_dir="$RULES_DIR" ;;
|
|
857
|
-
command) target_dir="$COMMANDS_DIR" ;;
|
|
858
|
-
prompt) target_dir="$PROMPTS_DIR" ;;
|
|
859
|
-
esac
|
|
860
|
-
|
|
892
|
+
local target_dir="$SKILLS_DIR"
|
|
861
893
|
mkdir -p "$target_dir"
|
|
862
894
|
|
|
863
895
|
# Check if it's a GitHub reference
|
|
864
896
|
if is_github_ref "$input"; then
|
|
865
|
-
download_from_github "
|
|
866
|
-
elif [[ -f "$input" ]]; then
|
|
867
|
-
# Local file
|
|
868
|
-
local basename=$(basename "$input")
|
|
869
|
-
cp "$input" "$target_dir/$basename"
|
|
870
|
-
log_ok "Added $type: $target_dir/$basename"
|
|
897
|
+
download_from_github "skill" "$input" "$target_dir"
|
|
871
898
|
else
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
log_ok "Created $type: $target_file"
|
|
879
|
-
echo "Edit: $target_file"
|
|
899
|
+
log_error "Invalid input. Please provide a GitHub repository."
|
|
900
|
+
echo ""
|
|
901
|
+
echo "Examples:"
|
|
902
|
+
echo " ai-global skill user/repo"
|
|
903
|
+
echo " ai-global skill https://github.com/user/repo"
|
|
904
|
+
return 1
|
|
880
905
|
fi
|
|
881
906
|
}
|
|
882
907
|
|
|
@@ -941,6 +966,13 @@ upgrade() {
|
|
|
941
966
|
mv "$exec_temp" "$current_script"
|
|
942
967
|
|
|
943
968
|
log_ok "Upgraded to v$remote_version"
|
|
969
|
+
|
|
970
|
+
# Check and rename global.md to AGENTS.md after upgrade
|
|
971
|
+
if [[ -f "$CONFIG_DIR/global.md" ]]; then
|
|
972
|
+
log_info "Found legacy global.md file, renaming to AGENTS.md..."
|
|
973
|
+
mv "$CONFIG_DIR/global.md" "$CONFIG_DIR/AGENTS.md"
|
|
974
|
+
log_ok "Renamed global.md to AGENTS.md"
|
|
975
|
+
fi
|
|
944
976
|
else
|
|
945
977
|
rm -f "$exec_temp"
|
|
946
978
|
log_error "Failed to download update"
|
|
@@ -965,10 +997,6 @@ show_help() {
|
|
|
965
997
|
echo ""
|
|
966
998
|
echo -e "${BLUE}RESOURCE MANAGEMENT:${NC}"
|
|
967
999
|
echo -e " ${GREEN}skill <user/repo>${NC} Add a skill"
|
|
968
|
-
echo -e " ${GREEN}agent <source>${NC} Add an agent"
|
|
969
|
-
echo -e " ${GREEN}rule <source>${NC} Add a rule"
|
|
970
|
-
echo -e " ${GREEN}command <source>${NC} Add a command"
|
|
971
|
-
echo -e " ${GREEN}prompt <source>${NC} Add a prompt"
|
|
972
1000
|
echo ""
|
|
973
1001
|
echo -e "${BLUE}SYSTEM COMMANDS:${NC}"
|
|
974
1002
|
echo -e " ${GREEN}upgrade${NC} Upgrade ai-global to latest version"
|
|
@@ -991,11 +1019,11 @@ main() {
|
|
|
991
1019
|
help|--help|-h) show_help; exit 0 ;;
|
|
992
1020
|
list) list_supported; exit 0 ;;
|
|
993
1021
|
version|-v|--version) show_version; exit 0 ;;
|
|
994
|
-
skill|
|
|
1022
|
+
skill|unlink|status|backups|upgrade|uninstall)
|
|
995
1023
|
if [[ ! -d "$CONFIG_DIR" ]]; then
|
|
996
1024
|
log_info "No configuration found. Running initial scan..."
|
|
997
1025
|
update_tools
|
|
998
|
-
[[ "$cmd" == "skill" || "$cmd" == "
|
|
1026
|
+
[[ "$cmd" == "skill" || "$cmd" == "status" ]] || exit 0
|
|
999
1027
|
fi
|
|
1000
1028
|
;;
|
|
1001
1029
|
version|-v|--version|help|--help|-h) ;;
|
|
@@ -1008,11 +1036,7 @@ main() {
|
|
|
1008
1036
|
list) list_supported ;;
|
|
1009
1037
|
backups) list_backups ;;
|
|
1010
1038
|
unlink) unlink_tool "$2" ;;
|
|
1011
|
-
skill)
|
|
1012
|
-
agent) add_item "agent" "$2" ;;
|
|
1013
|
-
rule) add_item "rule" "$2" ;;
|
|
1014
|
-
command) add_item "command" "$2" ;;
|
|
1015
|
-
prompt) add_item "prompt" "$2" ;;
|
|
1039
|
+
skill) add_skill "$2" ;;
|
|
1016
1040
|
upgrade) upgrade ;;
|
|
1017
1041
|
uninstall) uninstall ;;
|
|
1018
1042
|
version|-v|--version) show_version ;;
|