@j-o-r/hello-dave 0.0.5 → 0.0.6

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 (91) hide show
  1. package/CHANGELOG.md +8 -1
  2. package/bin/dave.js +114 -94
  3. package/examples/memory_agent.js +134 -23
  4. package/examples/test_agent.js +0 -2
  5. package/lib/genericToolset.js +4 -88
  6. package/lib/wsIO.js +1 -11
  7. package/package.json +2 -2
  8. package/README.md +0 -601
  9. package/README.md.backup +0 -269
  10. package/README.md.bak +0 -523
  11. package/README.md.bak.1774780058 +0 -338
  12. package/README.md.bak2 +0 -531
  13. package/docs.bak.1774780058/agent-manager.md +0 -167
  14. package/docs.bak.1774780058/agent-manager.md.bak +0 -137
  15. package/docs.bak.1774780058/agent-manager.md.bak2 +0 -157
  16. package/docs.bak.1774780058/codeserver-pattern.md +0 -191
  17. package/docs.bak.1774780058/path-resolution-best-practices.md +0 -104
  18. package/docs.bak.1774780058/project-overview.md +0 -67
  19. package/docs.bak.1774780058/project-overview.md.bak +0 -67
  20. package/docs.bak.1774780058/prompt-class.md +0 -141
  21. package/docs.bak.1774780058/prompt-class.md.bak +0 -142
  22. package/docs.bak.1774780058/tools-syntax-validation.md +0 -121
  23. package/docs.bak.1774780058/tools-syntax-validation.md.bak2 +0 -125
  24. package/docs.bak.1774780058/tools-syntax-validation.md.bak3 +0 -125
  25. package/docs.bak.1774780058/tools-syntax-validation.md.bak4 +0 -106
  26. package/docs.bak.1774780058/tools-syntax-validation.md.bak_path +0 -106
  27. package/docs.bak.1774780058/toolset.md +0 -164
  28. package/docs.bak.1774780058/toolset.md.bak +0 -94
  29. package/docs.bak.1774780058/toolset.md.bak3 +0 -161
  30. package/docs.bak.1774780058/toolset.md.bak4 +0 -161
  31. package/docs.bak.1774780058/toolset.md.bak5 +0 -161
  32. package/docs.bak.1774780058/toolset.md.bak6 +0 -163
  33. package/docs.bak.1774780058/toolset.md.bak_path +0 -163
  34. package/docs.bak.1774780058/toolset.md.bak_syntax +0 -161
  35. package/docs.bak.1774780058/xai-responses.md +0 -111
  36. package/docs.bak.1774780058/xai-responses.md.bak +0 -107
  37. package/docs.bak.1774780058/xai-responses.md.bak2 +0 -107
  38. package/docs.bak.1774780058/xai_collections.md +0 -106
  39. package/examples.bak.1774780058/ask_agent.js +0 -114
  40. package/examples.bak.1774780058/code_agent.js +0 -149
  41. package/examples.bak.1774780058/coderev_agent.js +0 -72
  42. package/examples.bak.1774780058/codeserver.sh +0 -47
  43. package/examples.bak.1774780058/daisy_agent.js +0 -177
  44. package/examples.bak.1774780058/docs_agent.js +0 -119
  45. package/examples.bak.1774780058/gpt_agent.js +0 -109
  46. package/examples.bak.1774780058/grok_agent.js +0 -98
  47. package/examples.bak.1774780058/memory_agent.js +0 -112
  48. package/examples.bak.1774780058/npm_agent.js +0 -175
  49. package/examples.bak.1774780058/prompt_agent.js +0 -112
  50. package/examples.bak.1774780058/readme_agent.js +0 -144
  51. package/examples.bak.1774780058/spawn_agent.js +0 -263
  52. package/examples.bak.1774780058/test_agent.js +0 -162
  53. package/examples.bak.1774780058/todo_agent.js +0 -138
  54. package/scenarios.bak.1774780058/data/eval_node_message.json +0 -9
  55. package/scenarios.bak.1774780058/data/hist_oa.json +0 -66
  56. package/scenarios.bak.1774780058/data/o3_response1.json +0 -96
  57. package/scenarios.bak.1774780058/data/oa_reasoning_parse.json +0 -112
  58. package/scenarios.bak.1774780058/data/tool_oa.json +0 -96
  59. package/scenarios.bak.1774780058/data/tool_xai.json +0 -59
  60. package/scenarios.bak.1774780058/data/tool_xai2.json +0 -40
  61. package/scenarios.bak.1774780058/data/xai-response-1.json +0 -59
  62. package/scenarios.bak.1774780058/data/xai-response-2.json +0 -10
  63. package/scenarios.bak.1774780058/data/xai_reasoning_tools_resp.json +0 -59
  64. package/scenarios.bak.1774780058/data/xai_search_response.json +0 -58
  65. package/scenarios.bak.1774780058/environment.js +0 -10
  66. package/scenarios.bak.1774780058/example.js +0 -17
  67. package/scenarios.bak.1774780058/genericToolset.test.js +0 -182
  68. package/scenarios.bak.1774780058/grok.js +0 -113
  69. package/scenarios.bak.1774780058/memory-tools.js +0 -51
  70. package/scenarios.bak.1774780058/openai-o3.js +0 -137
  71. package/scenarios.bak.1774780058/openai-prompt.js +0 -155
  72. package/scenarios.bak.1774780058/openai-session.js +0 -148
  73. package/scenarios.bak.1774780058/openai.js +0 -102
  74. package/scenarios.bak.1774780058/prompt.js +0 -118
  75. package/scenarios.bak.1774780058/promptFishbowl.js +0 -76
  76. package/scenarios.bak.1774780058/search.brave.com.js +0 -25
  77. package/scenarios.bak.1774780058/sh.js +0 -15
  78. package/scenarios.bak.1774780058/test-wsio.js +0 -26
  79. package/scenarios.bak.1774780058/testToolset.js +0 -42
  80. package/scenarios.bak.1774780058/toolset.js +0 -16
  81. package/scenarios.bak.1774780058/toolset.test.js +0 -141
  82. package/scenarios.bak.1774780058/write_file_syntax.test.js +0 -145
  83. package/scenarios.bak.1774780058/write_file_validation/README.md +0 -30
  84. package/scenarios.bak.1774780058/write_file_validation/bad.js +0 -3
  85. package/scenarios.bak.1774780058/write_file_validation/good.js +0 -4
  86. package/scenarios.bak.1774780058/write_file_validation/test.sh +0 -43
  87. package/scenarios.bak.1774780058/wsClient.js +0 -69
  88. package/scenarios.bak.1774780058/xai_responses.integration.test.js +0 -57
  89. package/scenarios.bak.1774780058/xai_responses.test.js +0 -154
  90. package/scenarios.bak.1774780058/xaicoll.js +0 -50
  91. package/scenarios.bak.1774780058/xaifiles.js +0 -48
@@ -1,107 +0,0 @@
1
- # xAI Responses API Integration (`lib/API/x.ai/responses.js`)
2
-
3
- ## Overview
4
- This module provides a seamless wrapper for the [xAI Responses API](https://docs.x.ai/docs/api-reference#create-new-response) (formerly Grok API), adapted for the hello-dave framework. It integrates directly with `Prompt.js` and `ToolSet.js`, enabling tool-using agents via `AgentManager`.
5
-
6
- Key adaptations:
7
- - **Unified Interface**: Uses `Prompt` messages/history for input; parses `output` into assistant/tool responses.
8
- - **Recursive Tool Calls**: Automatically handles `function_call` → execute tools → `function_call_output` loops (up to `GLOBAL.max_recursive_requests`).
9
- - **Tool Support**: Converts `ToolSet` to xAI `function` tools; supports native xAI tools like `web_search`, `x_search`.
10
- - **Reasoning & Search**: Configurable `reasoning.effort` (`low`/`medium`/`high`), `search_parameters`.
11
- - **Streaming**: Not yet implemented (future).
12
- - **Auth**: Requires `XAIKEY` env var.
13
-
14
- Default model: `grok-4-fast-reasoning`. Supports: `grok-4-fast-reasoning`, `grok-4-fast-non-reasoning`, etc.
15
-
16
- ## Usage in AgentManager
17
- ```javascript
18
- import AgentManager from '../lib/AgentManager.js';
19
-
20
- const agent = new AgentManager({ name: 'weather-agent', secret: 'optional-ws-secret' });
21
- agent.setup({
22
- prompt: 'You are a precise weather expert. Use tools for real-time data.',
23
- api: 'xai',
24
- options: { model: 'grok-4-fast-reasoning', reasoning: { effort: 'high' } },
25
- toolsetMode: 'auto', // Adds generic tools like web_search
26
- contextWindow: 128000
27
- });
28
- agent.addGenericToolcall('web_search'); // Optional: Add extras
29
-
30
- // CLI mode
31
- agent.start(); // Interactive chat
32
-
33
- // Or direct call
34
- const response = await agent.directCall('Weather in Amsterdam today?');
35
- console.log(response); // Handles search/tools automatically
36
- ```
37
-
38
- Under the hood:
39
- 1. `Prompt.setAdaptor(API.text['xai'], toolset, options)` → uses `responses.request()`.
40
- 2. Converts history to xAI `input[]` (system/user/assistant/tool).
41
- 3. POST to `https://api.x.ai/v1/responses`.
42
- 4. Parses `output` → adds text/reasoning/tools to `Prompt`.
43
- 5. If tools needed, `ToolSet.execute()` → recurse until complete.
44
-
45
- ## Options (XAIOptions)
46
- | Property | Type | Default | Description |
47
- |----------|------|---------|-------------|
48
- | `model` | string | `'grok-4-fast-non-reasoning'` | e.g., `'grok-4-fast-reasoning'` |
49
- | `input` | `XAIInput[]` | `[{role: 'system', content: 'Be precise'}]` | Messages/history |
50
- | `reasoning.effort` | `'low'\|'medium'\|'high'` | `'medium'` | Reasoning depth |
51
- | `reasoning.summary` | `'auto'\|'concise'\|'detailed'` | `'auto'` | Reasoning output style |
52
- | `temperature` | number | `1` (0-2) | Sampling |
53
- | `parallel_tool_calls` | boolean | `true` | Parallel functions |
54
- | `tool_choice` | `'auto'` | `'auto'` | Tool selection |
55
- | `tools` | `XAIFunctionTool[]` | `[]` | From `ToolSet` |
56
- | `store` | boolean | `false` | Persist response (still bills tokens) |
57
- | `max_output_tokens` | number | `4000` | Limit |
58
- | `search_parameters` | object | - | `{max_search_results: 4, mode: 'auto', return_citations: true}` |
59
-
60
- **Tool Types**:
61
- - `function`: From `ToolSet` (name, description, parameters JSONSchema).
62
- - Native: `web_search`, `x_search` (filters: dates, domains, etc.).
63
-
64
- ## Example Request (Generated Internally)
65
- ```json
66
- {
67
- \"model\": \"grok-4-fast-reasoning\",
68
- \"input\": [
69
- {\"role\": \"system\", \"content\": \"You are a precise weather expert.\"},
70
- {\"role\": \"user\", \"content\": \"Weather in Amsterdam today?\"}
71
- ],
72
- \"parallel_tool_calls\": true,
73
- \"reasoning\": {\"effort\": \"high\"},
74
- \"search_parameters\": {\"mode\": \"auto\", \"return_citations\": true},
75
- \"tools\": [{"type\": "function", "name": "web_search", ...}]
76
- }
77
- ```
78
-
79
- ## Example Response (Parsed to Prompt)
80
- - **Text + Citations**: Added as `assistant` text + `log` annotations (URLs).
81
- - **Function Calls**: `assistant` with `function_request` → `ToolSet.execute()`.
82
- - **Reasoning**: Prepended as `reasoning` multimodal text.
83
-
84
- Sample parsed:
85
- ```
86
- Today is [date]. Weather: Cloudy, 5°C... [citations]
87
- ```
88
- Tokens: `input_tokens`, `output_tokens` (incl. `reasoning_tokens`) logged in `Prompt.records`.
89
-
90
- ## Advanced: Custom Tools
91
- Extend `ToolSet` before `setup()`:
92
- ```javascript
93
- const ts = new ToolSet('required');
94
- ts.add('get_weather', 'Get weather for a location', {
95
- type: 'object',
96
- properties: { location: {type: 'string'} },
97
- required: ['location']
98
- }, async (params) => `Weather: ${params.location} - 20°C`); // Handler
99
- agent.setup({ ..., toolsetMode: ts });
100
- ```
101
-
102
- ## Errors & Limits
103
- - `Max recursive calls`: `GLOBAL.max_recursive_requests`.
104
- - Missing `XAIKEY`: Throws.
105
- - Invalid last message: Must end in `user`/`tool`.
106
-
107
- See `lib/API/x.ai/responses.js` source for full JSDoc/types. Cross-links: [Prompt](../prompt-class.md), [ToolSet](../toolset.md), [AgentManager](agent-manager.md) (TBD)."
@@ -1,107 +0,0 @@
1
- # xAI Responses API Integration (`lib/API/x.ai/responses.js`)
2
-
3
- ## Overview
4
- This module provides a seamless wrapper for the [xAI Responses API](https://docs.x.ai/docs/api-reference#create-new-response) (formerly Grok API), adapted for the hello-dave framework. It integrates directly with `Prompt.js` and `ToolSet.js`, enabling tool-using agents via `AgentManager`.
5
-
6
- Key adaptations:
7
- - **Unified Interface**: Uses `Prompt` messages/history for input; parses `output` into assistant/tool responses.
8
- - **Recursive Tool Calls**: Automatically handles `function_call` → execute tools → `function_call_output` loops (up to `GLOBAL.max_recursive_requests`).
9
- - **Tool Support**: Converts `ToolSet` to xAI `function` tools; supports native xAI tools like `web_search`, `x_search`.
10
- - **Reasoning & Search**: Configurable `reasoning.effort` (`low`/`medium`/`high`), `search_parameters`.
11
- - **Streaming**: Not yet implemented (future).
12
- - **Auth**: Requires `XAIKEY` env var.
13
-
14
- Default model: `grok-4-fast-reasoning`. Supports: `grok-4-fast-reasoning`, `grok-4-fast-non-reasoning`, etc.
15
-
16
- ## Usage in AgentManager
17
- ```javascript
18
- import AgentManager from '../lib/AgentManager.js';
19
-
20
- const agent = new AgentManager({ name: 'weatheragent', secret: 'optional-ws-secret' });
21
- agent.setup({
22
- prompt: 'You are a precise weather expert. Use tools for real-time data.',
23
- api: 'xai',
24
- options: { model: 'grok-4-fast-reasoning', reasoning: { effort: 'high' } },
25
- toolsetMode: 'auto', // Adds generic tools like web_search
26
- contextWindow: 128000
27
- });
28
- agent.addGenericToolcall('web_search'); // Optional: Add extras
29
-
30
- // CLI mode
31
- agent.start(); // Interactive chat
32
-
33
- // Or direct call
34
- const response = await agent.directCall('Weather in Amsterdam today?');
35
- console.log(response); // Handles search/tools automatically
36
- ```
37
-
38
- Under the hood:
39
- 1. `Prompt.setAdaptor(API.text['xai'], toolset, options)` → uses `responses.request()`.
40
- 2. Converts history to xAI `input[]` (system/user/assistant/tool).
41
- 3. POST to `https://api.x.ai/v1/responses`.
42
- 4. Parses `output` → adds text/reasoning/tools to `Prompt`.
43
- 5. If tools needed, `ToolSet.execute()` → recurse until complete.
44
-
45
- ## Options (XAIOptions)
46
- | Property | Type | Default | Description |
47
- |----------|------|---------|-------------|
48
- | `model` | string | `'grok-4-fast-non-reasoning'` | e.g., `'grok-4-fast-reasoning'` |
49
- | `input` | `XAIInput[]` | `[{role: 'system', content: 'Be precise'}]` | Messages/history |
50
- | `reasoning.effort` | `'low'\|'medium'\|'high'` | `'medium'` | Reasoning depth |
51
- | `reasoning.summary` | `'auto'\|'concise'\|'detailed'` | `'auto'` | Reasoning output style |
52
- | `temperature` | number | `1` (0-2) | Sampling |
53
- | `parallel_tool_calls` | boolean | `true` | Parallel functions |
54
- | `tool_choice` | `'auto'` | `'auto'` | Tool selection |
55
- | `tools` | `XAIFunctionTool[]` | `[]` | From `ToolSet` |
56
- | `store` | boolean | `false` | Persist response (still bills tokens) |
57
- | `max_output_tokens` | number | `4000` | Limit |
58
- | `search_parameters` | object | - | `{max_search_results: 4, mode: 'auto', return_citations: true}` |
59
-
60
- **Tool Types**:
61
- - `function`: From `ToolSet` (name, description, parameters JSONSchema).
62
- - Native: `web_search`, `x_search` (filters: dates, domains, etc.).
63
-
64
- ## Example Request (Generated Internally)
65
- ```json
66
- {
67
- "model": "grok-4-fast-reasoning",
68
- "input": [
69
- {"role": "system", "content": "You are a precise weather expert."},
70
- {"role": "user", "content": "Weather in Amsterdam today?"}
71
- ],
72
- "parallel_tool_calls": true,
73
- "reasoning": {"effort": "high"},
74
- "search_parameters": {"mode": "auto", "return_citations": true},
75
- "tools": [{"type": "function", "name": "web_search", ...}]
76
- }
77
- ```
78
-
79
- ## Example Response (Parsed to Prompt)
80
- - **Text + Citations**: Added as `assistant` text + `log` annotations (URLs).
81
- - **Function Calls**: `assistant` with `function_request` → `ToolSet.execute()`.
82
- - **Reasoning**: Prepended as `reasoning` multimodal text.
83
-
84
- Sample parsed:
85
- ```
86
- Today is [date]. Weather: Cloudy, 5°C... [citations]
87
- ```
88
- Tokens: `input_tokens`, `output_tokens` (incl. `reasoning_tokens`) logged in `Prompt.records`.
89
-
90
- ## Advanced: Custom Tools
91
- Extend `ToolSet` before `setup()`:
92
- ```javascript
93
- const ts = new ToolSet('required');
94
- ts.add('get_weather', 'Get weather for a location', {
95
- type: 'object',
96
- properties: { location: {type: 'string'} },
97
- required: ['location']
98
- }, async (params) => `Weather: ${params.location} - 20°C`); // Handler
99
- agent.setup({ ..., toolsetMode: ts });
100
- ```
101
-
102
- ## Errors & Limits
103
- - `Max recursive calls`: `GLOBAL.max_recursive_requests`.
104
- - Missing `XAIKEY`: Throws.
105
- - Invalid last message: Must end in `user`/`tool`.
106
-
107
- See `lib/API/x.ai/responses.js` source for full JSDoc/types. Cross-links: [Prompt](../prompt-class.md), [ToolSet](../toolset.md), [AgentManager](agent-manager.md) (TBD).
@@ -1,106 +0,0 @@
1
- [x.ai collections](https://docs.x.ai/docs/guides/using-collections/api)
2
-
3
-
4
- Creating a collection:
5
-
6
- ```bash
7
- curl https://management-api.x.ai/v1/collections \
8
- -X POST \
9
- -H "Content-Type: application/json" \
10
- -H "Authorization: Bearer $XAI_MANAGEMENT_API_KEY" \
11
- -d '{"collection_name": "SEC Filings"}'
12
- ```
13
-
14
- Listing collections:
15
- ```bash
16
- curl https://management-api.x.ai/v1/collections \
17
- -H "Authorization: Bearer $XAI_MANAGEMENT_API_KEY"
18
- ```
19
-
20
- Viewing collection configuration:
21
- ```bash
22
- 'curl https://management-api.x.ai/v1/collections/collection_dbc087b1-6c99-493d-86c6-b401fee34a9d \
23
- -H "Authorization: Bearer $XAI_MANAGEMENT_API_KEY"
24
- ```
25
-
26
- Updating collection configuration
27
- ```bash
28
- curl https://management-api.x.ai/v1/collections/collection_dbc087b1-6c99-493d-86c6-b401fee34a9d \
29
- -X PUT \
30
- -H "Content-Type: application/json" \
31
- -H "Authorization: Bearer $XAI_MANAGEMENT_API_KEY" \
32
- -d '{"collection_name": "SEC Filings (New)"}'
33
- ```
34
-
35
- Uploading documents:
36
-
37
- ```bash
38
- # Step 1: Upload file
39
- curl https://api.x.ai/v1/files \
40
- -H "Authorization: Bearer $XAI_API_KEY" \
41
- -F file=@tesla-20241231.html
42
-
43
- # Step 2: Add file to collection (use file_id from step 1)
44
- curl -X POST https://management-api.x.ai/v1/collections/$COLLECTION_ID/documents/$FILE_ID \
45
- -H "Authorization: Bearer $XAI_MANAGEMENT_API_KEY"
46
-
47
- ```
48
-
49
- Uploading with metadata fields
50
-
51
- ```bash
52
- curl https://management-api.x.ai/v1/collections/collection_dbc087b1-6c99-493d-86c6-b401fee34a9d/documents \
53
- -H "Authorization: Bearer $XAI_MANAGEMENT_API_KEY" \
54
- -F "name=paper.pdf" \
55
- -F "data=@paper.pdf" \
56
- -F "content_type=application/pdf" \
57
- -F 'fields={"author": "Sandra Kim", "year": "2024", "title": "Q3 Revenue Analysis"}'
58
-
59
- ```
60
-
61
- Searching documents
62
-
63
- ```bash
64
- curl https://api.x.ai/v1/documents/search \
65
- -H "Content-Type: application/json" \
66
- -H "Authorization: Bearer $XAI_API_KEY" \
67
- -d '{
68
- "query": "What were the key revenue drivers based on the SEC filings?",
69
- "source": {
70
- "collection_ids": ["collection_dbc087b1-6c99-493d-86c6-b401fee34a9d"]
71
- }
72
- }'
73
- ```
74
-
75
- ```bash
76
- curl https://api.x.ai/v1/documents/search \
77
- -H "Content-Type: application/json" \
78
- -H "Authorization: Bearer $XAI_API_KEY" \
79
- -d '{
80
- "query": "What were the key revenue drivers based on the SEC filings?",
81
- "source": {
82
- "collection_ids": [
83
- "collection_dbc087b1-6c99-493d-86c6-b401fee34a9d"
84
- ]
85
- },
86
- "retrieval_mode": {"type": "hybrid"}
87
- }'
88
- ```
89
-
90
-
91
- Deleting a document:
92
-
93
- ```bash
94
- curl https://management-api.x.ai/v1/collections/collection_dbc087b1-6c99-493d-86c6-b401fee34a9d/documents/file_55a709d4-8edc-4f83-84d9-9f04fe49f832 \
95
- -X DELETE \
96
- -H "Authorization: Bearer $XAI_MANAGEMENT_API_KEY"
97
-
98
- ```
99
-
100
- Deleting a collection
101
-
102
- ```bash
103
- curl https://management-api.x.ai/v1/collections/collection_dbc087b1-6c99-493d-86c6-b401fee34a9d \
104
- -X DELETE \
105
- -H "Authorization: Bearer $XAI_MANAGEMENT_API_KEY"
106
- ```
@@ -1,114 +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 = '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);
@@ -1,149 +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 = '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);
@@ -1,72 +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 = '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);