kiku-agent 1.0.0 → 1.0.3

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.
Files changed (39) hide show
  1. package/README.md +293 -122
  2. package/package.json +60 -61
  3. package/server/agent/agentCore.js +892 -782
  4. package/server/agent/appPaths.js +21 -0
  5. package/server/agent/audioPlayer.js +739 -673
  6. package/server/agent/cli.js +1414 -1111
  7. package/server/agent/commandRegistry.js +74 -58
  8. package/server/agent/commands.js +1694 -788
  9. package/server/agent/config.js +264 -90
  10. package/server/agent/contextCompactor.js +79 -0
  11. package/server/agent/doctor.js +69 -0
  12. package/server/agent/eventBus.js +107 -103
  13. package/server/agent/gpuMetrics.js +189 -0
  14. package/server/agent/llmClient.js +369 -200
  15. package/server/agent/mcpClient.js +364 -0
  16. package/server/agent/memory.js +670 -566
  17. package/server/agent/modelManager.js +77 -0
  18. package/server/agent/research.js +202 -0
  19. package/server/agent/session.js +244 -239
  20. package/server/agent/subagent.js +116 -0
  21. package/server/agent/theme.js +125 -124
  22. package/server/agent/toolRouter.js +201 -0
  23. package/server/agent/tools.js +1679 -1528
  24. package/server/agent/ui.js +760 -469
  25. package/server/mcp/claude-desktop-config.example.json +1 -1
  26. package/server/mcp/data/discography.js +36 -36
  27. package/server/mcp/dataAdapter.js +102 -0
  28. package/server/mcp/examples/claude-code.mcp.example.json +19 -0
  29. package/server/mcp/examples/claude-desktop.example.json +11 -0
  30. package/server/mcp/examples/cline.example.json +13 -0
  31. package/server/mcp/examples/cursor.example.json +14 -0
  32. package/server/mcp/examples/gemini-cli.example.json +17 -0
  33. package/server/mcp/examples/opencode.example.json +21 -0
  34. package/server/mcp/examples/vscode.example.json +19 -0
  35. package/server/mcp/examples/windsurf.example.json +14 -0
  36. package/server/mcp/handler.js +85 -159
  37. package/server/mcp/security.js +140 -138
  38. package/server/mcp/server.js +129 -100
  39. package/server/mcp/stdio.js +4 -2
@@ -1,58 +1,74 @@
1
- export const COMMAND_DEFINITIONS = Object.freeze([
2
- { name: '/help', usage: '/help [command]', desc: 'Show all commands or details for one command', insert: '/help ' },
3
- { name: '/history', usage: '/history [n|search|clear]', desc: 'View or search chat history', insert: '/history ' },
4
- { name: '/session', usage: '/session [info|list|export|clear]', desc: 'Manage the current session', insert: '/session ' },
5
- { name: '/thinking', usage: '/thinking [show|hide|toggle]', desc: 'Control reasoning visibility', insert: '/thinking ' },
6
- { name: '/details', usage: '/details [Qn]', desc: 'Expand thinking and tool details (F2 opens latest)', insert: '/details ' },
7
- { name: '/lang', usage: '/lang [th|zh|en|auto]', desc: 'Set the response language', insert: '/lang ' },
8
- { name: '/theme', usage: '/theme [name|list|current|reset]', desc: 'View or change the terminal color theme', insert: '/theme ' },
9
- { name: '/mem', usage: '/mem [add|del|search|list|topics|import|export|clear]', desc: 'Manage long-term memory', insert: '/mem ' },
10
- { name: '/tool', usage: '/tool <name> [args]', desc: 'Execute a registered tool directly', insert: '/tool ' },
11
- { name: '/tools', usage: '/tools [filter]', desc: 'List registered tools', insert: '/tools ' },
12
- { name: '/stats', usage: '/stats', desc: 'Show the content database overview', insert: '/stats' },
13
- { name: '/model', usage: '/model', desc: 'Show LM Studio model information', insert: '/model' },
14
- { name: '/ping', usage: '/ping', desc: 'Check LM Studio latency', insert: '/ping' },
15
- { name: '/config', usage: '/config', desc: 'Show runtime configuration', insert: '/config' },
16
- { name: '/prompt', usage: '/prompt', desc: 'Preview the active system persona', insert: '/prompt' },
17
- { name: '/version', usage: '/version', desc: 'Show Kiku Agent version information', insert: '/version' },
18
- { name: '/system', usage: '/system', desc: 'Show operating-system and memory information', insert: '/system' },
19
- { name: '/about', usage: '/about', desc: 'Show information about Kiku Agent', insert: '/about' },
20
- { name: '/ads', usage: '/ads', desc: 'Show the next sponsor card', insert: '/ads' },
21
- { name: '/retry', usage: '/retry', desc: 'Retry the previous query', insert: '/retry' },
22
- { name: '/clear', usage: '/clear', desc: 'Archive the session and clear the screen', insert: '/clear' },
23
- { name: '/save', usage: '/save', desc: 'Export the transcript to Markdown', insert: '/save' },
24
- { name: '/play', usage: '/play <song>', desc: 'Play music', insert: '/play ' },
25
- { name: '/stop', usage: '/stop', desc: 'Stop music playback', insert: '/stop' },
26
- { name: '/pause', usage: '/pause', desc: 'Pause music playback', insert: '/pause' },
27
- { name: '/resume', usage: '/resume', desc: 'Resume music playback', insert: '/resume' },
28
- { name: '/next', usage: '/next', desc: 'Play the next queued track', insert: '/next' },
29
- { name: '/prev', usage: '/prev', desc: 'Return to the previous track', insert: '/prev' },
30
- { name: '/mute', usage: '/mute', desc: 'Mute music playback', insert: '/mute' },
31
- { name: '/unmute', usage: '/unmute', desc: 'Unmute music playback', insert: '/unmute' },
32
- { name: '/add', usage: '/add <song>', desc: 'Add a song to the music queue', insert: '/add ' },
33
- { name: '/remove', usage: '/remove <index>', desc: 'Remove a song from the music queue', insert: '/remove ' },
34
- { name: '/clearqueue', usage: '/clearqueue', desc: 'Clear the music queue', insert: '/clearqueue' },
35
- { name: '/search', usage: '/search <query>', desc: 'Search YouTube', insert: '/search ' },
36
- { name: '/current', usage: '/current', desc: 'Show the current track', insert: '/current' },
37
- { name: '/queue', usage: '/queue [clear]', desc: 'Show or clear the active queue', insert: '/queue ' },
38
- { name: '/login', usage: '/login', desc: 'Connect a YouTube browser session', insert: '/login' },
39
- { name: '/ytstatus', usage: '/ytstatus', desc: 'Show YouTube authentication status', insert: '/ytstatus' },
40
- { name: '/exit', usage: '/exit', desc: 'Archive the session and quit', insert: '/exit' },
41
- ]);
42
-
43
- export const COMMAND_NAMES = Object.freeze(COMMAND_DEFINITIONS.map(command => command.name));
44
-
45
- export const SUB_COMMANDS = Object.freeze({
46
- '/mem': ['add <fact>', 'search <query>', 'list', 'topics', 'del <id>', 'import <path>', 'export', 'clear'],
47
- '/lang': ['th', 'zh', 'en', 'auto'],
48
- '/theme': ['list', 'current', 'sakura', 'midnight', 'ocean', 'forest', 'sunset', 'monochrome', 'reset'],
49
- '/thinking': ['show', 'hide', 'toggle'],
50
- '/session': ['info', 'list', 'export', 'clear'],
51
- '/history': ['10', '20', '50', 'search <query>', 'clear'],
52
- '/queue': ['clear'],
53
- });
54
-
55
- export function findCommandDefinition(name) {
56
- const normalized = name?.startsWith('/') ? name.toLowerCase() : `/${String(name || '').toLowerCase()}`;
57
- return COMMAND_DEFINITIONS.find(command => command.name === normalized) || null;
58
- }
1
+ export const COMMAND_DEFINITIONS = Object.freeze([
2
+ { name: '/help', usage: '/help [command]', desc: 'Show all commands or details for one command', insert: '/help ' },
3
+ { name: '/history', usage: '/history [n|search|clear]', desc: 'View or search chat history', insert: '/history ' },
4
+ { name: '/session', usage: '/session [info|list|export|clear]', desc: 'Manage the current session', insert: '/session ' },
5
+ { name: '/thinking', usage: '/thinking [show|hide|toggle]', desc: 'Control reasoning visibility', insert: '/thinking ' },
6
+ { name: '/details', usage: '/details [Qn]', desc: 'Expand thinking and tool details (F2 opens latest)', insert: '/details ' },
7
+ { name: '/lang', usage: '/lang [th|zh|en|auto]', desc: 'Set the response language', insert: '/lang ' },
8
+ { name: '/theme', usage: '/theme [name|list|current|reset]', desc: 'View or change the terminal color theme', insert: '/theme ' },
9
+ { name: '/mem', usage: '/mem [add|del|search|list|topics|import|export|clear]', desc: 'Manage long-term memory', insert: '/mem ' },
10
+ { name: '/subagent', usage: '/subagent <research task>', desc: 'Run a bounded Ju Jingyi research subagent', insert: '/subagent ' },
11
+ { name: '/research', usage: '/research <question|status|last|sources|cancel>', desc: 'Run coordinated multi-source Ju Jingyi research', insert: '/research ' },
12
+ { name: '/verify', usage: '/verify <claim>', desc: 'Verify a Ju Jingyi claim with independent workers', insert: '/verify ' },
13
+ { name: '/sources', usage: '/sources', desc: 'Show sources from the latest research job', insert: '/sources' },
14
+ { name: '/skill', usage: '/skill [learn|list|del|on|off|clear]', desc: 'Teach Kiku how to answer for you', insert: '/skill ' },
15
+ { name: '/tool', usage: '/tool <name> [args]', desc: 'Execute a registered tool directly', insert: '/tool ' },
16
+ { name: '/tools', usage: '/tools [filter]', desc: 'List registered tools', insert: '/tools ' },
17
+ { name: '/stats', usage: '/stats', desc: 'Show the content database overview', insert: '/stats' },
18
+ { name: '/provider', usage: '/provider [list|use <name> [model]|models [name]|info <name>|test|setkey <key>|status]', desc: 'Manage AI providers (OpenAI, Gemini, Groq, DeepSeek, OpenRouter, LM Studio)', insert: '/provider ' },
19
+ { name: '/model', usage: '/model [status|list|recommend|use <id>|reconnect]', desc: 'Inspect, recommend, or switch active AI model', insert: '/model ' },
20
+ { name: '/mcp', usage: '/mcp [status|list|connect <name> <url|cmd>|disconnect <name>|tools]', desc: 'Manage external Model Context Protocol connections', insert: '/mcp ' },
21
+ { name: '/ping', usage: '/ping', desc: 'Check active model server latency', insert: '/ping' },
22
+ { name: '/config', usage: '/config', desc: 'Show runtime configuration', insert: '/config' },
23
+ { name: '/doctor', usage: '/doctor', desc: 'Check first-run environment and optional features', insert: '/doctor' },
24
+ { name: '/prompt', usage: '/prompt', desc: 'Preview the active system persona', insert: '/prompt' },
25
+ { name: '/version', usage: '/version', desc: 'Show Kiku Agent version information', insert: '/version' },
26
+ { name: '/system', usage: '/system', desc: 'Show operating-system and memory information', insert: '/system' },
27
+ { name: '/gpu', usage: '/gpu [status]', desc: 'Show GPU & VRAM hardware resource metrics', insert: '/gpu' },
28
+ { name: '/about', usage: '/about', desc: 'Show information about Kiku Agent', insert: '/about' },
29
+ { name: '/ads', usage: '/ads', desc: 'Show the next sponsor card', insert: '/ads' },
30
+ { name: '/retry', usage: '/retry', desc: 'Retry the previous query', insert: '/retry' },
31
+ { name: '/clear', usage: '/clear', desc: 'Archive the session and clear the screen', insert: '/clear' },
32
+ { name: '/save', usage: '/save', desc: 'Export the transcript to Markdown', insert: '/save' },
33
+ { name: '/play', usage: '/play <song>', desc: 'Play music', insert: '/play ' },
34
+ { name: '/stop', usage: '/stop', desc: 'Stop music playback', insert: '/stop' },
35
+ { name: '/pause', usage: '/pause', desc: 'Pause music playback', insert: '/pause' },
36
+ { name: '/resume', usage: '/resume', desc: 'Resume music playback', insert: '/resume' },
37
+ { name: '/next', usage: '/next', desc: 'Play the next queued track', insert: '/next' },
38
+ { name: '/prev', usage: '/prev', desc: 'Return to the previous track', insert: '/prev' },
39
+ { name: '/mute', usage: '/mute', desc: 'Mute music playback', insert: '/mute' },
40
+ { name: '/unmute', usage: '/unmute', desc: 'Unmute music playback', insert: '/unmute' },
41
+ { name: '/add', usage: '/add <song>', desc: 'Add a song to the music queue', insert: '/add ' },
42
+ { name: '/remove', usage: '/remove <index>', desc: 'Remove a song from the music queue', insert: '/remove ' },
43
+ { name: '/clearqueue', usage: '/clearqueue', desc: 'Clear the music queue', insert: '/clearqueue' },
44
+ { name: '/search', usage: '/search <query>', desc: 'Search YouTube', insert: '/search ' },
45
+ { name: '/current', usage: '/current', desc: 'Show the current track', insert: '/current' },
46
+ { name: '/queue', usage: '/queue [clear]', desc: 'Show or clear the active queue', insert: '/queue ' },
47
+ { name: '/login', usage: '/login', desc: 'Connect a YouTube browser session', insert: '/login' },
48
+ { name: '/ytstatus', usage: '/ytstatus', desc: 'Show YouTube authentication status', insert: '/ytstatus' },
49
+ { name: '/exit', usage: '/exit', desc: 'Archive the session and quit', insert: '/exit' },
50
+ ]);
51
+
52
+ export const COMMAND_NAMES = Object.freeze(COMMAND_DEFINITIONS.map(command => command.name));
53
+
54
+ export const SUB_COMMANDS = Object.freeze({
55
+ '/mem': ['add <fact>', 'search <query>', 'list', 'topics', 'del <id>', 'import <path>', 'export', 'clear'],
56
+ '/subagent': ['<research task>'],
57
+ '/research': ['<question>', 'status', 'last', 'sources', 'cancel'],
58
+ '/verify': ['<claim>'],
59
+ '/skill': ['learn <instruction>', 'list', 'del <id>', 'on', 'off', 'clear'],
60
+ '/provider': ['list', 'status', 'models', 'models openai', 'models gemini', 'models groq', 'models deepseek', 'models openrouter', 'models lmstudio', 'use openai', 'use openrouter', 'use groq', 'use deepseek', 'use gemini', 'use lmstudio', 'use custom', 'info', 'test', 'setkey <key>'],
61
+ '/model': ['status', 'list', 'recommend', 'use <model-id>', 'reconnect'],
62
+ '/mcp': ['status', 'list', 'tools', 'connect <name> <url>', 'disconnect <name>'],
63
+ '/lang': ['th', 'zh', 'en', 'auto'],
64
+ '/theme': ['list', 'current', 'sakura', 'midnight', 'ocean', 'forest', 'sunset', 'monochrome', 'reset'],
65
+ '/thinking': ['show', 'hide', 'toggle'],
66
+ '/session': ['info', 'list', 'export', 'clear'],
67
+ '/history': ['10', '20', '50', 'search <query>', 'clear'],
68
+ '/queue': ['clear'],
69
+ });
70
+
71
+ export function findCommandDefinition(name) {
72
+ const normalized = name?.startsWith('/') ? name.toLowerCase() : `/${String(name || '').toLowerCase()}`;
73
+ return COMMAND_DEFINITIONS.find(command => command.name === normalized) || null;
74
+ }