Prompt Suggestion Implementation Status
Tracks the implementation status of the prompt suggestion (NES) feature across all packages.
Core Module (packages/core/src/followup/)
| Component | Status | Lines | Description |
|---|---|---|---|
followupState.ts | ✅ Done | ~230 | Framework-agnostic controller with timer/debounce |
suggestionGenerator.ts | ✅ Done | ~260 | LLM generation + 12 filter rules + forked query support |
forkedQuery.ts | ✅ Done | ~240 | CacheSafeParams + createForkedChat + runForkedQuery |
overlayFs.ts | ✅ Done | ~140 | Copy-on-write overlay filesystem |
speculationToolGate.ts | ✅ Done | ~150 | Tool boundary enforcement with AST shell parser |
speculation.ts | ✅ Done | ~540 | Speculation engine with pipelined suggestion + model override |
CLI Integration (packages/cli/)
| Component | Status | Description |
|---|---|---|
AppContainer.tsx | ✅ Done | Suggestion generation, speculation lifecycle, UI rendering |
InputPrompt.tsx | ✅ Done | Tab/Enter/Right Arrow acceptance, dismiss + abort |
Composer.tsx | ✅ Done | Props threading |
UIStateContext.tsx | ✅ Done | promptSuggestion + dismissPromptSuggestion |
useFollowupSuggestions.tsx | ✅ Done | React hook with telemetry + keystroke tracking |
settingsSchema.ts | ✅ Done | 3 feature flags + fastModel setting |
settings.schema.json | ✅ Done | VSCode settings schema |
WebUI Integration (packages/webui/)
| Component | Status | Description |
|---|---|---|
InputForm.tsx | ✅ Done | Tab/Enter/Right Arrow + explicitText submit |
useFollowupSuggestions.ts | ✅ Done | React hook with onOutcome support |
followup.ts | ✅ Done | Subpath entry |
components.css | ✅ Done | Ghost text styling |
vite.config.followup.ts | ✅ Done | Separate build config |
Telemetry (packages/core/src/telemetry/)
| Component | Status | Description |
|---|---|---|
PromptSuggestionEvent | ✅ Done | 10 fields |
SpeculationEvent | ✅ Done | 7 fields |
logPromptSuggestion() | ✅ Done | OpenTelemetry logger |
logSpeculation() | ✅ Done | OpenTelemetry logger |
Test Coverage
| Test File | Tests | Description |
|---|---|---|
followupState.test.ts | 14 | Controller timer, debounce, accept callback, onOutcome, clear |
suggestionGenerator.test.ts | 16 | All 12 filter rules + edge cases + false positives |
overlayFs.test.ts | 15 | COW write, read resolution, apply, cleanup, path traversal |
speculationToolGate.test.ts | 27 | Tool categories, approval mode, shell AST, path rewrite |
forkedQuery.test.ts | 6 | Cache params save/get/clear, deep clone, version detection |
speculation.test.ts | 7 | ensureToolResultPairing edge cases |
smoke.test.ts | 21 | Cross-module E2E: filter + overlay + toolGate + cache + pairing |
InputPrompt.test.tsx | 4 | Tab, Enter+submit, Right Arrow, completion guard |
Audit History
| Round | Issues Found | Issues Fixed |
|---|---|---|
| R1-R4 | 10 | 10 (rule engine → LLM, state simplification) |
| R5-R6 | 2 | 2 (Enter keybinding conflict, Right Arrow telemetry) |
| R7-R8 | 3 | 3 (WebUI telemetry, dead type, test coverage) |
| R9 | 0 | — (convergence) |
| R10-R11 | 1 | 1 (historyManager dep) |
| R12-R13 | 1 | 1 (evaluative regex word boundaries) |
| Phase 1+2 R1-R4 | 20+ | 20+ (permission bypass, overlay safety, race conditions) |
| Total | 37+ | 37+ |
Claude Code Alignment
| Feature | Alignment | Notes |
|---|---|---|
| Prompt text | 100% | Identical (brand name only) |
| 12 filter rules | 100%+ | \b word boundaries improvement |
| UI interaction (Tab/Enter/Right) | 100% | |
| Guard conditions | 100% | 13 checks |
| Telemetry | 100% | 10+7 fields |
| Cache sharing | ✅ | DashScope cache_control |
| Speculation | ✅ | COW overlay + tool gating |
| Pipelined suggestion | ✅ | Generated after speculation completes |
| State management | 100%+ | Controller pattern, Object.freeze |
Last updated on