opencodekit 0.23.2 → 0.23.4

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 (51) hide show
  1. package/README.md +7 -14
  2. package/dist/index.js +1 -1
  3. package/dist/template/.opencode/AGENTS.md +92 -19
  4. package/dist/template/.opencode/README.md +43 -6
  5. package/dist/template/.opencode/artifacts/harness-workflows/plan.md +317 -0
  6. package/dist/template/.opencode/command/audit.md +65 -0
  7. package/dist/template/.opencode/command/init.md +19 -2
  8. package/dist/template/.opencode/command/research.md +67 -16
  9. package/dist/template/.opencode/command/ship.md +55 -5
  10. package/dist/template/.opencode/command/verify.md +5 -5
  11. package/dist/template/.opencode/opencode.json +12 -0
  12. package/dist/template/.opencode/plugin/README.md +0 -6
  13. package/dist/template/.opencode/plugin/codesearch.ts +730 -0
  14. package/dist/template/.opencode/plugin/memory/tools.ts +6 -6
  15. package/dist/template/.opencode/plugin/session-summary.ts +0 -2
  16. package/dist/template/.opencode/plugin/srcwalk.ts +22 -157
  17. package/dist/template/.opencode/skill/code-review-and-quality/SKILL.md +1 -1
  18. package/dist/template/.opencode/skill/debugging-and-error-recovery/SKILL.md +1 -1
  19. package/dist/template/.opencode/skill/deep-module-design/SKILL.md +1 -1
  20. package/dist/template/.opencode/skill/defense-in-depth/SKILL.md +0 -2
  21. package/dist/template/.opencode/skill/development-lifecycle/SKILL.md +11 -9
  22. package/dist/template/.opencode/skill/manifest.json +77 -0
  23. package/dist/template/.opencode/skill/planning-and-task-breakdown/SKILL.md +1 -1
  24. package/dist/template/.opencode/skill/srcwalk/SKILL.md +10 -13
  25. package/dist/template/.opencode/tool/grepsearch.ts +92 -103
  26. package/dist/template/.opencode/workflows/audit-pattern.md +51 -0
  27. package/dist/template/.opencode/workflows/batch-implement.md +82 -0
  28. package/dist/template/.opencode/workflows/deep-research.md +58 -0
  29. package/dist/template/.opencode/workflows/development-lifecycle-workflow.md +129 -0
  30. package/package.json +1 -1
  31. package/dist/template/.opencode/command/clarify.md +0 -46
  32. package/dist/template/.opencode/command/commit.md +0 -53
  33. package/dist/template/.opencode/command/design.md +0 -129
  34. package/dist/template/.opencode/command/explore.md +0 -169
  35. package/dist/template/.opencode/command/improve-architecture.md +0 -55
  36. package/dist/template/.opencode/command/pr.md +0 -148
  37. package/dist/template/.opencode/command/refactor.md +0 -65
  38. package/dist/template/.opencode/command/review-codebase.md +0 -128
  39. package/dist/template/.opencode/command/test.md +0 -66
  40. package/dist/template/.opencode/command/ui-review.md +0 -109
  41. package/dist/template/.opencode/opencodex-fast.jsonc +0 -3
  42. package/dist/template/.opencode/plugin/rtk.ts +0 -43
  43. package/dist/template/.opencode/skill/agent-teams/SKILL.md +0 -268
  44. package/dist/template/.opencode/skill/code-navigation/SKILL.md +0 -142
  45. package/dist/template/.opencode/skill/condition-based-waiting/SKILL.md +0 -135
  46. package/dist/template/.opencode/skill/condition-based-waiting/example.ts +0 -171
  47. package/dist/template/.opencode/skill/context-engineering/SKILL.md +0 -176
  48. package/dist/template/.opencode/skill/memory-system/SKILL.md +0 -147
  49. package/dist/template/.opencode/skill/structured-edit/SKILL.md +0 -191
  50. package/dist/template/.opencode/skill/ubiquitous-language/SKILL.md +0 -184
  51. package/dist/template/.opencode/skill/v0/SKILL.md +0 -158
@@ -114,23 +114,23 @@ Feedback mode examples:
114
114
  // --- Feedback mode: observation #id marked helpful/harmful ---
115
115
  if (args.id !== undefined && args.feedback !== undefined) {
116
116
  const obsId = Number(args.id);
117
- if (!Number.isInteger(obsId)) return "id must be an integer.";
117
+ if (!Number.isInteger(obsId)) return "id must be an integer.";
118
118
  const fb = String(args.feedback);
119
119
  if (fb !== "helpful" && fb !== "harmful")
120
- return 'feedback must be "helpful" or "harmful".';
120
+ return 'feedback must be "helpful" or "harmful".';
121
121
 
122
122
  const result = recordFeedback(obsId, fb, args.reason as string | undefined);
123
- if (!result.success) return `❌ ${result.error ?? "Failed to record feedback."}`;
123
+ if (!result.success) return `${result.error ?? "Failed to record feedback."}`;
124
124
 
125
125
  return [
126
- `✅ Observation #${obsId} marked as ${fb}.`,
126
+ `Observation #${obsId} marked as ${fb}.`,
127
127
  `- Feedback: ${result.helpfulCount} helpful / ${result.harmfulCount} harmful`,
128
128
  ].join("\n");
129
129
  }
130
130
 
131
131
  // --- Create mode: store a new observation ---
132
132
  if (!args.type || !args.title) {
133
- return "Provide type+title to create an observation, or id+feedback to give feedback.";
133
+ return "Provide type+title to create an observation, or id+feedback to give feedback.";
134
134
  }
135
135
 
136
136
  const obsType = args.type as ObservationType;
@@ -200,7 +200,7 @@ Feedback mode examples:
200
200
 
201
201
  const warnings =
202
202
  validation.issues.length > 0
203
- ? `\n⚠️ Warnings: ${validation.issues.map((i) => i.message).join("; ")}`
203
+ ? `\nWarnings: ${validation.issues.map((i) => i.message).join("; ")}`
204
204
  : "";
205
205
 
206
206
  return `${TYPE_ICONS[obsType] ?? "📌"} Observation #${id} stored [${obsType}] "${args.title}" (confidence: ${confidence}, source: ${source})${warnings}`;
@@ -454,9 +454,7 @@ export const SessionSummaryPlugin: Plugin = async ({ client, directory }) => {
454
454
  addRead(summary, normalized, "Code navigation");
455
455
  break;
456
456
  case "grep":
457
- case "srcwalk_search":
458
457
  case "glob":
459
- case "srcwalk_files":
460
458
  // Search tools — not tracking individual files
461
459
  break;
462
460
  }
@@ -5,9 +5,7 @@
5
5
  * Wraps available CLI tools (rg/grep, find, cat, ls) into unified srcwalk_* tools.
6
6
  *
7
7
  * Tools (matching pikit srcwalk extension surface):
8
- * - srcwalk_search — Search symbols/text/regex in codebase
9
8
  * - srcwalk_read — Read files with optional section/range
10
- * - srcwalk_files — Find files by glob pattern
11
9
  * - srcwalk_deps — Show imports and dependents for a file
12
10
  * - srcwalk_map — Directory tree overview
13
11
  * - srcwalk_callers — Reverse call graph (grep-based)
@@ -23,7 +21,6 @@ import path from "node:path";
23
21
  import { tool } from "@opencode-ai/plugin/tool";
24
22
  import type { Plugin } from "@opencode-ai/plugin";
25
23
 
26
- const BIN_RG = "rg";
27
24
  const TIMEOUT_MS = 15_000;
28
25
  const MAX_BUFFER = 5 * 1024 * 1024;
29
26
 
@@ -55,17 +52,25 @@ function run(
55
52
  }
56
53
  }
57
54
 
58
- function hasRg(): boolean {
59
- try {
60
- execFileSync(BIN_RG, ["--version"], { encoding: "utf-8", timeout: 1000, stdio: "ignore" });
61
- return true;
62
- } catch {
63
- return false;
64
- }
65
- }
66
-
67
55
  function plural(n: number, word: string): string {
68
- return `${n} ${word}${n !== 1 ? "s" : ""}`;
56
+ if (n === 1) return `${n} ${word}`;
57
+ if (
58
+ word.endsWith("ch") ||
59
+ word.endsWith("s") ||
60
+ word.endsWith("sh") ||
61
+ word.endsWith("x") ||
62
+ word.endsWith("z")
63
+ ) {
64
+ return `${n} ${word}es`;
65
+ }
66
+ if (
67
+ word.endsWith("y") &&
68
+ word.length > 1 &&
69
+ !["a", "e", "i", "o", "u"].includes(word[word.length - 2])
70
+ ) {
71
+ return `${n} ${word.slice(0, -1)}ies`;
72
+ }
73
+ return `${n} ${word}s`;
69
74
  }
70
75
 
71
76
  // ---------------------------------------------------------------------------
@@ -73,68 +78,6 @@ function plural(n: number, word: string): string {
73
78
  // ---------------------------------------------------------------------------
74
79
 
75
80
  const srcwalkTools = {
76
- // -----------------------------------------------------------------------
77
- // srcwalk_search: Search codebase
78
- // -----------------------------------------------------------------------
79
- srcwalk_search: tool({
80
- description: `Search for symbols, text, or regex patterns in code.\n\nUses ripgrep (rg) when available, falls back to grep.\nSupports symbol search (definitions first), content search, and regex.`,
81
- args: {
82
- query: tool.schema.string().describe("Search query or regex pattern"),
83
- scope: tool.schema.string().optional().describe("Subdirectory scope (default: project root)"),
84
- kind: tool.schema.string().optional().describe("Search type: text (default), regex, content"),
85
- context: tool.schema.number().optional().describe("Lines of context before/after each match"),
86
- limit: tool.schema.number().optional().describe("Max results (default: 30)"),
87
- },
88
- execute: async (args, context) => {
89
- const query = String(args.query ?? "").trim();
90
- if (!query) return "❌ query is required.";
91
- const scope = args.scope ? String(args.scope) : context.directory;
92
- const limit = Math.min(args.limit ?? 30, 100);
93
- const ctxLines = args.context ?? 0;
94
- const kind = String(args.kind ?? "text");
95
-
96
- const searchDir = path.resolve(context.directory, scope);
97
-
98
- if (hasRg()) {
99
- const rgArgs = ["--no-heading", "--line-number", "--color", "never"];
100
- rgArgs.push("--max-count", String(limit * 2));
101
- if (ctxLines > 0) {
102
- rgArgs.push("-C", String(ctxLines));
103
- }
104
- if (kind === "regex") {
105
- rgArgs.push("-E", "rust");
106
- } else {
107
- rgArgs.push("-F"); // literal
108
- }
109
- rgArgs.push(query, searchDir);
110
-
111
- const result = run(BIN_RG, rgArgs);
112
- if (result.code !== 0 && result.stderr) {
113
- // Try plain grep fallback
114
- } else {
115
- const lines = result.stdout.split("\n").filter(Boolean).slice(0, limit);
116
- if (lines.length === 0) return "No matches found.";
117
- return lines.join("\n");
118
- }
119
- }
120
-
121
- // Fallback to grep
122
- const grepArgs = ["-rn", "--color=never"];
123
- if (ctxLines > 0) grepArgs.push("-C", String(ctxLines));
124
- if (kind === "regex") {
125
- grepArgs.push("-E");
126
- } else {
127
- grepArgs.push("-F");
128
- }
129
- grepArgs.push(query, searchDir);
130
-
131
- const result = run("grep", grepArgs);
132
- const lines = result.stdout.split("\n").filter(Boolean).slice(0, limit);
133
- if (lines.length === 0) return "No matches found.";
134
- return lines.join("\n");
135
- },
136
- }),
137
-
138
81
  // -----------------------------------------------------------------------
139
82
  // srcwalk_read: Read files
140
83
  // -----------------------------------------------------------------------
@@ -233,84 +176,6 @@ const srcwalkTools = {
233
176
  },
234
177
  }),
235
178
 
236
- // -----------------------------------------------------------------------
237
- // srcwalk_files: Find files
238
- // -----------------------------------------------------------------------
239
- srcwalk_files: tool({
240
- description: `Find files by glob pattern. Returns matched file paths with size estimates, grouped by directory. Respects .gitignore.`,
241
- args: {
242
- pattern: tool.schema.string().describe("Glob pattern (e.g. '*.ts', 'src/**/*.ts')"),
243
- scope: tool.schema
244
- .string()
245
- .optional()
246
- .describe("Directory to search (default: project root)"),
247
- },
248
- execute: async (args, context) => {
249
- const pattern = String(args.pattern ?? "").trim();
250
- if (!pattern) return "❌ pattern is required.";
251
- const scopeDir = path.resolve(context.directory, args.scope ? String(args.scope) : "");
252
-
253
- // Use find with simple glob pattern
254
- const findArgs: string[] = [scopeDir, "-type", "f"];
255
-
256
- // Convert simple glob to -name pattern
257
- if (pattern.includes("**")) {
258
- // find handles ** naturally with -path
259
- findArgs.push("-path", `*/${pattern.replace(/\*\*/g, "*")}`);
260
- } else if (pattern.includes("*")) {
261
- findArgs.push("-name", pattern);
262
- } else if (pattern.includes(".")) {
263
- findArgs.push("-name", pattern);
264
- } else {
265
- findArgs.push("-name", `*${pattern}*`);
266
- }
267
-
268
- // Exclude common dirs
269
- for (const dir of [
270
- ".git",
271
- "node_modules",
272
- "dist",
273
- "build",
274
- "coverage",
275
- ".next",
276
- ".opencode",
277
- ]) {
278
- findArgs.push("-not", "-path", `*/${dir}/*`);
279
- }
280
-
281
- const result = run("find", findArgs);
282
- const files = result.stdout.split("\n").filter(Boolean).slice(0, 200);
283
-
284
- if (files.length === 0) return `No files matching "${pattern}" found.`;
285
-
286
- // Group by directory
287
- const groups: Record<string, string[]> = {};
288
- for (const f of files) {
289
- const dir = path.dirname(f);
290
- if (!groups[dir]) groups[dir] = [];
291
- groups[dir].push(path.basename(f));
292
- }
293
-
294
- const lines: string[] = [`# Files matching "${pattern}" (${plural(files.length, "file")})\n`];
295
- for (const [dir, files] of Object.entries(groups).sort()) {
296
- const relDir = path.relative(context.directory, dir) || ".";
297
- lines.push(`${relDir}/ (${plural(files.length, "file")})`);
298
- for (const f of files) {
299
- const fp = path.join(dir, f);
300
- try {
301
- const size = statSync(fp).size;
302
- const tokenEst = Math.ceil(size / 4);
303
- lines.push(` ${f} (~${tokenEst.toLocaleString()} tokens)`);
304
- } catch {
305
- lines.push(` ${f}`);
306
- }
307
- }
308
- lines.push("");
309
- }
310
- return lines.join("\n");
311
- },
312
- }),
313
-
314
179
  // -----------------------------------------------------------------------
315
180
  // srcwalk_deps: Import analysis
316
181
  // -----------------------------------------------------------------------
@@ -419,7 +284,7 @@ const srcwalkTools = {
419
284
  },
420
285
  execute: async (args, context) => {
421
286
  const symbol = String(args.symbol ?? "").trim();
422
- if (!symbol) return "symbol is required.";
287
+ if (!symbol) return "symbol is required.";
423
288
  const scopeDir = path.resolve(context.directory, args.scope ? String(args.scope) : "");
424
289
  const depth = Math.min(args.depth ?? 1, 3);
425
290
 
@@ -483,7 +348,7 @@ const srcwalkTools = {
483
348
  },
484
349
  execute: async (args, context) => {
485
350
  const symbol = String(args.symbol ?? "").trim();
486
- if (!symbol) return "symbol is required.";
351
+ if (!symbol) return "symbol is required.";
487
352
  const scopeDir = path.resolve(context.directory, args.scope ? String(args.scope) : "");
488
353
 
489
354
  // Find the function definition
@@ -598,7 +463,7 @@ const srcwalkTools = {
598
463
  },
599
464
  execute: async (args, context) => {
600
465
  const symbol = String(args.symbol ?? "").trim();
601
- if (!symbol) return "symbol is required.";
466
+ if (!symbol) return "symbol is required.";
602
467
  const scopeDir = path.resolve(context.directory, args.scope ? String(args.scope) : "");
603
468
 
604
469
  // Get callers
@@ -705,7 +570,7 @@ const srcwalkTools = {
705
570
  },
706
571
  execute: async (args, context) => {
707
572
  const symbol = String(args.symbol ?? "").trim();
708
- if (!symbol) return "symbol is required.";
573
+ if (!symbol) return "symbol is required.";
709
574
  const scopeDir = path.resolve(context.directory, args.scope ? String(args.scope) : "");
710
575
 
711
576
  // Count usages per directory
@@ -5,7 +5,7 @@ version: 1.0.0
5
5
  tags: [review, code-quality, verification]
6
6
  dependencies: [verification-before-completion]
7
7
  agent_types: [reviewer]
8
- tools: [srcwalk_search, srcwalk_deps, bash]
8
+ tools: [grep, srcwalk_deps, bash]
9
9
  ---
10
10
 
11
11
  # Code Review & Quality
@@ -5,7 +5,7 @@ version: 1.0.0
5
5
  tags: [debugging, workflow, verification]
6
6
  dependencies: [test-driven-development, verification-before-completion]
7
7
  agent_types: [worker, reviewer]
8
- tools: [bash, srcwalk_search, srcwalk_deps]
8
+ tools: [bash, grep, srcwalk_deps]
9
9
  ---
10
10
 
11
11
  # Debugging & Error Recovery
@@ -5,7 +5,7 @@ version: 1.0.0
5
5
  tags: [architecture, code-quality, ousterhout]
6
6
  dependencies: []
7
7
  agent_types: [planner, worker, reviewer]
8
- tools: [srcwalk_search, srcwalk_deps]
8
+ tools: [grep, srcwalk_deps]
9
9
  ---
10
10
 
11
11
  # Deep Module Design
@@ -172,5 +172,3 @@ All four layers were necessary. During testing, each layer caught bugs the other
172
172
  - Remove one validation layer — the next layer should still catch the error.
173
173
 
174
174
  ## See Also
175
-
176
- - **structured-edit** - Reliable read/verify/edit workflow when changing validation code across layers
@@ -1,8 +1,8 @@
1
1
  ---
2
2
  name: development-lifecycle
3
- description: Orchestrates the full feature development lifecycle from ideation through verification. Guides through phases (brainstorm → design → specify → plan → implement → verify) and loads appropriate sub-skills at each stage.
4
- version: 1.0.0
5
- tags: [workflow, planning]
3
+ description: Single-agent guide through the full feature development lifecycle (brainstorm → design → specify → plan → implement → verify). For parallel multi-agent execution, use the development-lifecycle-workflow instead.
4
+ version: 1.1.0
5
+ tags: [planning, single-agent]
6
6
  dependencies:
7
7
  [
8
8
  brainstorming,
@@ -17,25 +17,27 @@ dependencies:
17
17
 
18
18
  ---
19
19
 
20
- # Development Lifecycle Orchestration
20
+ # Development Lifecycle Guide (Single-Agent)
21
21
 
22
22
  ## When to Use
23
23
 
24
- - Starting a new feature, migration, or refactor and need the full end-to-end workflow
25
- - You want phase-by-phase guidance with the correct sub-skill at each stage
24
+ - Starting a new feature, migration, or refactor and need phase-by-phase guidance
25
+ - Working alone or with a single agent through the full lifecycle
26
+ - You want to load appropriate sub-skills at each stage
26
27
 
27
28
  ## When NOT to Use
28
29
 
30
+ - You need parallel multi-agent execution (use `development-lifecycle-workflow` instead)
29
31
  - You are already mid-phase and only need a specific sub-skill
30
32
  - The change is trivial and can skip the full lifecycle
31
33
 
32
34
  ## Overview
33
35
 
34
- This skill orchestrates the complete feature development workflow, guiding you through each phase and loading the appropriate sub-skills automatically.
36
+ This skill guides a single agent through the complete feature development workflow, loading the appropriate sub-skills at each phase.
35
37
 
36
- **Note:** For quick skill routing by intent, see the Intent Skill Mapping table in `AGENTS.md`. This skill is for full end-to-end orchestration when you need phase-by-phase guidance.
38
+ **Note:** For parallel multi-agent execution with specialized agents (scouts, reviewers, planners), use the `development-lifecycle-workflow` in `.opencode/workflows/`.
37
39
 
38
- **Use when:** Starting any new feature, migration, refactor, or significant change.
40
+ **Use when:** Starting any new feature, migration, refactor, or significant change with a single agent.
39
41
 
40
42
  **Announce at start:** "I'm using development-lifecycle to guide this work through all phases."
41
43
 
@@ -0,0 +1,77 @@
1
+ {
2
+ "version": 1,
3
+ "description": "OpenCodeKit skill tier classification. Tiers determine visibility and loading strategy.",
4
+ "tiers": {
5
+ "1": {
6
+ "label": "Essential",
7
+ "description": "Always available — referenced in AGENTS.md, agents should consider these first for every task. Small, general-purpose skills that shape execution discipline.",
8
+ "skills": [
9
+ "behavioral-kernel",
10
+ "defense-in-depth",
11
+ "incremental-implementation",
12
+ "verification-before-completion"
13
+ ]
14
+ },
15
+ "2": {
16
+ "label": "On-Demand",
17
+ "description": "Shipped with the template, loaded via `skill()` when relevant. Covers most domains — UI, testing, debugging, design, workflow, platform integration.",
18
+ "skills": [
19
+ "accessibility-audit",
20
+ "agent-code-quality-gate",
21
+ "api-and-interface-design",
22
+ "brainstorming",
23
+ "browser-testing-with-devtools",
24
+ "chrome-devtools",
25
+ "ci-cd-and-automation",
26
+ "cloudflare",
27
+ "code-cleanup",
28
+ "code-review-and-quality",
29
+ "core-data-expert",
30
+ "debugging-and-error-recovery",
31
+ "deep-module-design",
32
+ "deprecation-and-migration",
33
+ "design-system-audit",
34
+ "design-taste-frontend",
35
+ "development-lifecycle",
36
+ "documentation-and-adrs",
37
+ "fallow",
38
+ "figma",
39
+ "frontend-design",
40
+ "gemini-large-context",
41
+ "git-workflow-and-versioning",
42
+ "grill-me",
43
+ "high-end-visual-design",
44
+ "industrial-brutalist-ui",
45
+ "jira",
46
+ "minimalist-ui",
47
+ "mockup-to-code",
48
+ "opensrc",
49
+ "pdf-extract",
50
+ "performance-optimization",
51
+ "planning-and-task-breakdown",
52
+ "playwright",
53
+ "polar",
54
+ "react-best-practices",
55
+ "redesign-existing-projects",
56
+ "resend",
57
+ "root-cause-tracing",
58
+ "security-and-hardening",
59
+ "shipping-and-launch",
60
+ "source-driven-development",
61
+ "spec-driven-development",
62
+ "srcwalk",
63
+ "subagent-driven-development",
64
+ "supabase",
65
+ "supabase-postgres-best-practices",
66
+ "swift-concurrency",
67
+ "swiftui-expert-skill",
68
+ "test-driven-development",
69
+ "testing-anti-patterns",
70
+ "using-git-worktrees",
71
+ "vercel-deploy-claimable",
72
+ "webclaw",
73
+ "writing-skills"
74
+ ]
75
+ }
76
+ }
77
+ }
@@ -5,7 +5,7 @@ version: 1.0.0
5
5
  tags: [workflow, planning, agent-coordination]
6
6
  dependencies: [spec-driven-development]
7
7
  agent_types: [planner]
8
- tools: [TaskCreate, TaskUpdate, memory, srcwalk_search]
8
+ tools: [TaskCreate, TaskUpdate, memory, grep]
9
9
  ---
10
10
 
11
11
  # Planning & Task Breakdown
@@ -6,7 +6,7 @@ version: 2.1.0
6
6
  tags: [code-intelligence, search, cli, srcwalk]
7
7
  dependencies: []
8
8
  agent_types: [planner, worker, reviewer, explorer]
9
- tools: [bash, srcwalk_search, srcwalk_read, srcwalk_files, srcwalk_deps, srcwalk_map, srcwalk_callers, srcwalk_callees, srcwalk_flow, srcwalk_impact]
9
+ tools: [bash, srcwalk_read, srcwalk_deps, srcwalk_map, srcwalk_callers, srcwalk_callees, srcwalk_flow, srcwalk_impact]
10
10
  ---
11
11
 
12
12
  # Srcwalk — Code Navigation
@@ -41,9 +41,7 @@ Do not pipe, truncate, or summarize `srcwalk guide`.
41
41
 
42
42
  | Tool | Srcwalk command | Purpose |
43
43
  |---|---|---|
44
- | `srcwalk_search` | `srcwalk discover` / `srcwalk trace callers` | AST-aware symbol/content/regex/callers search |
45
44
  | `srcwalk_read` | `srcwalk <path>` | Smart file reading: outline or full with sections |
46
- | `srcwalk_files` | `srcwalk discover --as file` | Glob file finding with token estimates, grouped by dir |
47
45
  | `srcwalk_deps` | `srcwalk deps` + exact import scan | Blast-radius: importers + dep-aware dependents (v1.0.0) |
48
46
 
49
47
  ### Extended analysis tools
@@ -65,9 +63,9 @@ Do not pipe, truncate, or summarize `srcwalk guide`.
65
63
  | Jump to exact line | `srcwalk_read({ path: "file:42" })` |
66
64
  | Read a line range | `srcwalk_read({ path: "file:44-89" })` — v1.0.0 shortcut |
67
65
  | Read by symbol name | `srcwalk_read({ section: "symbolName" })` |
68
- | Find definition/usages/text/glob | `srcwalk_search` |
69
- | Find files by glob | `srcwalk_files` |
70
- | Multi-symbol search | `srcwalk_search({ query: "A, B, C" })` |
66
+ | Find patterns and symbols | `grep` (exact), `csearch` (multi-keyword) |
67
+ | Find files by glob | `glob` |
68
+ | Multi-symbol search | `grep({ pattern: "A|B|C" })` |
71
69
  | Who directly calls this? | `srcwalk_callers` |
72
70
  | Who reaches this transitively? | `srcwalk_callers({ depth: 2 })` |
73
71
  | What does this call? | `srcwalk_callees` |
@@ -82,7 +80,7 @@ Do not pipe, truncate, or summarize `srcwalk guide`.
82
80
 
83
81
  ```
84
82
  srcwalk_map({ scope: "." })
85
- srcwalk_search({ query: "likely_symbol", scope: "src" })
83
+ grep({ pattern: "likely_symbol", path: "src/" })
86
84
  srcwalk_read({ path: "src/file.ts:42" }) // jump to line
87
85
  srcwalk_read({ path: "src/file.ts:44-89" }) // range shortcut (v1.0.0)
88
86
  ```
@@ -100,9 +98,9 @@ Prefer outline/section reads before `full: true`.
100
98
  ### Find and drill into symbols
101
99
 
102
100
  ```
103
- srcwalk_search({ query: "handleAuth", scope: "src" })
104
- srcwalk_search({ query: "A, B, C", scope: "src" }) // multi-symbol
105
- srcwalk_search({ query: "handleAuth", expand: 2 }) // inline source
101
+ grep({ pattern: "handleAuth", path: "src/" })
102
+ grep({ pattern: "A|B|C", path: "src/" }) // multi-symbol
103
+ csearch({ query: "auth token login middleware" }) // multi-keyword chunk search
106
104
  ```
107
105
 
108
106
  ### Trace call graph
@@ -123,7 +121,7 @@ srcwalk_callees({ symbol: "handleAuth", depth: 2, scope: "src" }) // trans
123
121
  srcwalk_flow({ symbol: "handleAuth", scope: "src" })
124
122
  ```
125
123
 
126
- Use `srcwalk_search({ kind: "callers" })` for quick single-hop. Use `srcwalk_callers` when you need depth, filters, or aggregation.
124
+ Use `grep` for quick single-hop searches. Use `srcwalk_callers` when you need depth, filters, or aggregation.
127
125
 
128
126
  > Note: `--count-by` and `--depth` are mutually exclusive in `srcwalk_callers` — use one or the other, not both.
129
127
 
@@ -143,8 +141,7 @@ srcwalk_impact({ symbol: "handleAuth", scope: "src" }) // heuristic; follow up
143
141
 
144
142
  ## Critical Rules
145
143
 
146
- - **Do NOT** use built-in `read`/`grep`/`find` when srcwalk_* tools can answer
147
- - **Do NOT** re-read files already shown in expanded `srcwalk_search` results
144
+ - **Do NOT** use built-in `read`/`find` when srcwalk_* tools can answer; `grep` is preferred for text searches
148
145
  - `srcwalk_impact` is heuristic, not proof — verify with `srcwalk_callers` or exact reads
149
146
  - `srcwalk_flow` may collapse nested/fluent chains — drill with `srcwalk_callees({ detailed: true })` when inner calls matter
150
147
  - Follow `> Next:` footers in output — they suggest the best next command