@sascha384/tic 0.1.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/LICENSE +21 -0
- package/README.md +221 -0
- package/dist/app.d.ts +17 -0
- package/dist/app.js +27 -0
- package/dist/app.js.map +1 -0
- package/dist/backends/factory.d.ts +5 -0
- package/dist/backends/factory.js +42 -0
- package/dist/backends/factory.js.map +1 -0
- package/dist/backends/github/gh.d.ts +2 -0
- package/dist/backends/github/gh.js +17 -0
- package/dist/backends/github/gh.js.map +1 -0
- package/dist/backends/github/index.d.ts +26 -0
- package/dist/backends/github/index.js +188 -0
- package/dist/backends/github/index.js.map +1 -0
- package/dist/backends/github/mappers.d.ts +33 -0
- package/dist/backends/github/mappers.js +26 -0
- package/dist/backends/github/mappers.js.map +1 -0
- package/dist/backends/gitlab/glab.d.ts +2 -0
- package/dist/backends/gitlab/glab.js +17 -0
- package/dist/backends/gitlab/glab.js.map +1 -0
- package/dist/backends/gitlab/group.d.ts +1 -0
- package/dist/backends/gitlab/group.js +33 -0
- package/dist/backends/gitlab/group.js.map +1 -0
- package/dist/backends/gitlab/index.d.ts +29 -0
- package/dist/backends/gitlab/index.js +296 -0
- package/dist/backends/gitlab/index.js.map +1 -0
- package/dist/backends/gitlab/mappers.d.ts +43 -0
- package/dist/backends/gitlab/mappers.js +44 -0
- package/dist/backends/gitlab/mappers.js.map +1 -0
- package/dist/backends/local/config.d.ts +12 -0
- package/dist/backends/local/config.js +28 -0
- package/dist/backends/local/config.js.map +1 -0
- package/dist/backends/local/index.d.ts +26 -0
- package/dist/backends/local/index.js +212 -0
- package/dist/backends/local/index.js.map +1 -0
- package/dist/backends/local/items.d.ts +6 -0
- package/dist/backends/local/items.js +118 -0
- package/dist/backends/local/items.js.map +1 -0
- package/dist/backends/types.d.ts +56 -0
- package/dist/backends/types.js +39 -0
- package/dist/backends/types.js.map +1 -0
- package/dist/cli/commands/config.d.ts +2 -0
- package/dist/cli/commands/config.js +40 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/init.d.ts +6 -0
- package/dist/cli/commands/init.js +12 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/item.d.ts +41 -0
- package/dist/cli/commands/item.js +80 -0
- package/dist/cli/commands/item.js.map +1 -0
- package/dist/cli/commands/iteration.d.ts +7 -0
- package/dist/cli/commands/iteration.js +10 -0
- package/dist/cli/commands/iteration.js.map +1 -0
- package/dist/cli/commands/mcp.d.ts +85 -0
- package/dist/cli/commands/mcp.js +448 -0
- package/dist/cli/commands/mcp.js.map +1 -0
- package/dist/cli/format.d.ts +3 -0
- package/dist/cli/format.js +10 -0
- package/dist/cli/format.js.map +1 -0
- package/dist/cli/index.d.ts +4 -0
- package/dist/cli/index.js +426 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/components/IterationPicker.d.ts +1 -0
- package/dist/components/IterationPicker.js +18 -0
- package/dist/components/IterationPicker.js.map +1 -0
- package/dist/components/Settings.d.ts +1 -0
- package/dist/components/Settings.js +40 -0
- package/dist/components/Settings.js.map +1 -0
- package/dist/components/WorkItemForm.d.ts +1 -0
- package/dist/components/WorkItemForm.js +270 -0
- package/dist/components/WorkItemForm.js.map +1 -0
- package/dist/components/WorkItemList.d.ts +1 -0
- package/dist/components/WorkItemList.js +219 -0
- package/dist/components/WorkItemList.js.map +1 -0
- package/dist/git.d.ts +38 -0
- package/dist/git.js +115 -0
- package/dist/git.js.map +1 -0
- package/dist/implement.d.ts +25 -0
- package/dist/implement.js +130 -0
- package/dist/implement.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +26 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +66 -0
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useMemo } from 'react';
|
|
3
|
+
import { Box, Text, useInput } from 'ink';
|
|
4
|
+
import TextInput from 'ink-text-input';
|
|
5
|
+
import SelectInput from 'ink-select-input';
|
|
6
|
+
import { useAppState } from '../app.js';
|
|
7
|
+
const SELECT_FIELDS = ['type', 'status', 'iteration', 'priority'];
|
|
8
|
+
const PRIORITIES = ['low', 'medium', 'high', 'critical'];
|
|
9
|
+
export function WorkItemForm() {
|
|
10
|
+
const { backend, navigate, selectedWorkItemId, activeType } = useAppState();
|
|
11
|
+
const capabilities = useMemo(() => backend.getCapabilities(), [backend]);
|
|
12
|
+
const fields = useMemo(() => {
|
|
13
|
+
const all = ['title'];
|
|
14
|
+
if (capabilities.customTypes)
|
|
15
|
+
all.push('type');
|
|
16
|
+
all.push('status'); // always shown
|
|
17
|
+
if (capabilities.iterations)
|
|
18
|
+
all.push('iteration');
|
|
19
|
+
if (capabilities.fields.priority)
|
|
20
|
+
all.push('priority');
|
|
21
|
+
if (capabilities.fields.assignee)
|
|
22
|
+
all.push('assignee');
|
|
23
|
+
if (capabilities.fields.labels)
|
|
24
|
+
all.push('labels');
|
|
25
|
+
all.push('description'); // always shown
|
|
26
|
+
if (capabilities.fields.parent)
|
|
27
|
+
all.push('parent');
|
|
28
|
+
if (capabilities.fields.dependsOn)
|
|
29
|
+
all.push('dependsOn');
|
|
30
|
+
if (capabilities.comments)
|
|
31
|
+
all.push('comments');
|
|
32
|
+
return all;
|
|
33
|
+
}, [capabilities]);
|
|
34
|
+
const statuses = useMemo(() => backend.getStatuses(), [backend]);
|
|
35
|
+
const iterations = useMemo(() => backend.getIterations(), [backend]);
|
|
36
|
+
const types = useMemo(() => backend.getWorkItemTypes(), [backend]);
|
|
37
|
+
const existingItem = useMemo(() => selectedWorkItemId !== null
|
|
38
|
+
? backend.getWorkItem(selectedWorkItemId)
|
|
39
|
+
: null, [selectedWorkItemId, backend]);
|
|
40
|
+
const [title, setTitle] = useState(existingItem?.title ?? '');
|
|
41
|
+
const [type, setType] = useState(existingItem?.type ?? activeType ?? types[0] ?? '');
|
|
42
|
+
const [status, setStatus] = useState(existingItem?.status ?? statuses[0] ?? '');
|
|
43
|
+
const [iteration, setIteration] = useState(existingItem?.iteration ?? backend.getCurrentIteration());
|
|
44
|
+
const [priority, setPriority] = useState(existingItem?.priority ?? 'medium');
|
|
45
|
+
const [assignee, setAssignee] = useState(existingItem?.assignee ?? '');
|
|
46
|
+
const [labels, setLabels] = useState(existingItem?.labels.join(', ') ?? '');
|
|
47
|
+
const [description, setDescription] = useState(existingItem?.description ?? '');
|
|
48
|
+
const [parentId, setParentId] = useState(existingItem?.parent !== null && existingItem?.parent !== undefined
|
|
49
|
+
? String(existingItem.parent)
|
|
50
|
+
: '');
|
|
51
|
+
const [dependsOn, setDependsOn] = useState(existingItem?.dependsOn?.join(', ') ?? '');
|
|
52
|
+
const [newComment, setNewComment] = useState('');
|
|
53
|
+
const [comments, setComments] = useState(existingItem?.comments ?? []);
|
|
54
|
+
const [focusedField, setFocusedField] = useState(0);
|
|
55
|
+
const [editing, setEditing] = useState(false);
|
|
56
|
+
const currentField = fields[focusedField];
|
|
57
|
+
const isSelectField = SELECT_FIELDS.includes(currentField);
|
|
58
|
+
function save() {
|
|
59
|
+
const parsedLabels = labels
|
|
60
|
+
.split(',')
|
|
61
|
+
.map((l) => l.trim())
|
|
62
|
+
.filter((l) => l.length > 0);
|
|
63
|
+
const parsedParent = parentId.trim() === '' ? null : parentId.trim();
|
|
64
|
+
const parsedDependsOn = dependsOn
|
|
65
|
+
.split(',')
|
|
66
|
+
.map((s) => s.trim())
|
|
67
|
+
.filter((s) => s.length > 0);
|
|
68
|
+
if (selectedWorkItemId !== null) {
|
|
69
|
+
backend.updateWorkItem(selectedWorkItemId, {
|
|
70
|
+
title,
|
|
71
|
+
type,
|
|
72
|
+
status,
|
|
73
|
+
iteration,
|
|
74
|
+
priority: priority,
|
|
75
|
+
assignee,
|
|
76
|
+
labels: parsedLabels,
|
|
77
|
+
description,
|
|
78
|
+
parent: parsedParent,
|
|
79
|
+
dependsOn: parsedDependsOn,
|
|
80
|
+
});
|
|
81
|
+
if (capabilities.comments && newComment.trim().length > 0) {
|
|
82
|
+
const added = backend.addComment(selectedWorkItemId, {
|
|
83
|
+
author: 'me',
|
|
84
|
+
body: newComment.trim(),
|
|
85
|
+
});
|
|
86
|
+
setComments((prev) => [...prev, added]);
|
|
87
|
+
setNewComment('');
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
const created = backend.createWorkItem({
|
|
92
|
+
title: title || 'Untitled',
|
|
93
|
+
type,
|
|
94
|
+
status,
|
|
95
|
+
iteration,
|
|
96
|
+
priority: priority,
|
|
97
|
+
assignee,
|
|
98
|
+
labels: parsedLabels,
|
|
99
|
+
description,
|
|
100
|
+
parent: parsedParent,
|
|
101
|
+
dependsOn: parsedDependsOn,
|
|
102
|
+
});
|
|
103
|
+
if (capabilities.comments && newComment.trim().length > 0) {
|
|
104
|
+
backend.addComment(created.id, {
|
|
105
|
+
author: 'me',
|
|
106
|
+
body: newComment.trim(),
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
useInput((_input, key) => {
|
|
112
|
+
if (!editing) {
|
|
113
|
+
if (key.upArrow) {
|
|
114
|
+
setFocusedField((f) => Math.max(0, f - 1));
|
|
115
|
+
}
|
|
116
|
+
if (key.downArrow) {
|
|
117
|
+
setFocusedField((f) => Math.min(fields.length - 1, f + 1));
|
|
118
|
+
}
|
|
119
|
+
if (key.return) {
|
|
120
|
+
setEditing(true);
|
|
121
|
+
}
|
|
122
|
+
if (key.escape) {
|
|
123
|
+
save();
|
|
124
|
+
navigate('list');
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
if (key.escape) {
|
|
129
|
+
setEditing(false);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}, { isActive: !editing || !isSelectField });
|
|
133
|
+
function getSelectItems(field) {
|
|
134
|
+
switch (field) {
|
|
135
|
+
case 'type': {
|
|
136
|
+
return types.map((t) => ({ label: t, value: t }));
|
|
137
|
+
}
|
|
138
|
+
case 'status': {
|
|
139
|
+
return statuses.map((s) => ({ label: s, value: s }));
|
|
140
|
+
}
|
|
141
|
+
case 'iteration': {
|
|
142
|
+
return iterations.map((i) => ({ label: i, value: i }));
|
|
143
|
+
}
|
|
144
|
+
case 'priority': {
|
|
145
|
+
return PRIORITIES.map((p) => ({ label: p, value: p }));
|
|
146
|
+
}
|
|
147
|
+
default: {
|
|
148
|
+
return [];
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
function getSelectInitialIndex(field) {
|
|
153
|
+
switch (field) {
|
|
154
|
+
case 'type': {
|
|
155
|
+
const idx = types.indexOf(type);
|
|
156
|
+
return idx >= 0 ? idx : 0;
|
|
157
|
+
}
|
|
158
|
+
case 'status': {
|
|
159
|
+
const idx = statuses.indexOf(status);
|
|
160
|
+
return idx >= 0 ? idx : 0;
|
|
161
|
+
}
|
|
162
|
+
case 'iteration': {
|
|
163
|
+
const idx = iterations.indexOf(iteration);
|
|
164
|
+
return idx >= 0 ? idx : 0;
|
|
165
|
+
}
|
|
166
|
+
case 'priority': {
|
|
167
|
+
const idx = PRIORITIES.indexOf(priority);
|
|
168
|
+
return idx >= 0 ? idx : 0;
|
|
169
|
+
}
|
|
170
|
+
default: {
|
|
171
|
+
return 0;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
function handleSelectItem(field, value) {
|
|
176
|
+
switch (field) {
|
|
177
|
+
case 'type': {
|
|
178
|
+
setType(value);
|
|
179
|
+
break;
|
|
180
|
+
}
|
|
181
|
+
case 'status': {
|
|
182
|
+
setStatus(value);
|
|
183
|
+
break;
|
|
184
|
+
}
|
|
185
|
+
case 'iteration': {
|
|
186
|
+
setIteration(value);
|
|
187
|
+
break;
|
|
188
|
+
}
|
|
189
|
+
case 'priority': {
|
|
190
|
+
setPriority(value);
|
|
191
|
+
break;
|
|
192
|
+
}
|
|
193
|
+
default: {
|
|
194
|
+
break;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
setEditing(false);
|
|
198
|
+
}
|
|
199
|
+
function renderField(field, index) {
|
|
200
|
+
const focused = index === focusedField;
|
|
201
|
+
const isEditing = focused && editing;
|
|
202
|
+
const label = field.charAt(0).toUpperCase() + field.slice(1);
|
|
203
|
+
const cursor = focused ? '>' : ' ';
|
|
204
|
+
if (field === 'comments') {
|
|
205
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsxs(Text, { color: focused ? 'cyan' : undefined, children: [cursor, " "] }), _jsxs(Text, { bold: focused, color: focused ? 'cyan' : undefined, children: [label, ":"] })] }), comments.map((c, ci) => (_jsx(Box, { marginLeft: 4, children: _jsxs(Text, { dimColor: true, children: ["[", c.date, "] ", c.author, ": ", c.body] }) }, ci))), _jsx(Box, { marginLeft: 4, children: isEditing ? (_jsxs(Box, { children: [_jsx(Text, { color: "green", children: "New: " }), _jsx(TextInput, { value: newComment, onChange: setNewComment, focus: true, onSubmit: () => {
|
|
206
|
+
setEditing(false);
|
|
207
|
+
} })] })) : (_jsx(Text, { dimColor: true, children: newComment
|
|
208
|
+
? `New: ${newComment}`
|
|
209
|
+
: '(press Enter to add comment)' })) })] }, field));
|
|
210
|
+
}
|
|
211
|
+
if (SELECT_FIELDS.includes(field)) {
|
|
212
|
+
const currentValue = field === 'type'
|
|
213
|
+
? type
|
|
214
|
+
: field === 'status'
|
|
215
|
+
? status
|
|
216
|
+
: field === 'iteration'
|
|
217
|
+
? iteration
|
|
218
|
+
: priority;
|
|
219
|
+
if (isEditing) {
|
|
220
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsxs(Text, { color: "cyan", children: [cursor, " "] }), _jsxs(Text, { bold: true, color: "cyan", children: [label, ":", ' '] })] }), _jsx(Box, { marginLeft: 4, children: _jsx(SelectInput, { items: getSelectItems(field), initialIndex: getSelectInitialIndex(field), onSelect: (item) => {
|
|
221
|
+
handleSelectItem(field, item.value);
|
|
222
|
+
} }) })] }, field));
|
|
223
|
+
}
|
|
224
|
+
return (_jsxs(Box, { children: [_jsxs(Text, { color: focused ? 'cyan' : undefined, children: [cursor, " "] }), _jsxs(Text, { bold: focused, color: focused ? 'cyan' : undefined, children: [label, ":", ' '] }), _jsx(Text, { children: currentValue })] }, field));
|
|
225
|
+
}
|
|
226
|
+
// Text fields: title, assignee, labels, description, parent, dependsOn
|
|
227
|
+
const textValue = field === 'title'
|
|
228
|
+
? title
|
|
229
|
+
: field === 'assignee'
|
|
230
|
+
? assignee
|
|
231
|
+
: field === 'labels'
|
|
232
|
+
? labels
|
|
233
|
+
: field === 'parent'
|
|
234
|
+
? parentId
|
|
235
|
+
: field === 'dependsOn'
|
|
236
|
+
? dependsOn
|
|
237
|
+
: description;
|
|
238
|
+
const textSetter = field === 'title'
|
|
239
|
+
? setTitle
|
|
240
|
+
: field === 'assignee'
|
|
241
|
+
? setAssignee
|
|
242
|
+
: field === 'labels'
|
|
243
|
+
? setLabels
|
|
244
|
+
: field === 'parent'
|
|
245
|
+
? setParentId
|
|
246
|
+
: field === 'dependsOn'
|
|
247
|
+
? setDependsOn
|
|
248
|
+
: setDescription;
|
|
249
|
+
if (isEditing) {
|
|
250
|
+
return (_jsxs(Box, { children: [_jsxs(Text, { color: "cyan", children: [cursor, " "] }), _jsxs(Text, { bold: true, color: "cyan", children: [label, ":", ' '] }), _jsx(TextInput, { value: textValue, onChange: textSetter, focus: true, onSubmit: () => {
|
|
251
|
+
setEditing(false);
|
|
252
|
+
} })] }, field));
|
|
253
|
+
}
|
|
254
|
+
return (_jsxs(Box, { children: [_jsxs(Text, { color: focused ? 'cyan' : undefined, children: [cursor, " "] }), _jsxs(Text, { bold: focused, color: focused ? 'cyan' : undefined, children: [label, ":", ' '] }), _jsx(Text, { children: textValue || _jsx(Text, { dimColor: true, children: "(empty)" }) })] }, field));
|
|
255
|
+
}
|
|
256
|
+
const mode = selectedWorkItemId !== null ? 'Edit' : 'Create';
|
|
257
|
+
const typeLabel = type.charAt(0).toUpperCase() + type.slice(1);
|
|
258
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { bold: true, color: "cyan", children: [mode, " ", typeLabel, selectedWorkItemId !== null ? ` #${selectedWorkItemId}` : ''] }) }), fields.map((field, index) => renderField(field, index)), selectedWorkItemId !== null && capabilities.relationships && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { bold: true, dimColor: true, children: "Relationships:" }), _jsx(Box, { marginLeft: 2, children: _jsxs(Text, { dimColor: true, children: ["Children:", ' ', backend
|
|
259
|
+
.getChildren(selectedWorkItemId)
|
|
260
|
+
.map((c) => `#${c.id} (${c.title})`)
|
|
261
|
+
.join(', ') || 'none'] }) }), _jsx(Box, { marginLeft: 2, children: _jsxs(Text, { dimColor: true, children: ["Depended on by:", ' ', backend
|
|
262
|
+
.getDependents(selectedWorkItemId)
|
|
263
|
+
.map((d) => `#${d.id} (${d.title})`)
|
|
264
|
+
.join(', ') || 'none'] }) })] })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: editing
|
|
265
|
+
? isSelectField
|
|
266
|
+
? 'up/down: navigate enter: select'
|
|
267
|
+
: 'type to edit enter/esc: confirm'
|
|
268
|
+
: 'up/down: navigate enter: edit field esc: save & back' }) })] }));
|
|
269
|
+
}
|
|
270
|
+
//# sourceMappingURL=WorkItemForm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkItemForm.js","sourceRoot":"","sources":["../../src/components/WorkItemForm.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function WorkItemList(): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useMemo, useEffect } from 'react';
|
|
3
|
+
import { Box, Text, useInput, useApp } from 'ink';
|
|
4
|
+
import TextInput from 'ink-text-input';
|
|
5
|
+
import { useAppState } from '../app.js';
|
|
6
|
+
import { isGitRepo } from '../git.js';
|
|
7
|
+
import { beginImplementation } from '../implement.js';
|
|
8
|
+
import { readConfig } from '../backends/local/config.js';
|
|
9
|
+
function buildTree(items) {
|
|
10
|
+
const itemMap = new Map(items.map((i) => [i.id, i]));
|
|
11
|
+
const childrenMap = new Map();
|
|
12
|
+
for (const item of items) {
|
|
13
|
+
const parentId = item.parent !== null && itemMap.has(item.parent) ? item.parent : null;
|
|
14
|
+
if (!childrenMap.has(parentId))
|
|
15
|
+
childrenMap.set(parentId, []);
|
|
16
|
+
childrenMap.get(parentId).push(item);
|
|
17
|
+
}
|
|
18
|
+
const result = [];
|
|
19
|
+
function walk(parentId, depth, parentPrefix) {
|
|
20
|
+
const children = childrenMap.get(parentId) ?? [];
|
|
21
|
+
children.forEach((child, idx) => {
|
|
22
|
+
const isLast = idx === children.length - 1;
|
|
23
|
+
let prefix = '';
|
|
24
|
+
if (depth > 0) {
|
|
25
|
+
prefix = parentPrefix + (isLast ? '└─' : '├─');
|
|
26
|
+
}
|
|
27
|
+
result.push({ item: child, depth, prefix });
|
|
28
|
+
const nextParentPrefix = depth > 0 ? parentPrefix + (isLast ? ' ' : '│ ') : '';
|
|
29
|
+
walk(child.id, depth + 1, nextParentPrefix);
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
walk(null, 0, '');
|
|
33
|
+
return result;
|
|
34
|
+
}
|
|
35
|
+
export function WorkItemList() {
|
|
36
|
+
const { backend, navigate, selectWorkItem, activeType, setActiveType } = useAppState();
|
|
37
|
+
const { exit } = useApp();
|
|
38
|
+
const [cursor, setCursor] = useState(0);
|
|
39
|
+
const [confirmDelete, setConfirmDelete] = useState(false);
|
|
40
|
+
const [refresh, setRefresh] = useState(0);
|
|
41
|
+
const [warning, setWarning] = useState('');
|
|
42
|
+
const [settingParent, setSettingParent] = useState(false);
|
|
43
|
+
const [parentInput, setParentInput] = useState('');
|
|
44
|
+
const capabilities = useMemo(() => backend.getCapabilities(), [backend]);
|
|
45
|
+
const types = useMemo(() => backend.getWorkItemTypes(), [backend]);
|
|
46
|
+
const gitAvailable = useMemo(() => isGitRepo(process.cwd()), []);
|
|
47
|
+
useEffect(() => {
|
|
48
|
+
if (activeType === null && types.length > 0) {
|
|
49
|
+
setActiveType(types[0]);
|
|
50
|
+
}
|
|
51
|
+
}, [activeType, types, setActiveType]);
|
|
52
|
+
const iteration = backend.getCurrentIteration();
|
|
53
|
+
const allItems = useMemo(() => backend.listWorkItems(iteration), [iteration, refresh]);
|
|
54
|
+
const items = useMemo(() => allItems.filter((item) => item.type === activeType), [allItems, activeType]);
|
|
55
|
+
const treeItems = useMemo(() => buildTree(items), [items]);
|
|
56
|
+
const statuses = backend.getStatuses();
|
|
57
|
+
useEffect(() => {
|
|
58
|
+
setCursor((c) => Math.min(c, Math.max(0, treeItems.length - 1)));
|
|
59
|
+
}, [treeItems.length]);
|
|
60
|
+
useInput((input, key) => {
|
|
61
|
+
if (settingParent) {
|
|
62
|
+
if (key.escape) {
|
|
63
|
+
setSettingParent(false);
|
|
64
|
+
}
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
if (confirmDelete) {
|
|
68
|
+
if (input === 'y' || input === 'Y') {
|
|
69
|
+
backend.deleteWorkItem(treeItems[cursor].item.id);
|
|
70
|
+
setConfirmDelete(false);
|
|
71
|
+
setCursor((c) => Math.max(0, c - 1));
|
|
72
|
+
setRefresh((r) => r + 1);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
setConfirmDelete(false);
|
|
76
|
+
}
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
if (key.upArrow) {
|
|
80
|
+
setCursor((c) => Math.max(0, c - 1));
|
|
81
|
+
setWarning('');
|
|
82
|
+
}
|
|
83
|
+
if (key.downArrow) {
|
|
84
|
+
setCursor((c) => Math.min(treeItems.length - 1, c + 1));
|
|
85
|
+
setWarning('');
|
|
86
|
+
}
|
|
87
|
+
if (key.return && treeItems.length > 0) {
|
|
88
|
+
selectWorkItem(treeItems[cursor].item.id);
|
|
89
|
+
navigate('form');
|
|
90
|
+
}
|
|
91
|
+
if (input === 'q')
|
|
92
|
+
exit();
|
|
93
|
+
if (input === 'i' && capabilities.iterations)
|
|
94
|
+
navigate('iteration-picker');
|
|
95
|
+
if (input === ',')
|
|
96
|
+
navigate('settings');
|
|
97
|
+
if (input === 'c') {
|
|
98
|
+
selectWorkItem(null);
|
|
99
|
+
navigate('form');
|
|
100
|
+
}
|
|
101
|
+
if (input === 'd' && treeItems.length > 0) {
|
|
102
|
+
setConfirmDelete(true);
|
|
103
|
+
}
|
|
104
|
+
if (input === 'o' && treeItems.length > 0) {
|
|
105
|
+
backend.openItem(treeItems[cursor].item.id);
|
|
106
|
+
setRefresh((r) => r + 1);
|
|
107
|
+
}
|
|
108
|
+
if (input === 'b' && gitAvailable && treeItems.length > 0) {
|
|
109
|
+
const item = treeItems[cursor].item;
|
|
110
|
+
const comments = item.comments;
|
|
111
|
+
const config = readConfig(process.cwd());
|
|
112
|
+
try {
|
|
113
|
+
const result = beginImplementation(item, comments, { branchMode: config.branchMode ?? 'worktree' }, process.cwd());
|
|
114
|
+
setWarning(result.resumed
|
|
115
|
+
? `Resumed work on #${item.id}`
|
|
116
|
+
: `Started work on #${item.id}`);
|
|
117
|
+
}
|
|
118
|
+
catch (e) {
|
|
119
|
+
setWarning(e instanceof Error ? e.message : 'Failed to start implementation');
|
|
120
|
+
}
|
|
121
|
+
setRefresh((r) => r + 1);
|
|
122
|
+
}
|
|
123
|
+
if (input === 's' && treeItems.length > 0) {
|
|
124
|
+
const item = treeItems[cursor].item;
|
|
125
|
+
const idx = statuses.indexOf(item.status);
|
|
126
|
+
const nextStatus = statuses[(idx + 1) % statuses.length];
|
|
127
|
+
backend.updateWorkItem(item.id, { status: nextStatus });
|
|
128
|
+
// Show warning if cycling to final status with open children or deps
|
|
129
|
+
if (capabilities.relationships &&
|
|
130
|
+
nextStatus === statuses[statuses.length - 1]) {
|
|
131
|
+
const children = backend.getChildren(item.id);
|
|
132
|
+
const openChildren = children.filter((c) => c.status !== statuses[statuses.length - 1]);
|
|
133
|
+
const unresolvedDeps = item.dependsOn
|
|
134
|
+
.map((depId) => {
|
|
135
|
+
try {
|
|
136
|
+
return backend.getWorkItem(depId);
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
})
|
|
142
|
+
.filter((d) => d !== null && d.status !== statuses[statuses.length - 1]);
|
|
143
|
+
const warnings = [];
|
|
144
|
+
if (openChildren.length > 0)
|
|
145
|
+
warnings.push(`${openChildren.length} children still open`);
|
|
146
|
+
if (unresolvedDeps.length > 0)
|
|
147
|
+
warnings.push(unresolvedDeps
|
|
148
|
+
.map((d) => `Depends on #${d.id} (${d.status})`)
|
|
149
|
+
.join(', '));
|
|
150
|
+
if (warnings.length > 0)
|
|
151
|
+
setWarning(warnings.join(' | '));
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
setWarning('');
|
|
155
|
+
}
|
|
156
|
+
setRefresh((r) => r + 1);
|
|
157
|
+
}
|
|
158
|
+
if (input === 'p' &&
|
|
159
|
+
capabilities.fields.parent &&
|
|
160
|
+
treeItems.length > 0 &&
|
|
161
|
+
!settingParent) {
|
|
162
|
+
setSettingParent(true);
|
|
163
|
+
const currentParent = treeItems[cursor].item.parent;
|
|
164
|
+
setParentInput(currentParent !== null ? String(currentParent) : '');
|
|
165
|
+
}
|
|
166
|
+
if (key.tab && capabilities.customTypes && types.length > 0) {
|
|
167
|
+
const currentIdx = types.indexOf(activeType ?? '');
|
|
168
|
+
const nextType = types[(currentIdx + 1) % types.length];
|
|
169
|
+
setActiveType(nextType);
|
|
170
|
+
setCursor(0);
|
|
171
|
+
setWarning('');
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
const typeLabel = activeType
|
|
175
|
+
? activeType.charAt(0).toUpperCase() + activeType.slice(1) + 's'
|
|
176
|
+
: '';
|
|
177
|
+
const helpParts = [
|
|
178
|
+
'up/down: navigate',
|
|
179
|
+
'enter: edit',
|
|
180
|
+
'o: open',
|
|
181
|
+
'c: create',
|
|
182
|
+
'd: delete',
|
|
183
|
+
's: cycle status',
|
|
184
|
+
];
|
|
185
|
+
if (capabilities.fields.parent)
|
|
186
|
+
helpParts.push('p: set parent');
|
|
187
|
+
if (capabilities.customTypes)
|
|
188
|
+
helpParts.push('tab: type');
|
|
189
|
+
if (capabilities.iterations)
|
|
190
|
+
helpParts.push('i: iteration');
|
|
191
|
+
if (gitAvailable)
|
|
192
|
+
helpParts.push('b: branch');
|
|
193
|
+
helpParts.push(',: settings', 'q: quit');
|
|
194
|
+
const helpText = helpParts.join(' ');
|
|
195
|
+
const colId = 5;
|
|
196
|
+
const colStatus = 14;
|
|
197
|
+
const colPriority = 10;
|
|
198
|
+
const colAssignee = 12;
|
|
199
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { marginBottom: 1, children: [_jsxs(Text, { bold: true, color: "cyan", children: [typeLabel, " \u2014 ", iteration] }), _jsxs(Text, { dimColor: true, children: [" (", items.length, " items)"] })] }), _jsxs(Box, { children: [_jsx(Box, { width: 2, children: _jsx(Text, { children: " " }) }), _jsx(Box, { width: colId, children: _jsx(Text, { bold: true, underline: true, children: "ID" }) }), _jsx(Box, { flexGrow: 1, children: _jsx(Text, { bold: true, underline: true, children: "Title" }) }), _jsx(Box, { width: colStatus, children: _jsx(Text, { bold: true, underline: true, children: "Status" }) }), capabilities.fields.priority && (_jsx(Box, { width: colPriority, children: _jsx(Text, { bold: true, underline: true, children: "Priority" }) })), capabilities.fields.assignee && (_jsx(Box, { width: colAssignee, children: _jsx(Text, { bold: true, underline: true, children: "Assignee" }) }))] }), treeItems.length === 0 && (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { dimColor: true, children: ["No ", activeType, "s in this iteration."] }) })), treeItems.map((treeItem, idx) => {
|
|
200
|
+
const { item, prefix } = treeItem;
|
|
201
|
+
const selected = idx === cursor;
|
|
202
|
+
const hasUnresolvedDeps = item.dependsOn.length > 0;
|
|
203
|
+
return (_jsxs(Box, { children: [_jsx(Box, { width: 2, children: _jsx(Text, { color: "cyan", children: selected ? '>' : ' ' }) }), _jsx(Box, { width: colId, children: _jsx(Text, { color: selected ? 'cyan' : undefined, children: item.id }) }), _jsx(Box, { flexGrow: 1, children: _jsxs(Text, { color: selected ? 'cyan' : undefined, bold: selected, children: [capabilities.relationships ? prefix : '', item.title] }) }), _jsx(Box, { width: colStatus, children: _jsxs(Text, { color: selected ? 'cyan' : undefined, children: [capabilities.fields.dependsOn && hasUnresolvedDeps ? '⧗ ' : '', item.status] }) }), capabilities.fields.priority && (_jsx(Box, { width: colPriority, children: _jsx(Text, { color: selected ? 'cyan' : undefined, children: item.priority }) })), capabilities.fields.assignee && (_jsx(Box, { width: colAssignee, children: _jsx(Text, { color: selected ? 'cyan' : undefined, children: item.assignee }) }))] }, item.id));
|
|
204
|
+
}), _jsx(Box, { marginTop: 1, children: capabilities.fields.parent && settingParent ? (_jsxs(Box, { children: [_jsx(Text, { color: "cyan", children: "Set parent ID (empty to clear): " }), _jsx(TextInput, { value: parentInput, onChange: setParentInput, focus: true, onSubmit: (value) => {
|
|
205
|
+
const item = treeItems[cursor].item;
|
|
206
|
+
const newParent = value.trim() === '' ? null : value.trim();
|
|
207
|
+
try {
|
|
208
|
+
backend.updateWorkItem(item.id, { parent: newParent });
|
|
209
|
+
setWarning('');
|
|
210
|
+
}
|
|
211
|
+
catch (e) {
|
|
212
|
+
setWarning(e instanceof Error ? e.message : 'Invalid parent');
|
|
213
|
+
}
|
|
214
|
+
setSettingParent(false);
|
|
215
|
+
setParentInput('');
|
|
216
|
+
setRefresh((r) => r + 1);
|
|
217
|
+
} })] })) : confirmDelete ? (_jsxs(Text, { color: "red", children: ["Delete item #", treeItems[cursor]?.item.id, "? (y/n)"] })) : (_jsx(Text, { dimColor: true, children: helpText })) }), warning && (_jsx(Box, { children: _jsxs(Text, { color: "yellow", children: ["\u26A0 ", warning] }) }))] }));
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=WorkItemList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkItemList.js","sourceRoot":"","sources":["../../src/components/WorkItemList.tsx"],"names":[],"mappings":"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"}
|
package/dist/git.d.ts
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convert an item ID and title into a kebab-case branch slug.
|
|
3
|
+
* Example: slugify('42', 'Add User Authentication') => '42-add-user-authentication'
|
|
4
|
+
* Truncated to max 80 characters total.
|
|
5
|
+
*/
|
|
6
|
+
export declare function slugify(id: string, title: string): string;
|
|
7
|
+
/**
|
|
8
|
+
* Check whether `root` is inside a git repository by looking for a .git
|
|
9
|
+
* directory or file (worktrees use a .git file).
|
|
10
|
+
*/
|
|
11
|
+
export declare function isGitRepo(root: string): boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Check whether a branch exists in the repository.
|
|
14
|
+
*/
|
|
15
|
+
export declare function branchExists(name: string, cwd: string): boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Create a new branch (without switching to it).
|
|
18
|
+
*/
|
|
19
|
+
export declare function createBranch(name: string, cwd: string): void;
|
|
20
|
+
/**
|
|
21
|
+
* Check out an existing branch.
|
|
22
|
+
*/
|
|
23
|
+
export declare function checkoutBranch(name: string, cwd: string): void;
|
|
24
|
+
/**
|
|
25
|
+
* Return true if the working directory has uncommitted changes
|
|
26
|
+
* (untracked, modified, or staged files).
|
|
27
|
+
*/
|
|
28
|
+
export declare function hasUncommittedChanges(cwd: string): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Create a git worktree. If the branch already exists, checks it out;
|
|
31
|
+
* otherwise creates a new branch with `-b`.
|
|
32
|
+
*/
|
|
33
|
+
export declare function createWorktree(worktreePath: string, branch: string, cwd: string): void;
|
|
34
|
+
/**
|
|
35
|
+
* Check whether a path is a git worktree (exists and has a .git file,
|
|
36
|
+
* not a .git directory).
|
|
37
|
+
*/
|
|
38
|
+
export declare function worktreeExists(worktreePath: string): boolean;
|