kodu 1.1.18 → 1.1.19

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.
@@ -0,0 +1,60 @@
1
+ ---
2
+ name: kodu-ops
3
+ description: Полный справочник по `kodu ops` на русском — команды, опции и примеры
4
+ compatibility: opencode
5
+ metadata:
6
+ audience: operators
7
+ workflow: kodu
8
+ ---
9
+
10
+ # Навык Kodu Ops
11
+
12
+ **Назначение:** показать агенту, как управлять серверами через `kodu ops` без знания точных флагов. Весь текст на русском, есть детальные описания опций и готовые примеры.
13
+
14
+ ## Что я умею
15
+
16
+ - `sysinfo` собирает диагностические данные (uptime, занятость диска и памяти).
17
+ - `env` управляет файлами `.env` на сервере: выдаёт переменные, устанавливает/удаляет ключи и значения.
18
+ - `routes` редактирует маршруты Caddy: показывает список, добавляет, обновляет и удаляет блоки reverse proxy.
19
+ - `service` работает с Docker Compose: клонирует репозиторий, поднимает, останавливает, показывает логи и статус.
20
+
21
+ ## Как использовать
22
+
23
+ 1. Вызов `skill({ name: 'kodu-ops' })` отдаёт содержание этого файла агенту.
24
+ 2. Пользователь говорит простыми русскими фразами, что хочет сделать (пример ниже).
25
+ 3. Агент преобразует фразу в нужные `kodu ops` команды, вызывая каждую из них в порядке описания.
26
+ 4. Для каждой команды всегда возвращается JSON с полями `status`, `code`, `error` (при ошибке). Если что-то не так — достаточно посмотреть в `error` и повторить `kodu ops <subcommand> --help`.
27
+
28
+ ## Команды
29
+
30
+ ### sysinfo
31
+ - Флаги: `--server <имя>` (обязательно).
32
+ - Описание: собирает uptime, использование диска и памяти на удалённом сервере.
33
+ - Пример: `kodu ops sysinfo --server dev`
34
+
35
+ ### env
36
+ - Флаги: `--server <имя>`, `--action <get|set|unset>`, `--project <путь>`, `--key <ключ>` (для set/unset), `--val <значение>` (только для set).
37
+ - Описание: `get` — выводит содержимое `.env`; `set` — добавляет или обновляет переменную (заменяет значение); `unset` — удаляет переменную.
38
+ - Пример: `kodu ops env --server dev --action set --project my-app --key PORT --val 3123`
39
+
40
+ ### routes
41
+ - Флаги: `--server <имя>`, `--action <list|add|remove|update>`, `--domain <домен>` (для add/update/remove), `--upstream <host:port>` (для add/update).
42
+ - Описание: `list` — показывает `Caddyfile`, `add` — добавляет блок `domain { reverse_proxy upstream }`, `update` — изменяет upstream, `remove` — удаляет блок.
43
+ - Пример: `kodu ops routes --server dev --action add --domain api.example.com --upstream 127.0.0.1:3000`
44
+
45
+ ### service
46
+ - Флаги: `--server <имя>`, `--action <clone|pull|up|down|logs|status>`, `--project <имя>`, `--repo <url>` (для clone).
47
+ - Описание: `clone` — клонирует репозиторий и готовит проект, `up`/`down` поднимает/останавливает, `logs` показывает последние 200 строк, `status` делает `docker compose ps`, `pull` обновляет образ.
48
+ - Пример: `kodu ops service --server dev --action clone --project temp --repo https://github.com/org/repo.git`
49
+
50
+ ## Примеры сценариев
51
+
52
+ 1. «Подскажи sysinfo на сервере dev, затем установи PORT=3123 для проекта temp и добавь маршрут api.example.com → 127.0.0.1:3000.» → агент запускает `sysinfo`, `env --action set`, `routes --action add` по очереди.
53
+ 2. «Склонируй проект staff из репозитория и подними его в фоне, потом покажи статус и логи.» → агент вызывает `service clone`, `service up`, `service status`, `service logs`.
54
+ 3. «Сними переменные с my-app на prod и удали старый маршрут.» → `env --action unset`, `routes --action remove`.
55
+
56
+ ## Когда использовать
57
+
58
+ Применяйте, когда нужно администрировать сервер или проект через `kodu ops`, но вы не помните точные флаги. Просто опишите задачу на русском — навык подскажет, какие команды существует и какие опции нужны. При необходимости уточните, что вывод строго JSON, а ошибки находятся в `error`.
59
+
60
+ Также можно выполнять много действий в одном запросе: навык объясняет, что команды выполняются по порядку, так что фраза «сначала ... затем ...» корректно переведётся в соответствующую последовательность `kodu ops`.
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kodu",
3
- "version": "1.1.18",
3
+ "version": "1.1.19",
4
4
  "description": "High-performance CLI to prepare codebase for LLMs, automate reviews, and draft commits.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -17,6 +17,6 @@ export declare class OpsRoutesCommand extends CommandRunner {
17
17
  parseUpstream(value: string): string;
18
18
  run(passedParams: string[], options?: OpsRoutesOptions): Promise<void>;
19
19
  private buildEditCommand;
20
- private buildNodeScript;
20
+ private buildPythonScript;
21
21
  }
22
22
  export {};
@@ -107,48 +107,51 @@ let OpsRoutesCommand = class OpsRoutesCommand extends nest_commander_1.CommandRu
107
107
  }
108
108
  }
109
109
  buildEditCommand(params) {
110
- const script = this.buildNodeScript(params);
111
- return `node -e ${(0, ops_utils_1.shellQuote)(script)}`;
110
+ const script = this.buildPythonScript(params);
111
+ return `python3 -c ${(0, ops_utils_1.shellQuote)(script)}`;
112
112
  }
113
- buildNodeScript(params) {
113
+ buildPythonScript(params) {
114
114
  return [
115
- "const fs = require('node:fs');",
116
- "const p = require('node:path');",
117
- `const filePath = ${JSON.stringify(params.caddyfilePath)};`,
118
- `const action = ${JSON.stringify(params.action)};`,
119
- `const domain = ${JSON.stringify(params.domain)};`,
120
- `const upstream = ${JSON.stringify(params.upstream)};`,
121
- "const esc = (s) => s.replace(/[.*+?^\\$\\{\\}()|[\\]\\\\]/g, '\\\\$&');",
122
- "const read = fs.readFileSync(filePath, 'utf8');",
123
- "const domainRe = new RegExp('(^|\\n)\\\\s*' + esc(domain) + '\\s*\\\\{[\\\\s\\\\S]*?\\\\n\\\\}', 'm');",
124
- 'let text = read;',
125
- "if (action === 'add') {",
126
- ' if (domainRe.test(text)) {',
127
- " process.stderr.write('Route already exists for domain');",
128
- ' process.exit(3);',
129
- ' }',
130
- " const block = '\\n' + domain + ' {\\n reverse_proxy ' + upstream + '\\n}\\n';",
131
- ' text = text.replace(/\\s*$/g, "") + block;',
132
- "} else if (action === 'remove') {",
133
- ' if (!domainRe.test(text)) {',
134
- " process.stderr.write('Route not found');",
135
- ' process.exit(4);',
136
- ' }',
137
- " text = text.replace(domainRe, '\\n').replace(/\\n{3,}/g, '\\n\\n').replace(/^\\n+/, '');",
138
- "} else if (action === 'update') {",
139
- ' const match = text.match(domainRe);',
140
- ' if (!match) {',
141
- " process.stderr.write('Route not found');",
142
- ' process.exit(4);',
143
- ' }',
144
- ' const block = match[0];',
145
- " const updated = block.replace(/reverse_proxy\\s+[^\\n]+/, 'reverse_proxy ' + upstream);",
146
- ' text = text.replace(domainRe, updated);',
147
- '}',
148
- "const tmp = p.join(p.dirname(filePath), '.tmp-' + Date.now() + '-' + Math.random().toString(36).slice(2));",
149
- "fs.writeFileSync(tmp, text, 'utf8');",
150
- 'fs.renameSync(tmp, filePath);',
151
- "process.stdout.write(JSON.stringify({ status: 'ok' }));",
115
+ 'import json',
116
+ 'import os',
117
+ 'import random',
118
+ 'import re',
119
+ 'import sys',
120
+ 'import time',
121
+ 'from pathlib import Path',
122
+ `file_path = ${JSON.stringify(params.caddyfilePath)}`,
123
+ `action = ${JSON.stringify(params.action)}`,
124
+ `domain = ${JSON.stringify(params.domain)}`,
125
+ `upstream = ${JSON.stringify(params.upstream)}`,
126
+ 'with Path(file_path).open("r", encoding="utf-8") as handle:',
127
+ ' text = handle.read()',
128
+ 'domain_re = re.compile(r"(^|\\n)\\s*" + re.escape(domain) + r"\\s*\\{[\\s\\S]*?\\n\\}", re.MULTILINE)',
129
+ 'if action == "add":',
130
+ ' if domain_re.search(text):',
131
+ ' sys.stderr.write("Route already exists for domain")',
132
+ ' sys.exit(3)',
133
+ ' block = "\n" + domain + " {\n reverse_proxy " + upstream + "\n}\n"',
134
+ ' text = re.sub(r"\\s*$", "", text) + block',
135
+ 'elif action == "remove":',
136
+ ' if not domain_re.search(text):',
137
+ ' sys.stderr.write("Route not found")',
138
+ ' sys.exit(4)',
139
+ ' text = domain_re.sub("\n", text, count=1)',
140
+ ' text = re.sub(r"\\n{3,}", "\n\n", text)',
141
+ ' text = re.sub(r"^\\n+", "", text)',
142
+ 'elif action == "update":',
143
+ ' match = domain_re.search(text)',
144
+ ' if not match:',
145
+ ' sys.stderr.write("Route not found")',
146
+ ' sys.exit(4)',
147
+ ' block = match.group(0)',
148
+ ' updated = re.sub(r"reverse_proxy\\s+[^\\n]+", "reverse_proxy " + upstream, block, count=1)',
149
+ ' text = domain_re.sub(updated, text, count=1)',
150
+ 'tmp = os.path.join(os.path.dirname(file_path), ".tmp-" + str(int(time.time() * 1000)) + "-" + format(random.getrandbits(48), "x"))',
151
+ 'with open(tmp, "w", encoding="utf-8") as handle:',
152
+ ' handle.write(text)',
153
+ 'os.replace(tmp, file_path)',
154
+ 'print(json.dumps({"status": "ok"}))',
152
155
  ].join('\n');
153
156
  }
154
157
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ops-routes.command.js","sourceRoot":"","sources":["../../../../../src/commands/ops/subcommands/ops-routes.command.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ops-routes.command.js","sourceRoot":"","sources":["../../../../../src/commands/ops/subcommands/ops-routes.command.ts"],"names":[],"mappings":"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"}