osagent 0.1.40 → 0.1.41
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/package.json +1 -1
- package/dist/src/generated/git-commit.d.ts +1 -1
- package/dist/src/generated/git-commit.js +1 -1
- package/dist/src/ui/components/subagents/runtime/MultiAgentSummary.d.ts +50 -0
- package/dist/src/ui/components/subagents/runtime/MultiAgentSummary.js +131 -0
- package/dist/src/ui/components/subagents/runtime/MultiAgentSummary.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
package/dist/package.json
CHANGED
|
@@ -6,5 +6,5 @@
|
|
|
6
6
|
// This file is auto-generated by the build script (scripts/generate-git-commit-info.js)
|
|
7
7
|
// Do not edit this file manually.
|
|
8
8
|
export const GIT_COMMIT_INFO = 'd8c8718';
|
|
9
|
-
export const CLI_VERSION = '0.1.
|
|
9
|
+
export const CLI_VERSION = '0.1.41';
|
|
10
10
|
//# sourceMappingURL=git-commit.js.map
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 OSAgent OC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import React from 'react';
|
|
7
|
+
export interface AgentExecutionSummary {
|
|
8
|
+
id: string;
|
|
9
|
+
name: string;
|
|
10
|
+
description: string;
|
|
11
|
+
status: 'running' | 'completed' | 'failed' | 'cancelled';
|
|
12
|
+
toolUses: number;
|
|
13
|
+
tokenCount: number;
|
|
14
|
+
durationMs?: number;
|
|
15
|
+
error?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface MultiAgentSummaryProps {
|
|
18
|
+
agents: AgentExecutionSummary[];
|
|
19
|
+
groupLabel?: string;
|
|
20
|
+
expandable?: boolean;
|
|
21
|
+
defaultExpanded?: boolean;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Displays a summary of multiple parallel agent executions.
|
|
25
|
+
* Shows a collapsed view with count and expand hint, or expanded view with details.
|
|
26
|
+
*
|
|
27
|
+
* Example collapsed:
|
|
28
|
+
* ● 3 Explore agents finished (ctrl+o to expand)
|
|
29
|
+
*
|
|
30
|
+
* Example expanded:
|
|
31
|
+
* ● 3 Explore agents finished (ctrl+o to expand)
|
|
32
|
+
* ├─ Audit core backend services · 38 tool uses · 94.0k tokens
|
|
33
|
+
* │ └ Done
|
|
34
|
+
* ├─ Explore orchestration system · 14 tool uses · 50.0k tokens
|
|
35
|
+
* │ └ Done
|
|
36
|
+
* └─ Explore CLI frontend architecture · 44 tool uses · 74.0k tokens
|
|
37
|
+
* └ Done
|
|
38
|
+
*/
|
|
39
|
+
export declare const MultiAgentSummary: React.FC<MultiAgentSummaryProps>;
|
|
40
|
+
/**
|
|
41
|
+
* Hook to track multiple parallel agent executions
|
|
42
|
+
*/
|
|
43
|
+
export declare function useMultiAgentTracking(): {
|
|
44
|
+
agents: AgentExecutionSummary[];
|
|
45
|
+
addAgent: (agent: AgentExecutionSummary) => void;
|
|
46
|
+
updateAgent: (id: string, updates: Partial<AgentExecutionSummary>) => void;
|
|
47
|
+
removeAgent: (id: string) => void;
|
|
48
|
+
clearAgents: () => void;
|
|
49
|
+
};
|
|
50
|
+
export default MultiAgentSummary;
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* @license
|
|
4
|
+
* Copyright 2025 OSAgent OC
|
|
5
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
6
|
+
*/
|
|
7
|
+
import React, { useState, useMemo, useCallback } from 'react';
|
|
8
|
+
import { Box, Text } from 'ink';
|
|
9
|
+
import { theme } from '../../../semantic-colors.js';
|
|
10
|
+
import { Colors } from '../../../colors.js';
|
|
11
|
+
import { useKeypress } from '../../../hooks/useKeypress.js';
|
|
12
|
+
/**
|
|
13
|
+
* Displays a summary of multiple parallel agent executions.
|
|
14
|
+
* Shows a collapsed view with count and expand hint, or expanded view with details.
|
|
15
|
+
*
|
|
16
|
+
* Example collapsed:
|
|
17
|
+
* ● 3 Explore agents finished (ctrl+o to expand)
|
|
18
|
+
*
|
|
19
|
+
* Example expanded:
|
|
20
|
+
* ● 3 Explore agents finished (ctrl+o to expand)
|
|
21
|
+
* ├─ Audit core backend services · 38 tool uses · 94.0k tokens
|
|
22
|
+
* │ └ Done
|
|
23
|
+
* ├─ Explore orchestration system · 14 tool uses · 50.0k tokens
|
|
24
|
+
* │ └ Done
|
|
25
|
+
* └─ Explore CLI frontend architecture · 44 tool uses · 74.0k tokens
|
|
26
|
+
* └ Done
|
|
27
|
+
*/
|
|
28
|
+
export const MultiAgentSummary = ({ agents, groupLabel = 'agents', expandable = true, defaultExpanded = false, }) => {
|
|
29
|
+
const [expanded, setExpanded] = useState(defaultExpanded);
|
|
30
|
+
const completedCount = useMemo(() => agents.filter(a => a.status === 'completed').length, [agents]);
|
|
31
|
+
const runningCount = useMemo(() => agents.filter(a => a.status === 'running').length, [agents]);
|
|
32
|
+
const failedCount = useMemo(() => agents.filter(a => a.status === 'failed').length, [agents]);
|
|
33
|
+
const allDone = runningCount === 0;
|
|
34
|
+
const hasFailures = failedCount > 0;
|
|
35
|
+
// Determine status color
|
|
36
|
+
const statusColor = useMemo(() => {
|
|
37
|
+
if (runningCount > 0)
|
|
38
|
+
return Colors.AccentYellow;
|
|
39
|
+
if (hasFailures)
|
|
40
|
+
return Colors.AccentRed;
|
|
41
|
+
return Colors.AccentBlue;
|
|
42
|
+
}, [runningCount, hasFailures]);
|
|
43
|
+
// Format token count (e.g., 94000 -> "94.0k")
|
|
44
|
+
const formatTokens = (count) => {
|
|
45
|
+
if (count >= 1000) {
|
|
46
|
+
return `${(count / 1000).toFixed(1)}k`;
|
|
47
|
+
}
|
|
48
|
+
return String(count);
|
|
49
|
+
};
|
|
50
|
+
// Generate summary text
|
|
51
|
+
const summaryText = useMemo(() => {
|
|
52
|
+
if (runningCount > 0) {
|
|
53
|
+
return `${agents.length} ${groupLabel} running`;
|
|
54
|
+
}
|
|
55
|
+
if (allDone && !hasFailures) {
|
|
56
|
+
return `${completedCount} ${groupLabel} finished`;
|
|
57
|
+
}
|
|
58
|
+
if (hasFailures) {
|
|
59
|
+
return `${completedCount} finished, ${failedCount} failed`;
|
|
60
|
+
}
|
|
61
|
+
return `${agents.length} ${groupLabel}`;
|
|
62
|
+
}, [agents.length, groupLabel, runningCount, allDone, hasFailures, completedCount, failedCount]);
|
|
63
|
+
// Handle keyboard shortcut for expand/collapse
|
|
64
|
+
const handleKeypress = useCallback((key) => {
|
|
65
|
+
if (expandable && key.ctrl && key.name === 'o') {
|
|
66
|
+
setExpanded(prev => !prev);
|
|
67
|
+
}
|
|
68
|
+
}, [expandable]);
|
|
69
|
+
useKeypress(handleKeypress, { isActive: expandable });
|
|
70
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { color: statusColor, children: "\u25CF " }), _jsx(Text, { bold: true, color: statusColor, children: summaryText }), expandable && (_jsxs(Text, { color: theme.text.secondary, children: [' ', "(ctrl+o to ", expanded ? 'collapse' : 'expand', ")"] }))] }), expanded && (_jsx(Box, { flexDirection: "column", marginLeft: 2, children: agents.map((agent, index) => {
|
|
71
|
+
const isLast = index === agents.length - 1;
|
|
72
|
+
const prefix = isLast ? '└─' : '├─';
|
|
73
|
+
const statusPrefix = isLast ? ' ' : '│ ';
|
|
74
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { color: theme.text.secondary, children: [prefix, " "] }), _jsx(Text, { bold: true, children: agent.description || agent.name }), _jsxs(Text, { color: theme.text.secondary, children: [' ', "\u00B7 ", agent.toolUses, " tool uses \u00B7 ", formatTokens(agent.tokenCount), " tokens"] })] }), _jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { color: theme.text.secondary, children: [statusPrefix, "\u2514 "] }), _jsx(AgentStatusText, { status: agent.status, error: agent.error })] })] }, agent.id));
|
|
75
|
+
}) })), !expanded && allDone && (_jsx(Box, { flexDirection: "row", marginLeft: 2, children: _jsxs(Text, { color: theme.text.secondary, children: ["Total: ", agents.reduce((sum, a) => sum + a.toolUses, 0), " tool uses \u00B7 ", ' ', formatTokens(agents.reduce((sum, a) => sum + a.tokenCount, 0)), " tokens"] }) }))] }));
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Status text component for individual agents
|
|
79
|
+
*/
|
|
80
|
+
const AgentStatusText = ({ status, error }) => {
|
|
81
|
+
switch (status) {
|
|
82
|
+
case 'running':
|
|
83
|
+
return _jsx(Text, { color: Colors.AccentYellow, children: "Running..." });
|
|
84
|
+
case 'completed':
|
|
85
|
+
return _jsx(Text, { color: Colors.AccentGreen, children: "Done" });
|
|
86
|
+
case 'failed':
|
|
87
|
+
return (_jsxs(Text, { color: Colors.AccentRed, children: ["Failed", error ? `: ${error}` : ''] }));
|
|
88
|
+
case 'cancelled':
|
|
89
|
+
return _jsx(Text, { color: Colors.AccentYellow, children: "Cancelled" });
|
|
90
|
+
default:
|
|
91
|
+
return _jsx(Text, { color: theme.text.secondary, children: "Unknown" });
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
/**
|
|
95
|
+
* Hook to track multiple parallel agent executions
|
|
96
|
+
*/
|
|
97
|
+
export function useMultiAgentTracking() {
|
|
98
|
+
const [agents, setAgents] = useState(new Map());
|
|
99
|
+
const addAgent = (agent) => {
|
|
100
|
+
setAgents(prev => new Map(prev).set(agent.id, agent));
|
|
101
|
+
};
|
|
102
|
+
const updateAgent = (id, updates) => {
|
|
103
|
+
setAgents(prev => {
|
|
104
|
+
const updated = new Map(prev);
|
|
105
|
+
const existing = updated.get(id);
|
|
106
|
+
if (existing) {
|
|
107
|
+
updated.set(id, { ...existing, ...updates });
|
|
108
|
+
}
|
|
109
|
+
return updated;
|
|
110
|
+
});
|
|
111
|
+
};
|
|
112
|
+
const removeAgent = (id) => {
|
|
113
|
+
setAgents(prev => {
|
|
114
|
+
const updated = new Map(prev);
|
|
115
|
+
updated.delete(id);
|
|
116
|
+
return updated;
|
|
117
|
+
});
|
|
118
|
+
};
|
|
119
|
+
const clearAgents = () => {
|
|
120
|
+
setAgents(new Map());
|
|
121
|
+
};
|
|
122
|
+
return {
|
|
123
|
+
agents: Array.from(agents.values()),
|
|
124
|
+
addAgent,
|
|
125
|
+
updateAgent,
|
|
126
|
+
removeAgent,
|
|
127
|
+
clearAgents,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
export default MultiAgentSummary;
|
|
131
|
+
//# sourceMappingURL=MultiAgentSummary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MultiAgentSummary.js","sourceRoot":"","sources":["../../../../../../src/ui/components/subagents/runtime/MultiAgentSummary.tsx"],"names":[],"mappings":"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"}
|