@kata-sh/cli 0.1.0 → 0.1.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 (199) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +156 -0
  3. package/dist/app-paths.d.ts +4 -0
  4. package/dist/app-paths.js +6 -0
  5. package/dist/cli.d.ts +1 -0
  6. package/dist/cli.js +56 -0
  7. package/dist/loader.d.ts +2 -0
  8. package/dist/loader.js +95 -0
  9. package/dist/resource-loader.d.ts +18 -0
  10. package/dist/resource-loader.js +50 -0
  11. package/dist/wizard.d.ts +15 -0
  12. package/dist/wizard.js +159 -0
  13. package/package.json +50 -21
  14. package/pkg/dist/modes/interactive/theme/dark.json +85 -0
  15. package/pkg/dist/modes/interactive/theme/light.json +84 -0
  16. package/pkg/dist/modes/interactive/theme/theme-schema.json +335 -0
  17. package/pkg/dist/modes/interactive/theme/theme.d.ts +78 -0
  18. package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -0
  19. package/pkg/dist/modes/interactive/theme/theme.js +949 -0
  20. package/pkg/dist/modes/interactive/theme/theme.js.map +1 -0
  21. package/pkg/package.json +8 -0
  22. package/scripts/postinstall.js +45 -0
  23. package/src/resources/AGENTS.md +108 -0
  24. package/src/resources/KATA-WORKFLOW.md +661 -0
  25. package/src/resources/agents/researcher.md +29 -0
  26. package/src/resources/agents/scout.md +56 -0
  27. package/src/resources/agents/worker.md +31 -0
  28. package/src/resources/extensions/ask-user-questions.ts +200 -0
  29. package/src/resources/extensions/bg-shell/index.ts +2758 -0
  30. package/src/resources/extensions/browser-tools/BROWSER-TOOLS-V2-PROPOSAL.md +1277 -0
  31. package/src/resources/extensions/browser-tools/core.js +1057 -0
  32. package/src/resources/extensions/browser-tools/index.ts +4916 -0
  33. package/src/resources/extensions/browser-tools/package.json +20 -0
  34. package/src/resources/extensions/context7/index.ts +428 -0
  35. package/src/resources/extensions/context7/package.json +11 -0
  36. package/src/resources/extensions/get-secrets-from-user.ts +352 -0
  37. package/src/resources/extensions/github/formatters.ts +207 -0
  38. package/src/resources/extensions/github/gh-api.ts +537 -0
  39. package/src/resources/extensions/github/index.ts +778 -0
  40. package/src/resources/extensions/kata/activity-log.ts +88 -0
  41. package/src/resources/extensions/kata/auto.ts +2786 -0
  42. package/src/resources/extensions/kata/commands.ts +355 -0
  43. package/src/resources/extensions/kata/crash-recovery.ts +85 -0
  44. package/src/resources/extensions/kata/dashboard-overlay.ts +516 -0
  45. package/src/resources/extensions/kata/docs/preferences-reference.md +103 -0
  46. package/src/resources/extensions/kata/doctor.ts +683 -0
  47. package/src/resources/extensions/kata/files.ts +730 -0
  48. package/src/resources/extensions/kata/gitignore.ts +165 -0
  49. package/src/resources/extensions/kata/guided-flow.ts +976 -0
  50. package/src/resources/extensions/kata/index.ts +556 -0
  51. package/src/resources/extensions/kata/metrics.ts +397 -0
  52. package/src/resources/extensions/kata/observability-validator.ts +408 -0
  53. package/src/resources/extensions/kata/package.json +11 -0
  54. package/src/resources/extensions/kata/paths.ts +346 -0
  55. package/src/resources/extensions/kata/preferences.ts +695 -0
  56. package/src/resources/extensions/kata/prompt-loader.ts +50 -0
  57. package/src/resources/extensions/kata/prompts/complete-milestone.md +25 -0
  58. package/src/resources/extensions/kata/prompts/complete-slice.md +27 -0
  59. package/src/resources/extensions/kata/prompts/discuss.md +151 -0
  60. package/src/resources/extensions/kata/prompts/doctor-heal.md +29 -0
  61. package/src/resources/extensions/kata/prompts/execute-task.md +64 -0
  62. package/src/resources/extensions/kata/prompts/guided-complete-slice.md +1 -0
  63. package/src/resources/extensions/kata/prompts/guided-discuss-milestone.md +3 -0
  64. package/src/resources/extensions/kata/prompts/guided-discuss-slice.md +59 -0
  65. package/src/resources/extensions/kata/prompts/guided-execute-task.md +1 -0
  66. package/src/resources/extensions/kata/prompts/guided-plan-milestone.md +23 -0
  67. package/src/resources/extensions/kata/prompts/guided-plan-slice.md +1 -0
  68. package/src/resources/extensions/kata/prompts/guided-research-slice.md +11 -0
  69. package/src/resources/extensions/kata/prompts/guided-resume-task.md +1 -0
  70. package/src/resources/extensions/kata/prompts/plan-milestone.md +47 -0
  71. package/src/resources/extensions/kata/prompts/plan-slice.md +63 -0
  72. package/src/resources/extensions/kata/prompts/queue.md +85 -0
  73. package/src/resources/extensions/kata/prompts/reassess-roadmap.md +48 -0
  74. package/src/resources/extensions/kata/prompts/replan-slice.md +39 -0
  75. package/src/resources/extensions/kata/prompts/research-milestone.md +37 -0
  76. package/src/resources/extensions/kata/prompts/research-slice.md +28 -0
  77. package/src/resources/extensions/kata/prompts/run-uat.md +109 -0
  78. package/src/resources/extensions/kata/prompts/system.md +341 -0
  79. package/src/resources/extensions/kata/session-forensics.ts +550 -0
  80. package/src/resources/extensions/kata/skill-discovery.ts +137 -0
  81. package/src/resources/extensions/kata/state.ts +509 -0
  82. package/src/resources/extensions/kata/templates/context.md +76 -0
  83. package/src/resources/extensions/kata/templates/decisions.md +8 -0
  84. package/src/resources/extensions/kata/templates/milestone-summary.md +73 -0
  85. package/src/resources/extensions/kata/templates/plan.md +133 -0
  86. package/src/resources/extensions/kata/templates/preferences.md +15 -0
  87. package/src/resources/extensions/kata/templates/project.md +31 -0
  88. package/src/resources/extensions/kata/templates/reassessment.md +28 -0
  89. package/src/resources/extensions/kata/templates/requirements.md +81 -0
  90. package/src/resources/extensions/kata/templates/research.md +46 -0
  91. package/src/resources/extensions/kata/templates/roadmap.md +118 -0
  92. package/src/resources/extensions/kata/templates/slice-context.md +58 -0
  93. package/src/resources/extensions/kata/templates/slice-summary.md +99 -0
  94. package/src/resources/extensions/kata/templates/state.md +19 -0
  95. package/src/resources/extensions/kata/templates/task-plan.md +52 -0
  96. package/src/resources/extensions/kata/templates/task-summary.md +57 -0
  97. package/src/resources/extensions/kata/templates/uat.md +54 -0
  98. package/src/resources/extensions/kata/tests/activity-log-prune.test.ts +327 -0
  99. package/src/resources/extensions/kata/tests/auto-preflight.test.ts +97 -0
  100. package/src/resources/extensions/kata/tests/auto-supervisor.test.mjs +53 -0
  101. package/src/resources/extensions/kata/tests/complete-milestone.test.ts +317 -0
  102. package/src/resources/extensions/kata/tests/cost-projection.test.ts +160 -0
  103. package/src/resources/extensions/kata/tests/derive-state-deps.test.ts +477 -0
  104. package/src/resources/extensions/kata/tests/derive-state.test.ts +1013 -0
  105. package/src/resources/extensions/kata/tests/doctor.test.ts +718 -0
  106. package/src/resources/extensions/kata/tests/idle-recovery.test.ts +490 -0
  107. package/src/resources/extensions/kata/tests/metrics-io.test.ts +254 -0
  108. package/src/resources/extensions/kata/tests/metrics.test.ts +217 -0
  109. package/src/resources/extensions/kata/tests/must-have-parser.test.ts +309 -0
  110. package/src/resources/extensions/kata/tests/parsers.test.ts +1257 -0
  111. package/src/resources/extensions/kata/tests/plan-milestone.test.ts +185 -0
  112. package/src/resources/extensions/kata/tests/plan-quality-validator.test.ts +386 -0
  113. package/src/resources/extensions/kata/tests/reassess-prompt.test.ts +208 -0
  114. package/src/resources/extensions/kata/tests/replan-slice.test.ts +686 -0
  115. package/src/resources/extensions/kata/tests/requirements.test.ts +151 -0
  116. package/src/resources/extensions/kata/tests/resolve-ts-hooks.mjs +17 -0
  117. package/src/resources/extensions/kata/tests/resolve-ts.mjs +11 -0
  118. package/src/resources/extensions/kata/tests/run-uat.test.ts +383 -0
  119. package/src/resources/extensions/kata/tests/unit-runtime.test.ts +388 -0
  120. package/src/resources/extensions/kata/tests/workspace-index.test.ts +118 -0
  121. package/src/resources/extensions/kata/tests/worktree.test.ts +222 -0
  122. package/src/resources/extensions/kata/types.ts +159 -0
  123. package/src/resources/extensions/kata/unit-runtime.ts +163 -0
  124. package/src/resources/extensions/kata/workspace-index.ts +203 -0
  125. package/src/resources/extensions/kata/worktree.ts +182 -0
  126. package/src/resources/extensions/mac-tools/index.ts +852 -0
  127. package/src/resources/extensions/mac-tools/swift-cli/Package.swift +22 -0
  128. package/src/resources/extensions/mac-tools/swift-cli/Sources/main.swift +1318 -0
  129. package/src/resources/extensions/search-the-web/cache.ts +78 -0
  130. package/src/resources/extensions/search-the-web/format.ts +258 -0
  131. package/src/resources/extensions/search-the-web/http.ts +238 -0
  132. package/src/resources/extensions/search-the-web/index.ts +68 -0
  133. package/src/resources/extensions/search-the-web/tool-fetch-page.ts +519 -0
  134. package/src/resources/extensions/search-the-web/tool-llm-context.ts +404 -0
  135. package/src/resources/extensions/search-the-web/tool-search.ts +503 -0
  136. package/src/resources/extensions/search-the-web/url-utils.ts +91 -0
  137. package/src/resources/extensions/shared/confirm-ui.ts +126 -0
  138. package/src/resources/extensions/shared/interview-ui.ts +822 -0
  139. package/src/resources/extensions/shared/next-action-ui.ts +235 -0
  140. package/src/resources/extensions/shared/progress-widget.ts +282 -0
  141. package/src/resources/extensions/shared/thinking-widget.ts +107 -0
  142. package/src/resources/extensions/shared/ui.ts +400 -0
  143. package/src/resources/extensions/shared/wizard-ui.ts +551 -0
  144. package/src/resources/extensions/slash-commands/audit.ts +92 -0
  145. package/src/resources/extensions/slash-commands/create-extension.ts +375 -0
  146. package/src/resources/extensions/slash-commands/create-slash-command.ts +280 -0
  147. package/src/resources/extensions/slash-commands/index.ts +12 -0
  148. package/src/resources/extensions/slash-commands/kata-run.ts +34 -0
  149. package/src/resources/extensions/subagent/agents.ts +126 -0
  150. package/src/resources/extensions/subagent/index.ts +1293 -0
  151. package/src/resources/skills/debug-like-expert/SKILL.md +231 -0
  152. package/src/resources/skills/debug-like-expert/references/debugging-mindset.md +253 -0
  153. package/src/resources/skills/debug-like-expert/references/hypothesis-testing.md +373 -0
  154. package/src/resources/skills/debug-like-expert/references/investigation-techniques.md +337 -0
  155. package/src/resources/skills/debug-like-expert/references/verification-patterns.md +425 -0
  156. package/src/resources/skills/debug-like-expert/references/when-to-research.md +361 -0
  157. package/src/resources/skills/frontend-design/SKILL.md +45 -0
  158. package/src/resources/skills/swiftui/SKILL.md +208 -0
  159. package/src/resources/skills/swiftui/references/animations.md +921 -0
  160. package/src/resources/skills/swiftui/references/architecture.md +1561 -0
  161. package/src/resources/skills/swiftui/references/layout-system.md +1186 -0
  162. package/src/resources/skills/swiftui/references/navigation.md +1492 -0
  163. package/src/resources/skills/swiftui/references/networking-async.md +214 -0
  164. package/src/resources/skills/swiftui/references/performance.md +1706 -0
  165. package/src/resources/skills/swiftui/references/platform-integration.md +204 -0
  166. package/src/resources/skills/swiftui/references/state-management.md +1443 -0
  167. package/src/resources/skills/swiftui/references/swiftdata.md +297 -0
  168. package/src/resources/skills/swiftui/references/testing-debugging.md +247 -0
  169. package/src/resources/skills/swiftui/references/uikit-appkit-interop.md +218 -0
  170. package/src/resources/skills/swiftui/workflows/add-feature.md +191 -0
  171. package/src/resources/skills/swiftui/workflows/build-new-app.md +311 -0
  172. package/src/resources/skills/swiftui/workflows/debug-swiftui.md +192 -0
  173. package/src/resources/skills/swiftui/workflows/optimize-performance.md +197 -0
  174. package/src/resources/skills/swiftui/workflows/ship-app.md +203 -0
  175. package/src/resources/skills/swiftui/workflows/write-tests.md +235 -0
  176. package/dist/commands/task.d.ts +0 -9
  177. package/dist/commands/task.d.ts.map +0 -1
  178. package/dist/commands/task.js +0 -129
  179. package/dist/commands/task.js.map +0 -1
  180. package/dist/commands/task.test.d.ts +0 -2
  181. package/dist/commands/task.test.d.ts.map +0 -1
  182. package/dist/commands/task.test.js +0 -169
  183. package/dist/commands/task.test.js.map +0 -1
  184. package/dist/e2e/task-e2e.test.d.ts +0 -2
  185. package/dist/e2e/task-e2e.test.d.ts.map +0 -1
  186. package/dist/e2e/task-e2e.test.js +0 -173
  187. package/dist/e2e/task-e2e.test.js.map +0 -1
  188. package/dist/index.d.ts +0 -3
  189. package/dist/index.d.ts.map +0 -1
  190. package/dist/index.js +0 -93
  191. package/dist/index.js.map +0 -1
  192. package/dist/slug.d.ts +0 -2
  193. package/dist/slug.d.ts.map +0 -1
  194. package/dist/slug.js +0 -12
  195. package/dist/slug.js.map +0 -1
  196. package/dist/slug.test.d.ts +0 -2
  197. package/dist/slug.test.d.ts.map +0 -1
  198. package/dist/slug.test.js +0 -32
  199. package/dist/slug.test.js.map +0 -1
@@ -0,0 +1,235 @@
1
+ <required_reading>
2
+ **Read these reference files NOW before starting:**
3
+ 1. `../macos-apps/references/cli-workflow.md` - Test commands from CLI
4
+ 2. `../macos-apps/references/testing-tdd.md` - TDD patterns, avoiding @main hangs
5
+ 3. `references/testing-debugging.md` - SwiftUI-specific testing and debugging
6
+ </required_reading>
7
+
8
+ <process>
9
+ ## Step 1: Identify Testing Scope
10
+
11
+ **Test business logic in view models, not views:**
12
+ ```swift
13
+ // Testable view model
14
+ @Observable
15
+ final class LoginViewModel {
16
+ var email = ""
17
+ var password = ""
18
+ var isLoading = false
19
+
20
+ var isValidInput: Bool {
21
+ !email.isEmpty && password.count >= 8
22
+ }
23
+ }
24
+
25
+ // View is just presentation
26
+ struct LoginView: View {
27
+ let viewModel: LoginViewModel
28
+ var body: some View {
29
+ Form {
30
+ TextField("Email", text: $viewModel.email)
31
+ Button("Login") { }
32
+ .disabled(!viewModel.isValidInput)
33
+ }
34
+ }
35
+ }
36
+ ```
37
+
38
+ ## Step 2: Write Unit Tests
39
+
40
+ **Using Swift Testing (@Test):**
41
+ ```swift
42
+ import Testing
43
+ @testable import MyApp
44
+
45
+ @Test("Email validation")
46
+ func emailValidation() {
47
+ let viewModel = LoginViewModel()
48
+
49
+ viewModel.email = ""
50
+ viewModel.password = "password123"
51
+ #expect(!viewModel.isValidInput)
52
+
53
+ viewModel.email = "user@example.com"
54
+ #expect(viewModel.isValidInput)
55
+ }
56
+
57
+ @Test("Async loading")
58
+ func asyncLoading() async {
59
+ let mockService = MockService()
60
+ let viewModel = TaskViewModel(service: mockService)
61
+
62
+ await viewModel.load()
63
+
64
+ #expect(!viewModel.tasks.isEmpty)
65
+ }
66
+ ```
67
+
68
+ ## Step 3: Add Accessibility Identifiers
69
+
70
+ ```swift
71
+ TextField("Email", text: $email)
72
+ .accessibilityIdentifier("emailField")
73
+
74
+ SecureField("Password", text: $password)
75
+ .accessibilityIdentifier("passwordField")
76
+
77
+ Button("Login") { }
78
+ .accessibilityIdentifier("loginButton")
79
+ ```
80
+
81
+ ## Step 4: Write UI Tests
82
+
83
+ ```swift
84
+ import XCTest
85
+
86
+ final class LoginUITests: XCTestCase {
87
+ var app: XCUIApplication!
88
+
89
+ override func setUp() {
90
+ continueAfterFailure = false
91
+ app = XCUIApplication()
92
+ app.launch()
93
+ }
94
+
95
+ func testLoginFlow() {
96
+ let emailField = app.textFields["emailField"]
97
+ let passwordField = app.secureTextFields["passwordField"]
98
+ let loginButton = app.buttons["loginButton"]
99
+
100
+ XCTAssertTrue(emailField.waitForExistence(timeout: 5))
101
+
102
+ emailField.tap()
103
+ emailField.typeText("user@example.com")
104
+
105
+ passwordField.tap()
106
+ passwordField.typeText("password123")
107
+
108
+ XCTAssertTrue(loginButton.isEnabled)
109
+ loginButton.tap()
110
+
111
+ let welcomeText = app.staticTexts["welcomeMessage"]
112
+ XCTAssertTrue(welcomeText.waitForExistence(timeout: 5))
113
+ }
114
+ }
115
+ ```
116
+
117
+ ## Step 5: Create Previews for Visual Testing
118
+
119
+ ```swift
120
+ #Preview("Empty") { LoginView(viewModel: LoginViewModel()) }
121
+
122
+ #Preview("Filled") {
123
+ let viewModel = LoginViewModel()
124
+ viewModel.email = "user@example.com"
125
+ viewModel.password = "password123"
126
+ return LoginView(viewModel: viewModel)
127
+ }
128
+
129
+ #Preview("Error") {
130
+ let viewModel = LoginViewModel()
131
+ viewModel.errorMessage = "Invalid credentials"
132
+ return LoginView(viewModel: viewModel)
133
+ }
134
+
135
+ #Preview("Dark Mode") {
136
+ LoginView(viewModel: LoginViewModel())
137
+ .preferredColorScheme(.dark)
138
+ }
139
+ ```
140
+
141
+ ## Step 6: Run Tests from CLI
142
+
143
+ ```bash
144
+ # Run all tests with parsed output
145
+ xcodebuild test -scheme AppName -destination 'platform=iOS Simulator,name=iPhone 15 Pro' 2>&1 | xcsift
146
+
147
+ # Run only unit tests
148
+ xcodebuild test -scheme AppName -only-testing:AppNameTests 2>&1 | xcsift
149
+
150
+ # Run only UI tests
151
+ xcodebuild test -scheme AppName -only-testing:AppNameUITests 2>&1 | xcsift
152
+
153
+ # Run specific test class
154
+ xcodebuild test -scheme AppName -only-testing:AppNameTests/LoginViewModelTests 2>&1 | xcsift
155
+
156
+ # Run specific test method
157
+ xcodebuild test -scheme AppName -only-testing:AppNameTests/LoginViewModelTests/testEmailValidation 2>&1 | xcsift
158
+
159
+ # Generate test coverage
160
+ xcodebuild test -scheme AppName -enableCodeCoverage YES -resultBundlePath TestResults.xcresult 2>&1 | xcsift
161
+ xcrun xccov view --report TestResults.xcresult
162
+ ```
163
+
164
+ **If tests hang:** The test target likely depends on the app target with `@main`. Extract testable code to a Core framework target. See `../macos-apps/references/testing-tdd.md`.
165
+
166
+ Report to user:
167
+ - "Tests: X pass, Y fail"
168
+ - "Coverage: Z% of lines"
169
+ - If failures: "Failed tests: [list]. Investigating..."
170
+ </process>
171
+
172
+ <anti_patterns>
173
+ ## Avoid These Mistakes
174
+
175
+ **Testing view bodies:**
176
+ ```swift
177
+ // Wrong: can't test views directly
178
+ func testView() {
179
+ let view = LoginView()
180
+ // Can't inspect SwiftUI view
181
+ }
182
+
183
+ // Right: test view model
184
+ @Test func emailInput() {
185
+ let viewModel = LoginViewModel()
186
+ viewModel.email = "test@example.com"
187
+ #expect(viewModel.email == "test@example.com")
188
+ }
189
+ ```
190
+
191
+ **Missing accessibility identifiers:**
192
+ ```swift
193
+ // Wrong: using text
194
+ let button = app.buttons["Login"]
195
+
196
+ // Right: stable identifier
197
+ let button = app.buttons["loginButton"]
198
+ ```
199
+
200
+ **No dependency injection:**
201
+ ```swift
202
+ // Wrong: can't mock
203
+ @Observable
204
+ class ViewModel {
205
+ private let service = RealService()
206
+ }
207
+
208
+ // Right: injectable
209
+ @Observable
210
+ class ViewModel {
211
+ private let service: ServiceProtocol
212
+ init(service: ServiceProtocol) {
213
+ self.service = service
214
+ }
215
+ }
216
+ ```
217
+
218
+ **No edge case testing:**
219
+ ```swift
220
+ // Test empty, invalid, error states
221
+ @Test func emptyEmail() { }
222
+ @Test func shortPassword() { }
223
+ @Test func networkError() { }
224
+ ```
225
+ </anti_patterns>
226
+
227
+ <success_criteria>
228
+ This workflow is complete when:
229
+ - [ ] Unit tests verify view model business logic
230
+ - [ ] UI tests verify user flows using accessibility identifiers
231
+ - [ ] All tests pass: `xcodebuild test -scheme YourApp`
232
+ - [ ] Edge cases and error states have coverage
233
+ - [ ] Dependencies use protocols for testability
234
+ - [ ] Previews exist for major UI states
235
+ </success_criteria>
@@ -1,9 +0,0 @@
1
- import { type TaskResult } from "@kata-sh/core";
2
- export interface TaskCommandOptions {
3
- prompt: string;
4
- dryRun: boolean;
5
- branch?: string;
6
- noPr?: boolean;
7
- }
8
- export declare function runTask(options: TaskCommandOptions): Promise<TaskResult>;
9
- //# sourceMappingURL=task.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../src/commands/task.ts"],"names":[],"mappings":"AAAA,OAAO,EAKN,KAAK,UAAU,EAEf,MAAM,eAAe,CAAC;AAGvB,MAAM,WAAW,kBAAkB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CACf;AAcD,wBAAsB,OAAO,CAC5B,OAAO,EAAE,kBAAkB,GACzB,OAAO,CAAC,UAAU,CAAC,CAoIrB"}
@@ -1,129 +0,0 @@
1
- import { AgentRunner, GitHubService, NotAGitRepoError, WorktreeManager, } from "@kata-sh/core";
2
- import { generateSlug } from "../slug.js";
3
- function extractTextFromMessage(message) {
4
- if (message.type !== "assistant")
5
- return undefined;
6
- for (const block of message.message.content) {
7
- if (block.type === "text") {
8
- return block.text;
9
- }
10
- }
11
- return undefined;
12
- }
13
- export async function runTask(options) {
14
- const { prompt, dryRun, branch, noPr } = options;
15
- const startTime = Date.now();
16
- const worktreeManager = new WorktreeManager();
17
- const agentRunner = new AgentRunner();
18
- const githubService = new GitHubService();
19
- let repoRoot;
20
- try {
21
- repoRoot = await worktreeManager.getRepoRoot();
22
- }
23
- catch (error) {
24
- if (error instanceof NotAGitRepoError) {
25
- console.error("Error: Not in a git repository.");
26
- process.exitCode = 1;
27
- return {
28
- success: false,
29
- branch: "",
30
- duration: Date.now() - startTime,
31
- error: "Not in a git repository",
32
- };
33
- }
34
- throw error;
35
- }
36
- const branchName = branch ?? generateSlug(prompt);
37
- const worktree = await worktreeManager.create({
38
- branchName,
39
- repoRoot,
40
- });
41
- try {
42
- console.log(`Branch: ${worktree.branch}`);
43
- console.log(`Worktree: ${worktree.path}`);
44
- console.log("");
45
- const result = await agentRunner.run({
46
- prompt,
47
- workingDirectory: worktree.path,
48
- onMessage: (message) => {
49
- const text = extractTextFromMessage(message);
50
- if (text) {
51
- process.stdout.write(text);
52
- }
53
- },
54
- });
55
- if (!result.success) {
56
- console.error(`\nAgent failed: ${result.error}`);
57
- process.exitCode = 1;
58
- return {
59
- success: false,
60
- branch: worktree.branch,
61
- duration: Date.now() - startTime,
62
- error: result.error,
63
- };
64
- }
65
- if (result.filesChanged.length === 0) {
66
- console.log("\nNo changes made.");
67
- return {
68
- success: true,
69
- branch: worktree.branch,
70
- duration: Date.now() - startTime,
71
- };
72
- }
73
- if (dryRun) {
74
- console.log(`\nDry run complete. ${result.filesChanged.length} file(s) changed.`);
75
- return {
76
- success: true,
77
- branch: worktree.branch,
78
- duration: Date.now() - startTime,
79
- };
80
- }
81
- // Push the branch from the worktree directory
82
- await githubService.pushBranch({
83
- repoRoot: worktree.path,
84
- branch: worktree.branch,
85
- });
86
- console.log(`\nPushed branch: ${worktree.branch}`);
87
- if (noPr) {
88
- return {
89
- success: true,
90
- branch: worktree.branch,
91
- duration: Date.now() - startTime,
92
- };
93
- }
94
- let remoteInfo;
95
- try {
96
- remoteInfo = await githubService.getRemoteInfo(repoRoot);
97
- }
98
- catch {
99
- console.log("No GitHub remote found. Skipping PR creation.");
100
- return {
101
- success: true,
102
- branch: worktree.branch,
103
- duration: Date.now() - startTime,
104
- };
105
- }
106
- const { title, body } = githubService.generatePRDescription(prompt, result.filesChanged);
107
- const pr = await githubService.createPullRequest({
108
- owner: remoteInfo.owner,
109
- repo: remoteInfo.repo,
110
- title,
111
- body,
112
- head: worktree.branch,
113
- base: worktree.baseBranch,
114
- });
115
- console.log(`PR created: ${pr.url}`);
116
- return {
117
- success: true,
118
- branch: worktree.branch,
119
- pullRequest: pr,
120
- duration: Date.now() - startTime,
121
- };
122
- }
123
- finally {
124
- await worktreeManager.remove(worktree.path).catch((err) => {
125
- console.error(`Warning: Failed to clean up worktree: ${err}`);
126
- });
127
- }
128
- }
129
- //# sourceMappingURL=task.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"task.js","sourceRoot":"","sources":["../../src/commands/task.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=task.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"task.test.d.ts","sourceRoot":"","sources":["../../src/commands/task.test.ts"],"names":[],"mappings":""}
@@ -1,169 +0,0 @@
1
- import { beforeEach, describe, expect, it, vi } from "vitest";
2
- vi.mock("@kata-sh/core", () => ({
3
- WorktreeManager: vi.fn(),
4
- AgentRunner: vi.fn(),
5
- GitHubService: vi.fn(),
6
- NotAGitRepoError: class NotAGitRepoError extends Error {
7
- name = "NotAGitRepoError";
8
- },
9
- }));
10
- import { AgentRunner, GitHubService, NotAGitRepoError, WorktreeManager, } from "@kata-sh/core";
11
- import { runTask } from "./task.js";
12
- const MockWorktreeManager = vi.mocked(WorktreeManager);
13
- const MockAgentRunner = vi.mocked(AgentRunner);
14
- const MockGitHubService = vi.mocked(GitHubService);
15
- function setupMocks(overrides) {
16
- const worktreeInstance = {
17
- getRepoRoot: overrides?.getRepoRoot ?? vi.fn().mockResolvedValue("/repo"),
18
- create: overrides?.create ??
19
- vi.fn().mockResolvedValue({
20
- path: "/repo/.worktrees/kata/fix-bug",
21
- branch: "kata/fix-bug",
22
- baseBranch: "main",
23
- repoRoot: "/repo",
24
- }),
25
- remove: overrides?.remove ?? vi.fn().mockResolvedValue(undefined),
26
- list: vi.fn(),
27
- exists: vi.fn(),
28
- };
29
- const agentInstance = {
30
- run: overrides?.run ??
31
- vi.fn().mockResolvedValue({
32
- success: true,
33
- filesChanged: ["src/index.ts"],
34
- }),
35
- };
36
- const githubInstance = {
37
- pushBranch: overrides?.pushBranch ?? vi.fn().mockResolvedValue(undefined),
38
- getRemoteInfo: overrides?.getRemoteInfo ??
39
- vi.fn().mockResolvedValue({
40
- owner: "user",
41
- repo: "project",
42
- remote: "origin",
43
- }),
44
- createPullRequest: overrides?.createPullRequest ??
45
- vi.fn().mockResolvedValue({
46
- number: 42,
47
- url: "https://github.com/user/project/pull/42",
48
- title: "Fix bug",
49
- body: "Fix bug\n\n## Files Changed\n- src/index.ts",
50
- branch: "kata/fix-bug",
51
- baseBranch: "main",
52
- }),
53
- generatePRDescription: overrides?.generatePRDescription ??
54
- vi.fn().mockReturnValue({
55
- title: "Fix bug",
56
- body: "Fix bug\n\n## Files Changed\n- src/index.ts",
57
- }),
58
- resolveToken: vi.fn(),
59
- };
60
- MockWorktreeManager.mockImplementation(() => worktreeInstance);
61
- MockAgentRunner.mockImplementation(() => agentInstance);
62
- MockGitHubService.mockImplementation(() => githubInstance);
63
- return { worktreeInstance, agentInstance, githubInstance };
64
- }
65
- describe("runTask", () => {
66
- beforeEach(() => {
67
- vi.clearAllMocks();
68
- process.exitCode = undefined;
69
- });
70
- it("runs the happy path: worktree → agent → push → PR → cleanup", async () => {
71
- const { worktreeInstance, agentInstance, githubInstance } = setupMocks();
72
- const result = await runTask({ prompt: "Fix bug", dryRun: false });
73
- expect(worktreeInstance.getRepoRoot).toHaveBeenCalled();
74
- expect(worktreeInstance.create).toHaveBeenCalledWith({
75
- branchName: "fix-bug",
76
- repoRoot: "/repo",
77
- });
78
- expect(agentInstance.run).toHaveBeenCalledWith(expect.objectContaining({
79
- prompt: "Fix bug",
80
- workingDirectory: "/repo/.worktrees/kata/fix-bug",
81
- }));
82
- expect(githubInstance.pushBranch).toHaveBeenCalled();
83
- expect(githubInstance.createPullRequest).toHaveBeenCalled();
84
- expect(worktreeInstance.remove).toHaveBeenCalledWith("/repo/.worktrees/kata/fix-bug");
85
- expect(result.success).toBe(true);
86
- expect(result.pullRequest).toBeDefined();
87
- expect(result.pullRequest?.url).toBe("https://github.com/user/project/pull/42");
88
- });
89
- it("skips push and PR on dry-run", async () => {
90
- const { githubInstance, worktreeInstance } = setupMocks();
91
- const result = await runTask({ prompt: "Fix bug", dryRun: true });
92
- expect(githubInstance.pushBranch).not.toHaveBeenCalled();
93
- expect(githubInstance.createPullRequest).not.toHaveBeenCalled();
94
- expect(worktreeInstance.remove).toHaveBeenCalled();
95
- expect(result.success).toBe(true);
96
- expect(result.pullRequest).toBeUndefined();
97
- });
98
- it("cleans up worktree on agent failure", async () => {
99
- const { worktreeInstance } = setupMocks({
100
- run: vi.fn().mockResolvedValue({
101
- success: false,
102
- filesChanged: [],
103
- error: "Agent crashed",
104
- }),
105
- });
106
- const result = await runTask({ prompt: "Fix bug", dryRun: false });
107
- expect(result.success).toBe(false);
108
- expect(result.error).toBe("Agent crashed");
109
- expect(worktreeInstance.remove).toHaveBeenCalled();
110
- expect(process.exitCode).toBe(1);
111
- });
112
- it("skips PR when no remote is found", async () => {
113
- const { githubInstance, worktreeInstance } = setupMocks({
114
- getRemoteInfo: vi.fn().mockRejectedValue(new Error("No git remote")),
115
- });
116
- const result = await runTask({ prompt: "Fix bug", dryRun: false });
117
- expect(githubInstance.pushBranch).toHaveBeenCalled();
118
- expect(githubInstance.createPullRequest).not.toHaveBeenCalled();
119
- expect(worktreeInstance.remove).toHaveBeenCalled();
120
- expect(result.success).toBe(true);
121
- expect(result.pullRequest).toBeUndefined();
122
- });
123
- it("uses custom branch name when provided", async () => {
124
- const { worktreeInstance } = setupMocks();
125
- await runTask({
126
- prompt: "Fix bug",
127
- dryRun: false,
128
- branch: "my-custom-branch",
129
- });
130
- expect(worktreeInstance.create).toHaveBeenCalledWith({
131
- branchName: "my-custom-branch",
132
- repoRoot: "/repo",
133
- });
134
- });
135
- it("pushes but skips PR with --no-pr", async () => {
136
- const { githubInstance } = setupMocks();
137
- const result = await runTask({
138
- prompt: "Fix bug",
139
- dryRun: false,
140
- noPr: true,
141
- });
142
- expect(githubInstance.pushBranch).toHaveBeenCalled();
143
- expect(githubInstance.createPullRequest).not.toHaveBeenCalled();
144
- expect(result.success).toBe(true);
145
- });
146
- it("handles not-in-a-git-repo gracefully", async () => {
147
- setupMocks({
148
- getRepoRoot: vi
149
- .fn()
150
- .mockRejectedValue(new NotAGitRepoError("/not-a-repo")),
151
- });
152
- const result = await runTask({ prompt: "Fix bug", dryRun: false });
153
- expect(result.success).toBe(false);
154
- expect(result.error).toBe("Not in a git repository");
155
- expect(process.exitCode).toBe(1);
156
- });
157
- it("handles no changes from agent", async () => {
158
- setupMocks({
159
- run: vi.fn().mockResolvedValue({
160
- success: true,
161
- filesChanged: [],
162
- }),
163
- });
164
- const result = await runTask({ prompt: "Fix bug", dryRun: false });
165
- expect(result.success).toBe(true);
166
- expect(result.pullRequest).toBeUndefined();
167
- });
168
- });
169
- //# sourceMappingURL=task.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"task.test.js","sourceRoot":"","sources":["../../src/commands/task.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=task-e2e.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"task-e2e.test.d.ts","sourceRoot":"","sources":["../../src/e2e/task-e2e.test.ts"],"names":[],"mappings":""}