0xkobold 0.0.1
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.
- package/.agents/skills/nextjs-best-practices/SKILL.md +208 -0
- package/.agents/skills/sql-optimization-patterns/SKILL.md +509 -0
- package/HEARTBEAT.md +45 -0
- package/README.md +197 -0
- package/USAGE.md +191 -0
- package/dist/package.json +77 -0
- package/dist/src/agent/pi-adapter.js +307 -0
- package/dist/src/agent/pi-adapter.js.map +1 -0
- package/dist/src/agent/tool-adapter.js +86 -0
- package/dist/src/agent/tool-adapter.js.map +1 -0
- package/dist/src/approval/queue.js +114 -0
- package/dist/src/approval/queue.js.map +1 -0
- package/dist/src/ascii-kobold.js +76 -0
- package/dist/src/ascii-kobold.js.map +1 -0
- package/dist/src/cli/client.js +217 -0
- package/dist/src/cli/client.js.map +1 -0
- package/dist/src/cli/commands/agent.js +272 -0
- package/dist/src/cli/commands/agent.js.map +1 -0
- package/dist/src/cli/commands/chat.js +234 -0
- package/dist/src/cli/commands/chat.js.map +1 -0
- package/dist/src/cli/commands/config.js +202 -0
- package/dist/src/cli/commands/config.js.map +1 -0
- package/dist/src/cli/commands/daemon.js +203 -0
- package/dist/src/cli/commands/daemon.js.map +1 -0
- package/dist/src/cli/commands/gateway.js +184 -0
- package/dist/src/cli/commands/gateway.js.map +1 -0
- package/dist/src/cli/commands/init.js +175 -0
- package/dist/src/cli/commands/init.js.map +1 -0
- package/dist/src/cli/commands/kobold.js +21 -0
- package/dist/src/cli/commands/kobold.js.map +1 -0
- package/dist/src/cli/commands/logs.js +27 -0
- package/dist/src/cli/commands/logs.js.map +1 -0
- package/dist/src/cli/commands/mode.js +121 -0
- package/dist/src/cli/commands/mode.js.map +1 -0
- package/dist/src/cli/commands/persona.js +261 -0
- package/dist/src/cli/commands/persona.js.map +1 -0
- package/dist/src/cli/commands/start.js +66 -0
- package/dist/src/cli/commands/start.js.map +1 -0
- package/dist/src/cli/commands/status.js +117 -0
- package/dist/src/cli/commands/status.js.map +1 -0
- package/dist/src/cli/commands/stop.js +27 -0
- package/dist/src/cli/commands/stop.js.map +1 -0
- package/dist/src/cli/commands/system.js +128 -0
- package/dist/src/cli/commands/system.js.map +1 -0
- package/dist/src/cli/commands/tui.js +103 -0
- package/dist/src/cli/commands/tui.js.map +1 -0
- package/dist/src/cli/commands/update.js +133 -0
- package/dist/src/cli/commands/update.js.map +1 -0
- package/dist/src/cli/extensions/discord.js +113 -0
- package/dist/src/cli/extensions/discord.js.map +1 -0
- package/dist/src/cli/extensions/env.js +91 -0
- package/dist/src/cli/extensions/env.js.map +1 -0
- package/dist/src/cli/extensions/heartbeat.js +78 -0
- package/dist/src/cli/extensions/heartbeat.js.map +1 -0
- package/dist/src/cli/index.js +24 -0
- package/dist/src/cli/index.js.map +1 -0
- package/dist/src/cli/program.js +70 -0
- package/dist/src/cli/program.js.map +1 -0
- package/dist/src/cli/repl.js +184 -0
- package/dist/src/cli/repl.js.map +1 -0
- package/dist/src/cli/shared/discord-service.js +102 -0
- package/dist/src/cli/shared/discord-service.js.map +1 -0
- package/dist/src/config/index.js +10 -0
- package/dist/src/config/index.js.map +1 -0
- package/dist/src/config/loader.js +401 -0
- package/dist/src/config/loader.js.map +1 -0
- package/dist/src/config/paths.js +84 -0
- package/dist/src/config/paths.js.map +1 -0
- package/dist/src/config/types.js +8 -0
- package/dist/src/config/types.js.map +1 -0
- package/dist/src/context-detector.js +60 -0
- package/dist/src/context-detector.js.map +1 -0
- package/dist/src/discord/index.js +376 -0
- package/dist/src/discord/index.js.map +1 -0
- package/dist/src/event-bus/index.js +97 -0
- package/dist/src/event-bus/index.js.map +1 -0
- package/dist/src/extensions/command-args.js +68 -0
- package/dist/src/extensions/command-args.js.map +1 -0
- package/dist/src/extensions/core/agent-registry-extension.js +541 -0
- package/dist/src/extensions/core/agent-registry-extension.js.map +1 -0
- package/dist/src/extensions/core/agent-worker.js +148 -0
- package/dist/src/extensions/core/agent-worker.js.map +1 -0
- package/dist/src/extensions/core/compaction-safeguard.js +154 -0
- package/dist/src/extensions/core/compaction-safeguard.js.map +1 -0
- package/dist/src/extensions/core/confirm-destructive.js +43 -0
- package/dist/src/extensions/core/confirm-destructive.js.map +1 -0
- package/dist/src/extensions/core/context-aware-extension.js +124 -0
- package/dist/src/extensions/core/context-aware-extension.js.map +1 -0
- package/dist/src/extensions/core/context-pruning/extension.js +124 -0
- package/dist/src/extensions/core/context-pruning/extension.js.map +1 -0
- package/dist/src/extensions/core/context-pruning/pruner.js +312 -0
- package/dist/src/extensions/core/context-pruning/pruner.js.map +1 -0
- package/dist/src/extensions/core/context-pruning/runtime.js +48 -0
- package/dist/src/extensions/core/context-pruning/runtime.js.map +1 -0
- package/dist/src/extensions/core/context-pruning/settings.js +105 -0
- package/dist/src/extensions/core/context-pruning/settings.js.map +1 -0
- package/dist/src/extensions/core/dirty-repo-guard.js +42 -0
- package/dist/src/extensions/core/dirty-repo-guard.js.map +1 -0
- package/dist/src/extensions/core/discord-channel-extension.js +205 -0
- package/dist/src/extensions/core/discord-channel-extension.js.map +1 -0
- package/dist/src/extensions/core/discord-extension.js +142 -0
- package/dist/src/extensions/core/discord-extension.js.map +1 -0
- package/dist/src/extensions/core/env-loader-extension.js +157 -0
- package/dist/src/extensions/core/env-loader-extension.js.map +1 -0
- package/dist/src/extensions/core/fileops-extension.js +699 -0
- package/dist/src/extensions/core/fileops-extension.js.map +1 -0
- package/dist/src/extensions/core/gateway-extension.js +730 -0
- package/dist/src/extensions/core/gateway-extension.js.map +1 -0
- package/dist/src/extensions/core/git-checkpoint.js +46 -0
- package/dist/src/extensions/core/git-checkpoint.js.map +1 -0
- package/dist/src/extensions/core/handoff-extension.js +206 -0
- package/dist/src/extensions/core/handoff-extension.js.map +1 -0
- package/dist/src/extensions/core/heartbeat-extension.js +373 -0
- package/dist/src/extensions/core/heartbeat-extension.js.map +1 -0
- package/dist/src/extensions/core/mcp-extension.js +413 -0
- package/dist/src/extensions/core/mcp-extension.js.map +1 -0
- package/dist/src/extensions/core/mode-manager-extension.js +562 -0
- package/dist/src/extensions/core/mode-manager-extension.js.map +1 -0
- package/dist/src/extensions/core/multi-channel-extension.js +435 -0
- package/dist/src/extensions/core/multi-channel-extension.js.map +1 -0
- package/dist/src/extensions/core/ollama-provider-extension.js +66 -0
- package/dist/src/extensions/core/ollama-provider-extension.js.map +1 -0
- package/dist/src/extensions/core/onboarding-extension.js +122 -0
- package/dist/src/extensions/core/onboarding-extension.js.map +1 -0
- package/dist/src/extensions/core/persona-loader-extension.js +139 -0
- package/dist/src/extensions/core/persona-loader-extension.js.map +1 -0
- package/dist/src/extensions/core/pi-notify-extension.js +70 -0
- package/dist/src/extensions/core/pi-notify-extension.js.map +1 -0
- package/dist/src/extensions/core/protected-paths.js +24 -0
- package/dist/src/extensions/core/protected-paths.js.map +1 -0
- package/dist/src/extensions/core/questionnaire-extension.js +242 -0
- package/dist/src/extensions/core/questionnaire-extension.js.map +1 -0
- package/dist/src/extensions/core/self-update-extension.js +181 -0
- package/dist/src/extensions/core/self-update-extension.js.map +1 -0
- package/dist/src/extensions/core/session-bridge-extension.js +78 -0
- package/dist/src/extensions/core/session-bridge-extension.js.map +1 -0
- package/dist/src/extensions/core/session-manager-extension.js +319 -0
- package/dist/src/extensions/core/session-manager-extension.js.map +1 -0
- package/dist/src/extensions/core/session-name-extension.js +88 -0
- package/dist/src/extensions/core/session-name-extension.js.map +1 -0
- package/dist/src/extensions/core/session-pruning-extension.js +480 -0
- package/dist/src/extensions/core/session-pruning-extension.js.map +1 -0
- package/dist/src/extensions/core/task-manager-extension.js +661 -0
- package/dist/src/extensions/core/task-manager-extension.js.map +1 -0
- package/dist/src/extensions/core/update-extension.js +438 -0
- package/dist/src/extensions/core/update-extension.js.map +1 -0
- package/dist/src/extensions/core/websearch-extension.js +463 -0
- package/dist/src/extensions/core/websearch-extension.js.map +1 -0
- package/dist/src/extensions/index.js +5 -0
- package/dist/src/extensions/index.js.map +1 -0
- package/dist/src/extensions/loader.js +80 -0
- package/dist/src/extensions/loader.js.map +1 -0
- package/dist/src/gateway/index.js +353 -0
- package/dist/src/gateway/index.js.map +1 -0
- package/dist/src/index.js +150 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/llm/anthropic.js +86 -0
- package/dist/src/llm/anthropic.js.map +1 -0
- package/dist/src/llm/index.js +9 -0
- package/dist/src/llm/index.js.map +1 -0
- package/dist/src/llm/ollama.js +113 -0
- package/dist/src/llm/ollama.js.map +1 -0
- package/dist/src/llm/router.js +145 -0
- package/dist/src/llm/router.js.map +1 -0
- package/dist/src/llm/types.js +7 -0
- package/dist/src/llm/types.js.map +1 -0
- package/dist/src/memory/index.js +5 -0
- package/dist/src/memory/index.js.map +1 -0
- package/dist/src/memory/store.js +91 -0
- package/dist/src/memory/store.js.map +1 -0
- package/dist/src/pi-config.js +80 -0
- package/dist/src/pi-config.js.map +1 -0
- package/dist/src/skills/builtin/file.js +184 -0
- package/dist/src/skills/builtin/file.js.map +1 -0
- package/dist/src/skills/builtin/shell.js +100 -0
- package/dist/src/skills/builtin/shell.js.map +1 -0
- package/dist/src/skills/builtin/subagent.js +62 -0
- package/dist/src/skills/builtin/subagent.js.map +1 -0
- package/dist/src/skills/hello.js +42 -0
- package/dist/src/skills/hello.js.map +1 -0
- package/dist/src/skills/index.js +11 -0
- package/dist/src/skills/index.js.map +1 -0
- package/dist/src/skills/loader.js +382 -0
- package/dist/src/skills/loader.js.map +1 -0
- package/dist/src/skills/types.js +8 -0
- package/dist/src/skills/types.js.map +1 -0
- package/dist/src/utils/working-dir.js +71 -0
- package/dist/src/utils/working-dir.js.map +1 -0
- package/package.json +77 -0
- package/skills/1password/SKILL.md +70 -0
- package/skills/1password/references/cli-examples.md +29 -0
- package/skills/1password/references/get-started.md +17 -0
- package/skills/apple-notes/SKILL.md +77 -0
- package/skills/apple-reminders/SKILL.md +118 -0
- package/skills/bear-notes/SKILL.md +107 -0
- package/skills/blogwatcher/SKILL.md +69 -0
- package/skills/blucli/SKILL.md +47 -0
- package/skills/bluebubbles/SKILL.md +131 -0
- package/skills/camsnap/SKILL.md +45 -0
- package/skills/canvas/SKILL.md +198 -0
- package/skills/clawhub/SKILL.md +77 -0
- package/skills/coding-agent/SKILL.md +284 -0
- package/skills/discord/SKILL.md +197 -0
- package/skills/eightctl/SKILL.md +50 -0
- package/skills/food-order/SKILL.md +48 -0
- package/skills/gemini/SKILL.md +43 -0
- package/skills/gh-issues/SKILL.md +865 -0
- package/skills/gifgrep/SKILL.md +79 -0
- package/skills/github/SKILL.md +163 -0
- package/skills/gog/SKILL.md +116 -0
- package/skills/goplaces/SKILL.md +52 -0
- package/skills/healthcheck/SKILL.md +245 -0
- package/skills/himalaya/SKILL.md +257 -0
- package/skills/himalaya/references/configuration.md +184 -0
- package/skills/himalaya/references/message-composition.md +199 -0
- package/skills/imsg/SKILL.md +122 -0
- package/skills/mcporter/SKILL.md +61 -0
- package/skills/model-usage/SKILL.md +69 -0
- package/skills/model-usage/references/codexbar-cli.md +33 -0
- package/skills/model-usage/scripts/model_usage.py +310 -0
- package/skills/nano-banana-pro/SKILL.md +58 -0
- package/skills/nano-banana-pro/scripts/generate_image.py +184 -0
- package/skills/nano-pdf/SKILL.md +38 -0
- package/skills/notion/SKILL.md +172 -0
- package/skills/obsidian/SKILL.md +81 -0
- package/skills/openai-image-gen/SKILL.md +89 -0
- package/skills/openai-image-gen/scripts/gen.py +240 -0
- package/skills/openai-whisper/SKILL.md +38 -0
- package/skills/openai-whisper-api/SKILL.md +52 -0
- package/skills/openai-whisper-api/scripts/transcribe.sh +85 -0
- package/skills/openhue/SKILL.md +112 -0
- package/skills/oracle/SKILL.md +125 -0
- package/skills/ordercli/SKILL.md +78 -0
- package/skills/peekaboo/SKILL.md +190 -0
- package/skills/sag/SKILL.md +87 -0
- package/skills/session-logs/SKILL.md +115 -0
- package/skills/sherpa-onnx-tts/SKILL.md +103 -0
- package/skills/sherpa-onnx-tts/bin/sherpa-onnx-tts +178 -0
- package/skills/skill-creator/SKILL.md +370 -0
- package/skills/skill-creator/license.txt +202 -0
- package/skills/skill-creator/scripts/init_skill.py +378 -0
- package/skills/skill-creator/scripts/package_skill.py +111 -0
- package/skills/skill-creator/scripts/quick_validate.py +101 -0
- package/skills/slack/SKILL.md +144 -0
- package/skills/songsee/SKILL.md +49 -0
- package/skills/sonoscli/SKILL.md +46 -0
- package/skills/spotify-player/SKILL.md +64 -0
- package/skills/summarize/SKILL.md +87 -0
- package/skills/things-mac/SKILL.md +86 -0
- package/skills/tmux/SKILL.md +153 -0
- package/skills/tmux/scripts/find-sessions.sh +112 -0
- package/skills/tmux/scripts/wait-for-text.sh +83 -0
- package/skills/trello/SKILL.md +95 -0
- package/skills/video-frames/SKILL.md +46 -0
- package/skills/video-frames/scripts/frame.sh +81 -0
- package/skills/voice-call/SKILL.md +45 -0
- package/skills/wacli/SKILL.md +72 -0
- package/skills/weather/SKILL.md +112 -0
|
@@ -0,0 +1,463 @@
|
|
|
1
|
+
import { $ } from "bun";
|
|
2
|
+
import { parseArgs } from "../command-args.js";
|
|
3
|
+
/**
|
|
4
|
+
* Perform web search using available methods
|
|
5
|
+
*/
|
|
6
|
+
async function performWebSearch(query, limit = 5) {
|
|
7
|
+
const results = [];
|
|
8
|
+
try {
|
|
9
|
+
// Try Ollama first if available
|
|
10
|
+
const ollamaResults = await searchOllama(query, limit);
|
|
11
|
+
if (ollamaResults.length > 0) {
|
|
12
|
+
return {
|
|
13
|
+
results: ollamaResults,
|
|
14
|
+
query,
|
|
15
|
+
totalResults: ollamaResults.length
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
// Ollama not available or not configured, try alternatives
|
|
21
|
+
}
|
|
22
|
+
// Fallback: Try searx or other search APIs
|
|
23
|
+
try {
|
|
24
|
+
const fallbackResults = await searchFallback(query, limit);
|
|
25
|
+
if (fallbackResults.length > 0) {
|
|
26
|
+
return {
|
|
27
|
+
results: fallbackResults,
|
|
28
|
+
query,
|
|
29
|
+
totalResults: fallbackResults.length
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
// Fallback also failed
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
results,
|
|
38
|
+
query,
|
|
39
|
+
totalResults: 0
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Search using Ollama's web search capability
|
|
44
|
+
*/
|
|
45
|
+
async function searchOllama(query, limit) {
|
|
46
|
+
const results = [];
|
|
47
|
+
// Check if Ollama is running and has web search enabled
|
|
48
|
+
try {
|
|
49
|
+
const response = await fetch("http://localhost:11434/api/version");
|
|
50
|
+
if (!response.ok) {
|
|
51
|
+
throw new Error("Ollama not available");
|
|
52
|
+
}
|
|
53
|
+
// Generate search query using Ollama
|
|
54
|
+
// This uses Ollama's capability to generate search terms
|
|
55
|
+
const searchPrompt = `Search the web for: ${query}
|
|
56
|
+
|
|
57
|
+
Provide search results in this format:
|
|
58
|
+
Title | URL | Brief description
|
|
59
|
+
|
|
60
|
+
Important: Only include real, factual results.`;
|
|
61
|
+
const ollamaResponse = await fetch("http://localhost:11434/api/generate", {
|
|
62
|
+
method: "POST",
|
|
63
|
+
headers: { "Content-Type": "application/json" },
|
|
64
|
+
body: JSON.stringify({
|
|
65
|
+
model: process.env.OLLAMA_WEB_SEARCH_MODEL || "llama3.2",
|
|
66
|
+
prompt: searchPrompt,
|
|
67
|
+
stream: false,
|
|
68
|
+
options: {
|
|
69
|
+
// Enable web search if supported by the model
|
|
70
|
+
capabilities: ["web_search"]
|
|
71
|
+
}
|
|
72
|
+
})
|
|
73
|
+
});
|
|
74
|
+
if (!ollamaResponse.ok) {
|
|
75
|
+
throw new Error("Ollama request failed");
|
|
76
|
+
}
|
|
77
|
+
const data = await ollamaResponse.json();
|
|
78
|
+
const content = data.response || "";
|
|
79
|
+
// Parse results from Ollama response
|
|
80
|
+
// Expected format: Title | URL | Description
|
|
81
|
+
const lines = content.split('\n').filter((line) => line.trim());
|
|
82
|
+
for (const line of lines.slice(0, limit)) {
|
|
83
|
+
const parts = line.split('|').map((p) => p.trim());
|
|
84
|
+
if (parts.length >= 2) {
|
|
85
|
+
results.push({
|
|
86
|
+
title: parts[0] || "Untitled",
|
|
87
|
+
url: parts[1] || "",
|
|
88
|
+
snippet: parts[2] || ""
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
console.log("[WebSearch] Ollama search not available:", error);
|
|
95
|
+
}
|
|
96
|
+
return results;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Fallback search using system tools
|
|
100
|
+
*/
|
|
101
|
+
async function searchFallback(query, limit) {
|
|
102
|
+
const results = [];
|
|
103
|
+
// Try using curl with a search engine that supports no-JS queries
|
|
104
|
+
// Using DuckDuckGo HTML version which works without JavaScript
|
|
105
|
+
try {
|
|
106
|
+
const searchUrl = `https://duckduckgo.com/html/?q=${encodeURIComponent(query)}`;
|
|
107
|
+
const html = await $ `curl -s -A "Mozilla/5.0 (compatible; 0xKobold)" ${searchUrl}`.text();
|
|
108
|
+
// Basic parsing - look for result links
|
|
109
|
+
// DuckDuckGo HTML format: <a class="result__a" href="URL">Title</a>
|
|
110
|
+
const resultRegex = /<a[^>]*class="result__a"[^>]*href="([^"]*)"[^>]*>(.*?)<\/a>/gi;
|
|
111
|
+
let match;
|
|
112
|
+
let count = 0;
|
|
113
|
+
while ((match = resultRegex.exec(html)) && count < limit) {
|
|
114
|
+
const url = match[1];
|
|
115
|
+
const title = match[2].replace(/<[^>]*>/g, ''); // Strip HTML
|
|
116
|
+
if (url && title && !url.includes('duckduckgo.com')) {
|
|
117
|
+
results.push({
|
|
118
|
+
title: decodeHtmlEntities(title),
|
|
119
|
+
url: decodeURIComponent(url),
|
|
120
|
+
snippet: ""
|
|
121
|
+
});
|
|
122
|
+
count++;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
console.log("[WebSearch] Fallback search failed:", error);
|
|
128
|
+
}
|
|
129
|
+
return results;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Decode HTML entities
|
|
133
|
+
*/
|
|
134
|
+
function decodeHtmlEntities(text) {
|
|
135
|
+
const entities = {
|
|
136
|
+
'&': '&',
|
|
137
|
+
'<': '<',
|
|
138
|
+
'>': '>',
|
|
139
|
+
'"': '"',
|
|
140
|
+
''': "'",
|
|
141
|
+
' ': ' '
|
|
142
|
+
};
|
|
143
|
+
return text.replace(/&[^;]+;/g, (entity) => entities[entity] || entity);
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Fetch and extract content from a URL
|
|
147
|
+
*/
|
|
148
|
+
async function fetchUrlContent(url, maxLength = 5000) {
|
|
149
|
+
try {
|
|
150
|
+
const response = await fetch(url, {
|
|
151
|
+
headers: {
|
|
152
|
+
'User-Agent': 'Mozilla/5.0 (compatible; 0xKobold/0.1)'
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
if (!response.ok) {
|
|
156
|
+
throw new Error(`HTTP ${response.status}`);
|
|
157
|
+
}
|
|
158
|
+
const html = await response.text();
|
|
159
|
+
// Extract title
|
|
160
|
+
const titleMatch = html.match(/<title[^>]*>(.*?)<\/title>/i);
|
|
161
|
+
const title = titleMatch ? decodeHtmlEntities(titleMatch[1].trim()) : "Untitled";
|
|
162
|
+
// Extract main content (basic approach)
|
|
163
|
+
const content = html
|
|
164
|
+
.replace(/<script[^>]*>.*?<\/script>/gi, '') // Remove scripts
|
|
165
|
+
.replace(/<style[^>]*>.*?<\/style>/gi, '') // Remove styles
|
|
166
|
+
.replace(/<[^>]*>/g, ' ') // Remove HTML tags
|
|
167
|
+
.replace(/\s+/g, ' ') // Normalize whitespace
|
|
168
|
+
.trim()
|
|
169
|
+
.slice(0, maxLength);
|
|
170
|
+
return { title, content };
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
console.log("[WebSearch] Failed to fetch URL:", error);
|
|
174
|
+
return null;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Web Search Extension
|
|
179
|
+
*/
|
|
180
|
+
export default function webSearchExtension(pi) {
|
|
181
|
+
// ═══════════════════════════════════════════════════════════════
|
|
182
|
+
// COMMANDS
|
|
183
|
+
// ═══════════════════════════════════════════════════════════════
|
|
184
|
+
pi.registerCommand("web-search", {
|
|
185
|
+
description: "Search the web for information",
|
|
186
|
+
// @ts-ignore Command args property
|
|
187
|
+
args: [
|
|
188
|
+
{ name: "query", description: "Search query", required: true },
|
|
189
|
+
{ name: "limit", description: "Number of results (default: 5)", required: false }
|
|
190
|
+
],
|
|
191
|
+
handler: async (args, ctx) => {
|
|
192
|
+
const parsed = parseArgs(args, [
|
|
193
|
+
{ name: "query", description: "Search query", required: true },
|
|
194
|
+
{ name: "limit", description: "Number of results", required: false }
|
|
195
|
+
]);
|
|
196
|
+
const query = parsed.query;
|
|
197
|
+
const limit = parsed.limit;
|
|
198
|
+
const resultLimit = parseInt(String(limit)) || 5;
|
|
199
|
+
ctx.ui?.notify?.(`🔍 Searching for: ${query}`, "info");
|
|
200
|
+
const results = await performWebSearch(query, resultLimit);
|
|
201
|
+
if (results.results.length === 0) {
|
|
202
|
+
ctx.ui?.notify?.("No results found", "warning");
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
const lines = [`🔍 Results for "${query}":\n`];
|
|
206
|
+
for (let i = 0; i < results.results.length; i++) {
|
|
207
|
+
const result = results.results[i];
|
|
208
|
+
lines.push(`${i + 1}. ${result.title}`);
|
|
209
|
+
lines.push(` ${result.url}`);
|
|
210
|
+
if (result.snippet) {
|
|
211
|
+
lines.push(` ${result.snippet}`);
|
|
212
|
+
}
|
|
213
|
+
lines.push("");
|
|
214
|
+
}
|
|
215
|
+
ctx.ui?.notify?.(lines.join("\n"), "info");
|
|
216
|
+
}
|
|
217
|
+
});
|
|
218
|
+
pi.registerCommand("fetch", {
|
|
219
|
+
description: "Fetch and display text content from a URL",
|
|
220
|
+
// @ts-ignore Command args property
|
|
221
|
+
args: [
|
|
222
|
+
{ name: "url", description: "URL to fetch (must start with http:// or https://)", required: true },
|
|
223
|
+
{ name: "max", description: "Maximum characters (default: 5000)", required: false }
|
|
224
|
+
],
|
|
225
|
+
handler: async (args, ctx) => {
|
|
226
|
+
const parsed = parseArgs(args, [
|
|
227
|
+
{ name: "url", description: "URL to fetch", required: true },
|
|
228
|
+
{ name: "max", description: "Maximum characters", required: false }
|
|
229
|
+
]);
|
|
230
|
+
const url = parsed.url;
|
|
231
|
+
const max = parsed.max;
|
|
232
|
+
const maxLength = parseInt(String(max)) || 5000;
|
|
233
|
+
if (!url?.startsWith("http")) {
|
|
234
|
+
ctx.ui?.notify?.("URL must start with http:// or https://", "error");
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
ctx.ui?.notify?.(`📥 Fetching ${url}...`, "info");
|
|
238
|
+
const result = await fetchUrlContent(url, maxLength);
|
|
239
|
+
if (!result) {
|
|
240
|
+
ctx.ui?.notify?.(`Failed to fetch ${url}`, "error");
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
// Format output
|
|
244
|
+
const lines = [
|
|
245
|
+
`📄 ${result.title}`,
|
|
246
|
+
`Source: ${url}`,
|
|
247
|
+
"─────────────────────────────────────────",
|
|
248
|
+
"",
|
|
249
|
+
result.content.slice(0, maxLength),
|
|
250
|
+
"",
|
|
251
|
+
"─────────────────────────────────────────",
|
|
252
|
+
result.content.length > maxLength
|
|
253
|
+
? `... (${result.content.length - maxLength} more characters)`
|
|
254
|
+
: ""
|
|
255
|
+
];
|
|
256
|
+
ctx.ui?.notify?.(lines.join("\n"), "info");
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
// ═══════════════════════════════════════════════════════════════
|
|
260
|
+
// TOOLS
|
|
261
|
+
// ═══════════════════════════════════════════════════════════════
|
|
262
|
+
pi.registerTool({
|
|
263
|
+
name: "web_search",
|
|
264
|
+
description: "Search the web for current information. Use this when you need up-to-date information not in your training data.",
|
|
265
|
+
// @ts-ignore TSchema mismatch
|
|
266
|
+
parameters: {
|
|
267
|
+
type: "object",
|
|
268
|
+
properties: {
|
|
269
|
+
query: {
|
|
270
|
+
type: "string",
|
|
271
|
+
description: "Search query - be specific for better results"
|
|
272
|
+
},
|
|
273
|
+
limit: {
|
|
274
|
+
type: "number",
|
|
275
|
+
default: 5,
|
|
276
|
+
description: "Number of results to return (1-10)"
|
|
277
|
+
}
|
|
278
|
+
},
|
|
279
|
+
required: ["query"],
|
|
280
|
+
},
|
|
281
|
+
async execute(args) {
|
|
282
|
+
// @ts-ignore Command args property
|
|
283
|
+
console.log("[WebSearch] Received args:", JSON.stringify(args, null, 2));
|
|
284
|
+
// Handle different argument structures
|
|
285
|
+
const query = args?.query || args?.parameters?.query || args?.[0]?.query;
|
|
286
|
+
const limit = args?.limit || args?.parameters?.limit || args?.[0]?.limit || 5;
|
|
287
|
+
console.log("[WebSearch] Extracted query:", query, "limit:", limit);
|
|
288
|
+
if (!query || typeof query !== 'string' || !query.trim()) {
|
|
289
|
+
return {
|
|
290
|
+
content: [{
|
|
291
|
+
type: "text",
|
|
292
|
+
text: `Invalid search query: received "${query}" (type: ${typeof query})`
|
|
293
|
+
}],
|
|
294
|
+
details: { error: "invalid_query", received: args },
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
const results = await performWebSearch(query, Math.min(limit, 10));
|
|
298
|
+
if (results.results.length === 0) {
|
|
299
|
+
return {
|
|
300
|
+
content: [{
|
|
301
|
+
type: "text",
|
|
302
|
+
text: "No search results found. The web search service may be unavailable."
|
|
303
|
+
}],
|
|
304
|
+
details: {
|
|
305
|
+
query,
|
|
306
|
+
error: "no_results",
|
|
307
|
+
note: "Ollama web search not configured or fallback failed"
|
|
308
|
+
},
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
const formatted = results.results
|
|
312
|
+
.map((r, i) => `${i + 1}. ${r.title}\n URL: ${r.url}${r.snippet ? "\n " + r.snippet : ""}`)
|
|
313
|
+
.join("\n\n");
|
|
314
|
+
return {
|
|
315
|
+
content: [
|
|
316
|
+
{ type: "text", text: `Search results for "${query}":\n\n${formatted}` },
|
|
317
|
+
],
|
|
318
|
+
details: {
|
|
319
|
+
query,
|
|
320
|
+
results: results.results,
|
|
321
|
+
total: results.totalResults,
|
|
322
|
+
},
|
|
323
|
+
};
|
|
324
|
+
},
|
|
325
|
+
});
|
|
326
|
+
pi.registerTool({
|
|
327
|
+
name: "web_fetch",
|
|
328
|
+
description: "Fetch and read the content of a web page. Use this to get detailed information from a specific URL.",
|
|
329
|
+
// @ts-ignore TSchema mismatch
|
|
330
|
+
parameters: {
|
|
331
|
+
type: "object",
|
|
332
|
+
properties: {
|
|
333
|
+
url: {
|
|
334
|
+
type: "string",
|
|
335
|
+
description: "Full URL to fetch (must include http:// or https://)"
|
|
336
|
+
},
|
|
337
|
+
max_length: {
|
|
338
|
+
type: "number",
|
|
339
|
+
default: 5000,
|
|
340
|
+
description: "Maximum characters to retrieve"
|
|
341
|
+
}
|
|
342
|
+
},
|
|
343
|
+
required: ["url"],
|
|
344
|
+
},
|
|
345
|
+
async execute(args) {
|
|
346
|
+
// @ts-ignore Command args property
|
|
347
|
+
console.log("[WebFetch] Received args:", JSON.stringify(args, null, 2));
|
|
348
|
+
// Handle different argument structures that pi-coding-agent might send
|
|
349
|
+
const url = args?.url || args?.parameters?.url || args?.[0]?.url;
|
|
350
|
+
const max_length = args?.max_length || args?.parameters?.max_length || args?.[0]?.max_length || 5000;
|
|
351
|
+
console.log("[WebFetch] Extracted url:", url, "max_length:", max_length);
|
|
352
|
+
if (!url || typeof url !== 'string') {
|
|
353
|
+
return {
|
|
354
|
+
content: [{
|
|
355
|
+
type: "text",
|
|
356
|
+
text: `Invalid URL: received "${url}" (type: ${typeof url}). Must be a string starting with http:// or https://`
|
|
357
|
+
}],
|
|
358
|
+
details: { error: "invalid_url", received: args },
|
|
359
|
+
};
|
|
360
|
+
}
|
|
361
|
+
if (!url.startsWith("http")) {
|
|
362
|
+
return {
|
|
363
|
+
content: [{ type: "text", text: `Invalid URL "${url}". Must start with http:// or https://` }],
|
|
364
|
+
details: { error: "invalid_url_scheme", url },
|
|
365
|
+
};
|
|
366
|
+
}
|
|
367
|
+
const content = await fetchUrlContent(url, max_length);
|
|
368
|
+
if (!content) {
|
|
369
|
+
return {
|
|
370
|
+
content: [{ type: "text", text: `Failed to fetch content from ${url}` }],
|
|
371
|
+
details: { error: "fetch_failed", url },
|
|
372
|
+
};
|
|
373
|
+
}
|
|
374
|
+
return {
|
|
375
|
+
content: [
|
|
376
|
+
{
|
|
377
|
+
type: "text",
|
|
378
|
+
text: `# ${content.title}\n\n${content.content}\n\n[Source: ${url}]`
|
|
379
|
+
},
|
|
380
|
+
],
|
|
381
|
+
details: {
|
|
382
|
+
url,
|
|
383
|
+
title: content.title,
|
|
384
|
+
length: content.content.length,
|
|
385
|
+
},
|
|
386
|
+
};
|
|
387
|
+
},
|
|
388
|
+
});
|
|
389
|
+
pi.registerTool({
|
|
390
|
+
name: "web_qa",
|
|
391
|
+
description: "Search the web and synthesize an answer. Combines search + fetch for comprehensive results.",
|
|
392
|
+
// @ts-ignore TSchema mismatch
|
|
393
|
+
parameters: {
|
|
394
|
+
type: "object",
|
|
395
|
+
properties: {
|
|
396
|
+
question: {
|
|
397
|
+
type: "string",
|
|
398
|
+
description: "The question to answer using web search"
|
|
399
|
+
},
|
|
400
|
+
sources: {
|
|
401
|
+
type: "number",
|
|
402
|
+
default: 3,
|
|
403
|
+
description: "Number of sources to check (1-5)"
|
|
404
|
+
}
|
|
405
|
+
},
|
|
406
|
+
required: ["question"],
|
|
407
|
+
},
|
|
408
|
+
async execute(args) {
|
|
409
|
+
// @ts-ignore Command args property
|
|
410
|
+
console.log("[WebQA] Received args:", JSON.stringify(args, null, 2));
|
|
411
|
+
// Handle different argument structures
|
|
412
|
+
const question = args?.question || args?.parameters?.question || args?.[0]?.question;
|
|
413
|
+
const sources = args?.sources || args?.parameters?.sources || args?.[0]?.sources || 3;
|
|
414
|
+
console.log("[WebQA] Extracted question:", question, "sources:", sources);
|
|
415
|
+
if (!question || typeof question !== 'string' || !question.trim()) {
|
|
416
|
+
return {
|
|
417
|
+
content: [{
|
|
418
|
+
type: "text",
|
|
419
|
+
text: `Invalid question: received "${question}" (type: ${typeof question})`
|
|
420
|
+
}],
|
|
421
|
+
details: { error: "invalid_question", received: args },
|
|
422
|
+
};
|
|
423
|
+
}
|
|
424
|
+
// Search first
|
|
425
|
+
const searchResults = await performWebSearch(question, Math.min(sources, 5));
|
|
426
|
+
if (searchResults.results.length === 0) {
|
|
427
|
+
return {
|
|
428
|
+
content: [{ type: "text", text: "Could not find any information about that question online." }],
|
|
429
|
+
details: { question, error: "no_search_results" },
|
|
430
|
+
};
|
|
431
|
+
}
|
|
432
|
+
// Fetch content from top results
|
|
433
|
+
const fetchedContents = [];
|
|
434
|
+
for (const result of searchResults.results.slice(0, sources)) {
|
|
435
|
+
const content = await fetchUrlContent(result.url, 3000);
|
|
436
|
+
if (content) {
|
|
437
|
+
fetchedContents.push({
|
|
438
|
+
title: content.title,
|
|
439
|
+
url: result.url,
|
|
440
|
+
content: content.content
|
|
441
|
+
});
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
const summary = fetchedContents.length > 0
|
|
445
|
+
? `Found ${fetchedContents.length} relevant sources:\n\n` +
|
|
446
|
+
fetchedContents.map(c => `## ${c.title}\n${c.content.slice(0, 1500)}...\n(Source: ${c.url})`).join("\n\n")
|
|
447
|
+
: `Found ${searchResults.results.length} search results but could not fetch detailed content.\n\n` +
|
|
448
|
+
searchResults.results.map(r => `- ${r.title}: ${r.url}`).join("\n");
|
|
449
|
+
return {
|
|
450
|
+
content: [{ type: "text", text: summary }],
|
|
451
|
+
details: {
|
|
452
|
+
question,
|
|
453
|
+
sources_found: searchResults.results.length,
|
|
454
|
+
sources_fetched: fetchedContents.length,
|
|
455
|
+
results: searchResults.results,
|
|
456
|
+
},
|
|
457
|
+
};
|
|
458
|
+
},
|
|
459
|
+
});
|
|
460
|
+
console.log("[WebSearch] Extension loaded with Ollama integration");
|
|
461
|
+
console.log("[WebSearch] Tools: web_search, web_fetch, web_qa");
|
|
462
|
+
}
|
|
463
|
+
//# sourceMappingURL=websearch-extension.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websearch-extension.js","sourceRoot":"","sources":["../../../../src/extensions/core/websearch-extension.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/extensions/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extension Loader for 0xKobold
|
|
3
|
+
*
|
|
4
|
+
* Dynamically loads pi-coding-agent extensions from the core/ directory
|
|
5
|
+
* and external paths.
|
|
6
|
+
*/
|
|
7
|
+
import { readdir } from 'fs/promises';
|
|
8
|
+
import { pathToFileURL } from 'url';
|
|
9
|
+
import { resolve } from 'path';
|
|
10
|
+
/**
|
|
11
|
+
* Load extensions from specified paths
|
|
12
|
+
*/
|
|
13
|
+
export async function loadExtensions(pi, extensionPaths) {
|
|
14
|
+
for (const path of extensionPaths) {
|
|
15
|
+
try {
|
|
16
|
+
const resolvedPath = resolve(path);
|
|
17
|
+
const module = await import(pathToFileURL(resolvedPath).href);
|
|
18
|
+
const extension = module.default || module;
|
|
19
|
+
if (typeof extension === 'function') {
|
|
20
|
+
await extension(pi);
|
|
21
|
+
console.log(`[Extensions] Loaded: ${path}`);
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
console.error(`[Extensions] ${path} must export a function`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
console.error(`[Extensions] Failed to load ${path}:`, err);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Load built-in extensions from the core/ directory
|
|
34
|
+
*/
|
|
35
|
+
export async function loadBuiltInExtensions(pi) {
|
|
36
|
+
const coreDir = resolve(__dirname, 'core');
|
|
37
|
+
try {
|
|
38
|
+
const files = await readdir(coreDir);
|
|
39
|
+
for (const file of files) {
|
|
40
|
+
if (file.endsWith('.ts') || file.endsWith('.js')) {
|
|
41
|
+
const path = `${coreDir}/${file}`;
|
|
42
|
+
await loadExtensions(pi, [path]);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
console.error('[Extensions] Failed to load built-in extensions:', err);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Create extension API wrapper with 0xKobold-specific helpers
|
|
52
|
+
*/
|
|
53
|
+
export function createKoboldExtensionAPI(baseApi) {
|
|
54
|
+
return {
|
|
55
|
+
...baseApi,
|
|
56
|
+
// Add 0xKobold-specific utilities
|
|
57
|
+
registerKoboldTool: (tool) => {
|
|
58
|
+
baseApi.registerTool({
|
|
59
|
+
name: tool.name,
|
|
60
|
+
description: tool.description,
|
|
61
|
+
// @ts-ignore TSchema mismatch
|
|
62
|
+
parameters: tool.parameters,
|
|
63
|
+
// @ts-ignore Tool execute signature
|
|
64
|
+
execute: tool.execute,
|
|
65
|
+
});
|
|
66
|
+
},
|
|
67
|
+
registerKoboldCommand: (name, command) => {
|
|
68
|
+
const cmdHandler = command.handler || command.execute;
|
|
69
|
+
baseApi.registerCommand(name, {
|
|
70
|
+
description: command.description,
|
|
71
|
+
// @ts-ignore Handler signature
|
|
72
|
+
handler: async (args, ctx) => {
|
|
73
|
+
// @ts-ignore Handler signature
|
|
74
|
+
await cmdHandler?.(args, ctx);
|
|
75
|
+
},
|
|
76
|
+
});
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/extensions/loader.ts"],"names":[],"mappings":"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"}
|