@i14ks/ccv 0.1.0 → 0.2.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 +173 -173
- package/README.md +56 -56
- package/bundle/ccv.mjs +116 -9
- package/package.json +49 -49
- package/web/assets/{index-C-HuAiCn.js → index-1iYnLw7q.js} +1 -1
- package/web/assets/{index-BBL1LP-l.js → index-7poo-d50.js} +1 -1
- package/web/assets/{index-D8swzi0v.js → index-BMMMWgeR.js} +1 -1
- package/web/assets/{index-CYyCCyf_.js → index-BW8WtNtA.js} +1 -1
- package/web/assets/{index-BVHAVdqc.js → index-C7CZdm1C.js} +1 -1
- package/web/assets/{index-D0qAiokq.js → index-C9vrRfhW.js} +1 -1
- package/web/assets/{index-BQbBSCN3.js → index-CVP8I8tU.js} +1 -1
- package/web/assets/{index-e0Ev4udb.js → index-CpwLxLdo.js} +1 -1
- package/web/assets/{index-DJN3PaCw.js → index-D-buiUaW.js} +1 -1
- package/web/assets/index-DCtzpGvd.js +133 -0
- package/web/assets/{index-CtQ2lLVm.js → index-DDnDtQl5.js} +1 -1
- package/web/assets/{index-CPBnfhi2.js → index-DKwcT9vY.js} +1 -1
- package/web/assets/index-DYr0npzc.css +1 -0
- package/web/assets/{index-4x6fBcbV.js → index-DcGWR_5B.js} +1 -1
- package/web/assets/{index-Dw1tTDZW.js → index-PCsjZn72.js} +1 -1
- package/web/assets/{index-CG3BWhrU.js → index-XBmPtinY.js} +1 -1
- package/web/assets/{index-DSNRlHPG.js → index-gDk09Gbz.js} +1 -1
- package/web/index.html +30 -30
- package/web/assets/index-B4RnRe_M.js +0 -133
- package/web/assets/index-uKB-GMLe.css +0 -1
package/LICENSE
CHANGED
|
@@ -1,173 +1,173 @@
|
|
|
1
|
-
Claude Code Visual (ccv)
|
|
2
|
-
Лицензионное соглашение с конечным пользователем
|
|
3
|
-
Версия 1.0, 30 июля 2026
|
|
4
|
-
|
|
5
|
-
Правообладатель: Иван (I14ks), https://github.com/I14ks/ClaudeCodeVisual
|
|
6
|
-
Copyright (c) 2026 Иван (I14ks). Все права защищены.
|
|
7
|
-
|
|
8
|
-
================================================================================
|
|
9
|
-
РУССКИЙ ТЕКСТ (УПРАВЛЯЮЩИЙ)
|
|
10
|
-
================================================================================
|
|
11
|
-
|
|
12
|
-
1. ОПРЕДЕЛЕНИЯ
|
|
13
|
-
|
|
14
|
-
«Программа» — программа Claude Code Visual, распространяемая как пакет npm
|
|
15
|
-
@i14ks/ccv, включая исходный код, собранные файлы, интерфейс и документацию.
|
|
16
|
-
|
|
17
|
-
«Вы» — физическое или юридическое лицо, получившее копию Программы.
|
|
18
|
-
|
|
19
|
-
2. ЧТО РАЗРЕШЕНО
|
|
20
|
-
|
|
21
|
-
Вам разрешается устанавливать и запускать Программу на любом количестве
|
|
22
|
-
принадлежащих Вам или подконтрольных Вам устройств, в личных и коммерческих
|
|
23
|
-
целях, и использовать её результаты работы без каких-либо ограничений.
|
|
24
|
-
|
|
25
|
-
Результаты Вашей работы в Программе принадлежат Вам. Правообладатель не
|
|
26
|
-
заявляет никаких прав на файлы, код и тексты, которые Вы создаёте или
|
|
27
|
-
изменяете с её помощью.
|
|
28
|
-
|
|
29
|
-
3. ЧТО НЕ РАЗРЕШЕНО
|
|
30
|
-
|
|
31
|
-
Без предварительного письменного разрешения Правообладателя Вам не
|
|
32
|
-
разрешается:
|
|
33
|
-
|
|
34
|
-
а) распространять, публиковать, передавать, сдавать в аренду, продавать
|
|
35
|
-
или иным образом предоставлять Программу или её часть третьим лицам,
|
|
36
|
-
в том числе в составе других продуктов;
|
|
37
|
-
|
|
38
|
-
б) изменять Программу, создавать производные произведения на её основе,
|
|
39
|
-
публиковать форки;
|
|
40
|
-
|
|
41
|
-
в) декомпилировать, дизассемблировать или иным образом восстанавливать
|
|
42
|
-
исходный код тех частей Программы, которые поставляются в собранном
|
|
43
|
-
виде, за исключением случаев, прямо разрешённых применимым правом;
|
|
44
|
-
|
|
45
|
-
г) удалять или изменять уведомления об авторских правах, настоящее
|
|
46
|
-
соглашение и уведомления о стороннем коде (THIRD-PARTY-NOTICES.md);
|
|
47
|
-
|
|
48
|
-
д) предоставлять Программу как сервис третьим лицам.
|
|
49
|
-
|
|
50
|
-
Исходный код Программы открыт для чтения. Открытость для чтения не является
|
|
51
|
-
разрешением из пунктов «а»–«д»: смотреть можно, распространять и изменять —
|
|
52
|
-
нет.
|
|
53
|
-
|
|
54
|
-
4. СТОРОННИЙ КОД
|
|
55
|
-
|
|
56
|
-
Программа содержит код третьих лиц, распространяемый на собственных
|
|
57
|
-
условиях. Эти условия перечислены в файле THIRD-PARTY-NOTICES.md и имеют
|
|
58
|
-
преимущественную силу в отношении соответствующих частей. Настоящее
|
|
59
|
-
соглашение не ограничивает Ваши права на сторонний код.
|
|
60
|
-
|
|
61
|
-
Программа предназначена для работы с Claude Code — отдельным продуктом
|
|
62
|
-
Anthropic PBC, распространяемым на собственных условиях. Правообладатель не
|
|
63
|
-
связан с Anthropic PBC, а названия Claude и Claude Code принадлежат их
|
|
64
|
-
правообладателю и используются только для указания на совместимость.
|
|
65
|
-
|
|
66
|
-
5. ОТСУТСТВИЕ ГАРАНТИЙ
|
|
67
|
-
|
|
68
|
-
ПРОГРАММА ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНЫХ ИЛИ
|
|
69
|
-
ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ГАРАНТИИ ПРИГОДНОСТИ ДЛЯ
|
|
70
|
-
ОПРЕДЕЛЁННОЙ ЦЕЛИ И ОТСУТСТВИЯ НАРУШЕНИЙ ПРАВ ТРЕТЬИХ ЛИЦ.
|
|
71
|
-
|
|
72
|
-
Программа запускает агента, который читает и изменяет файлы на Вашем
|
|
73
|
-
устройстве и выполняет команды. Ответственность за то, какие каталоги ему
|
|
74
|
-
открыты и какие действия разрешены, лежит на Вас.
|
|
75
|
-
|
|
76
|
-
6. ОГРАНИЧЕНИЕ ОТВЕТСТВЕННОСТИ
|
|
77
|
-
|
|
78
|
-
НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ ПРАВООБЛАДАТЕЛЬ НЕ НЕСЁТ ОТВЕТСТВЕННОСТИ ЗА
|
|
79
|
-
ЛЮБОЙ УЩЕРБ, ВКЛЮЧАЯ УТРАТУ ДАННЫХ И УПУЩЕННУЮ ВЫГОДУ, ВОЗНИКШИЙ ИЗ
|
|
80
|
-
ИСПОЛЬЗОВАНИЯ ИЛИ НЕВОЗМОЖНОСТИ ИСПОЛЬЗОВАНИЯ ПРОГРАММЫ.
|
|
81
|
-
|
|
82
|
-
7. ПРЕКРАЩЕНИЕ
|
|
83
|
-
|
|
84
|
-
Соглашение прекращается автоматически при нарушении Вами пункта 3. После
|
|
85
|
-
прекращения Вы обязаны удалить все копии Программы.
|
|
86
|
-
|
|
87
|
-
8. ИЗМЕНЕНИЕ УСЛОВИЙ
|
|
88
|
-
|
|
89
|
-
Правообладатель вправе изменить условия для будущих версий. К уже полученной
|
|
90
|
-
Вами версии применяются условия, приложенные к ней.
|
|
91
|
-
|
|
92
|
-
================================================================================
|
|
93
|
-
ENGLISH TRANSLATION (FOR CONVENIENCE ONLY)
|
|
94
|
-
================================================================================
|
|
95
|
-
|
|
96
|
-
In case of any discrepancy between the Russian text above and this English
|
|
97
|
-
translation, the Russian text prevails.
|
|
98
|
-
|
|
99
|
-
1. DEFINITIONS
|
|
100
|
-
|
|
101
|
-
"Software" means Claude Code Visual, distributed as the npm package
|
|
102
|
-
@i14ks/ccv, including its source code, build output, interface and
|
|
103
|
-
documentation.
|
|
104
|
-
|
|
105
|
-
"You" means the individual or legal entity that obtained a copy.
|
|
106
|
-
|
|
107
|
-
2. WHAT IS PERMITTED
|
|
108
|
-
|
|
109
|
-
You may install and run the Software on any number of devices you own or
|
|
110
|
-
control, for personal and commercial purposes, and use its output without
|
|
111
|
-
restriction.
|
|
112
|
-
|
|
113
|
-
Your work product is yours. The copyright holder claims no rights over the
|
|
114
|
-
files, code or text you create or modify with the Software.
|
|
115
|
-
|
|
116
|
-
3. WHAT IS NOT PERMITTED
|
|
117
|
-
|
|
118
|
-
Without the copyright holder's prior written permission, you may not:
|
|
119
|
-
|
|
120
|
-
(a) distribute, publish, transfer, rent, sell or otherwise make the Software
|
|
121
|
-
or any part of it available to third parties, including as part of
|
|
122
|
-
another product;
|
|
123
|
-
|
|
124
|
-
(b) modify the Software, create derivative works, or publish forks;
|
|
125
|
-
|
|
126
|
-
(c) decompile, disassemble or otherwise reverse engineer the parts of the
|
|
127
|
-
Software shipped in built form, except where applicable law expressly
|
|
128
|
-
permits it;
|
|
129
|
-
|
|
130
|
-
(d) remove or alter copyright notices, this agreement, or the third-party
|
|
131
|
-
notices (THIRD-PARTY-NOTICES.md);
|
|
132
|
-
|
|
133
|
-
(e) offer the Software as a service to third parties.
|
|
134
|
-
|
|
135
|
-
The source code is readable. Being readable is not permission under (a)-(e):
|
|
136
|
-
you may look, not redistribute or modify.
|
|
137
|
-
|
|
138
|
-
4. THIRD-PARTY CODE
|
|
139
|
-
|
|
140
|
-
The Software includes third-party code under its own terms, listed in
|
|
141
|
-
THIRD-PARTY-NOTICES.md, which prevail for those parts. This agreement does
|
|
142
|
-
not restrict your rights in that third-party code.
|
|
143
|
-
|
|
144
|
-
The Software is built to work with Claude Code, a separate product of
|
|
145
|
-
Anthropic PBC distributed under its own terms. The copyright holder is not
|
|
146
|
-
affiliated with Anthropic PBC; Claude and Claude Code are marks of their
|
|
147
|
-
owner and are used solely to indicate compatibility.
|
|
148
|
-
|
|
149
|
-
5. NO WARRANTY
|
|
150
|
-
|
|
151
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
152
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO FITNESS FOR A PARTICULAR PURPOSE AND
|
|
153
|
-
NONINFRINGEMENT.
|
|
154
|
-
|
|
155
|
-
The Software runs an agent that reads and modifies files on your device and
|
|
156
|
-
executes commands. Which directories it may touch and which actions it may
|
|
157
|
-
take is your responsibility.
|
|
158
|
-
|
|
159
|
-
6. LIMITATION OF LIABILITY
|
|
160
|
-
|
|
161
|
-
IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY DAMAGES, INCLUDING
|
|
162
|
-
LOSS OF DATA OR LOST PROFITS, ARISING FROM THE USE OF OR INABILITY TO USE
|
|
163
|
-
THE SOFTWARE.
|
|
164
|
-
|
|
165
|
-
7. TERMINATION
|
|
166
|
-
|
|
167
|
-
This agreement terminates automatically if you breach section 3. Upon
|
|
168
|
-
termination you must delete all copies of the Software.
|
|
169
|
-
|
|
170
|
-
8. CHANGES
|
|
171
|
-
|
|
172
|
-
The copyright holder may change the terms for future versions. The version
|
|
173
|
-
you received is governed by the terms shipped with it.
|
|
1
|
+
Claude Code Visual (ccv)
|
|
2
|
+
Лицензионное соглашение с конечным пользователем
|
|
3
|
+
Версия 1.0, 30 июля 2026
|
|
4
|
+
|
|
5
|
+
Правообладатель: Иван (I14ks), https://github.com/I14ks/ClaudeCodeVisual
|
|
6
|
+
Copyright (c) 2026 Иван (I14ks). Все права защищены.
|
|
7
|
+
|
|
8
|
+
================================================================================
|
|
9
|
+
РУССКИЙ ТЕКСТ (УПРАВЛЯЮЩИЙ)
|
|
10
|
+
================================================================================
|
|
11
|
+
|
|
12
|
+
1. ОПРЕДЕЛЕНИЯ
|
|
13
|
+
|
|
14
|
+
«Программа» — программа Claude Code Visual, распространяемая как пакет npm
|
|
15
|
+
@i14ks/ccv, включая исходный код, собранные файлы, интерфейс и документацию.
|
|
16
|
+
|
|
17
|
+
«Вы» — физическое или юридическое лицо, получившее копию Программы.
|
|
18
|
+
|
|
19
|
+
2. ЧТО РАЗРЕШЕНО
|
|
20
|
+
|
|
21
|
+
Вам разрешается устанавливать и запускать Программу на любом количестве
|
|
22
|
+
принадлежащих Вам или подконтрольных Вам устройств, в личных и коммерческих
|
|
23
|
+
целях, и использовать её результаты работы без каких-либо ограничений.
|
|
24
|
+
|
|
25
|
+
Результаты Вашей работы в Программе принадлежат Вам. Правообладатель не
|
|
26
|
+
заявляет никаких прав на файлы, код и тексты, которые Вы создаёте или
|
|
27
|
+
изменяете с её помощью.
|
|
28
|
+
|
|
29
|
+
3. ЧТО НЕ РАЗРЕШЕНО
|
|
30
|
+
|
|
31
|
+
Без предварительного письменного разрешения Правообладателя Вам не
|
|
32
|
+
разрешается:
|
|
33
|
+
|
|
34
|
+
а) распространять, публиковать, передавать, сдавать в аренду, продавать
|
|
35
|
+
или иным образом предоставлять Программу или её часть третьим лицам,
|
|
36
|
+
в том числе в составе других продуктов;
|
|
37
|
+
|
|
38
|
+
б) изменять Программу, создавать производные произведения на её основе,
|
|
39
|
+
публиковать форки;
|
|
40
|
+
|
|
41
|
+
в) декомпилировать, дизассемблировать или иным образом восстанавливать
|
|
42
|
+
исходный код тех частей Программы, которые поставляются в собранном
|
|
43
|
+
виде, за исключением случаев, прямо разрешённых применимым правом;
|
|
44
|
+
|
|
45
|
+
г) удалять или изменять уведомления об авторских правах, настоящее
|
|
46
|
+
соглашение и уведомления о стороннем коде (THIRD-PARTY-NOTICES.md);
|
|
47
|
+
|
|
48
|
+
д) предоставлять Программу как сервис третьим лицам.
|
|
49
|
+
|
|
50
|
+
Исходный код Программы открыт для чтения. Открытость для чтения не является
|
|
51
|
+
разрешением из пунктов «а»–«д»: смотреть можно, распространять и изменять —
|
|
52
|
+
нет.
|
|
53
|
+
|
|
54
|
+
4. СТОРОННИЙ КОД
|
|
55
|
+
|
|
56
|
+
Программа содержит код третьих лиц, распространяемый на собственных
|
|
57
|
+
условиях. Эти условия перечислены в файле THIRD-PARTY-NOTICES.md и имеют
|
|
58
|
+
преимущественную силу в отношении соответствующих частей. Настоящее
|
|
59
|
+
соглашение не ограничивает Ваши права на сторонний код.
|
|
60
|
+
|
|
61
|
+
Программа предназначена для работы с Claude Code — отдельным продуктом
|
|
62
|
+
Anthropic PBC, распространяемым на собственных условиях. Правообладатель не
|
|
63
|
+
связан с Anthropic PBC, а названия Claude и Claude Code принадлежат их
|
|
64
|
+
правообладателю и используются только для указания на совместимость.
|
|
65
|
+
|
|
66
|
+
5. ОТСУТСТВИЕ ГАРАНТИЙ
|
|
67
|
+
|
|
68
|
+
ПРОГРАММА ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНЫХ ИЛИ
|
|
69
|
+
ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ГАРАНТИИ ПРИГОДНОСТИ ДЛЯ
|
|
70
|
+
ОПРЕДЕЛЁННОЙ ЦЕЛИ И ОТСУТСТВИЯ НАРУШЕНИЙ ПРАВ ТРЕТЬИХ ЛИЦ.
|
|
71
|
+
|
|
72
|
+
Программа запускает агента, который читает и изменяет файлы на Вашем
|
|
73
|
+
устройстве и выполняет команды. Ответственность за то, какие каталоги ему
|
|
74
|
+
открыты и какие действия разрешены, лежит на Вас.
|
|
75
|
+
|
|
76
|
+
6. ОГРАНИЧЕНИЕ ОТВЕТСТВЕННОСТИ
|
|
77
|
+
|
|
78
|
+
НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ ПРАВООБЛАДАТЕЛЬ НЕ НЕСЁТ ОТВЕТСТВЕННОСТИ ЗА
|
|
79
|
+
ЛЮБОЙ УЩЕРБ, ВКЛЮЧАЯ УТРАТУ ДАННЫХ И УПУЩЕННУЮ ВЫГОДУ, ВОЗНИКШИЙ ИЗ
|
|
80
|
+
ИСПОЛЬЗОВАНИЯ ИЛИ НЕВОЗМОЖНОСТИ ИСПОЛЬЗОВАНИЯ ПРОГРАММЫ.
|
|
81
|
+
|
|
82
|
+
7. ПРЕКРАЩЕНИЕ
|
|
83
|
+
|
|
84
|
+
Соглашение прекращается автоматически при нарушении Вами пункта 3. После
|
|
85
|
+
прекращения Вы обязаны удалить все копии Программы.
|
|
86
|
+
|
|
87
|
+
8. ИЗМЕНЕНИЕ УСЛОВИЙ
|
|
88
|
+
|
|
89
|
+
Правообладатель вправе изменить условия для будущих версий. К уже полученной
|
|
90
|
+
Вами версии применяются условия, приложенные к ней.
|
|
91
|
+
|
|
92
|
+
================================================================================
|
|
93
|
+
ENGLISH TRANSLATION (FOR CONVENIENCE ONLY)
|
|
94
|
+
================================================================================
|
|
95
|
+
|
|
96
|
+
In case of any discrepancy between the Russian text above and this English
|
|
97
|
+
translation, the Russian text prevails.
|
|
98
|
+
|
|
99
|
+
1. DEFINITIONS
|
|
100
|
+
|
|
101
|
+
"Software" means Claude Code Visual, distributed as the npm package
|
|
102
|
+
@i14ks/ccv, including its source code, build output, interface and
|
|
103
|
+
documentation.
|
|
104
|
+
|
|
105
|
+
"You" means the individual or legal entity that obtained a copy.
|
|
106
|
+
|
|
107
|
+
2. WHAT IS PERMITTED
|
|
108
|
+
|
|
109
|
+
You may install and run the Software on any number of devices you own or
|
|
110
|
+
control, for personal and commercial purposes, and use its output without
|
|
111
|
+
restriction.
|
|
112
|
+
|
|
113
|
+
Your work product is yours. The copyright holder claims no rights over the
|
|
114
|
+
files, code or text you create or modify with the Software.
|
|
115
|
+
|
|
116
|
+
3. WHAT IS NOT PERMITTED
|
|
117
|
+
|
|
118
|
+
Without the copyright holder's prior written permission, you may not:
|
|
119
|
+
|
|
120
|
+
(a) distribute, publish, transfer, rent, sell or otherwise make the Software
|
|
121
|
+
or any part of it available to third parties, including as part of
|
|
122
|
+
another product;
|
|
123
|
+
|
|
124
|
+
(b) modify the Software, create derivative works, or publish forks;
|
|
125
|
+
|
|
126
|
+
(c) decompile, disassemble or otherwise reverse engineer the parts of the
|
|
127
|
+
Software shipped in built form, except where applicable law expressly
|
|
128
|
+
permits it;
|
|
129
|
+
|
|
130
|
+
(d) remove or alter copyright notices, this agreement, or the third-party
|
|
131
|
+
notices (THIRD-PARTY-NOTICES.md);
|
|
132
|
+
|
|
133
|
+
(e) offer the Software as a service to third parties.
|
|
134
|
+
|
|
135
|
+
The source code is readable. Being readable is not permission under (a)-(e):
|
|
136
|
+
you may look, not redistribute or modify.
|
|
137
|
+
|
|
138
|
+
4. THIRD-PARTY CODE
|
|
139
|
+
|
|
140
|
+
The Software includes third-party code under its own terms, listed in
|
|
141
|
+
THIRD-PARTY-NOTICES.md, which prevail for those parts. This agreement does
|
|
142
|
+
not restrict your rights in that third-party code.
|
|
143
|
+
|
|
144
|
+
The Software is built to work with Claude Code, a separate product of
|
|
145
|
+
Anthropic PBC distributed under its own terms. The copyright holder is not
|
|
146
|
+
affiliated with Anthropic PBC; Claude and Claude Code are marks of their
|
|
147
|
+
owner and are used solely to indicate compatibility.
|
|
148
|
+
|
|
149
|
+
5. NO WARRANTY
|
|
150
|
+
|
|
151
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
152
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO FITNESS FOR A PARTICULAR PURPOSE AND
|
|
153
|
+
NONINFRINGEMENT.
|
|
154
|
+
|
|
155
|
+
The Software runs an agent that reads and modifies files on your device and
|
|
156
|
+
executes commands. Which directories it may touch and which actions it may
|
|
157
|
+
take is your responsibility.
|
|
158
|
+
|
|
159
|
+
6. LIMITATION OF LIABILITY
|
|
160
|
+
|
|
161
|
+
IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY DAMAGES, INCLUDING
|
|
162
|
+
LOSS OF DATA OR LOST PROFITS, ARISING FROM THE USE OF OR INABILITY TO USE
|
|
163
|
+
THE SOFTWARE.
|
|
164
|
+
|
|
165
|
+
7. TERMINATION
|
|
166
|
+
|
|
167
|
+
This agreement terminates automatically if you breach section 3. Upon
|
|
168
|
+
termination you must delete all copies of the Software.
|
|
169
|
+
|
|
170
|
+
8. CHANGES
|
|
171
|
+
|
|
172
|
+
The copyright holder may change the terms for future versions. The version
|
|
173
|
+
you received is governed by the terms shipped with it.
|
package/README.md
CHANGED
|
@@ -1,56 +1,56 @@
|
|
|
1
|
-
# ccv — Claude Code Visual
|
|
2
|
-
|
|
3
|
-
Интерфейс к Claude Code в браузере: сессии агента в каталогах проектов, дерево
|
|
4
|
-
файлов и редактор рядом с разговором. Работает на вашей машине — хост
|
|
5
|
-
поднимается локально, а страница открывается по `127.0.0.1`.
|
|
6
|
-
|
|
7
|
-
## Установка
|
|
8
|
-
|
|
9
|
-
```
|
|
10
|
-
npm install --global @i14ks/ccv
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
Нужен [Node.js](https://nodejs.org) 22.5 или новее. Команда в консоли — `ccv`,
|
|
14
|
-
имя пакета на неё не влияет.
|
|
15
|
-
|
|
16
|
-
Проще — одной строкой с сайта, она ещё и разберётся с PATH и с движком сессий:
|
|
17
|
-
|
|
18
|
-
```
|
|
19
|
-
curl -fsSL https://claudevisual.com/install.sh | sh # macOS, Linux
|
|
20
|
-
irm https://claudevisual.com/install.ps1 | iex # Windows
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
## Запуск
|
|
24
|
-
|
|
25
|
-
```
|
|
26
|
-
ccv
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
Поднимает хост и открывает вкладку. Повторный `ccv` второй хост не поднимает —
|
|
30
|
-
открывает вкладку в уже работающем.
|
|
31
|
-
|
|
32
|
-
```
|
|
33
|
-
ccv --help все опции
|
|
34
|
-
ccv --claude чем будут подниматься сессии
|
|
35
|
-
ccv --port 8788 другой порт
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
## Нужен установленный Claude Code
|
|
39
|
-
|
|
40
|
-
`ccv` — интерфейс к [Claude Code](https://claude.com/claude-code), а не его
|
|
41
|
-
замена: сессии поднимает он. Найденный в системе CLI используется как есть;
|
|
42
|
-
если его нет, приезжает бинарник из Agent SDK — те самые 254 МБ, ради которых
|
|
43
|
-
установщик и спрашивает.
|
|
44
|
-
|
|
45
|
-
Переменные на случай, когда автоматика ошиблась: `CCV_CLAUDE_PATH` — взять
|
|
46
|
-
указанный CLI, `CCV_BUNDLED_CLAUDE=1` — принудительно встроенный.
|
|
47
|
-
|
|
48
|
-
## Условия
|
|
49
|
-
|
|
50
|
-
Пользоваться можно свободно, в том числе в коммерческой работе; то, что вы
|
|
51
|
-
создаёте с помощью программы, принадлежит вам. Распространять, изменять и
|
|
52
|
-
форкать саму программу нельзя — условия целиком в файле `LICENSE` внутри
|
|
53
|
-
пакета. Сторонний код и его лицензии перечислены в `THIRD-PARTY-NOTICES.md`.
|
|
54
|
-
|
|
55
|
-
Не продукт Anthropic. Claude и Claude Code — товарные знаки Anthropic,
|
|
56
|
-
используются только для указания на совместимость.
|
|
1
|
+
# ccv — Claude Code Visual
|
|
2
|
+
|
|
3
|
+
Интерфейс к Claude Code в браузере: сессии агента в каталогах проектов, дерево
|
|
4
|
+
файлов и редактор рядом с разговором. Работает на вашей машине — хост
|
|
5
|
+
поднимается локально, а страница открывается по `127.0.0.1`.
|
|
6
|
+
|
|
7
|
+
## Установка
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
npm install --global @i14ks/ccv
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Нужен [Node.js](https://nodejs.org) 22.5 или новее. Команда в консоли — `ccv`,
|
|
14
|
+
имя пакета на неё не влияет.
|
|
15
|
+
|
|
16
|
+
Проще — одной строкой с сайта, она ещё и разберётся с PATH и с движком сессий:
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
curl -fsSL https://claudevisual.com/install.sh | sh # macOS, Linux
|
|
20
|
+
irm https://claudevisual.com/install.ps1 | iex # Windows
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Запуск
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
ccv
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Поднимает хост и открывает вкладку. Повторный `ccv` второй хост не поднимает —
|
|
30
|
+
открывает вкладку в уже работающем.
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
ccv --help все опции
|
|
34
|
+
ccv --claude чем будут подниматься сессии
|
|
35
|
+
ccv --port 8788 другой порт
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Нужен установленный Claude Code
|
|
39
|
+
|
|
40
|
+
`ccv` — интерфейс к [Claude Code](https://claude.com/claude-code), а не его
|
|
41
|
+
замена: сессии поднимает он. Найденный в системе CLI используется как есть;
|
|
42
|
+
если его нет, приезжает бинарник из Agent SDK — те самые 254 МБ, ради которых
|
|
43
|
+
установщик и спрашивает.
|
|
44
|
+
|
|
45
|
+
Переменные на случай, когда автоматика ошиблась: `CCV_CLAUDE_PATH` — взять
|
|
46
|
+
указанный CLI, `CCV_BUNDLED_CLAUDE=1` — принудительно встроенный.
|
|
47
|
+
|
|
48
|
+
## Условия
|
|
49
|
+
|
|
50
|
+
Пользоваться можно свободно, в том числе в коммерческой работе; то, что вы
|
|
51
|
+
создаёте с помощью программы, принадлежит вам. Распространять, изменять и
|
|
52
|
+
форкать саму программу нельзя — условия целиком в файле `LICENSE` внутри
|
|
53
|
+
пакета. Сторонний код и его лицензии перечислены в `THIRD-PARTY-NOTICES.md`.
|
|
54
|
+
|
|
55
|
+
Не продукт Anthropic. Claude и Claude Code — товарные знаки Anthropic,
|
|
56
|
+
используются только для указания на совместимость.
|
package/bundle/ccv.mjs
CHANGED
|
@@ -646,6 +646,57 @@ function writeTarget(input) {
|
|
|
646
646
|
const target = record.file_path ?? record.notebook_path;
|
|
647
647
|
return typeof target === "string" && target ? target : null;
|
|
648
648
|
}
|
|
649
|
+
var ASK_QUESTION_TOOL = "AskUserQuestion";
|
|
650
|
+
function parseQuestions(input) {
|
|
651
|
+
if (typeof input !== "object" || input === null)
|
|
652
|
+
return null;
|
|
653
|
+
const raw = input.questions;
|
|
654
|
+
if (!Array.isArray(raw) || raw.length === 0)
|
|
655
|
+
return null;
|
|
656
|
+
const questions = [];
|
|
657
|
+
for (const item of raw) {
|
|
658
|
+
if (typeof item !== "object" || item === null)
|
|
659
|
+
return null;
|
|
660
|
+
const { question, header, options: options2, multiSelect } = item;
|
|
661
|
+
if (typeof question !== "string" || !question)
|
|
662
|
+
return null;
|
|
663
|
+
if (!Array.isArray(options2) || options2.length === 0)
|
|
664
|
+
return null;
|
|
665
|
+
const parsed = [];
|
|
666
|
+
for (const option of options2) {
|
|
667
|
+
if (typeof option !== "object" || option === null)
|
|
668
|
+
return null;
|
|
669
|
+
const { label, description, preview } = option;
|
|
670
|
+
if (typeof label !== "string" || !label)
|
|
671
|
+
return null;
|
|
672
|
+
parsed.push({
|
|
673
|
+
label,
|
|
674
|
+
description: typeof description === "string" ? description : "",
|
|
675
|
+
...typeof preview === "string" && preview ? { preview } : {}
|
|
676
|
+
});
|
|
677
|
+
}
|
|
678
|
+
questions.push({
|
|
679
|
+
question,
|
|
680
|
+
header: typeof header === "string" ? header : "",
|
|
681
|
+
options: parsed,
|
|
682
|
+
multiSelect: multiSelect === true
|
|
683
|
+
});
|
|
684
|
+
}
|
|
685
|
+
return questions;
|
|
686
|
+
}
|
|
687
|
+
function previewAnnotations(questions, answers) {
|
|
688
|
+
const annotations = {};
|
|
689
|
+
for (const question of questions) {
|
|
690
|
+
const answer = answers[question.question];
|
|
691
|
+
if (!answer)
|
|
692
|
+
continue;
|
|
693
|
+
const chosen = question.options.filter((option) => answer.split(", ").includes(option.label));
|
|
694
|
+
if (chosen.length !== 1 || !chosen[0]?.preview)
|
|
695
|
+
continue;
|
|
696
|
+
annotations[question.question] = { preview: chosen[0].preview };
|
|
697
|
+
}
|
|
698
|
+
return annotations;
|
|
699
|
+
}
|
|
649
700
|
var USAGE_MIN_INTERVAL_MS = 2e4;
|
|
650
701
|
var ClaudeSession = class extends EventEmitter {
|
|
651
702
|
id;
|
|
@@ -898,13 +949,41 @@ var ClaudeSession = class extends EventEmitter {
|
|
|
898
949
|
parent_tool_use_id: null
|
|
899
950
|
});
|
|
900
951
|
}
|
|
901
|
-
|
|
952
|
+
/**
|
|
953
|
+
* Ответ человека на запрос прав — он же ответ на вопрос агента.
|
|
954
|
+
*
|
|
955
|
+
* `answers` осмысленны только для `AskUserQuestion`: там разрешение и есть
|
|
956
|
+
* ответ, и выбранное надо вернуть инструменту в его же аргументах. Схема
|
|
957
|
+
* аргументов у него строгая (`strictObject`), поэтому дописываем ровно те
|
|
958
|
+
* поля, которые она знает, — лишнее уронило бы вызов ZodError'ом там, где
|
|
959
|
+
* человек только что нажал кнопку.
|
|
960
|
+
*/
|
|
961
|
+
respondPermission(requestId, decision, reason, answers, annotations) {
|
|
902
962
|
const pending = this.#pendingPermissions.get(requestId);
|
|
903
963
|
if (!pending)
|
|
904
964
|
return;
|
|
905
965
|
this.#pendingPermissions.delete(requestId);
|
|
906
|
-
|
|
907
|
-
|
|
966
|
+
const answered = pending.questions && answers ? answers : null;
|
|
967
|
+
let input = pending.input;
|
|
968
|
+
if (answered) {
|
|
969
|
+
const withPreviews = {
|
|
970
|
+
...previewAnnotations(pending.questions ?? [], answered),
|
|
971
|
+
...annotations
|
|
972
|
+
};
|
|
973
|
+
input = {
|
|
974
|
+
...pending.input,
|
|
975
|
+
answers: answered,
|
|
976
|
+
...Object.keys(withPreviews).length > 0 ? { annotations: withPreviews } : {}
|
|
977
|
+
};
|
|
978
|
+
}
|
|
979
|
+
pending.resolve(decision === "allow" ? { behavior: "allow", updatedInput: input } : { behavior: "deny", message: reason ?? "\u041E\u0442\u043A\u043B\u043E\u043D\u0435\u043D\u043E \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u0435\u043C" });
|
|
980
|
+
this.#record({
|
|
981
|
+
kind: "permission.resolved",
|
|
982
|
+
requestId,
|
|
983
|
+
decision,
|
|
984
|
+
reason,
|
|
985
|
+
...answered ? { answers: answered } : {}
|
|
986
|
+
});
|
|
908
987
|
if (this.#pendingPermissions.size === 0)
|
|
909
988
|
this.#setState("running");
|
|
910
989
|
}
|
|
@@ -1135,7 +1214,23 @@ var ClaudeSession = class extends EventEmitter {
|
|
|
1135
1214
|
}
|
|
1136
1215
|
};
|
|
1137
1216
|
};
|
|
1138
|
-
|
|
1217
|
+
/**
|
|
1218
|
+
* Мост между `canUseTool` из SDK и решением человека в UI.
|
|
1219
|
+
*
|
|
1220
|
+
* Сюда же приходит и `AskUserQuestion` — вопрос агента с вариантами ответа.
|
|
1221
|
+
* Отдельного канала для него в SDK нет и не нужно: CLI объявляет этот
|
|
1222
|
+
* инструмент как `requiresUserInteraction`, а такой всегда попадает в
|
|
1223
|
+
* `canUseTool`, в любом режиме прав, — даже в `bypassPermissions`, где всё
|
|
1224
|
+
* остальное проходит молча. Проверка стоит раньше разбора режима, так что
|
|
1225
|
+
* вопрос не потеряется ни в одном из них.
|
|
1226
|
+
*
|
|
1227
|
+
* Разрешение для него значит не «выполняй», а «вот ответ»: выбранное
|
|
1228
|
+
* возвращается в `updatedInput.answers`, и уже с ним инструмент выполняется
|
|
1229
|
+
* и складывает ответ в результат вызова. Пустой `answers` (то есть простое
|
|
1230
|
+
* «Разрешить») инструмент понимает как «человек не стал отвечать» — ровно
|
|
1231
|
+
* это и происходило, пока вопросы показывались обычной карточкой прав.
|
|
1232
|
+
*/
|
|
1233
|
+
#canUseTool = (toolName, input, { signal, decisionReason, toolUseID }) => {
|
|
1139
1234
|
if (this.#options.readOnly) {
|
|
1140
1235
|
this.#record({
|
|
1141
1236
|
kind: "error",
|
|
@@ -1147,8 +1242,9 @@ var ClaudeSession = class extends EventEmitter {
|
|
|
1147
1242
|
});
|
|
1148
1243
|
}
|
|
1149
1244
|
const requestId = randomUUID();
|
|
1245
|
+
const questions = toolName === ASK_QUESTION_TOOL ? parseQuestions(input) : null;
|
|
1150
1246
|
return new Promise((resolve) => {
|
|
1151
|
-
this.#pendingPermissions.set(requestId, { resolve, toolName, input });
|
|
1247
|
+
this.#pendingPermissions.set(requestId, { resolve, toolName, input, questions });
|
|
1152
1248
|
this.#setState("waiting_permission");
|
|
1153
1249
|
this.#record({
|
|
1154
1250
|
kind: "permission.request",
|
|
@@ -1157,8 +1253,11 @@ var ClaudeSession = class extends EventEmitter {
|
|
|
1157
1253
|
input,
|
|
1158
1254
|
// Причину даёт не всякий запрос: обычный вопрос в режиме `default`
|
|
1159
1255
|
// объясняется самим режимом, а вот запрос, поднятый хуком поверх
|
|
1160
|
-
// разрешающего режима, без неё выглядит сбоем.
|
|
1161
|
-
|
|
1256
|
+
// разрешающего режима, без неё выглядит сбоем. Вопросу агента причина
|
|
1257
|
+
// не нужна вовсе: CLI объясняет его технически («requiresUserInteraction»),
|
|
1258
|
+
// а спрашивают тут не «почему», а «что выбрать».
|
|
1259
|
+
...decisionReason && !questions ? { reason: decisionReason } : {},
|
|
1260
|
+
...questions ? { questions, toolUseId: toolUseID } : {}
|
|
1162
1261
|
});
|
|
1163
1262
|
signal.addEventListener("abort", () => {
|
|
1164
1263
|
if (!this.#pendingPermissions.delete(requestId))
|
|
@@ -2429,12 +2528,16 @@ import { homedir as homedir3 } from "node:os";
|
|
|
2429
2528
|
import path9 from "node:path";
|
|
2430
2529
|
var DEFAULT_AUTO_ARCHIVE_AFTER_MS = 2 * 24 * 60 * 60 * 1e3;
|
|
2431
2530
|
var MIN_AUTO_ARCHIVE_AFTER_MS = 60 * 60 * 1e3;
|
|
2531
|
+
var MIN_AUTO_SAVE_AFTER_PAUSE_MS = 500;
|
|
2432
2532
|
var FOLDER_ACCESS = ["all", "projects", "project"];
|
|
2433
2533
|
var DEFAULT_APP_SETTINGS = {
|
|
2434
2534
|
autoArchiveAfterMs: DEFAULT_AUTO_ARCHIVE_AFTER_MS,
|
|
2435
2535
|
// Строгий режим по умолчанию: молча писать в чужой проект приложение начнёт
|
|
2436
2536
|
// только после того, как об этом попросили явно.
|
|
2437
|
-
folderAccess: "project"
|
|
2537
|
+
folderAccess: "project",
|
|
2538
|
+
// Выключено по умолчанию: сохранение — явное действие, пока человек сам не
|
|
2539
|
+
// попросил иначе.
|
|
2540
|
+
autoSaveAfterPauseMs: 0
|
|
2438
2541
|
};
|
|
2439
2542
|
var AppSettingsStore = class {
|
|
2440
2543
|
#settings = { ...DEFAULT_APP_SETTINGS };
|
|
@@ -2482,6 +2585,10 @@ function sanitize(value, fallback) {
|
|
|
2482
2585
|
if (typeof access2 === "string" && FOLDER_ACCESS.includes(access2)) {
|
|
2483
2586
|
result.folderAccess = access2;
|
|
2484
2587
|
}
|
|
2588
|
+
const autoSave = record.autoSaveAfterPauseMs;
|
|
2589
|
+
if (typeof autoSave === "number" && Number.isFinite(autoSave)) {
|
|
2590
|
+
result.autoSaveAfterPauseMs = autoSave <= 0 ? 0 : Math.max(Math.round(autoSave), MIN_AUTO_SAVE_AFTER_PAUSE_MS);
|
|
2591
|
+
}
|
|
2485
2592
|
return result;
|
|
2486
2593
|
}
|
|
2487
2594
|
function claudeHome() {
|
|
@@ -3510,7 +3617,7 @@ var HostServer = class {
|
|
|
3510
3617
|
this.#requireSession(frame.sessionId).sendPrompt(frame.text);
|
|
3511
3618
|
return;
|
|
3512
3619
|
case "permission.respond":
|
|
3513
|
-
this.#requireSession(frame.sessionId).respondPermission(frame.requestId, frame.decision, frame.reason);
|
|
3620
|
+
this.#requireSession(frame.sessionId).respondPermission(frame.requestId, frame.decision, frame.reason, frame.answers, frame.annotations);
|
|
3514
3621
|
return;
|
|
3515
3622
|
case "side.ask":
|
|
3516
3623
|
this.#ensureSide(this.#requireSession(frame.sessionId)).sendPrompt(frame.text);
|