ai-global 1.12.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 +220 -189
- 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,16 +443,23 @@ collect_instructions() {
|
|
|
400
443
|
fi
|
|
401
444
|
done
|
|
402
445
|
|
|
446
|
+
# Skip if AGENTS.md already exists
|
|
447
|
+
if [[ -f "$AGENTS_MD" ]]; then
|
|
448
|
+
log_ok "Preserved existing AGENTS.md (skipped merge)"
|
|
449
|
+
return
|
|
450
|
+
fi
|
|
451
|
+
|
|
452
|
+
# Only create and merge if AGENTS.md doesn't exist
|
|
403
453
|
if [[ $found_count -gt 0 ]]; then
|
|
404
|
-
echo -e "$merged_content" > "$
|
|
405
|
-
log_ok "Merged
|
|
454
|
+
echo -e "$merged_content" > "$AGENTS_MD"
|
|
455
|
+
log_ok "Merged AGENTS.md from $found_count tool(s) to $AGENTS_MD"
|
|
406
456
|
else
|
|
407
|
-
cat > "$
|
|
408
|
-
# AI Assistant
|
|
457
|
+
cat > "$AGENTS_MD" << 'EOF'
|
|
458
|
+
# AI Coding Assistant
|
|
409
459
|
|
|
410
|
-
<!-- Add your
|
|
460
|
+
<!-- Add your prompts here. They will sync to all AI tools. -->
|
|
411
461
|
EOF
|
|
412
|
-
log_ok "Created: $
|
|
462
|
+
log_ok "Created: $AGENTS_MD"
|
|
413
463
|
fi
|
|
414
464
|
}
|
|
415
465
|
|
|
@@ -418,14 +468,21 @@ update_tools() {
|
|
|
418
468
|
log_info "Scanning for AI tools..."
|
|
419
469
|
echo ""
|
|
420
470
|
|
|
421
|
-
mkdir -p "$SKILLS_DIR" "$AGENTS_DIR" "$RULES_DIR" "$COMMANDS_DIR" "$
|
|
471
|
+
mkdir -p "$SKILLS_DIR" "$AGENTS_DIR" "$RULES_DIR" "$COMMANDS_DIR" "$BACKUP_DIR"
|
|
472
|
+
|
|
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
|
|
422
479
|
|
|
423
|
-
|
|
480
|
+
collect_agents_md
|
|
424
481
|
|
|
425
482
|
local tool_count=0
|
|
426
483
|
|
|
427
484
|
for pattern in "${KNOWN_PATTERNS[@]}"; do
|
|
428
|
-
IFS='|' read -r dir_name key tool_name
|
|
485
|
+
IFS='|' read -r dir_name key tool_name agents_md rules commands skills agents <<< "$pattern"
|
|
429
486
|
local full_path="$HOME/$dir_name"
|
|
430
487
|
|
|
431
488
|
if [[ -d "$full_path" ]]; then
|
|
@@ -433,30 +490,28 @@ update_tools() {
|
|
|
433
490
|
echo -e "${GREEN}[OK]${NC} ${color}Found: $tool_name${NC}"
|
|
434
491
|
((tool_count++))
|
|
435
492
|
|
|
436
|
-
if [[ "$
|
|
437
|
-
local actual_path="$HOME/$dir_name/$
|
|
438
|
-
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"
|
|
439
496
|
fi
|
|
440
497
|
|
|
441
|
-
for type_name in
|
|
498
|
+
for type_name in rules commands skills agents; do
|
|
442
499
|
local type_dir=""
|
|
443
500
|
case "$type_name" in
|
|
444
|
-
skills) type_dir="$skills" ;;
|
|
445
|
-
agents) type_dir="$agents" ;;
|
|
446
501
|
rules) type_dir="$rules" ;;
|
|
447
502
|
commands) type_dir="$commands" ;;
|
|
448
|
-
|
|
503
|
+
skills) type_dir="$skills" ;;
|
|
504
|
+
agents) type_dir="$agents" ;;
|
|
449
505
|
esac
|
|
450
506
|
if [[ "$type_dir" != "." ]]; then
|
|
451
507
|
local path="$HOME/$dir_name/$type_dir"
|
|
452
508
|
backup_item "$path" "$dir_name" "$type_name"
|
|
453
509
|
local target_dir=""
|
|
454
510
|
case "$type_name" in
|
|
455
|
-
skills) target_dir="$SKILLS_DIR" ;;
|
|
456
|
-
agents) target_dir="$AGENTS_DIR" ;;
|
|
457
511
|
rules) target_dir="$RULES_DIR" ;;
|
|
458
512
|
commands) target_dir="$COMMANDS_DIR" ;;
|
|
459
|
-
|
|
513
|
+
skills) target_dir="$SKILLS_DIR" ;;
|
|
514
|
+
agents) target_dir="$AGENTS_DIR" ;;
|
|
460
515
|
esac
|
|
461
516
|
merge_items "$path" "$target_dir" "$type_name" "$tool_name"
|
|
462
517
|
fi
|
|
@@ -473,63 +528,60 @@ update_tools() {
|
|
|
473
528
|
log_info "Creating symlinks..."
|
|
474
529
|
|
|
475
530
|
for pattern in "${KNOWN_PATTERNS[@]}"; do
|
|
476
|
-
IFS='|' read -r dir_name key tool_name
|
|
531
|
+
IFS='|' read -r dir_name key tool_name agents_md rules commands skills agents <<< "$pattern"
|
|
477
532
|
local full_path="$HOME/$dir_name"
|
|
478
533
|
|
|
479
534
|
if [[ -d "$full_path" ]]; then
|
|
480
535
|
local tool_color=$(get_tool_color "$tool_name")
|
|
481
|
-
if [[ "$
|
|
482
|
-
local target="$HOME/$dir_name/$
|
|
483
|
-
create_symlink "$
|
|
484
|
-
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")"
|
|
485
540
|
fi
|
|
486
541
|
|
|
487
|
-
for type_name in
|
|
542
|
+
for type_name in rules commands skills agents; do
|
|
488
543
|
local type_dir=""
|
|
489
544
|
local source_dir=""
|
|
490
545
|
case "$type_name" in
|
|
491
|
-
skills) type_dir="$skills"; source_dir="$SKILLS_DIR" ;;
|
|
492
|
-
agents) type_dir="$agents"; source_dir="$AGENTS_DIR" ;;
|
|
493
546
|
rules) type_dir="$rules"; source_dir="$RULES_DIR" ;;
|
|
494
547
|
commands) type_dir="$commands"; source_dir="$COMMANDS_DIR" ;;
|
|
495
|
-
|
|
548
|
+
skills) type_dir="$skills"; source_dir="$SKILLS_DIR" ;;
|
|
549
|
+
agents) type_dir="$agents"; source_dir="$AGENTS_DIR" ;;
|
|
496
550
|
esac
|
|
497
551
|
if [[ "$type_dir" != "." ]]; then
|
|
498
552
|
local target="$HOME/$dir_name/$type_dir"
|
|
499
553
|
create_symlink "$source_dir" "$target"
|
|
500
|
-
printf "
|
|
554
|
+
printf "${tool_color}%-40s -> %s${NC}\n" "$(beautify_path "$target")" "$(beautify_path "$source_dir")/"
|
|
501
555
|
fi
|
|
502
556
|
done
|
|
503
557
|
fi
|
|
504
558
|
done
|
|
505
559
|
|
|
506
560
|
echo ""
|
|
507
|
-
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")"
|
|
508
562
|
}
|
|
509
563
|
|
|
510
564
|
# Unlink a single tool
|
|
511
565
|
unlink_single_tool() {
|
|
512
566
|
local tool_name="$1"
|
|
513
567
|
local dir_name="$2"
|
|
514
|
-
local
|
|
515
|
-
local
|
|
516
|
-
local
|
|
517
|
-
local
|
|
518
|
-
local
|
|
519
|
-
local
|
|
520
|
-
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}"
|
|
521
574
|
|
|
522
575
|
local backup_name=$(echo "$dir_name" | tr '/' '_')
|
|
523
576
|
local worked=false
|
|
524
577
|
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
local target="$HOME/$dir_name/$instr_file"
|
|
578
|
+
if [[ "$agents_md" != "." ]]; then
|
|
579
|
+
local target="$HOME/$dir_name/$agents_md"
|
|
528
580
|
if [[ -L "$target" ]]; then
|
|
529
581
|
local link_target=$(readlink "$target" 2>/dev/null || true)
|
|
530
582
|
if [[ "$link_target" == *".ai-global"* ]]; then
|
|
531
583
|
rm "$target"
|
|
532
|
-
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)
|
|
533
585
|
[[ -f "$backup_file" ]] && cp "$backup_file" "$target"
|
|
534
586
|
worked=true
|
|
535
587
|
fi
|
|
@@ -537,14 +589,13 @@ unlink_single_tool() {
|
|
|
537
589
|
fi
|
|
538
590
|
|
|
539
591
|
# Check for components links
|
|
540
|
-
for type_name in
|
|
592
|
+
for type_name in rules commands skills agents; do
|
|
541
593
|
local type_dir=""
|
|
542
594
|
case "$type_name" in
|
|
543
|
-
skills) type_dir="$skills" ;;
|
|
544
|
-
agents) type_dir="$agents" ;;
|
|
545
595
|
rules) type_dir="$rules" ;;
|
|
546
596
|
commands) type_dir="$commands" ;;
|
|
547
|
-
|
|
597
|
+
skills) type_dir="$skills" ;;
|
|
598
|
+
agents) type_dir="$agents" ;;
|
|
548
599
|
esac
|
|
549
600
|
if [[ "$type_dir" != "." ]]; then
|
|
550
601
|
local target="$HOME/$dir_name/$type_dir"
|
|
@@ -588,8 +639,8 @@ unlink_all_tools() {
|
|
|
588
639
|
local unlinked_count=0
|
|
589
640
|
# Scan all known patterns to find and remove any symlinks
|
|
590
641
|
for pattern in "${KNOWN_PATTERNS[@]}"; do
|
|
591
|
-
IFS='|' read -r dir_name key tool_name
|
|
592
|
-
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
|
|
593
644
|
((unlinked_count++))
|
|
594
645
|
fi
|
|
595
646
|
done
|
|
@@ -634,12 +685,12 @@ unlink_tool() {
|
|
|
634
685
|
local found=false
|
|
635
686
|
|
|
636
687
|
for pattern in "${KNOWN_PATTERNS[@]}"; do
|
|
637
|
-
IFS='|' read -r dir_name key tool_name
|
|
688
|
+
IFS='|' read -r dir_name key tool_name agents_md rules commands skills agents <<< "$pattern"
|
|
638
689
|
local tool_lower=$(echo "$tool_name" | tr '[:upper:]' '[:lower:]')
|
|
639
690
|
local query_lower=$(echo "$tool_query" | tr '[:upper:]' '[:lower:]')
|
|
640
691
|
|
|
641
692
|
if [[ "$tool_lower" == *"$query_lower"* ]] || [[ "$dir_name" == *"$query_lower"* ]] || [[ "$key" == "$query_lower" ]]; then
|
|
642
|
-
if ! unlink_single_tool "$tool_name" "$dir_name" "$
|
|
693
|
+
if ! unlink_single_tool "$tool_name" "$dir_name" "$agents_md" "$rules" "$commands" "$skills" "$agents"; then
|
|
643
694
|
log_info "$tool_name is not currently linked."
|
|
644
695
|
fi
|
|
645
696
|
found=true
|
|
@@ -825,51 +876,32 @@ download_from_github() {
|
|
|
825
876
|
fi
|
|
826
877
|
}
|
|
827
878
|
|
|
828
|
-
# Add
|
|
829
|
-
|
|
830
|
-
local
|
|
831
|
-
local input="$2"
|
|
879
|
+
# Add skill to skills directory
|
|
880
|
+
add_skill() {
|
|
881
|
+
local input="$1"
|
|
832
882
|
|
|
833
883
|
if [[ -z "$input" ]]; then
|
|
834
|
-
log_error "Usage: ai-global
|
|
884
|
+
log_error "Usage: ai-global skill <file|github-repo>"
|
|
835
885
|
echo ""
|
|
836
886
|
echo "Examples:"
|
|
837
|
-
echo " ai-global
|
|
838
|
-
echo " ai-global
|
|
839
|
-
echo " ai-global $type user/repo"
|
|
840
|
-
echo " ai-global $type https://github.com/user/repo"
|
|
841
|
-
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"
|
|
842
889
|
return 1
|
|
843
890
|
fi
|
|
844
891
|
|
|
845
|
-
local target_dir=""
|
|
846
|
-
case "$type" in
|
|
847
|
-
skill) target_dir="$SKILLS_DIR" ;;
|
|
848
|
-
agent) target_dir="$AGENTS_DIR" ;;
|
|
849
|
-
rule) target_dir="$RULES_DIR" ;;
|
|
850
|
-
command) target_dir="$COMMANDS_DIR" ;;
|
|
851
|
-
prompt) target_dir="$PROMPTS_DIR" ;;
|
|
852
|
-
esac
|
|
853
|
-
|
|
892
|
+
local target_dir="$SKILLS_DIR"
|
|
854
893
|
mkdir -p "$target_dir"
|
|
855
894
|
|
|
856
895
|
# Check if it's a GitHub reference
|
|
857
896
|
if is_github_ref "$input"; then
|
|
858
|
-
download_from_github "
|
|
859
|
-
elif [[ -f "$input" ]]; then
|
|
860
|
-
# Local file
|
|
861
|
-
local basename=$(basename "$input")
|
|
862
|
-
cp "$input" "$target_dir/$basename"
|
|
863
|
-
log_ok "Added $type: $target_dir/$basename"
|
|
897
|
+
download_from_github "skill" "$input" "$target_dir"
|
|
864
898
|
else
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
log_ok "Created $type: $target_file"
|
|
872
|
-
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
|
|
873
905
|
fi
|
|
874
906
|
}
|
|
875
907
|
|
|
@@ -934,6 +966,13 @@ upgrade() {
|
|
|
934
966
|
mv "$exec_temp" "$current_script"
|
|
935
967
|
|
|
936
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
|
|
937
976
|
else
|
|
938
977
|
rm -f "$exec_temp"
|
|
939
978
|
log_error "Failed to download update"
|
|
@@ -958,10 +997,6 @@ show_help() {
|
|
|
958
997
|
echo ""
|
|
959
998
|
echo -e "${BLUE}RESOURCE MANAGEMENT:${NC}"
|
|
960
999
|
echo -e " ${GREEN}skill <user/repo>${NC} Add a skill"
|
|
961
|
-
echo -e " ${GREEN}agent <source>${NC} Add an agent"
|
|
962
|
-
echo -e " ${GREEN}rule <source>${NC} Add a rule"
|
|
963
|
-
echo -e " ${GREEN}command <source>${NC} Add a command"
|
|
964
|
-
echo -e " ${GREEN}prompt <source>${NC} Add a prompt"
|
|
965
1000
|
echo ""
|
|
966
1001
|
echo -e "${BLUE}SYSTEM COMMANDS:${NC}"
|
|
967
1002
|
echo -e " ${GREEN}upgrade${NC} Upgrade ai-global to latest version"
|
|
@@ -984,11 +1019,11 @@ main() {
|
|
|
984
1019
|
help|--help|-h) show_help; exit 0 ;;
|
|
985
1020
|
list) list_supported; exit 0 ;;
|
|
986
1021
|
version|-v|--version) show_version; exit 0 ;;
|
|
987
|
-
skill|
|
|
1022
|
+
skill|unlink|status|backups|upgrade|uninstall)
|
|
988
1023
|
if [[ ! -d "$CONFIG_DIR" ]]; then
|
|
989
1024
|
log_info "No configuration found. Running initial scan..."
|
|
990
1025
|
update_tools
|
|
991
|
-
[[ "$cmd" == "skill" || "$cmd" == "
|
|
1026
|
+
[[ "$cmd" == "skill" || "$cmd" == "status" ]] || exit 0
|
|
992
1027
|
fi
|
|
993
1028
|
;;
|
|
994
1029
|
version|-v|--version|help|--help|-h) ;;
|
|
@@ -1001,11 +1036,7 @@ main() {
|
|
|
1001
1036
|
list) list_supported ;;
|
|
1002
1037
|
backups) list_backups ;;
|
|
1003
1038
|
unlink) unlink_tool "$2" ;;
|
|
1004
|
-
skill)
|
|
1005
|
-
agent) add_item "agent" "$2" ;;
|
|
1006
|
-
rule) add_item "rule" "$2" ;;
|
|
1007
|
-
command) add_item "command" "$2" ;;
|
|
1008
|
-
prompt) add_item "prompt" "$2" ;;
|
|
1039
|
+
skill) add_skill "$2" ;;
|
|
1009
1040
|
upgrade) upgrade ;;
|
|
1010
1041
|
uninstall) uninstall ;;
|
|
1011
1042
|
version|-v|--version) show_version ;;
|