@claudetree/cli 0.5.1 → 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.
Files changed (111) hide show
  1. package/dist/commands/log.d.ts +3 -0
  2. package/dist/commands/log.d.ts.map +1 -0
  3. package/dist/commands/log.js +116 -0
  4. package/dist/commands/log.js.map +1 -0
  5. package/dist/index.js +2 -0
  6. package/dist/index.js.map +1 -1
  7. package/package.json +4 -4
  8. package/dist/commands/batch.test.d.ts +0 -2
  9. package/dist/commands/batch.test.d.ts.map +0 -1
  10. package/dist/commands/batch.test.js +0 -230
  11. package/dist/commands/batch.test.js.map +0 -1
  12. package/dist/commands/bustercall/issueFilters.test.d.ts +0 -2
  13. package/dist/commands/bustercall/issueFilters.test.d.ts.map +0 -1
  14. package/dist/commands/bustercall/issueFilters.test.js +0 -151
  15. package/dist/commands/bustercall/issueFilters.test.js.map +0 -1
  16. package/dist/commands/bustercall/sessionManager.test.d.ts +0 -2
  17. package/dist/commands/bustercall/sessionManager.test.d.ts.map +0 -1
  18. package/dist/commands/bustercall/sessionManager.test.js +0 -79
  19. package/dist/commands/bustercall/sessionManager.test.js.map +0 -1
  20. package/dist/commands/bustercall/statusDisplay.test.d.ts +0 -2
  21. package/dist/commands/bustercall/statusDisplay.test.d.ts.map +0 -1
  22. package/dist/commands/bustercall/statusDisplay.test.js +0 -111
  23. package/dist/commands/bustercall/statusDisplay.test.js.map +0 -1
  24. package/dist/commands/bustercall.test.d.ts +0 -2
  25. package/dist/commands/bustercall.test.d.ts.map +0 -1
  26. package/dist/commands/bustercall.test.js +0 -258
  27. package/dist/commands/bustercall.test.js.map +0 -1
  28. package/dist/commands/chain/chainDisplay.test.d.ts +0 -2
  29. package/dist/commands/chain/chainDisplay.test.d.ts.map +0 -1
  30. package/dist/commands/chain/chainDisplay.test.js +0 -128
  31. package/dist/commands/chain/chainDisplay.test.js.map +0 -1
  32. package/dist/commands/chain/chainSession.test.d.ts +0 -2
  33. package/dist/commands/chain/chainSession.test.d.ts.map +0 -1
  34. package/dist/commands/chain/chainSession.test.js +0 -93
  35. package/dist/commands/chain/chainSession.test.js.map +0 -1
  36. package/dist/commands/chain.test.d.ts +0 -2
  37. package/dist/commands/chain.test.d.ts.map +0 -1
  38. package/dist/commands/chain.test.js +0 -216
  39. package/dist/commands/chain.test.js.map +0 -1
  40. package/dist/commands/clean.test.d.ts +0 -2
  41. package/dist/commands/clean.test.d.ts.map +0 -1
  42. package/dist/commands/clean.test.js +0 -193
  43. package/dist/commands/clean.test.js.map +0 -1
  44. package/dist/commands/demo.d.ts +0 -3
  45. package/dist/commands/demo.d.ts.map +0 -1
  46. package/dist/commands/demo.js +0 -175
  47. package/dist/commands/demo.js.map +0 -1
  48. package/dist/commands/demo.test.d.ts +0 -2
  49. package/dist/commands/demo.test.d.ts.map +0 -1
  50. package/dist/commands/demo.test.js +0 -34
  51. package/dist/commands/demo.test.js.map +0 -1
  52. package/dist/commands/doctor.test.d.ts +0 -2
  53. package/dist/commands/doctor.test.d.ts.map +0 -1
  54. package/dist/commands/doctor.test.js +0 -324
  55. package/dist/commands/doctor.test.js.map +0 -1
  56. package/dist/commands/init.test.d.ts +0 -2
  57. package/dist/commands/init.test.d.ts.map +0 -1
  58. package/dist/commands/init.test.js +0 -94
  59. package/dist/commands/init.test.js.map +0 -1
  60. package/dist/commands/list.test.d.ts +0 -2
  61. package/dist/commands/list.test.d.ts.map +0 -1
  62. package/dist/commands/list.test.js +0 -106
  63. package/dist/commands/list.test.js.map +0 -1
  64. package/dist/commands/resume.test.d.ts +0 -2
  65. package/dist/commands/resume.test.d.ts.map +0 -1
  66. package/dist/commands/resume.test.js +0 -362
  67. package/dist/commands/resume.test.js.map +0 -1
  68. package/dist/commands/start/buildPrompt.test.d.ts +0 -2
  69. package/dist/commands/start/buildPrompt.test.d.ts.map +0 -1
  70. package/dist/commands/start/buildPrompt.test.js +0 -182
  71. package/dist/commands/start/buildPrompt.test.js.map +0 -1
  72. package/dist/commands/start/createWorktree.test.d.ts +0 -2
  73. package/dist/commands/start/createWorktree.test.d.ts.map +0 -1
  74. package/dist/commands/start/createWorktree.test.js +0 -81
  75. package/dist/commands/start/createWorktree.test.js.map +0 -1
  76. package/dist/commands/start/parseIssueInput.test.d.ts +0 -2
  77. package/dist/commands/start/parseIssueInput.test.d.ts.map +0 -1
  78. package/dist/commands/start/parseIssueInput.test.js +0 -118
  79. package/dist/commands/start/parseIssueInput.test.js.map +0 -1
  80. package/dist/commands/start/progressTracker.test.d.ts +0 -2
  81. package/dist/commands/start/progressTracker.test.d.ts.map +0 -1
  82. package/dist/commands/start/progressTracker.test.js +0 -100
  83. package/dist/commands/start/progressTracker.test.js.map +0 -1
  84. package/dist/commands/start/validationGates.test.d.ts +0 -2
  85. package/dist/commands/start/validationGates.test.d.ts.map +0 -1
  86. package/dist/commands/start/validationGates.test.js +0 -66
  87. package/dist/commands/start/validationGates.test.js.map +0 -1
  88. package/dist/commands/start.test.d.ts +0 -2
  89. package/dist/commands/start.test.d.ts.map +0 -1
  90. package/dist/commands/start.test.js +0 -260
  91. package/dist/commands/start.test.js.map +0 -1
  92. package/dist/commands/stats.test.d.ts +0 -2
  93. package/dist/commands/stats.test.d.ts.map +0 -1
  94. package/dist/commands/stats.test.js +0 -127
  95. package/dist/commands/stats.test.js.map +0 -1
  96. package/dist/commands/status.test.d.ts +0 -2
  97. package/dist/commands/status.test.d.ts.map +0 -1
  98. package/dist/commands/status.test.js +0 -172
  99. package/dist/commands/status.test.js.map +0 -1
  100. package/dist/commands/stop.test.d.ts +0 -2
  101. package/dist/commands/stop.test.d.ts.map +0 -1
  102. package/dist/commands/stop.test.js +0 -152
  103. package/dist/commands/stop.test.js.map +0 -1
  104. package/dist/commands/tdd.d.ts +0 -3
  105. package/dist/commands/tdd.d.ts.map +0 -1
  106. package/dist/commands/tdd.js +0 -472
  107. package/dist/commands/tdd.js.map +0 -1
  108. package/dist/commands/web.test.d.ts +0 -2
  109. package/dist/commands/web.test.d.ts.map +0 -1
  110. package/dist/commands/web.test.js +0 -133
  111. 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":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=createWorktree.test.d.ts.map
@@ -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,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=parseIssueInput.test.d.ts.map
@@ -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":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,qBAAqB;AACrB,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;IACrC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC;IACzD,OAAO;QACL,GAAG,MAAM;QACT,aAAa,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC;YAC/C,aAAa,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,GAAW,EAAE,EAAE;gBACxD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;gBAC/E,IAAI,CAAC,KAAK;oBAAE,OAAO,IAAI,CAAC;gBACxB,OAAO;oBACL,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;oBACf,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;oBACd,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC;iBAChC,CAAC;YACJ,CAAC,CAAC;YACF,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;gBAClC,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;YACF,kBAAkB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,GAAW,EAAE,KAAa,EAAE,EAAE;gBAC5E,OAAO,SAAS,GAAG,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YACjF,CAAC,CAAC;SACH,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAChC,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;YAClE,MAAM,MAAM,GAAG,MAAM,eAAe,CAClC,yCAAyC,EACzC,EAAE,KAAK,EAAE,YAAY,EAAE,CACxB,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACpC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;YACvC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACtD,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;YAClE,MAAM,MAAM,CACV,eAAe,CAAC,yCAAyC,EAAE,EAAE,CAAC,CAC/D,CAAC,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;YACzD,MAAM,MAAM,CACV,eAAe,CAAC,gCAAgC,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAC3E,CAAC,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YAC3D,MAAM,MAAM,GAAG,MAAM,eAAe,CAClC,yCAAyC,EACzC,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,CACjD,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC5D,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE;gBACzC,KAAK,EAAE,YAAY;gBACnB,YAAY,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE;aAC/C,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACpC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;YACvC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;YACjF,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAE/C,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACpC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAC;YACpC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;YACpD,yBAAyB;YACzB,MAAM,YAAY,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;YACvE,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,sBAAsB,CAAC,GAAG,EAAE,CAAC,CAAC;gBACrD,aAAa,EAAE,EAAE,CAAC,EAAE,EAAE;gBACtB,QAAQ,EAAE,YAAY;gBACtB,kBAAkB,EAAE,EAAE,CAAC,EAAE,EAAE;gBAC3B,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE;gBACjB,gBAAgB,EAAE,EAAE,CAAC,EAAE,EAAE;gBACzB,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE;gBACnB,OAAO,EAAE,EAAE;aACiB,CAAA,CAAC,CAAC;YAEhC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE;gBACzC,KAAK,EAAE,YAAY;gBACnB,YAAY,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE;aAC/C,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACpC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAC;YACpC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;QAC3C,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;YACjE,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAC;YAEpE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,CAAC;YACtC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAC;YACpC,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;YAC/D,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;YAC/D,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAC;YAEtE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;YAC/C,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;YAEtD,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACjD,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;YAC/C,MAAM,QAAQ,GAAG,+EAA+E,CAAC;YACjG,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAEnD,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,CAAC,qBAAqB;QACjF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=progressTracker.test.d.ts.map
@@ -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,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=validationGates.test.d.ts.map
@@ -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,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=start.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"start.test.d.ts","sourceRoot":"","sources":["../../src/commands/start.test.ts"],"names":[],"mappings":""}