@nex-ai/nex 0.1.24 → 0.1.25
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/README.md +6 -6
- package/dist/cli.d.ts +1 -2
- package/dist/cli.js +1 -3
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +23 -6
- package/dist/index.js +50 -118
- package/dist/index.js.map +1 -1
- package/dist/lib/client.js +1 -1
- package/dist/lib/client.js.map +1 -1
- package/dist/lib/errors.js +1 -1
- package/dist/lib/errors.js.map +1 -1
- package/dist/plugin/shared.js +1 -1
- package/dist/plugin/shared.js.map +1 -1
- package/dist/tui/app.d.ts +2 -1
- package/dist/tui/app.js +35 -4
- package/dist/tui/app.js.map +1 -1
- package/dist/tui/components/agent-card.js +27 -2
- package/dist/tui/components/agent-card.js.map +1 -1
- package/dist/tui/components/banner.js +15 -6
- package/dist/tui/components/banner.js.map +1 -1
- package/dist/tui/components/channel-message.js +61 -11
- package/dist/tui/components/channel-message.js.map +1 -1
- package/dist/tui/components/chat-input.js +7 -3
- package/dist/tui/components/chat-input.js.map +1 -1
- package/dist/tui/components/data-table.js +37 -15
- package/dist/tui/components/data-table.js.map +1 -1
- package/dist/tui/components/error-box.js +21 -2
- package/dist/tui/components/error-box.js.map +1 -1
- package/dist/tui/components/help-screen.js +31 -2
- package/dist/tui/components/help-screen.js.map +1 -1
- package/dist/tui/components/inline-confirm.js +21 -2
- package/dist/tui/components/inline-confirm.js.map +1 -1
- package/dist/tui/components/inline-select.js +22 -2
- package/dist/tui/components/inline-select.js.map +1 -1
- package/dist/tui/components/markdown.js +59 -21
- package/dist/tui/components/markdown.js.map +1 -1
- package/dist/tui/components/mention-autocomplete.d.ts +2 -0
- package/dist/tui/components/mention-autocomplete.js +30 -7
- package/dist/tui/components/mention-autocomplete.js.map +1 -1
- package/dist/tui/components/message-list.js +19 -6
- package/dist/tui/components/message-list.js.map +1 -1
- package/dist/tui/components/picker.js +23 -9
- package/dist/tui/components/picker.js.map +1 -1
- package/dist/tui/components/progress-steps.js +12 -5
- package/dist/tui/components/progress-steps.js.map +1 -1
- package/dist/tui/components/slack/compose.js +69 -21
- package/dist/tui/components/slack/compose.js.map +1 -1
- package/dist/tui/components/slack/layout.js +37 -3
- package/dist/tui/components/slack/layout.js.map +1 -1
- package/dist/tui/components/slack/messages.js +73 -20
- package/dist/tui/components/slack/messages.js.map +1 -1
- package/dist/tui/components/slack/quick-switcher.js +42 -5
- package/dist/tui/components/slack/quick-switcher.js.map +1 -1
- package/dist/tui/components/slack/sidebar.js +57 -12
- package/dist/tui/components/slack/sidebar.js.map +1 -1
- package/dist/tui/components/slack/thread-panel.js +76 -7
- package/dist/tui/components/slack/thread-panel.js.map +1 -1
- package/dist/tui/components/slash-autocomplete.d.ts +2 -0
- package/dist/tui/components/slash-autocomplete.js +30 -6
- package/dist/tui/components/slash-autocomplete.js.map +1 -1
- package/dist/tui/components/spinner.js +6 -4
- package/dist/tui/components/spinner.js.map +1 -1
- package/dist/tui/components/status-bar.js +66 -4
- package/dist/tui/components/status-bar.js.map +1 -1
- package/dist/tui/components/success-box.js +13 -2
- package/dist/tui/components/success-box.js.map +1 -1
- package/dist/tui/components/tool-indicator.js +14 -4
- package/dist/tui/components/tool-indicator.js.map +1 -1
- package/dist/tui/components/viewport.js +11 -3
- package/dist/tui/components/viewport.js.map +1 -1
- package/dist/tui/generative/renderer.js +71 -25
- package/dist/tui/generative/renderer.js.map +1 -1
- package/dist/tui/index.js +5 -2
- package/dist/tui/index.js.map +1 -1
- package/dist/tui/register-views.js +11 -12
- package/dist/tui/register-views.js.map +1 -1
- package/dist/tui/router.d.ts +1 -1
- package/dist/tui/router.js +31 -10
- package/dist/tui/router.js.map +1 -1
- package/dist/tui/theme.d.ts +2 -1
- package/dist/tui/theme.js +4 -3
- package/dist/tui/theme.js.map +1 -1
- package/dist/tui/views/agent-list.js +21 -2
- package/dist/tui/views/agent-list.js.map +1 -1
- package/dist/tui/views/ask-chat.js +30 -3
- package/dist/tui/views/ask-chat.js.map +1 -1
- package/dist/tui/views/calendar.js +49 -5
- package/dist/tui/views/calendar.js.map +1 -1
- package/dist/tui/views/chat.js +45 -7
- package/dist/tui/views/chat.js.map +1 -1
- package/dist/tui/views/generative.js +49 -5
- package/dist/tui/views/generative.js.map +1 -1
- package/dist/tui/views/help.js +12 -2
- package/dist/tui/views/help.js.map +1 -1
- package/dist/tui/views/home-screen.js +140 -25
- package/dist/tui/views/home-screen.js.map +1 -1
- package/dist/tui/views/home.js +56 -8
- package/dist/tui/views/home.js.map +1 -1
- package/dist/tui/views/insights.js +49 -7
- package/dist/tui/views/insights.js.map +1 -1
- package/dist/tui/views/orchestration.js +63 -7
- package/dist/tui/views/orchestration.js.map +1 -1
- package/dist/tui/views/record-detail.js +28 -3
- package/dist/tui/views/record-detail.js.map +1 -1
- package/dist/tui/views/record-list.js +26 -3
- package/dist/tui/views/record-list.js.map +1 -1
- package/dist/tui/views/slack-channel-header.js +23 -4
- package/dist/tui/views/slack-channel-header.js.map +1 -1
- package/dist/tui/views/slack-home.js +14 -3
- package/dist/tui/views/slack-home.js.map +1 -1
- package/dist/tui/views/task-board.js +46 -5
- package/dist/tui/views/task-board.js.map +1 -1
- package/dist/tui/views/timeline.js +52 -9
- package/dist/tui/views/timeline.js.map +1 -1
- package/package.json +7 -12
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import React from "react";
|
|
2
2
|
import { Box, Text } from "ink";
|
|
3
3
|
// --- Colors (from bubbletea-ux-spec.md) ---
|
|
4
4
|
const COLORS = {
|
|
@@ -121,59 +121,97 @@ function parseInline(text) {
|
|
|
121
121
|
}
|
|
122
122
|
function InlineText({ text }) {
|
|
123
123
|
const segments = parseInline(text);
|
|
124
|
-
return (
|
|
124
|
+
return (<Text>
|
|
125
|
+
{segments.map((seg, i) => {
|
|
125
126
|
if (seg.code) {
|
|
126
|
-
return (
|
|
127
|
+
return (<Text key={i} backgroundColor={COLORS.muted} color="white">
|
|
128
|
+
{` ${seg.text} `}
|
|
129
|
+
</Text>);
|
|
127
130
|
}
|
|
128
131
|
if (seg.bold) {
|
|
129
|
-
return (
|
|
132
|
+
return (<Text key={i} bold>
|
|
133
|
+
{seg.text}
|
|
134
|
+
</Text>);
|
|
130
135
|
}
|
|
131
136
|
if (seg.italic) {
|
|
132
|
-
return (
|
|
137
|
+
return (<Text key={i} italic color={COLORS.label}>
|
|
138
|
+
{seg.text}
|
|
139
|
+
</Text>);
|
|
133
140
|
}
|
|
134
|
-
return
|
|
135
|
-
})
|
|
141
|
+
return <Text key={i}>{seg.text}</Text>;
|
|
142
|
+
})}
|
|
143
|
+
</Text>);
|
|
136
144
|
}
|
|
137
145
|
// --- Block renderers ---
|
|
138
146
|
function HeadingBlock({ level, content }) {
|
|
139
147
|
const color = level === 1 ? COLORS.brand : level === 2 ? COLORS.purple : COLORS.info;
|
|
140
|
-
return (
|
|
148
|
+
return (<Box marginBottom={level <= 2 ? 1 : 0}>
|
|
149
|
+
<Text bold color={color}>
|
|
150
|
+
{content}
|
|
151
|
+
</Text>
|
|
152
|
+
</Box>);
|
|
141
153
|
}
|
|
142
154
|
function CodeBlock({ lines, lang }) {
|
|
143
|
-
return (
|
|
155
|
+
return (<Box flexDirection="column" borderStyle="round" borderColor={COLORS.muted} paddingX={1} marginY={0}>
|
|
156
|
+
{lang && (<Text dimColor italic>
|
|
157
|
+
{lang}
|
|
158
|
+
</Text>)}
|
|
159
|
+
{lines.map((line, i) => (<Text key={i} color={COLORS.value}>
|
|
160
|
+
{line}
|
|
161
|
+
</Text>))}
|
|
162
|
+
</Box>);
|
|
144
163
|
}
|
|
145
164
|
function BlockquoteBlock({ lines }) {
|
|
146
|
-
return (
|
|
165
|
+
return (<Box flexDirection="column" paddingLeft={1}>
|
|
166
|
+
{lines.map((line, i) => (<Box key={i}>
|
|
167
|
+
<Text color={COLORS.muted}>{"│ "}</Text>
|
|
168
|
+
<InlineText text={line}/>
|
|
169
|
+
</Box>))}
|
|
170
|
+
</Box>);
|
|
147
171
|
}
|
|
148
172
|
function BulletListBlock({ items }) {
|
|
149
|
-
return (
|
|
173
|
+
return (<Box flexDirection="column">
|
|
174
|
+
{items.map((item, i) => (<Box key={i}>
|
|
175
|
+
<Text color={COLORS.info}>{" ● "}</Text>
|
|
176
|
+
<InlineText text={item}/>
|
|
177
|
+
</Box>))}
|
|
178
|
+
</Box>);
|
|
150
179
|
}
|
|
151
180
|
function OrderedListBlock({ items }) {
|
|
152
|
-
return (
|
|
181
|
+
return (<Box flexDirection="column">
|
|
182
|
+
{items.map((item, i) => (<Box key={i}>
|
|
183
|
+
<Text color={COLORS.info}>{` ${i + 1}. `}</Text>
|
|
184
|
+
<InlineText text={item}/>
|
|
185
|
+
</Box>))}
|
|
186
|
+
</Box>);
|
|
153
187
|
}
|
|
154
188
|
// --- Main component ---
|
|
155
189
|
export function Markdown({ content }) {
|
|
156
190
|
const nodes = parseMarkdown(content);
|
|
157
|
-
return (
|
|
191
|
+
return (<Box flexDirection="column">
|
|
192
|
+
{nodes.map((node, i) => {
|
|
158
193
|
switch (node.type) {
|
|
159
194
|
case "heading":
|
|
160
|
-
return
|
|
195
|
+
return <HeadingBlock key={i} level={node.level} content={node.content}/>;
|
|
161
196
|
case "code_block":
|
|
162
|
-
return
|
|
197
|
+
return <CodeBlock key={i} lines={node.lines} lang={node.lang}/>;
|
|
163
198
|
case "blockquote":
|
|
164
|
-
return
|
|
199
|
+
return <BlockquoteBlock key={i} lines={node.lines}/>;
|
|
165
200
|
case "bullet_list":
|
|
166
|
-
return
|
|
201
|
+
return <BulletListBlock key={i} items={node.lines}/>;
|
|
167
202
|
case "ordered_list":
|
|
168
|
-
return
|
|
203
|
+
return <OrderedListBlock key={i} items={node.lines}/>;
|
|
169
204
|
case "paragraph":
|
|
170
|
-
return (
|
|
205
|
+
return (<Box key={i}>
|
|
206
|
+
<InlineText text={node.content}/>
|
|
207
|
+
</Box>);
|
|
171
208
|
case "blank":
|
|
172
|
-
return
|
|
209
|
+
return <Box key={i} height={1}/>;
|
|
173
210
|
default:
|
|
174
211
|
return null;
|
|
175
212
|
}
|
|
176
|
-
})
|
|
213
|
+
})}
|
|
214
|
+
</Box>);
|
|
177
215
|
}
|
|
178
216
|
export default Markdown;
|
|
179
217
|
//# sourceMappingURL=markdown.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../../src/tui/components/markdown.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../../src/tui/components/markdown.tsx"],"names":[],"mappings":"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"}
|
|
@@ -32,6 +32,8 @@ export interface MentionActions {
|
|
|
32
32
|
onAccept: () => MentionResult | null;
|
|
33
33
|
/** Call when Escape is pressed — dismisses the overlay */
|
|
34
34
|
onDismiss: () => void;
|
|
35
|
+
/** Move selection up/down without accepting (for arrow keys) */
|
|
36
|
+
onNavigate: (direction: number) => void;
|
|
35
37
|
/** Update the mention state when input changes */
|
|
36
38
|
update: (input: string) => void;
|
|
37
39
|
}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
1
|
/**
|
|
3
2
|
* @agent mention autocomplete overlay and hook.
|
|
4
3
|
*
|
|
@@ -186,6 +185,14 @@ export function useMentionAutocomplete(agents, currentInput) {
|
|
|
186
185
|
return { text: `${before}@${match.slug} ${after}`.trimEnd() + " ", agentSlug: match.slug };
|
|
187
186
|
},
|
|
188
187
|
onDismiss: () => setMState(createMentionState()),
|
|
188
|
+
onNavigate: (direction) => {
|
|
189
|
+
const s = stateRef.current;
|
|
190
|
+
if (!s.visible || s.matches.length <= 1)
|
|
191
|
+
return;
|
|
192
|
+
const len = s.matches.length;
|
|
193
|
+
const next = ((s.selectedIndex + direction) % len + len) % len;
|
|
194
|
+
setMState({ ...s, selectedIndex: next });
|
|
195
|
+
},
|
|
189
196
|
update: (input) => {
|
|
190
197
|
// Skip computation if no agents registered (common case — avoids flicker)
|
|
191
198
|
if (agentsRef.current.length === 0) {
|
|
@@ -224,12 +231,28 @@ export function MentionAutocomplete({ state, maxVisible = 8, }) {
|
|
|
224
231
|
startIdx = state.selectedIndex;
|
|
225
232
|
}
|
|
226
233
|
const visibleItems = state.matches.slice(startIdx, startIdx + visible);
|
|
227
|
-
return (
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
234
|
+
return (<Box flexDirection="column" paddingX={1} borderStyle="single" borderColor="cyan">
|
|
235
|
+
{visibleItems.map((agent, i) => {
|
|
236
|
+
const actualIndex = startIdx + i;
|
|
237
|
+
const isSelected = actualIndex === state.selectedIndex;
|
|
238
|
+
const color = getAgentColor(agent.slug);
|
|
239
|
+
return (<Box key={agent.slug} gap={1}>
|
|
240
|
+
<Text color={isSelected ? "cyan" : undefined} bold={isSelected} dimColor={!isSelected}>
|
|
241
|
+
{isSelected ? ">" : " "}
|
|
242
|
+
</Text>
|
|
243
|
+
<Text color={isSelected ? "cyan" : color} bold={isSelected}>
|
|
244
|
+
{`@${agent.slug}`}
|
|
245
|
+
</Text>
|
|
246
|
+
<Text dimColor>{agent.name}</Text>
|
|
247
|
+
</Box>);
|
|
248
|
+
})}
|
|
249
|
+
|
|
250
|
+
{total > visible && (<Box justifyContent="flex-end">
|
|
251
|
+
<Text dimColor>
|
|
252
|
+
{`${state.selectedIndex + 1}/${total}`}
|
|
253
|
+
</Text>
|
|
254
|
+
</Box>)}
|
|
255
|
+
</Box>);
|
|
233
256
|
}
|
|
234
257
|
export default MentionAutocomplete;
|
|
235
258
|
//# sourceMappingURL=mention-autocomplete.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mention-autocomplete.js","sourceRoot":"","sources":["../../../src/tui/components/mention-autocomplete.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mention-autocomplete.js","sourceRoot":"","sources":["../../../src/tui/components/mention-autocomplete.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { useMemo } from "react";
|
|
1
|
+
import React, { useMemo } from "react";
|
|
3
2
|
import { Box, Text } from "ink";
|
|
4
3
|
import { getAgentColor } from "../agent-colors.js";
|
|
5
4
|
// --- Helpers ---
|
|
@@ -17,13 +16,27 @@ export function MessageList({ messages, maxVisible = 20, channelColor, channelNa
|
|
|
17
16
|
return messages.slice(messages.length - maxVisible);
|
|
18
17
|
}, [messages, maxVisible]);
|
|
19
18
|
if (visible.length === 0) {
|
|
20
|
-
return (
|
|
19
|
+
return (<Box paddingX={1}>
|
|
20
|
+
<Text dimColor>{"No messages yet."}</Text>
|
|
21
|
+
</Box>);
|
|
21
22
|
}
|
|
22
|
-
return (
|
|
23
|
+
return (<Box flexDirection="column">
|
|
24
|
+
{visible.map((msg) => {
|
|
23
25
|
const isHuman = msg.sender === "human";
|
|
24
26
|
const senderColor = isHuman ? "green" : getAgentColor(msg.sender);
|
|
25
|
-
return (
|
|
26
|
-
|
|
27
|
+
return (<Box key={msg.id} paddingX={1} marginBottom={0}>
|
|
28
|
+
{channelColor && (<Text color={channelColor}>{"\u2502 "}</Text>)}
|
|
29
|
+
{channelColor && channelName && (<Text color={channelColor} dimColor>{"[#"}{channelName}{"] "}</Text>)}
|
|
30
|
+
<Text dimColor>{formatTime(msg.timestamp)}</Text>
|
|
31
|
+
<Text>{" "}</Text>
|
|
32
|
+
<Text bold color={senderColor}>
|
|
33
|
+
{msg.sender}
|
|
34
|
+
</Text>
|
|
35
|
+
<Text dimColor>{": "}</Text>
|
|
36
|
+
<Text>{msg.content}</Text>
|
|
37
|
+
</Box>);
|
|
38
|
+
})}
|
|
39
|
+
</Box>);
|
|
27
40
|
}
|
|
28
41
|
export default MessageList;
|
|
29
42
|
//# sourceMappingURL=message-list.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-list.js","sourceRoot":"","sources":["../../../src/tui/components/message-list.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"message-list.js","sourceRoot":"","sources":["../../../src/tui/components/message-list.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { useMemo } from "react";
|
|
1
|
+
import React, { useMemo } from "react";
|
|
3
2
|
import { Box, Text } from "ink";
|
|
4
3
|
// --- Component ---
|
|
5
4
|
export function Picker({ items, cursor, onSelect: _onSelect, onCursorChange: _onCursorChange, quickSelect = false, maxVisible = 15, }) {
|
|
@@ -20,13 +19,28 @@ export function Picker({ items, cursor, onSelect: _onSelect, onCursorChange: _on
|
|
|
20
19
|
};
|
|
21
20
|
}, [cursor, maxVisible, total]);
|
|
22
21
|
const visibleItems = items.slice(windowStart, windowEnd);
|
|
23
|
-
return (
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
22
|
+
return (<Box flexDirection="column">
|
|
23
|
+
{showUpArrow && (<Box paddingLeft={2}>
|
|
24
|
+
<Text dimColor>{" \u25B2 more"}</Text>
|
|
25
|
+
</Box>)}
|
|
26
|
+
{visibleItems.map((item, i) => {
|
|
27
|
+
const realIndex = windowStart + i;
|
|
28
|
+
const isSelected = realIndex === cursor;
|
|
29
|
+
const prefix = isSelected ? "> " : " ";
|
|
30
|
+
const digitLabel = quickSelect && realIndex < 9 ? `${realIndex + 1}. ` : "";
|
|
31
|
+
return (<Box key={item.command + realIndex} paddingLeft={1}>
|
|
32
|
+
<Text color={isSelected ? "cyan" : undefined} bold={isSelected}>
|
|
33
|
+
{prefix}
|
|
34
|
+
{digitLabel}
|
|
35
|
+
{item.label}
|
|
36
|
+
</Text>
|
|
37
|
+
<Text dimColor>{` ${item.detail}`}</Text>
|
|
38
|
+
</Box>);
|
|
39
|
+
})}
|
|
40
|
+
{showDownArrow && (<Box paddingLeft={2}>
|
|
41
|
+
<Text dimColor>{" \u25BC more"}</Text>
|
|
42
|
+
</Box>)}
|
|
43
|
+
</Box>);
|
|
30
44
|
}
|
|
31
45
|
export default Picker;
|
|
32
46
|
//# sourceMappingURL=picker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"picker.js","sourceRoot":"","sources":["../../../src/tui/components/picker.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"picker.js","sourceRoot":"","sources":["../../../src/tui/components/picker.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,21 +1,28 @@
|
|
|
1
|
-
import
|
|
1
|
+
import React from "react";
|
|
2
2
|
import { Box, Text } from "ink";
|
|
3
3
|
import { useSpinner } from "./spinner.js";
|
|
4
4
|
// ── Step icon component ─────────────────────────────────────────────
|
|
5
5
|
function StepIcon({ status }) {
|
|
6
6
|
const frame = useSpinner();
|
|
7
7
|
if (status === "done") {
|
|
8
|
-
return
|
|
8
|
+
return <Text color="green">{"✓"}</Text>;
|
|
9
9
|
}
|
|
10
10
|
if (status === "active") {
|
|
11
|
-
return
|
|
11
|
+
return <Text color="cyan">{frame}</Text>;
|
|
12
12
|
}
|
|
13
13
|
// pending
|
|
14
|
-
return
|
|
14
|
+
return <Text dimColor>{"○"}</Text>;
|
|
15
15
|
}
|
|
16
16
|
// ── Component ───────────────────────────────────────────────────────
|
|
17
17
|
export function ProgressSteps({ steps, direction = "column", }) {
|
|
18
|
-
return (
|
|
18
|
+
return (<Box flexDirection={direction} gap={direction === "row" ? 2 : 0}>
|
|
19
|
+
{steps.map((step, i) => (<Box key={i} gap={1}>
|
|
20
|
+
<StepIcon status={step.status}/>
|
|
21
|
+
<Text color={step.status === "active" ? "white" : undefined} dimColor={step.status === "pending"} bold={step.status === "active"}>
|
|
22
|
+
{step.label}
|
|
23
|
+
</Text>
|
|
24
|
+
</Box>))}
|
|
25
|
+
</Box>);
|
|
19
26
|
}
|
|
20
27
|
export default ProgressSteps;
|
|
21
28
|
//# sourceMappingURL=progress-steps.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"progress-steps.js","sourceRoot":"","sources":["../../../src/tui/components/progress-steps.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"progress-steps.js","sourceRoot":"","sources":["../../../src/tui/components/progress-steps.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAiB1C,uEAAuE;AAEvE,SAAS,QAAQ,CAAC,EAAE,MAAM,EAA0B;IAClD,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC;IAE3B,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC;IACD,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;IAC3C,CAAC;IACD,UAAU;IACV,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;AACrC,CAAC;AAED,uEAAuE;AAEvE,MAAM,UAAU,aAAa,CAAC,EAC5B,KAAK,EACL,SAAS,GAAG,QAAQ,GACD;IACnB,OAAO,CACL,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC9D;MAAA,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CACtB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAClB;UAAA,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAC9B;UAAA,CAAC,IAAI,CACH,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CACtD,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CACpC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAE/B;YAAA,CAAC,IAAI,CAAC,KAAK,CACb;UAAA,EAAE,IAAI,CACR;QAAA,EAAE,GAAG,CAAC,CACP,CAAC,CACJ;IAAA,EAAE,GAAG,CAAC,CACP,CAAC;AACJ,CAAC;AAED,eAAe,aAAa,CAAC"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
1
|
/**
|
|
3
2
|
* Slack-style compose area component.
|
|
4
3
|
*
|
|
@@ -6,7 +5,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
6
5
|
* and @mention autocomplete integration. Uses TextInput with a
|
|
7
6
|
* submitKey remount trick for clearing after send.
|
|
8
7
|
*/
|
|
9
|
-
import { useState, useEffect, useCallback, useRef } from "react";
|
|
8
|
+
import React, { useState, useEffect, useCallback, useRef } from "react";
|
|
10
9
|
import { Box, Text } from "ink";
|
|
11
10
|
import { TextInput } from "@inkjs/ui";
|
|
12
11
|
import { SlashAutocomplete, useSlashAutocomplete, } from "../slash-autocomplete.js";
|
|
@@ -27,12 +26,17 @@ function getPlaceholder(channelName, channelType, recipientName, isThread) {
|
|
|
27
26
|
export function HintBar({ visible, }) {
|
|
28
27
|
if (!visible)
|
|
29
28
|
return null;
|
|
30
|
-
return (
|
|
29
|
+
return (<Box paddingX={1}>
|
|
30
|
+
<Text color="gray">@ mention · / command · Enter send</Text>
|
|
31
|
+
</Box>);
|
|
31
32
|
}
|
|
32
33
|
// ── ComposeArea ─────────────────────────────────────────────────────
|
|
33
34
|
export function ComposeArea({ channelName, channelType, recipientName, focused, isThread, onSubmit, onSlashCommand, slashCommands, agents, }) {
|
|
34
35
|
const [value, setValue] = useState("");
|
|
35
36
|
const [submitKey, setSubmitKey] = useState(0);
|
|
37
|
+
// When accepting an autocomplete match, we remount TextInput with this as defaultValue.
|
|
38
|
+
// On normal submit (send message), this is "" so TextInput starts empty.
|
|
39
|
+
const nextDefaultRef = useRef("");
|
|
36
40
|
// Autocomplete hooks
|
|
37
41
|
const slash = useSlashAutocomplete(slashCommands);
|
|
38
42
|
const mention = useMentionAutocomplete(agents, value);
|
|
@@ -42,8 +46,12 @@ export function ComposeArea({ channelName, channelType, recipientName, focused,
|
|
|
42
46
|
slashRef.current = slash;
|
|
43
47
|
const mentionRef = useRef(mention);
|
|
44
48
|
mentionRef.current = mention;
|
|
45
|
-
|
|
46
|
-
|
|
49
|
+
/** Remount TextInput with a new defaultValue and sync React state. */
|
|
50
|
+
const remountInput = useCallback((text) => {
|
|
51
|
+
nextDefaultRef.current = text;
|
|
52
|
+
setValue(text);
|
|
53
|
+
setSubmitKey((k) => k + 1);
|
|
54
|
+
}, []);
|
|
47
55
|
// Stable ([] deps) — reads actions through refs so TextInput never gets a new onChange
|
|
48
56
|
const handleChange = useCallback((newValue) => {
|
|
49
57
|
setValue(newValue);
|
|
@@ -56,7 +64,7 @@ export function ComposeArea({ channelName, channelType, recipientName, focused,
|
|
|
56
64
|
if (slashRef.current.state.visible) {
|
|
57
65
|
const result = slashRef.current.actions.onAccept();
|
|
58
66
|
if (result) {
|
|
59
|
-
|
|
67
|
+
remountInput(result.text);
|
|
60
68
|
return;
|
|
61
69
|
}
|
|
62
70
|
}
|
|
@@ -64,7 +72,7 @@ export function ComposeArea({ channelName, channelType, recipientName, focused,
|
|
|
64
72
|
if (mentionRef.current.state.visible) {
|
|
65
73
|
const result = mentionRef.current.actions.onAccept();
|
|
66
74
|
if (result) {
|
|
67
|
-
|
|
75
|
+
remountInput(result.text);
|
|
68
76
|
return;
|
|
69
77
|
}
|
|
70
78
|
}
|
|
@@ -87,37 +95,77 @@ export function ComposeArea({ channelName, channelType, recipientName, focused,
|
|
|
87
95
|
onSubmit(trimmed);
|
|
88
96
|
}
|
|
89
97
|
// Clear input via remount trick
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
}, [onSubmit, onSlashCommand]);
|
|
98
|
+
remountInput("");
|
|
99
|
+
}, [onSubmit, onSlashCommand, remountInput]);
|
|
93
100
|
useEffect(() => {
|
|
94
101
|
const g = globalThis;
|
|
102
|
+
// Tab/Shift+Tab: cycle autocomplete or accept single match
|
|
95
103
|
g.__nexHomeTabComplete = (direction) => {
|
|
96
104
|
const s = slashRef.current;
|
|
97
105
|
const m = mentionRef.current;
|
|
98
106
|
if (s.state.visible) {
|
|
99
107
|
const result = direction > 0 ? s.actions.onTab() : s.actions.onShiftTab();
|
|
100
108
|
if (result)
|
|
101
|
-
|
|
109
|
+
remountInput(result.text);
|
|
102
110
|
return true;
|
|
103
111
|
}
|
|
104
112
|
if (m.state.visible) {
|
|
105
113
|
const result = direction > 0 ? m.actions.onTab() : m.actions.onShiftTab();
|
|
106
114
|
if (result)
|
|
107
|
-
|
|
115
|
+
remountInput(result.text);
|
|
116
|
+
return true;
|
|
117
|
+
}
|
|
118
|
+
return false;
|
|
119
|
+
};
|
|
120
|
+
// Up/Down arrow: navigate autocomplete selection
|
|
121
|
+
g.__nexHomeAutocompleteNav = (direction) => {
|
|
122
|
+
const s = slashRef.current;
|
|
123
|
+
const m = mentionRef.current;
|
|
124
|
+
if (s.state.visible) {
|
|
125
|
+
s.actions.onNavigate(direction);
|
|
126
|
+
return true;
|
|
127
|
+
}
|
|
128
|
+
if (m.state.visible) {
|
|
129
|
+
m.actions.onNavigate(direction);
|
|
108
130
|
return true;
|
|
109
131
|
}
|
|
110
132
|
return false;
|
|
111
133
|
};
|
|
112
|
-
return () => {
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
134
|
+
return () => {
|
|
135
|
+
delete g.__nexHomeTabComplete;
|
|
136
|
+
delete g.__nexHomeAutocompleteNav;
|
|
137
|
+
};
|
|
138
|
+
}, [remountInput]); // register once, refs keep it current
|
|
139
|
+
return (<Box flexDirection="column">
|
|
140
|
+
{/* Autocomplete overlays (render above input) */}
|
|
141
|
+
<SlashAutocomplete state={slash.state} maxVisible={6}/>
|
|
142
|
+
<MentionAutocomplete state={mention.state} maxVisible={6}/>
|
|
143
|
+
|
|
144
|
+
{/* Hint bar */}
|
|
145
|
+
<HintBar visible={focused}/>
|
|
146
|
+
|
|
147
|
+
{/* Input box */}
|
|
148
|
+
<Box borderStyle="single" borderColor={focused ? "cyan" : "gray"} flexDirection="column" paddingX={1}>
|
|
149
|
+
<Box justifyContent="space-between">
|
|
150
|
+
{focused
|
|
151
|
+
? <Text color="black" backgroundColor="cyan" bold>{" COMPOSE "}</Text>
|
|
152
|
+
: <Text color="gray">
|
|
153
|
+
{isThread
|
|
154
|
+
? "Reply"
|
|
155
|
+
: channelType === "channel"
|
|
156
|
+
? `Message #${channelName}`
|
|
157
|
+
: `Message ${channelName}`}
|
|
158
|
+
</Text>}
|
|
159
|
+
{focused && <Text color="gray">↑↓ · Tab · Enter</Text>}
|
|
160
|
+
</Box>
|
|
161
|
+
<Box>
|
|
162
|
+
{focused ? (<TextInput key={submitKey} defaultValue={nextDefaultRef.current} placeholder={placeholder} onChange={handleChange} onSubmit={handleSubmit}/>) : (<Text dimColor>{placeholder}</Text>)}
|
|
163
|
+
</Box>
|
|
164
|
+
{!focused && (<Box justifyContent="flex-end">
|
|
165
|
+
<Text dimColor>Tab=focus</Text>
|
|
166
|
+
</Box>)}
|
|
167
|
+
</Box>
|
|
168
|
+
</Box>);
|
|
121
169
|
}
|
|
122
170
|
export default ComposeArea;
|
|
123
171
|
//# sourceMappingURL=compose.js.map
|