stella-coder 5.3.1 → 5.3.2
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/COMMANDS.md +47 -0
- package/install-av.bat +17 -0
- package/install-stella-pkg.bat +21 -0
- package/oneline-av.ps1 +7 -0
- package/oneline-stella.ps1 +2 -0
- package/package.json +1 -1
- package/releases/stella-antivirus/database.mjs +871 -0
- package/releases/stella-antivirus/index.mjs +8 -0
- package/releases/stella-antivirus/install-av.bat +12 -0
- package/releases/stella-antivirus/scanner.mjs +591 -0
- package/releases/stella-antivirus/ui.mjs +570 -0
- package/releases/stella-antivirus.zip +0 -0
- package/releases/stella-coder/README.md +67 -0
- package/releases/stella-coder/adb.mjs +200 -0
- package/releases/stella-coder/autonomous-agent.mjs +550 -0
- package/releases/stella-coder/banner.mjs +46 -0
- package/releases/stella-coder/browser-control.mjs +274 -0
- package/releases/stella-coder/build.mjs +151 -0
- package/releases/stella-coder/charts.mjs +411 -0
- package/releases/stella-coder/coding-brain.mjs +753 -0
- package/releases/stella-coder/game-engine.mjs +708 -0
- package/releases/stella-coder/gdrive-backup.mjs +338 -0
- package/releases/stella-coder/git-api.mjs +407 -0
- package/releases/stella-coder/gmail.mjs +415 -0
- package/releases/stella-coder/home-assistant.mjs +168 -0
- package/releases/stella-coder/index.mjs +5810 -0
- package/releases/stella-coder/install-stella.bat +12 -0
- package/releases/stella-coder/markdown.mjs +100 -0
- package/releases/stella-coder/mcp.mjs +296 -0
- package/releases/stella-coder/package.json +67 -0
- package/releases/stella-coder/presentations.mjs +1106 -0
- package/releases/stella-coder/protect.mjs +182 -0
- package/releases/stella-coder/screen-monitor.mjs +334 -0
- package/releases/stella-coder/sea-config.json +5 -0
- package/releases/stella-coder/security.mjs +237 -0
- package/releases/stella-coder/subagents.mjs +142 -0
- package/releases/stella-coder/telegram-bot.mjs +824 -0
- package/releases/stella-coder/tg-server.mjs +116 -0
- package/releases/stella-coder/theme.mjs +91 -0
- package/releases/stella-coder/tools.mjs +3143 -0
- package/releases/stella-coder/web-parser.mjs +229 -0
- package/releases/stella-coder/yandex-maps.mjs +426 -0
- package/releases/stella-coder.zip +0 -0
- package/run-antivirus.bat +4 -0
- package/setup-antivirus.bat +64 -0
- package/setup-full.bat +65 -0
- package/setup-stella.bat +46 -0
- package/stella-cli/index.mjs +11 -1
- package/stella-cli/protect.mjs +182 -0
- package/stella.bat +3 -0
- package/tests/test-modules.mjs +101 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
@echo off
|
|
2
|
+
chcp 65001 >nul
|
|
3
|
+
echo.
|
|
4
|
+
echo ✦ Stella Coder — Installation
|
|
5
|
+
echo =============================
|
|
6
|
+
echo.
|
|
7
|
+
echo Install: npm i -g stella-coder
|
|
8
|
+
echo Or run: node stella-cli/index.mjs
|
|
9
|
+
echo.
|
|
10
|
+
echo Docs: https://a1x10.github.io/stella/
|
|
11
|
+
echo.
|
|
12
|
+
pause
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { bold, dim, italic, violet, blue, cyan, purple, gray, bgRgb, rgb } from "./theme.mjs"
|
|
2
|
+
|
|
3
|
+
const codeBg = bgRgb(30, 27, 55)
|
|
4
|
+
const codeFg = rgb(196, 181, 253)
|
|
5
|
+
|
|
6
|
+
// Inline markdown: **bold**, *italic*, `code`, [link](url)
|
|
7
|
+
export function renderInline(text) {
|
|
8
|
+
let out = text
|
|
9
|
+
out = out.replace(/\*\*([^*]+)\*\*/g, (_, s) => bold(violet(s)))
|
|
10
|
+
out = out.replace(/(^|[^*])\*([^*\n]+)\*/g, (_, p, s) => p + italic(s))
|
|
11
|
+
out = out.replace(/`([^`]+)`/g, (_, s) => codeBg(codeFg(` ${s} `)))
|
|
12
|
+
out = out.replace(/\[([^\]]+)\][(]([^)]+)[)]/g, (_, label, url) => blue(label) + dim(` (${url})`))
|
|
13
|
+
return out
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
// Block markdown renderer for a complete markdown string
|
|
17
|
+
export function renderMarkdown(md) {
|
|
18
|
+
const lines = md.split("\n")
|
|
19
|
+
const out = []
|
|
20
|
+
let inCode = false
|
|
21
|
+
let codeLang = ""
|
|
22
|
+
let codeBuf = []
|
|
23
|
+
|
|
24
|
+
for (const line of lines) {
|
|
25
|
+
const fence = line.match(/^\s*```(\w*)/)
|
|
26
|
+
if (fence) {
|
|
27
|
+
if (!inCode) {
|
|
28
|
+
inCode = true
|
|
29
|
+
codeLang = fence[1] || ""
|
|
30
|
+
codeBuf = []
|
|
31
|
+
} else {
|
|
32
|
+
inCode = false
|
|
33
|
+
const width = Math.max(...codeBuf.map((l) => l.length), codeLang.length + 2, 20)
|
|
34
|
+
out.push(purple(" ╭─") + dim(codeLang ? ` ${codeLang} ` : "") + purple("─".repeat(Math.max(width - codeLang.length, 2)) + "╮"))
|
|
35
|
+
for (const cl of codeBuf) {
|
|
36
|
+
out.push(purple(" │ ") + codeFg(cl) + " ".repeat(width - cl.length + 1) + purple("│"))
|
|
37
|
+
}
|
|
38
|
+
out.push(purple(" ╰" + "─".repeat(width + 3) + "╯"))
|
|
39
|
+
}
|
|
40
|
+
continue
|
|
41
|
+
}
|
|
42
|
+
if (inCode) {
|
|
43
|
+
codeBuf.push(line)
|
|
44
|
+
continue
|
|
45
|
+
}
|
|
46
|
+
const h = line.match(/^(#{1,4})\s+(.*)/)
|
|
47
|
+
if (h) {
|
|
48
|
+
out.push("")
|
|
49
|
+
out.push(bold(violet(h[2])))
|
|
50
|
+
continue
|
|
51
|
+
}
|
|
52
|
+
const li = line.match(/^(\s*)[-*]\s+(.*)/)
|
|
53
|
+
if (li) {
|
|
54
|
+
out.push(li[1] + violet("•") + " " + renderInline(li[2]))
|
|
55
|
+
continue
|
|
56
|
+
}
|
|
57
|
+
const ol = line.match(/^(\s*)(\d+)\.\s+(.*)/)
|
|
58
|
+
if (ol) {
|
|
59
|
+
out.push(ol[1] + blue(ol[2] + ".") + " " + renderInline(ol[3]))
|
|
60
|
+
continue
|
|
61
|
+
}
|
|
62
|
+
const bq = line.match(/^\s*>\s?(.*)/)
|
|
63
|
+
if (bq) {
|
|
64
|
+
out.push(purple(" ▎") + dim(renderInline(bq[1])))
|
|
65
|
+
continue
|
|
66
|
+
}
|
|
67
|
+
if (/^\s*(---|\*\*\*)\s*$/.test(line)) {
|
|
68
|
+
out.push(dim(" " + "─".repeat(40)))
|
|
69
|
+
continue
|
|
70
|
+
}
|
|
71
|
+
out.push(renderInline(line))
|
|
72
|
+
}
|
|
73
|
+
if (inCode && codeBuf.length) {
|
|
74
|
+
for (const cl of codeBuf) out.push(codeFg(" " + cl))
|
|
75
|
+
}
|
|
76
|
+
return out.join("\n")
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Streaming renderer: buffers text and flushes rendered lines as they complete
|
|
80
|
+
export function createStreamRenderer(write) {
|
|
81
|
+
let buf = ""
|
|
82
|
+
return {
|
|
83
|
+
push(delta) {
|
|
84
|
+
buf += delta
|
|
85
|
+
const idx = buf.lastIndexOf("\n")
|
|
86
|
+
if (idx === -1) return
|
|
87
|
+
// Don't flush while inside an unclosed code fence
|
|
88
|
+
const flushable = buf.slice(0, idx + 1)
|
|
89
|
+
const fences = (flushable.match(/```/g) || []).length
|
|
90
|
+
if (fences % 2 !== 0) return
|
|
91
|
+
write(renderMarkdown(flushable.replace(/\n$/, "")) + "\n")
|
|
92
|
+
buf = buf.slice(idx + 1)
|
|
93
|
+
},
|
|
94
|
+
flush() {
|
|
95
|
+
if (buf.trim()) write(renderMarkdown(buf) + "\n")
|
|
96
|
+
else if (buf) write(buf)
|
|
97
|
+
buf = ""
|
|
98
|
+
},
|
|
99
|
+
}
|
|
100
|
+
}
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
import fs from "node:fs"
|
|
2
|
+
import path from "node:path"
|
|
3
|
+
import os from "node:os"
|
|
4
|
+
import { execSync } from "node:child_process"
|
|
5
|
+
|
|
6
|
+
// Конфигурация MCP серверов
|
|
7
|
+
const MCP_CONFIG_PATH = path.join(os.homedir(), ".stella", "mcp.json")
|
|
8
|
+
|
|
9
|
+
// Дефолтные MCP серверы
|
|
10
|
+
const DEFAULT_SERVERS = {
|
|
11
|
+
"filesystem": {
|
|
12
|
+
command: "npx",
|
|
13
|
+
args: ["-y", "@modelcontextprotocol/server-filesystem", process.cwd()],
|
|
14
|
+
description: "Доступ к файловой системе",
|
|
15
|
+
icon: "📁",
|
|
16
|
+
},
|
|
17
|
+
"github": {
|
|
18
|
+
command: "npx",
|
|
19
|
+
args: ["-y", "@modelcontextprotocol/server-github"],
|
|
20
|
+
env: { GITHUB_TOKEN: process.env.GITHUB_TOKEN || "" },
|
|
21
|
+
description: "Интеграция с GitHub",
|
|
22
|
+
icon: "🐙",
|
|
23
|
+
},
|
|
24
|
+
"memory": {
|
|
25
|
+
command: "npx",
|
|
26
|
+
args: ["-y", "@modelcontextprotocol/server-memory"],
|
|
27
|
+
description: "Долгосрочная память",
|
|
28
|
+
icon: "🧠",
|
|
29
|
+
},
|
|
30
|
+
"brave-search": {
|
|
31
|
+
command: "npx",
|
|
32
|
+
args: ["-y", "@modelcontextprotocol/server-brave-search"],
|
|
33
|
+
env: { BRAVE_API_KEY: process.env.BRAVE_API_KEY || "" },
|
|
34
|
+
description: "Поиск в интернете (Brave)",
|
|
35
|
+
icon: "🔍",
|
|
36
|
+
},
|
|
37
|
+
"postgres": {
|
|
38
|
+
command: "npx",
|
|
39
|
+
args: ["-y", "@modelcontextprotocol/server-postgres", process.env.DATABASE_URL || ""],
|
|
40
|
+
description: "PostgreSQL база данных",
|
|
41
|
+
icon: "🐘",
|
|
42
|
+
},
|
|
43
|
+
"sqlite": {
|
|
44
|
+
command: "npx",
|
|
45
|
+
args: ["-y", "@modelcontextprotocol/server-sqlite", "--db-path", "database.db"],
|
|
46
|
+
description: "SQLite база данных",
|
|
47
|
+
icon: "💾",
|
|
48
|
+
},
|
|
49
|
+
"puppeteer": {
|
|
50
|
+
command: "npx",
|
|
51
|
+
args: ["-y", "@modelcontextprotocol/server-puppeteer"],
|
|
52
|
+
description: "Браузер automation (Puppeteer)",
|
|
53
|
+
icon: "🌐",
|
|
54
|
+
},
|
|
55
|
+
"fetch": {
|
|
56
|
+
command: "npx",
|
|
57
|
+
args: ["-y", "@modelcontextprotocol/server-fetch"],
|
|
58
|
+
description: "HTTP запросы",
|
|
59
|
+
icon: "📤",
|
|
60
|
+
},
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
class MCPManager {
|
|
64
|
+
constructor() {
|
|
65
|
+
this.servers = new Map()
|
|
66
|
+
this.tools = new Map()
|
|
67
|
+
this.config = this.loadConfig()
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
loadConfig() {
|
|
71
|
+
try {
|
|
72
|
+
if (fs.existsSync(MCP_CONFIG_PATH)) {
|
|
73
|
+
return JSON.parse(fs.readFileSync(MCP_CONFIG_PATH, "utf8"))
|
|
74
|
+
}
|
|
75
|
+
} catch {}
|
|
76
|
+
return { servers: {} }
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
saveConfig() {
|
|
80
|
+
const dir = path.dirname(MCP_CONFIG_PATH)
|
|
81
|
+
if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true })
|
|
82
|
+
fs.writeFileSync(MCP_CONFIG_PATH, JSON.stringify(this.config, null, 2), "utf8")
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// Регистрация сервера
|
|
86
|
+
async addServer(name, serverConfig) {
|
|
87
|
+
this.config.servers[name] = {
|
|
88
|
+
command: serverConfig.command,
|
|
89
|
+
args: serverConfig.args || [],
|
|
90
|
+
env: serverConfig.env || {},
|
|
91
|
+
description: serverConfig.description || "",
|
|
92
|
+
icon: serverConfig.icon || "🔌",
|
|
93
|
+
}
|
|
94
|
+
this.saveConfig()
|
|
95
|
+
return { success: true, message: `Сервер "${name}" добавлен` }
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// Удаление сервера
|
|
99
|
+
async removeServer(name) {
|
|
100
|
+
if (this.config.servers[name]) {
|
|
101
|
+
delete this.config.servers[name]
|
|
102
|
+
this.saveConfig()
|
|
103
|
+
this.servers.delete(name)
|
|
104
|
+
return { success: true, message: `Сервер "${name}" удалён` }
|
|
105
|
+
}
|
|
106
|
+
return { error: `Сервер "${name}" не найден` }
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// Запуск сервера (симуляция для CLI)
|
|
110
|
+
async startServer(name) {
|
|
111
|
+
const server = this.config.servers[name] || DEFAULT_SERVERS[name]
|
|
112
|
+
if (!server) {
|
|
113
|
+
return { error: `Сервер "${name}" не найден` }
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
console.log(`\n 🔌 Запуск MCP сервера: ${name}`)
|
|
117
|
+
console.log(` ${server.description}`)
|
|
118
|
+
|
|
119
|
+
// Проверяем доступность
|
|
120
|
+
try {
|
|
121
|
+
const cmd = `${server.command} ${server.args.join(" ")} --help`
|
|
122
|
+
execSync(cmd, { stdio: "pipe", timeout: 5000 })
|
|
123
|
+
this.servers.set(name, { status: "running", config: server })
|
|
124
|
+
console.log(` ✓ Сервер "${name}" запущен\n`)
|
|
125
|
+
return { success: true, status: "running" }
|
|
126
|
+
} catch (err) {
|
|
127
|
+
console.log(` ⚠ Сервер "${name}" требует установку зависимостей`)
|
|
128
|
+
console.log(` Выполните: ${server.command} ${server.args.join(" ")}\n`)
|
|
129
|
+
this.servers.set(name, { status: "installed", config: server })
|
|
130
|
+
return { success: true, status: "installed" }
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// Остановка сервера
|
|
135
|
+
async stopServer(name) {
|
|
136
|
+
this.servers.delete(name)
|
|
137
|
+
return { success: true, message: `Сервер "${name}" остановлен` }
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// Получение инструментов сервера
|
|
141
|
+
getServerTools(name) {
|
|
142
|
+
const serverTools = {
|
|
143
|
+
"filesystem": [
|
|
144
|
+
{ name: "fs_read_file", description: "Чтение файла через MCP" },
|
|
145
|
+
{ name: "fs_write_file", description: "Запись файла через MCP" },
|
|
146
|
+
{ name: "fs_list_directory", description: "Список файлов" },
|
|
147
|
+
{ name: "fs_search_files", description: "Поиск файлов" },
|
|
148
|
+
],
|
|
149
|
+
"github": [
|
|
150
|
+
{ name: "gh_create_repo", description: "Создать репозиторий" },
|
|
151
|
+
{ name: "gh_create_issue", description: "Создать issue" },
|
|
152
|
+
{ name: "gh_create_pr", description: "Создать pull request" },
|
|
153
|
+
{ name: "gh_list_issues", description: "Список issues" },
|
|
154
|
+
{ name: "gh_search_code", description: "Поиск кода" },
|
|
155
|
+
],
|
|
156
|
+
"memory": [
|
|
157
|
+
{ name: "mem_store", description: "Сохранить в память" },
|
|
158
|
+
{ name: "mem_retrieve", description: "Из памяти" },
|
|
159
|
+
{ name: "mem_search", description: "Поиск в памяти" },
|
|
160
|
+
],
|
|
161
|
+
"brave-search": [
|
|
162
|
+
{ name: "brave_web_search", description: "Поиск в интернете" },
|
|
163
|
+
{ name: "brave_local_search", description: "Локальный поиск" },
|
|
164
|
+
],
|
|
165
|
+
"puppeteer": [
|
|
166
|
+
{ name: "pup_navigate", description: "Открыть страницу" },
|
|
167
|
+
{ name: "pup_screenshot", description: "Скриншот страницы" },
|
|
168
|
+
{ name: "pup_click", description: "Клик по элементу" },
|
|
169
|
+
{ name: "pup_type", description: "Ввод текста" },
|
|
170
|
+
{ name: "pup_evaluate", description: "Выполнить JS в браузере" },
|
|
171
|
+
],
|
|
172
|
+
"fetch": [
|
|
173
|
+
{ name: "fetch_get", description: "GET запрос" },
|
|
174
|
+
{ name: "fetch_post", description: "POST запрос" },
|
|
175
|
+
],
|
|
176
|
+
}
|
|
177
|
+
return serverTools[name] || []
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
// Список серверов
|
|
181
|
+
listServers() {
|
|
182
|
+
const all = { ...DEFAULT_SERVERS, ...this.config.servers }
|
|
183
|
+
return Object.entries(all).map(([name, config]) => ({
|
|
184
|
+
name,
|
|
185
|
+
...config,
|
|
186
|
+
status: this.servers.get(name)?.status || "stopped",
|
|
187
|
+
}))
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
// Список всех доступных инструментов
|
|
191
|
+
getAllTools() {
|
|
192
|
+
const tools = []
|
|
193
|
+
for (const [serverName] of this.servers) {
|
|
194
|
+
const serverTools = this.getServerTools(serverName)
|
|
195
|
+
tools.push(...serverTools.map(t => ({ ...t, server: serverName })))
|
|
196
|
+
}
|
|
197
|
+
return tools
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
// Экспорт singleton
|
|
202
|
+
export const mcp = new MCPManager()
|
|
203
|
+
|
|
204
|
+
// Команды MCP для CLI
|
|
205
|
+
export const MCP_COMMANDS = {
|
|
206
|
+
"/mcp": {
|
|
207
|
+
description: "Управление MCP серверами",
|
|
208
|
+
handler: async (args) => {
|
|
209
|
+
const [subcommand, ...rest] = args.split(" ")
|
|
210
|
+
|
|
211
|
+
switch (subcommand) {
|
|
212
|
+
case "list":
|
|
213
|
+
case "ls": {
|
|
214
|
+
const servers = mcp.listServers()
|
|
215
|
+
console.log("\n MCP Серверы:\n")
|
|
216
|
+
for (const s of servers) {
|
|
217
|
+
const status = s.status === "running" ? "🟢" : s.status === "installed" ? "🟡" : "🔴"
|
|
218
|
+
console.log(` ${status} ${s.icon || "🔌"} ${s.name}`)
|
|
219
|
+
console.log(` ${s.description}`)
|
|
220
|
+
console.log(` ${s.command} ${s.args.join(" ")}\n`)
|
|
221
|
+
}
|
|
222
|
+
return
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
case "start": {
|
|
226
|
+
const name = rest[0]
|
|
227
|
+
if (!name) { console.log(" Использование: /mcp start <имя>"); return }
|
|
228
|
+
await mcp.startServer(name)
|
|
229
|
+
return
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
case "stop": {
|
|
233
|
+
const name = rest[0]
|
|
234
|
+
if (!name) { console.log(" Использование: /mcp stop <имя>"); return }
|
|
235
|
+
await mcp.stopServer(name)
|
|
236
|
+
console.log(` ✓ Сервер "${name}" остановлен`)
|
|
237
|
+
return
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
case "add": {
|
|
241
|
+
const [name, command, ...args] = rest
|
|
242
|
+
if (!name || !command) {
|
|
243
|
+
console.log(" Использование: /mcp add <имя> <команда> [аргументы...]")
|
|
244
|
+
return
|
|
245
|
+
}
|
|
246
|
+
await mcp.addServer(name, { command, args, description: `Custom server: ${name}` })
|
|
247
|
+
console.log(` ✓ Сервер "${name}" добавлен`)
|
|
248
|
+
return
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
case "remove":
|
|
252
|
+
case "rm": {
|
|
253
|
+
const name = rest[0]
|
|
254
|
+
if (!name) { console.log(" Использование: /mcp remove <имя>"); return }
|
|
255
|
+
await mcp.removeServer(name)
|
|
256
|
+
console.log(` ✓ Сервер "${name}" удалён`)
|
|
257
|
+
return
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
case "tools": {
|
|
261
|
+
const tools = mcp.getAllTools()
|
|
262
|
+
if (tools.length === 0) {
|
|
263
|
+
console.log("\n Нет подключённых серверов. Запустите: /mcp start <имя>\n")
|
|
264
|
+
return
|
|
265
|
+
}
|
|
266
|
+
console.log("\n Доступные MCP инструменты:\n")
|
|
267
|
+
for (const t of tools) {
|
|
268
|
+
console.log(` 🔧 ${t.name} (${t.server})`)
|
|
269
|
+
console.log(` ${t.description}\n`)
|
|
270
|
+
}
|
|
271
|
+
return
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
default:
|
|
275
|
+
console.log(`
|
|
276
|
+
MCP (Model Context Protocol) — подключение к внешним серверам
|
|
277
|
+
|
|
278
|
+
Команды:
|
|
279
|
+
/mcp list — список серверов
|
|
280
|
+
/mcp start <имя> — запустить сервер
|
|
281
|
+
/mcp stop <имя> — остановить сервер
|
|
282
|
+
/mcp add <имя> <команда> [args] — добавить сервер
|
|
283
|
+
/mcp remove <имя> — удалить сервер
|
|
284
|
+
/mcp tools — список инструментов
|
|
285
|
+
|
|
286
|
+
Популярные серверы:
|
|
287
|
+
filesystem — файловая система
|
|
288
|
+
github — GitHub API
|
|
289
|
+
memory — долгосрочная память
|
|
290
|
+
puppeteer — браузер automation
|
|
291
|
+
fetch — HTTP запросы
|
|
292
|
+
`)
|
|
293
|
+
}
|
|
294
|
+
},
|
|
295
|
+
},
|
|
296
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "stella-coder",
|
|
3
|
+
"version": "5.3.1",
|
|
4
|
+
"private": false,
|
|
5
|
+
"description": "Stella Coder 5.0 — AI coding agent with Telegram bot, huge context, TDD, Git ecosystem, presentations, computer control, smart home, Office automation, and antivirus",
|
|
6
|
+
"main": "stella-cli/index.mjs",
|
|
7
|
+
"bin": {
|
|
8
|
+
"stella": "stella-cli/index.mjs"
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"stella": "node stella-cli/index.mjs",
|
|
12
|
+
"stellar-av": "node antimalware/index.mjs",
|
|
13
|
+
"dev": "next dev",
|
|
14
|
+
"build": "next build",
|
|
15
|
+
"build:cli": "node stella-cli/build.mjs",
|
|
16
|
+
"start": "next start",
|
|
17
|
+
"lint": "eslint ."
|
|
18
|
+
},
|
|
19
|
+
"keywords": [
|
|
20
|
+
"ai",
|
|
21
|
+
"coding",
|
|
22
|
+
"agent",
|
|
23
|
+
"terminal",
|
|
24
|
+
"smart-home",
|
|
25
|
+
"antivirus"
|
|
26
|
+
],
|
|
27
|
+
"author": "codex alex",
|
|
28
|
+
"license": "MIT",
|
|
29
|
+
"dependencies": {
|
|
30
|
+
"@ai-sdk/openai": "^4.0.7",
|
|
31
|
+
"@ai-sdk/openai-compatible": "^3.0.5",
|
|
32
|
+
"@ai-sdk/react": "^4.0.16",
|
|
33
|
+
"@base-ui/react": "^1.5.0",
|
|
34
|
+
"@vercel/analytics": "1.6.1",
|
|
35
|
+
"ai": "^7.0.15",
|
|
36
|
+
"class-variance-authority": "^0.7.1",
|
|
37
|
+
"clsx": "^2.1.1",
|
|
38
|
+
"gsap": "^3.15.0",
|
|
39
|
+
"jsdom": "^29.1.1",
|
|
40
|
+
"lucide-react": "^1.16.0",
|
|
41
|
+
"next": "16.2.6",
|
|
42
|
+
"react": "^19",
|
|
43
|
+
"react-dom": "^19",
|
|
44
|
+
"shadcn": "^4.8.0",
|
|
45
|
+
"tailwind-merge": "^3.3.1",
|
|
46
|
+
"three": "^0.185.1",
|
|
47
|
+
"tw-animate-css": "^1.4.0",
|
|
48
|
+
"zod": "^4.4.3"
|
|
49
|
+
},
|
|
50
|
+
"devDependencies": {
|
|
51
|
+
"@eslint/eslintrc": "^3.3.0",
|
|
52
|
+
"@tailwindcss/postcss": "^4.2.0",
|
|
53
|
+
"@types/node": "^24",
|
|
54
|
+
"@types/react": "^19",
|
|
55
|
+
"@types/react-dom": "^19",
|
|
56
|
+
"eslint": "^9.28.0",
|
|
57
|
+
"eslint-config-next": "^16.2.0",
|
|
58
|
+
"postcss": "^8.5",
|
|
59
|
+
"tailwindcss": "^4.2.0",
|
|
60
|
+
"typescript": "5.7.3"
|
|
61
|
+
},
|
|
62
|
+
"pnpm": {
|
|
63
|
+
"overrides": {
|
|
64
|
+
"hono": "4.12.25"
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|