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.
- package/configs/config.yaml +16 -0
- package/configs/pipeline.yaml +16 -2
- package/package.json +1 -1
- package/src/runner.mjs +33 -7
package/configs/config.yaml
CHANGED
|
@@ -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:
|
package/configs/pipeline.yaml
CHANGED
|
@@ -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", "
|
|
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", "
|
|
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
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
|
-
//
|
|
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
|
-
|
|
863
|
+
finalPrompt = `${prompt}\n\nТвоя роль: ${role}`;
|
|
864
864
|
} else {
|
|
865
|
-
|
|
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:
|
|
904
|
+
shell: useShell
|
|
884
905
|
});
|
|
885
906
|
|
|
886
|
-
//
|
|
887
|
-
|
|
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 = '';
|