@sascha384/tic 1.30.0 → 1.32.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/README.md +19 -7
- package/dist/backends/local/config.d.ts +2 -0
- package/dist/backends/local/config.js +2 -0
- package/dist/backends/local/config.js.map +1 -1
- package/dist/backends/local/index.d.ts +4 -0
- package/dist/backends/local/index.js +15 -1
- package/dist/backends/local/index.js.map +1 -1
- package/dist/backends/local/items.d.ts +4 -0
- package/dist/backends/local/items.js +30 -0
- package/dist/backends/local/items.js.map +1 -1
- package/dist/backends/types.d.ts +6 -0
- package/dist/backends/types.js +5 -0
- package/dist/backends/types.js.map +1 -1
- package/dist/components/HelpScreen.js +15 -2
- package/dist/components/HelpScreen.js.map +1 -1
- package/dist/components/Settings.js +43 -0
- package/dist/components/Settings.js.map +1 -1
- package/dist/components/StatusScreen.js +8 -1
- package/dist/components/StatusScreen.js.map +1 -1
- package/dist/components/WorkItemForm.js +23 -2
- package/dist/components/WorkItemForm.js.map +1 -1
- package/dist/components/WorkItemList.js +163 -34
- package/dist/components/WorkItemList.js.map +1 -1
- package/dist/implement.d.ts +4 -0
- package/dist/implement.js +36 -13
- package/dist/implement.js.map +1 -1
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -1
- package/dist/stores/recentCommandsStore.d.ts +9 -0
- package/dist/stores/recentCommandsStore.js +46 -0
- package/dist/stores/recentCommandsStore.js.map +1 -0
- package/dist/stores/undoStore.d.ts +19 -0
- package/dist/stores/undoStore.js +33 -0
- package/dist/stores/undoStore.js.map +1 -0
- package/dist/sync/queue.d.ts +1 -0
- package/dist/sync/queue.js +6 -0
- package/dist/sync/queue.js.map +1 -1
- package/package.json +1 -1
- package/skills/tic-config/SKILL.md +1 -1
- package/skills/tic-items/SKILL.md +12 -1
- package/skills/tic-relationships/SKILL.md +1 -1
package/dist/implement.js
CHANGED
|
@@ -108,23 +108,46 @@ export function beginImplementation(item, comments, config, repoRoot, options) {
|
|
|
108
108
|
}
|
|
109
109
|
// Copy to clipboard
|
|
110
110
|
let clipboardOk = false;
|
|
111
|
-
if (!options?.skipClipboard) {
|
|
111
|
+
if (!options?.skipClipboard && config.copyToClipboard !== false) {
|
|
112
112
|
const text = formatItemForClipboard(item, comments);
|
|
113
113
|
clipboardOk = copyToClipboard(text);
|
|
114
114
|
}
|
|
115
|
-
// Spawn shell
|
|
115
|
+
// Spawn shell / run branch command
|
|
116
|
+
let commandFailed = false;
|
|
116
117
|
if (!options?.skipShell) {
|
|
117
|
-
const
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
118
|
+
const env = {
|
|
119
|
+
...process.env,
|
|
120
|
+
TIC_ITEM_ID: item.id,
|
|
121
|
+
TIC_ITEM_TITLE: item.title,
|
|
122
|
+
TIC_ITEM_DESCRIPTION: item.description,
|
|
123
|
+
TIC_ITEM_STATUS: item.status,
|
|
124
|
+
TIC_ITEM_PRIORITY: item.priority || '',
|
|
125
|
+
TIC_ITEM_LABELS: item.labels.join(','),
|
|
126
|
+
TIC_ITEM_URL: options?.itemUrl || '',
|
|
127
|
+
TIC_BRANCH: branch,
|
|
128
|
+
TIC_TARGET_DIR: targetDir,
|
|
129
|
+
};
|
|
130
|
+
const command = config.branchCommand;
|
|
131
|
+
if (command) {
|
|
132
|
+
const result = spawnSync(command, [], {
|
|
133
|
+
cwd: targetDir,
|
|
134
|
+
stdio: 'inherit',
|
|
135
|
+
env,
|
|
136
|
+
shell: true,
|
|
137
|
+
});
|
|
138
|
+
if (result.status !== 0 && result.status !== null) {
|
|
139
|
+
commandFailed = true;
|
|
140
|
+
// Fall back to plain shell
|
|
141
|
+
const shell = process.env['SHELL'] || '/bin/sh';
|
|
142
|
+
spawnSync(shell, [], { cwd: targetDir, stdio: 'inherit', env });
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
// Empty/unset branchCommand: plain shell
|
|
147
|
+
const shell = process.env['SHELL'] || '/bin/sh';
|
|
148
|
+
spawnSync(shell, [], { cwd: targetDir, stdio: 'inherit', env });
|
|
149
|
+
}
|
|
127
150
|
}
|
|
128
|
-
return { resumed, targetDir, clipboardOk };
|
|
151
|
+
return { resumed, targetDir, clipboardOk, commandFailed };
|
|
129
152
|
}
|
|
130
153
|
//# sourceMappingURL=implement.js.map
|
package/dist/implement.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"implement.js","sourceRoot":"","sources":["../src/implement.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"implement.js","sourceRoot":"","sources":["../src/implement.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -6,6 +6,9 @@ import { render } from 'ink';
|
|
|
6
6
|
import { App } from './app.js';
|
|
7
7
|
import { configStore } from './stores/configStore.js';
|
|
8
8
|
import { backendDataStore } from './stores/backendDataStore.js';
|
|
9
|
+
import { undoStore } from './stores/undoStore.js';
|
|
10
|
+
import { recentCommandsStore } from './stores/recentCommandsStore.js';
|
|
11
|
+
import { cleanupTrash, permanentlyDeleteWorkItem, } from './backends/local/items.js';
|
|
9
12
|
if (process.argv.length > 2) {
|
|
10
13
|
const { runCli } = await import('./cli/index.js');
|
|
11
14
|
await runCli(process.argv);
|
|
@@ -15,9 +18,21 @@ else {
|
|
|
15
18
|
await configStore.getState().init(cwd);
|
|
16
19
|
// Init is non-blocking - UI renders immediately with loading state
|
|
17
20
|
backendDataStore.getState().init(cwd);
|
|
21
|
+
await recentCommandsStore.getState().init(cwd);
|
|
22
|
+
await cleanupTrash(cwd);
|
|
18
23
|
console.clear();
|
|
19
24
|
const app = render(_jsx(App, {}));
|
|
20
25
|
await app.waitUntilExit();
|
|
26
|
+
// Clean up undo stack — permanently delete any remaining trashed files
|
|
27
|
+
const remaining = undoStore.getState().clear();
|
|
28
|
+
for (const entry of remaining) {
|
|
29
|
+
if (entry.type === 'delete') {
|
|
30
|
+
for (const snap of entry.itemSnapshots) {
|
|
31
|
+
await permanentlyDeleteWorkItem(cwd, snap.id);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
recentCommandsStore.getState().destroy();
|
|
21
36
|
backendDataStore.getState().destroy();
|
|
22
37
|
configStore.getState().destroy();
|
|
23
38
|
// If an update was requested from Settings, run it now while we still
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":";;AACA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,MAAM,CAAC,kBAAkB,EAAE,EAAE,CAAC;AAE9B,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":";;AACA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,MAAM,CAAC,kBAAkB,EAAE,EAAE,CAAC;AAE9B,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EACL,YAAY,EACZ,yBAAyB,GAC1B,MAAM,2BAA2B,CAAC;AAEnC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;IAC5B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAClD,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;KAAM,CAAC;IACN,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,WAAW,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEvC,mEAAmE;IACnE,gBAAgB,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEtC,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE/C,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;IAExB,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,MAAM,GAAG,GAAG,MAAM,CAAC,KAAC,GAAG,KAAG,CAAC,CAAC;IAC5B,MAAM,GAAG,CAAC,aAAa,EAAE,CAAC;IAE1B,uEAAuE;IACvE,MAAM,SAAS,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC;IAC/C,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;QAC9B,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;gBACvC,MAAM,yBAAyB,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;IACH,CAAC;IAED,mBAAmB,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,CAAC;IACzC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,CAAC;IACtC,WAAW,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,CAAC;IAEjC,sEAAsE;IACtE,gEAAgE;IAChE,MAAM,EAAE,iBAAiB,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;IACtE,IAAI,iBAAiB,EAAE,EAAE,CAAC;QACxB,SAAS,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface RecentCommandsStoreState {
|
|
2
|
+
recentIds: string[];
|
|
3
|
+
root: string | null;
|
|
4
|
+
init: (root: string) => Promise<void>;
|
|
5
|
+
addRecent: (id: string) => void;
|
|
6
|
+
destroy: () => void;
|
|
7
|
+
}
|
|
8
|
+
export declare const recentCommandsStore: import("zustand").StoreApi<RecentCommandsStoreState>;
|
|
9
|
+
export declare function useRecentCommandsStore<T>(selector: (state: RecentCommandsStoreState) => T): T;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { createStore } from 'zustand/vanilla';
|
|
2
|
+
import { useStore } from 'zustand';
|
|
3
|
+
import { readFile, writeFile, mkdir } from 'node:fs/promises';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
const MAX_RECENT = 5;
|
|
6
|
+
const FILENAME = 'recent-commands.json';
|
|
7
|
+
let writeChain = Promise.resolve();
|
|
8
|
+
export const recentCommandsStore = createStore((set, get) => ({
|
|
9
|
+
recentIds: [],
|
|
10
|
+
root: null,
|
|
11
|
+
init: async (root) => {
|
|
12
|
+
const filePath = join(root, '.tic', FILENAME);
|
|
13
|
+
let recentIds = [];
|
|
14
|
+
try {
|
|
15
|
+
const data = await readFile(filePath, 'utf-8');
|
|
16
|
+
const parsed = JSON.parse(data);
|
|
17
|
+
if (Array.isArray(parsed)) {
|
|
18
|
+
recentIds = parsed
|
|
19
|
+
.filter((v) => typeof v === 'string')
|
|
20
|
+
.slice(0, MAX_RECENT);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
// Missing or corrupted file — start with empty list
|
|
25
|
+
}
|
|
26
|
+
set({ recentIds, root });
|
|
27
|
+
},
|
|
28
|
+
addRecent: (id) => {
|
|
29
|
+
const { recentIds, root } = get();
|
|
30
|
+
const filtered = recentIds.filter((v) => v !== id);
|
|
31
|
+
const updated = [id, ...filtered].slice(0, MAX_RECENT);
|
|
32
|
+
set({ recentIds: updated });
|
|
33
|
+
if (root) {
|
|
34
|
+
const filePath = join(root, '.tic', FILENAME);
|
|
35
|
+
writeChain = writeChain.then(() => mkdir(join(root, '.tic'), { recursive: true }).then(() => writeFile(filePath, JSON.stringify(updated) + '\n')));
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
destroy: () => {
|
|
39
|
+
writeChain = Promise.resolve();
|
|
40
|
+
set({ recentIds: [], root: null });
|
|
41
|
+
},
|
|
42
|
+
}));
|
|
43
|
+
export function useRecentCommandsStore(selector) {
|
|
44
|
+
return useStore(recentCommandsStore, selector);
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=recentCommandsStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recentCommandsStore.js","sourceRoot":"","sources":["../../src/stores/recentCommandsStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,UAAU,GAAG,CAAC,CAAC;AACrB,MAAM,QAAQ,GAAG,sBAAsB,CAAC;AAExC,IAAI,UAAU,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;AAUnC,MAAM,CAAC,MAAM,mBAAmB,GAAG,WAAW,CAC5C,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IACb,SAAS,EAAE,EAAE;IACb,IAAI,EAAE,IAAI;IAEV,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC9C,IAAI,SAAS,GAAa,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACzC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1B,SAAS,GAAG,MAAM;qBACf,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;qBACjD,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,oDAAoD;QACtD,CAAC;QACD,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3B,CAAC;IAED,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE;QAChB,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,GAAG,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QACnD,MAAM,OAAO,GAAG,CAAC,EAAE,EAAE,GAAG,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QACvD,GAAG,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;QAE5B,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC9C,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAChC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CACvD,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CACpD,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,EAAE,GAAG,EAAE;QACZ,UAAU,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;QAC/B,GAAG,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACrC,CAAC;CACF,CAAC,CACH,CAAC;AAEF,MAAM,UAAU,sBAAsB,CACpC,QAAgD;IAEhD,OAAO,QAAQ,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC;AACjD,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { WorkItem } from '../types.js';
|
|
2
|
+
import type { QueueAction } from '../sync/types.js';
|
|
3
|
+
export type UndoActionType = 'delete' | 'create' | 'update';
|
|
4
|
+
export interface UndoEntry {
|
|
5
|
+
type: UndoActionType;
|
|
6
|
+
label: string;
|
|
7
|
+
itemSnapshots: WorkItem[];
|
|
8
|
+
syncItemIds: string[];
|
|
9
|
+
syncAction: QueueAction;
|
|
10
|
+
createdIds?: string[];
|
|
11
|
+
}
|
|
12
|
+
export interface UndoStoreState {
|
|
13
|
+
stack: UndoEntry[];
|
|
14
|
+
pushUndo: (entry: UndoEntry) => UndoEntry | undefined;
|
|
15
|
+
popUndo: () => UndoEntry | undefined;
|
|
16
|
+
clear: () => UndoEntry[];
|
|
17
|
+
}
|
|
18
|
+
export declare const undoStore: import("zustand").StoreApi<UndoStoreState>;
|
|
19
|
+
export declare function useUndoStore<T>(selector: (state: UndoStoreState) => T): T;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { createStore } from 'zustand/vanilla';
|
|
2
|
+
import { useStore } from 'zustand';
|
|
3
|
+
const MAX_DEPTH = 5;
|
|
4
|
+
export const undoStore = createStore((set, get) => ({
|
|
5
|
+
stack: [],
|
|
6
|
+
pushUndo: (entry) => {
|
|
7
|
+
const { stack } = get();
|
|
8
|
+
const newStack = [entry, ...stack];
|
|
9
|
+
let evicted;
|
|
10
|
+
if (newStack.length > MAX_DEPTH) {
|
|
11
|
+
evicted = newStack.pop();
|
|
12
|
+
}
|
|
13
|
+
set({ stack: newStack });
|
|
14
|
+
return evicted;
|
|
15
|
+
},
|
|
16
|
+
popUndo: () => {
|
|
17
|
+
const { stack } = get();
|
|
18
|
+
if (stack.length === 0)
|
|
19
|
+
return undefined;
|
|
20
|
+
const [first, ...rest] = stack;
|
|
21
|
+
set({ stack: rest });
|
|
22
|
+
return first;
|
|
23
|
+
},
|
|
24
|
+
clear: () => {
|
|
25
|
+
const { stack } = get();
|
|
26
|
+
set({ stack: [] });
|
|
27
|
+
return stack;
|
|
28
|
+
},
|
|
29
|
+
}));
|
|
30
|
+
export function useUndoStore(selector) {
|
|
31
|
+
return useStore(undoStore, selector);
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=undoStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"undoStore.js","sourceRoot":"","sources":["../../src/stores/undoStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAenC,MAAM,SAAS,GAAG,CAAC,CAAC;AASpB,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,CAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IAClE,KAAK,EAAE,EAAE;IAET,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;QAClB,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,EAAE,CAAC;QACxB,MAAM,QAAQ,GAAG,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC,CAAC;QACnC,IAAI,OAA8B,CAAC;QACnC,IAAI,QAAQ,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;YAChC,OAAO,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC;QAC3B,CAAC;QACD,GAAG,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACzB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,EAAE,GAAG,EAAE;QACZ,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,EAAE,CAAC;QACxB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QACzC,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC;QAC/B,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACrB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,EAAE,GAAG,EAAE;QACV,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,EAAE,CAAC;QACxB,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QACnB,OAAO,KAAK,CAAC;IACf,CAAC;CACF,CAAC,CAAC,CAAC;AAEJ,MAAM,UAAU,YAAY,CAAI,QAAsC;IACpE,OAAO,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AACvC,CAAC"}
|
package/dist/sync/queue.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ export declare class SyncQueueStore {
|
|
|
6
6
|
private write;
|
|
7
7
|
append(entry: QueueEntry): Promise<void>;
|
|
8
8
|
remove(itemId: string, action: QueueAction): Promise<void>;
|
|
9
|
+
removeByIds(itemIds: string[], action: QueueAction): Promise<void>;
|
|
9
10
|
clear(): Promise<void>;
|
|
10
11
|
renameItem(oldId: string, newId: string): Promise<void>;
|
|
11
12
|
}
|
package/dist/sync/queue.js
CHANGED
|
@@ -34,6 +34,12 @@ export class SyncQueueStore {
|
|
|
34
34
|
queue.pending = queue.pending.filter((e) => !(e.itemId === itemId && e.action === action));
|
|
35
35
|
await this.write(queue);
|
|
36
36
|
}
|
|
37
|
+
async removeByIds(itemIds, action) {
|
|
38
|
+
const queue = await this.read();
|
|
39
|
+
const idSet = new Set(itemIds);
|
|
40
|
+
queue.pending = queue.pending.filter((e) => !(idSet.has(e.itemId) && e.action === action));
|
|
41
|
+
await this.write(queue);
|
|
42
|
+
}
|
|
37
43
|
async clear() {
|
|
38
44
|
await this.write({ pending: [] });
|
|
39
45
|
}
|
package/dist/sync/queue.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/sync/queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,MAAM,OAAO,cAAc;IACjB,QAAQ,CAAS;IAEzB,YAAY,IAAY;QACtB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACtD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAc,CAAC;YAC1C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;gBAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;YACzD,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,KAAK,CAAC,KAAgB;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAiB;QAC5B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAChC,4DAA4D;QAC5D,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAClC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,CACjE,CAAC;QACF,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAAc,EAAE,MAAmB;QAC9C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAChC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAClC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CACrD,CAAC;QACF,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAAa,EAAE,KAAa;QAC3C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAChC,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClC,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;gBAC3B,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;YACvB,CAAC;QACH,CAAC;QACD,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/sync/queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,MAAM,OAAO,cAAc;IACjB,QAAQ,CAAS;IAEzB,YAAY,IAAY;QACtB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACtD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAc,CAAC;YAC1C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;gBAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;YACzD,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,KAAK,CAAC,KAAgB;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAiB;QAC5B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAChC,4DAA4D;QAC5D,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAClC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,CACjE,CAAC;QACF,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAAc,EAAE,MAAmB;QAC9C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAChC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAClC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CACrD,CAAC;QACF,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAiB,EAAE,MAAmB;QACtD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;QAC/B,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAClC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CACrD,CAAC;QACF,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAAa,EAAE,KAAa;QAC3C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAChC,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClC,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;gBAC3B,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;YACvB,CAAC;QACH,CAAC;QACD,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: tic-config
|
|
3
|
-
description: Use when initializing projects, checking configuration, or changing backends/iterations
|
|
3
|
+
description: Use when initializing projects, checking configuration, or changing backends/iterations for epics, tasks, issues, bugs, stories, features, tickets, or any work items
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# tic Configuration
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: tic-items
|
|
3
|
-
description: Use when creating, updating, listing, searching, or deleting work
|
|
3
|
+
description: Use when creating, updating, listing, searching, or deleting epics, tasks, issues, bugs, stories, features, tickets, items, cards, defects, improvements, subtasks, or any work item
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# tic Work Items
|
|
@@ -15,6 +15,17 @@ Call `get_config` first to understand:
|
|
|
15
15
|
- Available `iterations`
|
|
16
16
|
- Backend `capabilities` (which fields are supported)
|
|
17
17
|
|
|
18
|
+
## Creating Items — Brainstorm First
|
|
19
|
+
|
|
20
|
+
When the user asks to create a work item, **brainstorm before calling `create_item`**:
|
|
21
|
+
|
|
22
|
+
1. **Clarify intent** — Ask what the item is about if the request is vague. Use `AskUserQuestion` with concrete options when possible.
|
|
23
|
+
2. **Suggest structure** — Propose a title, type, priority, and brief description. For larger items (epics, features), suggest breaking them into child tasks.
|
|
24
|
+
3. **Check for duplicates** — Use `search_items` to see if a similar item already exists. If matches are found, ask whether to update an existing item or create a new one.
|
|
25
|
+
4. **Present the plan** — Show the user exactly what you'll create before calling `create_item`. Use options to let them approve or adjust.
|
|
26
|
+
|
|
27
|
+
**Skip brainstorming** when the user provides all details explicitly (e.g., "create a bug titled 'Login fails on Safari' with priority high").
|
|
28
|
+
|
|
18
29
|
## Tools
|
|
19
30
|
|
|
20
31
|
### list_items
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: tic-relationships
|
|
3
|
-
description: Use when working with parent-child hierarchies or dependencies between items
|
|
3
|
+
description: Use when working with parent-child hierarchies or dependencies between epics, tasks, issues, bugs, stories, features, tickets, or any work items
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# tic Relationships
|