- bin/chats/ — nested Go module (как bin/kbsearch/)
- sync telegram — MCP JSON-RPC клиент, 31 личный чат, 922 сообщения
- import — конвертация JSONL → MD с YAML frontmatter
- index — делегирует bin/kb/index --corpus (132 leafs в brain)
- facts — regex extraction phone/email/linkedin с валидацией
(исключены: даты, суммы, номера карт, инвойсы)
- apply — oo CLI cross-check + dry-run
- Source interface для будущих WhatsApp/LinkedIn
- 4 system tests (import, facts, empty, roundtrip) — синтетические данные
- bin/chat — build+exec wrapper
- docs/chat-import-plan.md — прогресс, пути к env (без секретов)
Безопасность: var/ в gitignore, credentials в env, тесты без реальных данных.
57 lines
1.2 KiB
Go
57 lines
1.2 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"flag"
|
|
"fmt"
|
|
"os"
|
|
"os/exec"
|
|
"path/filepath"
|
|
"strings"
|
|
)
|
|
|
|
func runIndex(args []string) int {
|
|
fs := flag.NewFlagSet("chats index", flag.ContinueOnError)
|
|
help := fs.Bool("help", false, "")
|
|
fs.SetOutput(os.Stderr)
|
|
if err := fs.Parse(args); err != nil {
|
|
return 2
|
|
}
|
|
if *help {
|
|
fmt.Fprintln(os.Stderr, "usage: chats index")
|
|
return 0
|
|
}
|
|
|
|
root := repoRoot()
|
|
mdDir := filepath.Join(chatsDir(), "md")
|
|
|
|
_, err := os.Stat(mdDir)
|
|
if os.IsNotExist(err) {
|
|
fmt.Fprintf(os.Stderr, "chats index: no chat markdown at %s; run 'chats import' first\n", mdDir)
|
|
return 1
|
|
}
|
|
|
|
indexScript := filepath.Join(root, "bin", "kb", "index")
|
|
if _, err := os.Stat(indexScript); os.IsNotExist(err) {
|
|
fmt.Fprintf(os.Stderr, "chats index: %s not found\n", indexScript)
|
|
return 1
|
|
}
|
|
|
|
cmd := exec.Command(indexScript, "--corpus", mdDir)
|
|
var outBuf, errBuf bytes.Buffer
|
|
cmd.Stdout = &outBuf
|
|
cmd.Stderr = &errBuf
|
|
cmd.Dir = root
|
|
|
|
if err := cmd.Run(); err != nil {
|
|
fmt.Fprintf(os.Stderr, "chats index: %v\n%s", err, errBuf.String())
|
|
return 1
|
|
}
|
|
result := strings.TrimSpace(outBuf.String())
|
|
if result == "" {
|
|
result = strings.TrimSpace(errBuf.String())
|
|
}
|
|
fmt.Printf("chats index: %s\n", result)
|
|
return 0
|
|
}
|