flowseeker 0.1.7 → 0.1.9

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 (50) hide show
  1. package/.env.example +7 -0
  2. package/CHANGELOG.md +143 -108
  3. package/README.md +288 -221
  4. package/dist/chat/nativeChatParticipant.js +1 -1
  5. package/dist/cli/flowCommand.js +175 -0
  6. package/dist/cli/main.js +1810 -0
  7. package/dist/cli/mcpServer.js +7 -1
  8. package/dist/cli/runEvaluation.js +281 -2
  9. package/dist/config/defaultConfig.js +11 -1
  10. package/dist/config/env.js +118 -0
  11. package/dist/config/loadConfig.js +18 -1
  12. package/dist/config/loadConfigFromPath.js +3 -1
  13. package/dist/eval/accuracyV2.js +483 -0
  14. package/dist/eval/goldenTask.js +192 -0
  15. package/dist/extension.js +23 -0
  16. package/dist/framework/laravel.js +177 -0
  17. package/dist/gateway/embeddingProviders.js +852 -0
  18. package/dist/index/cacheStore.js +43 -0
  19. package/dist/index/configRouteDiscoveryProbe.js +288 -0
  20. package/dist/index/embeddingIndex.js +193 -0
  21. package/dist/index/graphIndex.js +460 -0
  22. package/dist/index/indexWatcher.js +86 -0
  23. package/dist/index/semanticChunkIndex.js +388 -0
  24. package/dist/index/structuredExtractor.js +303 -12
  25. package/dist/index/treeSitterExtractor.js +264 -0
  26. package/dist/index/vectorStore.js +41 -0
  27. package/dist/index/workspaceIndex.js +901 -26
  28. package/dist/mcp/mcpTools.js +1678 -2
  29. package/dist/pipeline/contextBlueprint.js +15 -2
  30. package/dist/pipeline/contextPack.js +3 -3
  31. package/dist/pipeline/deterministicReranker.js +358 -0
  32. package/dist/pipeline/evaluationMetrics.js +14 -2
  33. package/dist/pipeline/fileGroups.js +7 -1
  34. package/dist/pipeline/fileScanner.js +209 -12
  35. package/dist/pipeline/fusionTrace.js +149 -0
  36. package/dist/pipeline/llmReranker.js +151 -0
  37. package/dist/pipeline/nodeScan.js +102 -12
  38. package/dist/pipeline/ranker.js +875 -16
  39. package/dist/pipeline/retrievalFusion.js +41 -0
  40. package/dist/pipeline/roleRefinement.js +62 -0
  41. package/dist/pipeline/runHeadless.js +60 -5
  42. package/dist/pipeline/runPipeline.js +2 -2
  43. package/dist/pipeline/solvePacket.js +656 -43
  44. package/dist/pipeline/subsystem.js +21 -0
  45. package/dist/pipeline/taskUnderstanding.js +2 -2
  46. package/dist/ui/chatViewProvider.js +1 -1
  47. package/docs/demo-screenshot-checklist.md +86 -0
  48. package/docs/marketplace-copy.md +92 -0
  49. package/docs/mcp-onboarding.md +191 -0
  50. package/package.json +633 -561
@@ -217,8 +217,29 @@ function subsystemAlignmentScore(unit, profile) {
217
217
  if (matches.length > 0) {
218
218
  return 4 + Math.min(10, matches.length * 4);
219
219
  }
220
+ // Penalize files whose subsystem terms are clearly unrelated to the task
221
+ const hasClearDomainMismatch = unitTerms.length > 0 && taskTerms.length > 0 &&
222
+ !unitTerms.some((ut) => taskTerms.some((tt) => overlap3(ut, tt)));
223
+ if (hasClearDomainMismatch) {
224
+ return -16;
225
+ }
220
226
  return 0;
221
227
  }
228
+ function overlap3(a, b) {
229
+ if (a === b)
230
+ return true;
231
+ if (a.length < 3 || b.length < 3)
232
+ return false;
233
+ for (let i = 0; i <= a.length - 3; i++) {
234
+ if (b.includes(a.slice(i, i + 3)))
235
+ return true;
236
+ }
237
+ for (let i = 0; i <= b.length - 3; i++) {
238
+ if (a.includes(b.slice(i, i + 3)))
239
+ return true;
240
+ }
241
+ return false;
242
+ }
222
243
  function primarySubsystemFromUnits(units) {
223
244
  const counts = new Map();
224
245
  for (const unit of units) {
@@ -106,7 +106,7 @@ const lowSignalInstructionTerms = new Set([
106
106
  "function",
107
107
  "functionality"
108
108
  ]);
109
- function understandTask(task, config) {
109
+ async function understandTask(task, config, workspaceRoot) {
110
110
  const normalizedTask = (0, text_1.normalizeText)(task);
111
111
  const rawTokens = (0, text_1.splitIdentifier)(task);
112
112
  const literalCodeTerms = detectLiteralCodeTerms(task);
@@ -118,7 +118,7 @@ function understandTask(task, config) {
118
118
  const keywords = (0, text_1.uniq)([...literalCodeTerms, ...concepts, ...synonymTerms, ...actionTerms]).filter((term) => term.length > 1);
119
119
  const intent = detectIntent(normalizedTask);
120
120
  const negativeTerms = detectNegativeTerms(normalizedTask);
121
- const blueprint = (0, contextBlueprint_1.buildTaskBlueprint)({ intent: intent.intent, normalizedTask, concepts, actions, keywords, negativeTerms, confidence: intent.confidence });
121
+ const blueprint = await (0, contextBlueprint_1.buildTaskBlueprint)({ intent: intent.intent, normalizedTask, concepts, actions, keywords, negativeTerms, confidence: intent.confidence, workspaceRoot });
122
122
  const retrieval = (0, retrievalPlan_1.createRetrievalPlan)({ rawTask: task, normalizedTask, concepts, actions, keywords, blueprint }, config);
123
123
  return {
124
124
  rawTask: task,
@@ -1102,7 +1102,7 @@ class ChatViewProvider {
1102
1102
  }
1103
1103
  renderHtml(webview) {
1104
1104
  const nonce = getNonce();
1105
- const logoUri = webview.asWebviewUri(vscode.Uri.joinPath(this.context.extensionUri, "resources", "flowseeker-logo-vector-v2.svg"));
1105
+ const logoUri = webview.asWebviewUri(vscode.Uri.joinPath(this.context.extensionUri, "resources", "flowseeker-logo.png"));
1106
1106
  const providerOptions = aiProviders_1.AI_PROVIDER_DEFINITIONS.map((provider) => `<option value="${provider.id}">${escapeHtml(provider.label)}</option>`).join("");
1107
1107
  const providerMeta = JSON.stringify(Object.fromEntries(aiProviders_1.AI_PROVIDER_DEFINITIONS.map((provider) => [
1108
1108
  provider.id,
@@ -0,0 +1,86 @@
1
+ # FlowSeeker Demo And Screenshot Checklist
2
+
3
+ Use this checklist before refreshing landing-page, Marketplace, OpenVSX, npm,
4
+ or README screenshots. It is intentionally conservative: screenshots should show
5
+ current FlowSeeker output, not future-state features.
6
+
7
+ ## Source Of Truth
8
+
9
+ - Public proof audit: `.flowseeker/reports/phase08-8a-public-proof.json`
10
+ - Solve Packet proof: `.flowseeker/reports/phase07-7f-final-packet-gates.json`
11
+ - Performance proof: `.flowseeker/reports/phase06-6g-warm-query-performance.json`
12
+ - README: `README.md`
13
+ - MCP onboarding: `docs/mcp-onboarding.md`
14
+
15
+ ## Required Demo Scenes
16
+
17
+ 1. **VS Code retrieval flow**
18
+ - Show `@flowseeker /guide <task>`.
19
+ - Show focused context or Solve Packet output.
20
+ - Do not imply automatic code edits.
21
+
22
+ 2. **Solve Packet 3.0 structure**
23
+ - Show the role-separated sections:
24
+ Primary Edit Candidates, Read-Only Context, Tests/Verification,
25
+ Noise Risk, Missing Links.
26
+ - Include visible evidence reasons where possible.
27
+
28
+ 3. **MCP setup**
29
+ - Show one copy-pasteable config from `docs/mcp-onboarding.md`.
30
+ - Prefer Cursor or VS Code/Copilot because both are common MCP entry points.
31
+
32
+ 4. **Evidence-backed proof**
33
+ - Show the reproducible command block from README.
34
+ - Include report paths, not broad marketing claims.
35
+
36
+ ## Assets To Review
37
+
38
+ Current assets found under `landing/`:
39
+
40
+ - `landing/hero.png`
41
+ - `landing/dark.png`
42
+ - `landing/bench.png`
43
+ - `landing/compare.png`
44
+ - `landing/mobile.png`
45
+
46
+ Before public publishing, verify each image still matches current product output.
47
+ If an asset shows older UI, future-state graph expansion, default semantic search,
48
+ or unsupported parser claims, replace or remove it.
49
+
50
+ ## Claims Allowed In Captions
51
+
52
+ - "Focused codebase context before AI reasoning"
53
+ - "Solve Packet with edit candidates, read-only context, verification targets,
54
+ noise risk, and missing links"
55
+ - "Structured-regex parser for 13 languages"
56
+ - "MCP stdio support through `flowseeker-mcp`"
57
+ - "Cold scan under 2s medium / under 5s large for the benchmarked workspaces"
58
+ only when the Phase 06 report path is visible nearby
59
+
60
+ ## Claims To Avoid
61
+
62
+ - "AI-powered search" as a default behavior
63
+ - "Sub-second cold scan"
64
+ - "Semantic search by default"
65
+ - "Tree-sitter production accuracy"
66
+ - "Graph expansion in production"
67
+ - "Monorepo support"
68
+ - "Git history integration"
69
+ - "LSP integration"
70
+
71
+ ## Verification Commands
72
+
73
+ ```bash
74
+ npm.cmd run compile --silent
75
+ npm.cmd run test:manifest
76
+ node scripts/analyze-phase08-public-proof.js --out-md .flowseeker/reports/phase08-8a-public-proof.md --out-json .flowseeker/reports/phase08-8a-public-proof.json
77
+ ```
78
+
79
+ ## Public Publishing Gate
80
+
81
+ Public screenshots are ready only when:
82
+
83
+ - screenshots show current FlowSeeker output,
84
+ - every visible claim maps to the public proof audit,
85
+ - no blocked claim appears as a product capability,
86
+ - the README and marketplace copy use the same wording boundaries.
@@ -0,0 +1,92 @@
1
+ # FlowSeeker Marketplace Copy
2
+
3
+ This file is the evidence-backed copy source for VS Code Marketplace, OpenVSX,
4
+ and npm descriptions. Keep it aligned with `README.md` and the Phase 08 public
5
+ proof report.
6
+
7
+ ## One-Line Description
8
+
9
+ FlowSeeker prepares focused codebase context for AI coding agents before they
10
+ start reasoning.
11
+
12
+ ## Short Description
13
+
14
+ FlowSeeker scans your workspace, ranks relevant files with evidence reasons, and
15
+ returns a compact Solve Packet instead of sending the whole repository to an AI
16
+ agent.
17
+
18
+ ## Marketplace Summary
19
+
20
+ FlowSeeker helps AI coding agents start with the right codebase context. You
21
+ describe a task, and FlowSeeker prepares a focused Solve Packet with edit
22
+ candidates, read-only context, verification targets, noise risk warnings, and
23
+ missing link alerts.
24
+
25
+ It works as a VS Code extension, an MCP stdio server through `flowseeker-mcp`,
26
+ and a headless CLI path for reproducible evaluation.
27
+
28
+ ## Evidence-Backed Capability Bullets
29
+
30
+ - Solve Packet 3.0 with role-separated sections for edit candidates, read-only
31
+ context, tests/verification, noise risk, and missing links.
32
+ - Candidate Flow with numbered execution steps and task-aware purpose labels.
33
+ - Actionable Missing Links with slot-specific search hints.
34
+ - Runnable verification commands with separate evidence, reason, and confidence
35
+ metadata.
36
+ - Structured-regex parser for 13 languages.
37
+ - Optional MCP stdio setup for Cursor, Antigravity, Windsurf, Claude Desktop,
38
+ and VS Code/Copilot.
39
+ - 9 smoke tests passing on clean compile.
40
+ - Benchmark proof available under `.flowseeker/reports/`.
41
+
42
+ ## Honest Limitations
43
+
44
+ - FlowSeeker does not guarantee sub-second cold scan.
45
+ - FlowSeeker does not use AI/LLM-based ranking by default.
46
+ - Semantic search is optional and disabled by default.
47
+ - Tree-sitter parser support is available but disabled by default in public
48
+ benchmark claims.
49
+ - Graph expansion is disabled in production.
50
+ - Monorepo, git-history, and LSP integration are not public guarantees.
51
+
52
+ ## Reproducible Proof Commands
53
+
54
+ ```bash
55
+ npm.cmd run compile --silent
56
+ npm.cmd run test:manifest
57
+ node scripts/analyze-phase08-public-proof.js --out-md .flowseeker/reports/phase08-8a-public-proof.md --out-json .flowseeker/reports/phase08-8a-public-proof.json
58
+ ```
59
+
60
+ ## Copy Notes By Surface
61
+
62
+ ### VS Code Marketplace
63
+
64
+ Use the one-line description plus the marketplace summary. Mention Native VS
65
+ Code Chat and the FlowSeeker sidebar only as user surfaces. Keep the blocked
66
+ claims out of feature bullets.
67
+
68
+ ### OpenVSX
69
+
70
+ Use the same copy as VS Code Marketplace. Add that the extension can be used by
71
+ VS Code-compatible editors where the extension host supports the required APIs.
72
+
73
+ ### npm
74
+
75
+ Lead with MCP:
76
+
77
+ ```text
78
+ npx -p flowseeker flowseeker-mcp --workspace <path-to-repo>
79
+ ```
80
+
81
+ Then link to `docs/mcp-onboarding.md` for client-specific JSON snippets.
82
+
83
+ ## Do Not Use
84
+
85
+ - "AI-powered code search"
86
+ - "Sub-second search"
87
+ - "Production-ready tree-sitter accuracy"
88
+ - "Semantic search by default"
89
+ - "Understands your whole repo"
90
+ - "Monorepo-ready"
91
+ - "Uses git history"
92
+ - "Uses LSP"
@@ -0,0 +1,191 @@
1
+ # FlowSeeker MCP Onboarding
2
+
3
+ FlowSeeker provides a standalone MCP (Model Context Protocol) server. Your IDE or AI client sends a task description; FlowSeeker scans your project, ranks relevant files, and returns a compact **Solve Packet** -- not the entire repository.
4
+
5
+ ## Prerequisites
6
+
7
+ - Node.js 18 or later
8
+ - FlowSeeker npm package (installed or via `npx`)
9
+ - A workspace path (any directory with source files)
10
+
11
+ ## Quick Start
12
+
13
+ ```bash
14
+ # Run without installing
15
+ npx -p flowseeker flowseeker-mcp --workspace /path/to/your/repo
16
+
17
+ # Or install globally
18
+ npm i -g flowseeker
19
+ flowseeker mcp --workspace /path/to/your/repo
20
+ flowseeker-mcp --workspace /path/to/your/repo
21
+
22
+ # Short aliases
23
+ fs-mcp --workspace /path/to/your/repo
24
+ flowseeker guide "Fix checkout webhook retry"
25
+ flowseeker auto "Add CSV export with tests"
26
+ fs-guide "Fix checkout webhook retry"
27
+ fs-auto "Add CSV export with tests"
28
+ fs-files "Find the auth middleware"
29
+ ```
30
+
31
+ `flowseeker mcp`, `flowseeker-mcp`, and `fs-mcp` start the same MCP server. `flowseeker guide`, `flowseeker auto`, `fs-guide`, and `fs-auto` are direct CLI helpers for Claude Code/Codex style terminal workflows.
32
+
33
+ ### Claude Code
34
+
35
+ From the repository you want Claude Code to work on:
36
+
37
+ ```bash
38
+ npm i -g flowseeker
39
+ claude mcp add flowseeker -- flowseeker mcp --workspace .
40
+ ```
41
+
42
+ Direct prompt workflow without MCP:
43
+
44
+ ```bash
45
+ flowseeker auto "Fix checkout webhook retry" --out .flowseeker/agent-prompt.md
46
+ ```
47
+
48
+ ### Optional Semantic Retrieval
49
+
50
+ FlowSeeker works without embeddings by default. To enable hosted semantic retrieval:
51
+
52
+ ```bash
53
+ # Jina quick preset (recommended)
54
+ flowseeker semantic init --jina
55
+
56
+ # Generic OpenAI-compatible path
57
+ flowseeker semantic init --openai-compatible
58
+ ```
59
+
60
+ For non-Jina providers, edit `.flowseeker/config.json` after init:
61
+ - `semanticBaseUrl` -- your provider's endpoint
62
+ - `semanticModel` -- the embedding model name (must match your provider)
63
+ - `semanticApiKeyEnv` -- env var holding the key
64
+
65
+ The API key still belongs in `.env`. Jina is a preset/recommendation, not a requirement.
66
+
67
+ Verify setup:
68
+
69
+ ```bash
70
+ flowseeker semantic check --test
71
+ ```
72
+
73
+ If `flowseeker semantic check` says `incomplete_config`, configure `semanticModel` (and optionally `semanticBaseUrl`) in `.flowseeker/config.json` before testing.
74
+
75
+ If `flowseeker semantic check` says `disabled`, MCP scans will not call the embedding provider.
76
+
77
+ ### Verify Installation
78
+
79
+ ```bash
80
+ npx -p flowseeker flowseeker-mcp --help
81
+ npx -p flowseeker flowseeker-mcp --version
82
+ ```
83
+
84
+ ### Local Development (after clone + compile)
85
+
86
+ ```bash
87
+ npm.cmd run compile --silent
88
+ node dist/cli/mcpServer.js --workspace /path/to/your/repo
89
+ ```
90
+
91
+ ## IDE Configuration
92
+
93
+ Copy the JSON snippet for your IDE into its MCP configuration file.
94
+
95
+ ### Cursor
96
+
97
+ Config path: `~/.cursor/mcp.json` (macOS/Linux) or `%USERPROFILE%\.cursor\mcp.json` (Windows). Project-local: `.cursor/mcp.json`.
98
+
99
+ ```json
100
+ {
101
+ "mcpServers": {
102
+ "flowseeker": {
103
+ "command": "npx",
104
+ "args": ["-p", "flowseeker", "flowseeker-mcp", "--workspace", "<path-to-repo>"]
105
+ }
106
+ }
107
+ }
108
+ ```
109
+
110
+ ### Antigravity
111
+
112
+ Config path: `~/.gemini/antigravity/mcp_config.json` (macOS) or `%USERPROFILE%\.gemini\antigravity\mcp_config.json` (Windows).
113
+
114
+ ```json
115
+ {
116
+ "mcpServers": {
117
+ "flowseeker": {
118
+ "command": "npx",
119
+ "args": ["-p", "flowseeker", "flowseeker-mcp", "--workspace", "<path-to-repo>"]
120
+ }
121
+ }
122
+ }
123
+ ```
124
+
125
+ ### Windsurf
126
+
127
+ Config path: `~/.codeium/windsurf/mcp_config.json` (macOS) or `%USERPROFILE%\.codeium\windsurf\mcp_config.json` (Windows).
128
+
129
+ ```json
130
+ {
131
+ "mcpServers": {
132
+ "flowseeker": {
133
+ "command": "npx",
134
+ "args": ["-p", "flowseeker", "flowseeker-mcp", "--workspace", "<path-to-repo>"]
135
+ }
136
+ }
137
+ }
138
+ ```
139
+
140
+ ### Claude Desktop
141
+
142
+ Config path: `claude_desktop_config.json` (see Claude Desktop docs for OS-specific path).
143
+
144
+ ```json
145
+ {
146
+ "mcpServers": {
147
+ "flowseeker": {
148
+ "command": "npx",
149
+ "args": ["-p", "flowseeker", "flowseeker-mcp", "--workspace", "<path-to-repo>"]
150
+ }
151
+ }
152
+ }
153
+ ```
154
+
155
+ ### VS Code / GitHub Copilot
156
+
157
+ Config path: `.vscode/mcp.json` in your project root. Uses root key `servers` (not `mcpServers`).
158
+
159
+ ```json
160
+ {
161
+ "servers": {
162
+ "flowseeker": {
163
+ "command": "npx",
164
+ "args": ["-p", "flowseeker", "flowseeker-mcp", "--workspace", "<path-to-repo>"]
165
+ }
166
+ }
167
+ }
168
+ ```
169
+
170
+ ## How It Works
171
+
172
+ 1. Your IDE sends `flowseeker_retrieve` with a task description.
173
+ 2. FlowSeeker scans the workspace, ranks evidence, and builds a Solve Packet.
174
+ 3. The Solve Packet returns to the client: edit candidates, read-only context, verification targets, noise risk, and missing links.
175
+ 4. The client model answers in your native chat with focused context instead of searching the whole repository.
176
+
177
+ ## Available Tools
178
+
179
+ | Tool | Purpose |
180
+ |------|---------|
181
+ | `flowseeker_retrieve` | Full Solve Packet with ranked evidence and focused context |
182
+ | `flowseeker_guide` | Agent guidance: relevant files, edit candidates, verification steps |
183
+ | `flowseeker_auto` | Reviewable implementation-plan prompt |
184
+ | `flowseeker_files` | Lightweight top-ranked file list |
185
+
186
+ ## Caveats
187
+
188
+ - Config paths vary by OS and client version. Check your IDE's MCP documentation for the exact path.
189
+ - The host client controls autocomplete behavior and tool UI. Some clients show tools/prompts after selecting the server; others insert a server mention like `@mcp:flowseeker:`.
190
+ - FlowSeeker supplies context from your codebase. The client model performs reasoning over that context. FlowSeeker does not generate code, make edits, or run AI models.
191
+ - The structured-regex parser supports 13 languages. Semantic search is optional and disabled by default. See the [README](../README.md) for evidence-backed capabilities and known limitations.