@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.
Files changed (87) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +221 -0
  3. package/dist/app.d.ts +17 -0
  4. package/dist/app.js +27 -0
  5. package/dist/app.js.map +1 -0
  6. package/dist/backends/factory.d.ts +5 -0
  7. package/dist/backends/factory.js +42 -0
  8. package/dist/backends/factory.js.map +1 -0
  9. package/dist/backends/github/gh.d.ts +2 -0
  10. package/dist/backends/github/gh.js +17 -0
  11. package/dist/backends/github/gh.js.map +1 -0
  12. package/dist/backends/github/index.d.ts +26 -0
  13. package/dist/backends/github/index.js +188 -0
  14. package/dist/backends/github/index.js.map +1 -0
  15. package/dist/backends/github/mappers.d.ts +33 -0
  16. package/dist/backends/github/mappers.js +26 -0
  17. package/dist/backends/github/mappers.js.map +1 -0
  18. package/dist/backends/gitlab/glab.d.ts +2 -0
  19. package/dist/backends/gitlab/glab.js +17 -0
  20. package/dist/backends/gitlab/glab.js.map +1 -0
  21. package/dist/backends/gitlab/group.d.ts +1 -0
  22. package/dist/backends/gitlab/group.js +33 -0
  23. package/dist/backends/gitlab/group.js.map +1 -0
  24. package/dist/backends/gitlab/index.d.ts +29 -0
  25. package/dist/backends/gitlab/index.js +296 -0
  26. package/dist/backends/gitlab/index.js.map +1 -0
  27. package/dist/backends/gitlab/mappers.d.ts +43 -0
  28. package/dist/backends/gitlab/mappers.js +44 -0
  29. package/dist/backends/gitlab/mappers.js.map +1 -0
  30. package/dist/backends/local/config.d.ts +12 -0
  31. package/dist/backends/local/config.js +28 -0
  32. package/dist/backends/local/config.js.map +1 -0
  33. package/dist/backends/local/index.d.ts +26 -0
  34. package/dist/backends/local/index.js +212 -0
  35. package/dist/backends/local/index.js.map +1 -0
  36. package/dist/backends/local/items.d.ts +6 -0
  37. package/dist/backends/local/items.js +118 -0
  38. package/dist/backends/local/items.js.map +1 -0
  39. package/dist/backends/types.d.ts +56 -0
  40. package/dist/backends/types.js +39 -0
  41. package/dist/backends/types.js.map +1 -0
  42. package/dist/cli/commands/config.d.ts +2 -0
  43. package/dist/cli/commands/config.js +40 -0
  44. package/dist/cli/commands/config.js.map +1 -0
  45. package/dist/cli/commands/init.d.ts +6 -0
  46. package/dist/cli/commands/init.js +12 -0
  47. package/dist/cli/commands/init.js.map +1 -0
  48. package/dist/cli/commands/item.d.ts +41 -0
  49. package/dist/cli/commands/item.js +80 -0
  50. package/dist/cli/commands/item.js.map +1 -0
  51. package/dist/cli/commands/iteration.d.ts +7 -0
  52. package/dist/cli/commands/iteration.js +10 -0
  53. package/dist/cli/commands/iteration.js.map +1 -0
  54. package/dist/cli/commands/mcp.d.ts +85 -0
  55. package/dist/cli/commands/mcp.js +448 -0
  56. package/dist/cli/commands/mcp.js.map +1 -0
  57. package/dist/cli/format.d.ts +3 -0
  58. package/dist/cli/format.js +10 -0
  59. package/dist/cli/format.js.map +1 -0
  60. package/dist/cli/index.d.ts +4 -0
  61. package/dist/cli/index.js +426 -0
  62. package/dist/cli/index.js.map +1 -0
  63. package/dist/components/IterationPicker.d.ts +1 -0
  64. package/dist/components/IterationPicker.js +18 -0
  65. package/dist/components/IterationPicker.js.map +1 -0
  66. package/dist/components/Settings.d.ts +1 -0
  67. package/dist/components/Settings.js +40 -0
  68. package/dist/components/Settings.js.map +1 -0
  69. package/dist/components/WorkItemForm.d.ts +1 -0
  70. package/dist/components/WorkItemForm.js +270 -0
  71. package/dist/components/WorkItemForm.js.map +1 -0
  72. package/dist/components/WorkItemList.d.ts +1 -0
  73. package/dist/components/WorkItemList.js +219 -0
  74. package/dist/components/WorkItemList.js.map +1 -0
  75. package/dist/git.d.ts +38 -0
  76. package/dist/git.js +115 -0
  77. package/dist/git.js.map +1 -0
  78. package/dist/implement.d.ts +25 -0
  79. package/dist/implement.js +130 -0
  80. package/dist/implement.js.map +1 -0
  81. package/dist/index.d.ts +2 -0
  82. package/dist/index.js +14 -0
  83. package/dist/index.js.map +1 -0
  84. package/dist/types.d.ts +26 -0
  85. package/dist/types.js +2 -0
  86. package/dist/types.js.map +1 -0
  87. 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":";AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACrD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAClD,OAAO,SAAS,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAQzD,SAAS,SAAS,CAAC,KAAiB;IAClC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,MAAM,WAAW,GAAG,IAAI,GAAG,EAA6B,CAAC;IAEzD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GACZ,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QACxE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC9D,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,MAAM,GAAe,EAAE,CAAC;IAE9B,SAAS,IAAI,CAAC,QAAuB,EAAE,KAAa,EAAE,YAAoB;QACxE,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACjD,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YAC9B,MAAM,MAAM,GAAG,GAAG,KAAK,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;YAC3C,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBACd,MAAM,GAAG,YAAY,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACjD,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YAC5C,MAAM,gBAAgB,GACpB,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACzD,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,GAAG,CAAC,EAAE,gBAAgB,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAClB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,aAAa,EAAE,GACpE,WAAW,EAAE,CAAC;IAChB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;IAC1B,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACxC,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC1D,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC1C,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC3C,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC1D,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAEnD,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACzE,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACnE,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAEjE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,UAAU,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5C,aAAa,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC,EAAE,CAAC,UAAU,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC;IAEvC,MAAM,SAAS,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAChD,MAAM,QAAQ,GAAG,OAAO,CACtB,GAAG,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,EACtC,CAAC,SAAS,EAAE,OAAO,CAAC,CACrB,CAAC;IACF,MAAM,KAAK,GAAG,OAAO,CACnB,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,EACzD,CAAC,QAAQ,EAAE,UAAU,CAAC,CACvB,CAAC;IACF,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAEvC,SAAS,CAAC,GAAG,EAAE;QACb,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAEvB,QAAQ,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACtB,IAAI,aAAa,EAAE,CAAC;YAClB,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBACf,gBAAgB,CAAC,KAAK,CAAC,CAAC;YAC1B,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,aAAa,EAAE,CAAC;YAClB,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;gBACnC,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,MAAM,CAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACnD,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBACxB,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACrC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3B,CAAC;iBAAM,CAAC;gBACN,gBAAgB,CAAC,KAAK,CAAC,CAAC;YAC1B,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YAChB,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACrC,UAAU,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QACD,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YAClB,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACxD,UAAU,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,GAAG,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvC,cAAc,CAAC,SAAS,CAAC,MAAM,CAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC3C,QAAQ,CAAC,MAAM,CAAC,CAAC;QACnB,CAAC;QAED,IAAI,KAAK,KAAK,GAAG;YAAE,IAAI,EAAE,CAAC;QAC1B,IAAI,KAAK,KAAK,GAAG,IAAI,YAAY,CAAC,UAAU;YAAE,QAAQ,CAAC,kBAAkB,CAAC,CAAC;QAC3E,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;QAExC,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YAClB,cAAc,CAAC,IAAI,CAAC,CAAC;YACrB,QAAQ,CAAC,MAAM,CAAC,CAAC;QACnB,CAAC;QAED,IAAI,KAAK,KAAK,GAAG,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1C,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;QAED,IAAI,KAAK,KAAK,GAAG,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7C,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3B,CAAC;QAED,IAAI,KAAK,KAAK,GAAG,IAAI,YAAY,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1D,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAE,CAAC,IAAI,CAAC;YACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC/B,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YACzC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,mBAAmB,CAChC,IAAI,EACJ,QAAQ,EACR,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,UAAU,EAAE,EAC/C,OAAO,CAAC,GAAG,EAAE,CACd,CAAC;gBACF,UAAU,CACR,MAAM,CAAC,OAAO;oBACZ,CAAC,CAAC,oBAAoB,IAAI,CAAC,EAAE,EAAE;oBAC/B,CAAC,CAAC,oBAAoB,IAAI,CAAC,EAAE,EAAE,CAClC,CAAC;YACJ,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,UAAU,CACR,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,gCAAgC,CAClE,CAAC;YACJ,CAAC;YACD,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3B,CAAC;QAED,IAAI,KAAK,KAAK,GAAG,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAE,CAAC,IAAI,CAAC;YACrC,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1C,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAE,CAAC;YAC1D,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;YAExD,qEAAqE;YACrE,IACE,YAAY,CAAC,aAAa;gBAC1B,UAAU,KAAK,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,EAC5C,CAAC;gBACD,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC9C,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAClC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAClD,CAAC;gBACF,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS;qBAClC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;oBACb,IAAI,CAAC;wBACH,OAAO,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;oBACpC,CAAC;oBAAC,MAAM,CAAC;wBACP,OAAO,IAAI,CAAC;oBACd,CAAC;gBACH,CAAC,CAAC;qBACD,MAAM,CACL,CAAC,CAAC,EAAiB,EAAE,CACnB,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAC3D,CAAC;gBAEJ,MAAM,QAAQ,GAAa,EAAE,CAAC;gBAC9B,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC;oBACzB,QAAQ,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,MAAM,sBAAsB,CAAC,CAAC;gBAC9D,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC;oBAC3B,QAAQ,CAAC,IAAI,CACX,cAAc;yBACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC;yBAC/C,IAAI,CAAC,IAAI,CAAC,CACd,CAAC;gBACJ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;oBAAE,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAC5D,CAAC;iBAAM,CAAC;gBACN,UAAU,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;YAED,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3B,CAAC;QAED,IACE,KAAK,KAAK,GAAG;YACb,YAAY,CAAC,MAAM,CAAC,MAAM;YAC1B,SAAS,CAAC,MAAM,GAAG,CAAC;YACpB,CAAC,aAAa,EACd,CAAC;YACD,gBAAgB,CAAC,IAAI,CAAC,CAAC;YACvB,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,CAAE,CAAC,IAAI,CAAC,MAAM,CAAC;YACrD,cAAc,CAAC,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACtE,CAAC;QAED,IAAI,GAAG,CAAC,GAAG,IAAI,YAAY,CAAC,WAAW,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5D,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;YACnD,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAE,CAAC;YACzD,aAAa,CAAC,QAAQ,CAAC,CAAC;YACxB,SAAS,CAAC,CAAC,CAAC,CAAC;YACb,UAAU,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,UAAU;QAC1B,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG;QAChE,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,SAAS,GAAG;QAChB,mBAAmB;QACnB,aAAa;QACb,SAAS;QACT,WAAW;QACX,WAAW;QACX,iBAAiB;KAClB,CAAC;IACF,IAAI,YAAY,CAAC,MAAM,CAAC,MAAM;QAAE,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAChE,IAAI,YAAY,CAAC,WAAW;QAAE,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC1D,IAAI,YAAY,CAAC,UAAU;QAAE,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC5D,IAAI,YAAY;QAAE,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC9C,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEtC,MAAM,KAAK,GAAG,CAAC,CAAC;IAChB,MAAM,SAAS,GAAG,EAAE,CAAC;IACrB,MAAM,WAAW,GAAG,EAAE,CAAC;IACvB,MAAM,WAAW,GAAG,EAAE,CAAC;IAEvB,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,MAAC,GAAG,IAAC,YAAY,EAAE,CAAC,aAClB,MAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAC,MAAM,aACpB,SAAS,cAAK,SAAS,IACnB,EACP,MAAC,IAAI,IAAC,QAAQ,yBAAI,KAAK,CAAC,MAAM,eAAe,IACzC,EAEN,MAAC,GAAG,eACF,KAAC,GAAG,IAAC,KAAK,EAAE,CAAC,YACX,KAAC,IAAI,oBAAS,GACV,EACN,KAAC,GAAG,IAAC,KAAK,EAAE,KAAK,YACf,KAAC,IAAI,IAAC,IAAI,QAAC,SAAS,yBAEb,GACH,EACN,KAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,YACd,KAAC,IAAI,IAAC,IAAI,QAAC,SAAS,4BAEb,GACH,EACN,KAAC,GAAG,IAAC,KAAK,EAAE,SAAS,YACnB,KAAC,IAAI,IAAC,IAAI,QAAC,SAAS,6BAEb,GACH,EACL,YAAY,CAAC,MAAM,CAAC,QAAQ,IAAI,CAC/B,KAAC,GAAG,IAAC,KAAK,EAAE,WAAW,YACrB,KAAC,IAAI,IAAC,IAAI,QAAC,SAAS,+BAEb,GACH,CACP,EACA,YAAY,CAAC,MAAM,CAAC,QAAQ,IAAI,CAC/B,KAAC,GAAG,IAAC,KAAK,EAAE,WAAW,YACrB,KAAC,IAAI,IAAC,IAAI,QAAC,SAAS,+BAEb,GACH,CACP,IACG,EAEL,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,CACzB,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,MAAC,IAAI,IAAC,QAAQ,0BAAK,UAAU,4BAA4B,GACrD,CACP,EACA,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE;gBAC/B,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC;gBAClC,MAAM,QAAQ,GAAG,GAAG,KAAK,MAAM,CAAC;gBAChC,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;gBACpD,OAAO,CACL,MAAC,GAAG,eACF,KAAC,GAAG,IAAC,KAAK,EAAE,CAAC,YACX,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,YAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAQ,GAC5C,EACN,KAAC,GAAG,IAAC,KAAK,EAAE,KAAK,YACf,KAAC,IAAI,IAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,YAAG,IAAI,CAAC,EAAE,GAAQ,GACxD,EACN,KAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,YACd,MAAC,IAAI,IAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,aACvD,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EACxC,IAAI,CAAC,KAAK,IACN,GACH,EACN,KAAC,GAAG,IAAC,KAAK,EAAE,SAAS,YACnB,MAAC,IAAI,IAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,aACvC,YAAY,CAAC,MAAM,CAAC,SAAS,IAAI,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAC9D,IAAI,CAAC,MAAM,IACP,GACH,EACL,YAAY,CAAC,MAAM,CAAC,QAAQ,IAAI,CAC/B,KAAC,GAAG,IAAC,KAAK,EAAE,WAAW,YACrB,KAAC,IAAI,IAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,YACvC,IAAI,CAAC,QAAQ,GACT,GACH,CACP,EACA,YAAY,CAAC,MAAM,CAAC,QAAQ,IAAI,CAC/B,KAAC,GAAG,IAAC,KAAK,EAAE,WAAW,YACrB,KAAC,IAAI,IAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,YACvC,IAAI,CAAC,QAAQ,GACT,GACH,CACP,KAhCO,IAAI,CAAC,EAAE,CAiCX,CACP,CAAC;YACJ,CAAC,CAAC,EAEF,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACd,YAAY,CAAC,MAAM,CAAC,MAAM,IAAI,aAAa,CAAC,CAAC,CAAC,CAC7C,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,iDAAwC,EAC1D,KAAC,SAAS,IACR,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,IAAI,EACX,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;gCAClB,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAE,CAAC,IAAI,CAAC;gCACrC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gCAC5D,IAAI,CAAC;oCACH,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;oCACvD,UAAU,CAAC,EAAE,CAAC,CAAC;gCACjB,CAAC;gCAAC,OAAO,CAAC,EAAE,CAAC;oCACX,UAAU,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;gCAChE,CAAC;gCACD,gBAAgB,CAAC,KAAK,CAAC,CAAC;gCACxB,cAAc,CAAC,EAAE,CAAC,CAAC;gCACnB,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;4BAC3B,CAAC,GACD,IACE,CACP,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAClB,MAAC,IAAI,IAAC,KAAK,EAAC,KAAK,8BACD,SAAS,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,EAAE,eACnC,CACR,CAAC,CAAC,CAAC,CACF,KAAC,IAAI,IAAC,QAAQ,kBAAE,QAAQ,GAAQ,CACjC,GACG,EACL,OAAO,IAAI,CACV,KAAC,GAAG,cACF,MAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,wBAAI,OAAO,IAAQ,GACnC,CACP,IACG,CACP,CAAC;AACJ,CAAC"}
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;