Initial project blueprint
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
# Принцип: нет жестких запретов в коде
|
||||
|
||||
## Требование
|
||||
|
||||
В проекте не должно быть hardcoded-запретов вида:
|
||||
|
||||
```text
|
||||
if tool == "command.run": deny
|
||||
if sql contains "DELETE": deny
|
||||
if action == "filesystem": deny
|
||||
```
|
||||
|
||||
Так делать нельзя.
|
||||
|
||||
## Правильный подход
|
||||
|
||||
Код должен классифицировать действие и спросить policy engine.
|
||||
|
||||
```text
|
||||
action → classify → policy.check → decision
|
||||
```
|
||||
|
||||
Policy decision:
|
||||
|
||||
```json
|
||||
{
|
||||
"decision": "allow | confirm | manual | disabled_by_config",
|
||||
"reason": "string",
|
||||
"requires_confirmation": true,
|
||||
"preview": {}
|
||||
}
|
||||
```
|
||||
|
||||
## Пример
|
||||
|
||||
Команда:
|
||||
|
||||
```text
|
||||
file.write D:/Projects/test.txt
|
||||
```
|
||||
|
||||
Tool возвращает metadata:
|
||||
|
||||
```json
|
||||
{
|
||||
"risk_level": "write",
|
||||
"resource": "filesystem",
|
||||
"preview_available": true
|
||||
}
|
||||
```
|
||||
|
||||
Policy проекта:
|
||||
|
||||
```json
|
||||
{
|
||||
"filesystem": {
|
||||
"mode": "confirm"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Результат:
|
||||
|
||||
```text
|
||||
Нужно подтверждение.
|
||||
```
|
||||
|
||||
Если policy:
|
||||
|
||||
```json
|
||||
{
|
||||
"filesystem": {
|
||||
"mode": "full_auto"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Результат:
|
||||
|
||||
```text
|
||||
Выполнить сразу.
|
||||
```
|
||||
|
||||
## Режимы
|
||||
|
||||
```text
|
||||
full_auto — выполнять без подтверждения
|
||||
confirm — спросить подтверждение
|
||||
manual — показать план и ждать ручного запуска
|
||||
disabled — отключено настройкой
|
||||
```
|
||||
|
||||
`disabled` допустим только как настройка проекта, а не как зашитый запрет.
|
||||
|
||||
## Зачем
|
||||
|
||||
Пользователь сам выбирает уровень риска.
|
||||
|
||||
Система не должна становиться бесполезной из-за того, что разработчик заранее запретил все потенциально опасные действия.
|
||||
Reference in New Issue
Block a user