@j-o-r/hello-dave 0.1.1 → 0.1.5

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 (173) hide show
  1. package/CHANGELOG.md +42 -25
  2. package/README.md +81 -221
  3. package/TODO.md +173 -35
  4. package/agents/agent_creator.js +105 -0
  5. package/agents/agent_creator.prompt.md +371 -0
  6. package/agents/ask_agent.js +64 -127
  7. package/agents/claude_agent.js +68 -0
  8. package/agents/code_agent.js +55 -135
  9. package/agents/code_agent.prompt.md +50 -0
  10. package/agents/echo_agent.js +76 -0
  11. package/agents/financial_expert.js +75 -0
  12. package/agents/gpt_agent.js +52 -103
  13. package/agents/gpt_code.js +81 -0
  14. package/agents/grok_agent.js +58 -114
  15. package/agents/minimax_agent.js +92 -0
  16. package/agents/mureka_agent.js +77 -0
  17. package/agents/planner_agent.js +172 -0
  18. package/agents/stability_agent.js +87 -0
  19. package/agents/test_agent.js +75 -157
  20. package/agents/weather_agent.js +73 -0
  21. package/agents/workflow_agent.js +189 -0
  22. package/bin/dave.js +436 -184
  23. package/docs/bin-dave.md +85 -35
  24. package/docs/cdn-ssh.md +100 -0
  25. package/docs/creating-agents.md +301 -0
  26. package/docs/creating-toolsets.md +336 -0
  27. package/docs/docs-organization.md +48 -0
  28. package/docs/project-overview.md +86 -51
  29. package/lib/API/elevenlabs.io/music.compose.md +441 -0
  30. package/lib/API/elevenlabs.io/music.create-composition-plan.md +370 -0
  31. package/lib/API/elevenlabs.io/music.stream.md +425 -0
  32. package/lib/API/lalal.ai/lalal.js +445 -0
  33. package/lib/API/lalal.ai/openapi.json +2614 -0
  34. package/lib/API/minimax/ImageToolset.js +82 -37
  35. package/lib/API/minimax/MusicToolset.js +125 -79
  36. package/lib/API/minimax/VideoToolset.js +170 -167
  37. package/lib/API/minimax/image.js +5 -1
  38. package/lib/API/minimax/music.js +210 -23
  39. package/lib/API/minimax/video.js +242 -53
  40. package/lib/API/mureka/MusicToolset.js +646 -0
  41. package/lib/API/mureka/README.md +41 -0
  42. package/lib/API/mureka/index.js +7 -0
  43. package/lib/API/mureka/music.js +658 -0
  44. package/lib/API/openai.com/index.js +7 -0
  45. package/lib/API/openai.com/{reponses/text.js → responses.js} +64 -18
  46. package/lib/API/openai.com/video.create.character.md +40 -0
  47. package/lib/API/openai.com/video.create.md +219 -0
  48. package/lib/API/openai.com/video.delete.md +44 -0
  49. package/lib/API/openai.com/video.download.md +31 -0
  50. package/lib/API/openai.com/video.edit.md +155 -0
  51. package/lib/API/openai.com/video.extend.md +166 -0
  52. package/lib/API/openai.com/video.fetch.character.md +43 -0
  53. package/lib/API/openai.com/video.js +784 -0
  54. package/lib/API/openai.com/video.list.md +201 -0
  55. package/lib/API/openai.com/video.remix.md +175 -0
  56. package/lib/API/openai.com/video.retrieve.md +139 -0
  57. package/lib/API/openai.com/videoToolset.js +616 -0
  58. package/lib/API/stability.ai/ImageToolset.js +131 -40
  59. package/lib/API/stability.ai/MusicToolset.js +79 -47
  60. package/lib/API/stability.ai/audio.js +63 -131
  61. package/lib/API/x.ai/chat.responses.md +1040 -0
  62. package/lib/API/x.ai/image.js +229 -59
  63. package/lib/API/x.ai/imageToolset.js +376 -0
  64. package/lib/API/x.ai/index.js +1 -1
  65. package/lib/API/x.ai/responses.js +9 -18
  66. package/lib/Agent.js +271 -0
  67. package/lib/Agent.js.old +284 -0
  68. package/lib/AgentLauncher.js +593 -0
  69. package/lib/Cli.js +87 -13
  70. package/lib/Prompt.js +23 -1
  71. package/lib/Session.js +5 -4
  72. package/lib/ToolSet.js +102 -6
  73. package/lib/agentLoader.js +369 -0
  74. package/lib/cdn.js +67 -231
  75. package/lib/{CdnToolset.js → cdnToolset.js} +47 -64
  76. package/lib/defaultToolsets.js +43 -0
  77. package/lib/fafs.js +1 -1
  78. package/lib/genericToolset.js +442 -119
  79. package/lib/handOffToolset.js +179 -0
  80. package/lib/index.js +34 -27
  81. package/lib/toolsetLoader.js +248 -0
  82. package/package.json +10 -4
  83. package/types/API/lalal.ai/lalal.d.ts +116 -0
  84. package/types/API/minimax/image.d.ts +2 -1
  85. package/types/API/minimax/music.d.ts +189 -26
  86. package/types/API/minimax/video.d.ts +100 -31
  87. package/types/API/mureka/index.d.ts +7 -0
  88. package/types/API/mureka/music.d.ts +472 -0
  89. package/types/API/openai.com/index.d.ts +7 -0
  90. package/types/API/openai.com/{reponses/text.d.ts → responses.d.ts} +11 -11
  91. package/types/API/openai.com/video.d.ts +409 -0
  92. package/types/API/openai.com/videoToolset.d.ts +24 -0
  93. package/types/API/stability.ai/audio.d.ts +14 -103
  94. package/types/API/stability.ai/image.d.ts +2 -2
  95. package/types/API/x.ai/image.d.ts +138 -26
  96. package/types/API/x.ai/imageToolset.d.ts +3 -0
  97. package/types/API/x.ai/index.d.ts +1 -1
  98. package/types/API/x.ai/responses.d.ts +4 -4
  99. package/types/Agent.d.ts +123 -0
  100. package/types/AgentLauncher.d.ts +250 -0
  101. package/types/Cli.d.ts +28 -8
  102. package/types/Prompt.d.ts +23 -5
  103. package/types/Session.d.ts +1 -1
  104. package/types/ToolSet.d.ts +10 -0
  105. package/types/agentLoader.d.ts +78 -0
  106. package/types/cdn.d.ts +15 -90
  107. package/types/defaultToolsets.d.ts +9 -0
  108. package/types/fafs.d.ts +1 -1
  109. package/types/genericToolset.d.ts +1 -1
  110. package/types/handOffToolset.d.ts +28 -0
  111. package/types/index.d.ts +19 -17
  112. package/types/toolsetLoader.d.ts +114 -0
  113. package/utils/format_log.js +101 -23
  114. package/utils/launch_agent.js +18 -0
  115. package/utils/list_sessions.sh +13 -5
  116. package/utils/search_sessions.sh +65 -29
  117. package/utils/toolsets.js +33 -0
  118. package/README.md.bak.1779452127 +0 -240
  119. package/agents/codeserver.sh +0 -47
  120. package/agents/daisy_agent.js +0 -173
  121. package/agents/docs_agent.js +0 -148
  122. package/agents/memory_agent.js +0 -263
  123. package/agents/minimax.js +0 -173
  124. package/agents/npm_agent.js +0 -202
  125. package/agents/prompt_agent.js +0 -133
  126. package/agents/readme_agent.js +0 -148
  127. package/agents/spawn_agent.js +0 -160
  128. package/agents/stability.js +0 -173
  129. package/agents/todo_agent.js +0 -175
  130. package/bin/codeDave +0 -58
  131. package/docs/agent-dave-websocket-protocol.md +0 -180
  132. package/docs/agent-manager.md +0 -244
  133. package/docs/codeserver-pattern.md +0 -191
  134. package/docs/generic-toolset.md +0 -326
  135. package/docs/howtos/agent-networking.md +0 -253
  136. package/docs/howtos/spawn-agents.md.bak +0 -200
  137. package/docs/howtos/spawn-agents.md.bak_new +0 -200
  138. package/docs/multi-agent-clusters.md +0 -265
  139. package/docs/music-toolsets.md +0 -137
  140. package/docs/path-resolution-best-practices.md +0 -104
  141. package/docs/plans/minimax-music-generation.md +0 -80
  142. package/docs/plans/unified-agent-architecture.md +0 -146
  143. package/docs/plans/websocket-streaming-plan.md.bak +0 -317
  144. package/docs/prompt/spawn_agent.md +0 -175
  145. package/docs/prompt/spawn_agent.md.bak +0 -201
  146. package/docs/prompt/task_clarification_and_documentation.md +0 -35
  147. package/docs/prompt-class.md +0 -141
  148. package/docs/todo-archive-infra-2026-04-21.md +0 -15
  149. package/docs/todo-archive-v0.0.8.md +0 -1
  150. package/docs/todo-archive-v0.1.0.md +0 -32
  151. package/docs/todo-archive.md +0 -44
  152. package/docs/tools-syntax-validation.md +0 -121
  153. package/docs/toolset.md +0 -164
  154. package/docs/xai-responses.md +0 -111
  155. package/docs/xai_collections.md +0 -106
  156. package/lib/API/x.ai/ImageToolset.js +0 -165
  157. package/lib/API/x.ai/text.js +0 -415
  158. package/lib/AgentClient.js +0 -248
  159. package/lib/AgentManager.js +0 -245
  160. package/lib/AgentServer.js +0 -404
  161. package/lib/wsCli.js +0 -287
  162. package/lib/wsIO.js +0 -90
  163. package/types/API/x.ai/text.d.ts +0 -286
  164. package/types/AgentClient.d.ts +0 -109
  165. package/types/AgentManager.d.ts +0 -100
  166. package/types/AgentServer.d.ts +0 -89
  167. package/types/wsCli.d.ts +0 -17
  168. package/types/wsIO.d.ts +0 -30
  169. package/utils/test.sh +0 -46
  170. /package/docs/{suggestions.md → _notes/token-counts.md} +0 -0
  171. /package/lib/API/openai.com/{reponses/MESSAGES.md → MESSAGES.md} +0 -0
  172. /package/types/API/{x.ai/ImageToolset.d.ts → mureka/MusicToolset.d.ts} +0 -0
  173. /package/types/{CdnToolset.d.ts → cdnToolset.d.ts} +0 -0
package/agents/minimax.js DELETED
@@ -1,173 +0,0 @@
1
- #!/usr/bin/env node
2
- import { AgentManager, API, CdnToolset } from '@j-o-r/hello-dave';
3
- import * as test from '@j-o-r/hello-dave';
4
- import { parseArgs } from '@j-o-r/sh';
5
-
6
- const name = 'minimaxi';
7
- const api = 'xai';
8
- let secret = '';
9
-
10
- const args = parseArgs();
11
-
12
- let input;
13
- if (args._.length === 1 && typeof args._[0] === 'string' && args._[0].trim() !== '') {
14
- input = args._[0].trim();
15
- }
16
-
17
- const help = args['help'] || false;
18
- const connect = args['connect'] ? args['connect'] : undefined;
19
- const serve = args['serve'] ? parseInt(args['serve']) : undefined;
20
-
21
- /** @type {import('lib/API/x.ai/responses.js').XAIOptions} */
22
- const options = { tools: [] };
23
- options.tools.push({
24
- type: 'web_search'
25
- });
26
-
27
- if (args['secret']) {
28
- secret = args['secret'];
29
- }
30
- if (args['model'] || true) {
31
- options.model = args['model'] || 'grok-4-fast-reasoning';
32
- }
33
- if (args['temperature']) {
34
- options.temperature = parseFloat(args['temperature']);
35
- } else {
36
- options.temperature = 0.8;
37
- }
38
- if (args['tokens']) {
39
- options.max_output_tokens = parseInt(args['tokens']);
40
- }
41
- if (args['top_p']) {
42
- options.top_p = parseFloat(args['top_p']);
43
- }
44
- const reasoning = true;
45
- if (reasoning) {
46
- options.reasoning = {
47
- effort: 'medium',
48
- summary: 'auto'
49
- }
50
- }
51
- const toolsetMode = 'auto';
52
- const contextWindow = args['context'] ? parseInt(args['context']) : 1900000;
53
-
54
- function printHelp() {
55
- console.log(`
56
- '${name} --help' You are looking at it.
57
-
58
- ## USAGE MODES:
59
-
60
- ### 1. Direct Call (One-Shot, Positional ONLY):
61
- ./agents/${name}.js "Generate lyrics for pop song" [--options]
62
-
63
- ### 2. Interactive CLI (no positional arg):
64
- ./agents/${name}.js [--options]
65
-
66
- ### 3. WS Server (no positional arg):
67
- ./agents/${name}.js --serve 8080 [--secret mysecret] [--options]
68
-
69
- ### 4. WS Client (no positional arg):
70
- ./agents/${name}.js --connect ws://127.0.0.1:8080/ws --secret mysecret [--options]
71
-
72
- ### 5. Hybrid (Server + Client, no positional arg):
73
- ./agents/${name}.js --serve 8081 --connect ws://other:8080/ws [--secret ...] [--options]
74
-
75
- ## SERVER OPTIONS EXPLAINED:
76
- --serve [port]: Starts WebSocket SERVER at ws://127.0.0.1:[port]/ws. Allows other agents (--connect) to connect and use this agent as a remote TOOL (e.g., 'daisy_agent'). Runs indefinitely until Ctrl+C.
77
-
78
- --connect [ws_url]: Connects as CLIENT to remote WS server at [ws_url] (e.g., ws://127.0.0.1:8080/ws). Gains access to remote agent's tools. Interactive CLI available.
79
-
80
- --secret [string]: SHARED AUTH TOKEN (min 3 chars). SERVER rejects clients without matching --secret. CLIENTS must provide server's secret to connect. Use same secret for chains.
81
-
82
- Note: Server/Client/Hybrid IGNORES positional input arg (use CLI modes instead). Hybrid: This agent serves AND uses remote tools.
83
-
84
- ## OPTIONS:
85
- --model [grok-4-fast-reasoning|...] (default: grok-4-fast-reasoning)
86
- --temperature [float] (-2 to +2, default 0.8 for creativity)
87
- --tokens [number] (max output tokens)
88
- --top_p [float]
89
- --context [number] (default: 1900000)
90
-
91
- ## SERVER TOOLS (when no input):
92
- Exposes as 'daisy_agent' tool for chaining.
93
- `);
94
- process.exit();
95
- }
96
-
97
- if (help) {
98
- printHelp();
99
- }
100
-
101
- const tool_call_name = 'daisy_agent';
102
- const tool_call_description = `
103
- Daisy Music Assistant:
104
- - "Lyrics for [theme]" → Generate lyrics.
105
- - "Music minimax prompt: [style]" → Optimized prompt.
106
- - "ffmpeg [task] on file.wav" → Bash script to run.
107
- - web_search: Research chords/lyrics.
108
- - execute_bash_script: Processes your local files safely.
109
- - Create music
110
- `.trim();
111
-
112
- const prompt = `
113
- You are ${name}, a helpful music creation and editing assistant for the user's computer.
114
-
115
- Core expertise:
116
- - Generate lyrics: Creative, structured (verses, chorus), themed, rhyming.
117
- - niMAx 2.6 AI prompts: Detailed, vivid descriptions (genre, mood, instruments, structure, vocals).
118
- - Local audio editing: Use execute_bash_script with ffmpeg/sox commands. Provide exact bash snippets first, confirm before running. Examples:
119
- * Trim: ffmpeg -i input.mp3 -ss 00:00:30 -t 00:01:00 output.mp3
120
- * Concat: echo "file 'a.mp3'" > list.txt; ffmpeg -f concat -i list.txt out.mp3
121
- * Sox effects: sox input.wav output.wav fade 0 3 2 norm
122
- * Convert: ffmpeg -i video.mp4 audio.aac
123
- - Music theory: Chords, scales, BPM, EQ tips.
124
- - Workflows: Step-by-step for mixing, mastering, layering tracks.
125
-
126
- Behavior:
127
- - Be creative & enthusiastic!
128
- - Step-by-step: Explain, provide code, suggest files in current dir.
129
- - Safety: Quote bash commands; ask confirmation for destructive ops (e.g., overwrite).
130
- - Use web_search for inspiration/lyrics if needed.
131
- - Output ready-to-copy bash for ffmpeg/sox.
132
- - List files if unclear: Use ls *.wav *.mp3 etc. via bash.
133
-
134
- Current env: Ubuntu, ffmpeg & sox installed
135
-
136
- Respond concisely but completely. Use markdown for code/lyrics/prompts.
137
- `.trim();
138
-
139
- const agent = new AgentManager({ name, secret });
140
- agent.setup({
141
- prompt,
142
- api,
143
- options,
144
- toolsetMode,
145
- contextWindow
146
- });
147
- const toolset = agent.getToolset();
148
- toolset?.borrow(API.minimax.musicToolset);
149
- toolset?.borrow(CdnToolset);
150
- if (toolset) {
151
- agent.addGenericToolcall('open_link');
152
- agent.addGenericToolcall('execute_bash_script');
153
- agent.addGenericToolcall('read_file');
154
- agent.addGenericToolcall('write_file');
155
- }
156
-
157
- const cliIntro = `
158
- ${name} ${options.model} ready! (temp: ${options.temperature}, context: ${contextWindow})
159
-
160
- Ask me to:
161
- - Write lyrics
162
- - Craft Music prompts
163
- - Edit audio: "fade out my track.mp3" → I'll give ffmpeg cmd
164
- Type /help for more.
165
- ${tool_call_name}
166
- `.trim();
167
-
168
- if (input) {
169
- const RES = await agent.directCall(input);
170
- console.log(RES);
171
- } else {
172
- await agent.start(serve, connect, cliIntro, tool_call_name, tool_call_description);
173
- }
@@ -1,202 +0,0 @@
1
- #!/usr/bin/env node
2
- import { AgentManager } from '@j-o-r/hello-dave';
3
- import { parseArgs } from '@j-o-r/sh';
4
-
5
- const name = 'npm_agent';
6
- const api = 'xai';
7
- let secret = '';
8
-
9
- const args = parseArgs();
10
-
11
- let input; // Directcall input (positional ONLY - NO pipe)
12
- if (args._.length === 1 && typeof args._[0] === 'string' && args._[0].trim() !== '') {
13
- input = args._[0].trim();
14
- }
15
-
16
- const help = args['help'] || false;
17
- const connect = args['connect'] ? args['connect'] : undefined;
18
- const serve = args['serve'] ? parseInt(args['serve']) : undefined;
19
-
20
- /** @type {import('lib/API/x.ai/responses.js').XAIOptions} */
21
- const options = { tools: [] };
22
- options.tools.push({
23
- type: 'web_search'
24
- });
25
-
26
- if (args['secret']) {
27
- secret = args['secret'];
28
- }
29
- if (args['model'] || true) {
30
- options.model = args['model'] || 'grok-4-fast-reasoning';
31
- }
32
- if (args['temperature']) {
33
- options.temperature = parseFloat(args['temperature']);
34
- }
35
- if (args['tokens']) {
36
- options.max_output_tokens = parseInt(args['tokens']);
37
- }
38
- if (args['top_p']) {
39
- options.top_p = parseFloat(args['top_p']);
40
- }
41
- const reasoning = true;
42
- if (reasoning) {
43
- options.reasoning = {
44
- effort: 'medium',
45
- summary: 'auto'
46
- }
47
- }
48
- const toolsetMode = 'auto';
49
- const contextWindow = args['context'] ? parseInt(args['context']) : 250000;
50
-
51
- function printHelp() {
52
- console.log(`
53
- '${name} --help' You are looking at it.
54
-
55
- ## USAGE MODES:
56
-
57
- ### 1. Direct Call (One-Shot, Positional ONLY):
58
- ./agents/${name}.js "What modules are installed?" [--options]
59
-
60
- ### 2. Interactive CLI (no positional arg):
61
- ./agents/${name}.js [--options]
62
-
63
- ### 3. WS Server (no positional arg):
64
- ./agents/${name}.js --serve 8080 [--secret mysecret] [--options]
65
-
66
- ### 4. WS Client (no positional arg):
67
- ./agents/${name}.js --connect ws://127.0.0.1:8080/ws --secret mysecret [--options]
68
-
69
- ### 5. Hybrid (Server + Client, no positional arg):
70
- ./agents/${name}.js --serve 8081 --connect ws://other:8080/ws [--secret ...] [--options]
71
-
72
- ## SERVER OPTIONS EXPLAINED:
73
- --serve [port]: Starts WebSocket SERVER at ws://127.0.0.1:[port]/ws. Allows other agents (--connect) to connect and use this agent as a remote TOOL (e.g., 'npm_module_inspector'). Runs indefinitely until Ctrl+C.
74
-
75
- --connect [ws_url]: Connects as CLIENT to remote WS server at [ws_url] (e.g., ws://127.0.0.1:8080/ws). Gains access to remote agent's tools. Interactive CLI available.
76
-
77
- --secret [string]: SHARED AUTH TOKEN (min 3 chars). SERVER rejects clients without matching --secret. CLIENTS must provide server's secret to connect. Use same secret for chains.
78
-
79
- Note: Server/Client/Hybrid IGNORES positional input arg (use CLI modes instead). Hybrid: This agent serves AND uses remote tools.
80
-
81
- ## OPTIONS:
82
- --model [grok-4-fast-reasoning|...] (default: grok-4-fast-reasoning)
83
- --temperature [float] (-2 to +2)
84
- --tokens [number] (max output tokens)
85
- --top_p [float]
86
- --context [number] (default: 250000)
87
-
88
- ## SERVER TOOLS (when no input):
89
- Exposes as 'npm_module_inspector' tool for chaining.
90
- `);
91
- process.exit()
92
- }
93
-
94
- if (help) {
95
- printHelp();
96
- }
97
-
98
- const tool_call_name = 'npm_module_inspector';
99
- const tool_call_description = `
100
- NPM modules expert (scoped & unscoped). Uses \`npm ls -a\` + bash **exclusively inside ./node_modules/**.
101
- **Smart Cache**: .cache/npm-agent-storage.md (auto-read/update, token-efficient, auto-refreshes on changes). Agent-owned.
102
- `.trim();
103
-
104
- const CACHE_FILE = '.cache/npm-agent-storage.md';
105
-
106
- const prompt = `
107
- You are a coding assistant specializing in Bash and JavaScript (ESM/ESNext), with support for other languages.
108
- Your role: Help users code with external NPM modules installed in the project's ./node_modules/ (dynamic CWD).
109
- Scoped (@j-o-r/cli) == unscoped (gpt-3-encoder) priority.
110
-
111
- CWD dynamic (pwd; project root w/ package.json/node_modules).
112
-
113
- CRITICAL: **NEVER** inspect/read **OUTSIDE** ./node_modules/. NO project files. **ONLY** \`npm ls -a\` (local) + node_modules/ paths. **NEVER** run \`npm install\` or suggest installs unless NO existing/native alternative (justify HEAVILY, prefer polyfills).
114
-
115
- **Dependency Strategy**: For all coding requests, follow this order to keep dependencies minimal (prevent bloat):
116
- 1. **Always try existing installed modules first**: Scan \`npm ls -a\` FULL TREE (all subdeps). Prioritize functions from ANY module.
117
- 2. **Native code**: Node.js/Bash builtins ONLY if no module match.
118
- 3. **Suggest new dep LAST/RARE**: ABSOLUTELY NO unless gap proven (no existing/native). Heavy justification + \`npm i --save-dev PKG\` (dev pref). Goal: ZERO new installs.
119
-
120
- **Auto-Cache Init (MANDATORY FIRST on EVERY query - FULL SCAN)**:
121
- touch ${CACHE_FILE}
122
- echo "## Full Tree (npm ls -a unique modules)" >> ${CACHE_FILE}
123
- npm ls -a --parseable 2>/dev/null | sed 's|.*/||' | sort -u | head -50 >> ${CACHE_FILE} # All unique PKGs (top + sub)
124
- echo "## Top-Level (--depth=0)" >> ${CACHE_FILE}
125
- npm ls --depth=0 | grep -E '^[├└]──' | sed 's/^[├└ ]*── //' | sed 's/ .*//' >> ${CACHE_FILE}
126
- **Condensed Scan**: find node_modules/ -name package.json | sed 's|.*/||;s|/package.json||' | sort -u > ${CACHE_FILE}.allmods
127
-
128
- **Vague Query Mode** (e.g., "tests"):
129
- - Full scan: \`npm ls -a | grep -i "\$QUERY" || find node_modules/ -name "*.d.ts" -o -name "*.js" | head -50 | xargs grep -lE "\$QUERY|test|assert" | sed 's|.*/||;s|\..*||' | sort -u\`
130
- - Output table: Module | Exports | For | Usage (from all tree).
131
- - Append "## QUERY: \$QUERY\nHits: list" >> ${CACHE_FILE}
132
-
133
- **Smart Cache (.cache/npm-agent-storage.md)**: Agent-owned, **auto-managed FULL TREE** (read-first, update-on-change).
134
- - Token Saver: Grep FIRST across all sections.
135
- - Init: touch .cache/npm-agent-storage.md
136
-
137
- PRIORITIZE \`npm ls -a\` (full tree) + bash inside ALL MODULE_DIRs.
138
-
139
- Tools:
140
- - execute_bash_script: \`npm ls -a ...\` + \`cat node_modules/\$PKG_NAME/package.json\`. Prefix ALWAYS.
141
- - web_search: Docs ONLY.
142
- - history_search: Chats.
143
-
144
- **Smart Workflow** (per query; full tree always):
145
- 1. **Full Tree Installed/Version**:
146
- PKGS=\$(npm ls -a --parseable 2>/dev/null | sed 's|.*/||' | sort -u | head -50)
147
- for PKG in \$PKGS; do npm ls "\$PKG" 2>/dev/null | tail -1 | grep -o 'v[0-9].*' || echo "\$PKG ??"; done
148
-
149
- 2. **Smart Cache Check**:
150
- grep -A 30 "^## Full Tree" .cache/npm-agent-storage.md || echo "Cache miss"
151
-
152
- 3. **Inspect if Miss** (loop top 10 hits):
153
- - For each MODULE_DIR=node_modules/\$PKG: [existing inspect + enhanced types/docs grep]
154
- - Vague: grep -riE "\$QUERY" node_modules/\$PKG/*.{json,md,d.ts,js} | head -20
155
-
156
- 4. **Auto-Update Cache** (CONDENSED, FULL):
157
- sed -i.bak "/^## Full Tree/,/^## QUERY/d" ${CACHE_FILE} && rm ${CACHE_FILE}.bak
158
- cat >> ${CACHE_FILE} << EOC
159
- ## Full Tree (npm ls -a)
160
- \$ALL_PKGS (50 unique)
161
-
162
- ## \$PKG v\$VER
163
- Exports: \$EXPORTS
164
- For: \$KEYWORDS (test/query hits)
165
- Usage: import {fn} from '\$PKG';
166
- EOC
167
-
168
- 5. **List All**: \`npm ls -a | head -50 | grep -E '^[├└]' | sed 's/^[├└ ]*── //' | cut -d@ -f1 | sort -u\`
169
-
170
- 6. **Coding Help**: ESM/Bash snippets from FULL TREE. **MANDATORY**: Strategy + table + "NO new deps - use existing \$PKG".
171
-
172
- **MANDATORY**: FULL \`npm ls -a\` every time. Vague scans ALL modules. **STRICT NO INSTALLS** unless proven gap. Condensed output. Portable.
173
- `.trim();
174
-
175
- const agent = new AgentManager({ name, secret });
176
- agent.setup({
177
- prompt,
178
- api,
179
- options,
180
- toolsetMode,
181
- contextWindow
182
- });
183
- const toolset = agent.getToolset();
184
- if (toolset) {
185
- agent.addGenericToolcall('history_search');
186
- agent.addGenericToolcall('javascript_interpreter');
187
- agent.addGenericToolcall('execute_bash_script');
188
- agent.addGenericToolcall('read_file');
189
- agent.addGenericToolcall('write_file');
190
- }
191
- const cliIntro = `
192
- ${name} ${options.model}.
193
- - context: ${contextWindow}. Smart cache: ${CACHE_FILE} (FULL npm ls -a auto).
194
- ${tool_call_name}
195
- `.trim();
196
-
197
- if (input) {
198
- const RES = await agent.directCall(input);
199
- console.log(RES);
200
- } else {
201
- await agent.start(serve, connect, cliIntro, tool_call_name, tool_call_description);
202
- }
@@ -1,133 +0,0 @@
1
- #!/usr/bin/env node
2
- import { AgentManager } from '@j-o-r/hello-dave';
3
- import { parseArgs } from '@j-o-r/sh';
4
-
5
- const name = 'prompt_agent';
6
- const api = 'xai';
7
- let secret = '';
8
-
9
- const args = parseArgs();
10
-
11
- let input; // Directcall input (positional ONLY - NO pipe)
12
- if (args._.length === 1 && typeof args._[0] === 'string' && args._[0].trim() !== '') {
13
- input = args._[0].trim();
14
- }
15
-
16
- const help = args['help'] || false;
17
- const connect = args['connect'] ? args['connect'] : undefined;
18
- const serve = args['serve'] ? parseInt(args['serve']) : undefined;
19
-
20
- /** @type {import('lib/API/x.ai/responses.js').XAIOptions} */
21
- const options = { tools: [] };
22
- options.tools.push({
23
- type: 'web_search'
24
- });
25
-
26
- if (args['secret']) {
27
- secret = args['secret'];
28
- }
29
- if (args['model'] || true) {
30
- options.model = args['model'] || 'grok-4-fast-reasoning';
31
- }
32
- if (args['temperature']) {
33
- options.temperature = parseFloat(args['temperature']);
34
- }
35
- if (args['tokens']) {
36
- options.max_output_tokens = parseInt(args['tokens']);
37
- }
38
- if (args['top_p']) {
39
- options.top_p = parseFloat(args['top_p']);
40
- }
41
- const reasoning = true;
42
- if (reasoning) {
43
- options.reasoning = {
44
- effort: 'medium',
45
- summary: 'auto'
46
- }
47
- }
48
- const toolsetMode = 'auto';
49
- const contextWindow = args['context'] ? parseInt(args['context']) : 250000;
50
-
51
- function printHelp() {
52
- console.log(`'${name} --help' You are looking at it.
53
-
54
- ## USAGE MODES:
55
-
56
- ### 1. Direct Call (One-Shot, Positional ONLY):
57
- ./agents/${name}.js "Optimize this prompt: [prompt]" [--options]
58
-
59
- ### 2. Interactive CLI (no positional arg):
60
- ./agents/${name}.js [--options]
61
-
62
- ### 3. WS Server (no positional arg):
63
- ./agents/${name}.js --serve 8080 [--secret mysecret] [--options]
64
-
65
- ### 4. WS Client (no positional arg):
66
- ./agents/${name}.js --connect ws://127.0.0.1:8080/ws --secret mysecret [--options]
67
-
68
- ### 5. Hybrid (Server + Client, no positional arg):
69
- ./agents/${name}.js --serve 8081 --connect ws://other:8080/ws [--secret ...] [--options]
70
-
71
- ## SERVER OPTIONS EXPLAINED:
72
- --serve [port]: Starts WebSocket SERVER at ws://127.0.0.1:[port]/ws. Allows other agents (--connect) to connect and use this agent as a remote TOOL (e.g., 'prompt_agent'). Runs indefinitely until Ctrl+C.
73
-
74
- --connect [ws_url]: Connects as CLIENT to remote WS server at [ws_url] (e.g., ws://127.0.0.1:8080/ws). Gains access to remote agent's tools. Interactive CLI available.
75
-
76
- --secret [string]: SHARED AUTH TOKEN (min 3 chars). SERVER rejects clients without matching --secret. CLIENTS must provide server's secret to connect. Use same secret for chains.
77
-
78
- Note: Server/Client/Hybrid IGNORES positional input arg (use CLI modes instead). Hybrid: This agent serves AND uses remote tools.
79
-
80
- ## OPTIONS:
81
- --model [grok-4-fast-reasoning|...] (default: grok-4-fast-reasoning)
82
- --temperature [float] (-2 to +2)
83
- --tokens [number] (max output tokens)
84
- --top_p [float]
85
- --context [number] (default: 250000)
86
-
87
- ## SERVER TOOLS (when no input):
88
- Exposes as 'prompt_agent' tool for chaining.
89
- `);
90
- process.exit();
91
- }
92
-
93
- if (help) {
94
- printHelp();
95
- }
96
-
97
- const tool_call_name = 'prompt_agent';
98
- const tool_call_description = `Prompt optimizer. Analyzes prompts for clarity, brevity, ethics, token efficiency. Approves good ones or rewrites with summary/questions.`.trim();
99
-
100
- const prompt = `**CRITICAL: STRICT NO-CODING RULE** - Stick to prompt optimization ONLY. NEVER:
101
- - Use execute_bash_script, javascript_interpreter, write_file, read_file, syntax_check.
102
- - Generate, execute, or edit code.
103
- If asked to code, decline: "For code tasks, use code_agent.js. I optimize prompts only."
104
-
105
- You are a prompt optimizer. Check for: 1) Clarity and specificity. 2) Brevity, non-ambiguity, ethics. 3) Token efficiency. If good, say "Approved." If not, rewrite concisely or ask 1-2 questions. Output: - Summary. - Rewritten prompt (if needed). - Questions (if unclear). Be efficient.
106
-
107
- Current date: April 01, 2026.`.trim();
108
-
109
- const agent = new AgentManager({ name, secret });
110
- agent.setup({
111
- prompt,
112
- api,
113
- options,
114
- toolsetMode,
115
- contextWindow
116
- });
117
- const toolset = agent.getToolset();
118
- if (toolset) {
119
- agent.addGenericToolcall('history_search');
120
- agent.addGenericToolcall('open_link');
121
- agent.addGenericToolcall('send_email');
122
- // Removed execute_bash_script and javascript_interpreter for NO-CODING compliance
123
- }
124
- const cliIntro = `${name} ${options.model}.
125
- - context: ${contextWindow}.
126
- ${tool_call_name}`.trim();
127
-
128
- if (input) {
129
- const RES = await agent.directCall(input);
130
- console.log(RES);
131
- } else {
132
- await agent.start(serve, connect, cliIntro, tool_call_name, tool_call_description);
133
- }
@@ -1,148 +0,0 @@
1
- #!/usr/bin/env node
2
- import { AgentManager } from '@j-o-r/hello-dave';
3
- import { parseArgs, readIn } from '@j-o-r/sh';
4
-
5
- const name = 'readme_agent';
6
- const api = 'xai';
7
- let secret = '';
8
-
9
- const args = parseArgs();
10
- const help = args['help'] || false;
11
- const connect = args['connect'] ? args['connect'] : undefined;
12
- const serve = args['serve'] ? parseInt(args['serve']) : undefined;
13
-
14
- /** @type {import('lib/API/x.ai/responses.js').XAIOptions} */
15
- const options = { tools : []};
16
- options.tools.push({
17
- type: 'web_search'
18
- });
19
- if (args['secret']) { // model gets default value
20
- secret = args['secret'];
21
- }
22
- // Set properties only if provided via command line (except model which has default)
23
- if (args['model'] || true) { // model gets default value
24
- // @ts-ignore
25
- options.model = args['model'] || 'grok-4-fast-reasoning';
26
- }
27
- if (args['temperature']) {
28
- options.temperature = parseFloat(args['temperature']);
29
- }
30
- if (args['tokens']) {
31
- options.max_output_tokens = parseInt(args['tokens']);
32
- }
33
- if (args['top_p']) {
34
- options.top_p = parseFloat(args['top_p']);
35
- }
36
- const reasoning = args['reasoning'] ? args['reasoning'] : null;
37
- if (reasoning) {
38
- options.reasoning = {
39
- // @ts-ignore
40
- effort: reasoning,
41
- summary: 'auto'
42
- }
43
- }
44
-
45
- const toolsetMode = 'auto';
46
- const contextWindow = args['context'] ? parseInt(args['context']) : 250000;
47
-
48
- // Copy from the generic toolset
49
- function printHelp() {
50
- console.log(`
51
- '${name} --help' You are looking at it.
52
-
53
- OPTIONS:
54
- --tokens [number]: max generated tokens
55
- --context [number] : truncate message history to context-windows size default 130000
56
- --temperature [float] : -2 / +2
57
- --model [grok-4|grok-3|grok-3-mini|grok-3-mini-fast|grok-code-fast-1]
58
- --top_p [float]: number > 0, 0.1 means no top_p
59
- --reasoning [low|high]
60
- --tools [javascript,bash] comma seperated list
61
-
62
- SERVER TOOLS:
63
- --serve [number]: create a Agent server on port number ws://127.0.0.1:[serve]/ws
64
- --connect [url]: connect to a Server Agent e.g ws://127.0.0.1:8080/ws (https://my.domain/ws) ...
65
- --secret [string] : limit access to websocket server with a secret
66
- `);
67
- process.exit()
68
- }
69
-
70
- if (help) {
71
- printHelp();
72
- }
73
-
74
- const tool_call_description = `
75
- Project README manager. Maintains README.md with comprehensive project documentation.
76
- Inspects current README.md, updates sections (installation, usage, etc.), generates content based on project files and user input.
77
- Suggests improvements, adds badges, TOC, etc.
78
- `.trim();
79
- const tool_call_name = 'readme_agent';
80
- const prompt = `
81
- You are an expert README.md manager for this project. README.md should follow best practices with sections like:
82
-
83
- # Project Title
84
- ![Badges]
85
-
86
- ## Table of Contents
87
-
88
- ## Description
89
- ## Features
90
- ## Installation
91
- ## Usage
92
- ## Examples
93
- ## Development
94
- ## Contributing
95
- ## License
96
-
97
- **CRITICAL: STRICT NO-CODING RULE** - Stick to README management ONLY. NEVER:
98
- - Use coding tools (e.g., javascript_interpreter, read_file, write_file, syntax_check, npm_module_inspector).
99
- - Generate, execute, or edit code (JS/Python/Bash beyond safe README ops).
100
- - Misuse bash for anything beyond safe README.md ops (e.g., cat README.md, echo > README.md, cp README.md README.md.bak, ls, git status).
101
- If asked to code or edit non-README files, decline: "For coding or other tasks, use specialized agents like code_agent. I'll handle README.md only."
102
-
103
- ALWAYS:
104
-
105
- 1. Inspect the current README.md if it exists (use \`cat README.md\` or similar).
106
-
107
- 2. Inspect key project files safely: \`cat package.json\`, \`ls -la\`, \`ls bin/\`, \`ls lib/\`, \`git status\`, etc.
108
-
109
- 3. Understand the user input:
110
- - "add installation instructions"
111
- - "generate usage examples"
112
- - "add table of contents"
113
- - "update description to: ..."
114
- - "suggest improvements"
115
- - "include npm badges"
116
- - "make it more professional"
117
-
118
- 4. Update README.md with changes. Ensure excellent Markdown formatting, accuracy based on project. Backup first if overwriting: \`cp README.md README.md.bak\`.
119
-
120
- 5. Write the FULL updated content to ./README.md using safe bash (e.g., echo "content" > README.md).
121
-
122
- 6. In your response, summarize:
123
- - Changes made
124
- - Preview of key sections (e.g., first 20 lines)
125
- - Any suggestions for further enhancements
126
-
127
- If no README.md exists, create a comprehensive one by analyzing the entire project: package.json, code structure, scripts, etc. Infer project name, description, usage from files.
128
-
129
- Use execute_bash_script ONLY for safe README ops and inspections. Use web_search for best practices if needed.
130
- `.trim();
131
- const agent = new AgentManager({ name, secret });
132
- agent.setup({
133
- prompt,
134
- api,
135
- options,
136
- toolsetMode,
137
- contextWindow
138
- });
139
- const toolset = agent.getToolset();
140
- if (toolset) {
141
- agent.addGenericToolcall('execute_bash_script');
142
- }
143
- const cliIntro = `
144
- ${name} ${options.model}.
145
- - context: ${contextWindow}
146
- `.trim();
147
-
148
- await agent.start(serve, connect, cliIntro, tool_call_name, tool_call_description);