Skip to content
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

Dev 0.0.8 #156

Merged
merged 23 commits into from
Jan 16, 2025
Merged
Show file tree
Hide file tree
Changes from 22 commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
6fb1b36
feat(chat): enhance system message handling and response structure
crazygo Jan 14, 2025
9dd1c91
chore(husky): remove unused commit-msg.zh file
crazygo Jan 14, 2025
d44d96c
feat(chat-presets): enhance system message with context analysis and …
crazygo Jan 14, 2025
988b568
feat(tool-dropdown): implement system presets management and enhance …
crazygo Jan 14, 2025
cde2964
feat(ask-panel, tool-dropdown): integrate SystemPromptDropdown funct…
crazygo Jan 14, 2025
84e087b
feat(system-prompt-dropdown): enhance dropdown functionality and styling
crazygo Jan 14, 2025
32baf39
feat(ModelDropdown): refactor model fetching and enhance logging
crazygo Jan 14, 2025
84483b7
feat(dropdowns): refactor ToolDropdown and ModelDropdown to use BaseD…
crazygo Jan 14, 2025
e8e75b8
feat(ask-panel, system-prompt-dropdown): integrate SystemPromptDropdo…
crazygo Jan 14, 2025
a412e01
feat(dropdowns): enhance event handling and status management in drop…
crazygo Jan 14, 2025
e9fedb2
fix(BaseDropdown): adjust button and item layout for improved usability
crazygo Jan 14, 2025
8ffb9d7
refactor(dropdowns): remove console logs and enhance event handling
crazygo Jan 14, 2025
c5f9583
refactor(dropdowns): streamline event handling and remove focus calls
crazygo Jan 14, 2025
249cf85
fix(tool-preview): adjust tooltip positioning logic and add debugging…
crazygo Jan 14, 2025
07acc8e
fix(ask-panel): restore input focus behavior in AskPanel component
crazygo Jan 14, 2025
5241bdf
chore: update package version and enhance BaseDropdown display logic
crazygo Jan 14, 2025
fe099cb
refactor(dropdowns): enhance dropdown components with improved positi…
crazygo Jan 15, 2025
1c3510a
chore: update .gitignore to include .vscode and .cursor files
crazygo Jan 15, 2025
cd0d51f
refactor(logging): comment out console logs in AskPanel and useToolPr…
crazygo Jan 15, 2025
898e7d2
refactor(BaseDropdown): enhance dropdown button and tooltip functiona…
crazygo Jan 15, 2025
24d8a86
refactor(dropdowns): unify tool and model selection logic across comp…
crazygo Jan 15, 2025
6ac13a9
chore: bump package version to 0.0.8 in package.json
crazygo Jan 15, 2025
3516b48
feat(ask-panel): implement tool fetching logic and enhance ToolDropdo…
crazygo Jan 15, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,5 @@ public/manifest.json
.aider*
*.code-workspace
.shire
.vscode
.vscode
.cursor
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "askman-chrome-extension",
"version": "0.0.6",
"description": "chrome extension boilerplate",
"version": "0.0.8",
"description": "Askman is an open-source browser extension that connects AI to web pages",
"license": "GPL-3.0-only",
"repository": {
"type": "git",
Expand Down
218 changes: 206 additions & 12 deletions src/assets/conf/chat-presets.toml

Large diffs are not rendered by default.

11 changes: 8 additions & 3 deletions src/chat/chat.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,7 @@ export class ChatCoreContext implements ChatCoreInterface {
private async initSystemMessage() {
try {
const systemPrompt = await StorageManager.getSystemPrompt();
this.history.push(
new SystemInvisibleMessage(systemPrompt)
);
this.history.push(new SystemInvisibleMessage(systemPrompt));
} catch (e) {
console.error('Failed to initialize system message:', e);
}
Expand Down Expand Up @@ -120,6 +118,13 @@ export class ChatCoreContext implements ChatCoreInterface {
quotes: QuoteContext[],
userPrompt: null | string,
) {
// Update system message before each request
const systemPrompt = await StorageManager.getSystemPrompt();
// Remove old system message if exists
this.history = this.history.filter(msg => !(msg instanceof SystemInvisibleMessage));
// Add new system message
this.history.unshift(new SystemInvisibleMessage(systemPrompt));

if (!userPrompt) {
userPrompt = '';
}
Expand Down
81 changes: 58 additions & 23 deletions src/components/ask-panel.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import {
import QuoteDropdown from './ask-quotedropdown';
import KeyBinding from './icons';
import configStorage from '../shared/storages/configStorage';
import SystemPromptDropdown from './system-prompt-dropdown';

interface AskPanelProps extends React.HTMLAttributes<HTMLDivElement> {
code: string;
Expand Down Expand Up @@ -58,8 +59,9 @@ function AskPanel(props: AskPanelProps) {
const handleClickOutside = useCallback((event: MouseEvent) => {
if (panelRef.current && !panelRef.current.contains(event.target as Node)) {
setIsToolDropdownOpen(false);
// setIsQuoteDropdownOpen(false);
setIsQuoteDropdownOpen(false);
setIsModelDropdownOpen(false);
setIsSystemPromptDropdownOpen(false);
}
}, []);

Expand Down Expand Up @@ -87,24 +89,34 @@ function AskPanel(props: AskPanelProps) {
const [isModelDropdownOpen, setIsModelDropdownOpen] = useState(false);
const [dropdownPosition, setDropdownPosition] = useState({ left: 0, top: 0 });
const [hoveredQuoteIndex, setHoveredQuoteIndex] = useState<number | null>(null);
const [isSystemPromptDropdownOpen, setIsSystemPromptDropdownOpen] = useState(false);

const showToolDropdown = () => {
// toolButtonRef.current?.click();
console.log('isToolDropdownOpen = ' + isToolDropdownOpen, 'set to true');
// console.log('isToolDropdownOpen = ' + isToolDropdownOpen, 'set to true');
setIsToolDropdownOpen(true);
setIsQuoteDropdownOpen(false);
setIsModelDropdownOpen(false);
setIsSystemPromptDropdownOpen(false);
};
const showQuoteDropdown = () => {
setIsQuoteDropdownOpen(true);
setIsToolDropdownOpen(false);
setIsModelDropdownOpen(false);
setIsSystemPromptDropdownOpen(false);
};
const showModelDropdown = () => {
setIsModelDropdownOpen(true);
setIsToolDropdownOpen(false);
setIsQuoteDropdownOpen(false);
setIsSystemPromptDropdownOpen(false);
};
const showSystemPromptDropdown = () => {
setIsSystemPromptDropdownOpen(true);
setIsToolDropdownOpen(false);
setIsQuoteDropdownOpen(false);
setIsModelDropdownOpen(false);
};

// chat list ref
// const chatListRef = useRef<HTMLDivElement>(null);

Expand Down Expand Up @@ -140,6 +152,9 @@ function AskPanel(props: AskPanelProps) {
const updateQuoteDropdownStatus = (status: boolean) => {
setIsQuoteDropdownOpen(status);
};
const updateSystemPromptDropdownStatus = (status: boolean) => {
setIsSystemPromptDropdownOpen(status);
};

useEffect(() => {
QuoteAgent.getQuoteByDocument(window.location.href, document).then(quoteContext => {
Expand Down Expand Up @@ -205,10 +220,14 @@ function AskPanel(props: AskPanelProps) {
// 检测 Command+K (Mac) 或 Ctrl+K (Windows/Linux)
if ((e.metaKey || e.ctrlKey) && e.key === 'k') {
// e.preventDefault();
if (!isToolDropdownOpen) {
if (!isToolDropdownOpen && !isModelDropdownOpen && !isSystemPromptDropdownOpen) {
showToolDropdown();
} else if (isToolDropdownOpen) {
showModelDropdown();
} else if (isModelDropdownOpen) {
showSystemPromptDropdown();
} else if (isSystemPromptDropdownOpen) {
showToolDropdown();
}

e.stopPropagation();
Expand All @@ -217,18 +236,26 @@ function AskPanel(props: AskPanelProps) {

// 检测左右方向键
if (e.key === 'ArrowLeft' || e.key === 'ArrowRight') {
// console.log('[ask-panel] listened key press, arrow left or right', e.target, e.currentTarget);
if (isToolDropdownOpen || isModelDropdownOpen) {
if (isToolDropdownOpen || isModelDropdownOpen || isSystemPromptDropdownOpen) {
e.preventDefault();
e.stopPropagation();
if (isToolDropdownOpen && e.key === 'ArrowRight') {
showModelDropdown();
} else if (isModelDropdownOpen && e.key === 'ArrowRight') {
showToolDropdown();
} else if (isToolDropdownOpen && e.key === 'ArrowLeft') {
showModelDropdown();
} else if (isModelDropdownOpen && e.key === 'ArrowLeft') {
showToolDropdown();

if (e.key === 'ArrowRight') {
if (isToolDropdownOpen) {
showModelDropdown();
} else if (isModelDropdownOpen) {
showSystemPromptDropdown();
} else if (isSystemPromptDropdownOpen) {
showToolDropdown();
}
} else if (e.key === 'ArrowLeft') {
if (isToolDropdownOpen) {
showSystemPromptDropdown();
} else if (isModelDropdownOpen) {
showToolDropdown();
} else if (isSystemPromptDropdownOpen) {
showModelDropdown();
}
}
return;
}
Expand All @@ -239,17 +266,22 @@ function AskPanel(props: AskPanelProps) {
return () => {
document.removeEventListener('keydown', handleKeyDown);
};
}, [isToolDropdownOpen, isQuoteDropdownOpen, isModelDropdownOpen]);
}, [isToolDropdownOpen, isQuoteDropdownOpen, isModelDropdownOpen, isSystemPromptDropdownOpen]);

// Add this new useEffect to focus on input when menus are closed
useEffect(() => {
if (!isToolDropdownOpen && !isQuoteDropdownOpen && !isModelDropdownOpen && inputRef.current) {
if (
!isToolDropdownOpen &&
!isQuoteDropdownOpen &&
!isModelDropdownOpen &&
!isSystemPromptDropdownOpen &&
inputRef.current
) {
setTimeout(() => {
// console.log('focus on input because menus are closed');
inputRef.current.focus();
}, 33);
}
}, [isToolDropdownOpen, isQuoteDropdownOpen, isModelDropdownOpen]);
}, [isToolDropdownOpen, isQuoteDropdownOpen, isModelDropdownOpen, isSystemPromptDropdownOpen]);

const addQuote = (newQuote: QuoteContext) => {
setInitQuotes(prevQuotes => [...prevQuotes, newQuote]);
Expand Down Expand Up @@ -316,7 +348,7 @@ function AskPanel(props: AskPanelProps) {
// 在组件加载时读取存储的模型
useEffect(() => {
const loadSelectedModel = async () => {
const savedModel = await configStorage.getSelectedModel();
const savedModel = await configStorage.getCurrentModel();
setSelectedModel(savedModel);
};
loadSelectedModel();
Expand Down Expand Up @@ -535,13 +567,16 @@ function AskPanel(props: AskPanelProps) {
/>
</div>
<div className="flex">
<SystemPromptDropdown
className="relative inline-block text-left"
statusListener={updateSystemPromptDropdownStatus}
initOpen={isSystemPromptDropdownOpen}
/>
<ToolDropdown
displayName={userTools?.name || 'Frame'}
initOpen={isToolDropdownOpen}
// isOpen={isToolDropdownOpen}
// setIsOpen={setIsToolDropdownOpen}
statusListener={updateToolDropdownStatus}
className="inline-block"
className="inline-block relative"
onItemClick={(item, withCommand) => {
setUserTools(item);
if (withCommand) {
Expand All @@ -552,7 +587,7 @@ function AskPanel(props: AskPanelProps) {
<ModelDropdown
displayName={selectedModel}
initOpen={isModelDropdownOpen}
className=""
className="relative"
onItemClick={handleModelSelect}
statusListener={updateModelDropdownStatus}
/>
Expand Down
Loading
Loading