agentx-sdk 0.6.1 → 0.6.2
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/README.md +164 -160
- package/dist/agent.d.ts +5 -3
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +63 -30
- package/dist/agent.js.map +1 -1
- package/dist/config/config.d.ts.map +1 -1
- package/dist/config/config.js +8 -4
- package/dist/config/config.js.map +1 -1
- package/dist/contracts/entities/agent-event.d.ts.map +1 -1
- package/dist/contracts/entities/index.d.ts +1 -1
- package/dist/contracts/entities/index.d.ts.map +1 -1
- package/dist/core/compaction/autocompact.d.ts.map +1 -1
- package/dist/core/compaction/autocompact.js +9 -12
- package/dist/core/compaction/autocompact.js.map +1 -1
- package/dist/core/compaction/microcompact.js +1 -1
- package/dist/core/compaction/microcompact.js.map +1 -1
- package/dist/core/compaction/snip-compact.d.ts.map +1 -1
- package/dist/core/compaction/snip-compact.js.map +1 -1
- package/dist/core/compaction/tool-result-budget.js.map +1 -1
- package/dist/core/context-analysis.js.map +1 -1
- package/dist/core/context-builder.d.ts.map +1 -1
- package/dist/core/context-builder.js +8 -5
- package/dist/core/context-builder.js.map +1 -1
- package/dist/core/conversation-manager.d.ts +1 -1
- package/dist/core/conversation-manager.d.ts.map +1 -1
- package/dist/core/conversation-manager.js +4 -2
- package/dist/core/conversation-manager.js.map +1 -1
- package/dist/core/execution-context.d.ts.map +1 -1
- package/dist/core/execution-context.js.map +1 -1
- package/dist/core/message-normalize.js +1 -1
- package/dist/core/message-normalize.js.map +1 -1
- package/dist/core/prompt-builders.d.ts.map +1 -1
- package/dist/core/prompt-builders.js +2 -2
- package/dist/core/prompt-builders.js.map +1 -1
- package/dist/core/react-loop.d.ts.map +1 -1
- package/dist/core/react-loop.js +79 -23
- package/dist/core/react-loop.js.map +1 -1
- package/dist/core/stream-emitter.js +17 -18
- package/dist/core/stream-emitter.js.map +1 -1
- package/dist/core/streaming-tool-executor.d.ts.map +1 -1
- package/dist/core/streaming-tool-executor.js +18 -8
- package/dist/core/streaming-tool-executor.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/knowledge/chunking.js +1 -1
- package/dist/knowledge/chunking.js.map +1 -1
- package/dist/knowledge/embedding-service.d.ts.map +1 -1
- package/dist/knowledge/embedding-service.js +5 -2
- package/dist/knowledge/embedding-service.js.map +1 -1
- package/dist/knowledge/knowledge-manager.d.ts.map +1 -1
- package/dist/knowledge/knowledge-manager.js +3 -2
- package/dist/knowledge/knowledge-manager.js.map +1 -1
- package/dist/knowledge/sqlite-vector-store.d.ts.map +1 -1
- package/dist/knowledge/sqlite-vector-store.js +12 -6
- package/dist/knowledge/sqlite-vector-store.js.map +1 -1
- package/dist/llm/errors.d.ts.map +1 -1
- package/dist/llm/errors.js +4 -2
- package/dist/llm/errors.js.map +1 -1
- package/dist/llm/llm-client.d.ts.map +1 -1
- package/dist/llm/llm-client.js +31 -13
- package/dist/llm/llm-client.js.map +1 -1
- package/dist/memory/file-memory-system.d.ts.map +1 -1
- package/dist/memory/file-memory-system.js +34 -17
- package/dist/memory/file-memory-system.js.map +1 -1
- package/dist/memory/memory-extractor.d.ts +9 -9
- package/dist/memory/memory-extractor.d.ts.map +1 -1
- package/dist/memory/memory-extractor.js +4 -2
- package/dist/memory/memory-extractor.js.map +1 -1
- package/dist/memory/memory-paths.d.ts.map +1 -1
- package/dist/memory/memory-paths.js +11 -4
- package/dist/memory/memory-paths.js.map +1 -1
- package/dist/memory/memory-prompts.d.ts.map +1 -1
- package/dist/memory/memory-prompts.js +1 -1
- package/dist/memory/memory-prompts.js.map +1 -1
- package/dist/memory/memory-relevance.d.ts +2 -1
- package/dist/memory/memory-relevance.d.ts.map +1 -1
- package/dist/memory/memory-relevance.js +1 -1
- package/dist/memory/memory-relevance.js.map +1 -1
- package/dist/memory/memory-scanner.d.ts.map +1 -1
- package/dist/memory/memory-scanner.js +7 -6
- package/dist/memory/memory-scanner.js.map +1 -1
- package/dist/memory/memory-tools.d.ts.map +1 -1
- package/dist/memory/memory-tools.js +16 -6
- package/dist/memory/memory-tools.js.map +1 -1
- package/dist/memory/memory-types.js +1 -1
- package/dist/memory/memory-types.js.map +1 -1
- package/dist/skills/skill-glob.js +1 -1
- package/dist/skills/skill-glob.js.map +1 -1
- package/dist/skills/skill-loader.d.ts.map +1 -1
- package/dist/skills/skill-loader.js +29 -25
- package/dist/skills/skill-loader.js.map +1 -1
- package/dist/skills/skill-manager.d.ts.map +1 -1
- package/dist/skills/skill-manager.js +18 -17
- package/dist/skills/skill-manager.js.map +1 -1
- package/dist/storage/sqlite-conversation-store.d.ts.map +1 -1
- package/dist/storage/sqlite-conversation-store.js +15 -7
- package/dist/storage/sqlite-conversation-store.js.map +1 -1
- package/dist/storage/sqlite-database.js +3 -1
- package/dist/storage/sqlite-database.js.map +1 -1
- package/dist/tools/builtin/ask-user.d.ts.map +1 -1
- package/dist/tools/builtin/ask-user.js +4 -1
- package/dist/tools/builtin/ask-user.js.map +1 -1
- package/dist/tools/builtin/bash.d.ts.map +1 -1
- package/dist/tools/builtin/bash.js +5 -3
- package/dist/tools/builtin/bash.js.map +1 -1
- package/dist/tools/builtin/file-edit.d.ts.map +1 -1
- package/dist/tools/builtin/file-edit.js +16 -4
- package/dist/tools/builtin/file-edit.js.map +1 -1
- package/dist/tools/builtin/file-read.d.ts.map +1 -1
- package/dist/tools/builtin/file-read.js +9 -5
- package/dist/tools/builtin/file-read.js.map +1 -1
- package/dist/tools/builtin/file-write.d.ts.map +1 -1
- package/dist/tools/builtin/file-write.js +4 -1
- package/dist/tools/builtin/file-write.js.map +1 -1
- package/dist/tools/builtin/glob.d.ts.map +1 -1
- package/dist/tools/builtin/glob.js +9 -4
- package/dist/tools/builtin/glob.js.map +1 -1
- package/dist/tools/builtin/grep.d.ts.map +1 -1
- package/dist/tools/builtin/grep.js +6 -2
- package/dist/tools/builtin/grep.js.map +1 -1
- package/dist/tools/builtin/path-guard.d.ts.map +1 -1
- package/dist/tools/builtin/path-guard.js.map +1 -1
- package/dist/tools/builtin/web-fetch.d.ts.map +1 -1
- package/dist/tools/builtin/web-fetch.js +16 -8
- package/dist/tools/builtin/web-fetch.js.map +1 -1
- package/dist/tools/json-schema-to-zod.d.ts +2 -2
- package/dist/tools/json-schema-to-zod.d.ts.map +1 -1
- package/dist/tools/json-schema-to-zod.js +3 -5
- package/dist/tools/json-schema-to-zod.js.map +1 -1
- package/dist/tools/mcp-adapter.d.ts +2 -2
- package/dist/tools/mcp-adapter.d.ts.map +1 -1
- package/dist/tools/mcp-adapter.js +40 -24
- package/dist/tools/mcp-adapter.js.map +1 -1
- package/dist/tools/skill-tool.d.ts.map +1 -1
- package/dist/tools/skill-tool.js +12 -13
- package/dist/tools/skill-tool.js.map +1 -1
- package/dist/tools/sql/sql-tool-factory.d.ts.map +1 -1
- package/dist/tools/sql/sql-tool-factory.js +8 -6
- package/dist/tools/sql/sql-tool-factory.js.map +1 -1
- package/dist/tools/tool-executor.d.ts +3 -3
- package/dist/tools/tool-executor.d.ts.map +1 -1
- package/dist/tools/tool-executor.js +17 -8
- package/dist/tools/tool-executor.js.map +1 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/model-context.js.map +1 -1
- package/dist/utils/retry.d.ts.map +1 -1
- package/dist/utils/retry.js +5 -2
- package/dist/utils/retry.js.map +1 -1
- package/dist/utils/token-counter.d.ts.map +1 -1
- package/dist/utils/token-counter.js.map +1 -1
- package/package.json +22 -3
package/README.md
CHANGED
|
@@ -66,7 +66,7 @@ import { Agent, builtinTools } from 'agentx-sdk';
|
|
|
66
66
|
const agent = Agent.create({ apiKey: '...' });
|
|
67
67
|
|
|
68
68
|
// Register all (except askUser which needs a callback)
|
|
69
|
-
builtinTools.all().forEach(t => agent.addTool(t));
|
|
69
|
+
builtinTools.all().forEach((t) => agent.addTool(t));
|
|
70
70
|
|
|
71
71
|
// Or register individually
|
|
72
72
|
agent.addTool(builtinTools.fileRead());
|
|
@@ -78,27 +78,29 @@ agent.addTool(builtinTools.bash());
|
|
|
78
78
|
agent.addTool(builtinTools.webFetch());
|
|
79
79
|
|
|
80
80
|
// askUser needs a callback — you implement the interaction
|
|
81
|
-
agent.addTool(
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
}
|
|
81
|
+
agent.addTool(
|
|
82
|
+
builtinTools.askUser({
|
|
83
|
+
onAsk: async (question, options) => {
|
|
84
|
+
// Your logic (readline, UI, API, etc.)
|
|
85
|
+
return readline.question(question);
|
|
86
|
+
},
|
|
87
|
+
}),
|
|
88
|
+
);
|
|
87
89
|
|
|
88
90
|
// Shortcut: file ops only (read + write + edit + glob + grep)
|
|
89
|
-
builtinTools.fileOps().forEach(t => agent.addTool(t));
|
|
91
|
+
builtinTools.fileOps().forEach((t) => agent.addTool(t));
|
|
90
92
|
```
|
|
91
93
|
|
|
92
|
-
| Tool
|
|
93
|
-
|
|
94
|
-
| `builtinTools.fileRead()`
|
|
95
|
-
| `builtinTools.fileWrite()` | Write
|
|
96
|
-
| `builtinTools.fileEdit()`
|
|
97
|
-
| `builtinTools.glob()`
|
|
98
|
-
| `builtinTools.grep()`
|
|
99
|
-
| `builtinTools.bash()`
|
|
100
|
-
| `builtinTools.webFetch()`
|
|
101
|
-
| `builtinTools.askUser()`
|
|
94
|
+
| Tool | Name | Description |
|
|
95
|
+
| -------------------------- | -------- | ----------------------------------------------- |
|
|
96
|
+
| `builtinTools.fileRead()` | Read | Read files with line numbers and offset/limit |
|
|
97
|
+
| `builtinTools.fileWrite()` | Write | Write/create files (creates dirs automatically) |
|
|
98
|
+
| `builtinTools.fileEdit()` | Edit | Exact find/replace in files |
|
|
99
|
+
| `builtinTools.glob()` | Glob | Search files by pattern (`**/*.ts`) |
|
|
100
|
+
| `builtinTools.grep()` | Grep | Search content via regex in files |
|
|
101
|
+
| `builtinTools.bash()` | Bash | Execute shell commands with timeout |
|
|
102
|
+
| `builtinTools.webFetch()` | WebFetch | Fetch content from URL (HTML → text) |
|
|
103
|
+
| `builtinTools.askUser()` | AskUser | Ask the user a question (callback pattern) |
|
|
102
104
|
|
|
103
105
|
## Skills
|
|
104
106
|
|
|
@@ -265,31 +267,31 @@ agent.addSkill({
|
|
|
265
267
|
|
|
266
268
|
### Frontmatter reference (SKILL.md)
|
|
267
269
|
|
|
268
|
-
| Field
|
|
269
|
-
|
|
270
|
-
| `name`
|
|
271
|
-
| `description`
|
|
272
|
-
| `whenToUse`
|
|
273
|
-
| `triggerPrefix`
|
|
274
|
-
| `aliases`
|
|
275
|
-
| `argNames`
|
|
276
|
-
| `allowedTools`
|
|
277
|
-
| `model`
|
|
278
|
-
| `context`
|
|
279
|
-
| `paths`
|
|
280
|
-
| `effort`
|
|
281
|
-
| `exclusive`
|
|
282
|
-
| `priority`
|
|
283
|
-
| `modelInvocable` | boolean
|
|
270
|
+
| Field | Type | Description |
|
|
271
|
+
| ---------------- | ------------------ | -------------------------------------------- |
|
|
272
|
+
| `name` | string | Unique skill name |
|
|
273
|
+
| `description` | string | Short description |
|
|
274
|
+
| `whenToUse` | string | Usage scenarios (for model discovery) |
|
|
275
|
+
| `triggerPrefix` | string | Activation prefix (e.g. `/review`) |
|
|
276
|
+
| `aliases` | string[] | Alternative names |
|
|
277
|
+
| `argNames` | string[] | Argument names for substitution |
|
|
278
|
+
| `allowedTools` | string[] | Tools the skill can use |
|
|
279
|
+
| `model` | string | Model override |
|
|
280
|
+
| `context` | `inline` \| `fork` | Execution mode |
|
|
281
|
+
| `paths` | string[] | Globs for conditional activation |
|
|
282
|
+
| `effort` | number | Computational effort hint (1-10) |
|
|
283
|
+
| `exclusive` | boolean | Blocks other skills |
|
|
284
|
+
| `priority` | number | Priority (higher wins) |
|
|
285
|
+
| `modelInvocable` | boolean | Whether the model can invoke (default: true) |
|
|
284
286
|
|
|
285
287
|
### Skills API
|
|
286
288
|
|
|
287
289
|
```typescript
|
|
288
|
-
agent.addSkill(skill)
|
|
289
|
-
agent.removeSkill('name')
|
|
290
|
-
agent.listSkills()
|
|
291
|
-
await agent.loadSkillsDir('./skills')
|
|
292
|
-
agent.activateSkillsForPaths(['file.ts'])
|
|
290
|
+
agent.addSkill(skill); // register
|
|
291
|
+
agent.removeSkill('name'); // remove
|
|
292
|
+
agent.listSkills(); // list
|
|
293
|
+
await agent.loadSkillsDir('./skills'); // load from directory
|
|
294
|
+
agent.activateSkillsForPaths(['file.ts']); // activate conditionals
|
|
293
295
|
```
|
|
294
296
|
|
|
295
297
|
### Matching hierarchy
|
|
@@ -370,7 +372,7 @@ await agent.connectMCP({
|
|
|
370
372
|
name: 'remote-sse',
|
|
371
373
|
transport: 'sse',
|
|
372
374
|
url: 'https://mcp.example.com/sse',
|
|
373
|
-
headers: {
|
|
375
|
+
headers: { Authorization: 'Bearer sk-...' },
|
|
374
376
|
});
|
|
375
377
|
|
|
376
378
|
// HTTP — Streamable HTTP (modern servers, bidirectional)
|
|
@@ -378,7 +380,7 @@ await agent.connectMCP({
|
|
|
378
380
|
name: 'remote-http',
|
|
379
381
|
transport: 'http',
|
|
380
382
|
url: 'https://mcp.example.com/v1',
|
|
381
|
-
headers: {
|
|
383
|
+
headers: { Authorization: 'Bearer sk-...' },
|
|
382
384
|
});
|
|
383
385
|
```
|
|
384
386
|
|
|
@@ -386,10 +388,10 @@ await agent.connectMCP({
|
|
|
386
388
|
|
|
387
389
|
MCP servers that declare `readOnlyHint` or `destructiveHint` in tools are automatically mapped to AgentTool flags:
|
|
388
390
|
|
|
389
|
-
| MCP Annotation
|
|
390
|
-
|
|
391
|
-
| `readOnlyHint: true`
|
|
392
|
-
| `destructiveHint: true` | `isDestructive: true`
|
|
391
|
+
| MCP Annotation | AgentTool Flag | Effect |
|
|
392
|
+
| ----------------------- | ---------------------------------------------- | --------------------------------- |
|
|
393
|
+
| `readOnlyHint: true` | `isReadOnly: true` + `isConcurrencySafe: true` | Tools run in parallel, no warning |
|
|
394
|
+
| `destructiveHint: true` | `isDestructive: true` | Model receives caution warning |
|
|
393
395
|
|
|
394
396
|
### Server instructions
|
|
395
397
|
|
|
@@ -427,15 +429,15 @@ const content = await agent.mcpAdapter.readResource('github', 'repo://owner/proj
|
|
|
427
429
|
```typescript
|
|
428
430
|
await agent.connectMCP({
|
|
429
431
|
name: 'my-server',
|
|
430
|
-
transport: 'stdio',
|
|
431
|
-
command: 'npx',
|
|
432
|
+
transport: 'stdio', // 'stdio' | 'sse' | 'http'
|
|
433
|
+
command: 'npx', // for stdio
|
|
432
434
|
args: ['-y', 'my-mcp-server'],
|
|
433
435
|
// url: 'https://...', // for sse/http
|
|
434
436
|
// headers: { ... }, // for sse/http
|
|
435
|
-
timeout: 30_000,
|
|
436
|
-
maxRetries: 3,
|
|
437
|
-
healthCheckInterval: 60_000,
|
|
438
|
-
isolateErrors: true,
|
|
437
|
+
timeout: 30_000, // timeout per tool call (ms)
|
|
438
|
+
maxRetries: 3, // reconnection attempts
|
|
439
|
+
healthCheckInterval: 60_000, // periodic health check (ms)
|
|
440
|
+
isolateErrors: true, // errors don't propagate (default: true)
|
|
439
441
|
});
|
|
440
442
|
```
|
|
441
443
|
|
|
@@ -471,20 +473,20 @@ await agent.chat('Create a GitHub issue with labels bug and urgent');
|
|
|
471
473
|
```typescript
|
|
472
474
|
for await (const event of agent.stream('Build a TODO app')) {
|
|
473
475
|
switch (event.type) {
|
|
474
|
-
case 'agent_start':
|
|
475
|
-
case 'skill_activated':
|
|
476
|
-
case 'text_delta':
|
|
477
|
-
case 'text_done':
|
|
478
|
-
case 'tool_call_start':
|
|
479
|
-
case 'tool_call_end':
|
|
480
|
-
case 'turn_start':
|
|
481
|
-
case 'turn_end':
|
|
482
|
-
case 'agent_end':
|
|
483
|
-
case 'error':
|
|
484
|
-
case 'warning':
|
|
485
|
-
case 'compaction':
|
|
486
|
-
case 'recovery':
|
|
487
|
-
case 'model_fallback':
|
|
476
|
+
case 'agent_start': // Execution started
|
|
477
|
+
case 'skill_activated': // Skill activated (event.skillName)
|
|
478
|
+
case 'text_delta': // Text chunk (event.content)
|
|
479
|
+
case 'text_done': // Full text complete
|
|
480
|
+
case 'tool_call_start': // Tool called
|
|
481
|
+
case 'tool_call_end': // Tool result
|
|
482
|
+
case 'turn_start': // Loop iteration started
|
|
483
|
+
case 'turn_end': // Loop iteration ended
|
|
484
|
+
case 'agent_end': // Finished (event.usage, event.duration)
|
|
485
|
+
case 'error': // Error (event.recoverable)
|
|
486
|
+
case 'warning': // Warning
|
|
487
|
+
case 'compaction': // Context compacted
|
|
488
|
+
case 'recovery': // Automatic recovery
|
|
489
|
+
case 'model_fallback': // Model fallback
|
|
488
490
|
}
|
|
489
491
|
}
|
|
490
492
|
```
|
|
@@ -494,7 +496,7 @@ for await (const event of agent.stream('Build a TODO app')) {
|
|
|
494
496
|
```typescript
|
|
495
497
|
const agent = Agent.create({
|
|
496
498
|
apiKey: 'sk-...',
|
|
497
|
-
baseUrl: 'https://api.openai.com/v1',
|
|
499
|
+
baseUrl: 'https://api.openai.com/v1', // optional — any OpenAI-compatible URL
|
|
498
500
|
model: 'gpt-4o',
|
|
499
501
|
systemPrompt: 'You are a helpful assistant.',
|
|
500
502
|
|
|
@@ -507,9 +509,9 @@ const agent = Agent.create({
|
|
|
507
509
|
|
|
508
510
|
// Skills
|
|
509
511
|
skills: {
|
|
510
|
-
skillsDir: './.skills',
|
|
511
|
-
maxActiveSkills: 3,
|
|
512
|
-
modelDiscovery: true,
|
|
512
|
+
skillsDir: './.skills', // Auto-load skills from directory
|
|
513
|
+
maxActiveSkills: 3, // Max simultaneous skills
|
|
514
|
+
modelDiscovery: true, // List skills for model context
|
|
513
515
|
},
|
|
514
516
|
|
|
515
517
|
// Memory
|
|
@@ -517,8 +519,8 @@ const agent = Agent.create({
|
|
|
517
519
|
enabled: true,
|
|
518
520
|
memoryDir: '.agentx/memory/',
|
|
519
521
|
extractionEnabled: true,
|
|
520
|
-
samplingRate: 0.3,
|
|
521
|
-
extractionInterval: 10,
|
|
522
|
+
samplingRate: 0.3, // 30% chance per turn
|
|
523
|
+
extractionInterval: 10, // Force every 10 turns
|
|
522
524
|
},
|
|
523
525
|
|
|
524
526
|
// Knowledge
|
|
@@ -531,7 +533,7 @@ const agent = Agent.create({
|
|
|
531
533
|
|
|
532
534
|
// Behavior
|
|
533
535
|
maxIterations: 10,
|
|
534
|
-
onToolError: 'continue',
|
|
536
|
+
onToolError: 'continue', // 'continue' | 'stop' | 'retry'
|
|
535
537
|
|
|
536
538
|
// Cost control
|
|
537
539
|
costPolicy: {
|
|
@@ -570,14 +572,14 @@ Interfaces: `ConversationStore`, `VectorStore` — implement to use any backend.
|
|
|
570
572
|
|
|
571
573
|
## Stack
|
|
572
574
|
|
|
573
|
-
| Layer
|
|
574
|
-
|
|
575
|
-
| Language
|
|
576
|
-
| Runtime
|
|
577
|
-
| Validation
|
|
578
|
-
| Persistence
|
|
579
|
-
| Tools schema | zod-to-json-schema
|
|
580
|
-
| LLM
|
|
575
|
+
| Layer | Technology |
|
|
576
|
+
| ------------ | ---------------------------------------- |
|
|
577
|
+
| Language | TypeScript 5.x |
|
|
578
|
+
| Runtime | Node.js 22+ |
|
|
579
|
+
| Validation | Zod 3.x |
|
|
580
|
+
| Persistence | better-sqlite3 + SQLite |
|
|
581
|
+
| Tools schema | zod-to-json-schema |
|
|
582
|
+
| LLM | Any OpenAI-compatible API (native fetch) |
|
|
581
583
|
|
|
582
584
|
**<= 4 direct dependencies.** Zero AI frameworks. No vendor lock-in.
|
|
583
585
|
|
|
@@ -647,7 +649,7 @@ import { Agent, builtinTools } from 'agentx-sdk';
|
|
|
647
649
|
const agent = Agent.create({ apiKey: '...' });
|
|
648
650
|
|
|
649
651
|
// Registrar todas (exceto askUser que precisa de callback)
|
|
650
|
-
builtinTools.all().forEach(t => agent.addTool(t));
|
|
652
|
+
builtinTools.all().forEach((t) => agent.addTool(t));
|
|
651
653
|
|
|
652
654
|
// Ou registrar individualmente
|
|
653
655
|
agent.addTool(builtinTools.fileRead());
|
|
@@ -659,27 +661,29 @@ agent.addTool(builtinTools.bash());
|
|
|
659
661
|
agent.addTool(builtinTools.webFetch());
|
|
660
662
|
|
|
661
663
|
// askUser precisa de callback — voce implementa a interacao
|
|
662
|
-
agent.addTool(
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
}
|
|
664
|
+
agent.addTool(
|
|
665
|
+
builtinTools.askUser({
|
|
666
|
+
onAsk: async (question, options) => {
|
|
667
|
+
// Sua logica (readline, UI, API, etc.)
|
|
668
|
+
return readline.question(question);
|
|
669
|
+
},
|
|
670
|
+
}),
|
|
671
|
+
);
|
|
668
672
|
|
|
669
673
|
// Atalho: so file ops (read + write + edit + glob + grep)
|
|
670
|
-
builtinTools.fileOps().forEach(t => agent.addTool(t));
|
|
674
|
+
builtinTools.fileOps().forEach((t) => agent.addTool(t));
|
|
671
675
|
```
|
|
672
676
|
|
|
673
|
-
| Tool
|
|
674
|
-
|
|
675
|
-
| `builtinTools.fileRead()`
|
|
676
|
-
| `builtinTools.fileWrite()` | Write
|
|
677
|
-
| `builtinTools.fileEdit()`
|
|
678
|
-
| `builtinTools.glob()`
|
|
679
|
-
| `builtinTools.grep()`
|
|
680
|
-
| `builtinTools.bash()`
|
|
681
|
-
| `builtinTools.webFetch()`
|
|
682
|
-
| `builtinTools.askUser()`
|
|
677
|
+
| Tool | Nome | Descricao |
|
|
678
|
+
| -------------------------- | -------- | --------------------------------------------------- |
|
|
679
|
+
| `builtinTools.fileRead()` | Read | Ler arquivos com line numbers e offset/limit |
|
|
680
|
+
| `builtinTools.fileWrite()` | Write | Escrever/criar arquivos (cria dirs automaticamente) |
|
|
681
|
+
| `builtinTools.fileEdit()` | Edit | Find/replace exato em arquivos |
|
|
682
|
+
| `builtinTools.glob()` | Glob | Buscar arquivos por pattern (`**/*.ts`) |
|
|
683
|
+
| `builtinTools.grep()` | Grep | Buscar conteudo via regex em arquivos |
|
|
684
|
+
| `builtinTools.bash()` | Bash | Executar comandos shell com timeout |
|
|
685
|
+
| `builtinTools.webFetch()` | WebFetch | Buscar conteudo de URL (HTML → texto) |
|
|
686
|
+
| `builtinTools.askUser()` | AskUser | Perguntar ao usuario (callback pattern) |
|
|
683
687
|
|
|
684
688
|
## Skills
|
|
685
689
|
|
|
@@ -846,31 +850,31 @@ agent.addSkill({
|
|
|
846
850
|
|
|
847
851
|
### Referencia de frontmatter (SKILL.md)
|
|
848
852
|
|
|
849
|
-
| Campo
|
|
850
|
-
|
|
851
|
-
| `name`
|
|
852
|
-
| `description`
|
|
853
|
-
| `whenToUse`
|
|
854
|
-
| `triggerPrefix`
|
|
855
|
-
| `aliases`
|
|
856
|
-
| `argNames`
|
|
857
|
-
| `allowedTools`
|
|
858
|
-
| `model`
|
|
859
|
-
| `context`
|
|
860
|
-
| `paths`
|
|
861
|
-
| `effort`
|
|
862
|
-
| `exclusive`
|
|
863
|
-
| `priority`
|
|
864
|
-
| `modelInvocable` | boolean
|
|
853
|
+
| Campo | Tipo | Descricao |
|
|
854
|
+
| ---------------- | ------------------ | ---------------------------------------- |
|
|
855
|
+
| `name` | string | Nome unico da skill |
|
|
856
|
+
| `description` | string | Descricao curta |
|
|
857
|
+
| `whenToUse` | string | Cenarios de uso (para model discovery) |
|
|
858
|
+
| `triggerPrefix` | string | Prefixo para ativacao (ex: `/review`) |
|
|
859
|
+
| `aliases` | string[] | Nomes alternativos |
|
|
860
|
+
| `argNames` | string[] | Nomes dos argumentos para substituicao |
|
|
861
|
+
| `allowedTools` | string[] | Tools que a skill pode usar |
|
|
862
|
+
| `model` | string | Override de modelo |
|
|
863
|
+
| `context` | `inline` \| `fork` | Modo de execucao |
|
|
864
|
+
| `paths` | string[] | Globs para ativacao condicional |
|
|
865
|
+
| `effort` | number | Hint de esforco computacional (1-10) |
|
|
866
|
+
| `exclusive` | boolean | Bloqueia outras skills |
|
|
867
|
+
| `priority` | number | Prioridade (maior vence) |
|
|
868
|
+
| `modelInvocable` | boolean | Se o modelo pode invocar (default: true) |
|
|
865
869
|
|
|
866
870
|
### API de Skills
|
|
867
871
|
|
|
868
872
|
```typescript
|
|
869
|
-
agent.addSkill(skill)
|
|
870
|
-
agent.removeSkill('name')
|
|
871
|
-
agent.listSkills()
|
|
872
|
-
await agent.loadSkillsDir('./skills')
|
|
873
|
-
agent.activateSkillsForPaths(['file.ts'])
|
|
873
|
+
agent.addSkill(skill); // registrar
|
|
874
|
+
agent.removeSkill('name'); // remover
|
|
875
|
+
agent.listSkills(); // listar
|
|
876
|
+
await agent.loadSkillsDir('./skills'); // carregar de diretorio
|
|
877
|
+
agent.activateSkillsForPaths(['file.ts']); // ativar condicionais
|
|
874
878
|
```
|
|
875
879
|
|
|
876
880
|
### Hierarquia de matching
|
|
@@ -951,7 +955,7 @@ await agent.connectMCP({
|
|
|
951
955
|
name: 'remote-sse',
|
|
952
956
|
transport: 'sse',
|
|
953
957
|
url: 'https://mcp.example.com/sse',
|
|
954
|
-
headers: {
|
|
958
|
+
headers: { Authorization: 'Bearer sk-...' },
|
|
955
959
|
});
|
|
956
960
|
|
|
957
961
|
// HTTP — Streamable HTTP (servers modernos, bidirecional)
|
|
@@ -959,7 +963,7 @@ await agent.connectMCP({
|
|
|
959
963
|
name: 'remote-http',
|
|
960
964
|
transport: 'http',
|
|
961
965
|
url: 'https://mcp.example.com/v1',
|
|
962
|
-
headers: {
|
|
966
|
+
headers: { Authorization: 'Bearer sk-...' },
|
|
963
967
|
});
|
|
964
968
|
```
|
|
965
969
|
|
|
@@ -967,10 +971,10 @@ await agent.connectMCP({
|
|
|
967
971
|
|
|
968
972
|
MCP servers que declaram `readOnlyHint` ou `destructiveHint` nas tools sao mapeados automaticamente para os flags do AgentTool:
|
|
969
973
|
|
|
970
|
-
| Anotacao MCP
|
|
971
|
-
|
|
972
|
-
| `readOnlyHint: true`
|
|
973
|
-
| `destructiveHint: true` | `isDestructive: true`
|
|
974
|
+
| Anotacao MCP | Flag AgentTool | Efeito |
|
|
975
|
+
| ----------------------- | ---------------------------------------------- | --------------------------------------- |
|
|
976
|
+
| `readOnlyHint: true` | `isReadOnly: true` + `isConcurrencySafe: true` | Tools executam em paralelo, sem warning |
|
|
977
|
+
| `destructiveHint: true` | `isDestructive: true` | Modelo recebe aviso de cautela |
|
|
974
978
|
|
|
975
979
|
### Instrucoes do server
|
|
976
980
|
|
|
@@ -1008,15 +1012,15 @@ const content = await agent.mcpAdapter.readResource('github', 'repo://owner/proj
|
|
|
1008
1012
|
```typescript
|
|
1009
1013
|
await agent.connectMCP({
|
|
1010
1014
|
name: 'my-server',
|
|
1011
|
-
transport: 'stdio',
|
|
1012
|
-
command: 'npx',
|
|
1015
|
+
transport: 'stdio', // 'stdio' | 'sse' | 'http'
|
|
1016
|
+
command: 'npx', // para stdio
|
|
1013
1017
|
args: ['-y', 'my-mcp-server'],
|
|
1014
1018
|
// url: 'https://...', // para sse/http
|
|
1015
1019
|
// headers: { ... }, // para sse/http
|
|
1016
|
-
timeout: 30_000,
|
|
1017
|
-
maxRetries: 3,
|
|
1018
|
-
healthCheckInterval: 60_000,
|
|
1019
|
-
isolateErrors: true,
|
|
1020
|
+
timeout: 30_000, // timeout por tool call (ms)
|
|
1021
|
+
maxRetries: 3, // tentativas de reconexao
|
|
1022
|
+
healthCheckInterval: 60_000, // health check periodico (ms)
|
|
1023
|
+
isolateErrors: true, // erros nao propagam (default: true)
|
|
1020
1024
|
});
|
|
1021
1025
|
```
|
|
1022
1026
|
|
|
@@ -1052,20 +1056,20 @@ await agent.chat('Crie uma issue no GitHub com labels bug e urgent');
|
|
|
1052
1056
|
```typescript
|
|
1053
1057
|
for await (const event of agent.stream('Build a TODO app')) {
|
|
1054
1058
|
switch (event.type) {
|
|
1055
|
-
case 'agent_start':
|
|
1056
|
-
case 'skill_activated':
|
|
1057
|
-
case 'text_delta':
|
|
1058
|
-
case 'text_done':
|
|
1059
|
-
case 'tool_call_start':
|
|
1060
|
-
case 'tool_call_end':
|
|
1061
|
-
case 'turn_start':
|
|
1062
|
-
case 'turn_end':
|
|
1063
|
-
case 'agent_end':
|
|
1064
|
-
case 'error':
|
|
1065
|
-
case 'warning':
|
|
1066
|
-
case 'compaction':
|
|
1067
|
-
case 'recovery':
|
|
1068
|
-
case 'model_fallback':
|
|
1059
|
+
case 'agent_start': // Inicio da execucao
|
|
1060
|
+
case 'skill_activated': // Skill ativada (event.skillName)
|
|
1061
|
+
case 'text_delta': // Chunk de texto (event.content)
|
|
1062
|
+
case 'text_done': // Texto completo
|
|
1063
|
+
case 'tool_call_start': // Tool chamada
|
|
1064
|
+
case 'tool_call_end': // Tool resultado
|
|
1065
|
+
case 'turn_start': // Inicio de iteracao do loop
|
|
1066
|
+
case 'turn_end': // Fim de iteracao
|
|
1067
|
+
case 'agent_end': // Fim (event.usage, event.duration)
|
|
1068
|
+
case 'error': // Erro (event.recoverable)
|
|
1069
|
+
case 'warning': // Aviso
|
|
1070
|
+
case 'compaction': // Contexto compactado
|
|
1071
|
+
case 'recovery': // Recovery automatico
|
|
1072
|
+
case 'model_fallback': // Fallback de modelo
|
|
1069
1073
|
}
|
|
1070
1074
|
}
|
|
1071
1075
|
```
|
|
@@ -1075,7 +1079,7 @@ for await (const event of agent.stream('Build a TODO app')) {
|
|
|
1075
1079
|
```typescript
|
|
1076
1080
|
const agent = Agent.create({
|
|
1077
1081
|
apiKey: 'sk-...',
|
|
1078
|
-
baseUrl: 'https://api.openai.com/v1',
|
|
1082
|
+
baseUrl: 'https://api.openai.com/v1', // optional — any OpenAI-compatible URL
|
|
1079
1083
|
model: 'gpt-4o',
|
|
1080
1084
|
systemPrompt: 'You are a helpful assistant.',
|
|
1081
1085
|
|
|
@@ -1088,9 +1092,9 @@ const agent = Agent.create({
|
|
|
1088
1092
|
|
|
1089
1093
|
// Skills
|
|
1090
1094
|
skills: {
|
|
1091
|
-
skillsDir: './.skills',
|
|
1092
|
-
maxActiveSkills: 3,
|
|
1093
|
-
modelDiscovery: true,
|
|
1095
|
+
skillsDir: './.skills', // Auto-load de skills do diretorio
|
|
1096
|
+
maxActiveSkills: 3, // Max skills simultaneas
|
|
1097
|
+
modelDiscovery: true, // Listar skills no contexto do modelo
|
|
1094
1098
|
},
|
|
1095
1099
|
|
|
1096
1100
|
// Memory
|
|
@@ -1098,8 +1102,8 @@ const agent = Agent.create({
|
|
|
1098
1102
|
enabled: true,
|
|
1099
1103
|
memoryDir: '.agentx/memory/',
|
|
1100
1104
|
extractionEnabled: true,
|
|
1101
|
-
samplingRate: 0.3,
|
|
1102
|
-
extractionInterval: 10,
|
|
1105
|
+
samplingRate: 0.3, // 30% de chance por turn
|
|
1106
|
+
extractionInterval: 10, // Forcar a cada 10 turns
|
|
1103
1107
|
},
|
|
1104
1108
|
|
|
1105
1109
|
// Knowledge
|
|
@@ -1112,7 +1116,7 @@ const agent = Agent.create({
|
|
|
1112
1116
|
|
|
1113
1117
|
// Comportamento
|
|
1114
1118
|
maxIterations: 10,
|
|
1115
|
-
onToolError: 'continue',
|
|
1119
|
+
onToolError: 'continue', // 'continue' | 'stop' | 'retry'
|
|
1116
1120
|
|
|
1117
1121
|
// Controle de custo
|
|
1118
1122
|
costPolicy: {
|
|
@@ -1151,14 +1155,14 @@ Interfaces: `ConversationStore`, `VectorStore` — implemente para usar qualquer
|
|
|
1151
1155
|
|
|
1152
1156
|
## Stack
|
|
1153
1157
|
|
|
1154
|
-
| Camada
|
|
1155
|
-
|
|
1156
|
-
| Linguagem
|
|
1157
|
-
| Runtime
|
|
1158
|
-
| Validacao
|
|
1159
|
-
| Persistencia | better-sqlite3 + SQLite
|
|
1160
|
-
| Tools schema | zod-to-json-schema
|
|
1161
|
-
| LLM
|
|
1158
|
+
| Camada | Tecnologia |
|
|
1159
|
+
| ------------ | --------------------------------------------- |
|
|
1160
|
+
| Linguagem | TypeScript 5.x |
|
|
1161
|
+
| Runtime | Node.js 22+ |
|
|
1162
|
+
| Validacao | Zod 3.x |
|
|
1163
|
+
| Persistencia | better-sqlite3 + SQLite |
|
|
1164
|
+
| Tools schema | zod-to-json-schema |
|
|
1165
|
+
| LLM | Qualquer API OpenAI-compatible (fetch nativo) |
|
|
1162
1166
|
|
|
1163
1167
|
**<= 4 dependencias diretas.** Zero frameworks de IA. Sem vendor lock-in.
|
|
1164
1168
|
|
package/dist/agent.d.ts
CHANGED
|
@@ -2,9 +2,11 @@ import type { AgentConfigInput, MCPConnectionConfigInput } from './config/config
|
|
|
2
2
|
import type { AgentEvent } from './contracts/entities/agent-event.js';
|
|
3
3
|
import type { AgentTool } from './contracts/entities/agent-tool.js';
|
|
4
4
|
import type { AgentSkill } from './contracts/entities/agent-skill.js';
|
|
5
|
+
import type { ChatMessage } from './contracts/entities/chat-message.js';
|
|
5
6
|
import type { KnowledgeDocument, RetrievedKnowledge } from './contracts/entities/knowledge.js';
|
|
6
7
|
import type { TokenUsage } from './contracts/entities/token-usage.js';
|
|
7
8
|
import type { ContentPart } from './contracts/entities/content-part.js';
|
|
9
|
+
import type { MemoryFile } from './memory/memory-types.js';
|
|
8
10
|
import { type MCPHealthStatus } from './tools/mcp-adapter.js';
|
|
9
11
|
import { type TurnEndHook } from './core/turn-end-hooks.js';
|
|
10
12
|
export interface ChatOptions {
|
|
@@ -72,19 +74,19 @@ export declare class Agent {
|
|
|
72
74
|
systemPrompt?: string;
|
|
73
75
|
model?: string;
|
|
74
76
|
/** Tools available to the forked agent. If omitted, fork has no tools. */
|
|
75
|
-
tools?:
|
|
77
|
+
tools?: AgentTool[];
|
|
76
78
|
/** If true, runs in background and returns a Promise (fire-and-forget). Default: false (blocking). */
|
|
77
79
|
background?: boolean;
|
|
78
80
|
}): Promise<string>;
|
|
79
81
|
/** Get effective context window for the current model. */
|
|
80
82
|
getEffectiveContextWindow(): number;
|
|
81
|
-
getHistory(threadId?: string):
|
|
83
|
+
getHistory(threadId?: string): ChatMessage[];
|
|
82
84
|
clearHistory(threadId?: string): void;
|
|
83
85
|
connectMCP(config: MCPConnectionConfigInput): Promise<void>;
|
|
84
86
|
disconnectMCP(name: string): Promise<void>;
|
|
85
87
|
getHealth(): MCPHealthStatus;
|
|
86
88
|
remember(content: string, type?: 'user' | 'feedback' | 'project' | 'reference', threadId?: string): Promise<string>;
|
|
87
|
-
recall(query: string, threadId?: string): Promise<
|
|
89
|
+
recall(query: string, threadId?: string): Promise<MemoryFile[]>;
|
|
88
90
|
ingestKnowledge(document: KnowledgeDocument): Promise<void>;
|
|
89
91
|
searchKnowledge(query: string): Promise<RetrievedKnowledge[]>;
|
|
90
92
|
getUsage(): TokenUsage;
|
package/dist/agent.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAElG,OAAO,KAAK,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|