Three things. 1. Two new display preferences. "Show Tool Calls" and "Show Reasoning" control whether each answer lists the tools Lam called and the model's thinking trace. Both default on, so nothing changes on upgrade. 2. Fix: starting a new chat left the previous conversation in the right pane. The pane rendered the highlighted row's transcript, and Vicinae exposes no way to set the selected row, so the selection could stay put when cmd+N prepended a new chat. The pane now derives from the active session rather than the row, so it follows the chat the user is actually in whatever the selection happens to be. A side benefit is that mount now reads only session summaries, not every transcript. 3. "Start New Chat After" (default 1 hour) starts a fresh chat when the command opens and the last conversation is older than the window. "Never" restores the old always-reopen behaviour, for people who want to stay in their last chat. Old conversations are never deleted; they just sort into their recency section. The setup screen lists all three so the current values are visible without opening preferences. Verified: setup renders "Show Tool Calls: Shown", "Show Reasoning: Shown", "Start New Chat After: After 1 hour" with 17 models reachable. typecheck, eslint, 127 tests and vici build all pass.
146 lines
5.0 KiB
JSON
146 lines
5.0 KiB
JSON
{
|
|
"$schema": "https://raw.githubusercontent.com/vicinaehq/vicinae/refs/heads/main/extra/schemas/extension.json",
|
|
"name": "lam-agent",
|
|
"title": "Lam Agent",
|
|
"description": "Agentic AI chat powered by Ollama. Ask anything from a global hotkey, with streaming answers, persistent sessions, and web search.",
|
|
"icon": "extension-icon.png",
|
|
"author": "adrianbonpin",
|
|
"categories": ["Productivity", "Developer Tools"],
|
|
"license": "MIT",
|
|
"commands": [
|
|
{
|
|
"name": "chat",
|
|
"title": "Chat with Lam",
|
|
"subtitle": "Lam Agent",
|
|
"description": "Ask Lam anything. Answers stream in as they are generated, your session history is kept, and Lam can search the web when it needs current information.",
|
|
"mode": "view"
|
|
},
|
|
{
|
|
"name": "sessions",
|
|
"title": "Chat Sessions",
|
|
"description": "Browse, reopen, and clean up your past conversations with Lam.",
|
|
"mode": "view"
|
|
},
|
|
{
|
|
"name": "setup",
|
|
"title": "Set Up Lam Agent",
|
|
"description": "Check your Ollama connection, pick the model Lam should use, and tune how Lam answers.",
|
|
"mode": "view"
|
|
}
|
|
],
|
|
"preferences": [
|
|
{
|
|
"name": "apiKey",
|
|
"title": "Ollama API Key",
|
|
"description": "Your Ollama API key, created at ollama.com/settings/keys. Required to reach cloud models and the web search tools.",
|
|
"type": "password",
|
|
"required": true
|
|
},
|
|
{
|
|
"name": "model",
|
|
"title": "Model",
|
|
"description": "The model Lam should use, for example deepseek-v4.1-flash:cloud or gpt-oss:120b. Run \"Set Up Lam Agent\" to pick from the models your key can access.",
|
|
"type": "textfield",
|
|
"required": true
|
|
},
|
|
{
|
|
"name": "ollamaHost",
|
|
"title": "Ollama Host",
|
|
"description": "Base URL of the Ollama API. Leave this alone for Ollama Cloud, or point it at http://localhost:11434 to use a local Ollama server.",
|
|
"type": "textfield",
|
|
"required": false,
|
|
"default": "https://ollama.com"
|
|
},
|
|
{
|
|
"name": "systemPrompt",
|
|
"title": "System Prompt",
|
|
"description": "Extra instructions prepended to every conversation. Leave empty to use Lam's default prompt.",
|
|
"type": "textfield",
|
|
"required": false
|
|
},
|
|
{
|
|
"name": "webSearchEnabled",
|
|
"title": "Web Tools",
|
|
"label": "Let Lam search the web",
|
|
"description": "Let Lam search the web and fetch pages when a question needs up-to-date information.",
|
|
"type": "checkbox",
|
|
"required": false,
|
|
"default": true
|
|
},
|
|
{
|
|
"name": "thinking",
|
|
"title": "Reasoning Effort",
|
|
"description": "Ask supported models to reason before answering. Higher effort is slower but more accurate. Ignored by models that do not support it.",
|
|
"type": "dropdown",
|
|
"required": false,
|
|
"default": "off",
|
|
"data": [
|
|
{ "title": "Off", "value": "off" },
|
|
{ "title": "Low", "value": "low" },
|
|
{ "title": "Medium", "value": "medium" },
|
|
{ "title": "High", "value": "high" }
|
|
]
|
|
},
|
|
{
|
|
"name": "showToolCalls",
|
|
"title": "Show Tool Calls",
|
|
"label": "Show which tools Lam used",
|
|
"description": "List the tools Lam called under each answer, for example web_search or get_datetime.",
|
|
"type": "checkbox",
|
|
"required": false,
|
|
"default": true
|
|
},
|
|
{
|
|
"name": "showReasoning",
|
|
"title": "Show Reasoning",
|
|
"label": "Show the model's reasoning",
|
|
"description": "Include the model's thinking trace under each answer. Useful for seeing why a model answered the way it did, but it makes replies much longer.",
|
|
"type": "checkbox",
|
|
"required": false,
|
|
"default": true
|
|
},
|
|
{
|
|
"name": "resumeTimeout",
|
|
"title": "Start New Chat After",
|
|
"description": "When the command opens, resume the last conversation only if it was used recently. Past this much idle time it starts a fresh chat instead. The old conversation is never deleted — it stays in the sidebar.",
|
|
"type": "dropdown",
|
|
"required": false,
|
|
"default": "1h",
|
|
"data": [
|
|
{ "title": "Never — always reopen the last chat", "value": "never" },
|
|
{ "title": "After 15 minutes", "value": "15m" },
|
|
{ "title": "After 1 hour", "value": "1h" },
|
|
{ "title": "After 6 hours", "value": "6h" },
|
|
{ "title": "After 1 day", "value": "1d" }
|
|
]
|
|
}
|
|
],
|
|
"dependencies": {
|
|
"@vicinae/api": "^0.29.0",
|
|
"zod": "^4.4.3"
|
|
},
|
|
"devDependencies": {
|
|
"@eslint/js": "^9.36.0",
|
|
"@types/node": "22.13.10",
|
|
"@types/react": "19.1.17",
|
|
"eslint": "^9.22.0",
|
|
"eslint-config-prettier": "^10.1.8",
|
|
"globals": "^16.4.0",
|
|
"prettier": "^3.5.3",
|
|
"react": "19.1.1",
|
|
"typescript": "^5.8.2",
|
|
"typescript-eslint": "^8.45.0",
|
|
"vitest": "^4.1.5"
|
|
},
|
|
"scripts": {
|
|
"dev": "vici develop",
|
|
"build": "vici build",
|
|
"lint": "vici lint",
|
|
"lint:code": "eslint .",
|
|
"format": "prettier --write \"src/**/*.{ts,tsx}\"",
|
|
"typecheck": "tsc --noEmit",
|
|
"test": "vitest run",
|
|
"test:watch": "vitest"
|
|
}
|
|
}
|