orquesta-cli 0.1.27 → 0.2.1
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/dist/agents/planner/index.d.ts +2 -1
- package/dist/agents/planner/index.js +7 -1
- package/dist/core/config/config-manager.d.ts +11 -1
- package/dist/core/config/config-manager.js +60 -0
- package/dist/core/config/providers.js +31 -0
- package/dist/core/git-auto-updater.d.ts +58 -0
- package/dist/core/git-auto-updater.js +374 -0
- package/dist/core/llm/llm-client.d.ts +1 -0
- package/dist/core/llm/llm-client.js +2 -0
- package/dist/core/pricing.js +2 -0
- package/dist/core/slash-command-handler.js +139 -0
- package/dist/orchestration/audit-log.d.ts +40 -0
- package/dist/orchestration/audit-log.js +156 -0
- package/dist/orchestration/index.d.ts +3 -0
- package/dist/orchestration/index.js +3 -0
- package/dist/orchestration/memory-store.d.ts +21 -0
- package/dist/orchestration/memory-store.js +102 -0
- package/dist/orchestration/parallel-orchestrator.d.ts +22 -0
- package/dist/orchestration/parallel-orchestrator.js +234 -0
- package/dist/orchestration/plan-executor.d.ts +1 -0
- package/dist/orchestration/plan-executor.js +156 -15
- package/dist/orchestration/worktree-manager.d.ts +25 -0
- package/dist/orchestration/worktree-manager.js +124 -0
- package/dist/tools/llm/simple/planning-tools.js +16 -2
- package/dist/types/index.d.ts +16 -0
- package/dist/ui/components/TodoListView.js +53 -15
- package/package.json +1 -1
package/dist/types/index.d.ts
CHANGED
|
@@ -103,6 +103,18 @@ export interface OrquestaConfig {
|
|
|
103
103
|
lastSyncAt?: string;
|
|
104
104
|
connectedAt?: string;
|
|
105
105
|
}
|
|
106
|
+
export type OrchestrationRole = 'planner' | 'executor' | 'refiner';
|
|
107
|
+
export interface RoleModels {
|
|
108
|
+
planner?: string;
|
|
109
|
+
executor?: string;
|
|
110
|
+
refiner?: string;
|
|
111
|
+
}
|
|
112
|
+
export interface OrchestrationConfig {
|
|
113
|
+
roleModels?: RoleModels;
|
|
114
|
+
maxParallelWorkers?: number;
|
|
115
|
+
refinerEnabled?: boolean;
|
|
116
|
+
worktreeIsolation?: boolean;
|
|
117
|
+
}
|
|
106
118
|
export interface OpenConfig {
|
|
107
119
|
version: string;
|
|
108
120
|
currentEndpoint?: string;
|
|
@@ -117,6 +129,7 @@ export interface OpenConfig {
|
|
|
117
129
|
enabledTools?: string[];
|
|
118
130
|
safeEnvVars?: string[];
|
|
119
131
|
orquesta?: OrquestaConfig;
|
|
132
|
+
orchestration?: OrchestrationConfig;
|
|
120
133
|
}
|
|
121
134
|
export interface TodoItem {
|
|
122
135
|
id: string;
|
|
@@ -124,6 +137,9 @@ export interface TodoItem {
|
|
|
124
137
|
status: 'pending' | 'in_progress' | 'completed' | 'failed';
|
|
125
138
|
result?: string;
|
|
126
139
|
error?: string;
|
|
140
|
+
dependsOn?: string[];
|
|
141
|
+
requiresFilesystem?: boolean;
|
|
142
|
+
parallelGroup?: string;
|
|
127
143
|
}
|
|
128
144
|
export interface PlanningResult {
|
|
129
145
|
todos: TodoItem[];
|
|
@@ -42,26 +42,64 @@ export const TodoListView = ({ todos, showProgressBar = true, }) => {
|
|
|
42
42
|
});
|
|
43
43
|
}, [todos]);
|
|
44
44
|
const completedCount = todos.filter(t => t.status === 'completed').length;
|
|
45
|
+
const inProgressCount = todos.filter(t => t.status === 'in_progress').length;
|
|
45
46
|
const totalCount = todos.length;
|
|
46
47
|
if (totalCount === 0) {
|
|
47
48
|
return null;
|
|
48
49
|
}
|
|
50
|
+
const hasParallelGroups = todos.some(t => t.parallelGroup);
|
|
51
|
+
const isParallel = inProgressCount >= 2 || hasParallelGroups;
|
|
52
|
+
const renderTodoRow = (todo, indent = 0) => {
|
|
53
|
+
const config = STATUS_CONFIG[todo.status] || STATUS_CONFIG.pending;
|
|
54
|
+
const isInProgress = todo.status === 'in_progress';
|
|
55
|
+
const isCompleted = todo.status === 'completed';
|
|
56
|
+
return (React.createElement(Box, { key: todo.id, flexDirection: "column", marginLeft: indent },
|
|
57
|
+
React.createElement(Box, null,
|
|
58
|
+
React.createElement(Box, { width: 2 }, isInProgress ? (React.createElement(Text, { color: "blueBright" },
|
|
59
|
+
React.createElement(Spinner, { type: "dots2" }))) : (React.createElement(Text, { color: config.color }, config.icon))),
|
|
60
|
+
React.createElement(Text, { color: isCompleted ? 'gray' : isInProgress ? 'white' : 'gray', dimColor: isCompleted, strikethrough: isCompleted, bold: isInProgress }, todo.title),
|
|
61
|
+
isInProgress && React.createElement(Text, { color: "blueBright" }, " \u2190"),
|
|
62
|
+
todo.dependsOn && todo.dependsOn.length > 0 && (React.createElement(Text, { color: "gray", dimColor: true },
|
|
63
|
+
" (after ",
|
|
64
|
+
todo.dependsOn.join(','),
|
|
65
|
+
")")),
|
|
66
|
+
todo.requiresFilesystem && isInProgress && (React.createElement(Text, { color: "yellow", dimColor: true }, " [worktree]"))),
|
|
67
|
+
todo.error && (React.createElement(Box, { marginLeft: 2 },
|
|
68
|
+
React.createElement(Text, { color: "red", dimColor: true },
|
|
69
|
+
"\u26A0 ",
|
|
70
|
+
todo.error)))));
|
|
71
|
+
};
|
|
72
|
+
const sections = [];
|
|
73
|
+
if (hasParallelGroups) {
|
|
74
|
+
const seen = new Map();
|
|
75
|
+
for (const t of todos) {
|
|
76
|
+
const key = t.parallelGroup ?? null;
|
|
77
|
+
let s = seen.get(key);
|
|
78
|
+
if (!s) {
|
|
79
|
+
s = { label: t.parallelGroup ?? null, items: [] };
|
|
80
|
+
seen.set(key, s);
|
|
81
|
+
sections.push(s);
|
|
82
|
+
}
|
|
83
|
+
s.items.push(t);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
sections.push({ label: null, items: todos });
|
|
88
|
+
}
|
|
49
89
|
return (React.createElement(Box, { flexDirection: "column", paddingX: 1 },
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
todo.error)))));
|
|
64
|
-
}),
|
|
90
|
+
isParallel && (React.createElement(Box, { marginBottom: 1 },
|
|
91
|
+
React.createElement(Text, { color: "magentaBright", bold: true },
|
|
92
|
+
"\u2AF6\u2AF6 ",
|
|
93
|
+
inProgressCount,
|
|
94
|
+
" worker",
|
|
95
|
+
inProgressCount === 1 ? '' : 's',
|
|
96
|
+
" running in parallel"))),
|
|
97
|
+
sections.map((section, sIdx) => (React.createElement(Box, { key: `section-${sIdx}-${section.label ?? 'flat'}`, flexDirection: "column" },
|
|
98
|
+
section.label && (React.createElement(Box, { marginTop: sIdx === 0 ? 0 : 1 },
|
|
99
|
+
React.createElement(Text, { color: "cyan", dimColor: true },
|
|
100
|
+
"\u250C\u2500 ",
|
|
101
|
+
section.label))),
|
|
102
|
+
section.items.map(t => renderTodoRow(t, section.label ? 2 : 0))))),
|
|
65
103
|
showProgressBar && (React.createElement(Box, { marginTop: 1 },
|
|
66
104
|
React.createElement(ProgressBar, { completed: completedCount, total: totalCount, width: 20 })))));
|
|
67
105
|
};
|