workflow-ai 1.0.46 → 1.0.49

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.
@@ -35,6 +35,22 @@ task_types:
35
35
  prefix: ADMIN
36
36
  description: "Административные задачи"
37
37
 
38
+ qa:
39
+ prefix: QA
40
+ description: "Написание тестов, проверка coverage, E2E-сценарии, тест-планы, валидация качества"
41
+
42
+ coach:
43
+ prefix: COACH
44
+ description: "Улучшение и аудит скилов (обрабатывается коуч-скилом)"
45
+
46
+ human:
47
+ prefix: HUMAN
48
+ description: "Задачи, требующие действия человека"
49
+
50
+ rsh:
51
+ prefix: RSH
52
+ description: "Deep Research — глубокие исследования, анализ рынка/конкурентов/трендов, сбор бенчмарков, текстовые отчёты"
53
+
38
54
  # Приоритеты задач
39
55
  priorities:
40
56
  1:
@@ -33,16 +33,28 @@ pipeline:
33
33
  agents:
34
34
  claude-sonnet:
35
35
  command: "claude"
36
- args: ["--model", "claude-sonnet-4-6", "--permission-mode", "acceptEdits", "-p"]
36
+ args: ["--model", "claude-sonnet-4-6", "--permission-mode", "bypassPermissions ", "-p"]
37
37
  workdir: "."
38
38
  description: "Claude Sonnet — быстрая модель для простых задач"
39
39
 
40
40
  claude-opus:
41
41
  command: "claude"
42
- args: ["--model", "claude-opus-4-6", "--permission-mode", "acceptEdits", "-p"]
42
+ args: ["--model", "claude-opus-4-6", "--permission-mode", "bypassPermissions ", "-p"]
43
43
  workdir: "."
44
44
  description: "Claude Opus — мощная модель для сложных задач"
45
45
 
46
+ claude-coach:
47
+ command: "claude"
48
+ args: ["--model", "claude-opus-4-6", "--permission-mode", "bypassPermissions ", "-p", "coach"]
49
+ workdir: "."
50
+ description: "Claude Opus — coach"
51
+
52
+ claude-qa:
53
+ command: "claude"
54
+ args: ["--model", "claude-sonnet-4-6", "--permission-mode", "bypassPermissions ", "-p", "manual-testing"]
55
+ workdir: "."
56
+ description: "Claude Opus — QA"
57
+
46
58
  qwen-code:
47
59
  command: "qwen"
48
60
  args: ["-y", "-p"]
@@ -315,6 +327,8 @@ pipeline:
315
327
  skill: execute-task
316
328
  counter: task_attempts
317
329
  agent_by_type:
330
+ coach: claude-coach
331
+ qa: claude-qa
318
332
  impl: kilo-minimax
319
333
  # fix: claude-sonnet
320
334
  arch: claude-opus
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "workflow-ai",
3
- "version": "1.0.46",
3
+ "version": "1.0.49",
4
4
  "description": "AI Agent Workflow Coordinator — kanban-based pipeline for AI coding agents",
5
5
  "type": "module",
6
6
  "bin": {
package/src/runner.mjs CHANGED
@@ -855,14 +855,35 @@ class StageExecutor {
855
855
  const timeout = this.pipeline.execution?.timeout_per_stage || 300;
856
856
  const args = [...agent.args];
857
857
 
858
- // Если args содержит -p с ролью объединяем роль и промпт в один аргумент
859
- // Иначе Claude CLI интерпретирует роль как промпт, а реальный промпт игнорирует
858
+ // Формируем финальный промпт (с ролью если есть -p с значением)
860
859
  const lastPIdx = args.lastIndexOf('-p');
860
+ let finalPrompt;
861
861
  if (lastPIdx !== -1 && lastPIdx < args.length - 1) {
862
862
  const role = args[lastPIdx + 1];
863
- args[lastPIdx + 1] = `${prompt}\n\nТвоя роль: ${role}`;
863
+ finalPrompt = `${prompt}\n\nТвоя роль: ${role}`;
864
864
  } else {
865
- args.push(prompt);
865
+ finalPrompt = prompt;
866
+ }
867
+
868
+ // На Windows shell: true обрезает многострочные аргументы на \n (cmd.exe).
869
+ // Поэтому передаём промпт через stdin, а -p оставляем без значения (print mode).
870
+ const useShell = process.platform === 'win32' && agent.command !== 'node';
871
+ const useStdin = useShell && finalPrompt.includes('\n');
872
+
873
+ if (useStdin) {
874
+ // Убираем значение промпта из аргументов — оно пойдёт через stdin
875
+ if (lastPIdx !== -1 && lastPIdx < args.length - 1) {
876
+ // -p было с ролью-промптом — убираем значение, оставляем -p (print mode)
877
+ args.splice(lastPIdx + 1, 1);
878
+ }
879
+ // Для агентов без -p (kilo и т.д.) — промпт не добавляем в args, он пойдёт через stdin
880
+ } else {
881
+ // Однострочный промпт или не Windows — передаём через аргумент
882
+ if (lastPIdx !== -1 && lastPIdx < args.length - 1) {
883
+ args[lastPIdx + 1] = finalPrompt;
884
+ } else {
885
+ args.push(finalPrompt);
886
+ }
866
887
  }
867
888
 
868
889
  // Логгируем команду перед запуском (вместо промпта — имя skill)
@@ -880,11 +901,16 @@ class StageExecutor {
880
901
  const child = spawn(agent.command, args, {
881
902
  cwd: path.resolve(this.projectRoot, agent.workdir || '.'),
882
903
  stdio: ['pipe', 'pipe', 'pipe'],
883
- shell: process.platform === 'win32' && agent.command !== 'node'
904
+ shell: useShell
884
905
  });
885
906
 
886
- // Закрываем stdin чтобы агент не ждал дополнительного ввода
887
- child.stdin.end();
907
+ // Передаём промпт через stdin или закрываем если не нужно
908
+ if (useStdin) {
909
+ child.stdin.write(finalPrompt);
910
+ child.stdin.end();
911
+ } else {
912
+ child.stdin.end();
913
+ }
888
914
 
889
915
  let stdout = '';
890
916
  let stderr = '';