@nex-ai/nex 0.1.23 → 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 +9 -11
- 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
package/dist/tui/views/home.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
1
|
/**
|
|
3
2
|
* Conversation-first home view.
|
|
4
3
|
*
|
|
@@ -8,7 +7,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
8
7
|
* When a picker or confirm prompt is active, the TextInput is hidden
|
|
9
8
|
* and the interactive widget is shown instead.
|
|
10
9
|
*/
|
|
11
|
-
import { useState } from "react";
|
|
10
|
+
import React, { useState } from "react";
|
|
12
11
|
import { Box, Text, useStdout } from "ink";
|
|
13
12
|
import { TextInput } from "@inkjs/ui";
|
|
14
13
|
import { InlineSelect } from "../components/inline-select.js";
|
|
@@ -18,15 +17,35 @@ function MessageBubble({ msg }) {
|
|
|
18
17
|
const streamingCursor = msg.isStreaming ? "▌" : "";
|
|
19
18
|
switch (msg.role) {
|
|
20
19
|
case "user":
|
|
21
|
-
return (
|
|
20
|
+
return (<Box paddingX={2}>
|
|
21
|
+
<Text bold color="white">
|
|
22
|
+
{"> "}
|
|
23
|
+
</Text>
|
|
24
|
+
<Text>{msg.content}</Text>
|
|
25
|
+
</Box>);
|
|
22
26
|
case "assistant":
|
|
23
|
-
return (
|
|
27
|
+
return (<Box paddingX={2} flexDirection="column">
|
|
28
|
+
<Text color={msg.isError ? "red" : "cyan"}>
|
|
29
|
+
{msg.content}{streamingCursor}
|
|
30
|
+
</Text>
|
|
31
|
+
</Box>);
|
|
24
32
|
case "system":
|
|
25
|
-
return (
|
|
33
|
+
return (<Box paddingX={2} justifyContent="center">
|
|
34
|
+
<Text color="yellow" dimColor>
|
|
35
|
+
{msg.content}
|
|
36
|
+
</Text>
|
|
37
|
+
</Box>);
|
|
26
38
|
case "tool":
|
|
27
|
-
return (
|
|
39
|
+
return (<Box paddingX={4}>
|
|
40
|
+
{msg.toolName && (<Text dimColor bold>
|
|
41
|
+
{`[${msg.toolName}] `}
|
|
42
|
+
</Text>)}
|
|
43
|
+
<Text dimColor>{msg.content}</Text>
|
|
44
|
+
</Box>);
|
|
28
45
|
default:
|
|
29
|
-
return (
|
|
46
|
+
return (<Box paddingX={2}>
|
|
47
|
+
<Text>{msg.content}</Text>
|
|
48
|
+
</Box>);
|
|
30
49
|
}
|
|
31
50
|
}
|
|
32
51
|
// ── Conversation view ───────────────────────────────────────────────
|
|
@@ -53,7 +72,36 @@ export function ConversationView({ messages, onSubmit, isLoading = false, loadin
|
|
|
53
72
|
setSubmitKey((k) => k + 1);
|
|
54
73
|
};
|
|
55
74
|
const hasWidget = picker != null || confirm != null;
|
|
56
|
-
return (
|
|
75
|
+
return (<Box flexDirection="column" width="100%" minHeight={visibleRows + 3}>
|
|
76
|
+
{/* Message history */}
|
|
77
|
+
<Box flexDirection="column" flexGrow={1}>
|
|
78
|
+
{displayMessages.map((msg) => (<Box key={msg.id} marginBottom={0}>
|
|
79
|
+
<MessageBubble msg={msg}/>
|
|
80
|
+
</Box>))}
|
|
81
|
+
|
|
82
|
+
{/* Loading indicator */}
|
|
83
|
+
{isLoading && (<Box paddingX={2}>
|
|
84
|
+
<Text color="cyan" dimColor>
|
|
85
|
+
{` ${loadingHint}`}
|
|
86
|
+
</Text>
|
|
87
|
+
</Box>)}
|
|
88
|
+
</Box>
|
|
89
|
+
|
|
90
|
+
{/* Divider */}
|
|
91
|
+
<Box paddingX={1}>
|
|
92
|
+
<Text dimColor>
|
|
93
|
+
{"─".repeat(Math.min(stdout?.columns ?? 60, 120) - 2)}
|
|
94
|
+
</Text>
|
|
95
|
+
</Box>
|
|
96
|
+
|
|
97
|
+
{/* Interactive widget area: picker, confirm, or text input */}
|
|
98
|
+
{picker != null ? (<InlineSelect title={picker.title} options={picker.options} onSelect={picker.onSelect}/>) : confirm != null ? (<InlineConfirm question={confirm.question} onConfirm={confirm.onConfirm}/>) : (<Box paddingX={1}>
|
|
99
|
+
<Text bold color="cyan">
|
|
100
|
+
{"> "}
|
|
101
|
+
</Text>
|
|
102
|
+
<TextInput key={submitKey} placeholder="Type a message or /help..." onChange={setInputValue} onSubmit={handleSubmit}/>
|
|
103
|
+
</Box>)}
|
|
104
|
+
</Box>);
|
|
57
105
|
}
|
|
58
106
|
// Keep the default export for backward compat
|
|
59
107
|
export default ConversationView;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"home.js","sourceRoot":"","sources":["../../../src/tui/views/home.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"home.js","sourceRoot":"","sources":["../../../src/tui/views/home.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,21 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Insights dashboard view.
|
|
3
|
+
* Displays insights from the context graph with priority badges,
|
|
4
|
+
* categories, and linked record IDs.
|
|
5
|
+
*/
|
|
6
|
+
import React from 'react';
|
|
2
7
|
import { Box, Text } from 'ink';
|
|
3
8
|
// ── Helpers ──
|
|
4
9
|
function priorityBadge(priority) {
|
|
5
10
|
switch (priority) {
|
|
6
11
|
case 'critical':
|
|
7
|
-
return
|
|
12
|
+
return <Text color="red" bold>[CRIT]</Text>;
|
|
8
13
|
case 'high':
|
|
9
|
-
return
|
|
14
|
+
return <Text color="red">[HIGH]</Text>;
|
|
10
15
|
case 'medium':
|
|
11
|
-
return
|
|
16
|
+
return <Text color="yellow">[MED]</Text>;
|
|
12
17
|
case 'low':
|
|
13
|
-
return
|
|
18
|
+
return <Text dimColor>[LOW]</Text>;
|
|
14
19
|
}
|
|
15
20
|
}
|
|
16
21
|
function formatTimestamp(ts) {
|
|
@@ -37,10 +42,47 @@ function formatTimestamp(ts) {
|
|
|
37
42
|
}
|
|
38
43
|
// ── Sub-components ──
|
|
39
44
|
function InsightCard({ insight }) {
|
|
40
|
-
return (
|
|
45
|
+
return (<Box flexDirection="column" marginBottom={1}>
|
|
46
|
+
{/* Header line: priority + category + title */}
|
|
47
|
+
<Box gap={1}>
|
|
48
|
+
{priorityBadge(insight.priority)}
|
|
49
|
+
<Text color="magenta">[{insight.category}]</Text>
|
|
50
|
+
<Text bold color="blue">{insight.title}</Text>
|
|
51
|
+
</Box>
|
|
52
|
+
|
|
53
|
+
{/* Body — indented */}
|
|
54
|
+
{insight.body && (<Box paddingLeft={2}>
|
|
55
|
+
<Text>{insight.body}</Text>
|
|
56
|
+
</Box>)}
|
|
57
|
+
|
|
58
|
+
{/* Record IDs — muted */}
|
|
59
|
+
{insight.recordIds && insight.recordIds.length > 0 && (<Box paddingLeft={2}>
|
|
60
|
+
<Text dimColor>Records: {insight.recordIds.join(', ')}</Text>
|
|
61
|
+
</Box>)}
|
|
62
|
+
|
|
63
|
+
{/* Timestamp — muted */}
|
|
64
|
+
<Box paddingLeft={2}>
|
|
65
|
+
<Text dimColor>{formatTimestamp(insight.timestamp)}</Text>
|
|
66
|
+
</Box>
|
|
67
|
+
</Box>);
|
|
41
68
|
}
|
|
42
69
|
// ── Main view ──
|
|
43
70
|
export function InsightsView({ insights }) {
|
|
44
|
-
return (
|
|
71
|
+
return (<Box flexDirection="column" borderStyle="round" borderColor="cyan" paddingX={1} paddingY={0}>
|
|
72
|
+
<Text bold color="cyan">
|
|
73
|
+
Insights
|
|
74
|
+
</Text>
|
|
75
|
+
<Box height={1}/>
|
|
76
|
+
|
|
77
|
+
{insights.length === 0 ? (<Text color="gray"> No insights found. Try expanding the time window.</Text>) : (<Box flexDirection="column">
|
|
78
|
+
<Text dimColor>{insights.length} insight{insights.length !== 1 ? 's' : ''}</Text>
|
|
79
|
+
<Box height={1}/>
|
|
80
|
+
{insights.map((insight, i) => (<InsightCard key={insight.id ?? i} insight={insight}/>))}
|
|
81
|
+
</Box>)}
|
|
82
|
+
|
|
83
|
+
<Text color="gray">
|
|
84
|
+
[Esc=back /insights --last 24h]
|
|
85
|
+
</Text>
|
|
86
|
+
</Box>);
|
|
45
87
|
}
|
|
46
88
|
//# sourceMappingURL=insights.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"insights.js","sourceRoot":"","sources":["../../../src/tui/views/insights.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"insights.js","sourceRoot":"","sources":["../../../src/tui/views/insights.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Orchestration dashboard view.
|
|
3
|
+
* Shows active goals, task pool, per-agent budgets, and global budget.
|
|
4
|
+
*/
|
|
5
|
+
import React from 'react';
|
|
2
6
|
import { Box, Text } from 'ink';
|
|
3
7
|
// ── Helpers ──
|
|
4
8
|
function statusIcon(status) {
|
|
@@ -46,28 +50,80 @@ function GoalRow({ goal, tasks, }) {
|
|
|
46
50
|
const goalTasks = tasks.filter((t) => t.parentGoalId === goal.id);
|
|
47
51
|
const completed = goalTasks.filter((t) => t.status === 'completed').length;
|
|
48
52
|
const total = goalTasks.length;
|
|
49
|
-
return (
|
|
53
|
+
return (<Box>
|
|
54
|
+
<Text color="gray">{goal === undefined ? '\u2514' : '\u251C'} </Text>
|
|
55
|
+
<Text>{goal.title} </Text>
|
|
56
|
+
<Text color="gray">[{completed}/{total} tasks] </Text>
|
|
57
|
+
<Text color={statusColor(goal.status)}>
|
|
58
|
+
{statusIcon(goal.status)} {goal.status}
|
|
59
|
+
</Text>
|
|
60
|
+
</Box>);
|
|
50
61
|
}
|
|
51
62
|
function GoalSection({ goals, tasks, }) {
|
|
52
63
|
if (goals.length === 0) {
|
|
53
|
-
return (
|
|
64
|
+
return (<Box flexDirection="column" marginBottom={1}>
|
|
65
|
+
<Text bold>Goals</Text>
|
|
66
|
+
<Text color="gray"> No goals defined yet.</Text>
|
|
67
|
+
</Box>);
|
|
54
68
|
}
|
|
55
69
|
const active = goals.filter((g) => g.status === 'active').length;
|
|
56
|
-
return (
|
|
70
|
+
return (<Box flexDirection="column" marginBottom={1}>
|
|
71
|
+
<Text bold>Goals ({active} active)</Text>
|
|
72
|
+
{goals.map((goal, i) => (<GoalRow key={goal.id ?? i} goal={goal} tasks={tasks}/>))}
|
|
73
|
+
</Box>);
|
|
57
74
|
}
|
|
58
75
|
function TaskPoolSection({ tasks, }) {
|
|
59
76
|
const completed = countByStatus(tasks, 'completed');
|
|
60
77
|
const inProgress = countByStatus(tasks, 'in_progress') + countByStatus(tasks, 'locked');
|
|
61
78
|
const pending = countByStatus(tasks, 'pending');
|
|
62
79
|
const failed = countByStatus(tasks, 'failed');
|
|
63
|
-
return (
|
|
80
|
+
return (<Box flexDirection="column" marginBottom={1}>
|
|
81
|
+
<Text bold>Task Pool</Text>
|
|
82
|
+
<Box gap={2}>
|
|
83
|
+
<Text color="green">{'\u25CF'} {completed} completed</Text>
|
|
84
|
+
<Text color="yellow">{'\u25D0'} {inProgress} in progress</Text>
|
|
85
|
+
<Text color="gray">{'\u25CB'} {pending} pending</Text>
|
|
86
|
+
{failed > 0 && (<Text color="red">{'\u2716'} {failed} failed</Text>)}
|
|
87
|
+
</Box>
|
|
88
|
+
</Box>);
|
|
64
89
|
}
|
|
65
90
|
function BudgetSection({ budgets, globalBudget, }) {
|
|
66
91
|
const globalPercent = Math.max(globalBudget.percentTokens, globalBudget.percentCost);
|
|
67
|
-
return (
|
|
92
|
+
return (<Box flexDirection="column" marginBottom={1}>
|
|
93
|
+
<Text bold>Budget</Text>
|
|
94
|
+
{budgets.map((b) => (<Box key={b.agentSlug} gap={1}>
|
|
95
|
+
<Text>
|
|
96
|
+
{b.agentSlug.padEnd(14)}
|
|
97
|
+
</Text>
|
|
98
|
+
<Text color={b.warning ? 'red' : b.percentUsed > 50 ? 'yellow' : 'green'}>
|
|
99
|
+
{budgetBar(b.percentUsed)}
|
|
100
|
+
</Text>
|
|
101
|
+
<Text> {Math.round(b.percentUsed)}%</Text>
|
|
102
|
+
<Text color="gray"> ${b.costUsd.toFixed(2)}</Text>
|
|
103
|
+
</Box>))}
|
|
104
|
+
<Box gap={1}>
|
|
105
|
+
<Text>{'Global'.padEnd(14)}</Text>
|
|
106
|
+
<Text color={globalPercent > 80 ? 'red' : globalPercent > 50 ? 'yellow' : 'green'}>
|
|
107
|
+
{budgetBar(globalPercent)}
|
|
108
|
+
</Text>
|
|
109
|
+
<Text> {Math.round(globalPercent)}%</Text>
|
|
110
|
+
<Text color="gray"> ${globalBudget.cost.toFixed(2)}</Text>
|
|
111
|
+
</Box>
|
|
112
|
+
</Box>);
|
|
68
113
|
}
|
|
69
114
|
// ── Main view ──
|
|
70
115
|
export function OrchestrationView({ goals, tasks, budgets, globalBudget, }) {
|
|
71
|
-
return (
|
|
116
|
+
return (<Box flexDirection="column" borderStyle="round" borderColor="cyan" paddingX={1} paddingY={0}>
|
|
117
|
+
<Text bold color="cyan">
|
|
118
|
+
Orchestration
|
|
119
|
+
</Text>
|
|
120
|
+
<Box height={1}/>
|
|
121
|
+
<GoalSection goals={goals} tasks={tasks}/>
|
|
122
|
+
<TaskPoolSection tasks={tasks}/>
|
|
123
|
+
<BudgetSection budgets={budgets} globalBudget={globalBudget}/>
|
|
124
|
+
<Text color="gray">
|
|
125
|
+
[Esc=back t=tasks g=goals w=workflows]
|
|
126
|
+
</Text>
|
|
127
|
+
</Box>);
|
|
72
128
|
}
|
|
73
129
|
//# sourceMappingURL=orchestration.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestration.js","sourceRoot":"","sources":["../../../src/tui/views/orchestration.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"orchestration.js","sourceRoot":"","sources":["../../../src/tui/views/orchestration.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { useState } from "react";
|
|
1
|
+
import React, { useState } from "react";
|
|
3
2
|
import { Box, Text } from "ink";
|
|
4
3
|
import { Viewport } from "../components/viewport.js";
|
|
5
4
|
// --- Helpers ---
|
|
@@ -16,7 +15,33 @@ function formatAttributes(attrs) {
|
|
|
16
15
|
export function RecordDetailView({ objectType, recordId, recordLabel, attributes, onBack: _onBack, }) {
|
|
17
16
|
const [scrollOffset, setScrollOffset] = useState(0);
|
|
18
17
|
const content = formatAttributes(attributes);
|
|
19
|
-
return (
|
|
18
|
+
return (<Box flexDirection="column" width="100%">
|
|
19
|
+
{/* Header */}
|
|
20
|
+
<Box paddingX={2} marginBottom={1} flexDirection="column">
|
|
21
|
+
<Box>
|
|
22
|
+
<Text bold color="cyan">
|
|
23
|
+
{recordLabel}
|
|
24
|
+
</Text>
|
|
25
|
+
</Box>
|
|
26
|
+
<Box>
|
|
27
|
+
<Text dimColor>{`${objectType} \u2502 ${recordId}`}</Text>
|
|
28
|
+
</Box>
|
|
29
|
+
</Box>
|
|
30
|
+
|
|
31
|
+
{/* Attributes */}
|
|
32
|
+
<Box paddingX={1}>
|
|
33
|
+
<Viewport content={content} scrollOffset={scrollOffset} onScroll={setScrollOffset}/>
|
|
34
|
+
</Box>
|
|
35
|
+
|
|
36
|
+
{/* Timeline hint */}
|
|
37
|
+
<Box paddingX={2} marginTop={1}>
|
|
38
|
+
<Text dimColor>
|
|
39
|
+
{"Tip: run "}
|
|
40
|
+
</Text>
|
|
41
|
+
<Text color="cyan">{`nex record timeline ${recordId}`}</Text>
|
|
42
|
+
<Text dimColor>{" to see activity"}</Text>
|
|
43
|
+
</Box>
|
|
44
|
+
</Box>);
|
|
20
45
|
}
|
|
21
46
|
export default RecordDetailView;
|
|
22
47
|
//# sourceMappingURL=record-detail.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record-detail.js","sourceRoot":"","sources":["../../../src/tui/views/record-detail.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"record-detail.js","sourceRoot":"","sources":["../../../src/tui/views/record-detail.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAYrD,kBAAkB;AAElB,SAAS,gBAAgB,CAAC,KAA6B;IACrD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CACxB,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAC1C,CAAC,CACF,CAAC;IAEF,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;SACzB,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE;QAClB,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACrC,OAAO,KAAK,MAAM,KAAK,GAAG,EAAE,CAAC;IAC/B,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,oBAAoB;AAEpB,MAAM,UAAU,gBAAgB,CAAC,EAC/B,UAAU,EACV,QAAQ,EACR,WAAW,EACX,UAAU,EACV,MAAM,EAAE,OAAO,GACO;IACtB,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAE7C,OAAO,CACL,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CACtC;MAAA,CAAC,YAAY,CACb;MAAA,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CACvD;QAAA,CAAC,GAAG,CACF;UAAA,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CACrB;YAAA,CAAC,WAAW,CACd;UAAA,EAAE,IAAI,CACR;QAAA,EAAE,GAAG,CACL;QAAA,CAAC,GAAG,CACF;UAAA,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,UAAU,WAAW,QAAQ,EAAE,CAAC,EAAE,IAAI,CAC3D;QAAA,EAAE,GAAG,CACP;MAAA,EAAE,GAAG,CAEL;;MAAA,CAAC,gBAAgB,CACjB;MAAA,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CACf;QAAA,CAAC,QAAQ,CACP,OAAO,CAAC,CAAC,OAAO,CAAC,CACjB,YAAY,CAAC,CAAC,YAAY,CAAC,CAC3B,QAAQ,CAAC,CAAC,eAAe,CAAC,EAE9B;MAAA,EAAE,GAAG,CAEL;;MAAA,CAAC,mBAAmB,CACpB;MAAA,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAC7B;QAAA,CAAC,IAAI,CAAC,QAAQ,CACZ;UAAA,CAAC,WAAW,CACd;QAAA,EAAE,IAAI,CACN;QAAA,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,uBAAuB,QAAQ,EAAE,CAAC,EAAE,IAAI,CAC5D;QAAA,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,kBAAkB,CAAC,EAAE,IAAI,CAC3C;MAAA,EAAE,GAAG,CACP;IAAA,EAAE,GAAG,CAAC,CACP,CAAC;AACJ,CAAC;AAED,eAAe,gBAAgB,CAAC"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { useState } from "react";
|
|
1
|
+
import React, { useState } from "react";
|
|
3
2
|
import { Box, Text } from "ink";
|
|
4
3
|
import { Picker } from "../components/picker.js";
|
|
5
4
|
// --- Component ---
|
|
@@ -16,7 +15,31 @@ export function RecordListView({ objectType, records, columns, onSelect, onBack:
|
|
|
16
15
|
if (record)
|
|
17
16
|
onSelect?.(record);
|
|
18
17
|
};
|
|
19
|
-
return (
|
|
18
|
+
return (<Box flexDirection="column" width="100%">
|
|
19
|
+
{/* Header */}
|
|
20
|
+
<Box paddingX={2} marginBottom={1}>
|
|
21
|
+
<Text bold color="cyan">
|
|
22
|
+
{objectType}
|
|
23
|
+
</Text>
|
|
24
|
+
<Text dimColor>{` (${records.length} records)`}</Text>
|
|
25
|
+
</Box>
|
|
26
|
+
|
|
27
|
+
{/* Column headers */}
|
|
28
|
+
<Box paddingX={3}>
|
|
29
|
+
<Box minWidth={4}>
|
|
30
|
+
<Text bold dimColor>{"#"}</Text>
|
|
31
|
+
</Box>
|
|
32
|
+
<Box minWidth={20}>
|
|
33
|
+
<Text bold>{"Name"}</Text>
|
|
34
|
+
</Box>
|
|
35
|
+
{columns.map((col) => (<Box key={col} minWidth={16}>
|
|
36
|
+
<Text bold dimColor>{col}</Text>
|
|
37
|
+
</Box>))}
|
|
38
|
+
</Box>
|
|
39
|
+
|
|
40
|
+
{/* Records */}
|
|
41
|
+
<Picker items={items} cursor={cursor} onSelect={handleSelect} onCursorChange={setCursor} quickSelect/>
|
|
42
|
+
</Box>);
|
|
20
43
|
}
|
|
21
44
|
export default RecordListView;
|
|
22
45
|
//# sourceMappingURL=record-list.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record-list.js","sourceRoot":"","sources":["../../../src/tui/views/record-list.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"record-list.js","sourceRoot":"","sources":["../../../src/tui/views/record-list.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,35 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Slack-style channel header bar.
|
|
3
|
+
*
|
|
4
|
+
* Shows channel name (with # prefix for channels, presence dot for DMs),
|
|
5
|
+
* topic line, and action hints. Sits at the top of the main panel.
|
|
6
|
+
*/
|
|
7
|
+
import React from "react";
|
|
2
8
|
import { Box, Text } from "ink";
|
|
3
9
|
export function ChannelHeader({ name, type, online, focused, }) {
|
|
4
10
|
let prefix;
|
|
5
11
|
if (type === "channel") {
|
|
6
|
-
prefix =
|
|
12
|
+
prefix = <Text color={focused ? "cyan" : "gray"}># </Text>;
|
|
7
13
|
}
|
|
8
14
|
else {
|
|
9
15
|
const dotColor = online ? "green" : "gray";
|
|
10
16
|
const dot = online ? "●" : "○";
|
|
11
|
-
prefix =
|
|
17
|
+
prefix = <Text color={dotColor}>{dot} </Text>;
|
|
12
18
|
}
|
|
13
|
-
return (
|
|
19
|
+
return (<Box paddingX={1} justifyContent="space-between">
|
|
20
|
+
<Box gap={1}>
|
|
21
|
+
{focused && <Text color="black" backgroundColor="cyan" bold>{" MESSAGES "}</Text>}
|
|
22
|
+
{prefix}
|
|
23
|
+
<Text bold color={focused ? "cyan" : "white"}>
|
|
24
|
+
{name}
|
|
25
|
+
</Text>
|
|
26
|
+
</Box>
|
|
27
|
+
<Box gap={2}>
|
|
28
|
+
{focused && <Text color="cyan">{"↑↓ scroll"}</Text>}
|
|
29
|
+
<Text color="gray">Ctrl+K search</Text>
|
|
30
|
+
<Text color="gray">Tab focus</Text>
|
|
31
|
+
</Box>
|
|
32
|
+
</Box>);
|
|
14
33
|
}
|
|
15
34
|
export default ChannelHeader;
|
|
16
35
|
//# sourceMappingURL=slack-channel-header.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slack-channel-header.js","sourceRoot":"","sources":["../../../src/tui/views/slack-channel-header.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"slack-channel-header.js","sourceRoot":"","sources":["../../../src/tui/views/slack-channel-header.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAShC,MAAM,UAAU,aAAa,CAAC,EAC5B,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,OAAO,GACY;IACnB,IAAI,MAAyB,CAAC;IAC9B,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC7D,CAAC;SAAM,CAAC;QACN,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;QAC3C,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAC/B,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAE,CAAA,EAAE,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,CACL,CAAC,GAAG,CACF,QAAQ,CAAC,CAAC,CAAC,CAAC,CACZ,cAAc,CAAC,eAAe,CAE9B;MAAA,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CACV;QAAA,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,CACjF;QAAA,CAAC,MAAM,CACP;QAAA,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAC3C;UAAA,CAAC,IAAI,CACP;QAAA,EAAE,IAAI,CACR;MAAA,EAAE,GAAG,CACL;MAAA,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CACV;QAAA,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,CACnD;QAAA,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,CACtC;QAAA,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CACpC;MAAA,EAAE,GAAG,CACP;IAAA,EAAE,GAAG,CAAC,CACP,CAAC;AACJ,CAAC;AAED,eAAe,aAAa,CAAC"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
1
|
/**
|
|
3
2
|
* SlackHome — the main Slack-style home view.
|
|
4
3
|
*
|
|
@@ -10,7 +9,7 @@ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-run
|
|
|
10
9
|
* - Compose area with slash commands and @mentions
|
|
11
10
|
* - Agent routing: DM → steer(), channel → broadcast
|
|
12
11
|
*/
|
|
13
|
-
import { useState, useEffect, useMemo, useCallback } from "react";
|
|
12
|
+
import React, { useState, useEffect, useMemo, useCallback } from "react";
|
|
14
13
|
import { useStdout } from "ink";
|
|
15
14
|
import { SlackLayout, computeLayout } from "../components/slack/layout.js";
|
|
16
15
|
import { SlackSidebar } from "../components/slack/sidebar.js";
|
|
@@ -566,7 +565,19 @@ export function SlackHome({ push }) {
|
|
|
566
565
|
// ── Layout metrics ──
|
|
567
566
|
const layout = computeLayout(cols, threadOpen);
|
|
568
567
|
// ── Render ──
|
|
569
|
-
return (
|
|
568
|
+
return (<SlackLayout cols={cols} rows={rows} threadOpen={threadOpen} focusSection={focusSection} sidebar={<SlackSidebar width={layout.sidebarWidth} focused={focusSection === "sidebar"} workspaceName="Nex Workspace" sections={sidebarSections} collapsedSections={collapsedSections} activeChannelId={activeChannelId} cursor={sidebarCursor} onToggleSection={handleToggleSection} onSelectItem={handleSidebarSelect}/>} main={<>
|
|
569
|
+
{/* Channel header */}
|
|
570
|
+
<ChannelHeader name={activeChannelName} type={activeChannelType} online={activeItem?.online} focused={focusSection === "messages"}/>
|
|
571
|
+
|
|
572
|
+
{/* Message list */}
|
|
573
|
+
<SlackMessageList messages={allMessages} onThreadOpen={handleOpenThread} width={layout.mainWidth}/>
|
|
574
|
+
|
|
575
|
+
{/* Loading indicator */}
|
|
576
|
+
{isLoading && <Spinner label={loadingHint || "thinking..."}/>}
|
|
577
|
+
|
|
578
|
+
{/* Inline widgets */}
|
|
579
|
+
{picker != null ? (<InlineSelect title={picker.title} options={picker.options} onSelect={picker.onSelect}/>) : confirm != null ? (<InlineConfirm question={confirm.question} onConfirm={confirm.onConfirm}/>) : (<ComposeArea channelName={activeChannelName} channelType={activeChannelType} recipientName={activeChannelType === "dm" ? activeChannelName : undefined} focused={focusSection === "compose"} onSubmit={handleSend} slashCommands={slashCommandEntries} agents={agentEntries}/>)}
|
|
580
|
+
</>} thread={threadOpen && threadParentMessage ? (<ThreadPanel width={layout.threadWidth} focused={focusSection === "thread"} parentMessage={threadParentMessage} replies={threadReplies} sourceChannelName={activeChannelName} sourceChannelType={activeChannelType} alsoSendToChannel={false} onSendReply={handleThreadReply} onToggleAlsoSend={() => { }} onClose={handleCloseThread} slashCommands={slashCommandEntries} agents={agentEntries}/>) : undefined} overlay={quickSwitcherOpen ? (<QuickSwitcher open={quickSwitcherOpen} items={switcherItems} onSelect={handleQuickSwitcherSelect} onClose={() => setQuickSwitcherOpen(false)}/>) : undefined}/>);
|
|
570
581
|
}
|
|
571
582
|
export default SlackHome;
|
|
572
583
|
//# sourceMappingURL=slack-home.js.map
|