agentx-sdk 0.6.1 → 0.6.3

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 (153) hide show
  1. package/README.md +164 -160
  2. package/dist/agent.d.ts +5 -3
  3. package/dist/agent.d.ts.map +1 -1
  4. package/dist/agent.js +63 -30
  5. package/dist/agent.js.map +1 -1
  6. package/dist/config/config.d.ts.map +1 -1
  7. package/dist/config/config.js +8 -4
  8. package/dist/config/config.js.map +1 -1
  9. package/dist/contracts/entities/agent-event.d.ts.map +1 -1
  10. package/dist/contracts/entities/index.d.ts +1 -1
  11. package/dist/contracts/entities/index.d.ts.map +1 -1
  12. package/dist/core/compaction/autocompact.d.ts.map +1 -1
  13. package/dist/core/compaction/autocompact.js +9 -12
  14. package/dist/core/compaction/autocompact.js.map +1 -1
  15. package/dist/core/compaction/microcompact.js +1 -1
  16. package/dist/core/compaction/microcompact.js.map +1 -1
  17. package/dist/core/compaction/snip-compact.d.ts.map +1 -1
  18. package/dist/core/compaction/snip-compact.js.map +1 -1
  19. package/dist/core/compaction/tool-result-budget.js.map +1 -1
  20. package/dist/core/context-analysis.js.map +1 -1
  21. package/dist/core/context-builder.d.ts.map +1 -1
  22. package/dist/core/context-builder.js +8 -5
  23. package/dist/core/context-builder.js.map +1 -1
  24. package/dist/core/conversation-manager.d.ts +1 -1
  25. package/dist/core/conversation-manager.d.ts.map +1 -1
  26. package/dist/core/conversation-manager.js +4 -2
  27. package/dist/core/conversation-manager.js.map +1 -1
  28. package/dist/core/execution-context.d.ts.map +1 -1
  29. package/dist/core/execution-context.js.map +1 -1
  30. package/dist/core/message-normalize.js +1 -1
  31. package/dist/core/message-normalize.js.map +1 -1
  32. package/dist/core/prompt-builders.d.ts.map +1 -1
  33. package/dist/core/prompt-builders.js +2 -2
  34. package/dist/core/prompt-builders.js.map +1 -1
  35. package/dist/core/react-loop.d.ts.map +1 -1
  36. package/dist/core/react-loop.js +79 -23
  37. package/dist/core/react-loop.js.map +1 -1
  38. package/dist/core/stream-emitter.js +17 -18
  39. package/dist/core/stream-emitter.js.map +1 -1
  40. package/dist/core/streaming-tool-executor.d.ts.map +1 -1
  41. package/dist/core/streaming-tool-executor.js +18 -8
  42. package/dist/core/streaming-tool-executor.js.map +1 -1
  43. package/dist/index.d.ts +3 -3
  44. package/dist/index.d.ts.map +1 -1
  45. package/dist/index.js.map +1 -1
  46. package/dist/knowledge/chunking.js +1 -1
  47. package/dist/knowledge/chunking.js.map +1 -1
  48. package/dist/knowledge/embedding-service.d.ts.map +1 -1
  49. package/dist/knowledge/embedding-service.js +5 -2
  50. package/dist/knowledge/embedding-service.js.map +1 -1
  51. package/dist/knowledge/knowledge-manager.d.ts.map +1 -1
  52. package/dist/knowledge/knowledge-manager.js +3 -2
  53. package/dist/knowledge/knowledge-manager.js.map +1 -1
  54. package/dist/knowledge/sqlite-vector-store.d.ts.map +1 -1
  55. package/dist/knowledge/sqlite-vector-store.js +12 -6
  56. package/dist/knowledge/sqlite-vector-store.js.map +1 -1
  57. package/dist/llm/errors.d.ts.map +1 -1
  58. package/dist/llm/errors.js +4 -2
  59. package/dist/llm/errors.js.map +1 -1
  60. package/dist/llm/llm-client.d.ts.map +1 -1
  61. package/dist/llm/llm-client.js +31 -13
  62. package/dist/llm/llm-client.js.map +1 -1
  63. package/dist/memory/file-memory-system.d.ts.map +1 -1
  64. package/dist/memory/file-memory-system.js +34 -17
  65. package/dist/memory/file-memory-system.js.map +1 -1
  66. package/dist/memory/memory-extractor.d.ts +9 -9
  67. package/dist/memory/memory-extractor.d.ts.map +1 -1
  68. package/dist/memory/memory-extractor.js +4 -2
  69. package/dist/memory/memory-extractor.js.map +1 -1
  70. package/dist/memory/memory-paths.d.ts.map +1 -1
  71. package/dist/memory/memory-paths.js +11 -4
  72. package/dist/memory/memory-paths.js.map +1 -1
  73. package/dist/memory/memory-prompts.d.ts.map +1 -1
  74. package/dist/memory/memory-prompts.js +1 -1
  75. package/dist/memory/memory-prompts.js.map +1 -1
  76. package/dist/memory/memory-relevance.d.ts +2 -1
  77. package/dist/memory/memory-relevance.d.ts.map +1 -1
  78. package/dist/memory/memory-relevance.js +1 -1
  79. package/dist/memory/memory-relevance.js.map +1 -1
  80. package/dist/memory/memory-scanner.d.ts.map +1 -1
  81. package/dist/memory/memory-scanner.js +7 -6
  82. package/dist/memory/memory-scanner.js.map +1 -1
  83. package/dist/memory/memory-tools.d.ts.map +1 -1
  84. package/dist/memory/memory-tools.js +16 -6
  85. package/dist/memory/memory-tools.js.map +1 -1
  86. package/dist/memory/memory-types.js +1 -1
  87. package/dist/memory/memory-types.js.map +1 -1
  88. package/dist/skills/skill-glob.js +1 -1
  89. package/dist/skills/skill-glob.js.map +1 -1
  90. package/dist/skills/skill-loader.d.ts.map +1 -1
  91. package/dist/skills/skill-loader.js +29 -25
  92. package/dist/skills/skill-loader.js.map +1 -1
  93. package/dist/skills/skill-manager.d.ts.map +1 -1
  94. package/dist/skills/skill-manager.js +18 -17
  95. package/dist/skills/skill-manager.js.map +1 -1
  96. package/dist/storage/sqlite-conversation-store.d.ts.map +1 -1
  97. package/dist/storage/sqlite-conversation-store.js +15 -7
  98. package/dist/storage/sqlite-conversation-store.js.map +1 -1
  99. package/dist/storage/sqlite-database.js +3 -1
  100. package/dist/storage/sqlite-database.js.map +1 -1
  101. package/dist/tools/builtin/ask-user.d.ts.map +1 -1
  102. package/dist/tools/builtin/ask-user.js +4 -1
  103. package/dist/tools/builtin/ask-user.js.map +1 -1
  104. package/dist/tools/builtin/bash.d.ts.map +1 -1
  105. package/dist/tools/builtin/bash.js +5 -3
  106. package/dist/tools/builtin/bash.js.map +1 -1
  107. package/dist/tools/builtin/file-edit.d.ts.map +1 -1
  108. package/dist/tools/builtin/file-edit.js +16 -4
  109. package/dist/tools/builtin/file-edit.js.map +1 -1
  110. package/dist/tools/builtin/file-read.d.ts.map +1 -1
  111. package/dist/tools/builtin/file-read.js +9 -5
  112. package/dist/tools/builtin/file-read.js.map +1 -1
  113. package/dist/tools/builtin/file-write.d.ts.map +1 -1
  114. package/dist/tools/builtin/file-write.js +4 -1
  115. package/dist/tools/builtin/file-write.js.map +1 -1
  116. package/dist/tools/builtin/glob.d.ts.map +1 -1
  117. package/dist/tools/builtin/glob.js +9 -4
  118. package/dist/tools/builtin/glob.js.map +1 -1
  119. package/dist/tools/builtin/grep.d.ts.map +1 -1
  120. package/dist/tools/builtin/grep.js +6 -2
  121. package/dist/tools/builtin/grep.js.map +1 -1
  122. package/dist/tools/builtin/path-guard.d.ts.map +1 -1
  123. package/dist/tools/builtin/path-guard.js.map +1 -1
  124. package/dist/tools/builtin/web-fetch.d.ts.map +1 -1
  125. package/dist/tools/builtin/web-fetch.js +16 -8
  126. package/dist/tools/builtin/web-fetch.js.map +1 -1
  127. package/dist/tools/json-schema-to-zod.d.ts +2 -2
  128. package/dist/tools/json-schema-to-zod.d.ts.map +1 -1
  129. package/dist/tools/json-schema-to-zod.js +3 -5
  130. package/dist/tools/json-schema-to-zod.js.map +1 -1
  131. package/dist/tools/mcp-adapter.d.ts +2 -2
  132. package/dist/tools/mcp-adapter.d.ts.map +1 -1
  133. package/dist/tools/mcp-adapter.js +40 -24
  134. package/dist/tools/mcp-adapter.js.map +1 -1
  135. package/dist/tools/skill-tool.d.ts.map +1 -1
  136. package/dist/tools/skill-tool.js +12 -13
  137. package/dist/tools/skill-tool.js.map +1 -1
  138. package/dist/tools/sql/sql-tool-factory.d.ts.map +1 -1
  139. package/dist/tools/sql/sql-tool-factory.js +8 -6
  140. package/dist/tools/sql/sql-tool-factory.js.map +1 -1
  141. package/dist/tools/tool-executor.d.ts +3 -3
  142. package/dist/tools/tool-executor.d.ts.map +1 -1
  143. package/dist/tools/tool-executor.js +17 -8
  144. package/dist/tools/tool-executor.js.map +1 -1
  145. package/dist/utils/logger.d.ts.map +1 -1
  146. package/dist/utils/logger.js.map +1 -1
  147. package/dist/utils/model-context.js.map +1 -1
  148. package/dist/utils/retry.d.ts.map +1 -1
  149. package/dist/utils/retry.js +5 -2
  150. package/dist/utils/retry.js.map +1 -1
  151. package/dist/utils/token-counter.d.ts.map +1 -1
  152. package/dist/utils/token-counter.js.map +1 -1
  153. 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(builtinTools.askUser({
82
- onAsk: async (question, options) => {
83
- // Your logic (readline, UI, API, etc.)
84
- return readline.question(question);
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 | Name | Description |
93
- |------|------|-------------|
94
- | `builtinTools.fileRead()` | Read | Read files with line numbers and offset/limit |
95
- | `builtinTools.fileWrite()` | Write | Write/create files (creates dirs automatically) |
96
- | `builtinTools.fileEdit()` | Edit | Exact find/replace in files |
97
- | `builtinTools.glob()` | Glob | Search files by pattern (`**/*.ts`) |
98
- | `builtinTools.grep()` | Grep | Search content via regex in files |
99
- | `builtinTools.bash()` | Bash | Execute shell commands with timeout |
100
- | `builtinTools.webFetch()` | WebFetch | Fetch content from URL (HTML → text) |
101
- | `builtinTools.askUser()` | AskUser | Ask the user a question (callback pattern) |
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 | Type | Description |
269
- |-------|------|-------------|
270
- | `name` | string | Unique skill name |
271
- | `description` | string | Short description |
272
- | `whenToUse` | string | Usage scenarios (for model discovery) |
273
- | `triggerPrefix` | string | Activation prefix (e.g. `/review`) |
274
- | `aliases` | string[] | Alternative names |
275
- | `argNames` | string[] | Argument names for substitution |
276
- | `allowedTools` | string[] | Tools the skill can use |
277
- | `model` | string | Model override |
278
- | `context` | `inline` \| `fork` | Execution mode |
279
- | `paths` | string[] | Globs for conditional activation |
280
- | `effort` | number | Computational effort hint (1-10) |
281
- | `exclusive` | boolean | Blocks other skills |
282
- | `priority` | number | Priority (higher wins) |
283
- | `modelInvocable` | boolean | Whether the model can invoke (default: true) |
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) // register
289
- agent.removeSkill('name') // remove
290
- agent.listSkills() // list
291
- await agent.loadSkillsDir('./skills') // load from directory
292
- agent.activateSkillsForPaths(['file.ts']) // activate conditionals
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: { 'Authorization': 'Bearer sk-...' },
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: { 'Authorization': 'Bearer sk-...' },
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 | AgentTool Flag | Effect |
390
- |---|---|---|
391
- | `readOnlyHint: true` | `isReadOnly: true` + `isConcurrencySafe: true` | Tools run in parallel, no warning |
392
- | `destructiveHint: true` | `isDestructive: true` | Model receives caution warning |
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', // 'stdio' | 'sse' | 'http'
431
- command: 'npx', // for stdio
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, // timeout per tool call (ms)
436
- maxRetries: 3, // reconnection attempts
437
- healthCheckInterval: 60_000, // periodic health check (ms)
438
- isolateErrors: true, // errors don't propagate (default: 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': // Execution started
475
- case 'skill_activated': // Skill activated (event.skillName)
476
- case 'text_delta': // Text chunk (event.content)
477
- case 'text_done': // Full text complete
478
- case 'tool_call_start': // Tool called
479
- case 'tool_call_end': // Tool result
480
- case 'turn_start': // Loop iteration started
481
- case 'turn_end': // Loop iteration ended
482
- case 'agent_end': // Finished (event.usage, event.duration)
483
- case 'error': // Error (event.recoverable)
484
- case 'warning': // Warning
485
- case 'compaction': // Context compacted
486
- case 'recovery': // Automatic recovery
487
- case 'model_fallback': // 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', // optional — any OpenAI-compatible URL
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', // Auto-load skills from directory
511
- maxActiveSkills: 3, // Max simultaneous skills
512
- modelDiscovery: true, // List skills for model context
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, // 30% chance per turn
521
- extractionInterval: 10, // Force every 10 turns
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', // 'continue' | 'stop' | 'retry'
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 | Technology |
574
- |-------|-----------|
575
- | Language | TypeScript 5.x |
576
- | Runtime | Node.js 22+ |
577
- | Validation | Zod 3.x |
578
- | Persistence | better-sqlite3 + SQLite |
579
- | Tools schema | zod-to-json-schema |
580
- | LLM | Any OpenAI-compatible API (native fetch) |
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(builtinTools.askUser({
663
- onAsk: async (question, options) => {
664
- // Sua logica (readline, UI, API, etc.)
665
- return readline.question(question);
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 | Nome | Descricao |
674
- |------|------|-----------|
675
- | `builtinTools.fileRead()` | Read | Ler arquivos com line numbers e offset/limit |
676
- | `builtinTools.fileWrite()` | Write | Escrever/criar arquivos (cria dirs automaticamente) |
677
- | `builtinTools.fileEdit()` | Edit | Find/replace exato em arquivos |
678
- | `builtinTools.glob()` | Glob | Buscar arquivos por pattern (`**/*.ts`) |
679
- | `builtinTools.grep()` | Grep | Buscar conteudo via regex em arquivos |
680
- | `builtinTools.bash()` | Bash | Executar comandos shell com timeout |
681
- | `builtinTools.webFetch()` | WebFetch | Buscar conteudo de URL (HTML → texto) |
682
- | `builtinTools.askUser()` | AskUser | Perguntar ao usuario (callback pattern) |
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 | Tipo | Descricao |
850
- |-------|------|-----------|
851
- | `name` | string | Nome unico da skill |
852
- | `description` | string | Descricao curta |
853
- | `whenToUse` | string | Cenarios de uso (para model discovery) |
854
- | `triggerPrefix` | string | Prefixo para ativacao (ex: `/review`) |
855
- | `aliases` | string[] | Nomes alternativos |
856
- | `argNames` | string[] | Nomes dos argumentos para substituicao |
857
- | `allowedTools` | string[] | Tools que a skill pode usar |
858
- | `model` | string | Override de modelo |
859
- | `context` | `inline` \| `fork` | Modo de execucao |
860
- | `paths` | string[] | Globs para ativacao condicional |
861
- | `effort` | number | Hint de esforco computacional (1-10) |
862
- | `exclusive` | boolean | Bloqueia outras skills |
863
- | `priority` | number | Prioridade (maior vence) |
864
- | `modelInvocable` | boolean | Se o modelo pode invocar (default: true) |
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) // registrar
870
- agent.removeSkill('name') // remover
871
- agent.listSkills() // listar
872
- await agent.loadSkillsDir('./skills') // carregar de diretorio
873
- agent.activateSkillsForPaths(['file.ts']) // ativar condicionais
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: { 'Authorization': 'Bearer sk-...' },
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: { 'Authorization': 'Bearer sk-...' },
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 | Flag AgentTool | Efeito |
971
- |---|---|---|
972
- | `readOnlyHint: true` | `isReadOnly: true` + `isConcurrencySafe: true` | Tools executam em paralelo, sem warning |
973
- | `destructiveHint: true` | `isDestructive: true` | Modelo recebe aviso de cautela |
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', // 'stdio' | 'sse' | 'http'
1012
- command: 'npx', // para stdio
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, // timeout por tool call (ms)
1017
- maxRetries: 3, // tentativas de reconexao
1018
- healthCheckInterval: 60_000, // health check periodico (ms)
1019
- isolateErrors: true, // erros nao propagam (default: 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': // Inicio da execucao
1056
- case 'skill_activated': // Skill ativada (event.skillName)
1057
- case 'text_delta': // Chunk de texto (event.content)
1058
- case 'text_done': // Texto completo
1059
- case 'tool_call_start': // Tool chamada
1060
- case 'tool_call_end': // Tool resultado
1061
- case 'turn_start': // Inicio de iteracao do loop
1062
- case 'turn_end': // Fim de iteracao
1063
- case 'agent_end': // Fim (event.usage, event.duration)
1064
- case 'error': // Erro (event.recoverable)
1065
- case 'warning': // Aviso
1066
- case 'compaction': // Contexto compactado
1067
- case 'recovery': // Recovery automatico
1068
- case 'model_fallback': // Fallback de modelo
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', // optional — any OpenAI-compatible URL
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', // Auto-load de skills do diretorio
1092
- maxActiveSkills: 3, // Max skills simultaneas
1093
- modelDiscovery: true, // Listar skills no contexto do modelo
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, // 30% de chance por turn
1102
- extractionInterval: 10, // Forcar a cada 10 turns
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', // 'continue' | 'stop' | 'retry'
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 | Tecnologia |
1155
- |--------|-----------|
1156
- | Linguagem | TypeScript 5.x |
1157
- | Runtime | Node.js 22+ |
1158
- | Validacao | Zod 3.x |
1159
- | Persistencia | better-sqlite3 + SQLite |
1160
- | Tools schema | zod-to-json-schema |
1161
- | LLM | Qualquer API OpenAI-compatible (fetch nativo) |
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?: import('./contracts/entities/agent-tool.js').AgentTool[];
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): import('./contracts/entities/chat-message.js').ChatMessage[];
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<import('./memory/memory-types.js').MemoryFile[]>;
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;
@@ -1 +1 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}