@orderful/droid 0.16.0 → 0.17.0

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.
Files changed (83) hide show
  1. package/.claude/CLAUDE.md +3 -43
  2. package/AGENTS.md +75 -0
  3. package/CHANGELOG.md +18 -0
  4. package/bun.lock +12 -0
  5. package/dist/bin/droid.js +3064 -54
  6. package/dist/commands/tui/components/Badge.test.d.ts +2 -0
  7. package/dist/commands/tui/components/Badge.test.d.ts.map +1 -0
  8. package/dist/commands/tui/components/TabBar.test.d.ts +2 -0
  9. package/dist/commands/tui/components/TabBar.test.d.ts.map +1 -0
  10. package/dist/index.js +952 -6
  11. package/package.json +7 -2
  12. package/playwright.config.ts +20 -0
  13. package/scripts/build.ts +78 -0
  14. package/scripts/screenshot-tui.ts +126 -0
  15. package/src/commands/tui/components/Badge.test.tsx +94 -0
  16. package/src/commands/tui/components/TabBar.test.tsx +39 -0
  17. package/tests/e2e/tui.spec.ts +128 -0
  18. package/dist/bin/droid.js.map +0 -1
  19. package/dist/commands/config.js +0 -67
  20. package/dist/commands/config.js.map +0 -1
  21. package/dist/commands/install.js +0 -45
  22. package/dist/commands/install.js.map +0 -1
  23. package/dist/commands/setup.js +0 -269
  24. package/dist/commands/setup.js.map +0 -1
  25. package/dist/commands/skills.js +0 -144
  26. package/dist/commands/skills.js.map +0 -1
  27. package/dist/commands/tui/components/Badge.js +0 -29
  28. package/dist/commands/tui/components/Badge.js.map +0 -1
  29. package/dist/commands/tui/components/Markdown.js +0 -42
  30. package/dist/commands/tui/components/Markdown.js.map +0 -1
  31. package/dist/commands/tui/components/SettingsDetails.js +0 -11
  32. package/dist/commands/tui/components/SettingsDetails.js.map +0 -1
  33. package/dist/commands/tui/components/TabBar.js +0 -7
  34. package/dist/commands/tui/components/TabBar.js.map +0 -1
  35. package/dist/commands/tui/components/ToolDetails.js +0 -35
  36. package/dist/commands/tui/components/ToolDetails.js.map +0 -1
  37. package/dist/commands/tui/components/ToolItem.js +0 -11
  38. package/dist/commands/tui/components/ToolItem.js.map +0 -1
  39. package/dist/commands/tui/constants.js +0 -17
  40. package/dist/commands/tui/constants.js.map +0 -1
  41. package/dist/commands/tui/hooks/useAppUpdate.js +0 -52
  42. package/dist/commands/tui/hooks/useAppUpdate.js.map +0 -1
  43. package/dist/commands/tui/hooks/useToolUpdates.js +0 -77
  44. package/dist/commands/tui/hooks/useToolUpdates.js.map +0 -1
  45. package/dist/commands/tui/types.js +0 -2
  46. package/dist/commands/tui/types.js.map +0 -1
  47. package/dist/commands/tui/views/ReadmeViewer.js +0 -56
  48. package/dist/commands/tui/views/ReadmeViewer.js.map +0 -1
  49. package/dist/commands/tui/views/SetupScreen.js +0 -114
  50. package/dist/commands/tui/views/SetupScreen.js.map +0 -1
  51. package/dist/commands/tui/views/SkillConfigScreen.js +0 -148
  52. package/dist/commands/tui/views/SkillConfigScreen.js.map +0 -1
  53. package/dist/commands/tui/views/ToolExplorer.js +0 -86
  54. package/dist/commands/tui/views/ToolExplorer.js.map +0 -1
  55. package/dist/commands/tui/views/ToolUpdatePrompt.js +0 -38
  56. package/dist/commands/tui/views/ToolUpdatePrompt.js.map +0 -1
  57. package/dist/commands/tui/views/WelcomeScreen.js +0 -46
  58. package/dist/commands/tui/views/WelcomeScreen.js.map +0 -1
  59. package/dist/commands/tui.js +0 -307
  60. package/dist/commands/tui.js.map +0 -1
  61. package/dist/commands/uninstall.js +0 -26
  62. package/dist/commands/uninstall.js.map +0 -1
  63. package/dist/commands/update.js +0 -45
  64. package/dist/commands/update.js.map +0 -1
  65. package/dist/index.js.map +0 -1
  66. package/dist/lib/agents.js +0 -248
  67. package/dist/lib/agents.js.map +0 -1
  68. package/dist/lib/config.js +0 -196
  69. package/dist/lib/config.js.map +0 -1
  70. package/dist/lib/platforms.js +0 -52
  71. package/dist/lib/platforms.js.map +0 -1
  72. package/dist/lib/quotes.js +0 -24
  73. package/dist/lib/quotes.js.map +0 -1
  74. package/dist/lib/skill-config.js +0 -80
  75. package/dist/lib/skill-config.js.map +0 -1
  76. package/dist/lib/skills.js +0 -582
  77. package/dist/lib/skills.js.map +0 -1
  78. package/dist/lib/tools.js +0 -145
  79. package/dist/lib/tools.js.map +0 -1
  80. package/dist/lib/types.js +0 -50
  81. package/dist/lib/types.js.map +0 -1
  82. package/dist/lib/version.js +0 -100
  83. package/dist/lib/version.js.map +0 -1
@@ -1,86 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Box, Text, useInput } from 'ink';
3
- import { useState, useMemo } from 'react';
4
- import { existsSync, readFileSync } from 'fs';
5
- import { join } from 'path';
6
- import { getBundledToolsDir } from '../../../lib/tools';
7
- import { colors } from '../constants';
8
- export function ToolExplorer({ tool, onViewSource, onClose }) {
9
- const [selectedIndex, setSelectedIndex] = useState(0);
10
- // Build list of all explorable items
11
- const items = useMemo(() => {
12
- const result = [];
13
- const toolDir = getBundledToolsDir();
14
- // Add skills
15
- for (const skill of tool.includes.skills) {
16
- result.push({
17
- type: 'skill',
18
- name: skill.name,
19
- path: join(toolDir, tool.name, 'skills', skill.name, 'SKILL.md'),
20
- });
21
- }
22
- // Add commands
23
- for (const cmd of tool.includes.commands) {
24
- result.push({
25
- type: 'command',
26
- name: `/${cmd}`,
27
- path: join(toolDir, tool.name, 'commands', `${cmd}.md`),
28
- });
29
- }
30
- // Add agents
31
- for (const agent of tool.includes.agents) {
32
- result.push({
33
- type: 'agent',
34
- name: agent,
35
- path: join(toolDir, tool.name, 'agents', agent, 'AGENT.md'),
36
- });
37
- }
38
- return result;
39
- }, [tool]);
40
- useInput((input, key) => {
41
- if (key.escape) {
42
- onClose();
43
- return;
44
- }
45
- if (key.leftArrow || key.upArrow) {
46
- setSelectedIndex((prev) => Math.max(0, prev - 1));
47
- }
48
- if (key.rightArrow || key.downArrow) {
49
- setSelectedIndex((prev) => Math.min(items.length - 1, prev + 1));
50
- }
51
- if (key.return && items.length > 0) {
52
- const item = items[selectedIndex];
53
- if (existsSync(item.path)) {
54
- const content = readFileSync(item.path, 'utf-8');
55
- onViewSource(`${tool.name} / ${item.name}`, content);
56
- }
57
- else {
58
- // Try YAML fallback for skills/agents
59
- const yamlPath = item.path.replace('.md', '.yaml');
60
- if (existsSync(yamlPath)) {
61
- const content = readFileSync(yamlPath, 'utf-8');
62
- onViewSource(`${tool.name} / ${item.name}`, content);
63
- }
64
- }
65
- }
66
- });
67
- // Group items by type for display
68
- const skillItems = items.filter(i => i.type === 'skill');
69
- const commandItems = items.filter(i => i.type === 'command');
70
- const agentItems = items.filter(i => i.type === 'agent');
71
- const getItemIndex = (item) => items.indexOf(item);
72
- return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { children: [_jsx(Text, { color: colors.textDim, children: "[" }), _jsx(Text, { color: colors.primary, children: "\u25CF" }), _jsx(Text, { color: colors.textDim, children: " " }), _jsx(Text, { color: colors.primary, children: "\u25CF" }), _jsx(Text, { color: colors.textDim, children: "] " }), _jsx(Text, { color: colors.text, bold: true, children: tool.name })] }) }), _jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: colors.textMuted, children: tool.description }) }), skillItems.length > 0 && (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Text, { color: colors.skill, bold: true, children: "Skills" }), _jsx(Box, { flexDirection: "row", flexWrap: "wrap", marginTop: 1, children: skillItems.map((item) => {
73
- const idx = getItemIndex(item);
74
- const isSelected = selectedIndex === idx;
75
- return (_jsx(Box, { marginRight: 1, marginBottom: 1, children: _jsx(Text, { backgroundColor: isSelected ? colors.skill : colors.bgSelected, color: isSelected ? '#000000' : colors.skill, bold: isSelected, children: ` ${item.name} ` }) }, item.name));
76
- }) })] })), commandItems.length > 0 && (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Text, { color: colors.command, bold: true, children: "Commands" }), _jsx(Box, { flexDirection: "row", flexWrap: "wrap", marginTop: 1, children: commandItems.map((item) => {
77
- const idx = getItemIndex(item);
78
- const isSelected = selectedIndex === idx;
79
- return (_jsx(Box, { marginRight: 1, marginBottom: 1, children: _jsx(Text, { backgroundColor: isSelected ? colors.command : colors.bgSelected, color: isSelected ? '#000000' : colors.command, bold: isSelected, children: ` ${item.name} ` }) }, item.name));
80
- }) })] })), agentItems.length > 0 && (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Text, { color: colors.agent, bold: true, children: "Agents" }), _jsx(Box, { flexDirection: "row", flexWrap: "wrap", marginTop: 1, children: agentItems.map((item) => {
81
- const idx = getItemIndex(item);
82
- const isSelected = selectedIndex === idx;
83
- return (_jsx(Box, { marginRight: 1, marginBottom: 1, children: _jsx(Text, { backgroundColor: isSelected ? colors.agent : colors.bgSelected, color: isSelected ? '#000000' : colors.agent, bold: isSelected, children: ` ${item.name} ` }) }, item.name));
84
- }) })] })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: colors.textDim, children: "\u2190\u2192 navigate \u00B7 enter view source \u00B7 esc back" }) })] }));
85
- }
86
- //# sourceMappingURL=ToolExplorer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ToolExplorer.js","sourceRoot":"","sources":["../../../../src/commands/tui/views/ToolExplorer.tsx"],"names":[],"mappings":"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"}
@@ -1,38 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Box, Text, useInput } from 'ink';
3
- import { useState } from 'react';
4
- import { colors } from '../constants';
5
- export function ToolUpdatePrompt({ toolUpdates, onUpdateAll, onAlways, onSkip, isUpdating }) {
6
- const [selectedButton, setSelectedButton] = useState(0);
7
- useInput((input, key) => {
8
- if (isUpdating)
9
- return;
10
- if (key.leftArrow) {
11
- setSelectedButton((prev) => Math.max(0, prev - 1));
12
- }
13
- if (key.rightArrow) {
14
- setSelectedButton((prev) => Math.min(2, prev + 1));
15
- }
16
- if (key.return) {
17
- if (selectedButton === 0) {
18
- onUpdateAll();
19
- }
20
- else if (selectedButton === 1) {
21
- onAlways();
22
- }
23
- else {
24
- onSkip();
25
- }
26
- }
27
- if (input === 'q') {
28
- onSkip();
29
- }
30
- });
31
- const buttons = [
32
- { label: 'Update All', action: onUpdateAll },
33
- { label: 'Always', action: onAlways },
34
- { label: 'Skip', action: onSkip },
35
- ];
36
- return (_jsx(Box, { flexDirection: "column", alignItems: "center", justifyContent: "center", height: 18, children: _jsxs(Box, { flexDirection: "column", alignItems: "center", borderStyle: "single", borderColor: colors.primary, paddingX: 4, paddingY: 1, children: [_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { children: [_jsx(Text, { color: colors.textDim, children: "\u2554\u2550\u2550\u2550\u2550\u2550\u2557 " }), _jsx(Text, { color: colors.text, children: "Tool Updates" })] }), _jsxs(Text, { children: [_jsx(Text, { color: colors.textDim, children: "\u2551 " }), _jsx(Text, { color: colors.primary, children: "\u25CF" }), _jsx(Text, { color: colors.textDim, children: " " }), _jsx(Text, { color: colors.primary, children: "\u25CF" }), _jsx(Text, { color: colors.textDim, children: " \u2551 " }), _jsxs(Text, { color: colors.textMuted, children: [toolUpdates.length, " tool", toolUpdates.length > 1 ? 's have' : ' has', " updates available"] })] }), _jsx(Text, { children: _jsx(Text, { color: colors.textDim, children: "\u255A\u2550\u2566\u2550\u2566\u2550\u255D" }) })] }), _jsxs(Box, { marginTop: 1, marginBottom: 1, flexDirection: "column", children: [toolUpdates.slice(0, 5).map((tool) => (_jsxs(Text, { color: colors.textMuted, children: [_jsx(Text, { color: colors.primary, children: "\u2191" }), " ", tool.name, _jsxs(Text, { color: colors.textDim, children: [" ", tool.installedVersion, " \u2192 ", tool.bundledVersion] })] }, tool.name))), toolUpdates.length > 5 && (_jsxs(Text, { color: colors.textDim, children: ["...and ", toolUpdates.length - 5, " more"] }))] }), isUpdating ? (_jsx(Text, { color: colors.primary, children: "Updating tools..." })) : (_jsx(Box, { flexDirection: "row", children: buttons.map((button, index) => (_jsxs(Text, { backgroundColor: selectedButton === index ? colors.primary : colors.bgSelected, color: selectedButton === index ? '#000000' : colors.textMuted, bold: selectedButton === index, children: [' ', button.label, ' '] }, button.label))) })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: colors.textDim, children: "\u2190\u2192 select \u00B7 enter \u00B7 \"Always\" enables auto-update" }) })] }) }));
37
- }
38
- //# sourceMappingURL=ToolUpdatePrompt.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ToolUpdatePrompt.js","sourceRoot":"","sources":["../../../../src/commands/tui/views/ToolUpdatePrompt.tsx"],"names":[],"mappings":"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"}
@@ -1,46 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { Box, Text, useInput } from 'ink';
3
- import { useState, useMemo } from 'react';
4
- import { colors } from '../constants';
5
- import { getRandomQuote } from '../../../lib/quotes';
6
- export function WelcomeScreen({ onContinue, onUpdate, onAlways, onExit, updateInfo, isUpdating }) {
7
- const [selectedButton, setSelectedButton] = useState(0);
8
- const welcomeQuote = useMemo(() => getRandomQuote(), []);
9
- useInput((input, key) => {
10
- if (isUpdating)
11
- return;
12
- if (updateInfo.hasUpdate) {
13
- if (key.leftArrow) {
14
- setSelectedButton((prev) => Math.max(0, prev - 1));
15
- }
16
- if (key.rightArrow) {
17
- setSelectedButton((prev) => Math.min(2, prev + 1));
18
- }
19
- if (key.return) {
20
- if (selectedButton === 0) {
21
- onUpdate();
22
- }
23
- else if (selectedButton === 1) {
24
- onAlways();
25
- }
26
- else {
27
- onContinue();
28
- }
29
- }
30
- if (input === 'q') {
31
- onExit();
32
- }
33
- }
34
- else {
35
- if (key.return) {
36
- onContinue();
37
- }
38
- if (input === 'q') {
39
- onExit();
40
- }
41
- }
42
- });
43
- const hasUpdate = updateInfo.hasUpdate && updateInfo.latestVersion;
44
- return (_jsx(Box, { flexDirection: "column", alignItems: "center", justifyContent: "center", height: 18, children: _jsxs(Box, { flexDirection: "column", alignItems: "center", borderStyle: "single", borderColor: hasUpdate ? '#eab308' : colors.border, paddingX: 4, paddingY: 1, children: [_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { children: [_jsx(Text, { color: colors.textDim, children: "\u2554\u2550\u2550\u2550\u2550\u2550\u2557 " }), _jsx(Text, { color: colors.text, children: "droid" }), _jsxs(Text, { color: colors.textDim, children: [" v", updateInfo.currentVersion] })] }), _jsxs(Text, { children: [_jsx(Text, { color: colors.textDim, children: "\u2551 " }), _jsx(Text, { color: hasUpdate ? '#eab308' : colors.primary, children: "\u25CF" }), _jsx(Text, { color: colors.textDim, children: " " }), _jsx(Text, { color: hasUpdate ? '#eab308' : colors.primary, children: "\u25CF" }), _jsx(Text, { color: colors.textDim, children: " \u2551 " }), _jsx(Text, { color: colors.textMuted, children: "Droid, teaching your AI new tricks" })] }), _jsxs(Text, { children: [_jsx(Text, { color: colors.textDim, children: "\u255A\u2550\u2566\u2550\u2566\u2550\u255D " }), _jsx(Text, { color: colors.textDim, children: "github.com/Orderful/droid" })] })] }), hasUpdate ? (_jsxs(_Fragment, { children: [_jsxs(Box, { marginTop: 2, marginBottom: 1, flexDirection: "column", alignItems: "center", children: [_jsx(Text, { color: "#eab308", italic: true, children: "\"The odds of functioning optimally without this" }), _jsx(Text, { color: "#eab308", italic: true, children: "update are approximately 3,720 to 1.\"" })] }), _jsx(Box, { marginBottom: 1, children: _jsxs(Text, { color: colors.textMuted, children: ["v", updateInfo.currentVersion, " \u2192 v", updateInfo.latestVersion] }) }), isUpdating ? (_jsx(Text, { color: "#eab308", children: "Updating..." })) : (_jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { backgroundColor: selectedButton === 0 ? '#eab308' : colors.bgSelected, color: selectedButton === 0 ? '#000000' : colors.textMuted, bold: selectedButton === 0, children: [' ', "Update", ' '] }), _jsx(Text, { children: " " }), _jsxs(Text, { backgroundColor: selectedButton === 1 ? '#eab308' : colors.bgSelected, color: selectedButton === 1 ? '#000000' : colors.textMuted, bold: selectedButton === 1, children: [' ', "Always", ' '] }), _jsx(Text, { children: " " }), _jsxs(Text, { backgroundColor: selectedButton === 2 ? colors.bgSelected : undefined, color: selectedButton === 2 ? colors.text : colors.textMuted, bold: selectedButton === 2, children: [' ', "Skip", ' '] })] })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: colors.textDim, children: "\u2190\u2192 select \u00B7 enter \u00B7 \"Always\" enables auto-update" }) })] })) : (_jsxs(_Fragment, { children: [_jsx(Box, { marginTop: 2, marginBottom: 1, children: _jsx(Text, { backgroundColor: colors.primary, color: "#ffffff", bold: true, children: ` ${welcomeQuote} ` }) }), _jsx(Text, { color: colors.textDim, children: "press enter" })] }))] }) }));
45
- }
46
- //# sourceMappingURL=WelcomeScreen.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"WelcomeScreen.js","sourceRoot":"","sources":["../../../../src/commands/tui/views/WelcomeScreen.tsx"],"names":[],"mappings":"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"}
@@ -1,307 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { render, Box, Text, useInput, useApp } from 'ink';
3
- import { useState } from 'react';
4
- import { getBundledSkills, installSkill, uninstallSkill, updateSkill, } from '../lib/skills';
5
- import { getBundledTools, isToolInstalled, getToolUpdateStatus } from '../lib/tools';
6
- import { configExists, loadConfig } from '../lib/config';
7
- import { Platform } from '../lib/types';
8
- import { getVersion } from '../lib/version';
9
- import { colors, MAX_VISIBLE_ITEMS } from './tui/constants';
10
- import { TabBar } from './tui/components/TabBar';
11
- import { ToolItem } from './tui/components/ToolItem';
12
- import { ToolDetails } from './tui/components/ToolDetails';
13
- import { SettingsDetails } from './tui/components/SettingsDetails';
14
- import { WelcomeScreen } from './tui/views/WelcomeScreen';
15
- import { ToolUpdatePrompt } from './tui/views/ToolUpdatePrompt';
16
- import { SetupScreen } from './tui/views/SetupScreen';
17
- import { ReadmeViewer } from './tui/views/ReadmeViewer';
18
- import { ToolExplorer } from './tui/views/ToolExplorer';
19
- import { SkillConfigScreen } from './tui/views/SkillConfigScreen';
20
- import { useAppUpdate } from './tui/hooks/useAppUpdate';
21
- import { useToolUpdates } from './tui/hooks/useToolUpdates';
22
- // Module-level variable to store exit message (printed after leaving alternate screen)
23
- let exitMessage = null;
24
- function App() {
25
- const { exit } = useApp();
26
- const tabs = [
27
- { id: 'tools', label: 'Tools' },
28
- { id: 'settings', label: 'Settings' },
29
- ];
30
- const [activeTab, setActiveTab] = useState('tools');
31
- const [tabIndex, setTabIndex] = useState(0);
32
- const [view, setView] = useState('welcome');
33
- const [selectedIndex, setSelectedIndex] = useState(0);
34
- const [selectedAction, setSelectedAction] = useState(0);
35
- const [scrollOffset, setScrollOffset] = useState(0);
36
- const [message, setMessage] = useState(null);
37
- const [isEditingSettings, setIsEditingSettings] = useState(false);
38
- const [readmeContent, setReadmeContent] = useState(null);
39
- const [previousView, setPreviousView] = useState('detail'); // Track where to return from readme
40
- const { updateInfo, isUpdating, handleUpdate, handleAlwaysUpdate } = useAppUpdate({
41
- onUpdateSuccess: (msg) => {
42
- exitMessage = msg;
43
- },
44
- onUpdateFailure: (error) => {
45
- setMessage({ text: error, type: 'error' });
46
- if (!configExists()) {
47
- setView('setup');
48
- }
49
- else {
50
- setView('menu');
51
- }
52
- },
53
- });
54
- const proceedToNextView = () => {
55
- if (!configExists()) {
56
- setView('setup');
57
- }
58
- else {
59
- setView('menu');
60
- }
61
- };
62
- const { toolUpdates, isUpdatingTools, autoUpdatedTools, checkForUpdates, updateAllTools, enableAutoUpdateAndUpdate, } = useToolUpdates({
63
- onUpdateComplete: ({ successCount, failCount, silent }) => {
64
- if (successCount > 0) {
65
- setMessage({
66
- text: silent
67
- ? `↑ Auto-updated ${successCount} tool${successCount > 1 ? 's' : ''}`
68
- : `✓ Updated ${successCount} tool${successCount > 1 ? 's' : ''}${failCount > 0 ? `, ${failCount} failed` : ''}`,
69
- type: failCount > 0 ? 'error' : 'success',
70
- });
71
- }
72
- proceedToNextView();
73
- },
74
- });
75
- // Check for tool updates and proceed to next view
76
- const checkToolUpdatesAndProceed = () => {
77
- const { updates, shouldAutoUpdate } = checkForUpdates();
78
- if (shouldAutoUpdate) {
79
- updateAllTools(updates, true);
80
- return;
81
- }
82
- if (updates.length > 0) {
83
- setView('tool-updates');
84
- return;
85
- }
86
- proceedToNextView();
87
- };
88
- const handleSkipToolUpdates = () => {
89
- proceedToNextView();
90
- };
91
- const tools = getBundledTools();
92
- // Keep skills for configure view (tools configure via their primary skill)
93
- const skills = getBundledSkills();
94
- useInput((input, key) => {
95
- if (message)
96
- setMessage(null);
97
- if (input === 'q') {
98
- exit();
99
- return;
100
- }
101
- if (view === 'menu') {
102
- if (key.leftArrow) {
103
- const newIndex = Math.max(0, tabIndex - 1);
104
- setTabIndex(newIndex);
105
- setActiveTab(tabs[newIndex].id);
106
- setSelectedIndex(0);
107
- setScrollOffset(0);
108
- }
109
- if (key.rightArrow) {
110
- const newIndex = Math.min(tabs.length - 1, tabIndex + 1);
111
- setTabIndex(newIndex);
112
- setActiveTab(tabs[newIndex].id);
113
- setSelectedIndex(0);
114
- setScrollOffset(0);
115
- }
116
- if (key.upArrow) {
117
- setSelectedIndex((prev) => {
118
- const newIndex = Math.max(0, prev - 1);
119
- // Scroll up if needed
120
- if (newIndex < scrollOffset) {
121
- setScrollOffset(newIndex);
122
- }
123
- return newIndex;
124
- });
125
- setSelectedAction(0);
126
- }
127
- if (key.downArrow) {
128
- const maxIndex = activeTab === 'tools' ? tools.length - 1 : 0;
129
- setSelectedIndex((prev) => {
130
- const newIndex = Math.min(maxIndex, prev + 1);
131
- // Scroll down if needed
132
- if (newIndex >= scrollOffset + MAX_VISIBLE_ITEMS) {
133
- setScrollOffset(newIndex - MAX_VISIBLE_ITEMS + 1);
134
- }
135
- return newIndex;
136
- });
137
- setSelectedAction(0);
138
- }
139
- if (key.return) {
140
- if (activeTab === 'tools' && tools.length > 0) {
141
- setView('detail');
142
- }
143
- else if (activeTab === 'settings') {
144
- setView('detail');
145
- }
146
- }
147
- }
148
- else if (view === 'detail') {
149
- if (key.escape || key.backspace) {
150
- setView('menu');
151
- setSelectedAction(0);
152
- }
153
- if (activeTab === 'settings') {
154
- // Settings detail view - just enter to edit
155
- if (key.return) {
156
- setIsEditingSettings(true);
157
- setView('setup');
158
- }
159
- }
160
- if (key.leftArrow && activeTab === 'tools') {
161
- setSelectedAction((prev) => Math.max(0, prev - 1));
162
- }
163
- if (key.rightArrow && activeTab === 'tools') {
164
- let maxActions = 0;
165
- const tool = tools[selectedIndex];
166
- const installed = tool ? isToolInstalled(tool.name) : false;
167
- const hasUpdate = tool ? getToolUpdateStatus(tool.name).hasUpdate : false;
168
- const isSystem = tool ? tool.system === true : false;
169
- // Explore, [Update], Configure, [Uninstall] or Explore, Install
170
- // System tools don't have Uninstall, so one less action
171
- maxActions = installed ? (hasUpdate ? (isSystem ? 2 : 3) : (isSystem ? 1 : 2)) : 1;
172
- setSelectedAction((prev) => Math.min(maxActions, prev + 1));
173
- }
174
- if (key.return && activeTab === 'tools') {
175
- const tool = tools[selectedIndex];
176
- if (tool) {
177
- const installed = isToolInstalled(tool.name);
178
- const toolUpdateStatus = getToolUpdateStatus(tool.name);
179
- const isSystemTool = tool.system === true;
180
- // Build actions array to match ToolDetails
181
- const toolActions = installed
182
- ? [
183
- { id: 'explore' },
184
- ...(toolUpdateStatus.hasUpdate ? [{ id: 'update' }] : []),
185
- { id: 'configure' },
186
- ...(!isSystemTool ? [{ id: 'uninstall' }] : []),
187
- ]
188
- : [{ id: 'explore' }, { id: 'install' }];
189
- const actionId = toolActions[selectedAction]?.id;
190
- if (actionId === 'explore') {
191
- // Open the tool explorer view
192
- setView('explorer');
193
- }
194
- else if (actionId === 'update') {
195
- // Update the primary skill of the tool
196
- const primarySkill = tool.includes.skills.find(s => s.required)?.name || tool.name;
197
- const result = updateSkill(primarySkill);
198
- setMessage({
199
- text: result.success ? `✓ Updated ${tool.name}` : `✗ ${result.message}`,
200
- type: result.success ? 'success' : 'error',
201
- });
202
- if (result.success) {
203
- setSelectedAction(0);
204
- }
205
- }
206
- else if (actionId === 'configure') {
207
- setView('configure');
208
- }
209
- else if (actionId === 'uninstall') {
210
- // Uninstall the primary skill of the tool
211
- const primarySkill = tool.includes.skills.find(s => s.required)?.name || tool.name;
212
- const result = uninstallSkill(primarySkill);
213
- setMessage({
214
- text: result.success ? `✓ Uninstalled ${tool.name}` : `✗ ${result.message}`,
215
- type: result.success ? 'success' : 'error',
216
- });
217
- if (result.success) {
218
- setView('menu');
219
- setSelectedAction(0);
220
- }
221
- }
222
- else if (actionId === 'install') {
223
- // Install the primary skill of the tool
224
- const primarySkill = tool.includes.skills.find(s => s.required)?.name || tool.name;
225
- const result = installSkill(primarySkill);
226
- setMessage({
227
- text: result.success ? `✓ Installed ${tool.name}` : `✗ ${result.message}`,
228
- type: result.success ? 'success' : 'error',
229
- });
230
- if (result.success) {
231
- // Check if tool has required config (options without defaults)
232
- const configSchema = tool.config_schema || {};
233
- const hasRequiredConfig = Object.values(configSchema).some((option) => option.default === undefined);
234
- if (hasRequiredConfig) {
235
- // Go to configure view for required setup
236
- setView('configure');
237
- }
238
- else {
239
- setView('menu');
240
- setSelectedAction(0);
241
- }
242
- }
243
- }
244
- }
245
- }
246
- }
247
- }, { isActive: view !== 'welcome' && view !== 'tool-updates' && view !== 'setup' && view !== 'configure' && view !== 'explorer' });
248
- const selectedTool = activeTab === 'tools' ? tools[selectedIndex] ?? null : null;
249
- // For configure view, we need the matching skill manifest
250
- const selectedSkillForConfig = selectedTool
251
- ? skills.find(s => s.name === (selectedTool.includes.skills.find(sk => sk.required)?.name || selectedTool.name))
252
- : null;
253
- if (view === 'welcome') {
254
- return (_jsx(WelcomeScreen, { updateInfo: updateInfo, isUpdating: isUpdating, onUpdate: handleUpdate, onAlways: handleAlwaysUpdate, onExit: exit, onContinue: checkToolUpdatesAndProceed }));
255
- }
256
- if (view === 'tool-updates' && toolUpdates.length > 0) {
257
- return (_jsx(ToolUpdatePrompt, { toolUpdates: toolUpdates, onUpdateAll: () => updateAllTools(), onAlways: enableAutoUpdateAndUpdate, onSkip: handleSkipToolUpdates, isUpdating: isUpdatingTools }));
258
- }
259
- if (view === 'setup') {
260
- return (_jsx(SetupScreen, { onComplete: () => {
261
- setIsEditingSettings(false);
262
- setView('menu');
263
- }, onSkip: () => {
264
- setIsEditingSettings(false);
265
- setView('menu');
266
- }, initialConfig: isEditingSettings ? loadConfig() : undefined }));
267
- }
268
- if (view === 'readme' && readmeContent) {
269
- return (_jsx(ReadmeViewer, { title: readmeContent.title, content: readmeContent.content, onClose: () => {
270
- setReadmeContent(null);
271
- setView(previousView);
272
- } }));
273
- }
274
- if (view === 'explorer' && selectedTool) {
275
- return (_jsx(ToolExplorer, { tool: selectedTool, onViewSource: (title, content) => {
276
- setPreviousView('explorer');
277
- setReadmeContent({ title, content });
278
- setView('readme');
279
- }, onClose: () => {
280
- setView('detail');
281
- } }));
282
- }
283
- if (view === 'configure' && selectedSkillForConfig) {
284
- return (_jsx(SkillConfigScreen, { skill: selectedSkillForConfig, onComplete: () => {
285
- setMessage({ text: `✓ Configuration saved for ${selectedTool?.name || selectedSkillForConfig.name}`, type: 'success' });
286
- setView('detail');
287
- }, onCancel: () => {
288
- setView('detail');
289
- } }));
290
- }
291
- return (_jsxs(Box, { flexDirection: "row", padding: 1, children: [_jsxs(Box, { flexDirection: "column", width: 44, borderStyle: "single", borderColor: colors.border, children: [_jsx(Box, { paddingX: 1, children: _jsxs(Text, { children: [_jsx(Text, { color: colors.textDim, children: "[" }), _jsx(Text, { color: colors.primary, children: "\u25CF" }), _jsx(Text, { color: colors.textDim, children: " " }), _jsx(Text, { color: colors.primary, children: "\u25CF" }), _jsx(Text, { color: colors.textDim, children: "] " }), _jsx(Text, { color: colors.textMuted, children: "droid" }), _jsxs(Text, { color: colors.textDim, children: [" v", getVersion()] })] }) }), _jsx(Box, { paddingX: 1, children: _jsx(Text, { color: colors.textDim, children: loadConfig().platform === Platform.ClaudeCode ? 'Claude Code' : 'OpenCode' }) }), _jsx(Box, { paddingX: 1, marginTop: 1, children: _jsx(TabBar, { tabs: tabs, activeTab: activeTab }) }), _jsxs(Box, { flexDirection: "column", marginTop: 1, children: [activeTab === 'tools' && (_jsxs(_Fragment, { children: [scrollOffset > 0 && (_jsx(Box, { paddingX: 1, children: _jsxs(Text, { color: colors.textDim, children: ["\u2191 ", scrollOffset, " more"] }) })), tools.slice(scrollOffset, scrollOffset + MAX_VISIBLE_ITEMS).map((tool, index) => (_jsx(ToolItem, { tool: tool, isSelected: scrollOffset + index === selectedIndex, isActive: scrollOffset + index === selectedIndex && view === 'detail', wasAutoUpdated: autoUpdatedTools.includes(tool.name) }, tool.name))), scrollOffset + MAX_VISIBLE_ITEMS < tools.length && (_jsx(Box, { paddingX: 1, children: _jsxs(Text, { color: colors.textDim, children: ["\u2193 ", tools.length - scrollOffset - MAX_VISIBLE_ITEMS, " more"] }) })), tools.length > MAX_VISIBLE_ITEMS && (_jsx(Box, { paddingX: 1, marginTop: 1, children: _jsxs(Text, { color: colors.textDim, children: [tools.length, " tools total"] }) }))] })), activeTab === 'settings' && (_jsx(Box, { paddingX: 1, children: _jsx(Text, { color: colors.textDim, children: "View and edit config" }) }))] }), message && (_jsx(Box, { paddingX: 1, marginTop: 1, children: _jsx(Text, { color: message.type === 'success' ? colors.success : colors.error, children: message.text }) })), _jsx(Box, { paddingX: 1, marginTop: 1, children: _jsx(Text, { color: colors.textDim, children: view === 'menu' ? '←→ ↑↓ enter q' : '←→ enter esc q' }) })] }), activeTab === 'tools' && (_jsx(ToolDetails, { tool: selectedTool, isFocused: view === 'detail', selectedAction: selectedAction })), activeTab === 'settings' && (_jsx(SettingsDetails, { isFocused: view === 'detail' }))] }));
292
- }
293
- export async function tuiCommand() {
294
- // Enter alternate screen (fullscreen mode)
295
- process.stdout.write('\x1b[?1049h');
296
- process.stdout.write('\x1b[H'); // Move cursor to top-left
297
- const { waitUntilExit } = render(_jsx(App, {}));
298
- await waitUntilExit();
299
- // Leave alternate screen
300
- process.stdout.write('\x1b[?1049l');
301
- // Print exit message if set (e.g., after successful update)
302
- if (exitMessage) {
303
- console.log(exitMessage);
304
- exitMessage = null;
305
- }
306
- }
307
- //# sourceMappingURL=tui.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tui.js","sourceRoot":"","sources":["../../src/commands/tui.tsx"],"names":[],"mappings":"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"}
@@ -1,26 +0,0 @@
1
- import chalk from 'chalk';
2
- import { uninstallSkill } from '../lib/skills';
3
- import { getBundledTools, isToolInstalled } from '../lib/tools';
4
- export async function uninstallCommand(toolName) {
5
- const tools = getBundledTools();
6
- const tool = tools.find((t) => t.name === toolName);
7
- if (!tool) {
8
- console.error(chalk.red(`\n✗ Tool '${toolName}' not found`));
9
- process.exit(1);
10
- }
11
- if (!isToolInstalled(toolName)) {
12
- console.error(chalk.red(`\n✗ Tool '${toolName}' is not installed`));
13
- process.exit(1);
14
- }
15
- // Uninstall via primary skill
16
- const primarySkill = tool.includes.skills.find(s => s.required)?.name || toolName;
17
- const result = uninstallSkill(primarySkill);
18
- if (result.success) {
19
- console.log(chalk.green(`\n✓ Uninstalled ${toolName}`));
20
- }
21
- else {
22
- console.error(chalk.red(`\n✗ ${result.message}`));
23
- process.exit(1);
24
- }
25
- }
26
- //# sourceMappingURL=uninstall.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEhE,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,QAAgB;IACrD,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IAEpD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,QAAQ,aAAa,CAAC,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,QAAQ,oBAAoB,CAAC,CAAC,CAAC;QACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,8BAA8B;IAC9B,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAI,IAAI,QAAQ,CAAC;IAClF,MAAM,MAAM,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC;IAE5C,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,mBAAmB,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC1D,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -1,45 +0,0 @@
1
- import chalk from 'chalk';
2
- import { execSync } from 'child_process';
3
- import { getVersion } from '../lib/version';
4
- export async function updateCommand(tool, options) {
5
- // If specific tool specified, update just that tool
6
- if (tool) {
7
- console.log(chalk.yellow('\n⚠ Per-tool updates not implemented yet'));
8
- console.log(chalk.gray('Tools are bundled with the CLI - run `droid update` to update all.'));
9
- return;
10
- }
11
- // If --tools flag, update tools only
12
- if (options?.tools) {
13
- console.log(chalk.yellow('\n⚠ Tool-only updates not implemented yet'));
14
- console.log(chalk.gray('Tools are bundled with the CLI - run `droid update` to update all.'));
15
- return;
16
- }
17
- // Update CLI (and bundled skills with it)
18
- console.log(chalk.bold('\n🤖 Updating Droid...\n'));
19
- const currentVersion = getVersion();
20
- console.log(chalk.gray(`Current version: ${currentVersion}`));
21
- try {
22
- // Check for latest version
23
- const latestVersion = execSync('npm view @orderful/droid version 2>/dev/null', {
24
- encoding: 'utf-8',
25
- }).trim();
26
- if (!latestVersion) {
27
- console.log(chalk.yellow('\n⚠ Could not check for updates'));
28
- return;
29
- }
30
- if (latestVersion === currentVersion) {
31
- console.log(chalk.green('\n✓ Already on latest version'));
32
- return;
33
- }
34
- console.log(chalk.gray(`Latest version: ${latestVersion}`));
35
- console.log(chalk.gray('\nUpdating...'));
36
- execSync('npm install -g @orderful/droid@latest', { stdio: 'inherit' });
37
- console.log(chalk.green(`\n✓ Updated to v${latestVersion}`));
38
- }
39
- catch {
40
- // Package might not be published yet
41
- console.log(chalk.yellow('\n⚠ Could not check for updates'));
42
- console.log(chalk.gray('Package may not be published yet.'));
43
- }
44
- }
45
- //# sourceMappingURL=update.js.map