@claudetree/cli 0.5.0 → 0.5.2
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/dist/commands/log.d.ts +3 -0
- package/dist/commands/log.d.ts.map +1 -0
- package/dist/commands/log.js +116 -0
- package/dist/commands/log.js.map +1 -0
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/package.json +7 -4
- package/dist/commands/batch.test.d.ts +0 -2
- package/dist/commands/batch.test.d.ts.map +0 -1
- package/dist/commands/batch.test.js +0 -230
- package/dist/commands/batch.test.js.map +0 -1
- package/dist/commands/bustercall/issueFilters.test.d.ts +0 -2
- package/dist/commands/bustercall/issueFilters.test.d.ts.map +0 -1
- package/dist/commands/bustercall/issueFilters.test.js +0 -151
- package/dist/commands/bustercall/issueFilters.test.js.map +0 -1
- package/dist/commands/bustercall/sessionManager.test.d.ts +0 -2
- package/dist/commands/bustercall/sessionManager.test.d.ts.map +0 -1
- package/dist/commands/bustercall/sessionManager.test.js +0 -79
- package/dist/commands/bustercall/sessionManager.test.js.map +0 -1
- package/dist/commands/bustercall/statusDisplay.test.d.ts +0 -2
- package/dist/commands/bustercall/statusDisplay.test.d.ts.map +0 -1
- package/dist/commands/bustercall/statusDisplay.test.js +0 -111
- package/dist/commands/bustercall/statusDisplay.test.js.map +0 -1
- package/dist/commands/bustercall.test.d.ts +0 -2
- package/dist/commands/bustercall.test.d.ts.map +0 -1
- package/dist/commands/bustercall.test.js +0 -258
- package/dist/commands/bustercall.test.js.map +0 -1
- package/dist/commands/chain/chainDisplay.test.d.ts +0 -2
- package/dist/commands/chain/chainDisplay.test.d.ts.map +0 -1
- package/dist/commands/chain/chainDisplay.test.js +0 -128
- package/dist/commands/chain/chainDisplay.test.js.map +0 -1
- package/dist/commands/chain/chainSession.test.d.ts +0 -2
- package/dist/commands/chain/chainSession.test.d.ts.map +0 -1
- package/dist/commands/chain/chainSession.test.js +0 -93
- package/dist/commands/chain/chainSession.test.js.map +0 -1
- package/dist/commands/chain.test.d.ts +0 -2
- package/dist/commands/chain.test.d.ts.map +0 -1
- package/dist/commands/chain.test.js +0 -216
- package/dist/commands/chain.test.js.map +0 -1
- package/dist/commands/clean.test.d.ts +0 -2
- package/dist/commands/clean.test.d.ts.map +0 -1
- package/dist/commands/clean.test.js +0 -193
- package/dist/commands/clean.test.js.map +0 -1
- package/dist/commands/demo.d.ts +0 -3
- package/dist/commands/demo.d.ts.map +0 -1
- package/dist/commands/demo.js +0 -175
- package/dist/commands/demo.js.map +0 -1
- package/dist/commands/demo.test.d.ts +0 -2
- package/dist/commands/demo.test.d.ts.map +0 -1
- package/dist/commands/demo.test.js +0 -34
- package/dist/commands/demo.test.js.map +0 -1
- package/dist/commands/doctor.test.d.ts +0 -2
- package/dist/commands/doctor.test.d.ts.map +0 -1
- package/dist/commands/doctor.test.js +0 -324
- package/dist/commands/doctor.test.js.map +0 -1
- package/dist/commands/init.test.d.ts +0 -2
- package/dist/commands/init.test.d.ts.map +0 -1
- package/dist/commands/init.test.js +0 -94
- package/dist/commands/init.test.js.map +0 -1
- package/dist/commands/list.test.d.ts +0 -2
- package/dist/commands/list.test.d.ts.map +0 -1
- package/dist/commands/list.test.js +0 -106
- package/dist/commands/list.test.js.map +0 -1
- package/dist/commands/resume.test.d.ts +0 -2
- package/dist/commands/resume.test.d.ts.map +0 -1
- package/dist/commands/resume.test.js +0 -362
- package/dist/commands/resume.test.js.map +0 -1
- package/dist/commands/start/buildPrompt.test.d.ts +0 -2
- package/dist/commands/start/buildPrompt.test.d.ts.map +0 -1
- package/dist/commands/start/buildPrompt.test.js +0 -182
- package/dist/commands/start/buildPrompt.test.js.map +0 -1
- package/dist/commands/start/createWorktree.test.d.ts +0 -2
- package/dist/commands/start/createWorktree.test.d.ts.map +0 -1
- package/dist/commands/start/createWorktree.test.js +0 -81
- package/dist/commands/start/createWorktree.test.js.map +0 -1
- package/dist/commands/start/parseIssueInput.test.d.ts +0 -2
- package/dist/commands/start/parseIssueInput.test.d.ts.map +0 -1
- package/dist/commands/start/parseIssueInput.test.js +0 -118
- package/dist/commands/start/parseIssueInput.test.js.map +0 -1
- package/dist/commands/start/progressTracker.test.d.ts +0 -2
- package/dist/commands/start/progressTracker.test.d.ts.map +0 -1
- package/dist/commands/start/progressTracker.test.js +0 -100
- package/dist/commands/start/progressTracker.test.js.map +0 -1
- package/dist/commands/start/validationGates.test.d.ts +0 -2
- package/dist/commands/start/validationGates.test.d.ts.map +0 -1
- package/dist/commands/start/validationGates.test.js +0 -66
- package/dist/commands/start/validationGates.test.js.map +0 -1
- package/dist/commands/start.test.d.ts +0 -2
- package/dist/commands/start.test.d.ts.map +0 -1
- package/dist/commands/start.test.js +0 -260
- package/dist/commands/start.test.js.map +0 -1
- package/dist/commands/stats.test.d.ts +0 -2
- package/dist/commands/stats.test.d.ts.map +0 -1
- package/dist/commands/stats.test.js +0 -127
- package/dist/commands/stats.test.js.map +0 -1
- package/dist/commands/status.test.d.ts +0 -2
- package/dist/commands/status.test.d.ts.map +0 -1
- package/dist/commands/status.test.js +0 -172
- package/dist/commands/status.test.js.map +0 -1
- package/dist/commands/stop.test.d.ts +0 -2
- package/dist/commands/stop.test.d.ts.map +0 -1
- package/dist/commands/stop.test.js +0 -152
- package/dist/commands/stop.test.js.map +0 -1
- package/dist/commands/tdd.d.ts +0 -3
- package/dist/commands/tdd.d.ts.map +0 -1
- package/dist/commands/tdd.js +0 -472
- package/dist/commands/tdd.js.map +0 -1
- package/dist/commands/web.test.d.ts +0 -2
- package/dist/commands/web.test.d.ts.map +0 -1
- package/dist/commands/web.test.js +0 -133
- package/dist/commands/web.test.js.map +0 -1
|
@@ -1,182 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { buildPrompt, buildSystemPrompt, formatDuration } from './buildPrompt.js';
|
|
3
|
-
describe('buildPrompt', () => {
|
|
4
|
-
describe('with issue data', () => {
|
|
5
|
-
it('should build prompt from issue data', () => {
|
|
6
|
-
const issueData = {
|
|
7
|
-
number: 42,
|
|
8
|
-
title: 'Add feature X',
|
|
9
|
-
body: 'We need to implement feature X',
|
|
10
|
-
labels: ['enhancement'],
|
|
11
|
-
state: 'open',
|
|
12
|
-
url: 'https://github.com/owner/repo/issues/42',
|
|
13
|
-
};
|
|
14
|
-
const result = buildPrompt({
|
|
15
|
-
issueNumber: 42,
|
|
16
|
-
issueData,
|
|
17
|
-
branchName: 'issue-42-add-feature-x',
|
|
18
|
-
taskDescription: null,
|
|
19
|
-
tddEnabled: false,
|
|
20
|
-
});
|
|
21
|
-
expect(result).toContain('Issue #42');
|
|
22
|
-
expect(result).toContain('Add feature X');
|
|
23
|
-
expect(result).toContain('We need to implement feature X');
|
|
24
|
-
expect(result).toContain('IMPLEMENT the solution');
|
|
25
|
-
});
|
|
26
|
-
it('should add TDD instruction when enabled', () => {
|
|
27
|
-
const issueData = {
|
|
28
|
-
number: 42,
|
|
29
|
-
title: 'Add feature X',
|
|
30
|
-
body: 'Implement feature',
|
|
31
|
-
labels: [],
|
|
32
|
-
state: 'open',
|
|
33
|
-
url: '',
|
|
34
|
-
};
|
|
35
|
-
const result = buildPrompt({
|
|
36
|
-
issueNumber: 42,
|
|
37
|
-
issueData,
|
|
38
|
-
branchName: 'issue-42',
|
|
39
|
-
taskDescription: null,
|
|
40
|
-
tddEnabled: true,
|
|
41
|
-
});
|
|
42
|
-
expect(result).toContain('TDD');
|
|
43
|
-
expect(result).toContain('failing test');
|
|
44
|
-
});
|
|
45
|
-
});
|
|
46
|
-
describe('with issue number only', () => {
|
|
47
|
-
it('should build simple prompt with issue number', () => {
|
|
48
|
-
const result = buildPrompt({
|
|
49
|
-
issueNumber: 42,
|
|
50
|
-
issueData: null,
|
|
51
|
-
branchName: 'issue-42',
|
|
52
|
-
taskDescription: null,
|
|
53
|
-
tddEnabled: false,
|
|
54
|
-
});
|
|
55
|
-
expect(result).toContain('#42');
|
|
56
|
-
expect(result).toContain('Implement');
|
|
57
|
-
});
|
|
58
|
-
});
|
|
59
|
-
describe('with task description', () => {
|
|
60
|
-
it('should build prompt from task description', () => {
|
|
61
|
-
const result = buildPrompt({
|
|
62
|
-
issueNumber: null,
|
|
63
|
-
issueData: null,
|
|
64
|
-
branchName: 'task-add-auth',
|
|
65
|
-
taskDescription: 'add user authentication',
|
|
66
|
-
tddEnabled: false,
|
|
67
|
-
});
|
|
68
|
-
expect(result).toContain('add user authentication');
|
|
69
|
-
expect(result).toContain('IMPLEMENT');
|
|
70
|
-
});
|
|
71
|
-
});
|
|
72
|
-
describe('with template', () => {
|
|
73
|
-
it('should apply template prefix and suffix', () => {
|
|
74
|
-
const template = {
|
|
75
|
-
name: 'bugfix',
|
|
76
|
-
description: 'Bug fix template',
|
|
77
|
-
promptPrefix: 'DEBUG MODE:',
|
|
78
|
-
promptSuffix: 'Run tests after fix.',
|
|
79
|
-
};
|
|
80
|
-
const result = buildPrompt({
|
|
81
|
-
issueNumber: 1,
|
|
82
|
-
issueData: null,
|
|
83
|
-
branchName: 'issue-1',
|
|
84
|
-
taskDescription: null,
|
|
85
|
-
tddEnabled: false,
|
|
86
|
-
template,
|
|
87
|
-
});
|
|
88
|
-
expect(result).toMatch(/^DEBUG MODE:/);
|
|
89
|
-
expect(result).toMatch(/Run tests after fix\.$/);
|
|
90
|
-
});
|
|
91
|
-
});
|
|
92
|
-
describe('with custom prompt', () => {
|
|
93
|
-
it('should use custom prompt when provided', () => {
|
|
94
|
-
const result = buildPrompt({
|
|
95
|
-
issueNumber: 42,
|
|
96
|
-
issueData: null,
|
|
97
|
-
branchName: 'issue-42',
|
|
98
|
-
taskDescription: null,
|
|
99
|
-
tddEnabled: false,
|
|
100
|
-
customPrompt: 'Custom instruction here',
|
|
101
|
-
});
|
|
102
|
-
expect(result).toBe('Custom instruction here');
|
|
103
|
-
});
|
|
104
|
-
});
|
|
105
|
-
});
|
|
106
|
-
describe('buildSystemPrompt', () => {
|
|
107
|
-
describe('TDD mode', () => {
|
|
108
|
-
it('should build TDD system prompt with gates', () => {
|
|
109
|
-
const tddConfig = {
|
|
110
|
-
timeout: 7200000, // 2h
|
|
111
|
-
idleTimeout: 600000, // 10m
|
|
112
|
-
maxIterations: 10,
|
|
113
|
-
maxRetries: 3,
|
|
114
|
-
gates: [
|
|
115
|
-
{ name: 'test', command: 'pnpm test', required: true },
|
|
116
|
-
{ name: 'type', command: 'tsc --noEmit', required: true },
|
|
117
|
-
],
|
|
118
|
-
};
|
|
119
|
-
const result = buildSystemPrompt({
|
|
120
|
-
tddEnabled: true,
|
|
121
|
-
tddConfig,
|
|
122
|
-
});
|
|
123
|
-
expect(result).toContain('TDD');
|
|
124
|
-
expect(result).toContain('RED Phase');
|
|
125
|
-
expect(result).toContain('GREEN Phase');
|
|
126
|
-
expect(result).toContain('REFACTOR');
|
|
127
|
-
expect(result).toContain('pnpm test');
|
|
128
|
-
expect(result).toContain('tsc --noEmit');
|
|
129
|
-
});
|
|
130
|
-
});
|
|
131
|
-
describe('review skill', () => {
|
|
132
|
-
it('should build review system prompt', () => {
|
|
133
|
-
const result = buildSystemPrompt({
|
|
134
|
-
tddEnabled: false,
|
|
135
|
-
skill: 'review',
|
|
136
|
-
});
|
|
137
|
-
expect(result).toContain('Review');
|
|
138
|
-
expect(result).toContain('security');
|
|
139
|
-
});
|
|
140
|
-
});
|
|
141
|
-
describe('docs skill', () => {
|
|
142
|
-
it('should build docs system prompt', () => {
|
|
143
|
-
const result = buildSystemPrompt({
|
|
144
|
-
tddEnabled: false,
|
|
145
|
-
skill: 'docs',
|
|
146
|
-
});
|
|
147
|
-
expect(result).toContain('documentation');
|
|
148
|
-
expect(result).toContain('README');
|
|
149
|
-
});
|
|
150
|
-
});
|
|
151
|
-
describe('template system prompt', () => {
|
|
152
|
-
it('should use template system prompt when provided', () => {
|
|
153
|
-
const template = {
|
|
154
|
-
name: 'custom',
|
|
155
|
-
description: 'Custom template',
|
|
156
|
-
systemPrompt: 'Custom system instructions',
|
|
157
|
-
};
|
|
158
|
-
const result = buildSystemPrompt({
|
|
159
|
-
tddEnabled: false,
|
|
160
|
-
template,
|
|
161
|
-
});
|
|
162
|
-
expect(result).toBe('Custom system instructions');
|
|
163
|
-
});
|
|
164
|
-
});
|
|
165
|
-
});
|
|
166
|
-
describe('formatDuration', () => {
|
|
167
|
-
it('should format seconds', () => {
|
|
168
|
-
expect(formatDuration(5000)).toBe('5s');
|
|
169
|
-
expect(formatDuration(45000)).toBe('45s');
|
|
170
|
-
});
|
|
171
|
-
it('should format minutes and seconds', () => {
|
|
172
|
-
expect(formatDuration(60000)).toBe('1m 0s');
|
|
173
|
-
expect(formatDuration(90000)).toBe('1m 30s');
|
|
174
|
-
expect(formatDuration(125000)).toBe('2m 5s');
|
|
175
|
-
});
|
|
176
|
-
it('should format hours and minutes', () => {
|
|
177
|
-
expect(formatDuration(3600000)).toBe('1h 0m');
|
|
178
|
-
expect(formatDuration(5400000)).toBe('1h 30m');
|
|
179
|
-
expect(formatDuration(7320000)).toBe('2h 2m');
|
|
180
|
-
});
|
|
181
|
-
});
|
|
182
|
-
//# sourceMappingURL=buildPrompt.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"buildPrompt.test.js","sourceRoot":"","sources":["../../../src/commands/start/buildPrompt.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlF,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;QAC/B,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,SAAS,GAAU;gBACvB,MAAM,EAAE,EAAE;gBACV,KAAK,EAAE,eAAe;gBACtB,IAAI,EAAE,gCAAgC;gBACtC,MAAM,EAAE,CAAC,aAAa,CAAC;gBACvB,KAAK,EAAE,MAAM;gBACb,GAAG,EAAE,yCAAyC;aAC/C,CAAC;YAEF,MAAM,MAAM,GAAG,WAAW,CAAC;gBACzB,WAAW,EAAE,EAAE;gBACf,SAAS;gBACT,UAAU,EAAE,wBAAwB;gBACpC,eAAe,EAAE,IAAI;gBACrB,UAAU,EAAE,KAAK;aAClB,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YACtC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;YAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,gCAAgC,CAAC,CAAC;YAC3D,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,SAAS,GAAU;gBACvB,MAAM,EAAE,EAAE;gBACV,KAAK,EAAE,eAAe;gBACtB,IAAI,EAAE,mBAAmB;gBACzB,MAAM,EAAE,EAAE;gBACV,KAAK,EAAE,MAAM;gBACb,GAAG,EAAE,EAAE;aACR,CAAC;YAEF,MAAM,MAAM,GAAG,WAAW,CAAC;gBACzB,WAAW,EAAE,EAAE;gBACf,SAAS;gBACT,UAAU,EAAE,UAAU;gBACtB,eAAe,EAAE,IAAI;gBACrB,UAAU,EAAE,IAAI;aACjB,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAChC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACtC,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACtD,MAAM,MAAM,GAAG,WAAW,CAAC;gBACzB,WAAW,EAAE,EAAE;gBACf,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,UAAU;gBACtB,eAAe,EAAE,IAAI;gBACrB,UAAU,EAAE,KAAK;aAClB,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAChC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACrC,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACnD,MAAM,MAAM,GAAG,WAAW,CAAC;gBACzB,WAAW,EAAE,IAAI;gBACjB,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,eAAe;gBAC3B,eAAe,EAAE,yBAAyB;gBAC1C,UAAU,EAAE,KAAK;aAClB,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;YACpD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,QAAQ,GAAoB;gBAChC,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,kBAAkB;gBAC/B,YAAY,EAAE,aAAa;gBAC3B,YAAY,EAAE,sBAAsB;aACrC,CAAC;YAEF,MAAM,MAAM,GAAG,WAAW,CAAC;gBACzB,WAAW,EAAE,CAAC;gBACd,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,SAAS;gBACrB,eAAe,EAAE,IAAI;gBACrB,UAAU,EAAE,KAAK;gBACjB,QAAQ;aACT,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YACvC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,MAAM,GAAG,WAAW,CAAC;gBACzB,WAAW,EAAE,EAAE;gBACf,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,UAAU;gBACtB,eAAe,EAAE,IAAI;gBACrB,UAAU,EAAE,KAAK;gBACjB,YAAY,EAAE,yBAAyB;aACxC,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;QACxB,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACnD,MAAM,SAAS,GAAc;gBAC3B,OAAO,EAAE,OAAO,EAAE,KAAK;gBACvB,WAAW,EAAE,MAAM,EAAE,MAAM;gBAC3B,aAAa,EAAE,EAAE;gBACjB,UAAU,EAAE,CAAC;gBACb,KAAK,EAAE;oBACL,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE;oBACtD,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE;iBAC1D;aACF,CAAC;YAEF,MAAM,MAAM,GAAG,iBAAiB,CAAC;gBAC/B,UAAU,EAAE,IAAI;gBAChB,SAAS;aACV,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAChC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YACtC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;YACxC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YACrC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YACtC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,MAAM,MAAM,GAAG,iBAAiB,CAAC;gBAC/B,UAAU,EAAE,KAAK;gBACjB,KAAK,EAAE,QAAQ;aAChB,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YACzC,MAAM,MAAM,GAAG,iBAAiB,CAAC;gBAC/B,UAAU,EAAE,KAAK;gBACjB,KAAK,EAAE,MAAM;aACd,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;YAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACtC,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;YACzD,MAAM,QAAQ,GAAoB;gBAChC,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,iBAAiB;gBAC9B,YAAY,EAAE,4BAA4B;aAC3C,CAAC;YAEF,MAAM,MAAM,GAAG,iBAAiB,CAAC;gBAC/B,UAAU,EAAE,KAAK;gBACjB,QAAQ;aACT,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;QAC/B,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7C,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createWorktree.test.d.ts","sourceRoot":"","sources":["../../../src/commands/start/createWorktree.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
2
|
-
import { createOrFindWorktree } from './createWorktree.js';
|
|
3
|
-
import { GitWorktreeAdapter } from '@claudetree/core';
|
|
4
|
-
// Mock GitWorktreeAdapter
|
|
5
|
-
vi.mock('@claudetree/core', async () => {
|
|
6
|
-
const actual = await vi.importActual('@claudetree/core');
|
|
7
|
-
return {
|
|
8
|
-
...actual,
|
|
9
|
-
GitWorktreeAdapter: vi.fn().mockImplementation(() => ({
|
|
10
|
-
list: vi.fn().mockResolvedValue([
|
|
11
|
-
{ path: '/worktrees/existing-branch', branch: 'existing-branch' },
|
|
12
|
-
]),
|
|
13
|
-
create: vi.fn().mockImplementation(async (opts) => ({
|
|
14
|
-
id: 'mock-uuid-123',
|
|
15
|
-
path: opts.path,
|
|
16
|
-
branch: opts.branch,
|
|
17
|
-
})),
|
|
18
|
-
})),
|
|
19
|
-
};
|
|
20
|
-
});
|
|
21
|
-
describe('createOrFindWorktree', () => {
|
|
22
|
-
beforeEach(() => {
|
|
23
|
-
vi.clearAllMocks();
|
|
24
|
-
});
|
|
25
|
-
describe('existing worktree', () => {
|
|
26
|
-
it('should return existing worktree when branch already exists', async () => {
|
|
27
|
-
const result = await createOrFindWorktree({
|
|
28
|
-
cwd: '/project',
|
|
29
|
-
worktreeDir: '.worktrees',
|
|
30
|
-
branchName: 'existing-branch',
|
|
31
|
-
});
|
|
32
|
-
expect(result.isExisting).toBe(true);
|
|
33
|
-
expect(result.worktree.branch).toBe('existing-branch');
|
|
34
|
-
expect(result.worktree.path).toBe('/worktrees/existing-branch');
|
|
35
|
-
});
|
|
36
|
-
it('should match by path ending with branch name', async () => {
|
|
37
|
-
const result = await createOrFindWorktree({
|
|
38
|
-
cwd: '/project',
|
|
39
|
-
worktreeDir: '.worktrees',
|
|
40
|
-
branchName: 'existing-branch',
|
|
41
|
-
});
|
|
42
|
-
expect(result.isExisting).toBe(true);
|
|
43
|
-
});
|
|
44
|
-
});
|
|
45
|
-
describe('new worktree', () => {
|
|
46
|
-
it('should create new worktree when branch does not exist', async () => {
|
|
47
|
-
const result = await createOrFindWorktree({
|
|
48
|
-
cwd: '/project',
|
|
49
|
-
worktreeDir: '.worktrees',
|
|
50
|
-
branchName: 'new-branch',
|
|
51
|
-
});
|
|
52
|
-
expect(result.isExisting).toBe(false);
|
|
53
|
-
expect(result.worktree.branch).toBe('new-branch');
|
|
54
|
-
expect(result.worktree.path).toBe('/project/.worktrees/new-branch');
|
|
55
|
-
});
|
|
56
|
-
it('should pass issueNumber to create', async () => {
|
|
57
|
-
const result = await createOrFindWorktree({
|
|
58
|
-
cwd: '/project',
|
|
59
|
-
worktreeDir: '.worktrees',
|
|
60
|
-
branchName: 'issue-42-feature',
|
|
61
|
-
issueNumber: 42,
|
|
62
|
-
});
|
|
63
|
-
expect(result.isExisting).toBe(false);
|
|
64
|
-
expect(result.worktree.branch).toBe('issue-42-feature');
|
|
65
|
-
});
|
|
66
|
-
});
|
|
67
|
-
describe('error handling', () => {
|
|
68
|
-
it('should throw error when create fails', async () => {
|
|
69
|
-
vi.mocked(GitWorktreeAdapter).mockImplementationOnce(() => ({
|
|
70
|
-
list: vi.fn().mockResolvedValue([]),
|
|
71
|
-
create: vi.fn().mockRejectedValue(new Error('Git error: branch already exists')),
|
|
72
|
-
}));
|
|
73
|
-
await expect(createOrFindWorktree({
|
|
74
|
-
cwd: '/project',
|
|
75
|
-
worktreeDir: '.worktrees',
|
|
76
|
-
branchName: 'conflict-branch',
|
|
77
|
-
})).rejects.toThrow('Git error');
|
|
78
|
-
});
|
|
79
|
-
});
|
|
80
|
-
});
|
|
81
|
-
//# sourceMappingURL=createWorktree.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createWorktree.test.js","sourceRoot":"","sources":["../../../src/commands/start/createWorktree.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parseIssueInput.test.d.ts","sourceRoot":"","sources":["../../../src/commands/start/parseIssueInput.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
2
|
-
import { parseIssueInput } from './parseIssueInput.js';
|
|
3
|
-
import { GitHubAdapter } from '@claudetree/core';
|
|
4
|
-
// Mock GitHubAdapter
|
|
5
|
-
vi.mock('@claudetree/core', async () => {
|
|
6
|
-
const actual = await vi.importActual('@claudetree/core');
|
|
7
|
-
return {
|
|
8
|
-
...actual,
|
|
9
|
-
GitHubAdapter: vi.fn().mockImplementation(() => ({
|
|
10
|
-
parseIssueUrl: vi.fn().mockImplementation((url) => {
|
|
11
|
-
const match = url.match(/github\.com\/([^/]+)\/([^/]+)\/(issues|pull)\/(\d+)/);
|
|
12
|
-
if (!match)
|
|
13
|
-
return null;
|
|
14
|
-
return {
|
|
15
|
-
owner: match[1],
|
|
16
|
-
repo: match[2],
|
|
17
|
-
number: parseInt(match[4], 10),
|
|
18
|
-
};
|
|
19
|
-
}),
|
|
20
|
-
getIssue: vi.fn().mockResolvedValue({
|
|
21
|
-
number: 42,
|
|
22
|
-
title: 'Add feature X',
|
|
23
|
-
body: 'We need to implement feature X',
|
|
24
|
-
labels: ['enhancement'],
|
|
25
|
-
state: 'open',
|
|
26
|
-
url: 'https://github.com/owner/repo/issues/42',
|
|
27
|
-
}),
|
|
28
|
-
generateBranchName: vi.fn().mockImplementation((num, title) => {
|
|
29
|
-
return `issue-${num}-${title.toLowerCase().replace(/\s+/g, '-').slice(0, 30)}`;
|
|
30
|
-
}),
|
|
31
|
-
})),
|
|
32
|
-
};
|
|
33
|
-
});
|
|
34
|
-
describe('parseIssueInput', () => {
|
|
35
|
-
beforeEach(() => {
|
|
36
|
-
vi.clearAllMocks();
|
|
37
|
-
});
|
|
38
|
-
describe('GitHub URL input', () => {
|
|
39
|
-
it('should parse GitHub issue URL and fetch issue data', async () => {
|
|
40
|
-
const result = await parseIssueInput('https://github.com/owner/repo/issues/42', { token: 'fake-token' });
|
|
41
|
-
expect(result.issueNumber).toBe(42);
|
|
42
|
-
expect(result.issueData).toBeDefined();
|
|
43
|
-
expect(result.issueData?.title).toBe('Add feature X');
|
|
44
|
-
expect(result.branchName).toMatch(/^issue-42/);
|
|
45
|
-
});
|
|
46
|
-
it('should throw error when token not provided for URL', async () => {
|
|
47
|
-
await expect(parseIssueInput('https://github.com/owner/repo/issues/42', {})).rejects.toThrow('GitHub token required');
|
|
48
|
-
});
|
|
49
|
-
it('should throw error for invalid GitHub URL', async () => {
|
|
50
|
-
await expect(parseIssueInput('https://github.com/invalid-url', { token: 'fake-token' })).rejects.toThrow('Invalid GitHub URL');
|
|
51
|
-
});
|
|
52
|
-
it('should use custom branch name when provided', async () => {
|
|
53
|
-
const result = await parseIssueInput('https://github.com/owner/repo/issues/42', { token: 'fake-token', branch: 'custom-branch' });
|
|
54
|
-
expect(result.branchName).toBe('custom-branch');
|
|
55
|
-
});
|
|
56
|
-
});
|
|
57
|
-
describe('Issue number input', () => {
|
|
58
|
-
it('should parse issue number with GitHub config', async () => {
|
|
59
|
-
const result = await parseIssueInput('42', {
|
|
60
|
-
token: 'fake-token',
|
|
61
|
-
githubConfig: { owner: 'owner', repo: 'repo' },
|
|
62
|
-
});
|
|
63
|
-
expect(result.issueNumber).toBe(42);
|
|
64
|
-
expect(result.issueData).toBeDefined();
|
|
65
|
-
expect(result.branchName).toMatch(/^issue-42/);
|
|
66
|
-
});
|
|
67
|
-
it('should parse issue number without GitHub config (fallback branch)', async () => {
|
|
68
|
-
const result = await parseIssueInput('42', {});
|
|
69
|
-
expect(result.issueNumber).toBe(42);
|
|
70
|
-
expect(result.issueData).toBeNull();
|
|
71
|
-
expect(result.branchName).toBe('issue-42');
|
|
72
|
-
});
|
|
73
|
-
it('should gracefully handle API failure', async () => {
|
|
74
|
-
// Mock getIssue to throw
|
|
75
|
-
const mockGetIssue = vi.fn().mockRejectedValue(new Error('API error'));
|
|
76
|
-
vi.mocked(GitHubAdapter).mockImplementationOnce(() => ({
|
|
77
|
-
parseIssueUrl: vi.fn(),
|
|
78
|
-
getIssue: mockGetIssue,
|
|
79
|
-
generateBranchName: vi.fn(),
|
|
80
|
-
createPR: vi.fn(),
|
|
81
|
-
getDefaultBranch: vi.fn(),
|
|
82
|
-
listIssues: vi.fn(),
|
|
83
|
-
octokit: {},
|
|
84
|
-
}));
|
|
85
|
-
const result = await parseIssueInput('42', {
|
|
86
|
-
token: 'fake-token',
|
|
87
|
-
githubConfig: { owner: 'owner', repo: 'repo' },
|
|
88
|
-
});
|
|
89
|
-
expect(result.issueNumber).toBe(42);
|
|
90
|
-
expect(result.issueData).toBeNull();
|
|
91
|
-
expect(result.branchName).toBe('issue-42');
|
|
92
|
-
});
|
|
93
|
-
});
|
|
94
|
-
describe('Natural language task input', () => {
|
|
95
|
-
it('should parse natural language task as branch name', async () => {
|
|
96
|
-
const result = await parseIssueInput('add user authentication', {});
|
|
97
|
-
expect(result.issueNumber).toBeNull();
|
|
98
|
-
expect(result.issueData).toBeNull();
|
|
99
|
-
expect(result.taskDescription).toBe('add user authentication');
|
|
100
|
-
expect(result.branchName).toBe('task-add-user-authentication');
|
|
101
|
-
});
|
|
102
|
-
it('should sanitize special characters in task name', async () => {
|
|
103
|
-
const result = await parseIssueInput('Fix: bug [critical] #123!', {});
|
|
104
|
-
expect(result.branchName).toBe('task-fix-bug-critical-123');
|
|
105
|
-
});
|
|
106
|
-
it('should handle Korean characters', async () => {
|
|
107
|
-
const result = await parseIssueInput('로그인 기능 추가', {});
|
|
108
|
-
expect(result.taskDescription).toBe('로그인 기능 추가');
|
|
109
|
-
expect(result.branchName).toBe('task-로그인-기능-추가');
|
|
110
|
-
});
|
|
111
|
-
it('should truncate long task names', async () => {
|
|
112
|
-
const longTask = 'this is a very long task description that should be truncated for branch name';
|
|
113
|
-
const result = await parseIssueInput(longTask, {});
|
|
114
|
-
expect(result.branchName.length).toBeLessThanOrEqual(55); // 'task-' + 50 chars
|
|
115
|
-
});
|
|
116
|
-
});
|
|
117
|
-
});
|
|
118
|
-
//# sourceMappingURL=parseIssueInput.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parseIssueInput.test.js","sourceRoot":"","sources":["../../../src/commands/start/parseIssueInput.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"progressTracker.test.d.ts","sourceRoot":"","sources":["../../../src/commands/start/progressTracker.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { parseToolCall, detectProgressStep, updateProgress, } from './progressTracker.js';
|
|
3
|
-
describe('progressTracker', () => {
|
|
4
|
-
describe('parseToolCall', () => {
|
|
5
|
-
it('should parse valid tool call', () => {
|
|
6
|
-
const content = 'Bash: {"command": "npm test"}';
|
|
7
|
-
const result = parseToolCall(content);
|
|
8
|
-
expect(result).not.toBeNull();
|
|
9
|
-
expect(result?.toolName).toBe('Bash');
|
|
10
|
-
expect(result?.parameters).toEqual({ command: 'npm test' });
|
|
11
|
-
});
|
|
12
|
-
it('should handle complex parameters', () => {
|
|
13
|
-
const content = 'Edit: {"file_path": "/test.ts", "old_string": "a", "new_string": "b"}';
|
|
14
|
-
const result = parseToolCall(content);
|
|
15
|
-
expect(result?.toolName).toBe('Edit');
|
|
16
|
-
expect(result?.parameters).toHaveProperty('file_path', '/test.ts');
|
|
17
|
-
});
|
|
18
|
-
it('should return null for invalid format', () => {
|
|
19
|
-
expect(parseToolCall('invalid')).toBeNull();
|
|
20
|
-
expect(parseToolCall('')).toBeNull();
|
|
21
|
-
expect(parseToolCall('NoColon')).toBeNull();
|
|
22
|
-
});
|
|
23
|
-
it('should return null for invalid JSON', () => {
|
|
24
|
-
const content = 'Bash: {not valid json}';
|
|
25
|
-
expect(parseToolCall(content)).toBeNull();
|
|
26
|
-
});
|
|
27
|
-
});
|
|
28
|
-
describe('detectProgressStep', () => {
|
|
29
|
-
it('should detect testing step', () => {
|
|
30
|
-
expect(detectProgressStep('Bash', { command: 'npm test' })).toBe('testing');
|
|
31
|
-
expect(detectProgressStep('Bash', { command: 'vitest run' })).toBe('testing');
|
|
32
|
-
expect(detectProgressStep('Bash', { command: 'jest' })).toBe('testing');
|
|
33
|
-
expect(detectProgressStep('Bash', { command: 'pytest' })).toBe('testing');
|
|
34
|
-
});
|
|
35
|
-
it('should detect committing step', () => {
|
|
36
|
-
expect(detectProgressStep('Bash', { command: 'git commit -m "feat: add"' })).toBe('committing');
|
|
37
|
-
});
|
|
38
|
-
it('should detect creating_pr step', () => {
|
|
39
|
-
expect(detectProgressStep('Bash', { command: 'gh pr create' })).toBe('creating_pr');
|
|
40
|
-
expect(detectProgressStep('Bash', { command: 'git push origin' })).toBe('creating_pr');
|
|
41
|
-
});
|
|
42
|
-
it('should detect implementing step', () => {
|
|
43
|
-
expect(detectProgressStep('Edit', { file_path: '/test.ts' })).toBe('implementing');
|
|
44
|
-
expect(detectProgressStep('Write', { file_path: '/new.ts' })).toBe('implementing');
|
|
45
|
-
});
|
|
46
|
-
it('should detect analyzing step', () => {
|
|
47
|
-
expect(detectProgressStep('Read', { file_path: '/test.ts' })).toBe('analyzing');
|
|
48
|
-
expect(detectProgressStep('Glob', { pattern: '**/*.ts' })).toBe('analyzing');
|
|
49
|
-
expect(detectProgressStep('Grep', { pattern: 'function' })).toBe('analyzing');
|
|
50
|
-
});
|
|
51
|
-
it('should return null for unknown tools', () => {
|
|
52
|
-
expect(detectProgressStep('Unknown', {})).toBeNull();
|
|
53
|
-
expect(detectProgressStep('Bash', { command: 'echo hello' })).toBeNull();
|
|
54
|
-
});
|
|
55
|
-
});
|
|
56
|
-
describe('updateProgress', () => {
|
|
57
|
-
it('should advance to next step', () => {
|
|
58
|
-
const progress = {
|
|
59
|
-
currentStep: 'analyzing',
|
|
60
|
-
completedSteps: [],
|
|
61
|
-
startedAt: new Date(),
|
|
62
|
-
};
|
|
63
|
-
const updated = updateProgress(progress, 'implementing');
|
|
64
|
-
expect(updated.currentStep).toBe('implementing');
|
|
65
|
-
expect(updated.completedSteps).toContain('analyzing');
|
|
66
|
-
});
|
|
67
|
-
it('should not regress to earlier step', () => {
|
|
68
|
-
const progress = {
|
|
69
|
-
currentStep: 'testing',
|
|
70
|
-
completedSteps: ['analyzing', 'implementing'],
|
|
71
|
-
startedAt: new Date(),
|
|
72
|
-
};
|
|
73
|
-
const updated = updateProgress(progress, 'analyzing');
|
|
74
|
-
expect(updated.currentStep).toBe('testing');
|
|
75
|
-
expect(updated.completedSteps).toEqual(['analyzing', 'implementing']);
|
|
76
|
-
});
|
|
77
|
-
it('should mark current step as completed when advancing to later step', () => {
|
|
78
|
-
const progress = {
|
|
79
|
-
currentStep: 'analyzing',
|
|
80
|
-
completedSteps: [],
|
|
81
|
-
startedAt: new Date(),
|
|
82
|
-
};
|
|
83
|
-
const updated = updateProgress(progress, 'testing');
|
|
84
|
-
expect(updated.currentStep).toBe('testing');
|
|
85
|
-
// Only marks current step (analyzing) as completed
|
|
86
|
-
expect(updated.completedSteps).toContain('analyzing');
|
|
87
|
-
});
|
|
88
|
-
it('should preserve other progress properties', () => {
|
|
89
|
-
const startedAt = new Date('2024-01-01');
|
|
90
|
-
const progress = {
|
|
91
|
-
currentStep: 'analyzing',
|
|
92
|
-
completedSteps: [],
|
|
93
|
-
startedAt,
|
|
94
|
-
};
|
|
95
|
-
const updated = updateProgress(progress, 'implementing');
|
|
96
|
-
expect(updated.startedAt).toBe(startedAt);
|
|
97
|
-
});
|
|
98
|
-
});
|
|
99
|
-
});
|
|
100
|
-
//# sourceMappingURL=progressTracker.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"progressTracker.test.js","sourceRoot":"","sources":["../../../src/commands/start/progressTracker.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validationGates.test.d.ts","sourceRoot":"","sources":["../../../src/commands/start/validationGates.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { parseGates } from './validationGates.js';
|
|
3
|
-
describe('validationGates', () => {
|
|
4
|
-
describe('parseGates', () => {
|
|
5
|
-
it('should always include install gate first', () => {
|
|
6
|
-
const gates = parseGates('test');
|
|
7
|
-
expect(gates[0]).toEqual({
|
|
8
|
-
name: 'install',
|
|
9
|
-
command: 'pnpm install --frozen-lockfile',
|
|
10
|
-
required: true,
|
|
11
|
-
});
|
|
12
|
-
});
|
|
13
|
-
it('should parse test gate', () => {
|
|
14
|
-
const gates = parseGates('test');
|
|
15
|
-
const testGate = gates.find((g) => g.name === 'test');
|
|
16
|
-
expect(testGate).toBeDefined();
|
|
17
|
-
expect(testGate?.command).toBe('pnpm test:run');
|
|
18
|
-
expect(testGate?.required).toBe(true);
|
|
19
|
-
});
|
|
20
|
-
it('should use custom test command', () => {
|
|
21
|
-
const gates = parseGates('test', 'npm run test:ci');
|
|
22
|
-
const testGate = gates.find((g) => g.name === 'test');
|
|
23
|
-
expect(testGate?.command).toBe('npm run test:ci');
|
|
24
|
-
});
|
|
25
|
-
it('should parse type gate', () => {
|
|
26
|
-
const gates = parseGates('type');
|
|
27
|
-
const typeGate = gates.find((g) => g.name === 'type');
|
|
28
|
-
expect(typeGate).toBeDefined();
|
|
29
|
-
expect(typeGate?.command).toBe('pnpm -r exec tsc --noEmit');
|
|
30
|
-
expect(typeGate?.required).toBe(true);
|
|
31
|
-
});
|
|
32
|
-
it('should parse lint gate as optional', () => {
|
|
33
|
-
const gates = parseGates('lint');
|
|
34
|
-
const lintGate = gates.find((g) => g.name === 'lint');
|
|
35
|
-
expect(lintGate).toBeDefined();
|
|
36
|
-
expect(lintGate?.command).toBe('pnpm lint');
|
|
37
|
-
expect(lintGate?.required).toBe(false);
|
|
38
|
-
});
|
|
39
|
-
it('should parse build gate as optional', () => {
|
|
40
|
-
const gates = parseGates('build');
|
|
41
|
-
const buildGate = gates.find((g) => g.name === 'build');
|
|
42
|
-
expect(buildGate).toBeDefined();
|
|
43
|
-
expect(buildGate?.command).toBe('pnpm build');
|
|
44
|
-
expect(buildGate?.required).toBe(false);
|
|
45
|
-
});
|
|
46
|
-
it('should parse multiple gates', () => {
|
|
47
|
-
const gates = parseGates('test,type,lint');
|
|
48
|
-
expect(gates).toHaveLength(4); // install + test + type + lint
|
|
49
|
-
expect(gates.map((g) => g.name)).toEqual(['install', 'test', 'type', 'lint']);
|
|
50
|
-
});
|
|
51
|
-
it('should handle whitespace in gate string', () => {
|
|
52
|
-
const gates = parseGates('test , type , lint');
|
|
53
|
-
expect(gates.map((g) => g.name)).toEqual(['install', 'test', 'type', 'lint']);
|
|
54
|
-
});
|
|
55
|
-
it('should ignore unknown gates', () => {
|
|
56
|
-
const gates = parseGates('test,unknown,type');
|
|
57
|
-
expect(gates).toHaveLength(3); // install + test + type
|
|
58
|
-
expect(gates.map((g) => g.name)).toEqual(['install', 'test', 'type']);
|
|
59
|
-
});
|
|
60
|
-
it('should handle case insensitivity', () => {
|
|
61
|
-
const gates = parseGates('TEST,Type,LINT');
|
|
62
|
-
expect(gates.map((g) => g.name)).toEqual(['install', 'test', 'type', 'lint']);
|
|
63
|
-
});
|
|
64
|
-
});
|
|
65
|
-
});
|
|
66
|
-
//# sourceMappingURL=validationGates.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validationGates.test.js","sourceRoot":"","sources":["../../../src/commands/start/validationGates.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"start.test.d.ts","sourceRoot":"","sources":["../../src/commands/start.test.ts"],"names":[],"mappings":""}
|