@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,163 +0,0 @@
1
- # ToolSet (\`lib/ToolSet.js\`)
2
-
3
- ## Overview
4
- **ToolSet** manages LLM function calls (tools): registration, execution, listing. Integrates with \`Prompt.js\` (via \`execute(prompt)\`) and \`AgentManager.js\` (pre-configured modes, generics). Supports JSON Schema params, async methods. Exports from \`lib/genericToolset.js\`: \`toolsPool\` (11 pre-built tools).
5
-
6
- **Uses named exports from \`lib/index.js\` - NO default export.**
7
-
8
- Key Features:
9
- - **Modes**: \`toolChoice: 'auto'|'none'|'required'\` (default \`'auto'\`).
10
- - **Validation**: Name regex \`/^\[#![a-z_0-9]{2,}$/\`.
11
- - **Events** (via \`Prompt\`): \`tool_request\`, \`tool_error\`, \`tool_response\`.
12
- - **Execution**: \`execute(prompt)\` processes \`function_request\`s from last message → calls → adds \`function_response\`s.
13
-
14
- ## Constructor
15
- \`\`\`javascript
16
- import { ToolSet } from '@j-o-r/hello-dave';
17
-
18
- new ToolSet(choice = 'auto'); // 'auto'|'none'|'required'
19
- \`\`\`
20
-
21
- ## Methods
22
- | Method | Args | Returns | Description |
23
- |--------|------|---------|-------------|
24
- | \`add(name, desc, params, method)\` | \`string\`, \`string\`, \`TSSchema\`, \`async (params) => *\` | \`void\` | Register tool. Overwrites if exists. |
25
- | \`get(name)\` | \`string\` | \`TSTool\` | Get tool details. |
26
- | \`delete(name)\` | \`string\` | \`void\` | Remove tool. |
27
- | \`has(name)\` | \`string\` | \`boolean\` | Exists? |
28
- | \`list()\` | - | \`TSToolListItem[]\` (sorted) | All tools (name/desc/params). |
29
- | \`call(name, params)\` | \`string\`, \`object\` | \`Promise<*\>\` | Execute tool. |
30
- | \`execute(prompt)\` | \`Prompt\` | \`Promise<void>\` | Process last message \`function_request\`s → execute → add \`function_response\`s to \`tool\` role. |
31
- | \`length\` | - | \`number\` | Tool count. |
32
- | \`toolChoice\` | - | \`string\` | Getter for mode. |
33
-
34
- **TSTool**: \`{description: string, parameters: TSSchema, method: async (params) => *}\`
35
- **TSSchema**: OpenAI-style JSON Schema (\`{type: 'object', properties: {...}, required: [...]}\`).
36
-
37
- ## Generic Tools (\`lib/genericToolset.js\` → \`toolsPool\`)
38
- | `syntax_check` | Validate syntax (JS/Py/Bash/JSON) via utils/syntax_check.sh. |\n|-----|-----|
39
- Pre-built \`ToolSet('auto')\` with **11 tools**. Copied via \`AgentManager.addGenericToolcall(name)\` or \`toolsetMode: 'auto'\`.
40
-
41
- | Tool Name | Description |
42
- |----------------------------|-------------|
43
- | \`javascript_interpreter\` | Execute ESM ES6 JavaScript on \`node\`. \`console.log\` captures output. cwd: \`~/devpri/js/hello-dave\`. |
44
- | \`get_user_env\` | Get user environment (name, system, city/region/country/timezone, external IP). |
45
- | \`execute_bash_script\` | Execute raw Bash script/command (no escaping; verbatim \`$\| < > & " ' \\\\` newlines \`$(())\` \`[[ ]]\`. Heredoc-safe). Ubuntu 25.10. |
46
- | \`send_email\` | Send email via \`msmtp\` (to, subject, body). |
47
- | \`open_link\` | Open URL/file with \`xdg-open\`. |
48
- | \`execute_remote_script\` | Execute raw Bash on remote via SSH (\`ssh://user@host[:port]\`). |
49
- | \`history_search\` | Search chat sessions: \`"(todo\\|task)"\` or \`"package.json"\`. Regex in \`.cache/[app]/[prompt]/sessions/*.ndjson\`. |
50
- | \`read_file\` | Read raw file in CWD (relative path, no \`/\` \`..\` \`\\\\\`). |
51
- | \`write_file\` | Write raw content to file in CWD (relative, as-is; no escaping). Returns bytes written. |
52
- | \`memory_recall\` | Recall persistent memory entries from agent-specific storage (\`.cache/[agent]/memory.ndjson\`). |
53
- | \`memory_write\` | Write/update persistent memory entries for long-term state (\`.cache/[agent]/memory.ndjson\`). |
54
-
55
- ## Memory Tools (New)
56
- These tools provide persistent, agent-specific memory storage in NDJSON format (\`.cache/[agent-name]/memory.ndjson\`). Append-only; latest value per key. Ideal for token efficiency by offloading state/decisions from context.
57
-
58
- ### \`memory_recall\`
59
- **Description**: Retrieve the latest values for specified keys from memory file. Returns JSON: \`{key: value, ...}\` or \`{}\` if missing.
60
-
61
- **Parameters**:
62
- \`\`\`json
63
- {
64
- "type": "object",
65
- "properties": {
66
- "keys": {
67
- "type": "array",
68
- "items": { "type": "string" },
69
- "description": "List of memory keys to recall, e.g., ['current_task', 'last_decision']"
70
- }
71
- },
72
- "required": ["keys"]
73
- }
74
- \`\`\`
75
-
76
- **Example Usage in Agent Prompt**:
77
- \`\`\`
78
- Before proceeding, recall your current task and previous decision:
79
- - Call memory_recall with keys: ["current_task", "last_decision"]
80
- Then, use the recalled info to avoid repetition.
81
- \`\`\`
82
-
83
- **Token Efficiency**: Stores tasks/decisions externally. Recall only needed state (e.g., 100 tokens) vs. full history (10k+ tokens), preventing loops/re-reasoning.
84
-
85
- ### \`memory_write\`
86
- **Description**: Append/update key-value pairs to memory (overwrites prior same-key entries). Returns confirmation with stored entries.
87
-
88
- **Parameters**:
89
- \`\`\`json
90
- {
91
- "type": "object",
92
- "properties": {
93
- "entries": {
94
- "type": "array",
95
- "items": {
96
- "type": "object",
97
- "properties": {
98
- "key": { "type": "string", "description": "Unique key (e.g., 'current_task')" },
99
- "value": { "type": "string", "description": "JSON-stringifiable value" }
100
- },
101
- "required": ["key", "value"]
102
- },
103
- "description": "List of {key, value} pairs to store"
104
- }
105
- },
106
- "required": ["entries"]
107
- }
108
- \`\`\`
109
-
110
- **Example Usage in Agent Prompt**:
111
- \`\`\`
112
- After analyzing, store the plan:
113
- - Call memory_write with entries: [{"key": "current_task", "value": "Implement login feature"}, {"key": "step", "value": "1/5"}]
114
- \`\`\`
115
-
116
- **Token Efficiency**: Persist intermediate results across calls/sessions. Avoids context explosion/loops by recalling compact state instead of regenerating.
117
-
118
- ## Integration with AgentManager
119
- In \`setup()\`:
120
- \`\`\`javascript
121
- agent.setup({
122
- toolsetMode: 'auto', // Loads all 11 generic tools
123
- // or 'required': Empty ToolSet (add manually)
124
- });
125
- agent.addGenericToolcall('memory_recall'); // Selective copy post-setup
126
- \`\`\`
127
-
128
- **Custom Tools**:
129
- \`\`\`javascript
130
- import { AgentManager } from '@j-o-r/hello-dave';
131
-
132
- agent.setup({ toolsetMode: 'required' });
133
- const ts = agent.getToolset();
134
- ts.add('math', 'Add numbers', {
135
- type: 'object',
136
- properties: {a: {type: 'number'}, b: {type: 'number'}},
137
- required: ['a', 'b']
138
- }, async ({a, b}) => a + b);
139
- \`\`\`
140
-
141
- **Workflow** (in \`Prompt.call()\` / API adapters):
142
- 1. LLM → \`function_request\`s (assistant message).
143
- 2. \`ToolSet.execute(prompt)\` → parallel \`call()\` → \`function_response\`s (tool message).
144
- 3. Recurse until text response.
145
-
146
- ## Examples
147
- ### Standalone ToolSet
148
- \`\`\`javascript
149
- import { ToolSet } from '@j-o-r/hello-dave';
150
-
151
- const ts = new ToolSet('required');
152
- ts.add('hello', 'Say hello', {type: 'object', properties: {name: {type: 'string'}}, required: ['name']},
153
- async ({name}) => \`Hello, \${name}!\`);
154
- console.log(await ts.call('hello', {name: 'World'})); // "Hello, World!"
155
- \`\`\`
156
-
157
- ### With Prompt/AgentManager
158
- See [AgentManager](./agent-manager.md#custom-tools--generics), [Prompt](./prompt-class.md).
159
-
160
- **Updated:** March 26, 2026 (11 generics from \`lib/genericToolset.js\`).
161
-
162
- See also: [GenericToolset Source](./generic-toolset.md).
163
- \n## Syntax Validation\nSee [tools-syntax-validation.md](tools-syntax-validation.md) for `write_file` JS checks + `syntax_check` tool.
@@ -1,163 +0,0 @@
1
- # ToolSet (\`lib/ToolSet.js\`)
2
-
3
- ## Overview
4
- **ToolSet** manages LLM function calls (tools): registration, execution, listing. Integrates with \`Prompt.js\` (via \`execute(prompt)\`) and \`AgentManager.js\` (pre-configured modes, generics). Supports JSON Schema params, async methods. Exports from \`lib/genericToolset.js\`: \`toolsPool\` (11 pre-built tools).
5
-
6
- **Uses named exports from \`lib/index.js\` - NO default export.**
7
-
8
- Key Features:
9
- - **Modes**: \`toolChoice: 'auto'|'none'|'required'\` (default \`'auto'\`).
10
- - **Validation**: Name regex \`/^\[#![a-z_0-9]{2,}$/\`.
11
- - **Events** (via \`Prompt\`): \`tool_request\`, \`tool_error\`, \`tool_response\`.
12
- - **Execution**: \`execute(prompt)\` processes \`function_request\`s from last message → calls → adds \`function_response\`s.
13
-
14
- ## Constructor
15
- \`\`\`javascript
16
- import { ToolSet } from '@j-o-r/hello-dave';
17
-
18
- new ToolSet(choice = 'auto'); // 'auto'|'none'|'required'
19
- \`\`\`
20
-
21
- ## Methods
22
- | Method | Args | Returns | Description |
23
- |--------|------|---------|-------------|
24
- | \`add(name, desc, params, method)\` | \`string\`, \`string\`, \`TSSchema\`, \`async (params) => *\` | \`void\` | Register tool. Overwrites if exists. |
25
- | \`get(name)\` | \`string\` | \`TSTool\` | Get tool details. |
26
- | \`delete(name)\` | \`string\` | \`void\` | Remove tool. |
27
- | \`has(name)\` | \`string\` | \`boolean\` | Exists? |
28
- | \`list()\` | - | \`TSToolListItem[]\` (sorted) | All tools (name/desc/params). |
29
- | \`call(name, params)\` | \`string\`, \`object\` | \`Promise<*\>\` | Execute tool. |
30
- | \`execute(prompt)\` | \`Prompt\` | \`Promise<void>\` | Process last message \`function_request\`s → execute → add \`function_response\`s to \`tool\` role. |
31
- | \`length\` | - | \`number\` | Tool count. |
32
- | \`toolChoice\` | - | \`string\` | Getter for mode. |
33
-
34
- **TSTool**: \`{description: string, parameters: TSSchema, method: async (params) => *}\`
35
- **TSSchema**: OpenAI-style JSON Schema (\`{type: 'object', properties: {...}, required: [...]}\`).
36
-
37
- ## Generic Tools (\`lib/genericToolset.js\` → \`toolsPool\`)
38
- | `syntax_check` | Validate syntax (JS/Py/Bash/JSON) via utils/syntax_check.sh. |\n|-----|-----|
39
- Pre-built \`ToolSet('auto')\` with **11 tools**. Copied via \`AgentManager.addGenericToolcall(name)\` or \`toolsetMode: 'auto'\`.
40
-
41
- | Tool Name | Description |
42
- |----------------------------|-------------|
43
- | \`javascript_interpreter\` | Execute ESM ES6 JavaScript on \`node\`. \`console.log\` captures output. cwd: \`~/devpri/js/hello-dave\`. |
44
- | \`get_user_env\` | Get user environment (name, system, city/region/country/timezone, external IP). |
45
- | \`execute_bash_script\` | Execute raw Bash script/command (no escaping; verbatim \`$\| < > & " ' \\\\` newlines \`$(())\` \`[[ ]]\`. Heredoc-safe). Ubuntu 25.10. |
46
- | \`send_email\` | Send email via \`msmtp\` (to, subject, body). |
47
- | \`open_link\` | Open URL/file with \`xdg-open\`. |
48
- | \`execute_remote_script\` | Execute raw Bash on remote via SSH (\`ssh://user@host[:port]\`). |
49
- | \`history_search\` | Search chat sessions: \`"(todo\\|task)"\` or \`"package.json"\`. Regex in \`.cache/[app]/[prompt]/sessions/*.ndjson\`. |
50
- | \`read_file\` | Read raw file in CWD (relative path, no \`/\` \`..\` \`\\\\\`). |
51
- | \`write_file\` | Write raw content to file in CWD (relative, as-is; no escaping). Returns bytes written. |
52
- | \`memory_recall\` | Recall persistent memory entries from agent-specific storage (\`.cache/[agent]/memory.ndjson\`). |
53
- | \`memory_write\` | Write/update persistent memory entries for long-term state (\`.cache/[agent]/memory.ndjson\`). |
54
-
55
- ## Memory Tools (New)
56
- These tools provide persistent, agent-specific memory storage in NDJSON format (\`.cache/[agent-name]/memory.ndjson\`). Append-only; latest value per key. Ideal for token efficiency by offloading state/decisions from context.
57
-
58
- ### \`memory_recall\`
59
- **Description**: Retrieve the latest values for specified keys from memory file. Returns JSON: \`{key: value, ...}\` or \`{}\` if missing.
60
-
61
- **Parameters**:
62
- \`\`\`json
63
- {
64
- "type": "object",
65
- "properties": {
66
- "keys": {
67
- "type": "array",
68
- "items": { "type": "string" },
69
- "description": "List of memory keys to recall, e.g., ['current_task', 'last_decision']"
70
- }
71
- },
72
- "required": ["keys"]
73
- }
74
- \`\`\`
75
-
76
- **Example Usage in Agent Prompt**:
77
- \`\`\`
78
- Before proceeding, recall your current task and previous decision:
79
- - Call memory_recall with keys: ["current_task", "last_decision"]
80
- Then, use the recalled info to avoid repetition.
81
- \`\`\`
82
-
83
- **Token Efficiency**: Stores tasks/decisions externally. Recall only needed state (e.g., 100 tokens) vs. full history (10k+ tokens), preventing loops/re-reasoning.
84
-
85
- ### \`memory_write\`
86
- **Description**: Append/update key-value pairs to memory (overwrites prior same-key entries). Returns confirmation with stored entries.
87
-
88
- **Parameters**:
89
- \`\`\`json
90
- {
91
- "type": "object",
92
- "properties": {
93
- "entries": {
94
- "type": "array",
95
- "items": {
96
- "type": "object",
97
- "properties": {
98
- "key": { "type": "string", "description": "Unique key (e.g., 'current_task')" },
99
- "value": { "type": "string", "description": "JSON-stringifiable value" }
100
- },
101
- "required": ["key", "value"]
102
- },
103
- "description": "List of {key, value} pairs to store"
104
- }
105
- },
106
- "required": ["entries"]
107
- }
108
- \`\`\`
109
-
110
- **Example Usage in Agent Prompt**:
111
- \`\`\`
112
- After analyzing, store the plan:
113
- - Call memory_write with entries: [{"key": "current_task", "value": "Implement login feature"}, {"key": "step", "value": "1/5"}]
114
- \`\`\`
115
-
116
- **Token Efficiency**: Persist intermediate results across calls/sessions. Avoids context explosion/loops by recalling compact state instead of regenerating.
117
-
118
- ## Integration with AgentManager
119
- In \`setup()\`:
120
- \`\`\`javascript
121
- agent.setup({
122
- toolsetMode: 'auto', // Loads all 11 generic tools
123
- // or 'required': Empty ToolSet (add manually)
124
- });
125
- agent.addGenericToolcall('memory_recall'); // Selective copy post-setup
126
- \`\`\`
127
-
128
- **Custom Tools**:
129
- \`\`\`javascript
130
- import { AgentManager } from '@j-o-r/hello-dave';
131
-
132
- agent.setup({ toolsetMode: 'required' });
133
- const ts = agent.getToolset();
134
- ts.add('math', 'Add numbers', {
135
- type: 'object',
136
- properties: {a: {type: 'number'}, b: {type: 'number'}},
137
- required: ['a', 'b']
138
- }, async ({a, b}) => a + b);
139
- \`\`\`
140
-
141
- **Workflow** (in \`Prompt.call()\` / API adapters):
142
- 1. LLM → \`function_request\`s (assistant message).
143
- 2. \`ToolSet.execute(prompt)\` → parallel \`call()\` → \`function_response\`s (tool message).
144
- 3. Recurse until text response.
145
-
146
- ## Examples
147
- ### Standalone ToolSet
148
- \`\`\`javascript
149
- import { ToolSet } from '@j-o-r/hello-dave';
150
-
151
- const ts = new ToolSet('required');
152
- ts.add('hello', 'Say hello', {type: 'object', properties: {name: {type: 'string'}}, required: ['name']},
153
- async ({name}) => \`Hello, \${name}!\`);
154
- console.log(await ts.call('hello', {name: 'World'})); // "Hello, World!"
155
- \`\`\`
156
-
157
- ### With Prompt/AgentManager
158
- See [AgentManager](./agent-manager.md#custom-tools--generics), [Prompt](./prompt-class.md).
159
-
160
- **Updated:** March 26, 2026 (11 generics from \`lib/genericToolset.js\`).
161
-
162
- See also: [GenericToolset Source](./generic-toolset.md).
163
- \n## Syntax Validation\nSee [tools-syntax-validation.md](tools-syntax-validation.md) for `write_file` JS checks + `syntax_check` tool.
@@ -1,161 +0,0 @@
1
- # ToolSet (\`lib/ToolSet.js\`)
2
-
3
- ## Overview
4
- **ToolSet** manages LLM function calls (tools): registration, execution, listing. Integrates with \`Prompt.js\` (via \`execute(prompt)\`) and \`AgentManager.js\` (pre-configured modes, generics). Supports JSON Schema params, async methods. Exports from \`lib/genericToolset.js\`: \`toolsPool\` (11 pre-built tools).
5
-
6
- **Uses named exports from \`lib/index.js\` - NO default export.**
7
-
8
- Key Features:
9
- - **Modes**: \`toolChoice: 'auto'|'none'|'required'\` (default \`'auto'\`).
10
- - **Validation**: Name regex \`/^\[#![a-z_0-9]{2,}$/\`.
11
- - **Events** (via \`Prompt\`): \`tool_request\`, \`tool_error\`, \`tool_response\`.
12
- - **Execution**: \`execute(prompt)\` processes \`function_request\`s from last message → calls → adds \`function_response\`s.
13
-
14
- ## Constructor
15
- \`\`\`javascript
16
- import { ToolSet } from '@j-o-r/hello-dave';
17
-
18
- new ToolSet(choice = 'auto'); // 'auto'|'none'|'required'
19
- \`\`\`
20
-
21
- ## Methods
22
- | Method | Args | Returns | Description |
23
- |--------|------|---------|-------------|
24
- | \`add(name, desc, params, method)\` | \`string\`, \`string\`, \`TSSchema\`, \`async (params) => *\` | \`void\` | Register tool. Overwrites if exists. |
25
- | \`get(name)\` | \`string\` | \`TSTool\` | Get tool details. |
26
- | \`delete(name)\` | \`string\` | \`void\` | Remove tool. |
27
- | \`has(name)\` | \`string\` | \`boolean\` | Exists? |
28
- | \`list()\` | - | \`TSToolListItem[]\` (sorted) | All tools (name/desc/params). |
29
- | \`call(name, params)\` | \`string\`, \`object\` | \`Promise<*\>\` | Execute tool. |
30
- | \`execute(prompt)\` | \`Prompt\` | \`Promise<void>\` | Process last message \`function_request\`s → execute → add \`function_response\`s to \`tool\` role. |
31
- | \`length\` | - | \`number\` | Tool count. |
32
- | \`toolChoice\` | - | \`string\` | Getter for mode. |
33
-
34
- **TSTool**: \`{description: string, parameters: TSSchema, method: async (params) => *}\`
35
- **TSSchema**: OpenAI-style JSON Schema (\`{type: 'object', properties: {...}, required: [...]}\`).
36
-
37
- ## Generic Tools (\`lib/genericToolset.js\` → \`toolsPool\`)
38
- Pre-built \`ToolSet('auto')\` with **11 tools**. Copied via \`AgentManager.addGenericToolcall(name)\` or \`toolsetMode: 'auto'\`.
39
-
40
- | Tool Name | Description |
41
- |----------------------------|-------------|
42
- | \`javascript_interpreter\` | Execute ESM ES6 JavaScript on \`node\`. \`console.log\` captures output. cwd: \`~/devpri/js/hello-dave\`. |
43
- | \`get_user_env\` | Get user environment (name, system, city/region/country/timezone, external IP). |
44
- | \`execute_bash_script\` | Execute raw Bash script/command (no escaping; verbatim \`$\| < > & " ' \\\\` newlines \`$(())\` \`[[ ]]\`. Heredoc-safe). Ubuntu 25.10. |
45
- | \`send_email\` | Send email via \`msmtp\` (to, subject, body). |
46
- | \`open_link\` | Open URL/file with \`xdg-open\`. |
47
- | \`execute_remote_script\` | Execute raw Bash on remote via SSH (\`ssh://user@host[:port]\`). |
48
- | \`history_search\` | Search chat sessions: \`"(todo\\|task)"\` or \`"package.json"\`. Regex in \`.cache/[app]/[prompt]/sessions/*.ndjson\`. |
49
- | \`read_file\` | Read raw file in CWD (relative path, no \`/\` \`..\` \`\\\\\`). |
50
- | \`write_file\` | Write raw content to file in CWD (relative, as-is; no escaping). Returns bytes written. |
51
- | \`memory_recall\` | Recall persistent memory entries from agent-specific storage (\`.cache/[agent]/memory.ndjson\`). |
52
- | \`memory_write\` | Write/update persistent memory entries for long-term state (\`.cache/[agent]/memory.ndjson\`). |
53
-
54
- ## Memory Tools (New)
55
- These tools provide persistent, agent-specific memory storage in NDJSON format (\`.cache/[agent-name]/memory.ndjson\`). Append-only; latest value per key. Ideal for token efficiency by offloading state/decisions from context.
56
-
57
- ### \`memory_recall\`
58
- **Description**: Retrieve the latest values for specified keys from memory file. Returns JSON: \`{key: value, ...}\` or \`{}\` if missing.
59
-
60
- **Parameters**:
61
- \`\`\`json
62
- {
63
- "type": "object",
64
- "properties": {
65
- "keys": {
66
- "type": "array",
67
- "items": { "type": "string" },
68
- "description": "List of memory keys to recall, e.g., ['current_task', 'last_decision']"
69
- }
70
- },
71
- "required": ["keys"]
72
- }
73
- \`\`\`
74
-
75
- **Example Usage in Agent Prompt**:
76
- \`\`\`
77
- Before proceeding, recall your current task and previous decision:
78
- - Call memory_recall with keys: ["current_task", "last_decision"]
79
- Then, use the recalled info to avoid repetition.
80
- \`\`\`
81
-
82
- **Token Efficiency**: Stores tasks/decisions externally. Recall only needed state (e.g., 100 tokens) vs. full history (10k+ tokens), preventing loops/re-reasoning.
83
-
84
- ### \`memory_write\`
85
- **Description**: Append/update key-value pairs to memory (overwrites prior same-key entries). Returns confirmation with stored entries.
86
-
87
- **Parameters**:
88
- \`\`\`json
89
- {
90
- "type": "object",
91
- "properties": {
92
- "entries": {
93
- "type": "array",
94
- "items": {
95
- "type": "object",
96
- "properties": {
97
- "key": { "type": "string", "description": "Unique key (e.g., 'current_task')" },
98
- "value": { "type": "string", "description": "JSON-stringifiable value" }
99
- },
100
- "required": ["key", "value"]
101
- },
102
- "description": "List of {key, value} pairs to store"
103
- }
104
- },
105
- "required": ["entries"]
106
- }
107
- \`\`\`
108
-
109
- **Example Usage in Agent Prompt**:
110
- \`\`\`
111
- After analyzing, store the plan:
112
- - Call memory_write with entries: [{"key": "current_task", "value": "Implement login feature"}, {"key": "step", "value": "1/5"}]
113
- \`\`\`
114
-
115
- **Token Efficiency**: Persist intermediate results across calls/sessions. Avoids context explosion/loops by recalling compact state instead of regenerating.
116
-
117
- ## Integration with AgentManager
118
- In \`setup()\`:
119
- \`\`\`javascript
120
- agent.setup({
121
- toolsetMode: 'auto', // Loads all 11 generic tools
122
- // or 'required': Empty ToolSet (add manually)
123
- });
124
- agent.addGenericToolcall('memory_recall'); // Selective copy post-setup
125
- \`\`\`
126
-
127
- **Custom Tools**:
128
- \`\`\`javascript
129
- import { AgentManager } from '@j-o-r/hello-dave';
130
-
131
- agent.setup({ toolsetMode: 'required' });
132
- const ts = agent.getToolset();
133
- ts.add('math', 'Add numbers', {
134
- type: 'object',
135
- properties: {a: {type: 'number'}, b: {type: 'number'}},
136
- required: ['a', 'b']
137
- }, async ({a, b}) => a + b);
138
- \`\`\`
139
-
140
- **Workflow** (in \`Prompt.call()\` / API adapters):
141
- 1. LLM → \`function_request\`s (assistant message).
142
- 2. \`ToolSet.execute(prompt)\` → parallel \`call()\` → \`function_response\`s (tool message).
143
- 3. Recurse until text response.
144
-
145
- ## Examples
146
- ### Standalone ToolSet
147
- \`\`\`javascript
148
- import { ToolSet } from '@j-o-r/hello-dave';
149
-
150
- const ts = new ToolSet('required');
151
- ts.add('hello', 'Say hello', {type: 'object', properties: {name: {type: 'string'}}, required: ['name']},
152
- async ({name}) => \`Hello, \${name}!\`);
153
- console.log(await ts.call('hello', {name: 'World'})); // "Hello, World!"
154
- \`\`\`
155
-
156
- ### With Prompt/AgentManager
157
- See [AgentManager](./agent-manager.md#custom-tools--generics), [Prompt](./prompt-class.md).
158
-
159
- **Updated:** March 26, 2026 (11 generics from \`lib/genericToolset.js\`).
160
-
161
- See also: [GenericToolset Source](./generic-toolset.md).
@@ -1,111 +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
- **Uses named exports from `lib/index.js` - NO default export.**
7
-
8
- Key adaptations:
9
- - **Unified Interface**: Uses `Prompt` messages/history for input; parses `output` into assistant/tool responses.
10
- - **Recursive Tool Calls**: Automatically handles `function_call` → execute tools → `function_call_output` loops (up to `GLOBAL.max_recursive_requests`).
11
- - **Tool Support**: Converts `ToolSet` to xAI `function` tools; supports native xAI tools like `web_search`, `x_search`.
12
- - **Reasoning & Search**: Configurable `reasoning.effort` (`low`/`medium`/`high`), `search_parameters`.
13
- - **Streaming**: Not yet implemented (future).
14
- - **Auth**: Requires `XAIKEY` env var.
15
-
16
- Default model: `grok-4-fast-reasoning`. Supports: `grok-4-fast-reasoning`, `grok-4-fast-non-reasoning`, etc.
17
-
18
- ## Usage in AgentManager
19
- ```javascript
20
- import { AgentManager } from '@j-o-r/hello-dave';
21
-
22
- const agent = new AgentManager({ name: 'weatheragent', secret: 'optional-ws-secret' });
23
- agent.setup({
24
- prompt: 'You are a precise weather expert. Use tools for real-time data.',
25
- api: 'xai',
26
- options: { model: 'grok-4-fast-reasoning', reasoning: { effort: 'high' } },
27
- toolsetMode: 'auto', // Adds generic tools like web_search
28
- contextWindow: 128000
29
- });
30
- agent.addGenericToolcall('web_search'); // Optional: Add extras
31
-
32
- // CLI mode
33
- agent.start(); // Interactive chat
34
-
35
- // Or direct call
36
- const response = await agent.directCall('Weather in Amsterdam today?');
37
- console.log(response); // Handles search/tools automatically
38
- ```
39
-
40
- Under the hood:
41
- 1. `Prompt.setAdaptor(API.text['xai'], toolset, options)` → uses `responses.request()`.
42
- 2. Converts history to xAI `input[]` (system/user/assistant/tool).
43
- 3. POST to `https://api.x.ai/v1/responses`.
44
- 4. Parses `output` → adds text/reasoning/tools to `Prompt`.
45
- 5. If tools needed, `ToolSet.execute()` → recurse until complete.
46
-
47
- ## Options (XAIOptions)
48
- | Property | Type | Default | Description |
49
- |----------|------|---------|-------------|
50
- | `model` | string | `'grok-4-fast-non-reasoning'` | e.g., `'grok-4-fast-reasoning'` |
51
- | `input` | `XAIInput[]` | `[{role: 'system', content: 'Be precise'}]` | Messages/history |
52
- | `reasoning.effort` | `'low'\|'medium'\|'high'` | `'medium'` | Reasoning depth |
53
- | `reasoning.summary` | `'auto'\|'concise'\|'detailed'` | `'auto'` | Reasoning output style |
54
- | `temperature` | number | `1` (0-2) | Sampling |
55
- | `parallel_tool_calls` | boolean | `true` | Parallel functions |
56
- | `tool_choice` | `'auto'` | `'auto'` | Tool selection |
57
- | `tools` | `XAIFunctionTool[]` | `[]` | From `ToolSet` |
58
- | `store` | boolean | `false` | Persist response (still bills tokens) |
59
- | `max_output_tokens` | number | `4000` | Limit |
60
- | `search_parameters` | object | - | `{max_search_results: 4, mode: 'auto', return_citations: true}` |
61
-
62
- **Tool Types**:
63
- - `function`: From `ToolSet` (name, description, parameters JSONSchema).
64
- - Native: `web_search`, `x_search` (filters: dates, domains, etc.).
65
-
66
- ## Example Request (Generated Internally)
67
- ```json
68
- {
69
- "model": "grok-4-fast-reasoning",
70
- "input": [
71
- {"role": "system", "content": "You are a precise weather expert."},
72
- {"role": "user", "content": "Weather in Amsterdam today?"}
73
- ],
74
- "parallel_tool_calls": true,
75
- "reasoning": {"effort": "high"},
76
- "search_parameters": {"mode": "auto", "return_citations": true},
77
- "tools": [{"type": "function", "name": "web_search", ...}]
78
- }
79
- ```
80
-
81
- ## Example Response (Parsed to Prompt)
82
- - **Text + Citations**: Added as `assistant` text + `log` annotations (URLs).
83
- - **Function Calls**: `assistant` with `function_request` → `ToolSet.execute()`.
84
- - **Reasoning**: Prepended as `reasoning` multimodal text.
85
-
86
- Sample parsed:
87
- ```
88
- Today is [date]. Weather: Cloudy, 5°C... [citations]
89
- ```
90
- Tokens: `input_tokens`, `output_tokens` (incl. `reasoning_tokens`) logged in `Prompt.records`.
91
-
92
- ## Advanced: Custom Tools
93
- Extend `ToolSet` before `setup()`:
94
- ```javascript
95
- import { ToolSet } from '@j-o-r/hello-dave';
96
-
97
- const ts = new ToolSet('required');
98
- ts.add('get_weather', 'Get weather for a location', {
99
- type: 'object',
100
- properties: { location: {type: 'string'} },
101
- required: ['location']
102
- }, async (params) => `Weather: ${params.location} - 20°C`); // Handler
103
- agent.setup({ ..., toolsetMode: ts });
104
- ```
105
-
106
- ## Errors & Limits
107
- - `Max recursive calls`: `GLOBAL.max_recursive_requests`.
108
- - Missing `XAIKEY`: Throws.
109
- - Invalid last message: Must end in `user`/`tool`.
110
-
111
- 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).