-
Notifications
You must be signed in to change notification settings - Fork 0
feat: add IIntentExtractor interface and config fields (GIT-97) #65
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Changes from all commits
Commits
Show all changes
2 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,72 @@ | ||
| /** | ||
| * IIntentExtractor | ||
| * | ||
| * Interface for extracting searchable keywords from user prompts. | ||
| * Used by the prompt-submit hook to query memories with intent-based filtering. | ||
| */ | ||
|
|
||
| /** | ||
| * Input to the intent extraction service. | ||
| */ | ||
| export interface IIntentExtractorInput { | ||
| /** The user's prompt text. */ | ||
| readonly prompt: string; | ||
| } | ||
|
|
||
| /** | ||
| * Reason for skipping intent extraction. | ||
| */ | ||
| export type IntentSkipReason = | ||
| | 'too_short' | ||
| | 'confirmation' | ||
| | 'no_llm' | ||
| | 'llm_skip' | ||
| | 'timeout' | ||
| | 'error'; | ||
|
|
||
| /** | ||
| * Result of intent extraction. | ||
| * | ||
| * This is a discriminated union keyed by `skipped`: | ||
| * - When `skipped` is `true`, `intent` is always `null` and `reason` is defined. | ||
| * - When `skipped` is `false`, `intent` may be a string, and `reason` is undefined. | ||
| */ | ||
| export type IIntentExtractorResult = | ||
| | { | ||
| /** Whether extraction was skipped. */ | ||
| readonly skipped: true; | ||
| /** Always null when extraction is skipped. */ | ||
| readonly intent: null; | ||
| /** | ||
| * Reason for skipping. | ||
| * - 'too_short': Prompt has fewer words than minWords threshold. | ||
| * - 'confirmation': Prompt is a simple confirmation (yes/no/ok/etc). | ||
| * - 'no_llm': No LLM client available. | ||
| * - 'llm_skip': LLM returned SKIP (no extractable keywords). | ||
| * - 'timeout': LLM call timed out. | ||
| * - 'error': LLM call failed with error. | ||
| */ | ||
| readonly reason: IntentSkipReason; | ||
| } | ||
| | { | ||
| /** Whether extraction was skipped. */ | ||
| readonly skipped: false; | ||
| /** Extracted keywords for memory search. */ | ||
| readonly intent: string; | ||
| /** Reason is not present when extraction succeeded. */ | ||
| readonly reason?: undefined; | ||
| }; | ||
|
|
||
| /** | ||
| * Service for extracting searchable keywords from user prompts. | ||
| */ | ||
| export interface IIntentExtractor { | ||
| /** | ||
| * Extract searchable keywords from a user prompt. | ||
| * Returns keywords suitable for memory search, or null if skipped. | ||
| * | ||
| * @param input - The prompt to extract intent from. | ||
| * @returns Extracted keywords or skip indicator. | ||
| */ | ||
| extract(input: IIntentExtractorInput): Promise<IIntentExtractorResult>; | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The comment on
surfaceContexthad "Reserved — not yet wired to handler" removed, but these new fields (extractIntent,intentTimeout,minWords,memoryLimit) are also not yet wired to PromptSubmitHandler. For consistency with other config fields in this file, consider marking these as "Reserved — not yet wired to handler" until the implementation is added. This follows the pattern used forrecordPromptson line 28 and other fields likememoryLimitin ISessionStartConfig on line 10.