@j-o-r/hello-dave 0.0.2 → 0.0.4
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/CHANGELOG.md +21 -0
- package/README.md +445 -160
- package/README.md.backup +269 -0
- package/README.md.bak +481 -0
- package/README.md.bak.1774780058 +338 -0
- package/README.md.bak2 +455 -0
- package/bin/dave.js +165 -0
- package/docs.bak.1774780058/agent-manager.md +167 -0
- package/docs.bak.1774780058/agent-manager.md.bak +137 -0
- package/docs.bak.1774780058/agent-manager.md.bak2 +157 -0
- package/docs.bak.1774780058/codeserver-pattern.md +191 -0
- package/docs.bak.1774780058/path-resolution-best-practices.md +104 -0
- package/docs.bak.1774780058/project-overview.md +67 -0
- package/docs.bak.1774780058/project-overview.md.bak +67 -0
- package/docs.bak.1774780058/prompt-class.md +141 -0
- package/docs.bak.1774780058/prompt-class.md.bak +142 -0
- package/docs.bak.1774780058/tools-syntax-validation.md +121 -0
- package/docs.bak.1774780058/tools-syntax-validation.md.bak2 +125 -0
- package/docs.bak.1774780058/tools-syntax-validation.md.bak3 +125 -0
- package/docs.bak.1774780058/tools-syntax-validation.md.bak4 +106 -0
- package/docs.bak.1774780058/tools-syntax-validation.md.bak_path +106 -0
- package/docs.bak.1774780058/toolset.md +164 -0
- package/docs.bak.1774780058/toolset.md.bak +94 -0
- package/docs.bak.1774780058/toolset.md.bak3 +161 -0
- package/docs.bak.1774780058/toolset.md.bak4 +161 -0
- package/docs.bak.1774780058/toolset.md.bak5 +161 -0
- package/docs.bak.1774780058/toolset.md.bak6 +163 -0
- package/docs.bak.1774780058/toolset.md.bak_path +163 -0
- package/docs.bak.1774780058/toolset.md.bak_syntax +161 -0
- package/docs.bak.1774780058/xai-responses.md +111 -0
- package/docs.bak.1774780058/xai-responses.md.bak +107 -0
- package/docs.bak.1774780058/xai-responses.md.bak2 +107 -0
- package/docs.bak.1774780058/xai_collections.md +106 -0
- package/examples/ask_agent.js +137 -0
- package/examples/code_agent.js +149 -0
- package/examples/coderev_agent.js +136 -0
- package/examples/codeserver.sh +47 -0
- package/examples/daisy_agent.js +170 -0
- package/examples/docs_agent.js +148 -0
- package/examples/gpt_agent.js +125 -0
- package/examples/grok_agent.js +132 -0
- package/examples/grok_agent.js.bak +98 -0
- package/examples/grok_agent.js.bak.2 +99 -0
- package/examples/grok_agent.js.bak.3 +1 -0
- package/examples/grok_agent.js.bak.4 +124 -0
- package/examples/grok_agent.js.bak.5 +1 -0
- package/examples/grok_agent.js.bak.6 +1 -0
- package/examples/memory_agent.js +152 -0
- package/examples/npm_agent.js +202 -0
- package/examples/npm_agent.js.bak.3 +2 -0
- package/examples/npm_agent.js.bak.4 +205 -0
- package/examples/npm_agent.js.bak.5 +1 -0
- package/examples/npm_agent.js.bak.6 +1 -0
- package/examples/prompt_agent.js +133 -0
- package/examples/readme_agent.js +148 -0
- package/examples/spawn_agent.js +293 -0
- package/examples/test_agent.js +187 -0
- package/examples/todo_agent.js +175 -0
- package/examples.bak.1774780058/ask_agent.js +114 -0
- package/examples.bak.1774780058/code_agent.js +149 -0
- package/examples.bak.1774780058/coderev_agent.js +72 -0
- package/examples.bak.1774780058/codeserver.sh +47 -0
- package/examples.bak.1774780058/daisy_agent.js +177 -0
- package/examples.bak.1774780058/docs_agent.js +119 -0
- package/{bin/hdAsk.js → examples.bak.1774780058/gpt_agent.js} +46 -40
- package/examples.bak.1774780058/grok_agent.js +98 -0
- package/examples.bak.1774780058/memory_agent.js +112 -0
- package/examples.bak.1774780058/npm_agent.js +175 -0
- package/examples.bak.1774780058/prompt_agent.js +112 -0
- package/examples.bak.1774780058/readme_agent.js +144 -0
- package/examples.bak.1774780058/spawn_agent.js +263 -0
- package/examples.bak.1774780058/test_agent.js +162 -0
- package/examples.bak.1774780058/todo_agent.js +138 -0
- package/lib/API/openai.com/reponses/text.js +12 -18
- package/lib/API/x.ai/collections.js +354 -0
- package/lib/API/x.ai/files.js +218 -0
- package/lib/API/x.ai/responses.js +492 -0
- package/lib/API/x.ai/text.js +1 -1
- package/lib/AgentClient.js +13 -6
- package/lib/AgentManager.js +80 -10
- package/lib/AgentServer.js +50 -22
- package/lib/Cli.js +7 -1
- package/lib/Prompt.js +4 -2
- package/lib/ToolSet.js +2 -1
- package/lib/genericToolset.js +258 -88
- package/lib/genericToolset.js.bak_syntax +402 -0
- package/lib/index.js +4 -2
- package/lib/wsCli.js +256 -0
- package/lib/wsIO.js +96 -0
- package/package.json +26 -21
- package/scenarios.bak.1774780058/data/eval_node_message.json +9 -0
- package/scenarios.bak.1774780058/data/hist_oa.json +66 -0
- package/scenarios.bak.1774780058/data/o3_response1.json +96 -0
- package/scenarios.bak.1774780058/data/oa_reasoning_parse.json +112 -0
- package/scenarios.bak.1774780058/data/tool_oa.json +96 -0
- package/scenarios.bak.1774780058/data/tool_xai.json +59 -0
- package/scenarios.bak.1774780058/data/tool_xai2.json +40 -0
- package/scenarios.bak.1774780058/data/xai-response-1.json +59 -0
- package/scenarios.bak.1774780058/data/xai-response-2.json +10 -0
- package/scenarios.bak.1774780058/data/xai_reasoning_tools_resp.json +59 -0
- package/scenarios.bak.1774780058/data/xai_search_response.json +58 -0
- package/scenarios.bak.1774780058/environment.js +10 -0
- package/scenarios.bak.1774780058/example.js +17 -0
- package/scenarios.bak.1774780058/genericToolset.test.js +182 -0
- package/scenarios.bak.1774780058/grok.js +113 -0
- package/scenarios.bak.1774780058/memory-tools.js +51 -0
- package/scenarios.bak.1774780058/openai-o3.js +137 -0
- package/scenarios.bak.1774780058/openai-prompt.js +155 -0
- package/scenarios.bak.1774780058/openai-session.js +148 -0
- package/scenarios.bak.1774780058/openai.js +102 -0
- package/scenarios.bak.1774780058/prompt.js +118 -0
- package/scenarios.bak.1774780058/promptFishbowl.js +76 -0
- package/scenarios.bak.1774780058/search.brave.com.js +25 -0
- package/scenarios.bak.1774780058/sh.js +15 -0
- package/scenarios.bak.1774780058/test-wsio.js +26 -0
- package/scenarios.bak.1774780058/testToolset.js +42 -0
- package/scenarios.bak.1774780058/toolset.js +16 -0
- package/scenarios.bak.1774780058/toolset.test.js +141 -0
- package/scenarios.bak.1774780058/write_file_syntax.test.js +145 -0
- package/scenarios.bak.1774780058/write_file_validation/README.md +30 -0
- package/scenarios.bak.1774780058/write_file_validation/bad.js +3 -0
- package/scenarios.bak.1774780058/write_file_validation/good.js +4 -0
- package/scenarios.bak.1774780058/write_file_validation/test.sh +43 -0
- package/scenarios.bak.1774780058/wsClient.js +69 -0
- package/scenarios.bak.1774780058/xai_responses.integration.test.js +57 -0
- package/scenarios.bak.1774780058/xai_responses.test.js +154 -0
- package/scenarios.bak.1774780058/xaicoll.js +50 -0
- package/scenarios.bak.1774780058/xaifiles.js +48 -0
- package/types/API/openai.com/reponses/text.d.ts +17 -3
- package/types/API/x.ai/collections.d.ts +167 -0
- package/types/API/x.ai/files.d.ts +84 -0
- package/types/API/x.ai/responses.d.ts +379 -0
- package/types/AgentClient.d.ts +5 -0
- package/types/AgentManager.d.ts +25 -31
- package/types/AgentServer.d.ts +5 -1
- package/types/Prompt.d.ts +4 -2
- package/types/ToolSet.d.ts +1 -0
- package/types/index.d.ts +4 -3
- package/types/wsCli.d.ts +3 -0
- package/types/wsIO.d.ts +26 -0
- package/utils/bars.js +40 -0
- package/utils/clear_sessions.sh +54 -0
- package/{bin/hdInspect.js → utils/format_log.js} +5 -0
- package/utils/list_sessions.sh +46 -0
- package/utils/search_sessions.sh +73 -0
- package/utils/syntax_check.sh +61 -0
- package/utils/test.sh +46 -0
- package/bin/hdClear.js +0 -13
- package/bin/hdCode.js +0 -115
- package/bin/hdConnect.js +0 -230
- package/bin/hdNpm.js +0 -114
- package/bin/hdPrompt.js +0 -108
- package/examples/claude-test.js +0 -89
- package/examples/claude.js +0 -143
- package/examples/gpt.js +0 -127
- package/examples/gpt_code.js +0 -125
- package/examples/gpt_note_keeping.js +0 -117
- package/examples/grok.js +0 -119
- package/examples/grok_code.js +0 -114
- package/examples/grok_note_keeping.js +0 -111
- package/module.md +0 -189
|
@@ -0,0 +1,175 @@
|
|
|
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 = 'todo_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
|
+
./examples/${name}.js "List tasks" [--options]
|
|
59
|
+
|
|
60
|
+
### 2. Interactive CLI (no positional arg):
|
|
61
|
+
./examples/${name}.js [--options]
|
|
62
|
+
|
|
63
|
+
### 3. WS Server (no positional arg):
|
|
64
|
+
./examples/${name}.js --serve 8080 [--secret mysecret] [--options]
|
|
65
|
+
|
|
66
|
+
### 4. WS Client (no positional arg):
|
|
67
|
+
./examples/${name}.js --connect ws://127.0.0.1:8080/ws --secret mysecret [--options]
|
|
68
|
+
|
|
69
|
+
### 5. Hybrid (Server + Client, no positional arg):
|
|
70
|
+
./examples/${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., 'todo_agent'). 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 'todo_agent' tool for chaining.
|
|
90
|
+
`);
|
|
91
|
+
process.exit()
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
if (help) {
|
|
95
|
+
printHelp();
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
const tool_call_name = 'todo_agent';
|
|
99
|
+
const tool_call_description = `
|
|
100
|
+
Project TODO list manager. Maintains TODO.md with tasks in Markdown checklists.
|
|
101
|
+
Inspects current TODO.md, adds/checks/completes tasks based on input, updates the file.
|
|
102
|
+
Suggests next actions, stores future important tasks.
|
|
103
|
+
`.trim();
|
|
104
|
+
|
|
105
|
+
const prompt = `
|
|
106
|
+
You are an expert TODO manager for this project. TODO.md stores tasks in Markdown format with checklists:
|
|
107
|
+
|
|
108
|
+
## TODO (high priority pending)
|
|
109
|
+
- [ ] Task 1
|
|
110
|
+
|
|
111
|
+
## In Progress
|
|
112
|
+
- [ ] Task 2
|
|
113
|
+
|
|
114
|
+
## Later (future tasks)
|
|
115
|
+
- [ ] Important task to do later
|
|
116
|
+
|
|
117
|
+
## Done
|
|
118
|
+
- [x] Completed task
|
|
119
|
+
|
|
120
|
+
**CRITICAL: STRICT NO-CODING RULE** - Stick to TODO management ONLY. NEVER:
|
|
121
|
+
- Use coding tools (e.g., javascript_interpreter, write_file, read_file, syntax_check).
|
|
122
|
+
- Generate, execute, or edit code.
|
|
123
|
+
- Misuse bash for anything beyond safe TODO.md ops (e.g., cat TODO.md, echo > TODO.md).
|
|
124
|
+
If asked to code, decline: "For coding, use other agents. I'll handle TODOs only."
|
|
125
|
+
Delegate complex tasks via suggestions; use memory_agent if available for persistence.
|
|
126
|
+
|
|
127
|
+
ALWAYS:
|
|
128
|
+
|
|
129
|
+
1. Inspect the current TODO.md file if it exists (use \`cat TODO.md\` or similar).
|
|
130
|
+
|
|
131
|
+
2. Understand the user input:
|
|
132
|
+
- Add new tasks: "add task: Fix bug in foo.js"
|
|
133
|
+
- Complete: "done: task X" or mark specific
|
|
134
|
+
- Check status: "status" or "what's next?"
|
|
135
|
+
- Prioritize/reorganize
|
|
136
|
+
- Archive old done tasks if too many
|
|
137
|
+
|
|
138
|
+
3. Update TODO.md with changes. Keep it organized, add dates if useful (e.g., - [ ] 2026-02-24: Task).
|
|
139
|
+
|
|
140
|
+
4. Write the FULL updated content to ./TODO.md.
|
|
141
|
+
|
|
142
|
+
5. In your response, summarize:
|
|
143
|
+
- Current status (pending count, next suggested)
|
|
144
|
+
- Changes made
|
|
145
|
+
- Updated TODO.md preview (first 10 lines or key sections)
|
|
146
|
+
|
|
147
|
+
If no TODO.md, create one inspecting the project (package.json, README.md, git status) for initial tasks like "Review code", "Add tests", etc.
|
|
148
|
+
|
|
149
|
+
Use tools to inspect files as needed (ls, cat, git log, etc.).
|
|
150
|
+
`.trim();
|
|
151
|
+
|
|
152
|
+
const agent = new AgentManager({ name, secret });
|
|
153
|
+
agent.setup({
|
|
154
|
+
prompt,
|
|
155
|
+
api,
|
|
156
|
+
options,
|
|
157
|
+
toolsetMode,
|
|
158
|
+
contextWindow
|
|
159
|
+
});
|
|
160
|
+
const toolset = agent.getToolset();
|
|
161
|
+
if (toolset) {
|
|
162
|
+
agent.addGenericToolcall('execute_bash_script');
|
|
163
|
+
}
|
|
164
|
+
const cliIntro = `
|
|
165
|
+
${name} ${options.model}.
|
|
166
|
+
- context: ${contextWindow}. TODO manager ready.
|
|
167
|
+
${tool_call_name}
|
|
168
|
+
`.trim();
|
|
169
|
+
|
|
170
|
+
if (input) {
|
|
171
|
+
const RES = await agent.directCall(input);
|
|
172
|
+
console.log(RES);
|
|
173
|
+
} else {
|
|
174
|
+
await agent.start(serve, connect, cliIntro, tool_call_name, tool_call_description);
|
|
175
|
+
}
|
|
@@ -0,0 +1,114 @@
|
|
|
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 = 'ask_dave';
|
|
6
|
+
const api = 'xai';
|
|
7
|
+
let secret = '';
|
|
8
|
+
|
|
9
|
+
// const input = await readIn();
|
|
10
|
+
const args = parseArgs();
|
|
11
|
+
const help = args['help'] || false;
|
|
12
|
+
const connect = args['connect'] ? args['connect'] : undefined;
|
|
13
|
+
const serve = args['serve'] ? parseInt(args['serve']) : undefined;
|
|
14
|
+
|
|
15
|
+
/** @type {import('lib/API/x.ai/responses.js').XAIOptions} */
|
|
16
|
+
const options = {
|
|
17
|
+
tools: []
|
|
18
|
+
}
|
|
19
|
+
options.tools.push({
|
|
20
|
+
type: 'web_search'
|
|
21
|
+
});
|
|
22
|
+
options.tools.push({
|
|
23
|
+
type: 'x_search'
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
if (args['secret']) { // model gets default value
|
|
27
|
+
secret = args['secret'];
|
|
28
|
+
}
|
|
29
|
+
// Set properties only if provided via command line (except model which has default)
|
|
30
|
+
if (args['model'] || true) { // model gets default value
|
|
31
|
+
// @ts-ignore || grok-4-1-fast-non-reasoning
|
|
32
|
+
options.model = args['model'] || 'grok-4-1-fast-reasoning';
|
|
33
|
+
}
|
|
34
|
+
if (args['temperature']) {
|
|
35
|
+
options.temperature = parseFloat(args['temperature']);
|
|
36
|
+
}
|
|
37
|
+
if (args['tokens']) {
|
|
38
|
+
options.max_output_tokens = parseInt(args['tokens']);
|
|
39
|
+
}
|
|
40
|
+
if (args['top_p']) {
|
|
41
|
+
options.top_p = parseFloat(args['top_p']);
|
|
42
|
+
}
|
|
43
|
+
const reasoning = true // args['reasoning'] ? args['reasoning'] : null;
|
|
44
|
+
if (reasoning) {
|
|
45
|
+
options.reasoning = {
|
|
46
|
+
effort: 'medium',
|
|
47
|
+
summary: 'auto'
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// Large context on grok-4-fast
|
|
51
|
+
const contextWindow = args['context'] ? parseInt(args['context']) : 1900000;
|
|
52
|
+
const toolsetMode = 'auto';
|
|
53
|
+
|
|
54
|
+
function printHelp() {
|
|
55
|
+
console.log(`
|
|
56
|
+
'${name} --help' You are looking at it.
|
|
57
|
+
'
|
|
58
|
+
OPTIONS:
|
|
59
|
+
--tokens [number]: max generated tokens
|
|
60
|
+
--context [number] : truncate message history to context-windows size default 130000
|
|
61
|
+
--temperature [float] : -2 / +2
|
|
62
|
+
--model ['grok-4-1-fast-reasoning'|'grok-4-1-fast-non-reasoning'|'grok-code-fast-1'|'grok-4-fast-reasoning'|'grok-4-fast-non-reasoning']
|
|
63
|
+
--top_p [float]: number > 0, 0.1 means no top_p
|
|
64
|
+
--reasoning [low|high]
|
|
65
|
+
--tools [javascript,bash] comma seperated list
|
|
66
|
+
|
|
67
|
+
SERVER TOOLS:
|
|
68
|
+
--serve [number]: create a Agent server on port number ws://127.0.0.1:[serve]/ws
|
|
69
|
+
--connect [url]: connect to a Server Agent e.g ws://127.0.0.1:8080/ws (https://my.domain/ws) ...
|
|
70
|
+
--secret [string] : limit access to websocket server with a secret
|
|
71
|
+
|
|
72
|
+
`);
|
|
73
|
+
process.exit()
|
|
74
|
+
}
|
|
75
|
+
if (help) {
|
|
76
|
+
printHelp();
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const prompt = `
|
|
80
|
+
Respond briefly and directly, using minimal words. Reason step-by-step first. Focus solely on core point; avoid elaboration or follow-ups. If unclear, ask clarifying questions before proceeding.
|
|
81
|
+
`.trim();
|
|
82
|
+
|
|
83
|
+
const agent = new AgentManager({ name, secret });
|
|
84
|
+
agent.setup({
|
|
85
|
+
prompt,
|
|
86
|
+
api,
|
|
87
|
+
options,
|
|
88
|
+
toolsetMode,
|
|
89
|
+
contextWindow
|
|
90
|
+
});
|
|
91
|
+
agent.addGenericToolcall('open_link');
|
|
92
|
+
agent.addGenericToolcall('send_email');
|
|
93
|
+
agent.addGenericToolcall('history_search');
|
|
94
|
+
|
|
95
|
+
const addTools = (args['tools']) ? args['tools'].split(',') : ['bash'];
|
|
96
|
+
if (addTools.includes('javascript')) {
|
|
97
|
+
agent.addGenericToolcall('javascript_interpreter');
|
|
98
|
+
}
|
|
99
|
+
if (addTools.includes('bash')) {
|
|
100
|
+
agent.addGenericToolcall('execute_bash_script');
|
|
101
|
+
}
|
|
102
|
+
if (addTools.includes('ssh')) {
|
|
103
|
+
agent.addGenericToolcall('execute_remote_script');
|
|
104
|
+
}
|
|
105
|
+
const cliIntro = `
|
|
106
|
+
${name} ${options.model}.
|
|
107
|
+
- context: ${contextWindow}
|
|
108
|
+
`.trim();
|
|
109
|
+
const description = `
|
|
110
|
+
Guide for this smart online AI Agent:
|
|
111
|
+
- query: Formulate ONE efficient, comprehensive search query in natural language, combining multiple sources/subjects/domains; mention optional sources if needed. Avoid multiple queries—consolidate into a single one.
|
|
112
|
+
`.trim();
|
|
113
|
+
|
|
114
|
+
await agent.start(serve, connect, cliIntro, "search_agent", description);
|
|
@@ -0,0 +1,149 @@
|
|
|
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 = 'code_dave';
|
|
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 = {
|
|
16
|
+
tools: []
|
|
17
|
+
}
|
|
18
|
+
options.tools.push({
|
|
19
|
+
type: 'web_search'
|
|
20
|
+
});
|
|
21
|
+
if (args['secret']) {
|
|
22
|
+
secret= args['secret'];
|
|
23
|
+
}
|
|
24
|
+
// Set properties only if provided via command line (except model which has default)
|
|
25
|
+
if (args['model'] || true) { // model gets default value
|
|
26
|
+
// @ts-ignore
|
|
27
|
+
options.model = args['model'] || 'grok-4-1-fast-reasoning';
|
|
28
|
+
}
|
|
29
|
+
// if (args['temperature']) {
|
|
30
|
+
options.temperature = 0.2;
|
|
31
|
+
// }
|
|
32
|
+
if (args['tokens']) {
|
|
33
|
+
options.max_output_tokens = parseInt(args['tokens']);
|
|
34
|
+
}
|
|
35
|
+
if (args['top_p']) {
|
|
36
|
+
options.top_p = parseFloat(args['top_p']);
|
|
37
|
+
}
|
|
38
|
+
const reasoning = args['reasoning'] ? args['reasoning'] : 'medium';
|
|
39
|
+
if (reasoning) {
|
|
40
|
+
options.reasoning = {
|
|
41
|
+
// @ts-ignore
|
|
42
|
+
effort:reasoning,
|
|
43
|
+
summary: 'auto'
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
const toolsetMode = 'auto';
|
|
47
|
+
const contextWindow = args['context'] ? parseInt(args['context']) : 2565000;
|
|
48
|
+
|
|
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 [string] : model name
|
|
58
|
+
--top_p [float]: number > 0, 0.1 means no top_p
|
|
59
|
+
--reasoning [low|medium|high]
|
|
60
|
+
--tools [javascript,bash,nushell,ssh] 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
|
+
`);
|
|
68
|
+
process.exit()
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
if (help) {
|
|
72
|
+
printHelp();
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const agent = new AgentManager({ name, secret});
|
|
76
|
+
const sys = (await agent.environment()).system;
|
|
77
|
+
const prompt = `
|
|
78
|
+
You are a coding assistant specializing in Bash and JavaScript (ESM/ESNext), with support for other languages. Assist by executing, reading, creating, querying, explaining, or helping with code. Use tools like 'execute_bash_script' for code execution and for writing and reading files, stay in the current working folder. Provide clear, step-by-step responses, examples, and ensure safety compliance.
|
|
79
|
+
---env
|
|
80
|
+
\${sys}
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
**MANDATORY MEMORY PROTOCOL (For EVERY query/task - NO EXCEPTIONS):**
|
|
84
|
+
|
|
85
|
+
Connected clients (todo_agent, readme_agent, npm_agent, docs_agent, **memory_agent**) are available as tools. **ALWAYS** use **memory_agent** FIRST and LAST:
|
|
86
|
+
|
|
87
|
+
1. **RECALL PHASE (Step 1 of EVERY response)**:
|
|
88
|
+
- Call \`memory_agent "Recall relevant memories: tasks, errors, prefs for [keywords from user query]. List recent if empty."\`
|
|
89
|
+
- Incorporate recalled info (e.g., avoid known errors, resume tasks, apply prefs like temp=0.2).
|
|
90
|
+
|
|
91
|
+
2. **CORE ACTION**:
|
|
92
|
+
- Perform coding assistance (tools: execute_bash_script, javascript_interpreter, read_file/write_file, web_search, etc.).
|
|
93
|
+
- Delegate to specialists if relevant:
|
|
94
|
+
- todo_agent: Tasks/TODO.md
|
|
95
|
+
- readme_agent: README.md
|
|
96
|
+
- npm_agent: NPM modules/package.json
|
|
97
|
+
- docs_agent: Documentation
|
|
98
|
+
- memory_agent: Persistent storage
|
|
99
|
+
|
|
100
|
+
3. **WRITE PHASE (Step 3 of EVERY response)**:
|
|
101
|
+
- Call \`memory_agent "Store updates: [new tasks/errors/prefs/decisions from this interaction]. E.g., 'Task: [next step]', 'Error: [issue]', 'Pref: [setting]'"\`
|
|
102
|
+
- This ensures persistence across sessions/agents, prevents loops/token burn.
|
|
103
|
+
|
|
104
|
+
**EXAMPLE FLOW**:
|
|
105
|
+
User: "Fix bug in main.js"
|
|
106
|
+
- 1. memory_agent "Recall: tasks errors code bugs main.js"
|
|
107
|
+
- 2. read_file main.js → analyze/fix → write_file
|
|
108
|
+
- 3. memory_agent "Write: Task completed: fixed main.js bug. New task: add tests."
|
|
109
|
+
|
|
110
|
+
**PRIORITIES**:
|
|
111
|
+
- Safety: CWD-only, no escapes, validate before write.
|
|
112
|
+
- Efficiency: Use memories to skip repeats (e.g., "Known error: git conflict → skip").
|
|
113
|
+
- Step-by-step: Clear responses with code blocks.
|
|
114
|
+
- Current date: March 27, 2026.
|
|
115
|
+
|
|
116
|
+
FOLLOW MEMORY PROTOCOL RIGIDLY - it's how multi-agent coordination works!
|
|
117
|
+
`.trim();
|
|
118
|
+
agent.setup({
|
|
119
|
+
prompt,
|
|
120
|
+
api,
|
|
121
|
+
options,
|
|
122
|
+
toolsetMode,
|
|
123
|
+
contextWindow
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
const toolset = agent.getToolset();
|
|
127
|
+
if (toolset) {
|
|
128
|
+
agent.addGenericToolcall('history_search');
|
|
129
|
+
agent.addGenericToolcall('javascript_interpreter');
|
|
130
|
+
agent.addGenericToolcall('execute_bash_script');
|
|
131
|
+
agent.addGenericToolcall('read_file');
|
|
132
|
+
agent.addGenericToolcall('write_file');
|
|
133
|
+
|
|
134
|
+
const addTools = (args['tools']) ? args['tools'].split(',') : [''];
|
|
135
|
+
if (addTools.includes('ssh')) {
|
|
136
|
+
agent.addGenericToolcall('execute_remote_script');
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
const cliIntro = `
|
|
140
|
+
${name} ${options.model}
|
|
141
|
+
- context: ${contextWindow}
|
|
142
|
+
- **Memory Protocol ACTIVE**: Auto-recalls/writes via memory_agent for every query!
|
|
143
|
+
`.trim();
|
|
144
|
+
const description = `
|
|
145
|
+
Main CodeServer hub: Coding expert + delegates to todo/readme/npm/docs/memory agents.
|
|
146
|
+
ALWAYS uses memory_agent for persistent tasks/errors/prefs.
|
|
147
|
+
`.trim();
|
|
148
|
+
|
|
149
|
+
await agent.start(serve, connect, cliIntro, "code_agent", description);
|
|
@@ -0,0 +1,72 @@
|
|
|
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 = 'coderev'; // ← REPLACE w/ lowercase /^[a-z_0-9_]{2,}$/
|
|
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
|
+
|
|
17
|
+
// NATIVES HERE e.g. options.tools.push({ type: 'web_search' });
|
|
18
|
+
options.tools.push({ type: 'web_search' });
|
|
19
|
+
|
|
20
|
+
if (args['secret']) { secret = args['secret']; }
|
|
21
|
+
if (args['model'] || true) { options.model = args['model'] || 'grok-4-fast-reasoning'; }
|
|
22
|
+
if (args['temperature']) { options.temperature = parseFloat(args['temperature']); } else { options.temperature = 0.8; }
|
|
23
|
+
// tokens, top_p, reasoning...
|
|
24
|
+
|
|
25
|
+
options.reasoning = { effort: 'medium', summary: 'auto' };
|
|
26
|
+
|
|
27
|
+
const contextWindow = args['context'] ? parseInt(args['context']) : 500000;
|
|
28
|
+
const toolsetMode = 'auto';
|
|
29
|
+
|
|
30
|
+
function printHelp() {
|
|
31
|
+
console.log(`coderev --help: Git diff analyzer
|
|
32
|
+
|
|
33
|
+
Full AgentManager modes (docs/agent-manager.md):
|
|
34
|
+
|
|
35
|
+
USAGE:
|
|
36
|
+
./bin/coderev # Interactive CLI
|
|
37
|
+
echo "query" | ./bin/coderev # One-shot pipe
|
|
38
|
+
./bin/coderev --serve 8081 # WS Server: Expose as tool
|
|
39
|
+
./bin/coderev --connect ws://host:8081/ws --secret KEY # WS Client: Attach/gain tools
|
|
40
|
+
./bin/coderev --serve 8081 --connect ws://other:8080/ws # Hybrid
|
|
41
|
+
|
|
42
|
+
OPTIONS: --model ... --secret ...
|
|
43
|
+
|
|
44
|
+
EXAMPLES:
|
|
45
|
+
Test server: Start server, then client query above.
|
|
46
|
+
Chain: Server A --connect B → A calls B as tool.`);
|
|
47
|
+
process.exit();
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
if (help) printHelp();
|
|
51
|
+
|
|
52
|
+
const prompt = `You are coderev, a Git diff analyzer.
|
|
53
|
+
|
|
54
|
+
Analyze git diffs provided in queries, review code changes for bugs, improvements, best practices, security issues, and provide actionable suggestions. Use read_file to access specific files, execute_bash_script for git commands or other shell tasks, and web_search for looking up coding standards or references if needed. Be thorough, constructive, and reference specific lines in diffs when possible.
|
|
55
|
+
|
|
56
|
+
Respond in a structured format: Summary, Issues Found, Suggestions, Overall Rating (1-10).`.trim();
|
|
57
|
+
|
|
58
|
+
const agent = new AgentManager({ name, secret });
|
|
59
|
+
agent.setup({ prompt, api, options, toolsetMode, contextWindow });
|
|
60
|
+
|
|
61
|
+
// GENERICS HERE e.g. agent.addGenericToolcall('execute_bash_script');
|
|
62
|
+
agent.addGenericToolcall('read_file');
|
|
63
|
+
agent.addGenericToolcall('execute_bash_script');
|
|
64
|
+
|
|
65
|
+
const cliIntro = `🤖 coderev ready! Modes: CLI/Server/Client (docs/agent-manager.md)
|
|
66
|
+
|
|
67
|
+
I'm here to analyze your git diffs and code changes. Paste a diff or describe changes, and I'll review them step-by-step!`.trim();
|
|
68
|
+
|
|
69
|
+
const toolName = 'agent_' + name;
|
|
70
|
+
const toolDescription = `Git diff analyzer. Supports WS chaining.`.trim();
|
|
71
|
+
|
|
72
|
+
await agent.start(serve, connect, cliIntro, toolName, toolDescription);
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
if [ $# -lt 1 ] || [ $# -gt 2 ]; then
|
|
3
|
+
echo "Usage: $0 <PORT> [SECRET] # PORT: 1024-65535, SECRET: optional (defaults to '123')"
|
|
4
|
+
exit 1
|
|
5
|
+
fi
|
|
6
|
+
|
|
7
|
+
PORT="$1"
|
|
8
|
+
SECRET="${2:-123}"
|
|
9
|
+
|
|
10
|
+
if [ -z "$SECRET" ] || [ ${#SECRET} -lt 3 ]; then
|
|
11
|
+
echo "Error: SECRET must be at least 3 characters: '$SECRET'"
|
|
12
|
+
exit 1
|
|
13
|
+
fi
|
|
14
|
+
|
|
15
|
+
if ! [[ "$PORT" =~ ^[0-9]+$ ]] || [ "$PORT" -lt 1024 ] || [ "$PORT" -gt 65535 ]; then
|
|
16
|
+
echo "Error: Invalid port number: $PORT. Must be between 1024 and 65535."
|
|
17
|
+
exit 1
|
|
18
|
+
fi
|
|
19
|
+
|
|
20
|
+
# Compute paths relative to THIS script's location (portable from anywhere)
|
|
21
|
+
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
|
22
|
+
PROJECT_DIR="$( cd "$( dirname "${SCRIPT_DIR}" )" && pwd )"
|
|
23
|
+
FOLDER=$(basename "$PROJECT_DIR")
|
|
24
|
+
|
|
25
|
+
echo "Starting CodeServer on port ${PORT} in folder '${FOLDER}' (SCRIPT_DIR: ${SCRIPT_DIR}) with SECRET '${SECRET}'..."
|
|
26
|
+
|
|
27
|
+
# Delete existing processes with folder_port suffix
|
|
28
|
+
pm2 delete "${FOLDER}_code_agent_${PORT}" 2>/dev/null || true
|
|
29
|
+
pm2 delete "${FOLDER}_todo_agent_${PORT}" 2>/dev/null || true
|
|
30
|
+
pm2 delete "${FOLDER}_readme_agent_${PORT}" 2>/dev/null || true
|
|
31
|
+
pm2 delete "${FOLDER}_npm_agent_${PORT}" 2>/dev/null || true
|
|
32
|
+
pm2 delete "${FOLDER}_docs_agent_${PORT}" 2>/dev/null || true
|
|
33
|
+
pm2 delete "${FOLDER}_test_agent_${PORT}" 2>/dev/null || true
|
|
34
|
+
pm2 delete "${FOLDER}_memory_agent_${PORT}" 2>/dev/null || true
|
|
35
|
+
|
|
36
|
+
# Spawn main Agent / server (absolute paths to scripts)
|
|
37
|
+
pm2 start "${SCRIPT_DIR}/code_agent.js" --name "${FOLDER}_code_agent_${PORT}" -- --serve "${PORT}" --tools javascript --secret "${SECRET}"
|
|
38
|
+
# Attach clients
|
|
39
|
+
pm2 start "${SCRIPT_DIR}/todo_agent.js" --name "${FOLDER}_todo_agent_${PORT}" -- --connect "ws://127.0.0.1:${PORT}/ws" --secret "${SECRET}"
|
|
40
|
+
pm2 start "${SCRIPT_DIR}/readme_agent.js" --name "${FOLDER}_readme_agent_${PORT}" -- --connect "ws://127.0.0.1:${PORT}/ws" --secret "${SECRET}"
|
|
41
|
+
pm2 start "${SCRIPT_DIR}/npm_agent.js" --name "${FOLDER}_npm_agent_${PORT}" -- --connect "ws://127.0.0.1:${PORT}/ws" --secret "${SECRET}"
|
|
42
|
+
pm2 start "${SCRIPT_DIR}/docs_agent.js" --name "${FOLDER}_docs_agent_${PORT}" -- --connect "ws://127.0.0.1:${PORT}/ws" --secret "${SECRET}"
|
|
43
|
+
pm2 start "${SCRIPT_DIR}/test_agent.js" --name "${FOLDER}_test_agent_${PORT}" -- --connect "ws://127.0.0.1:${PORT}/ws" --secret "${SECRET}"
|
|
44
|
+
pm2 start "${SCRIPT_DIR}/memory_agent.js" --name "${FOLDER}_memory_agent_${PORT}" -- --connect "ws://127.0.0.1:${PORT}/ws" --secret "${SECRET}"
|
|
45
|
+
|
|
46
|
+
echo "CodeServer processes spawned with prefix '${FOLDER}_' and suffix _${PORT}. Check with: pm2 list | grep '${FOLDER}_${PORT}'"
|
|
47
|
+
echo "dave --connect ws://127.0.0.1:${PORT}/ws --secret '$SECRET'"
|