sparkecoder 0.1.54 → 0.1.56

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 (116) hide show
  1. package/dist/agent/index.d.ts +2 -2
  2. package/dist/agent/index.js +50 -22
  3. package/dist/agent/index.js.map +1 -1
  4. package/dist/cli.js +50 -22
  5. package/dist/cli.js.map +1 -1
  6. package/dist/{index-BYOHniN4.d.ts → index-CqKMYoJv.d.ts} +5 -5
  7. package/dist/index.d.ts +3 -3
  8. package/dist/index.js +50 -22
  9. package/dist/index.js.map +1 -1
  10. package/dist/{search-DALwmPRX.d.ts → search-CZsTAZ90.d.ts} +6 -6
  11. package/dist/server/index.js +50 -22
  12. package/dist/server/index.js.map +1 -1
  13. package/dist/tools/index.d.ts +2 -2
  14. package/dist/tools/index.js +36 -21
  15. package/dist/tools/index.js.map +1 -1
  16. package/package.json +1 -1
  17. package/web/.next/BUILD_ID +1 -1
  18. package/web/.next/standalone/web/.next/BUILD_ID +1 -1
  19. package/web/.next/standalone/web/.next/build-manifest.json +2 -2
  20. package/web/.next/standalone/web/.next/prerender-manifest.json +3 -3
  21. package/web/.next/standalone/web/.next/server/app/(main)/session/[id]/page.js.nft.json +1 -1
  22. package/web/.next/standalone/web/.next/server/app/(main)/session/[id]/page_client-reference-manifest.js +1 -1
  23. package/web/.next/standalone/web/.next/server/app/_global-error.html +2 -2
  24. package/web/.next/standalone/web/.next/server/app/_global-error.rsc +1 -1
  25. package/web/.next/standalone/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  26. package/web/.next/standalone/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  27. package/web/.next/standalone/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  28. package/web/.next/standalone/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  29. package/web/.next/standalone/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  30. package/web/.next/standalone/web/.next/server/app/_not-found.html +1 -1
  31. package/web/.next/standalone/web/.next/server/app/_not-found.rsc +1 -1
  32. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  33. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  34. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  35. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  36. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  37. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  38. package/web/.next/standalone/web/.next/server/app/docs/installation.html +2 -2
  39. package/web/.next/standalone/web/.next/server/app/docs/installation.rsc +1 -1
  40. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_full.segment.rsc +1 -1
  41. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_head.segment.rsc +1 -1
  42. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_index.segment.rsc +1 -1
  43. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_tree.segment.rsc +1 -1
  44. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/docs/installation/__PAGE__.segment.rsc +1 -1
  45. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/docs/installation.segment.rsc +1 -1
  46. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/docs.segment.rsc +1 -1
  47. package/web/.next/standalone/web/.next/server/app/docs/skills.html +2 -2
  48. package/web/.next/standalone/web/.next/server/app/docs/skills.rsc +1 -1
  49. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_full.segment.rsc +1 -1
  50. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_head.segment.rsc +1 -1
  51. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_index.segment.rsc +1 -1
  52. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_tree.segment.rsc +1 -1
  53. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/docs/skills/__PAGE__.segment.rsc +1 -1
  54. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/docs/skills.segment.rsc +1 -1
  55. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/docs.segment.rsc +1 -1
  56. package/web/.next/standalone/web/.next/server/app/docs/tools.html +2 -2
  57. package/web/.next/standalone/web/.next/server/app/docs/tools.rsc +1 -1
  58. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_full.segment.rsc +1 -1
  59. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_head.segment.rsc +1 -1
  60. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_index.segment.rsc +1 -1
  61. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_tree.segment.rsc +1 -1
  62. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/docs/tools/__PAGE__.segment.rsc +1 -1
  63. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/docs/tools.segment.rsc +1 -1
  64. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/docs.segment.rsc +1 -1
  65. package/web/.next/standalone/web/.next/server/app/docs.html +2 -2
  66. package/web/.next/standalone/web/.next/server/app/docs.rsc +1 -1
  67. package/web/.next/standalone/web/.next/server/app/docs.segments/_full.segment.rsc +1 -1
  68. package/web/.next/standalone/web/.next/server/app/docs.segments/_head.segment.rsc +1 -1
  69. package/web/.next/standalone/web/.next/server/app/docs.segments/_index.segment.rsc +1 -1
  70. package/web/.next/standalone/web/.next/server/app/docs.segments/_tree.segment.rsc +1 -1
  71. package/web/.next/standalone/web/.next/server/app/docs.segments/docs/__PAGE__.segment.rsc +1 -1
  72. package/web/.next/standalone/web/.next/server/app/docs.segments/docs.segment.rsc +1 -1
  73. package/web/.next/standalone/web/.next/server/app/embed/[id]/page.js.nft.json +1 -1
  74. package/web/.next/standalone/web/.next/server/app/embed/[id]/page_client-reference-manifest.js +1 -1
  75. package/web/.next/standalone/web/.next/server/app/index.html +1 -1
  76. package/web/.next/standalone/web/.next/server/app/index.rsc +1 -1
  77. package/web/.next/standalone/web/.next/server/app/index.segments/!KG1haW4p/__PAGE__.segment.rsc +1 -1
  78. package/web/.next/standalone/web/.next/server/app/index.segments/!KG1haW4p.segment.rsc +1 -1
  79. package/web/.next/standalone/web/.next/server/app/index.segments/_full.segment.rsc +1 -1
  80. package/web/.next/standalone/web/.next/server/app/index.segments/_head.segment.rsc +1 -1
  81. package/web/.next/standalone/web/.next/server/app/index.segments/_index.segment.rsc +1 -1
  82. package/web/.next/standalone/web/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  83. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_c9e3cd7b._.js → 2374f_05c00b91._.js} +1 -1
  84. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_de035f79._.js → 2374f_1fa4a79a._.js} +1 -1
  85. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_273991ba._.js → 2374f_39f76acc._.js} +1 -1
  86. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_8d018190._.js → 2374f_562d2f4f._.js} +1 -1
  87. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_7b421f78._.js → 2374f_6ced4caf._.js} +1 -1
  88. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_ec997752._.js → 2374f_800db4e3._.js} +1 -1
  89. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_2572135b._.js → 2374f_934cb548._.js} +1 -1
  90. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_5ee28d4c._.js → 2374f_aade2a6d._.js} +1 -1
  91. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_460c0d78._.js → 2374f_ac284eb3._.js} +1 -1
  92. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_a7457131._.js → 2374f_c272cbb4._.js} +1 -1
  93. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_06a5ea48._.js → 2374f_d118a207._.js} +1 -1
  94. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_df3c414e._.js → 2374f_e35df3d7._.js} +1 -1
  95. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_88cbeb7b._.js → 2374f_ef435bac._.js} +1 -1
  96. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_65b86b54._.js → 2374f_f661d73d._.js} +1 -1
  97. package/web/.next/standalone/web/.next/server/chunks/ssr/{[root-of-the-server]__a87e1c27._.js → [root-of-the-server]__8cdc7b0b._.js} +2 -2
  98. package/web/.next/standalone/web/.next/server/chunks/ssr/{[root-of-the-server]__c94aac98._.js → [root-of-the-server]__f44222d9._.js} +2 -2
  99. package/web/.next/standalone/web/.next/server/chunks/ssr/{web_b85931da._.js → web_0a13adb9._.js} +2 -2
  100. package/web/.next/standalone/web/.next/server/pages/404.html +1 -1
  101. package/web/.next/standalone/web/.next/server/pages/500.html +2 -2
  102. package/web/.next/standalone/web/.next/server/server-reference-manifest.js +1 -1
  103. package/web/.next/standalone/web/.next/server/server-reference-manifest.json +1 -1
  104. package/web/.next/standalone/web/.next/static/chunks/{9b4c4424a720586b.js → ca717ddd7c8f37e8.js} +2 -2
  105. package/web/.next/standalone/web/.next/static/static/chunks/{9b4c4424a720586b.js → ca717ddd7c8f37e8.js} +2 -2
  106. package/web/.next/standalone/web/src/components/ai-elements/search-tool.tsx +7 -9
  107. package/web/.next/static/chunks/{9b4c4424a720586b.js → ca717ddd7c8f37e8.js} +2 -2
  108. /package/web/.next/standalone/web/.next/static/{7rKMR1VNC_1_vH6S9H5aS → static/yfBGAcI8gI55lwQllPu-z}/_buildManifest.js +0 -0
  109. /package/web/.next/standalone/web/.next/static/{7rKMR1VNC_1_vH6S9H5aS → static/yfBGAcI8gI55lwQllPu-z}/_clientMiddlewareManifest.json +0 -0
  110. /package/web/.next/standalone/web/.next/static/{7rKMR1VNC_1_vH6S9H5aS → static/yfBGAcI8gI55lwQllPu-z}/_ssgManifest.js +0 -0
  111. /package/web/.next/standalone/web/.next/static/{static/7rKMR1VNC_1_vH6S9H5aS → yfBGAcI8gI55lwQllPu-z}/_buildManifest.js +0 -0
  112. /package/web/.next/standalone/web/.next/static/{static/7rKMR1VNC_1_vH6S9H5aS → yfBGAcI8gI55lwQllPu-z}/_clientMiddlewareManifest.json +0 -0
  113. /package/web/.next/standalone/web/.next/static/{static/7rKMR1VNC_1_vH6S9H5aS → yfBGAcI8gI55lwQllPu-z}/_ssgManifest.js +0 -0
  114. /package/web/.next/static/{7rKMR1VNC_1_vH6S9H5aS → yfBGAcI8gI55lwQllPu-z}/_buildManifest.js +0 -0
  115. /package/web/.next/static/{7rKMR1VNC_1_vH6S9H5aS → yfBGAcI8gI55lwQllPu-z}/_clientMiddlewareManifest.json +0 -0
  116. /package/web/.next/static/{7rKMR1VNC_1_vH6S9H5aS → yfBGAcI8gI55lwQllPu-z}/_ssgManifest.js +0 -0
@@ -1,7 +1,7 @@
1
1
  import { ModelMessage, streamText } from 'ai';
2
2
  import { S as Session, b as ToolExecution } from './schema-NcQknWCg.js';
3
3
  import { z } from 'zod';
4
- import { B as BashToolProgress, W as WriteFileProgress, S as SearchToolProgress } from './search-DALwmPRX.js';
4
+ import { B as BashToolProgress, W as WriteFileProgress, S as SearchToolProgress } from './search-CZsTAZ90.js';
5
5
 
6
6
  declare const ToolApprovalConfigSchema: z.ZodObject<{
7
7
  bash: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
@@ -131,6 +131,7 @@ declare const SparkcoderConfigSchema: z.ZodObject<{
131
131
  exclude?: string[] | undefined;
132
132
  }>>;
133
133
  }, "strip", z.ZodTypeAny, {
134
+ defaultModel: string;
134
135
  toolApprovals: {
135
136
  bash: boolean;
136
137
  write_file: boolean;
@@ -138,7 +139,6 @@ declare const SparkcoderConfigSchema: z.ZodObject<{
138
139
  load_skill: boolean;
139
140
  todo: boolean;
140
141
  };
141
- defaultModel: string;
142
142
  skills: {
143
143
  directory: string;
144
144
  additionalDirectories: string[];
@@ -154,8 +154,8 @@ declare const SparkcoderConfigSchema: z.ZodObject<{
154
154
  publicUrl?: string | undefined;
155
155
  };
156
156
  databasePath: string;
157
- approvalWebhook?: string | undefined;
158
157
  workingDirectory?: string | undefined;
158
+ approvalWebhook?: string | undefined;
159
159
  remoteServer?: {
160
160
  url?: string | undefined;
161
161
  authKey?: string | undefined;
@@ -169,6 +169,8 @@ declare const SparkcoderConfigSchema: z.ZodObject<{
169
169
  namespace?: string | undefined;
170
170
  } | undefined;
171
171
  }, {
172
+ defaultModel?: string | undefined;
173
+ workingDirectory?: string | undefined;
172
174
  toolApprovals?: {
173
175
  bash?: boolean | undefined;
174
176
  write_file?: boolean | undefined;
@@ -177,8 +179,6 @@ declare const SparkcoderConfigSchema: z.ZodObject<{
177
179
  todo?: boolean | undefined;
178
180
  } | undefined;
179
181
  approvalWebhook?: string | undefined;
180
- defaultModel?: string | undefined;
181
- workingDirectory?: string | undefined;
182
182
  skills?: {
183
183
  directory?: string | undefined;
184
184
  additionalDirectories?: string[] | undefined;
package/dist/index.d.ts CHANGED
@@ -1,11 +1,11 @@
1
- import { R as ResolvedConfig } from './index-BYOHniN4.js';
2
- export { A as Agent, a as AgentOptions, b as AgentRunOptions, c as AgentStreamResult, S as SparkcoderConfig, T as ToolApprovalConfig } from './index-BYOHniN4.js';
1
+ import { R as ResolvedConfig } from './index-CqKMYoJv.js';
2
+ export { A as Agent, a as AgentOptions, b as AgentRunOptions, c as AgentStreamResult, S as SparkcoderConfig, T as ToolApprovalConfig } from './index-CqKMYoJv.js';
3
3
  export { ServerOptions, createApp, startServer, stopServer } from './server/index.js';
4
4
  export { checkpointQueries, closeDatabase, fileBackupQueries, getDb, initDatabase, messageQueries, sessionQueries, skillQueries, todoQueries, toolExecutionQueries } from './db/index.js';
5
5
  import { F as FileBackup, C as Checkpoint } from './schema-NcQknWCg.js';
6
6
  export { a as Message, M as ModelMessage, S as Session, q as SessionConfig, f as Terminal, T as TodoItem, b as ToolExecution } from './schema-NcQknWCg.js';
7
7
  export { createLoadSkillTool, createReadFileTool, createTodoTool, createTools } from './tools/index.js';
8
- export { c as createBashTool, a as createWriteFileTool } from './search-DALwmPRX.js';
8
+ export { c as createBashTool, a as createWriteFileTool } from './search-CZsTAZ90.js';
9
9
  import 'ai';
10
10
  import 'zod';
11
11
  import 'hono/types';
package/dist/index.js CHANGED
@@ -3825,41 +3825,60 @@ var SearchSubagent = class extends Subagent {
3825
3825
  this.maxSteps = 10;
3826
3826
  }
3827
3827
  getSystemPrompt(options) {
3828
- return `You are an Explore agent for codebase discovery. Your job is to find relevant files, understand code structure, and return clear findings to the main agent.
3828
+ const contextBlock = options.additionalContext ? `
3829
+ ## Active Context (from devtools)
3830
+ ${options.additionalContext}
3829
3831
 
3830
- Working Directory: ${options.workingDirectory}
3832
+ Use this context to understand what the user is currently looking at. If they reference "this page", "this component", "this screen", etc., this context tells you which page/route they mean. Search for files related to this page/route first.
3833
+ ` : "";
3834
+ return `You are an Explore agent - a READ-ONLY file search and code analysis specialist. Your job is to find relevant files, understand code structure, and return clear findings to the main agent. You MUST NOT create, modify, or delete any files.
3831
3835
 
3832
- You have these tools available:
3833
- - grep: Search for patterns in files using ripgrep (rg)
3834
- - glob: Find files matching a pattern
3835
- - read_file: Read contents of a specific file
3836
- - list_dir: List directory contents
3837
- - semantic_search: Search the codebase by meaning (finds code related to a concept, not just exact text matches). Use this first when available!
3836
+ Working Directory: ${options.workingDirectory}
3837
+ ${contextBlock}
3838
+ ## Available Tools
3839
+ - **semantic_search**: Search the codebase by meaning (finds code related to a concept). Use this FIRST when available - it's the fastest way to explore.
3840
+ - **grep**: Search for exact patterns in files using ripgrep. Best for exact symbol/string matches.
3841
+ - **glob**: Find files matching a name pattern. Best for file discovery.
3842
+ - **read_file**: Read contents of a specific file. Use to examine code found in searches.
3843
+ - **list_dir**: List directory contents. Use to understand project structure.
3838
3844
 
3839
- ## Strategy
3845
+ ## Search Strategy
3840
3846
 
3841
3847
  1. **Start with semantic_search** if available - it finds code by meaning, which is the fastest way to explore
3842
- 2. Use grep for exact pattern matching and glob for file discovery
3843
- 3. Read key files to get actual code content
3844
- 4. Run searches in PARALLEL when possible to cover different angles
3848
+ 2. **Use grep** for exact symbol/string matches (function names, class names, imports)
3849
+ 3. **Use glob** for file discovery by name patterns
3850
+ 4. **Read key files** to get actual code content and understand context
3851
+ 5. **Run searches in PARALLEL** - make multiple tool calls at once to cover different angles simultaneously. This is critical for speed.
3852
+
3853
+ ### Tool Selection Guide
3854
+ - Know the exact name? Use **grep** (e.g. \`getUserById\`, \`class AuthService\`)
3855
+ - Exploring a concept? Use **semantic_search** (e.g. "how does authentication work")
3856
+ - Looking for files? Use **glob** (e.g. \`**/*.config.ts\`, \`**/auth/**\`)
3857
+ - Need file content? Use **read_file** with optional line ranges for large files
3845
3858
 
3846
3859
  ## CRITICAL: Your text output IS the result
3847
3860
 
3848
- The text you write in your responses is what gets sent back to the main agent as the summary. You MUST include:
3861
+ The text you write in your responses is what gets sent back to the main agent as the summary. The main agent has NO other context about what you found. You MUST include:
3849
3862
  - **Exact file paths** (relative to working directory)
3850
3863
  - **Line numbers** where relevant code is found
3851
3864
  - **Key code snippets** showing the important parts
3852
- - **How pieces connect together**
3865
+ - **How pieces connect together** - explain relationships between files
3853
3866
  - **What you actually found**, not just metadata
3854
3867
 
3855
3868
  ALWAYS end with a comprehensive summary of your findings. This summary IS the data that the main agent receives.
3856
3869
 
3870
+ ## Constraints
3871
+ - You are READ-ONLY. Do NOT attempt to create, write, edit, or delete files.
3872
+ - Be fast. Return results quickly. Don't over-explore when you've found what's needed.
3873
+ - Be thorough but efficient. If you find the answer in 2 searches, stop there.
3874
+ - No emojis in output.
3875
+
3857
3876
  ## Example good output:
3858
3877
  "Found the authentication system in src/auth/:
3859
3878
  - \`src/auth/provider.ts\` (lines 15-45): AuthProvider class handles JWT token validation
3860
3879
  - \`src/auth/middleware.ts\` (lines 8-20): Express middleware that checks auth headers
3861
3880
  - \`src/auth/hooks.ts\`: useAuth() hook used by React components
3862
- The auth flow: middleware validates JWT \u2192 provider decodes token \u2192 user context set"
3881
+ The auth flow: middleware validates JWT -> provider decodes token -> user context set"
3863
3882
 
3864
3883
  ## Example bad output:
3865
3884
  "I searched for auth and found some files." (too vague, no paths, no details)
@@ -4175,14 +4194,10 @@ The Explore agent will explore the codebase and return a summary of findings.
4175
4194
  This is more thorough than a simple grep because it can follow references and understand context.
4176
4195
  It also has access to semantic search to find code by meaning, not just text.
4177
4196
 
4178
- Examples:
4179
- - "Find all React components that use the useState hook"
4180
- - "Where is the authentication logic implemented?"
4181
- - "Find all API routes and their handlers"
4182
- - "Search for usages of the UserService class"`,
4197
+ CRITICAL: The explore agent has ZERO context. It cannot see the conversation, the user's message, devtools data, or any prior context. You MUST pass ALL relevant context via the "context" parameter. If the user selected a component (component name, file path, HTML, component stack) or there is a <devtools-context> block, you MUST copy that information into the "context" field verbatim. Without it the explore agent is searching blind.`,
4183
4198
  inputSchema: z10.object({
4184
4199
  query: z10.string().describe("What to search for. Be specific about what you're looking for."),
4185
- context: z10.string().optional().describe("Optional additional context about why you need this information.")
4200
+ context: z10.string().describe("ALL context the explore agent needs. It has ZERO context on its own - no conversation history, no devtools data, nothing. You MUST include: any selected component info (name, file path, HTML, component stack), any <devtools-context> block (page URL, path, viewport), and any other relevant details from the user message. The explore agent literally only sees the query and this context field.")
4186
4201
  }),
4187
4202
  execute: async ({ query, context }, toolOptions) => {
4188
4203
  const toolCallId = toolOptions.toolCallId || `explore_agent_${Date.now()}`;
@@ -4510,6 +4525,11 @@ Use this proactively after making code changes to catch errors early.
4510
4525
 
4511
4526
  **Choose the right search approach:**
4512
4527
 
4528
+ 0. **Use paths to your advantage \u2014 skip searching if you already have what you need.**
4529
+ - If the user selected a component via devtools and you can see the component name, file path, and/or line number, you ALREADY know where the code is. Just use \`read_file\` to read that file directly \u2014 do NOT call \`explore_agent\` to "find" something you already have the location of.
4530
+ - If you received a **page path** (e.g. \`/dashboard\`, \`/settings/profile\`), map it to the corresponding file in the project structure. In Next.js this means \`app/dashboard/page.tsx\`, \`app/settings/profile/page.tsx\`, etc. In other frameworks, check the routing convention (e.g. \`pages/\`, \`src/routes/\`). Use \`read_file\` on the mapped path directly.
4531
+ - If the file path doesn't exist or \`read_file\` fails, fall back to grep to locate it (e.g. \`rg "ComponentName" --type ts -l\`) since devtools paths can sometimes be slightly off or truncated.
4532
+ - Read up and down component trees when you have the file path or page path to find what you're looking for.
4513
4533
  1. **Use the \`explore_agent\` tool (Explore agent)** for:
4514
4534
  - Semantic/exploratory questions: "How does authentication work?", "Where is user data processed?"
4515
4535
  - Finding code by meaning or concept, not exact text
@@ -4519,6 +4539,13 @@ Use this proactively after making code changes to catch errors early.
4519
4539
 
4520
4540
  The Explore agent is a mini-agent that intelligently explores the codebase, reads relevant files, and returns a summary of what it found. It's best for understanding and discovery.
4521
4541
 
4542
+ **MANDATORY \u2014 The Explore agent has ZERO context.** It cannot see the conversation, the user's messages, devtools data, or anything else. The \`query\` and \`context\` fields are the ONLY information it receives. Every time you call \`explore_agent\`, you MUST populate the \`context\` field with ALL relevant information:
4543
+ - Copy the ENTIRE \`<devtools-context>\` block (page URL, path, viewport) if one exists in the user's message.
4544
+ - Copy ALL selected component info (component name, file path, line number, HTML snippet, component stack) if the user selected something via devtools.
4545
+ - Include any file paths, component names, or page names the user mentioned.
4546
+ - If you skip the \`context\` field, the explore agent is searching completely blind and will waste time guessing.
4547
+ - NEVER call \`explore_agent\` with only a \`query\` and no \`context\` when the user's message contains devtools or component information.
4548
+
4522
4549
  2. **Use direct commands (grep/rg, find)** for:
4523
4550
  - Exact string matches: \`rg "functionName"\`, \`rg "class MyClass"\`
4524
4551
  - Finding files by name: \`find . -name "*.config.ts"\`
@@ -4526,7 +4553,8 @@ Use this proactively after making code changes to catch errors early.
4526
4553
  - Counting occurrences or listing all matches
4527
4554
 
4528
4555
  **Examples:**
4529
- - "Where is the API authentication handled?" \u2192 Use \`explore_agent\` tool
4556
+ - User selected \`<LandingButton>\` at \`src/components/LandingButton.tsx:12\` \u2192 Just \`read_file("src/components/LandingButton.tsx")\`. Do NOT call explore_agent.
4557
+ - "Where is the API authentication handled?" (no file path given) \u2192 Use \`explore_agent\` tool
4530
4558
  - "Find all usages of getUserById" \u2192 Use \`rg "getUserById"\`
4531
4559
  - "How does the payment flow work?" \u2192 Use \`explore_agent\` tool
4532
4560
  - "Find files named config" \u2192 Use \`find . -name "*config*"\`