@gugacoder/agentic-sdk 0.2.0

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 (129) hide show
  1. package/dist/agent.d.ts +2 -0
  2. package/dist/agent.js +463 -0
  3. package/dist/context/compaction.d.ts +27 -0
  4. package/dist/context/compaction.js +219 -0
  5. package/dist/context/models.d.ts +6 -0
  6. package/dist/context/models.js +41 -0
  7. package/dist/context/tokenizer.d.ts +5 -0
  8. package/dist/context/tokenizer.js +11 -0
  9. package/dist/context/usage.d.ts +11 -0
  10. package/dist/context/usage.js +49 -0
  11. package/dist/display-schemas.d.ts +1865 -0
  12. package/dist/display-schemas.js +219 -0
  13. package/dist/index.d.ts +38 -0
  14. package/dist/index.js +28 -0
  15. package/dist/middleware/logging.d.ts +2 -0
  16. package/dist/middleware/logging.js +32 -0
  17. package/dist/prompts/assembly.d.ts +13 -0
  18. package/dist/prompts/assembly.js +229 -0
  19. package/dist/providers.d.ts +19 -0
  20. package/dist/providers.js +44 -0
  21. package/dist/proxy.d.ts +2 -0
  22. package/dist/proxy.js +103 -0
  23. package/dist/schemas.d.ts +228 -0
  24. package/dist/schemas.js +51 -0
  25. package/dist/session.d.ts +7 -0
  26. package/dist/session.js +102 -0
  27. package/dist/structured.d.ts +18 -0
  28. package/dist/structured.js +38 -0
  29. package/dist/tool-repair.d.ts +21 -0
  30. package/dist/tool-repair.js +72 -0
  31. package/dist/tools/api-spec.d.ts +4 -0
  32. package/dist/tools/api-spec.js +123 -0
  33. package/dist/tools/apply-patch.d.ts +484 -0
  34. package/dist/tools/apply-patch.js +157 -0
  35. package/dist/tools/ask-user.d.ts +14 -0
  36. package/dist/tools/ask-user.js +27 -0
  37. package/dist/tools/bash.d.ts +550 -0
  38. package/dist/tools/bash.js +43 -0
  39. package/dist/tools/batch.d.ts +13 -0
  40. package/dist/tools/batch.js +84 -0
  41. package/dist/tools/brave-search.d.ts +6 -0
  42. package/dist/tools/brave-search.js +19 -0
  43. package/dist/tools/code-search.d.ts +20 -0
  44. package/dist/tools/code-search.js +42 -0
  45. package/dist/tools/diagnostics.d.ts +4 -0
  46. package/dist/tools/diagnostics.js +69 -0
  47. package/dist/tools/display.d.ts +483 -0
  48. package/dist/tools/display.js +77 -0
  49. package/dist/tools/edit.d.ts +682 -0
  50. package/dist/tools/edit.js +47 -0
  51. package/dist/tools/glob.d.ts +4 -0
  52. package/dist/tools/glob.js +42 -0
  53. package/dist/tools/grep.d.ts +6 -0
  54. package/dist/tools/grep.js +69 -0
  55. package/dist/tools/http-request.d.ts +7 -0
  56. package/dist/tools/http-request.js +98 -0
  57. package/dist/tools/index.d.ts +1611 -0
  58. package/dist/tools/index.js +46 -0
  59. package/dist/tools/job-tools.d.ts +24 -0
  60. package/dist/tools/job-tools.js +67 -0
  61. package/dist/tools/list-dir.d.ts +5 -0
  62. package/dist/tools/list-dir.js +79 -0
  63. package/dist/tools/multi-edit.d.ts +814 -0
  64. package/dist/tools/multi-edit.js +57 -0
  65. package/dist/tools/read.d.ts +5 -0
  66. package/dist/tools/read.js +33 -0
  67. package/dist/tools/task.d.ts +21 -0
  68. package/dist/tools/task.js +51 -0
  69. package/dist/tools/todo.d.ts +14 -0
  70. package/dist/tools/todo.js +60 -0
  71. package/dist/tools/web-fetch.d.ts +4 -0
  72. package/dist/tools/web-fetch.js +126 -0
  73. package/dist/tools/web-search.d.ts +22 -0
  74. package/dist/tools/web-search.js +48 -0
  75. package/dist/tools/write.d.ts +550 -0
  76. package/dist/tools/write.js +30 -0
  77. package/dist/types.d.ts +201 -0
  78. package/dist/types.js +1 -0
  79. package/package.json +43 -0
  80. package/src/agent.ts +520 -0
  81. package/src/context/compaction.ts +265 -0
  82. package/src/context/models.ts +42 -0
  83. package/src/context/tokenizer.ts +12 -0
  84. package/src/context/usage.ts +65 -0
  85. package/src/display-schemas.ts +276 -0
  86. package/src/index.ts +43 -0
  87. package/src/middleware/logging.ts +37 -0
  88. package/src/prompts/assembly.ts +263 -0
  89. package/src/prompts/identity.md +10 -0
  90. package/src/prompts/patterns.md +7 -0
  91. package/src/prompts/safety.md +7 -0
  92. package/src/prompts/tool-guide.md +9 -0
  93. package/src/prompts/tools/bash.md +7 -0
  94. package/src/prompts/tools/edit.md +7 -0
  95. package/src/prompts/tools/glob.md +7 -0
  96. package/src/prompts/tools/grep.md +7 -0
  97. package/src/prompts/tools/read.md +7 -0
  98. package/src/prompts/tools/write.md +7 -0
  99. package/src/providers.ts +58 -0
  100. package/src/proxy.ts +101 -0
  101. package/src/schemas.ts +58 -0
  102. package/src/session.ts +110 -0
  103. package/src/structured.ts +65 -0
  104. package/src/tool-repair.ts +92 -0
  105. package/src/tools/api-spec.ts +158 -0
  106. package/src/tools/apply-patch.ts +188 -0
  107. package/src/tools/ask-user.ts +40 -0
  108. package/src/tools/bash.ts +51 -0
  109. package/src/tools/batch.ts +103 -0
  110. package/src/tools/brave-search.ts +24 -0
  111. package/src/tools/code-search.ts +69 -0
  112. package/src/tools/diagnostics.ts +93 -0
  113. package/src/tools/display.ts +105 -0
  114. package/src/tools/edit.ts +55 -0
  115. package/src/tools/glob.ts +46 -0
  116. package/src/tools/grep.ts +68 -0
  117. package/src/tools/http-request.ts +103 -0
  118. package/src/tools/index.ts +48 -0
  119. package/src/tools/job-tools.ts +84 -0
  120. package/src/tools/list-dir.ts +102 -0
  121. package/src/tools/multi-edit.ts +65 -0
  122. package/src/tools/read.ts +40 -0
  123. package/src/tools/task.ts +71 -0
  124. package/src/tools/todo.ts +82 -0
  125. package/src/tools/web-fetch.ts +155 -0
  126. package/src/tools/web-search.ts +75 -0
  127. package/src/tools/write.ts +34 -0
  128. package/src/types.ts +145 -0
  129. package/tsconfig.json +17 -0
@@ -0,0 +1,75 @@
1
+ import { tool } from "ai";
2
+ import { z } from "zod";
3
+
4
+ const MAX_OUTPUT = 50_000;
5
+
6
+ /**
7
+ * A single search result returned by a WebSearch provider.
8
+ */
9
+ export interface WebSearchResult {
10
+ title: string;
11
+ url: string;
12
+ snippet: string;
13
+ }
14
+
15
+ /**
16
+ * Callback type for pluggable web search providers.
17
+ * Implementors receive the query and desired number of results,
18
+ * and return an array of WebSearchResult.
19
+ */
20
+ export type WebSearchProvider = (
21
+ query: string,
22
+ numResults: number
23
+ ) => Promise<WebSearchResult[]>;
24
+
25
+ /**
26
+ * Factory that creates the WebSearch tool with an injected search provider.
27
+ * If no provider is given, returns a tool that explains no provider is configured.
28
+ */
29
+ export function createWebSearchTool(searchProvider?: WebSearchProvider) {
30
+ return tool({
31
+ description:
32
+ "Search the web and return formatted results with title, URL, and snippet. Use this to find up-to-date information, documentation, or answers to questions.",
33
+ inputSchema: z.object({
34
+ query: z.string().describe("The search query"),
35
+ numResults: z
36
+ .number()
37
+ .int()
38
+ .min(1)
39
+ .max(20)
40
+ .optional()
41
+ .default(5)
42
+ .describe("Number of results to return (default: 5)"),
43
+ }),
44
+ execute: async ({ query, numResults }) => {
45
+ if (!searchProvider) {
46
+ return "WebSearch provider not configured. The consuming application must provide an onWebSearch callback in AiAgentOptions to enable web search.";
47
+ }
48
+
49
+ try {
50
+ const results = await searchProvider(query, numResults);
51
+
52
+ if (results.length === 0) {
53
+ return `No results found for: "${query}"`;
54
+ }
55
+
56
+ let output = `# Search results for: "${query}"\n\n`;
57
+
58
+ for (let i = 0; i < results.length; i++) {
59
+ const r = results[i];
60
+ output += `## ${i + 1}. ${r.title}\n`;
61
+ output += `**URL:** ${r.url}\n`;
62
+ output += `${r.snippet}\n\n`;
63
+ }
64
+
65
+ if (output.length > MAX_OUTPUT) {
66
+ output = output.slice(0, MAX_OUTPUT) + "\n...[truncated at 50KB]";
67
+ }
68
+
69
+ return output.trim();
70
+ } catch (err: any) {
71
+ return `Error searching web: ${err.message}`;
72
+ }
73
+ },
74
+ });
75
+ }
@@ -0,0 +1,34 @@
1
+ import { tool } from "ai";
2
+ import { z } from "zod";
3
+ import { writeFile, mkdir } from "node:fs/promises";
4
+ import { dirname } from "node:path";
5
+
6
+ export function createWriteTool(opts?: { autoApprove?: boolean }) {
7
+ const baseTool = tool({
8
+ description:
9
+ "Writes content to a file. Creates parent directories if needed. Overwrites existing files.",
10
+ inputSchema: z.object({
11
+ file_path: z.string().describe("Absolute path to the file to write"),
12
+ content: z.string().describe("The content to write to the file"),
13
+ }),
14
+ execute: async ({ file_path, content }) => {
15
+ try {
16
+ await mkdir(dirname(file_path), { recursive: true });
17
+ await writeFile(file_path, content, "utf-8");
18
+ return `File written successfully: ${file_path}`;
19
+ } catch (err: any) {
20
+ return `Error writing file: ${err.message}`;
21
+ }
22
+ },
23
+ });
24
+
25
+ if (opts?.autoApprove === false) {
26
+ return Object.assign(baseTool, {
27
+ needsApproval: async () => true as const,
28
+ });
29
+ }
30
+
31
+ return baseTool;
32
+ }
33
+
34
+ export const writeTool = createWriteTool();
package/src/types.ts ADDED
@@ -0,0 +1,145 @@
1
+ import type { LanguageModelMiddleware } from "ai";
2
+
3
+ export interface McpServerConfig {
4
+ name: string;
5
+ transport:
6
+ | { type: "http"; url: string; headers?: Record<string, string> }
7
+ | { type: "stdio"; command: string; args?: string[] };
8
+ }
9
+
10
+ export type AiAgentEvent =
11
+ | { type: "init"; sessionId: string }
12
+ | { type: "mcp_connected"; servers: string[] }
13
+ | { type: "text"; content: string }
14
+ | { type: "reasoning"; content: string }
15
+ | { type: "tool-call"; toolCallId: string; toolName: string; args: Record<string, unknown> }
16
+ | { type: "tool-result"; toolCallId: string; toolName: string; result: unknown }
17
+ | { type: "result"; content: string }
18
+ | { type: "usage"; usage: AiUsageData }
19
+ | { type: "ask_user"; question: string; options?: string[] }
20
+ | { type: "todo_update"; todos: AiTodoItem[] }
21
+ | { type: "context_status"; context: ContextUsage & { compacted: boolean } }
22
+ | { type: "step_finish"; step: number; toolCalls: string[]; finishReason: string }
23
+ | { type: "mcp_error"; server: string; error: string };
24
+
25
+ export interface AiTodoItem {
26
+ id: string;
27
+ content: string;
28
+ status: "pending" | "in_progress" | "completed";
29
+ priority: "high" | "medium" | "low";
30
+ }
31
+
32
+ export interface AiUsageData {
33
+ inputTokens: number;
34
+ outputTokens: number;
35
+ cacheReadInputTokens: number;
36
+ cacheCreationInputTokens: number;
37
+ totalCostUsd: number;
38
+ numTurns: number;
39
+ durationMs: number;
40
+ durationApiMs: number;
41
+ stopReason: string;
42
+ /** Latencia ate o primeiro token (ms). Disponivel apenas com telemetria. */
43
+ timeToFirstTokenMs?: number;
44
+ /** Breakdown de uso por step. Disponivel apenas com telemetria. */
45
+ steps?: Array<{
46
+ stepNumber: number;
47
+ toolCalls: string[];
48
+ inputTokens: number;
49
+ outputTokens: number;
50
+ durationMs: number;
51
+ }>;
52
+ }
53
+
54
+ export interface ContextUsage {
55
+ model: string;
56
+ contextWindow: number;
57
+ systemPrompt: number;
58
+ toolDefinitions: number;
59
+ messages: number;
60
+ used: number;
61
+ free: number;
62
+ usagePercent: number;
63
+ compactThreshold: number;
64
+ willCompact: boolean;
65
+ }
66
+
67
+ export interface PrepareStepContext {
68
+ /** Current step number (0-indexed) */
69
+ stepNumber: number;
70
+ /** Total number of steps executed so far */
71
+ stepCount: number;
72
+ /** Tool calls from the previous step (empty on first step) */
73
+ previousToolCalls: string[];
74
+ }
75
+
76
+ export interface PrepareStepResult {
77
+ /** Switch model for this step */
78
+ model?: string;
79
+ /** Filter available tools for this step (tool names) */
80
+ activeTools?: string[];
81
+ /** Force tool choice: "auto" | "required" | "none" | specific tool */
82
+ toolChoice?: "auto" | "required" | "none" | { type: "tool"; toolName: string };
83
+ }
84
+
85
+ export interface AiTelemetryOptions {
86
+ /** Habilita tracing OpenTelemetry. Default: false */
87
+ enabled: boolean;
88
+ /** Identificador da funcao nos spans (ex: "ai-agent", "heartbeat") */
89
+ functionId?: string;
90
+ /** Metadata adicional propagada nos spans */
91
+ metadata?: Record<string, string>;
92
+ }
93
+
94
+ export interface AiAgentOptions {
95
+ model: string;
96
+ apiKey: string;
97
+ /** Provider name (e.g. "openrouter", "groq"). Default: "openrouter" */
98
+ provider?: string;
99
+ /** Additional provider configs by name (e.g. { groq: { baseURL, apiKey } }) */
100
+ providers?: Record<string, { baseURL: string; apiKey: string }>;
101
+ sessionId?: string;
102
+ sessionDir?: string;
103
+ maxSteps?: number;
104
+ system?: string | { append: string };
105
+ /** Working directory for project context discovery (AGENTS.md/CLAUDE.md). Defaults to process.cwd(). */
106
+ cwd?: string;
107
+ /** Callback invoked when the agent uses the AskUser tool. Return the user's answer. */
108
+ onAskUser?: (question: string, options?: string[]) => Promise<string>;
109
+ /** Callback invoked when the agent uses the WebSearch tool. Return search results. */
110
+ onWebSearch?: (query: string, numResults: number) => Promise<Array<{ title: string; url: string; snippet: string }>>;
111
+ /** Callback invoked when the agent uses the CodeSearch tool. Return code examples and documentation. */
112
+ onCodeSearch?: (query: string) => Promise<Array<{ title: string; url: string; content: string }>>;
113
+ /** MCP servers to connect to. Tools from these servers are merged with codingTools. */
114
+ mcpServers?: McpServerConfig[];
115
+ /** Extra Vercel AI SDK tools to merge. Useful for in-process tools that aren't MCP servers. */
116
+ tools?: Record<string, any>;
117
+ /** Override context window size (tokens) for the model. Takes precedence over the built-in model map. */
118
+ contextWindow?: number;
119
+ /** Usage percentage (0-1) at which automatic compaction triggers. Default: 0.65 */
120
+ compactThreshold?: number;
121
+ /** Disable automatic context compaction. Default: false */
122
+ disableCompaction?: boolean;
123
+ /** Custom stop condition. Complements maxSteps — whichever triggers first. */
124
+ stopWhen?: (event: { type: "step_finish"; step: number; toolCalls: string[]; finishReason: string }) => boolean;
125
+ /** Callback executed before each step. Returns overrides for model, tools, toolChoice. */
126
+ prepareStep?: (context: PrepareStepContext) => PrepareStepResult | undefined;
127
+ /** Middleware pipeline applied to the model. Executed in array order. */
128
+ middleware?: LanguageModelMiddleware[];
129
+ /** Configuracao de telemetria OpenTelemetry */
130
+ telemetry?: AiTelemetryOptions;
131
+ /** Aliases de modelo customizados: nome amigavel → model ID completo (ex: { fast: "anthropic/claude-haiku-4.5" }) */
132
+ modelAliases?: Record<string, string>;
133
+ /** Habilita reparo automatico de tool calls malformadas. Default: true */
134
+ repairToolCalls?: boolean;
135
+ /** Maximo de tentativas de reparo por tool call. Default: 1 */
136
+ maxRepairAttempts?: number;
137
+ /** Habilita reasoning (extended thinking) do modelo. true usa budget de 5000 tokens; objeto permite especificar budgetTokens. */
138
+ reasoning?: boolean | { budgetTokens: number };
139
+ /** Metadados do backbone anexados como _meta na user message */
140
+ messageMeta?: Record<string, unknown>;
141
+ /** Content parts para user message (substitui prompt como content quando presente) */
142
+ contentParts?: unknown[];
143
+ /** Desabilita display tools. Default: false (display tools habilitadas) */
144
+ disableDisplayTools?: boolean;
145
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,17 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "lib": ["ES2023"],
5
+ "module": "ESNext",
6
+ "moduleResolution": "bundler",
7
+ "esModuleInterop": true,
8
+ "strict": true,
9
+ "skipLibCheck": true,
10
+ "rootDir": "src",
11
+ "outDir": "dist",
12
+ "declaration": true,
13
+ "resolveJsonModule": true,
14
+ "forceConsistentCasingInFileNames": true
15
+ },
16
+ "include": ["src"]
17
+ }