prr-kit 1.1.3 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (173) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +260 -235
  3. package/docs/assets/banner.svg +30 -248
  4. package/docs/assets/how-it-works.svg +87 -0
  5. package/package.json +60 -60
  6. package/src/core/agents/prr-master.agent.yaml +18 -7
  7. package/src/core/tasks/clear.md +140 -0
  8. package/src/core/tasks/help.md +15 -13
  9. package/src/core/workflows/clear/workflow.md +6 -0
  10. package/src/core/workflows/help/workflow.md +6 -0
  11. package/src/core/workflows/party-mode/steps/step-01-load-reviewers.md +35 -24
  12. package/src/core/workflows/party-mode/steps/step-02-discussion.md +45 -25
  13. package/src/core/workflows/party-mode/workflow.md +2 -2
  14. package/src/prr/agents/architecture-reviewer.agent.yaml +65 -45
  15. package/src/prr/agents/business-reviewer.agent.yaml +66 -0
  16. package/src/prr/agents/general-reviewer.agent.yaml +64 -48
  17. package/src/prr/agents/performance-reviewer.agent.yaml +65 -45
  18. package/src/prr/agents/security-reviewer.agent.yaml +67 -43
  19. package/src/prr/config-template.yaml +97 -0
  20. package/src/prr/data/stacks/actix.md +55 -0
  21. package/src/prr/data/stacks/alpine.md +47 -0
  22. package/src/prr/data/stacks/android.md +53 -0
  23. package/src/prr/data/stacks/angular.md +96 -0
  24. package/src/prr/data/stacks/ansible.md +55 -0
  25. package/src/prr/data/stacks/apollo.md +54 -0
  26. package/src/prr/data/stacks/astro.md +48 -0
  27. package/src/prr/data/stacks/aws-cdk.md +55 -0
  28. package/src/prr/data/stacks/axum.md +56 -0
  29. package/src/prr/data/stacks/babylonjs.md +55 -0
  30. package/src/prr/data/stacks/bash.md +53 -0
  31. package/src/prr/data/stacks/bevy.md +53 -0
  32. package/src/prr/data/stacks/bootstrap.md +52 -0
  33. package/src/prr/data/stacks/bun.md +55 -0
  34. package/src/prr/data/stacks/cpp.md +57 -0
  35. package/src/prr/data/stacks/csharp.md +95 -0
  36. package/src/prr/data/stacks/css.md +55 -0
  37. package/src/prr/data/stacks/cypress.md +53 -0
  38. package/src/prr/data/stacks/d3.md +53 -0
  39. package/src/prr/data/stacks/deno.md +49 -0
  40. package/src/prr/data/stacks/django.md +92 -0
  41. package/src/prr/data/stacks/docker.md +79 -0
  42. package/src/prr/data/stacks/drizzle.md +54 -0
  43. package/src/prr/data/stacks/dynamodb.md +55 -0
  44. package/src/prr/data/stacks/electron.md +44 -0
  45. package/src/prr/data/stacks/elixir.md +53 -0
  46. package/src/prr/data/stacks/expo.md +53 -0
  47. package/src/prr/data/stacks/expressjs.md +82 -0
  48. package/src/prr/data/stacks/fastapi.md +88 -0
  49. package/src/prr/data/stacks/fastify.md +60 -0
  50. package/src/prr/data/stacks/fiber.md +55 -0
  51. package/src/prr/data/stacks/firebase.md +43 -0
  52. package/src/prr/data/stacks/flask.md +46 -0
  53. package/src/prr/data/stacks/flutter.md +75 -0
  54. package/src/prr/data/stacks/gin.md +57 -0
  55. package/src/prr/data/stacks/github-actions.md +71 -0
  56. package/src/prr/data/stacks/go.md +88 -0
  57. package/src/prr/data/stacks/godot.md +56 -0
  58. package/src/prr/data/stacks/graphql.md +76 -0
  59. package/src/prr/data/stacks/grpc.md +56 -0
  60. package/src/prr/data/stacks/haskell.md +48 -0
  61. package/src/prr/data/stacks/helm.md +54 -0
  62. package/src/prr/data/stacks/hono.md +54 -0
  63. package/src/prr/data/stacks/htmx.md +38 -0
  64. package/src/prr/data/stacks/java.md +87 -0
  65. package/src/prr/data/stacks/jest-vitest.md +87 -0
  66. package/src/prr/data/stacks/jquery.md +50 -0
  67. package/src/prr/data/stacks/junit.md +53 -0
  68. package/src/prr/data/stacks/kotlin.md +89 -0
  69. package/src/prr/data/stacks/kubernetes.md +148 -0
  70. package/src/prr/data/stacks/langchain.md +56 -0
  71. package/src/prr/data/stacks/laravel.md +56 -0
  72. package/src/prr/data/stacks/libgdx.md +46 -0
  73. package/src/prr/data/stacks/lit.md +49 -0
  74. package/src/prr/data/stacks/love2d.md +51 -0
  75. package/src/prr/data/stacks/lua.md +51 -0
  76. package/src/prr/data/stacks/mobx.md +54 -0
  77. package/src/prr/data/stacks/mongodb.md +85 -0
  78. package/src/prr/data/stacks/monogame.md +51 -0
  79. package/src/prr/data/stacks/mysql.md +57 -0
  80. package/src/prr/data/stacks/nestjs.md +95 -0
  81. package/src/prr/data/stacks/nextjs.md +88 -0
  82. package/src/prr/data/stacks/nginx.md +55 -0
  83. package/src/prr/data/stacks/node.md +56 -0
  84. package/src/prr/data/stacks/nuxtjs.md +91 -0
  85. package/src/prr/data/stacks/openai-api.md +54 -0
  86. package/src/prr/data/stacks/opengl.md +54 -0
  87. package/src/prr/data/stacks/phaser.md +54 -0
  88. package/src/prr/data/stacks/phoenix.md +55 -0
  89. package/src/prr/data/stacks/php.md +56 -0
  90. package/src/prr/data/stacks/playwright.md +86 -0
  91. package/src/prr/data/stacks/postgresql.md +60 -0
  92. package/src/prr/data/stacks/prisma.md +81 -0
  93. package/src/prr/data/stacks/pygame.md +52 -0
  94. package/src/prr/data/stacks/pytest.md +53 -0
  95. package/src/prr/data/stacks/python.md +94 -0
  96. package/src/prr/data/stacks/pytorch.md +54 -0
  97. package/src/prr/data/stacks/qwik.md +50 -0
  98. package/src/prr/data/stacks/rails.md +48 -0
  99. package/src/prr/data/stacks/react-native.md +77 -0
  100. package/src/prr/data/stacks/react.md +104 -0
  101. package/src/prr/data/stacks/redis.md +76 -0
  102. package/src/prr/data/stacks/redux.md +107 -0
  103. package/src/prr/data/stacks/remix.md +51 -0
  104. package/src/prr/data/stacks/rust.md +88 -0
  105. package/src/prr/data/stacks/sass.md +51 -0
  106. package/src/prr/data/stacks/scala.md +50 -0
  107. package/src/prr/data/stacks/scikit-learn.md +53 -0
  108. package/src/prr/data/stacks/sequelize.md +54 -0
  109. package/src/prr/data/stacks/socket-io.md +54 -0
  110. package/src/prr/data/stacks/solidity.md +53 -0
  111. package/src/prr/data/stacks/solidjs.md +45 -0
  112. package/src/prr/data/stacks/spring-boot.md +92 -0
  113. package/src/prr/data/stacks/sql.md +85 -0
  114. package/src/prr/data/stacks/sqlite.md +55 -0
  115. package/src/prr/data/stacks/styled-components.md +51 -0
  116. package/src/prr/data/stacks/supabase.md +57 -0
  117. package/src/prr/data/stacks/svelte.md +77 -0
  118. package/src/prr/data/stacks/sveltekit.md +54 -0
  119. package/src/prr/data/stacks/swift.md +61 -0
  120. package/src/prr/data/stacks/tailwindcss.md +10 -0
  121. package/src/prr/data/stacks/tanstack-query.md +48 -0
  122. package/src/prr/data/stacks/tauri.md +52 -0
  123. package/src/prr/data/stacks/terraform.md +53 -0
  124. package/src/prr/data/stacks/three.md +53 -0
  125. package/src/prr/data/stacks/trpc.md +49 -0
  126. package/src/prr/data/stacks/typeorm.md +40 -0
  127. package/src/prr/data/stacks/typescript.md +83 -0
  128. package/src/prr/data/stacks/unity.md +61 -0
  129. package/src/prr/data/stacks/unreal.md +58 -0
  130. package/src/prr/data/stacks/vite.md +48 -0
  131. package/src/prr/data/stacks/vue3.md +95 -0
  132. package/src/prr/data/stacks/vulkan.md +53 -0
  133. package/src/prr/data/stacks/wasm.md +49 -0
  134. package/src/prr/data/stacks/webpack.md +48 -0
  135. package/src/prr/data/stacks/zig.md +51 -0
  136. package/src/prr/data/stacks/zustand.md +56 -0
  137. package/src/prr/workflows/1-discover/select-pr/steps/step-05-confirm.md +1 -0
  138. package/src/prr/workflows/1-discover/select-pr/workflow.md +1 -1
  139. package/src/prr/workflows/2-analyze/collect-pr-context/steps/step-01-analyze-files.md +334 -0
  140. package/src/prr/workflows/2-analyze/collect-pr-context/steps/step-02-collect-sources.md +451 -0
  141. package/src/prr/workflows/2-analyze/collect-pr-context/steps/step-03-build-knowledge-base.md +337 -0
  142. package/src/prr/workflows/2-analyze/collect-pr-context/workflow.md +123 -0
  143. package/src/prr/workflows/2-analyze/describe-pr/steps/step-02-classify.md +12 -6
  144. package/src/prr/workflows/2-analyze/describe-pr/steps/step-03-walkthrough.md +59 -1
  145. package/src/prr/workflows/3-review/architecture-review/checklist.md +4 -0
  146. package/src/prr/workflows/3-review/architecture-review/instructions.xml +32 -4
  147. package/src/prr/workflows/3-review/architecture-review/workflow.yaml +17 -18
  148. package/src/prr/workflows/3-review/business-review/checklist.md +27 -0
  149. package/src/prr/workflows/3-review/business-review/instructions.xml +153 -0
  150. package/src/prr/workflows/3-review/business-review/workflow.yaml +17 -0
  151. package/src/prr/workflows/3-review/general-review/checklist.md +5 -1
  152. package/src/prr/workflows/3-review/general-review/instructions.xml +39 -8
  153. package/src/prr/workflows/3-review/general-review/workflow.yaml +17 -18
  154. package/src/prr/workflows/3-review/performance-review/checklist.md +3 -1
  155. package/src/prr/workflows/3-review/performance-review/instructions.xml +10 -3
  156. package/src/prr/workflows/3-review/performance-review/workflow.yaml +17 -18
  157. package/src/prr/workflows/3-review/security-review/checklist.md +2 -1
  158. package/src/prr/workflows/3-review/security-review/instructions.xml +8 -3
  159. package/src/prr/workflows/3-review/security-review/workflow.yaml +18 -19
  160. package/src/prr/workflows/4-improve/improve-code/workflow.yaml +17 -18
  161. package/src/prr/workflows/6-report/generate-report/steps/step-01-collect.md +9 -2
  162. package/src/prr/workflows/6-report/generate-report/steps/step-02-organize.md +28 -7
  163. package/src/prr/workflows/6-report/generate-report/steps/step-03-write.md +6 -4
  164. package/src/prr/workflows/6-report/generate-report/templates/review-report.template.md +124 -78
  165. package/src/prr/workflows/6-report/post-comments/steps/step-01-format.md +104 -13
  166. package/src/prr/workflows/6-report/post-comments/steps/step-02-post.md +92 -21
  167. package/src/prr/workflows/6-report/post-comments/workflow.md +6 -0
  168. package/src/prr/workflows/quick/workflow.md +138 -32
  169. package/src/prr/workflows/0-setup/collect-project-context/steps/step-01-scan-configs.md +0 -106
  170. package/src/prr/workflows/0-setup/collect-project-context/steps/step-02-extract-rules.md +0 -131
  171. package/src/prr/workflows/0-setup/collect-project-context/steps/step-03-ask-context.md +0 -194
  172. package/src/prr/workflows/0-setup/collect-project-context/steps/step-04-save-context.md +0 -161
  173. package/src/prr/workflows/0-setup/collect-project-context/workflow.md +0 -58
@@ -0,0 +1,334 @@
1
+ ---
2
+ name: "step-01-analyze-files"
3
+ description: "Analyze files changed in PR to determine context needs"
4
+ nextStepFile: "./step-02-collect-sources.md"
5
+ ---
6
+
7
+ # Step 1: Analyze Changed Files
8
+
9
+ ## Goal
10
+ Determine what context is needed based on files changed in the PR.
11
+
12
+ ## Sequence of Instructions
13
+
14
+ ### 1. Announce Analysis
15
+
16
+ ```
17
+ 🔍 Analyzing PR changes to determine context needs...
18
+ Files changed: {n}
19
+ ```
20
+
21
+ ### 2. Extract File Information
22
+
23
+ For each file in the PR diff, extract:
24
+
25
+ **File metadata:**
26
+ - Full path (e.g., `src/stores/todoStore.js`)
27
+ - File extension (`.js`, `.vue`, `.ts`, `.py`, etc.)
28
+ - Directory path segments (e.g., `src`, `stores`)
29
+
30
+ **File categories:**
31
+ ```javascript
32
+ const fileCategories = {
33
+ 'src/components/*.vue': 'vue-component',
34
+ 'src/views/*.vue': 'vue-view',
35
+ 'src/stores/*.js': 'pinia-store',
36
+ 'src/router/*.js': 'vue-router',
37
+ 'src/composables/*.js': 'composable',
38
+ '*.test.js|*.spec.js': 'test',
39
+ 'src/utils/*.js': 'utility',
40
+ '*.css|*.scss': 'stylesheet'
41
+ }
42
+ ```
43
+
44
+ ### 3. Detect Domains
45
+
46
+ Based on file paths and content, identify domains:
47
+
48
+ **Domain detection patterns:**
49
+ ```javascript
50
+ const domainPatterns = {
51
+ 'authentication': ['auth', 'login', 'jwt', 'token', 'session'],
52
+ 'state-management': ['store', 'pinia', 'vuex', 'state'],
53
+ 'routing': ['router', 'route', 'navigation'],
54
+ 'ui-components': ['component', 'button', 'input', 'form'],
55
+ 'api': ['api', 'fetch', 'axios', 'http', 'endpoint'],
56
+ 'database': ['db', 'query', 'model', 'schema'],
57
+ 'security': ['auth', 'permission', 'validate', 'sanitize']
58
+ }
59
+ ```
60
+
61
+ ### 4. Scan for Inline Annotations
62
+
63
+ In changed lines, look for special comments:
64
+
65
+ ```javascript
66
+ // @context: This module handles user authentication
67
+ // @security: All inputs must be validated before storage
68
+ // @pattern: Use repository pattern for data access
69
+ // @rule: ESLint vue/multi-word-component-names must be followed
70
+ ```
71
+
72
+ Extract these annotations with:
73
+ - File path
74
+ - Line number
75
+ - Annotation type
76
+ - Content
77
+
78
+ ### 5. Identify Config Files Needed
79
+
80
+ Based on file types changed:
81
+
82
+ ```javascript
83
+ const configMapping = {
84
+ '.vue': ['.eslintrc*', '.prettierrc*', 'vite.config.*'],
85
+ '.js|.ts': ['.eslintrc*', '.prettierrc*', 'tsconfig.json'],
86
+ '.py': ['pyproject.toml', '.flake8', 'mypy.ini'],
87
+ '.css|.scss': ['.stylelintrc*']
88
+ }
89
+ ```
90
+
91
+ ### 6. Identify Docs Needed
92
+
93
+ Based on domains and categories:
94
+
95
+ ```javascript
96
+ const docsMapping = {
97
+ 'vue-component': ['CONTRIBUTING.md → Component section', 'docs/components.md'],
98
+ 'pinia-store': ['ARCHITECTURE.md → State management', 'docs/state-management.md'],
99
+ 'security': ['CONTRIBUTING.md → Security section', 'docs/security.md'],
100
+ 'api': ['docs/api-guidelines.md', 'ARCHITECTURE.md → API section']
101
+ }
102
+ ```
103
+
104
+ ### 7. Detect Technology Stacks
105
+
106
+ Analyze file extensions, import statements, config files, and directory structure to detect which technology stacks are involved in the PR. This information is used in Step 2 to load stack-specific review rules.
107
+
108
+ **Frontend Frameworks:**
109
+
110
+ | Stack key | Detection signals |
111
+ |-----------|-------------------|
112
+ | `vue3` | `*.vue` files · `from 'vue'` · `<script setup>` · `defineComponent` · `vite.config.*` with vue plugin |
113
+ | `react` | `*.jsx` / `*.tsx` · `from 'react'` · `useState` / `useEffect` · JSX syntax |
114
+ | `angular` | `*.component.ts` · `@Component(` · `@NgModule(` · `angular.json` |
115
+ | `svelte` | `*.svelte` files |
116
+ | `nextjs` | `next.config.*` · `pages/` or `app/` dir · `getServerSideProps` · `from 'next'` |
117
+ | `nuxtjs` | `nuxt.config.*` · `useNuxtApp` · `defineNuxtComponent` · `.nuxt/` |
118
+ | `astro` | `*.astro` files · `astro.config.*` · `from 'astro'` · `@astrojs/` imports |
119
+ | `solidjs` | `from 'solid-js'` · `createSignal` · `createEffect` · `<Show>` · `<For>` · `vite-plugin-solid` |
120
+ | `htmx` | `htmx.min.js` · `hx-get` / `hx-post` / `hx-swap` attributes in HTML templates |
121
+
122
+ **Styling:**
123
+
124
+ | Stack key | Detection signals |
125
+ |-----------|-------------------|
126
+ | `typescript` | `*.ts` / `*.tsx` · `tsconfig.json` · `typescript` in devDeps |
127
+ | `tailwindcss` | `tailwind.config.*` · `@tailwind` · `@apply` in CSS · utility class patterns |
128
+ | `css` | `*.css` / `*.scss` / `*.sass` / `*.less` / `*.styl` files |
129
+
130
+ **State Management:**
131
+
132
+ | Stack key | Detection signals |
133
+ |-----------|-------------------|
134
+ | `redux` | `@reduxjs/toolkit` or `redux` in deps · `createSlice` · `configureStore` · `useSelector` · `useDispatch` |
135
+
136
+ **Backend — Node.js:**
137
+
138
+ | Stack key | Detection signals |
139
+ |-----------|-------------------|
140
+ | `nestjs` | `@Module(` · `@Injectable(` · `@Controller(` · `NestFactory` · `nest-cli.json` |
141
+ | `expressjs` | `express()` · `app.use(` · `router.get/post` · `from 'express'` |
142
+
143
+ **Backend — Python:**
144
+
145
+ | Stack key | Detection signals |
146
+ |-----------|-------------------|
147
+ | `fastapi` | `from fastapi` · `@app.get` · `Depends(` · `BaseModel` (pydantic) |
148
+ | `django` | `from django` · `models.Model` · `views.py` · `urls.py` · `manage.py` |
149
+ | `flask` | `from flask import` · `@app.route` · `Flask(__name__)` |
150
+ | `python` | `*.py` files without more specific framework signals |
151
+
152
+ **Backend — Java:**
153
+
154
+ | Stack key | Detection signals |
155
+ |-----------|-------------------|
156
+ | `spring-boot` | `@SpringBootApplication` · `@RestController` · `@Service` · `application.properties` |
157
+ | `java` | `*.java` files · `public class` · `import java.` · without Spring Boot signals |
158
+
159
+ **Backend — Kotlin:**
160
+
161
+ | Stack key | Detection signals |
162
+ |-----------|-------------------|
163
+ | `kotlin` | `*.kt` files · `fun main()` · `import kotlin.` · `build.gradle.kts` · `@Composable` |
164
+
165
+ **Backend — C# / .NET:**
166
+
167
+ | Stack key | Detection signals |
168
+ |-----------|-------------------|
169
+ | `csharp` | `*.cs` files · `*.csproj` · `*.sln` · `using System` · `namespace` · `appsettings.json` |
170
+
171
+ **Backend — C++:**
172
+
173
+ | Stack key | Detection signals |
174
+ |-----------|-------------------|
175
+ | `cpp` | `*.cpp` / `*.cc` / `*.cxx` files · `*.hpp` · `#include <` · `CMakeLists.txt` · `Makefile` |
176
+
177
+ **Backend — Rust:**
178
+
179
+ | Stack key | Detection signals |
180
+ |-----------|-------------------|
181
+ | `rust` | `*.rs` files · `Cargo.toml` · `Cargo.lock` · `fn main()` · `use std::` · `impl` |
182
+
183
+ **Backend — Elixir:**
184
+
185
+ | Stack key | Detection signals |
186
+ |-----------|-------------------|
187
+ | `elixir` | `*.ex` / `*.exs` files · `mix.exs` · `defmodule` · `use Phoenix.` · `Repo.` · `Ecto.` |
188
+
189
+ **Backend — Go:**
190
+
191
+ | Stack key | Detection signals |
192
+ |-----------|-------------------|
193
+ | `go` | `*.go` files · `go.mod` · `package main` |
194
+
195
+ **Backend — PHP:**
196
+
197
+ | Stack key | Detection signals |
198
+ |-----------|-------------------|
199
+ | `laravel` | `*.php` + `artisan` · `Eloquent` · `routes/web.php` · `app/Http/Controllers` |
200
+
201
+ **Backend — Ruby:**
202
+
203
+ | Stack key | Detection signals |
204
+ |-----------|-------------------|
205
+ | `rails` | `*.rb` + `Gemfile` with rails · `ApplicationController` · `config/routes.rb` |
206
+
207
+ **Database / ORM:**
208
+
209
+ | Stack key | Detection signals |
210
+ |-----------|-------------------|
211
+ | `sql` | `*.sql` · raw SQL strings in code (`SELECT`, `INSERT`, `UPDATE`) · `db.query(` |
212
+ | `prisma` | `prisma/schema.prisma` · `@prisma/client` · `PrismaClient` |
213
+ | `typeorm` | `@Entity(` · `@Column(` · `DataSource` · `createConnection` |
214
+ | `mongodb` | `mongoose` · `MongoClient` · `Schema(` · `.aggregate(` |
215
+
216
+ **Cache / KV Store:**
217
+
218
+ | Stack key | Detection signals |
219
+ |-----------|-------------------|
220
+ | `redis` | `ioredis` / `redis` in deps · `createClient()` · `HSET` · `GET` / `SET` commands · `redis://` URIs |
221
+
222
+ **BaaS / Cloud Platform:**
223
+
224
+ | Stack key | Detection signals |
225
+ |-----------|-------------------|
226
+ | `firebase` | `firebase` in deps · `initializeApp(` · `getFirestore(` · `getAuth(` · `firebase.json` |
227
+
228
+ **Testing — Unit / Integration:**
229
+
230
+ | Stack key | Detection signals |
231
+ |-----------|-------------------|
232
+ | `jest-vitest` | `jest.config.*` · `vitest.config.*` · `*.test.ts/js` · `*.spec.ts/js` |
233
+
234
+ **Testing — E2E:**
235
+
236
+ | Stack key | Detection signals |
237
+ |-----------|-------------------|
238
+ | `playwright` | `playwright.config.*` · `cypress.config.*` · `*.cy.js` · `page.goto` · `cy.` commands |
239
+
240
+ **Infrastructure:**
241
+
242
+ | Stack key | Detection signals |
243
+ |-----------|-------------------|
244
+ | `docker` | `Dockerfile*` · `docker-compose*.yml` · `.dockerignore` |
245
+ | `kubernetes` | `*.yaml` with `apiVersion:` + `kind: Deployment/Pod/Service` · `kubectl` · `kustomization.yaml` · Helm charts |
246
+ | `terraform` | `*.tf` files · `terraform {` · `resource "` · `provider "` · `terraform.tfvars` |
247
+ | `github-actions` | `.github/workflows/*.yml` · `on:` + `jobs:` + `steps:` · `uses: actions/` |
248
+
249
+ **API Layer:**
250
+
251
+ | Stack key | Detection signals |
252
+ |-----------|-------------------|
253
+ | `graphql` | `*.graphql` / `*.gql` · `gql\`` · `typeDefs` · `resolvers` · `ApolloServer` |
254
+
255
+ **Mobile:**
256
+
257
+ | Stack key | Detection signals |
258
+ |-----------|-------------------|
259
+ | `react-native` | `react-native` in deps · RN component imports (`View`, `Text`, `StyleSheet`) |
260
+ | `flutter` | `*.dart` files · `pubspec.yaml` with `flutter:` · `import 'package:flutter/` · `Widget` |
261
+ | `kotlin` | (see Backend — Kotlin above; also applies to Android development) |
262
+ | `swift` | `*.swift` files · `import UIKit` / `import SwiftUI` · `Package.swift` · `*.xcodeproj` |
263
+
264
+ **Desktop:**
265
+
266
+ | Stack key | Detection signals |
267
+ |-----------|-------------------|
268
+ | `electron` | `electron` in deps · `BrowserWindow` · `ipcMain` · `ipcRenderer` · `app.whenReady()` |
269
+
270
+ **Runtime:**
271
+
272
+ | Stack key | Detection signals |
273
+ |-----------|-------------------|
274
+ | `deno` | `deno.json` / `deno.jsonc` · `Deno.` namespace · `jsr:` / `npm:` specifiers · `deno run` in scripts |
275
+
276
+ **Output — add to analysis summary:**
277
+ ```yaml
278
+ detected_stacks: [vue3, typescript, tailwindcss] # list of matched stack keys
279
+ ```
280
+
281
+ If no stack is confidently detected → `detected_stacks: []` — steps downstream skip stack-specific loading silently.
282
+
283
+ ---
284
+
285
+ ### 8. Build Analysis Summary
286
+
287
+ ```javascript
288
+ {
289
+ "files_changed": [
290
+ {
291
+ "path": "src/stores/todoStore.js",
292
+ "extension": ".js",
293
+ "category": "pinia-store",
294
+ "domains": ["state-management"],
295
+ "annotations": [
296
+ {
297
+ "line": 10,
298
+ "type": "@pattern",
299
+ "content": "Use composition API only"
300
+ }
301
+ ]
302
+ },
303
+ {
304
+ "path": "src/views/TodoListView.vue",
305
+ "extension": ".vue",
306
+ "category": "vue-view",
307
+ "domains": ["ui-components", "state-management"]
308
+ }
309
+ ],
310
+ "context_needs": {
311
+ "configs": [".eslintrc.js", ".prettierrc", "vite.config.js"],
312
+ "docs": ["CONTRIBUTING.md", "ARCHITECTURE.md"],
313
+ "primary": ["CLAUDE.md", "AGENTS.md"],
314
+ "domains": ["state-management", "ui-components"]
315
+ },
316
+ "detected_stacks": ["vue3", "typescript"]
317
+ }
318
+ ```
319
+
320
+ ### 9. Report Analysis
321
+
322
+ ```
323
+ ✓ File analysis complete:
324
+ 📄 Files: {n} ({list of extensions})
325
+ 🎯 Domains: {domains}
326
+ 🧩 Stacks detected: {detected_stacks or "none"}
327
+ 📋 Configs needed: {configs}
328
+ 📚 Docs needed: {docs}
329
+ 💬 Annotations found: {count}
330
+ ```
331
+
332
+ ### 10. Load Next Step
333
+
334
+ Add `step-01-analyze-files` to `stepsCompleted`. Load: `{nextStepFile}`