@sascha384/tic 1.32.0 → 1.34.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/plugin.json +1 -1
- package/dist/backends/local/config.js +1 -1
- package/dist/backends/local/config.js.map +1 -1
- package/dist/commands.js +7 -0
- package/dist/commands.js.map +1 -1
- package/dist/components/HelpScreen.js +4 -2
- package/dist/components/HelpScreen.js.map +1 -1
- package/dist/components/TableLayout.d.ts +3 -1
- package/dist/components/TableLayout.js +25 -3
- package/dist/components/TableLayout.js.map +1 -1
- package/dist/components/WorkItemForm.js +4 -4
- package/dist/components/WorkItemForm.js.map +1 -1
- package/dist/components/WorkItemList.js +101 -13
- package/dist/components/WorkItemList.js.map +1 -1
- package/dist/components/buildTree.d.ts +2 -0
- package/dist/components/buildTree.js +92 -0
- package/dist/components/buildTree.js.map +1 -1
- package/dist/implement.d.ts +2 -0
- package/dist/implement.js +57 -7
- package/dist/implement.js.map +1 -1
- package/dist/stores/listViewStore.d.ts +12 -0
- package/dist/stores/listViewStore.js +22 -0
- package/dist/stores/listViewStore.js.map +1 -1
- package/dist/stores/uiStore.d.ts +2 -0
- package/dist/stores/uiStore.js.map +1 -1
- package/package.json +1 -1
- package/skills/{tic-config → config}/SKILL.md +1 -1
- package/skills/{tic-items → items}/SKILL.md +1 -1
- package/skills/{tic-relationships → relationships}/SKILL.md +1 -1
package/dist/implement.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { execFileSync, spawnSync } from 'node:child_process';
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
import os from 'node:os';
|
|
2
4
|
import path from 'node:path';
|
|
3
5
|
import { slugify, branchExists, createBranch, checkoutBranch, createWorktree, worktreeExists, hasUncommittedChanges, } from './git.js';
|
|
4
6
|
/**
|
|
@@ -127,24 +129,72 @@ export function beginImplementation(item, comments, config, repoRoot, options) {
|
|
|
127
129
|
TIC_BRANCH: branch,
|
|
128
130
|
TIC_TARGET_DIR: targetDir,
|
|
129
131
|
};
|
|
132
|
+
const shell = process.env['SHELL'] || '/bin/sh';
|
|
130
133
|
const command = config.branchCommand;
|
|
131
|
-
if (command) {
|
|
134
|
+
if (command && options?.nonInteractive) {
|
|
135
|
+
// Non-interactive: just run the command directly (used in tests)
|
|
132
136
|
const result = spawnSync(command, [], {
|
|
133
137
|
cwd: targetDir,
|
|
134
138
|
stdio: 'inherit',
|
|
135
139
|
env,
|
|
136
|
-
shell:
|
|
140
|
+
shell: '/bin/sh',
|
|
137
141
|
});
|
|
138
142
|
if (result.status !== 0 && result.status !== null) {
|
|
139
143
|
commandFailed = true;
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
else if (command) {
|
|
147
|
+
// Write a temporary rc file that sources the user's profile then runs
|
|
148
|
+
// the configured command. This gives us an interactive shell that
|
|
149
|
+
// executes the branchCommand on startup and stays open.
|
|
150
|
+
const rcFile = path.join(os.tmpdir(), `tic-rc-${process.pid}.sh`);
|
|
151
|
+
const rcContent = [
|
|
152
|
+
`[ -f ~/.bashrc ] && . ~/.bashrc`,
|
|
153
|
+
`[ -f ~/.zshrc ] && . ~/.zshrc`,
|
|
154
|
+
command,
|
|
155
|
+
].join('\n');
|
|
156
|
+
fs.writeFileSync(rcFile, rcContent);
|
|
157
|
+
const shellName = path.basename(shell);
|
|
158
|
+
let result;
|
|
159
|
+
if (shellName === 'bash') {
|
|
160
|
+
result = spawnSync(shell, ['--init-file', rcFile], {
|
|
161
|
+
cwd: targetDir,
|
|
162
|
+
stdio: 'inherit',
|
|
163
|
+
env,
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
else if (shellName === 'zsh') {
|
|
167
|
+
result = spawnSync(shell, [], {
|
|
168
|
+
cwd: targetDir,
|
|
169
|
+
stdio: 'inherit',
|
|
170
|
+
env: {
|
|
171
|
+
...env,
|
|
172
|
+
ZDOTDIR_ORIG: process.env['ZDOTDIR'] || '',
|
|
173
|
+
ZDOTDIR: path.dirname(rcFile),
|
|
174
|
+
ENV: rcFile,
|
|
175
|
+
},
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
// POSIX sh fallback: ENV is sourced by interactive sh
|
|
180
|
+
result = spawnSync(shell, [], {
|
|
181
|
+
cwd: targetDir,
|
|
182
|
+
stdio: 'inherit',
|
|
183
|
+
env: { ...env, ENV: rcFile },
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
try {
|
|
187
|
+
fs.unlinkSync(rcFile);
|
|
188
|
+
}
|
|
189
|
+
catch {
|
|
190
|
+
// ignore cleanup errors
|
|
191
|
+
}
|
|
192
|
+
if (result.status !== 0 && result.status !== null) {
|
|
193
|
+
commandFailed = true;
|
|
143
194
|
}
|
|
144
195
|
}
|
|
145
196
|
else {
|
|
146
|
-
//
|
|
147
|
-
const shell = process.env['SHELL'] || '/bin/sh';
|
|
197
|
+
// No branchCommand: plain interactive shell
|
|
148
198
|
spawnSync(shell, [], { cwd: targetDir, stdio: 'inherit', env });
|
|
149
199
|
}
|
|
150
200
|
}
|
package/dist/implement.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"implement.js","sourceRoot":"","sources":["../src/implement.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EACL,OAAO,EACP,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,cAAc,EACd,cAAc,EACd,qBAAqB,GACtB,MAAM,UAAU,CAAC;AAElB;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACpC,IAAc,EACd,QAAmB;IAEnB,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,QAAQ;IACR,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IAC3C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,4CAA4C;IAC5C,KAAK,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACvC,KAAK,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAE3C,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CACR,qBAAqB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACrE,CAAC;IACJ,CAAC;IAED,cAAc;IACd,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC/B,CAAC;IAED,WAAW;IACX,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAE1B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,MAAM,OAAO,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;YACvD,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,IAAI,CAAC;QACH,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAClC,YAAY,CAAC,QAAQ,EAAE,EAAE,EAAE;gBACzB,KAAK,EAAE,IAAI;gBACX,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;aAChC,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACd,CAAC;QAED,oCAAoC;QACpC,IAAI,CAAC;YACH,YAAY,CAAC,OAAO,EAAE,CAAC,YAAY,EAAE,WAAW,CAAC,EAAE;gBACjD,KAAK,EAAE,IAAI;gBACX,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;aAChC,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,YAAY,CAAC,MAAM,EAAE,CAAC,aAAa,CAAC,EAAE;gBACpC,KAAK,EAAE,IAAI;gBACX,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;aAChC,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;
|
|
1
|
+
{"version":3,"file":"implement.js","sourceRoot":"","sources":["../src/implement.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,27 @@
|
|
|
1
|
+
export type SortDirection = 'asc' | 'desc';
|
|
2
|
+
export type SortColumn = 'id' | 'title' | 'status' | 'priority' | 'assignee' | 'created' | 'updated';
|
|
3
|
+
export interface SortEntry {
|
|
4
|
+
column: SortColumn;
|
|
5
|
+
direction: SortDirection;
|
|
6
|
+
}
|
|
1
7
|
interface ListViewState {
|
|
2
8
|
cursor: number;
|
|
3
9
|
expandedIds: Set<string>;
|
|
4
10
|
markedIds: Set<string>;
|
|
5
11
|
scrollOffset: number;
|
|
12
|
+
rangeAnchor: number | null;
|
|
13
|
+
sortStack: SortEntry[];
|
|
6
14
|
setCursor: (index: number) => void;
|
|
7
15
|
clampCursor: (maxIndex: number) => void;
|
|
8
16
|
toggleExpanded: (id: string) => void;
|
|
9
17
|
toggleMarked: (id: string) => void;
|
|
10
18
|
clearMarked: () => void;
|
|
19
|
+
setMarkedIds: (ids: Set<string>) => void;
|
|
11
20
|
setScrollOffset: (offset: number) => void;
|
|
21
|
+
setRangeAnchor: (index: number | null) => void;
|
|
12
22
|
removeDeletedItem: (id: string) => void;
|
|
23
|
+
toggleSortColumn: (column: SortColumn) => void;
|
|
24
|
+
clearSort: () => void;
|
|
13
25
|
reset: () => void;
|
|
14
26
|
}
|
|
15
27
|
export declare const listViewStore: import("zustand").StoreApi<ListViewState>;
|
|
@@ -5,6 +5,8 @@ const initialState = {
|
|
|
5
5
|
expandedIds: new Set(),
|
|
6
6
|
markedIds: new Set(),
|
|
7
7
|
scrollOffset: 0,
|
|
8
|
+
rangeAnchor: null,
|
|
9
|
+
sortStack: [],
|
|
8
10
|
};
|
|
9
11
|
export const listViewStore = createStore((set) => ({
|
|
10
12
|
...initialState,
|
|
@@ -33,7 +35,9 @@ export const listViewStore = createStore((set) => ({
|
|
|
33
35
|
return { markedIds: next };
|
|
34
36
|
}),
|
|
35
37
|
clearMarked: () => set({ markedIds: new Set() }),
|
|
38
|
+
setMarkedIds: (ids) => set({ markedIds: ids }),
|
|
36
39
|
setScrollOffset: (offset) => set({ scrollOffset: offset }),
|
|
40
|
+
setRangeAnchor: (index) => set({ rangeAnchor: index }),
|
|
37
41
|
removeDeletedItem: (id) => set((state) => {
|
|
38
42
|
const nextExpanded = new Set(state.expandedIds);
|
|
39
43
|
const nextMarked = new Set(state.markedIds);
|
|
@@ -41,11 +45,29 @@ export const listViewStore = createStore((set) => ({
|
|
|
41
45
|
nextMarked.delete(id);
|
|
42
46
|
return { expandedIds: nextExpanded, markedIds: nextMarked };
|
|
43
47
|
}),
|
|
48
|
+
toggleSortColumn: (column) => set((state) => {
|
|
49
|
+
const idx = state.sortStack.findIndex((e) => e.column === column);
|
|
50
|
+
if (idx === -1) {
|
|
51
|
+
return {
|
|
52
|
+
sortStack: [...state.sortStack, { column, direction: 'asc' }],
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
const entry = state.sortStack[idx];
|
|
56
|
+
if (entry.direction === 'asc') {
|
|
57
|
+
const next = [...state.sortStack];
|
|
58
|
+
next[idx] = { column, direction: 'desc' };
|
|
59
|
+
return { sortStack: next };
|
|
60
|
+
}
|
|
61
|
+
return { sortStack: state.sortStack.filter((_, i) => i !== idx) };
|
|
62
|
+
}),
|
|
63
|
+
clearSort: () => set({ sortStack: [] }),
|
|
44
64
|
reset: () => set({
|
|
45
65
|
cursor: 0,
|
|
46
66
|
expandedIds: new Set(),
|
|
47
67
|
markedIds: new Set(),
|
|
48
68
|
scrollOffset: 0,
|
|
69
|
+
rangeAnchor: null,
|
|
70
|
+
sortStack: [],
|
|
49
71
|
}),
|
|
50
72
|
}));
|
|
51
73
|
export function useListViewStore(selector) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listViewStore.js","sourceRoot":"","sources":["../../src/stores/listViewStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"listViewStore.js","sourceRoot":"","sources":["../../src/stores/listViewStore.ts"],"names":[],"mappings":"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"}
|
package/dist/stores/uiStore.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uiStore.js","sourceRoot":"","sources":["../../src/stores/uiStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"uiStore.js","sourceRoot":"","sources":["../../src/stores/uiStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAoCnC,MAAM,CAAC,MAAM,OAAO,GAAG,WAAW,CAAe,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACzD,aAAa,EAAE,IAAI;IACnB,OAAO,EAAE,EAAE;IACX,KAAK,EAAE,IAAI;IAEX,WAAW,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC;IACzD,YAAY,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IAChD,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IAC1C,YAAY,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACxC,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC;IAC1E,UAAU,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACtC,KAAK,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;CACpE,CAAC,CAAC,CAAC;AAEJ,MAAM,UAAU,UAAU,CAAI,QAAoC;IAChE,OAAO,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACrC,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,mBAAmB;IACjC,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC;IACjD,IAAI,OAAO,IAAI,WAAW,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC,SAAS,CAAC;IAChE,OAAO,EAAE,CAAC;AACZ,CAAC"}
|
package/package.json
CHANGED