Add AI-first REPL with JSON mode
This commit is contained in:
+194
@@ -0,0 +1,194 @@
|
||||
# AI-First Clojure/Nim
|
||||
|
||||
## Философия
|
||||
|
||||
Този проект не е за човешки програмисти с Emacs/VS Code. Този проект е за **AI агенти**, които работят през терминал.
|
||||
|
||||
### Защо AI-First?
|
||||
|
||||
- AI не може да клика в GUI. AI работи с текст, команди и структурирани данни.
|
||||
- AI не се нуждае от syntax highlighting. AI се нуждае от **структуриран изход**.
|
||||
- AI не иска REPL с цветни prompt-ове. AI иска **EDN/JSON отговори** с метаданни.
|
||||
- AI commit-ва кода автоматично. Нуждаем се от **git-aware REPL**.
|
||||
|
||||
## Архитектура на AI REPL
|
||||
|
||||
```
|
||||
┌─────────────┐ EDN/JSON ┌─────────────────┐
|
||||
│ AI Agent │ ◄────────────────► │ cljnim repl │
|
||||
│ (терминал) │ structured I/O │ (structured) │
|
||||
└─────────────┘ └────────┬────────┘
|
||||
│
|
||||
┌──────▼──────┐
|
||||
│ Compiler │
|
||||
│ + Eval │
|
||||
└──────┬──────┘
|
||||
│
|
||||
┌──────▼──────┐
|
||||
│ Git Ops │
|
||||
│ (вградени) │
|
||||
└─────────────┘
|
||||
```
|
||||
|
||||
## Принципи
|
||||
|
||||
### 1. Структуриран I/O
|
||||
|
||||
Всеки вход и изход е структуриран:
|
||||
|
||||
```edn
|
||||
;; AI изпраща:
|
||||
{:op :eval
|
||||
:form "(+ 1 2 3)"
|
||||
:ns "user"
|
||||
:request-id "uuid-1234"}
|
||||
|
||||
;; REPL връща:
|
||||
{:status :ok
|
||||
:request-id "uuid-1234"
|
||||
:result {:type :int
|
||||
:value 6
|
||||
:printed "6"}
|
||||
:meta {:ms 0.003
|
||||
:form "(+ 1 2 3)"
|
||||
:ns "user"}}
|
||||
|
||||
;; Грешка:
|
||||
{:status :error
|
||||
:request-id "uuid-1234"
|
||||
:error {:type :compiler/unknown-symbol
|
||||
:symbol "unknwon-fn"
|
||||
:line 1
|
||||
:column 5
|
||||
:message "Unknown symbol: unknwon-fn"
|
||||
:trace []}}
|
||||
```
|
||||
|
||||
### 2. Batch Evaluation
|
||||
|
||||
AI може да изпрати множество форми наведнъж:
|
||||
|
||||
```edn
|
||||
{:op :eval-batch
|
||||
:forms ["(defn add [a b] (+ a b))"
|
||||
"(add 10 20)"
|
||||
"(def data {:x 1 :y 2})"]
|
||||
:mode :compile}
|
||||
```
|
||||
|
||||
### 3. Git-Aware REPL
|
||||
|
||||
Вградени git операции без напускане на REPL:
|
||||
|
||||
```clojure
|
||||
;; Clojure форми, които управляват git:
|
||||
(git/status)
|
||||
;; => {:branch "main" :untracked ["src/new.clj"] :modified []}
|
||||
|
||||
(git/diff)
|
||||
;; => {:files [{:path "src/core.clj" :added 5 :removed 2}]}
|
||||
|
||||
(git/commit "Add factorial" {:push true})
|
||||
;; => {:sha "a1b2c3d" :pushed true}
|
||||
```
|
||||
|
||||
### 4. Self-Describing Система
|
||||
|
||||
AI винаги може да попита системата какво може:
|
||||
|
||||
```clojure
|
||||
(apropos "map")
|
||||
;; => [{:name "map" :ns "clojure.core" :type :function}
|
||||
;; {:name "map?" :ns "clojure.core" :type :function}
|
||||
;; {:name "mapv" :ns "clojure.core" :type :function}]
|
||||
|
||||
(doc map)
|
||||
;; => {:name "map"
|
||||
;; :ns "clojure.core"
|
||||
;; :doc "Returns a lazy sequence..."
|
||||
;; :args [["f" "coll"] ["f" "c1" "c2" "& colls"]]
|
||||
;; :source "(defn map [f coll] ...)"}
|
||||
```
|
||||
|
||||
### 5. File Operations през REPL
|
||||
|
||||
AI не отваря редактор. AI манипулира файлове през Clojure:
|
||||
|
||||
```clojure
|
||||
(file/read "src/core.clj")
|
||||
;; => "(ns core)..."
|
||||
|
||||
(file/write "src/new.clj" "(ns new)")
|
||||
;; => {:bytes-written 8 :path "src/new.clj"}
|
||||
|
||||
(file/ls "src")
|
||||
;; => ["types.nim" "reader.nim" "emitter.nim"]
|
||||
```
|
||||
|
||||
### 6. Tool-Call Формат
|
||||
|
||||
REPL може да работи в `tool-call` режим за директна интеграция с AI frameworks:
|
||||
|
||||
```json
|
||||
{
|
||||
"tool": "cljnim/eval",
|
||||
"arguments": {
|
||||
"code": "(defn fib [n] (if (< n 2) n (+ (fib (- n 1)) (fib (- n 2)))))",
|
||||
"mode": "compile"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Режими на REPL
|
||||
|
||||
### Човешки режим (default)
|
||||
```
|
||||
cljnim> (+ 1 2)
|
||||
3
|
||||
cljnim> (defn square [x] (* x x))
|
||||
#'user/square
|
||||
```
|
||||
|
||||
### AI режим (`--ai` или `--json`)
|
||||
```bash
|
||||
$ cljnim repl --json
|
||||
{"status":"ready","ns":"user"}
|
||||
> (defn add [a b] (+ a b))
|
||||
{"status":"ok","result":{"type":"var","name":"add","ns":"user"}}
|
||||
> (add 10 20)
|
||||
{"status":"ok","result":{"type":"int","value":30,"printed":"30"},"meta":{"ms":0.001}}
|
||||
```
|
||||
|
||||
### Batch режим
|
||||
```bash
|
||||
$ cljnim run-batch script.clj --format json
|
||||
[{"form":"(defn f [x] x)","status":"ok","result":"#'user/f"}
|
||||
{"form":"(f 42)","status":"ok","result":{"type":"int","value":42}}]
|
||||
```
|
||||
|
||||
## Интеграция с AI Workflow
|
||||
|
||||
```bash
|
||||
# 1. AI клонира репото
|
||||
git clone git@gitlab.com:balvatar/lisp-nim.git
|
||||
cd lisp-nim
|
||||
|
||||
# 2. AI стартира REPL в JSON режим
|
||||
cljnim repl --json
|
||||
|
||||
# 3. AI изпраща форми, получава структурирани отговори
|
||||
# 4. AI пише файлове през (file/write ...)
|
||||
# 5. AI commit-ва през (git/commit ...)
|
||||
# 6. AI push-ва през (git/push)
|
||||
```
|
||||
|
||||
## Защо това е бъдещето?
|
||||
|
||||
| Аспект | Човешки IDE | AI Terminal |
|
||||
|---|---|---|
|
||||
| Интерфейс | GUI + мишка | Текст + команды |
|
||||
| Навигация | Кликване | `(apropos ...)`, `(doc ...)` |
|
||||
| Рефакториране | Ръчно | Batch eval + git diff |
|
||||
| Тестване | Run button | `(run-tests)` структуриран отговор |
|
||||
| Commit | GUI диалог | `(git/commit "msg")` |
|
||||
| Context | Отворени файлове | REPL ns + `:context` |
|
||||
Reference in New Issue
Block a user