@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,214 @@
1
+ <overview>
2
+ SwiftUI networking in 2025 is built around Swift's structured concurrency (async/await) with the @Observable macro for state management. Combine is primarily used for specialized reactive scenarios.
3
+
4
+ **When to use async/await:**
5
+ - Loading data when views appear (.task modifier)
6
+ - Sequential API calls with dependencies
7
+ - Error handling with do-catch
8
+ - Any new code requiring async operations
9
+
10
+ **When Combine is still useful:**
11
+ - Complex reactive pipelines (debouncing, throttling)
12
+ - Form validation with multiple interdependent fields
13
+ - Real-time data streams (websockets, timers)
14
+
15
+ **Core principle:** Use async/await by default. Add Combine only when reactive operators provide clear value.
16
+ </overview>
17
+
18
+ <task_modifier>
19
+ ## The .task Modifier
20
+
21
+ **Basic usage:**
22
+ ```swift
23
+ struct ArticleView: View {
24
+ @State private var article: Article?
25
+ let articleID: String
26
+
27
+ var body: some View {
28
+ content
29
+ .task {
30
+ article = try? await fetchArticle(id: articleID)
31
+ }
32
+ }
33
+ }
34
+ ```
35
+
36
+ **With dependency (.task(id:)):**
37
+ ```swift
38
+ struct SearchView: View {
39
+ @State private var query = ""
40
+ @State private var results: [Result] = []
41
+
42
+ var body: some View {
43
+ List(results) { result in Text(result.name) }
44
+ .searchable(text: $query)
45
+ .task(id: query) {
46
+ guard !query.isEmpty else { return }
47
+ try? await Task.sleep(for: .milliseconds(300))
48
+ guard !Task.isCancelled else { return }
49
+ results = (try? await search(query: query)) ?? []
50
+ }
51
+ }
52
+ }
53
+ ```
54
+
55
+ **Key behaviors:**
56
+ - Runs when view appears
57
+ - Auto-cancels on view disappear
58
+ - .task(id:) restarts when dependency changes
59
+ </task_modifier>
60
+
61
+ <async_await_patterns>
62
+ ## Async/Await Patterns
63
+
64
+ **Loading with @Observable:**
65
+ ```swift
66
+ @Observable
67
+ @MainActor
68
+ class ArticleViewModel {
69
+ private(set) var state: LoadingState<Article> = .idle
70
+
71
+ func load(id: String) async {
72
+ state = .loading
73
+ do {
74
+ let article = try await apiClient.fetchArticle(id: id)
75
+ state = .loaded(article)
76
+ } catch is CancellationError {
77
+ // Don't update state
78
+ } catch {
79
+ state = .failed(error)
80
+ }
81
+ }
82
+ }
83
+ ```
84
+
85
+ **Parallel calls:**
86
+ ```swift
87
+ func loadProfile(id: String) async throws -> Profile {
88
+ let user = try await fetchUser(id: id)
89
+ async let posts = fetchPosts(userID: user.id)
90
+ async let followers = fetchFollowers(userID: user.id)
91
+ return Profile(user: user, posts: try await posts, followers: try await followers)
92
+ }
93
+ ```
94
+ </async_await_patterns>
95
+
96
+ <api_client_design>
97
+ ## API Client Architecture
98
+
99
+ ```swift
100
+ protocol APIClient {
101
+ func request<T: Decodable>(_ endpoint: Endpoint) async throws -> T
102
+ }
103
+
104
+ @MainActor
105
+ final class ProductionAPIClient: APIClient {
106
+ private let baseURL: URL
107
+ private let session: URLSession
108
+
109
+ func request<T: Decodable>(_ endpoint: Endpoint) async throws -> T {
110
+ let request = try buildRequest(endpoint)
111
+ let (data, response) = try await session.data(for: request)
112
+
113
+ guard let httpResponse = response as? HTTPURLResponse,
114
+ (200...299).contains(httpResponse.statusCode) else {
115
+ throw APIError.httpError((response as? HTTPURLResponse)?.statusCode ?? 0)
116
+ }
117
+
118
+ return try JSONDecoder().decode(T.self, from: data)
119
+ }
120
+ }
121
+ ```
122
+ </api_client_design>
123
+
124
+ <loading_states>
125
+ ## Loading States
126
+
127
+ ```swift
128
+ enum LoadingState<Value> {
129
+ case idle
130
+ case loading
131
+ case loaded(Value)
132
+ case failed(Error)
133
+
134
+ var isLoading: Bool {
135
+ if case .loading = self { return true }
136
+ return false
137
+ }
138
+ }
139
+
140
+ struct AsyncContentView<Value, Content: View>: View {
141
+ let state: LoadingState<Value>
142
+ let retry: () async -> Void
143
+ @ViewBuilder let content: (Value) -> Content
144
+
145
+ var body: some View {
146
+ switch state {
147
+ case .idle: Color.clear
148
+ case .loading: ProgressView()
149
+ case .loaded(let value): content(value)
150
+ case .failed(let error):
151
+ ContentUnavailableView("Error", systemImage: "exclamationmark.triangle", description: Text(error.localizedDescription))
152
+ }
153
+ }
154
+ }
155
+ ```
156
+ </loading_states>
157
+
158
+ <error_handling>
159
+ ## Error Handling & Retry
160
+
161
+ **Basic retry:**
162
+ ```swift
163
+ func fetchWithRetry<T>(maxRetries: Int = 3, operation: () async throws -> T) async throws -> T {
164
+ var lastError: Error?
165
+ for attempt in 0..<maxRetries {
166
+ do {
167
+ return try await operation()
168
+ } catch {
169
+ lastError = error
170
+ if error is CancellationError { throw error }
171
+ if attempt < maxRetries - 1 {
172
+ try await Task.sleep(for: .seconds(pow(2, Double(attempt))))
173
+ }
174
+ }
175
+ }
176
+ throw lastError!
177
+ }
178
+ ```
179
+ </error_handling>
180
+
181
+ <decision_tree>
182
+ ## Choosing the Right Approach
183
+
184
+ **Tied to view lifecycle?** → .task or .task(id:)
185
+ **User-triggered?** → Wrap in explicit Task {}
186
+ **Need reactive operators?** → Combine
187
+ **Loading data?** → Use LoadingState enum
188
+ **Sequential calls?** → async/await naturally
189
+ **Parallel calls?** → async let or TaskGroup
190
+ </decision_tree>
191
+
192
+ <anti_patterns>
193
+ ## What NOT to Do
194
+
195
+ <anti_pattern name="Ignoring CancellationError">
196
+ **Problem:** Showing error UI when task is cancelled
197
+ **Instead:** Catch CancellationError separately, don't update state
198
+ </anti_pattern>
199
+
200
+ <anti_pattern name="Task in .task">
201
+ **Problem:** Task { await loadData() } inside .task
202
+ **Instead:** .task already creates a Task
203
+ </anti_pattern>
204
+
205
+ <anti_pattern name="Missing @MainActor">
206
+ **Problem:** View model updates from background thread
207
+ **Instead:** Mark @Observable view models with @MainActor
208
+ </anti_pattern>
209
+
210
+ <anti_pattern name="ObservableObject for new code">
211
+ **Problem:** Using ObservableObject/@Published
212
+ **Instead:** Use @Observable macro (iOS 17+)
213
+ </anti_pattern>
214
+ </anti_patterns>