cliskill 1.0.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/LICENSE +21 -0
- package/README.md +470 -0
- package/dist/bootstrap/cli.d.ts +21 -0
- package/dist/bootstrap/cli.js +9 -0
- package/dist/bootstrap/cli.js.map +1 -0
- package/dist/chunk-AJENHWD3.js +103 -0
- package/dist/chunk-AJENHWD3.js.map +1 -0
- package/dist/chunk-ULZHJVWD.js +9945 -0
- package/dist/chunk-ULZHJVWD.js.map +1 -0
- package/dist/index.d.ts +2018 -0
- package/dist/index.js +1658 -0
- package/dist/index.js.map +1 -0
- package/dist/paths-OODUHG6V.js +39 -0
- package/dist/paths-OODUHG6V.js.map +1 -0
- package/package.json +86 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,470 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
# π cliskill
|
|
4
|
+
|
|
5
|
+
### Universal Terminal AI CLI
|
|
6
|
+
|
|
7
|
+
**ΠΠ΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠΉ AI-Π°ΡΡΠΈΡΡΠ΅Π½Ρ Π΄Π»Ρ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π° Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ Π»ΡΠ±ΡΡ
LLM ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠΎΠ²**
|
|
8
|
+
|
|
9
|
+
[]()
|
|
10
|
+
[](LICENSE)
|
|
11
|
+
[]()
|
|
12
|
+
[]()
|
|
13
|
+
|
|
14
|
+
[ΠΠ΅ΡΠΏΠ»Π°ΡΠ½ΡΠΉ](#) Β· [ΠΠ΅Π· ΠΏΠΎΠ΄ΠΏΠΈΡΠΎΠΊ](#) Β· [ΠΠ΅Π· vendor lock-in](#) Β· [Π£Π½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠΉ](#)
|
|
15
|
+
|
|
16
|
+
</div>
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## π Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅
|
|
21
|
+
|
|
22
|
+
- [Π ΠΏΡΠΎΠ΅ΠΊΡΠ΅](#-ΠΎ-ΠΏΡΠΎΠ΅ΠΊΡΠ΅)
|
|
23
|
+
- [ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ](#-Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ)
|
|
24
|
+
- [Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°](#-ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ°)
|
|
25
|
+
- [ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅](#-ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅)
|
|
26
|
+
- [ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ](#-ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ)
|
|
27
|
+
- [ΠΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ°](#-Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ°)
|
|
28
|
+
- [Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ°](#-ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°)
|
|
29
|
+
- [Π’Π΅Ρ
Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ](#-ΡΠ΅Ρ
Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ)
|
|
30
|
+
- [ΠΠΈΡΠ΅Π½Π·ΠΈΡ](#-Π»ΠΈΡΠ΅Π½Π·ΠΈΡ)
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## π§ Π ΠΏΡΠΎΠ΅ΠΊΡΠ΅
|
|
35
|
+
|
|
36
|
+
**cliskill** β ΡΡΠΎ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠΉ AI-Π°ΡΡΠΈΡΡΠ΅Π½Ρ Π΄Π»Ρ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ **Π»ΡΠ±ΡΠΌ** LLM ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠΎΠΌ ΡΠ΅ΡΠ΅Π· ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ `/chat/completions` API. ΠΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΈ ΠΊ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΌΡ Π²Π΅Π½Π΄ΠΎΡΡ: ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΠΎΠ±Π»Π°ΡΠ½ΡΠ΅ API ΠΈΠ»ΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΡΠ΅ΡΠ²Π΅ΡΡ.
|
|
37
|
+
|
|
38
|
+
### ΠΠ»ΡΡΠ΅Π²ΡΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ
|
|
39
|
+
|
|
40
|
+
| ΠΡΠΈΠ½ΡΠΈΠΏ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
|
|
41
|
+
|---------|----------|
|
|
42
|
+
| π **ΠΠ΅ΡΠΏΠ»Π°ΡΠ½ΡΠΉ** | ΠΠΈΠΊΠ°ΠΊΠΈΡ
ΠΏΠΎΠ΄ΠΏΠΈΡΠΎΠΊ ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ ΠΏΠΎ ΡΡΠ½ΠΊΡΠΈΡΠΌ |
|
|
43
|
+
| π **ΠΡΠΊΡΡΡΡΠΉ** | ΠΠΎΠ»Π½ΡΠΉ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄, MIT Π»ΠΈΡΠ΅Π½Π·ΠΈΡ |
|
|
44
|
+
| π **Π£Π½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠΉ** | ΠΡΠ±ΠΎΠΉ `/chat/completions` ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΠΉ API |
|
|
45
|
+
| π« **ΠΠ΅Π· vendor lock-in** | ΠΠ΅Π³ΠΊΠΎ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΠΉΡΠ΅ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠ°ΠΌΠΈ |
|
|
46
|
+
| π€ **ΠΠ³Π΅Π½ΡΡΠΊΠΈΠΉ** | 15 ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ², ΠΌΡΠ»ΡΡΠΈ-Π°Π³Π΅Π½ΡΠ½Π°Ρ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΈΡ |
|
|
47
|
+
| π‘οΈ **ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΉ** | ΠΠ°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΡΡΠΎΠ²Π½ΠΈ Π΄ΠΎΠ²Π΅ΡΠΈΡ ΠΈ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ |
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## β¨ ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ
|
|
52
|
+
|
|
53
|
+
### π ΠΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΡ ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ
|
|
54
|
+
|
|
55
|
+
- **Π£Π½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠΎΠ²** β ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π»ΡΠ±ΠΎΠ³ΠΎ `/chat/completions` API
|
|
56
|
+
- **ΠΠ»ΠΈΠ°ΡΡ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ** β ΠΏΡΠ΅Π΄ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠ΅ Π°Π»ΠΈΠ°ΡΡ: `smart`, `fast`, `balanced`, `reasoning`, `code`
|
|
57
|
+
- **1M ΡΠΎΠΊΠ΅Π½ΠΎΠ² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°** β ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠΉ Π»ΠΈΠΌΠΈΡ
|
|
58
|
+
- **ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ fallback** β ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠ΅Π·Π΅ΡΠ²Π½ΡΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΏΡΠΈ ΠΎΡΠΈΠ±ΠΊΠ°Ρ
|
|
59
|
+
- **Rate Limit Handler** β ΠΊΠΎΡΡΠ΅ΠΊΡΠ½Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π»ΠΈΠΌΠΈΡΠΎΠ² Π±Π΅Π· upsell
|
|
60
|
+
|
|
61
|
+
### π§ ΠΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ (15 ΡΡΡΠΊ)
|
|
62
|
+
|
|
63
|
+
| ΠΠ½ΡΡΡΡΠΌΠ΅Π½Ρ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
|
|
64
|
+
|------------|----------|
|
|
65
|
+
| π₯οΈ **Bash Tool** | ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ shell ΠΊΠΎΠΌΠ°Π½Π΄ Ρ ΠΈΠ½ΡΠΏΠ΅ΠΊΡΠΈΠ΅ΠΉ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ |
|
|
66
|
+
| π **File Read** | Π§ΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ |
|
|
67
|
+
| βοΈ **File Write** | Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² |
|
|
68
|
+
| π **File Edit** | Π’ΠΎΡΠ΅ΡΠ½ΠΎΠ΅ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² (search/replace) |
|
|
69
|
+
| π **Glob** | ΠΠΎΠΈΡΠΊ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΏΠΎ ΠΏΠ°ΡΡΠ΅ΡΠ½Π°ΠΌ |
|
|
70
|
+
| π **Grep** | ΠΠΎΠΈΡΠΊ ΡΠ΅ΠΊΡΡΠ° Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ regex |
|
|
71
|
+
| π **Web Search** | ΠΠ΅Π±-ΠΏΠΎΠΈΡΠΊ ΡΠ΅ΡΠ΅Π· ΠΏΠΎΠΈΡΠΊΠΎΠ²ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ |
|
|
72
|
+
| π **Web Fetch** | ΠΠ°Π³ΡΡΠ·ΠΊΠ° ΠΈ ΠΏΠ°ΡΡΠΈΠ½Π³ Π²Π΅Π±-ΡΡΡΠ°Π½ΠΈΡ |
|
|
73
|
+
| π€ **Agent Tool** | ΠΠΎΡΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡΡΠ±-Π°Π³Π΅Π½ΡΠΎΠ² Π΄Π»Ρ ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ |
|
|
74
|
+
| π‘ **LSP Tool** | ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ Language Server Protocol |
|
|
75
|
+
| β
**Todo Write** | Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΏΠΈΡΠΊΠ°ΠΌΠΈ Π·Π°Π΄Π°Ρ |
|
|
76
|
+
| π±οΈ **Computer Use** | Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΌΡΡΡΡ ΠΈ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠΎΠΉ |
|
|
77
|
+
| π **Remote Tool** | ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ Π½Π° ΡΠ΄Π°Π»ΡΠ½Π½ΡΡ
ΡΠ΅ΡΠ²Π΅ΡΠ°Ρ
ΡΠ΅ΡΠ΅Π· SSH |
|
|
78
|
+
| π³ **Worktree Tool** | Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ git worktree Π΄Π»Ρ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ |
|
|
79
|
+
| π **Plan Mode** | ΠΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Ρ 3 ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΠΌΠΈ Π°Π³Π΅Π½ΡΠ°ΠΌΠΈ |
|
|
80
|
+
|
|
81
|
+
### π€ ΠΠ³Π΅Π½ΡΡΠΊΠ°Ρ ΡΠΈΡΡΠ΅ΠΌΠ°
|
|
82
|
+
|
|
83
|
+
- **Auto Mode** β 3 ΡΡΠΎΠ²Π½Ρ Π°Π²ΡΠΎΠ½ΠΎΠΌΠ½ΠΎΡΡΠΈ:
|
|
84
|
+
- `full-auto` β ΠΏΠΎΠ»Π½Π°Ρ Π°Π²ΡΠΎΠ½ΠΎΠΌΠΈΡ, Π²ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π±Π΅Π· ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ
|
|
85
|
+
- `safe-auto` β Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ
|
|
86
|
+
- `ask` β ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ)
|
|
87
|
+
- **Fast Mode** β ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΡΠΊΠΎΡΠΎΡΡΠΈ ΠΎΡΠ²Π΅ΡΠΎΠ²
|
|
88
|
+
- **Multi-Agent Plan Mode V2** β 3 ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ
Π°Π³Π΅Π½ΡΠ° Π΄Π»Ρ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ
|
|
89
|
+
- **Swarm Coordinator** β ΠΌΡΠ»ΡΡΠΈ-Π°Π³Π΅Π½ΡΠ½Π°Ρ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΈΡ ΡΠ»ΠΎΠΆΠ½ΡΡ
Π·Π°Π΄Π°Ρ
|
|
90
|
+
- **Task System** β ΡΠΎΠ½ΠΎΠ²ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΡΠ°ΡΡΡΠ°
|
|
91
|
+
|
|
92
|
+
### ποΈ ΠΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ°
|
|
93
|
+
|
|
94
|
+
| Π‘ΠΈΡΡΠ΅ΠΌΠ° | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
|
|
95
|
+
|---------|----------|
|
|
96
|
+
| π¨ **Theme System** | 6 ΡΠ΅ΠΌ ΠΎΡΠΎΡΠΌΠ»Π΅Π½ΠΈΡ, Π²ΠΊΠ»ΡΡΠ°Ρ daltonized Π΄Π»Ρ Π΄Π°Π»ΡΡΠΎΠ½ΠΈΠΊΠΎΠ² |
|
|
97
|
+
| β° **Cron Scheduler** | ΠΡΠ»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΠΈ ΠΏΠΎΠ²ΡΠΎΡΡΡΡΠΈΠ΅ΡΡ Π·Π°Π΄Π°ΡΠΈ ΠΏΠΎ ΡΠ°ΡΠΏΠΈΡΠ°Π½ΠΈΡ |
|
|
98
|
+
| β¨οΈ **Keybinding System** | 10 ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΎΠ², 50+ Ρ
ΠΎΡΠΊΠ΅Π΅Π², ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠ΅ |
|
|
99
|
+
| π©Ί **Doctor Diagnostic** | ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠ° ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ |
|
|
100
|
+
| πͺ **Hooks System** | Pre/post hooks Π΄Π»Ρ ΠΊΠ°ΡΡΠΎΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ |
|
|
101
|
+
| π‘ **MCP Client** | Model Context Protocol Π΄Π»Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ |
|
|
102
|
+
| π **Skills System** | Markdown-Π½Π°Π²ΡΠΊΠΈ Π΄Π»Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ |
|
|
103
|
+
| π§ **Memory** | Basic + Enhanced ΠΏΠ°ΠΌΡΡΡ Ρ TF-IDF ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΡΠΈΠ΅ΠΉ |
|
|
104
|
+
|
|
105
|
+
### π οΈ Π£ΡΠΈΠ»ΠΈΡΡ
|
|
106
|
+
|
|
107
|
+
- π¬ **Asciicast Recording** β Π·Π°ΠΏΠΈΡΡ ΡΠ΅ΡΡΠΈΠΉ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ asciicast v2
|
|
108
|
+
- π¨ **ANSIβSVG** β ΡΠ΅Π½Π΄Π΄Π΅ΡΠΈΠ½Π³ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ²ΠΎΠ΄Π° Π² SVG
|
|
109
|
+
- π **Conversation Recovery** β ΡΠΌΠ½ΠΎΠ΅ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΡΠΈΠΉ Ρ ΡΠ΅ΠΌΠΎΠ½ΡΠΎΠΌ
|
|
110
|
+
- π **Deep Links** β ΠΏΡΠΎΡΠΎΠΊΠΎΠ» `cliskill://` Π΄Π»Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Ρ ΠΠ‘
|
|
111
|
+
- π§Ή **Background Housekeeping** β Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΎΡΠΈΡΡΠΊΠ° ΠΈ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΠ΅
|
|
112
|
+
- π **Tool Pool** β ΡΠ»ΠΈΡΠ½ΠΈΠ΅ ΠΈ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΡ Π½Π°Π±ΠΎΡΠΎΠ² ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ²
|
|
113
|
+
- π° **Cost Tracker** β ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΡΡ
ΠΎΠ΄ΠΎΠ² Π½Π° API
|
|
114
|
+
- π **Token Estimation** β ΠΎΡΠ΅Π½ΠΊΠ° ΡΠΎΠΊΠ΅Π½ΠΎΠ² ΠΏΠ΅ΡΠ΅Π΄ ΠΎΡΠΏΡΠ°Π²ΠΊΠΎΠΉ
|
|
115
|
+
- π¦ **Context Compaction** β Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΆΠ°ΡΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## π¦ Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°
|
|
120
|
+
|
|
121
|
+
### ΠΠ· ΠΈΡΡ
ΠΎΠ΄Π½ΠΈΠΊΠΎΠ²
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
# ΠΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ
|
|
125
|
+
git clone <repo-url> cliskill
|
|
126
|
+
cd cliskill
|
|
127
|
+
|
|
128
|
+
# Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ
|
|
129
|
+
npm install
|
|
130
|
+
|
|
131
|
+
# Π‘Π±ΠΎΡΠΊΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ°
|
|
132
|
+
npm run build
|
|
133
|
+
|
|
134
|
+
# ΠΠ»ΠΎΠ±Π°Π»ΡΠ½Π°Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° (ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ)
|
|
135
|
+
npm link
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### Π’ΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ
|
|
139
|
+
|
|
140
|
+
- **Node.js** >= 20.0.0
|
|
141
|
+
- **npm** >= 9.0.0
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## π ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅
|
|
146
|
+
|
|
147
|
+
### ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
# π― ΠΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΠΉ REPL
|
|
151
|
+
cliskill
|
|
152
|
+
|
|
153
|
+
# π¬ ΠΠ΄Π½ΠΎΡΠ°Π·ΠΎΠ²ΡΠΉ Π·Π°ΠΏΡΠΎΡ
|
|
154
|
+
cliskill --prompt "ΠΈΡΠΏΡΠ°Π²Ρ ΡΠ΅ΡΡΡ"
|
|
155
|
+
|
|
156
|
+
# π§ ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π°Π»ΠΈΠ°Ρ ΠΌΠΎΠ΄Π΅Π»ΠΈ
|
|
157
|
+
cliskill --model smart
|
|
158
|
+
cliskill --model fast
|
|
159
|
+
cliskill --model balanced
|
|
160
|
+
|
|
161
|
+
# π€ Auto mode
|
|
162
|
+
cliskill --auto # safe-auto (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ)
|
|
163
|
+
cliskill --auto-mode full-auto # ΠΏΠΎΠ»Π½Π°Ρ Π°Π²ΡΠΎΠ½ΠΎΠΌΠΈΡ
|
|
164
|
+
cliskill --auto-mode safe-auto # Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½Π°Ρ Π°Π²ΡΠΎΠ½ΠΎΠΌΠΈΡ
|
|
165
|
+
cliskill --auto-mode ask # Ρ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ
|
|
166
|
+
|
|
167
|
+
# β‘ Fast mode
|
|
168
|
+
cliskill --fast
|
|
169
|
+
|
|
170
|
+
# π ΠΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΡΠΈΠΉ
|
|
171
|
+
cliskill --resume # ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΡΠ΅ΡΡΠΈΡ
|
|
172
|
+
cliskill --resume abc12345 # ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½Π°Ρ ΡΠ΅ΡΡΠΈΡ
|
|
173
|
+
|
|
174
|
+
# π¬ ΠΠ°ΠΏΠΈΡΡ ΡΠ΅ΡΡΠΈΠΈ
|
|
175
|
+
cliskill --record
|
|
176
|
+
cliskill --record --record-output ./my-session.cast
|
|
177
|
+
|
|
178
|
+
# π¨ ΠΡΠ±ΠΎΡ ΡΠ΅ΠΌΡ
|
|
179
|
+
cliskill --theme dark
|
|
180
|
+
cliskill --theme light
|
|
181
|
+
cliskill --theme dark-daltonized
|
|
182
|
+
cliskill --theme light-daltonized
|
|
183
|
+
cliskill --theme dark-ansi
|
|
184
|
+
cliskill --theme light-ansi
|
|
185
|
+
cliskill --theme auto
|
|
186
|
+
|
|
187
|
+
# π₯οΈ React TUI (Ink)
|
|
188
|
+
cliskill --tui
|
|
189
|
+
|
|
190
|
+
# π Π£Π΄Π°Π»ΡΠ½Π½ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ
|
|
191
|
+
cliskill --remote user@host
|
|
192
|
+
|
|
193
|
+
# π ΠΠ΅ΡΠ±ΠΎΡΠ·Π½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ
|
|
194
|
+
cliskill --verbose
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
### ΠΠΎΠ΄ΠΊΠΎΠΌΠ°Π½Π΄Ρ
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
# π©Ί ΠΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠ° ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ
|
|
201
|
+
cliskill doctor
|
|
202
|
+
|
|
203
|
+
# π Π‘ΠΏΠΈΡΠΎΠΊ ΡΠ΅ΡΡΠΈΠΉ
|
|
204
|
+
cliskill sessions
|
|
205
|
+
|
|
206
|
+
# β° Cron Π·Π°Π΄Π°ΡΠΈ
|
|
207
|
+
cliskill cron list # ΡΠΏΠΈΡΠΎΠΊ Π·Π°Π΄Π°Ρ
|
|
208
|
+
cliskill cron add "0 9 * * 1-5" "Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΠ΅ΡΡΡ" # Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π·Π°Π΄Π°ΡΡ
|
|
209
|
+
cliskill cron add "@daily" "ΠΎΡΡΡΡ" --one-shot # ΠΎΠ΄Π½ΠΎΡΠ°Π·ΠΎΠ²Π°Ρ Π·Π°Π΄Π°ΡΠ°
|
|
210
|
+
cliskill cron remove <id> # ΡΠ΄Π°Π»ΠΈΡΡ Π·Π°Π΄Π°ΡΡ
|
|
211
|
+
cliskill cron run <id> # Π·Π°ΠΏΡΡΡΠΈΡΡ Π²ΡΡΡΠ½ΡΡ
|
|
212
|
+
|
|
213
|
+
# π Deep Links
|
|
214
|
+
cliskill register-protocol # Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ cliskill://
|
|
215
|
+
cliskill unregister-protocol # ΠΎΡΠΌΠ΅Π½ΠΈΡΡ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ
|
|
216
|
+
cliskill open-uri "cliskill://prompt?text=hello" # ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ URI
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
### ΠΡΠ΅ ΠΎΠΏΡΠΈΠΈ CLI
|
|
220
|
+
|
|
221
|
+
| ΠΠΏΡΠΈΡ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
|
|
222
|
+
|-------|----------|
|
|
223
|
+
| `-m, --model <model>` | ΠΠΎΠ΄Π΅Π»Ρ ΠΈΠ»ΠΈ Π°Π»ΠΈΠ°Ρ (smart, fast, balanced) |
|
|
224
|
+
| `--base-url <url>` | URL API ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠ° |
|
|
225
|
+
| `--api-key <key>` | API ΠΊΠ»ΡΡ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠ° |
|
|
226
|
+
| `-p, --prompt <text>` | ΠΠ΄Π½ΠΎΡΠ°Π·ΠΎΠ²ΡΠΉ Π·Π°ΠΏΡΠΎΡ |
|
|
227
|
+
| `--config <path>` | ΠΡΡΡ ΠΊ ΡΠ°ΠΉΠ»Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ |
|
|
228
|
+
| `--tui` | React TUI (Ink) Π²ΠΌΠ΅ΡΡΠΎ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ REPL |
|
|
229
|
+
| `--verbose` | ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠ΅ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ |
|
|
230
|
+
| `--auto` | Auto mode (safe-auto) |
|
|
231
|
+
| `--auto-mode <level>` | Auto mode Ρ ΡΡΠΎΠ²Π½Π΅ΠΌ (full-auto, safe-auto, ask) |
|
|
232
|
+
| `--fast` | ΠΡΡΡΡΡΠΉ ΡΠ΅ΠΆΠΈΠΌ |
|
|
233
|
+
| `--max-context <tokens>` | ΠΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΡΠΎΠΊΠ΅Π½ΠΎΠ² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° |
|
|
234
|
+
| `--remote <host>` | ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊ ΡΠ΄Π°Π»ΡΠ½Π½ΠΎΠΌΡ ΡΠ΅ΡΠ²Π΅ΡΡ (SSH) |
|
|
235
|
+
| `--theme <name>` | Π¦Π²Π΅ΡΠΎΠ²Π°Ρ ΡΠ΅ΠΌΠ° |
|
|
236
|
+
| `--record` | ΠΠ°ΠΏΠΈΡΡ ΡΠ΅ΡΡΠΈΠΈ (asciicast v2) |
|
|
237
|
+
| `--record-output <path>` | ΠΡΡΡ ΠΊ ΡΠ°ΠΉΠ»Ρ Π·Π°ΠΏΠΈΡΠΈ |
|
|
238
|
+
| `--resume [id]` | ΠΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ΅ΡΡΠΈΡ |
|
|
239
|
+
| `-v, --version` | ΠΠ΅ΡΡΠΈΡ |
|
|
240
|
+
| `-h, --help` | Π‘ΠΏΡΠ°Π²ΠΊΠ° |
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
## βοΈ ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ
|
|
245
|
+
|
|
246
|
+
### Π€Π°ΠΉΠ» ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ
|
|
247
|
+
|
|
248
|
+
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ `.cliskillrc.json` Π² Π΄ΠΎΠΌΠ°ΡΠ½Π΅ΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ ΠΈΠ»ΠΈ Π² ΠΊΠΎΡΠ½Π΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°:
|
|
249
|
+
|
|
250
|
+
```json
|
|
251
|
+
{
|
|
252
|
+
"defaultProvider": "my-provider",
|
|
253
|
+
"providers": [
|
|
254
|
+
{
|
|
255
|
+
"name": "my-provider",
|
|
256
|
+
"baseUrl": "https://api.example.com/v1",
|
|
257
|
+
"model": "gpt-4o",
|
|
258
|
+
"format": "openai-compatible",
|
|
259
|
+
"timeout": 120000,
|
|
260
|
+
"maxTokens": 4096
|
|
261
|
+
}
|
|
262
|
+
],
|
|
263
|
+
"permissionMode": "ask",
|
|
264
|
+
"verbose": false,
|
|
265
|
+
"maxContextTokens": 1000000,
|
|
266
|
+
"theme": {
|
|
267
|
+
"name": "dark"
|
|
268
|
+
},
|
|
269
|
+
"autoMode": {
|
|
270
|
+
"enabled": false,
|
|
271
|
+
"trustLevel": "safe-auto"
|
|
272
|
+
},
|
|
273
|
+
"fastMode": {
|
|
274
|
+
"enabled": false
|
|
275
|
+
},
|
|
276
|
+
"models": {
|
|
277
|
+
"aliases": [
|
|
278
|
+
{ "alias": "smart", "model": "gpt-4o" },
|
|
279
|
+
{ "alias": "fast", "model": "gpt-4o-mini" },
|
|
280
|
+
{ "alias": "balanced", "model": "gpt-4o" },
|
|
281
|
+
{ "alias": "reasoning", "model": "o1" },
|
|
282
|
+
{ "alias": "code", "model": "gpt-4o" }
|
|
283
|
+
],
|
|
284
|
+
"maxContextTokens": 1000000
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
### ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ
|
|
290
|
+
|
|
291
|
+
```bash
|
|
292
|
+
export CLISKILL_API_KEY="b0157800fd274691a6ba19a29ca11885.Ar0TPbB9buuhh8wJ"
|
|
293
|
+
export CLISKILL_BASE_URL="https://api.z.ai/api/coding/paas/v4"
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
### Π€ΠΎΡΠΌΠ°ΡΡ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠΎΠ²
|
|
297
|
+
|
|
298
|
+
| Π€ΠΎΡΠΌΠ°Ρ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
|
|
299
|
+
|--------|----------|
|
|
300
|
+
| `openai-compatible` | ΠΡΠ±ΠΎΠΉ `/v1/chat/completions` endpoint |
|
|
301
|
+
| `messages-compatible` | Messages API ΡΠΎΡΠΌΠ°Ρ (compat adapter) |
|
|
302
|
+
| `custom` | ΠΠ°ΡΡΠΎΠΌΠ½ΡΠΉ Π°Π΄Π°ΠΏΡΠ΅Ρ (ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½Π°Ρ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ) |
|
|
303
|
+
|
|
304
|
+
### Π Π΅ΠΆΠΈΠΌΡ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠΉ
|
|
305
|
+
|
|
306
|
+
| Π Π΅ΠΆΠΈΠΌ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
|
|
307
|
+
|-------|----------|
|
|
308
|
+
| `ask` | ΠΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ) |
|
|
309
|
+
| `auto-accept` | Π Π°Π·ΡΠ΅ΡΠΈΡΡ Π²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π±Π΅Π· ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ |
|
|
310
|
+
| `plan` | Π’ΠΎΠ»ΡΠΊΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΡΠ΅Π½ΠΈΡ |
|
|
311
|
+
|
|
312
|
+
### ΠΠ°Π²ΡΠΊΠΈ (Skills)
|
|
313
|
+
|
|
314
|
+
Π‘ΠΎΠ·Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π½Π°Π²ΡΠΊΠΎΠ² Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ `.cliskill/skills/`:
|
|
315
|
+
|
|
316
|
+
```markdown
|
|
317
|
+
---
|
|
318
|
+
name: my-skill
|
|
319
|
+
description: ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π°Π²ΡΠΊΠ°
|
|
320
|
+
---
|
|
321
|
+
|
|
322
|
+
# ΠΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π΄Π»Ρ Π½Π°Π²ΡΠΊΠ°
|
|
323
|
+
|
|
324
|
+
Π’Π΅ΠΊΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ Markdown...
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
---
|
|
328
|
+
|
|
329
|
+
## ποΈ ΠΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ°
|
|
330
|
+
|
|
331
|
+
```
|
|
332
|
+
src/
|
|
333
|
+
βββ π‘ bootstrap/ β CLI entry point, ΠΏΠ°ΡΡΠΈΠ½Π³ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ²
|
|
334
|
+
βββ βοΈ config/ β ΠΠ°Π³ΡΡΠ·ΠΊΠ° ΠΈ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ
|
|
335
|
+
βββ π connect/ β ΠΠ±ΡΡΡΠ°ΠΊΡΠΈΡ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠΎΠ² (API Π°Π΄Π°ΠΏΡΠ΅ΡΡ)
|
|
336
|
+
βββ π§ core/ β Agent Loop, QueryEngine (ΡΠ΄ΡΠΎ ΡΠΈΡΡΠ΅ΠΌΡ)
|
|
337
|
+
βββ π§ tools/ β Π‘ΠΈΡΡΠ΅ΠΌΠ° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² (15 ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ²)
|
|
338
|
+
βββ π οΈ services/ β Π‘Π΅ΡΠ²ΠΈΡΡ (auto-mode, cron, doctor, ΠΈ Ρ.Π΄.)
|
|
339
|
+
βββ π‘οΈ safety/ β Π Π°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ, Command Inspector
|
|
340
|
+
βββ π§ memory/ β Memory Store (basic + TF-IDF)
|
|
341
|
+
βββ π¨ ui/ β Theme, Keybindings, Ink TUI
|
|
342
|
+
βββ πͺ hooks/ β Hooks system (pre/post)
|
|
343
|
+
βββ π‘ mcp/ β MCP Client (Model Context Protocol)
|
|
344
|
+
βββ π swarm/ β ΠΡΠ»ΡΡΠΈ-Π°Π³Π΅Π½ΡΠ½Π°Ρ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΈΡ
|
|
345
|
+
βββ π tasks/ β Π€ΠΎΠ½ΠΎΠ²ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ
|
|
346
|
+
βββ π remote/ β SSH ΡΠ΅ΡΡΠΈΠΈ
|
|
347
|
+
βββ π§© extensions/ β Π Π°ΡΡΠΈΡΠ΅Π½ΠΈΡ
|
|
348
|
+
βββ ποΈ infra/ β ΠΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ½ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ
|
|
349
|
+
βββ π utils/ β ΠΠ±ΡΠΈΠ΅ ΡΡΠΈΠ»ΠΈΡΡ
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
### ΠΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ
|
|
353
|
+
|
|
354
|
+
```mermaid
|
|
355
|
+
graph TB
|
|
356
|
+
CLI[CLI Entry] --> Config[Config Loader]
|
|
357
|
+
CLI --> REPL[REPL / TUI]
|
|
358
|
+
REPL --> Core[Agent Loop]
|
|
359
|
+
Core --> Provider[Provider Adapter]
|
|
360
|
+
Core --> Tools[Tool System]
|
|
361
|
+
Core --> Memory[Memory Store]
|
|
362
|
+
Core --> Safety[Safety Layer]
|
|
363
|
+
Tools --> Bash[Bash Tool]
|
|
364
|
+
Tools --> Files[File Tools]
|
|
365
|
+
Tools --> Web[Web Tools]
|
|
366
|
+
Tools --> Agent[Agent Tool]
|
|
367
|
+
Tools --> LSP[LSP Tool]
|
|
368
|
+
Tools --> Remote[Remote Tool]
|
|
369
|
+
Core --> Hooks[Hooks System]
|
|
370
|
+
Core --> MCP[MCP Client]
|
|
371
|
+
Core --> Swarm[Swarm Coordinator]
|
|
372
|
+
Swarm --> Tasks[Task System]
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
---
|
|
376
|
+
|
|
377
|
+
## π¨βπ» Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ°
|
|
378
|
+
|
|
379
|
+
### ΠΠΎΠΌΠ°Π½Π΄Ρ
|
|
380
|
+
|
|
381
|
+
```bash
|
|
382
|
+
npm install # Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ
|
|
383
|
+
npm run build # Π‘Π±ΠΎΡΠΊΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ° (tsup)
|
|
384
|
+
npm run dev # Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Ρ watch-ΡΠ΅ΠΆΠΈΠΌΠΎΠΌ
|
|
385
|
+
npm test # ΠΠ°ΠΏΡΡΡΠΈΡΡ ΡΠ΅ΡΡΡ (844 ΡΠ΅ΡΡΠ°, Vitest)
|
|
386
|
+
npm run test:watch # Π’Π΅ΡΡΡ Π² watch-ΡΠ΅ΠΆΠΈΠΌΠ΅
|
|
387
|
+
npm run typecheck # ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΈΠΏΠΎΠ² TypeScript
|
|
388
|
+
npm run lint # ΠΠΈΠ½ΡΠΈΠ½Π³ (= typecheck)
|
|
389
|
+
npm run start # ΠΠ°ΠΏΡΡΠΊ ΡΠΎΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ CLI
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
### Π‘ΡΡΡΠΊΡΡΡΠ° ΡΠ΅ΡΡΠΎΠ²
|
|
393
|
+
|
|
394
|
+
ΠΠ°ΠΆΠ΄ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π°Π΅ΡΡΡ ΡΠ΅ΡΡΠ°ΠΌΠΈ:
|
|
395
|
+
|
|
396
|
+
```
|
|
397
|
+
src/
|
|
398
|
+
βββ services/
|
|
399
|
+
β βββ cron/
|
|
400
|
+
β β βββ parser.ts # ΠΠ°ΡΡΠ΅Ρ cron-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ
|
|
401
|
+
β β βββ parser.test.ts # Π’Π΅ΡΡΡ ΠΏΠ°ΡΡΠ΅ΡΠ°
|
|
402
|
+
β β βββ scheduler.ts # ΠΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊ
|
|
403
|
+
β β βββ scheduler.test.ts # Π’Π΅ΡΡΡ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊΠ°
|
|
404
|
+
β β βββ task-store.ts # Π₯ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π·Π°Π΄Π°Ρ
|
|
405
|
+
β β βββ task-store.test.ts # Π’Π΅ΡΡΡ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°
|
|
406
|
+
β βββ doctor.ts / .test.ts
|
|
407
|
+
β βββ asciicast.ts / .test.ts
|
|
408
|
+
β βββ housekeeping.ts / .test.ts
|
|
409
|
+
β βββ tool-pool.ts / .test.ts
|
|
410
|
+
βββ ui/
|
|
411
|
+
β βββ theme.ts / .test.ts
|
|
412
|
+
β βββ keybindings/
|
|
413
|
+
β βββ parser.ts / .test.ts
|
|
414
|
+
β βββ resolver.ts / .test.ts
|
|
415
|
+
β βββ schema.ts / .test.ts
|
|
416
|
+
βββ tools/builtins/
|
|
417
|
+
β βββ worktree-tool.ts / .test.ts
|
|
418
|
+
β βββ todo-write-tool.ts / .test.ts
|
|
419
|
+
β βββ web-fetch-tool.ts / .test.ts
|
|
420
|
+
β βββ web-search-tool.ts / .test.ts
|
|
421
|
+
βββ utils/
|
|
422
|
+
βββ ansi-render.ts / .test.ts
|
|
423
|
+
βββ bash-parser.ts / .test.ts
|
|
424
|
+
```
|
|
425
|
+
|
|
426
|
+
---
|
|
427
|
+
|
|
428
|
+
## π§ͺ Π’Π΅Ρ
Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ
|
|
429
|
+
|
|
430
|
+
### ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΡΠ΅ΠΊ
|
|
431
|
+
|
|
432
|
+
| Π’Π΅Ρ
Π½ΠΎΠ»ΠΎΠ³ΠΈΡ | ΠΠ°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ |
|
|
433
|
+
|------------|------------|
|
|
434
|
+
| **Node.js** LTS | Π‘ΡΠ΅Π΄Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ |
|
|
435
|
+
| **TypeScript** (strict) | Π’ΠΈΠΏΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ |
|
|
436
|
+
| **ESM** | ΠΠΎΠ΄ΡΠ»ΡΠ½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° |
|
|
437
|
+
|
|
438
|
+
### ΠΠ°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ
|
|
439
|
+
|
|
440
|
+
| ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° | ΠΠ°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ |
|
|
441
|
+
|------------|------------|
|
|
442
|
+
| [Commander.js](https://github.com/tj/commander.js) | ΠΠ°ΡΡΠΈΠ½Π³ CLI Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² |
|
|
443
|
+
| [Zod](https://zod.dev) | ΠΠ°Π»ΠΈΠ΄Π°ΡΠΈΡ ΡΡ
Π΅ΠΌ Π΄Π°Π½Π½ΡΡ
|
|
|
444
|
+
| [Chalk](https://github.com/chalk/chalk) | Π¦Π²Π΅ΡΠ½ΠΎΠΉ Π²ΡΠ²ΠΎΠ΄ Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Π» |
|
|
445
|
+
| [Ink](https://github.com/vadimdemedes/ink) / [React](https://react.dev) | Terminal UI |
|
|
446
|
+
| [Ora](https://github.com/sindresorhus/ora) | Π‘ΠΏΠΈΠ½Π½Π΅ΡΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ |
|
|
447
|
+
| [ssh2](https://github.com/mscdex/ssh2) | SSH ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ |
|
|
448
|
+
| [dotenv](https://github.com/motdotla/dotenv) | ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ |
|
|
449
|
+
|
|
450
|
+
### Dev-Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ
|
|
451
|
+
|
|
452
|
+
| ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° | ΠΠ°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ |
|
|
453
|
+
|------------|------------|
|
|
454
|
+
| [tsup](https://tsup.egoist.dev) | Π‘Π±ΠΎΡΠΊΠ° (esbuild-based) |
|
|
455
|
+
| [Vitest](https://vitest.dev) | Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ (844 ΡΠ΅ΡΡΠ°) |
|
|
456
|
+
| [TypeScript](https://www.typescriptlang.org) | ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΈΠΏΠΎΠ² |
|
|
457
|
+
|
|
458
|
+
---
|
|
459
|
+
|
|
460
|
+
## π ΠΠΈΡΠ΅Π½Π·ΠΈΡ
|
|
461
|
+
|
|
462
|
+
ΠΡΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΠ΅ΠΉ **MIT**. ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΡΠΌ. [LICENSE](LICENSE).
|
|
463
|
+
|
|
464
|
+
---
|
|
465
|
+
|
|
466
|
+
<div align="center">
|
|
467
|
+
|
|
468
|
+
**cliskill** β ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡΠΉ AI-Π°ΡΡΠΈΡΡΠ΅Π½Ρ Π΄Π»Ρ ΡΠ΅Ρ
, ΠΊΡΠΎ ΡΠ΅Π½ΠΈΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ.
|
|
469
|
+
|
|
470
|
+
</div>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
interface CliOptions {
|
|
2
|
+
model?: string;
|
|
3
|
+
baseUrl?: string;
|
|
4
|
+
apiKey?: string;
|
|
5
|
+
prompt?: string;
|
|
6
|
+
config?: string;
|
|
7
|
+
tui?: boolean;
|
|
8
|
+
verbose?: boolean;
|
|
9
|
+
auto?: boolean;
|
|
10
|
+
autoMode?: string;
|
|
11
|
+
fast?: boolean;
|
|
12
|
+
maxContext?: number;
|
|
13
|
+
remote?: string;
|
|
14
|
+
theme?: string;
|
|
15
|
+
record?: boolean;
|
|
16
|
+
recordOutput?: string;
|
|
17
|
+
resume?: string | boolean;
|
|
18
|
+
}
|
|
19
|
+
declare function runCli(): Promise<void>;
|
|
20
|
+
|
|
21
|
+
export { type CliOptions, runCli };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
// src/config/paths.ts
|
|
2
|
+
import { join } from "path";
|
|
3
|
+
import { homedir } from "os";
|
|
4
|
+
import { existsSync, mkdirSync, renameSync, readFileSync } from "fs";
|
|
5
|
+
var DATA_DIR_NAME = ".cliskill";
|
|
6
|
+
var CONFIG_FILENAME = "config.json";
|
|
7
|
+
var LEGACY_CONFIG_FILENAME = ".cliskillrc.json";
|
|
8
|
+
function getDataDir() {
|
|
9
|
+
return join(homedir(), DATA_DIR_NAME);
|
|
10
|
+
}
|
|
11
|
+
function ensureDataDir() {
|
|
12
|
+
const dir = getDataDir();
|
|
13
|
+
if (!existsSync(dir)) {
|
|
14
|
+
mkdirSync(dir, { recursive: true });
|
|
15
|
+
}
|
|
16
|
+
return dir;
|
|
17
|
+
}
|
|
18
|
+
function getConfigPath() {
|
|
19
|
+
return join(getDataDir(), CONFIG_FILENAME);
|
|
20
|
+
}
|
|
21
|
+
function getLegacyConfigPath() {
|
|
22
|
+
return join(homedir(), LEGACY_CONFIG_FILENAME);
|
|
23
|
+
}
|
|
24
|
+
function getSessionsDir() {
|
|
25
|
+
return join(getDataDir(), "sessions");
|
|
26
|
+
}
|
|
27
|
+
function getGlobalSkillsDir() {
|
|
28
|
+
return join(getDataDir(), "skills");
|
|
29
|
+
}
|
|
30
|
+
function getHistoryPath() {
|
|
31
|
+
return join(getDataDir(), "history.jsonl");
|
|
32
|
+
}
|
|
33
|
+
function getScheduledTasksPath() {
|
|
34
|
+
return join(getDataDir(), "scheduled_tasks.json");
|
|
35
|
+
}
|
|
36
|
+
function getKeybindingsPath() {
|
|
37
|
+
return join(getDataDir(), "keybindings.json");
|
|
38
|
+
}
|
|
39
|
+
function getPlistPath() {
|
|
40
|
+
return join(getDataDir(), "Info.plist");
|
|
41
|
+
}
|
|
42
|
+
function getTmpDir() {
|
|
43
|
+
return join(getDataDir(), "tmp");
|
|
44
|
+
}
|
|
45
|
+
function getGlobalMemoryDir() {
|
|
46
|
+
return join(getDataDir(), "memory");
|
|
47
|
+
}
|
|
48
|
+
function getHistoryDir() {
|
|
49
|
+
return join(getDataDir(), "history");
|
|
50
|
+
}
|
|
51
|
+
function getDiskHistoryPath() {
|
|
52
|
+
return join(getDataDir(), "history.json");
|
|
53
|
+
}
|
|
54
|
+
function migrateLegacyConfig() {
|
|
55
|
+
const legacyPath = getLegacyConfigPath();
|
|
56
|
+
const newPath = getConfigPath();
|
|
57
|
+
if (!existsSync(legacyPath)) return false;
|
|
58
|
+
if (existsSync(newPath)) return false;
|
|
59
|
+
try {
|
|
60
|
+
const content = readFileSync(legacyPath, "utf-8");
|
|
61
|
+
JSON.parse(content);
|
|
62
|
+
ensureDataDir();
|
|
63
|
+
renameSync(legacyPath, newPath);
|
|
64
|
+
return true;
|
|
65
|
+
} catch {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
function resolveConfigPath() {
|
|
70
|
+
const newPath = getConfigPath();
|
|
71
|
+
if (existsSync(newPath)) return newPath;
|
|
72
|
+
const legacyPath = getLegacyConfigPath();
|
|
73
|
+
if (existsSync(legacyPath)) return legacyPath;
|
|
74
|
+
return newPath;
|
|
75
|
+
}
|
|
76
|
+
function getConfigSearchPaths() {
|
|
77
|
+
return [
|
|
78
|
+
getConfigPath(),
|
|
79
|
+
getLegacyConfigPath(),
|
|
80
|
+
join(process.cwd(), ".cliskillrc.json")
|
|
81
|
+
];
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export {
|
|
85
|
+
getDataDir,
|
|
86
|
+
ensureDataDir,
|
|
87
|
+
getConfigPath,
|
|
88
|
+
getLegacyConfigPath,
|
|
89
|
+
getSessionsDir,
|
|
90
|
+
getGlobalSkillsDir,
|
|
91
|
+
getHistoryPath,
|
|
92
|
+
getScheduledTasksPath,
|
|
93
|
+
getKeybindingsPath,
|
|
94
|
+
getPlistPath,
|
|
95
|
+
getTmpDir,
|
|
96
|
+
getGlobalMemoryDir,
|
|
97
|
+
getHistoryDir,
|
|
98
|
+
getDiskHistoryPath,
|
|
99
|
+
migrateLegacyConfig,
|
|
100
|
+
resolveConfigPath,
|
|
101
|
+
getConfigSearchPaths
|
|
102
|
+
};
|
|
103
|
+
//# sourceMappingURL=chunk-AJENHWD3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/config/paths.ts"],"sourcesContent":["import { join } from 'node:path'\r\nimport { homedir } from 'node:os'\r\nimport { existsSync, mkdirSync, renameSync, readFileSync, writeFileSync } from 'node:fs'\r\n\r\n/**\r\n * Centralized path management for all cliskill data.\r\n *\r\n * All user data is stored under ~/.cliskill/:\r\n * config.json β main configuration\r\n * sessions/ β conversation session history\r\n * skills/ β global user skills\r\n * history.jsonl β command history\r\n * scheduled_tasks.json β cron/scheduled tasks\r\n * keybindings.json β custom keybindings\r\n * Info.plist β macOS URL scheme registration\r\n * tmp/ β temporary files\r\n * memory/ β global memory store\r\n */\r\n\r\nconst DATA_DIR_NAME = '.cliskill'\r\nconst CONFIG_FILENAME = 'config.json'\r\nconst LEGACY_CONFIG_FILENAME = '.cliskillrc.json'\r\n\r\n/** Get the base data directory: ~/.cliskill */\r\nexport function getDataDir(): string {\r\n return join(homedir(), DATA_DIR_NAME)\r\n}\r\n\r\n/** Ensure the data directory exists and return its path */\r\nexport function ensureDataDir(): string {\r\n const dir = getDataDir()\r\n if (!existsSync(dir)) {\r\n mkdirSync(dir, { recursive: true })\r\n }\r\n return dir\r\n}\r\n\r\n/** Path to the main config file: ~/.cliskill/config.json */\r\nexport function getConfigPath(): string {\r\n return join(getDataDir(), CONFIG_FILENAME)\r\n}\r\n\r\n/** Path to the legacy config file: ~/.cliskillrc.json */\r\nexport function getLegacyConfigPath(): string {\r\n return join(homedir(), LEGACY_CONFIG_FILENAME)\r\n}\r\n\r\n/** Path to sessions directory: ~/.cliskill/sessions/ */\r\nexport function getSessionsDir(): string {\r\n return join(getDataDir(), 'sessions')\r\n}\r\n\r\n/** Path to global skills directory: ~/.cliskill/skills/ */\r\nexport function getGlobalSkillsDir(): string {\r\n return join(getDataDir(), 'skills')\r\n}\r\n\r\n/** Path to command history: ~/.cliskill/history.jsonl */\r\nexport function getHistoryPath(): string {\r\n return join(getDataDir(), 'history.jsonl')\r\n}\r\n\r\n/** Path to scheduled tasks: ~/.cliskill/scheduled_tasks.json */\r\nexport function getScheduledTasksPath(): string {\r\n return join(getDataDir(), 'scheduled_tasks.json')\r\n}\r\n\r\n/** Path to custom keybindings: ~/.cliskill/keybindings.json */\r\nexport function getKeybindingsPath(): string {\r\n return join(getDataDir(), 'keybindings.json')\r\n}\r\n\r\n/** Path to macOS URL scheme plist: ~/.cliskill/Info.plist */\r\nexport function getPlistPath(): string {\r\n return join(getDataDir(), 'Info.plist')\r\n}\r\n\r\n/** Path to temp directory: ~/.cliskill/tmp/ */\r\nexport function getTmpDir(): string {\r\n return join(getDataDir(), 'tmp')\r\n}\r\n\r\n/** Path to global memory directory: ~/.cliskill/memory/ */\r\nexport function getGlobalMemoryDir(): string {\r\n return join(getDataDir(), 'memory')\r\n}\r\n\r\n/** Path to history subdirectory: ~/.cliskill/history/ */\r\nexport function getHistoryDir(): string {\r\n return join(getDataDir(), 'history')\r\n}\r\n\r\n/** Path to disk space check file: ~/.cliskill/history.json */\r\nexport function getDiskHistoryPath(): string {\r\n return join(getDataDir(), 'history.json')\r\n}\r\n\r\n/**\r\n * Migrate legacy config (~/.cliskillrc.json) to new location (~/.cliskill/config.json).\r\n * Returns true if migration was performed.\r\n */\r\nexport function migrateLegacyConfig(): boolean {\r\n const legacyPath = getLegacyConfigPath()\r\n const newPath = getConfigPath()\r\n\r\n if (!existsSync(legacyPath)) return false\r\n if (existsSync(newPath)) return false\r\n\r\n try {\r\n // Validate the legacy config is valid JSON before migrating\r\n const content = readFileSync(legacyPath, 'utf-8')\r\n JSON.parse(content)\r\n\r\n ensureDataDir()\r\n renameSync(legacyPath, newPath)\r\n return true\r\n } catch {\r\n return false\r\n }\r\n}\r\n\r\n/**\r\n * Get config path, checking both new and legacy locations.\r\n * Returns the path that exists, preferring the new location.\r\n */\r\nexport function resolveConfigPath(): string {\r\n const newPath = getConfigPath()\r\n if (existsSync(newPath)) return newPath\r\n\r\n const legacyPath = getLegacyConfigPath()\r\n if (existsSync(legacyPath)) return legacyPath\r\n\r\n return newPath\r\n}\r\n\r\n/**\r\n * Get all config search paths in priority order.\r\n * Used by doctor and loader to find config files.\r\n */\r\nexport function getConfigSearchPaths(): string[] {\r\n return [\r\n getConfigPath(),\r\n getLegacyConfigPath(),\r\n join(process.cwd(), '.cliskillrc.json'),\r\n ]\r\n}\r\n"],"mappings":";AAAA,SAAS,YAAY;AACrB,SAAS,eAAe;AACxB,SAAS,YAAY,WAAW,YAAY,oBAAmC;AAiB/E,IAAM,gBAAgB;AACtB,IAAM,kBAAkB;AACxB,IAAM,yBAAyB;AAGxB,SAAS,aAAqB;AACnC,SAAO,KAAK,QAAQ,GAAG,aAAa;AACtC;AAGO,SAAS,gBAAwB;AACtC,QAAM,MAAM,WAAW;AACvB,MAAI,CAAC,WAAW,GAAG,GAAG;AACpB,cAAU,KAAK,EAAE,WAAW,KAAK,CAAC;AAAA,EACpC;AACA,SAAO;AACT;AAGO,SAAS,gBAAwB;AACtC,SAAO,KAAK,WAAW,GAAG,eAAe;AAC3C;AAGO,SAAS,sBAA8B;AAC5C,SAAO,KAAK,QAAQ,GAAG,sBAAsB;AAC/C;AAGO,SAAS,iBAAyB;AACvC,SAAO,KAAK,WAAW,GAAG,UAAU;AACtC;AAGO,SAAS,qBAA6B;AAC3C,SAAO,KAAK,WAAW,GAAG,QAAQ;AACpC;AAGO,SAAS,iBAAyB;AACvC,SAAO,KAAK,WAAW,GAAG,eAAe;AAC3C;AAGO,SAAS,wBAAgC;AAC9C,SAAO,KAAK,WAAW,GAAG,sBAAsB;AAClD;AAGO,SAAS,qBAA6B;AAC3C,SAAO,KAAK,WAAW,GAAG,kBAAkB;AAC9C;AAGO,SAAS,eAAuB;AACrC,SAAO,KAAK,WAAW,GAAG,YAAY;AACxC;AAGO,SAAS,YAAoB;AAClC,SAAO,KAAK,WAAW,GAAG,KAAK;AACjC;AAGO,SAAS,qBAA6B;AAC3C,SAAO,KAAK,WAAW,GAAG,QAAQ;AACpC;AAGO,SAAS,gBAAwB;AACtC,SAAO,KAAK,WAAW,GAAG,SAAS;AACrC;AAGO,SAAS,qBAA6B;AAC3C,SAAO,KAAK,WAAW,GAAG,cAAc;AAC1C;AAMO,SAAS,sBAA+B;AAC7C,QAAM,aAAa,oBAAoB;AACvC,QAAM,UAAU,cAAc;AAE9B,MAAI,CAAC,WAAW,UAAU,EAAG,QAAO;AACpC,MAAI,WAAW,OAAO,EAAG,QAAO;AAEhC,MAAI;AAEF,UAAM,UAAU,aAAa,YAAY,OAAO;AAChD,SAAK,MAAM,OAAO;AAElB,kBAAc;AACd,eAAW,YAAY,OAAO;AAC9B,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAMO,SAAS,oBAA4B;AAC1C,QAAM,UAAU,cAAc;AAC9B,MAAI,WAAW,OAAO,EAAG,QAAO;AAEhC,QAAM,aAAa,oBAAoB;AACvC,MAAI,WAAW,UAAU,EAAG,QAAO;AAEnC,SAAO;AACT;AAMO,SAAS,uBAAiC;AAC/C,SAAO;AAAA,IACL,cAAc;AAAA,IACd,oBAAoB;AAAA,IACpB,KAAK,QAAQ,IAAI,GAAG,kBAAkB;AAAA,EACxC;AACF;","names":[]}
|