fix: блокировать ввод в running-задачу (S3: нельзя running→collecting); разрешены /cancel и /status N
This commit is contained in:
@@ -83,14 +83,14 @@ func New(configPath, version, updateToken string) (*App, error) {
|
|||||||
|
|
||||||
// OpenCode runner — один на аналитика и воркер
|
// OpenCode runner — один на аналитика и воркер
|
||||||
ocRunner := &opencode.Runner{
|
ocRunner := &opencode.Runner{
|
||||||
Bin: cfg.OpenCode.Bin,
|
Bin: cfg.OpenCode.Bin,
|
||||||
DBPath: cfg.OpenCode.DBPath,
|
DBPath: cfg.OpenCode.DBPath,
|
||||||
Config: cfg.OpenCode.Config,
|
Config: cfg.OpenCode.Config,
|
||||||
ConfigDir: cfg.OpenCode.ConfigDir,
|
ConfigDir: cfg.OpenCode.ConfigDir,
|
||||||
IdleTimeout: cfg.OpenCode.IdleTimeout.Duration(),
|
IdleTimeout: cfg.OpenCode.IdleTimeout.Duration(),
|
||||||
HardTimeout: cfg.OpenCode.HardTimeout.Duration(),
|
HardTimeout: cfg.OpenCode.HardTimeout.Duration(),
|
||||||
PollInterval: cfg.OpenCode.PollMs.Duration(),
|
PollInterval: cfg.OpenCode.PollMs.Duration(),
|
||||||
Stdout: os.Stderr,
|
Stdout: os.Stderr,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Analyst (Decider)
|
// Analyst (Decider)
|
||||||
@@ -266,6 +266,21 @@ func (a *App) handleIncoming(inc chat.Incoming) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Активная задача есть, но воркер её выполняет (running). Обычный ввод и команды
|
||||||
|
// редактирования НЕ должны переводить задачу обратно в collecting — это невалидный
|
||||||
|
// переход S3 (running → collecting). Разрешено лишь терминальное /cancel и /status N.
|
||||||
|
if task.Status == storage.StatusRunning {
|
||||||
|
switch {
|
||||||
|
case cmdName(text) == "/cancel":
|
||||||
|
// переходим на терминальный статус
|
||||||
|
case cmdName(text) == "/status" && hasArg(text):
|
||||||
|
// запрос статуса конкретной задачи — безопасно, не трогает машину состояний
|
||||||
|
default:
|
||||||
|
a.send(ctx, uid, "⏳ Задача ещё выполняется воркером. Дождитесь результата, или /cancel чтобы остановить.")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Активная задача есть — обработка
|
// Активная задача есть — обработка
|
||||||
result, err := a.CoreCtx.ProcessTurn(ctx, task.ID, text)
|
result, err := a.CoreCtx.ProcessTurn(ctx, task.ID, text)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -475,4 +490,4 @@ func ensureAgentsDir(cfg *config.Config) error {
|
|||||||
}
|
}
|
||||||
log.Printf("app: agents ensured in %s", cfg.OpenCode.ConfigDir)
|
log.Printf("app: agents ensured in %s", cfg.OpenCode.ConfigDir)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user