@colmbus72/yeehaw 0.5.0 → 0.6.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.
- package/claude-plugin/skills/yeehaw-development/SKILL.md +70 -0
- package/dist/app.js +166 -15
- package/dist/components/CritterHeader.d.ts +7 -0
- package/dist/components/CritterHeader.js +81 -0
- package/dist/components/List.d.ts +2 -0
- package/dist/components/List.js +1 -1
- package/dist/lib/auth/index.d.ts +2 -0
- package/dist/lib/auth/index.js +3 -0
- package/dist/lib/auth/linear.d.ts +20 -0
- package/dist/lib/auth/linear.js +79 -0
- package/dist/lib/auth/storage.d.ts +12 -0
- package/dist/lib/auth/storage.js +53 -0
- package/dist/lib/context.d.ts +10 -0
- package/dist/lib/context.js +63 -0
- package/dist/lib/critters.d.ts +33 -0
- package/dist/lib/critters.js +164 -0
- package/dist/lib/hotkeys.d.ts +1 -1
- package/dist/lib/hotkeys.js +6 -2
- package/dist/lib/issues/github.d.ts +11 -0
- package/dist/lib/issues/github.js +154 -0
- package/dist/lib/issues/index.d.ts +14 -0
- package/dist/lib/issues/index.js +27 -0
- package/dist/lib/issues/linear.d.ts +24 -0
- package/dist/lib/issues/linear.js +345 -0
- package/dist/lib/issues/types.d.ts +82 -0
- package/dist/lib/issues/types.js +2 -0
- package/dist/lib/paths.d.ts +1 -0
- package/dist/lib/paths.js +1 -0
- package/dist/lib/tmux.d.ts +1 -0
- package/dist/lib/tmux.js +45 -0
- package/dist/types.d.ts +19 -0
- package/dist/views/BarnContext.d.ts +2 -1
- package/dist/views/BarnContext.js +136 -14
- package/dist/views/CritterDetailView.d.ts +10 -0
- package/dist/views/CritterDetailView.js +117 -0
- package/dist/views/CritterLogsView.d.ts +8 -0
- package/dist/views/CritterLogsView.js +100 -0
- package/dist/views/IssuesView.d.ts +2 -1
- package/dist/views/IssuesView.js +661 -98
- package/dist/views/LivestockDetailView.d.ts +2 -1
- package/dist/views/LivestockDetailView.js +8 -1
- package/dist/views/ProjectContext.js +35 -1
- package/package.json +1 -1
|
@@ -9,8 +9,9 @@ interface LivestockDetailViewProps {
|
|
|
9
9
|
onBack: () => void;
|
|
10
10
|
onOpenLogs: () => void;
|
|
11
11
|
onOpenSession: () => void;
|
|
12
|
+
onOpenClaude?: () => void;
|
|
12
13
|
onSelectWindow: (window: TmuxWindow) => void;
|
|
13
14
|
onUpdateLivestock: (originalLivestock: Livestock, updatedLivestock: Livestock) => void;
|
|
14
15
|
}
|
|
15
|
-
export declare function LivestockDetailView({ project, livestock, source, sourceBarn, windows, onBack, onOpenLogs, onOpenSession, onSelectWindow, onUpdateLivestock, }: LivestockDetailViewProps): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
export declare function LivestockDetailView({ project, livestock, source, sourceBarn, windows, onBack, onOpenLogs, onOpenSession, onOpenClaude, onSelectWindow, onUpdateLivestock, }: LivestockDetailViewProps): import("react/jsx-runtime").JSX.Element;
|
|
16
17
|
export {};
|
|
@@ -9,7 +9,7 @@ import { Panel } from '../components/Panel.js';
|
|
|
9
9
|
import { PathInput } from '../components/PathInput.js';
|
|
10
10
|
import { loadBarn } from '../lib/config.js';
|
|
11
11
|
import { getWindowStatus } from '../lib/tmux.js';
|
|
12
|
-
export function LivestockDetailView({ project, livestock, source, sourceBarn, windows, onBack, onOpenLogs, onOpenSession, onSelectWindow, onUpdateLivestock, }) {
|
|
12
|
+
export function LivestockDetailView({ project, livestock, source, sourceBarn, windows, onBack, onOpenLogs, onOpenSession, onOpenClaude, onSelectWindow, onUpdateLivestock, }) {
|
|
13
13
|
const [mode, setMode] = useState('normal');
|
|
14
14
|
// Edit form state
|
|
15
15
|
const [editName, setEditName] = useState(livestock.name);
|
|
@@ -74,6 +74,13 @@ export function LivestockDetailView({ project, livestock, source, sourceBarn, wi
|
|
|
74
74
|
// Only process these in normal mode
|
|
75
75
|
if (mode !== 'normal')
|
|
76
76
|
return;
|
|
77
|
+
if (input === 'c') {
|
|
78
|
+
// Claude session only available for local livestock
|
|
79
|
+
if (onOpenClaude && !barn) {
|
|
80
|
+
onOpenClaude();
|
|
81
|
+
}
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
77
84
|
if (input === 's') {
|
|
78
85
|
onOpenSession();
|
|
79
86
|
return;
|
|
@@ -83,6 +83,7 @@ export function ProjectContext({ project, barns, windows, onBack, onNewClaudeFor
|
|
|
83
83
|
const [editColor, setEditColor] = useState(project.color || '');
|
|
84
84
|
const [editGradientSpread, setEditGradientSpread] = useState(project.gradientSpread ?? 5);
|
|
85
85
|
const [editGradientInverted, setEditGradientInverted] = useState(project.gradientInverted ?? false);
|
|
86
|
+
const [editIssueProvider, setEditIssueProvider] = useState((project.issueProvider?.type) ?? 'github');
|
|
86
87
|
// New livestock form state
|
|
87
88
|
const [newLivestockName, setNewLivestockName] = useState('');
|
|
88
89
|
const [newLivestockPath, setNewLivestockPath] = useState('');
|
|
@@ -149,6 +150,7 @@ export function ProjectContext({ project, barns, windows, onBack, onNewClaudeFor
|
|
|
149
150
|
setEditColor(project.color || '');
|
|
150
151
|
setEditGradientSpread(project.gradientSpread ?? 5);
|
|
151
152
|
setEditGradientInverted(project.gradientInverted ?? false);
|
|
153
|
+
setEditIssueProvider((project.issueProvider?.type) ?? 'github');
|
|
152
154
|
setMode('edit-name');
|
|
153
155
|
};
|
|
154
156
|
const cancelEdit = () => {
|
|
@@ -328,7 +330,39 @@ export function ProjectContext({ project, barns, windows, onBack, onNewClaudeFor
|
|
|
328
330
|
const filtered = value.replace(/[\[\]!]/g, '');
|
|
329
331
|
setEditColor(filtered);
|
|
330
332
|
};
|
|
331
|
-
return (_jsxs(Box, { flexDirection: "column", flexGrow: 1, children: [_jsx(Header, { text: project.name, subtitle: "Editing project", color: displayColor, gradientSpread: editGradientSpread, gradientInverted: editGradientInverted }), _jsxs(Box, { flexDirection: "column", padding: 2, children: [_jsxs(Text, { bold: true, color: "yellow", children: ["Edit Project: ", editName] }), _jsxs(Box, { marginTop: 1, children: [_jsx(Text, { children: "Color (hex): " }), _jsx(TextInput, { value: editColor, onChange: handleColorChange, onSubmit: () => saveAndNext('
|
|
333
|
+
return (_jsxs(Box, { flexDirection: "column", flexGrow: 1, children: [_jsx(Header, { text: project.name, subtitle: "Editing project", color: displayColor, gradientSpread: editGradientSpread, gradientInverted: editGradientInverted }), _jsxs(Box, { flexDirection: "column", padding: 2, children: [_jsxs(Text, { bold: true, color: "yellow", children: ["Edit Project: ", editName] }), _jsxs(Box, { marginTop: 1, children: [_jsx(Text, { children: "Color (hex): " }), _jsx(TextInput, { value: editColor, onChange: handleColorChange, onSubmit: () => saveAndNext('edit-issue-provider'), placeholder: "#ff6b6b" })] }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsxs(Text, { dimColor: true, children: ["Spread: ", editGradientSpread, "/10 ", editGradientInverted ? '(inverted)' : ''] }), _jsxs(Box, { marginTop: 1, children: [_jsx(Text, { color: displayColor, children: "\u2588\u2588\u2588\u2588" }), _jsx(Text, { children: " Preview" })] })] }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { dimColor: true, children: "[ ] shift color \u2191/\u2193 gradient spread ! invert" }), _jsx(Text, { dimColor: true, children: "Enter: next field, Esc: cancel" })] })] })] }));
|
|
334
|
+
}
|
|
335
|
+
if (mode === 'edit-issue-provider') {
|
|
336
|
+
const providerOptions = [
|
|
337
|
+
{ id: 'github', label: 'GitHub Issues', description: 'Use GitHub CLI (gh) for issues' },
|
|
338
|
+
{ id: 'linear', label: 'Linear', description: 'Use Linear for issue tracking' },
|
|
339
|
+
{ id: 'none', label: 'None', description: 'Disable issue tracking' },
|
|
340
|
+
];
|
|
341
|
+
return (_jsxs(Box, { flexDirection: "column", flexGrow: 1, children: [_jsx(Header, { text: project.name, subtitle: "Editing project", color: editColor || project.color, gradientSpread: editGradientSpread, gradientInverted: editGradientInverted }), _jsxs(Box, { flexDirection: "column", padding: 2, children: [_jsxs(Text, { bold: true, color: "yellow", children: ["Edit Project: ", editName] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { children: "Issue Tracking:" }) }), _jsx(Box, { marginTop: 1, flexDirection: "column", children: _jsx(List, { items: providerOptions.map((p) => ({
|
|
342
|
+
id: p.id,
|
|
343
|
+
label: p.label,
|
|
344
|
+
status: editIssueProvider === p.id ? 'active' : 'inactive',
|
|
345
|
+
meta: p.description,
|
|
346
|
+
})), focused: true, onSelect: (item) => {
|
|
347
|
+
setEditIssueProvider(item.id);
|
|
348
|
+
// Save the project with new issue provider
|
|
349
|
+
const issueProvider = item.id === 'github'
|
|
350
|
+
? { type: 'github' }
|
|
351
|
+
: item.id === 'linear'
|
|
352
|
+
? { type: 'linear' }
|
|
353
|
+
: { type: 'none' };
|
|
354
|
+
onUpdateProject({
|
|
355
|
+
...project,
|
|
356
|
+
name: editName,
|
|
357
|
+
path: editPath,
|
|
358
|
+
summary: editSummary || undefined,
|
|
359
|
+
color: editColor || undefined,
|
|
360
|
+
gradientSpread: editGradientSpread,
|
|
361
|
+
gradientInverted: editGradientInverted,
|
|
362
|
+
issueProvider,
|
|
363
|
+
});
|
|
364
|
+
setMode('normal');
|
|
365
|
+
} }) }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: "Enter: select and save, Esc: cancel" }) })] })] }));
|
|
332
366
|
}
|
|
333
367
|
// Add livestock flow: name → barn → path (with auto-detect)
|
|
334
368
|
if (mode === 'add-livestock-name') {
|