@curie-agent/tools 0.3.0 → 0.3.4

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.
@@ -5,7 +5,7 @@
5
5
  */
6
6
  export declare const todoTool: import("./tool.js").Tool & {
7
7
  validate: (raw: Record<string, unknown>) => {
8
- action: "list" | "add" | "edit" | "remove" | "complete" | "cancel" | "start" | "reorder";
8
+ action: "edit" | "list" | "add" | "remove" | "complete" | "cancel" | "start" | "reorder";
9
9
  scope: "personal" | "project";
10
10
  id?: string | undefined;
11
11
  title?: string | undefined;
@@ -25,7 +25,15 @@ export interface ToolContext {
25
25
  export declare function expandPath(p: string): string;
26
26
  /** Set the global cwd used by all tools when not provided at call time. */
27
27
  export declare function setGlobalCwd(cwd: string): void;
28
- export declare function createTool<Schema extends z.ZodObject<z.ZodRawShape>>(name: string, description: string, schema: Schema, execute: (input: z.infer<Schema>, ctx: ToolContext) => Promise<ToolResult>, cwd?: string): Tool & {
28
+ export interface CreateToolOptions {
29
+ /**
30
+ * Per-tool input key aliases (e.g. { path: 'file_path' }), resolved before
31
+ * the global KEY_ALIASES table. Lets file tools accept `path`/`filename`
32
+ * without breaking tools where `path` is a legitimate parameter.
33
+ */
34
+ aliases?: Record<string, string>;
35
+ }
36
+ export declare function createTool<Schema extends z.ZodObject<z.ZodRawShape>>(name: string, description: string, schema: Schema, execute: (input: z.infer<Schema>, ctx: ToolContext) => Promise<ToolResult>, cwd?: string, options?: CreateToolOptions): Tool & {
29
37
  validate: (raw: Record<string, unknown>) => z.infer<Schema>;
30
38
  };
31
39
  //# sourceMappingURL=tool.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACpC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH;AAED,MAAM,WAAW,IAAI;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;CACzG;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,aAAa,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAK5C;AAID,2EAA2E;AAC3E,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE9C;AAmCD,wBAAgB,UAAU,CAAC,MAAM,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,EAClE,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC,UAAU,CAAC,EAC1E,GAAG,CAAC,EAAE,MAAM,GACX,IAAI,GAAG;IAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;CAAE,CAqCxE"}
1
+ {"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACpC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH;AAED,MAAM,WAAW,IAAI;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;CACzG;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,aAAa,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAK5C;AAID,2EAA2E;AAC3E,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE9C;AA2BD,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AA0DD,wBAAgB,UAAU,CAAC,MAAM,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,EAClE,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC,UAAU,CAAC,EAC1E,GAAG,CAAC,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,iBAAiB,GAC1B,IAAI,GAAG;IAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;CAAE,CA0DxE"}
package/dist/src/tool.js CHANGED
@@ -29,22 +29,66 @@ const KEY_ALIASES = {
29
29
  oldString: 'old_string',
30
30
  newString: 'new_string',
31
31
  replaceAll: 'replace_all',
32
- // Write
33
- content: 'content', // already matched
34
- // Glob
35
- pattern: 'pattern', // already matched
36
- // Grep
37
- regex: 'regex', // already matched
38
- // Bash
39
- command: 'command', // already matched
40
32
  // Reminder / Task
41
33
  scheduledAt: 'scheduled_at',
42
34
  // WebSearch
43
35
  blockedDomains: 'blocked_domains',
44
36
  allowedDomains: 'allowed_domains',
45
37
  };
46
- export function createTool(name, description, schema, execute, cwd) {
38
+ function camelToSnake(key) {
39
+ return key.replace(/[A-Z]/g, (c) => '_' + c.toLowerCase());
40
+ }
41
+ /** Build a one-line parameter summary from the tool's JSON schema. */
42
+ function describeParameters(jsonSchema) {
43
+ const props = jsonSchema.properties;
44
+ if (typeof props !== 'object' || props === null)
45
+ return '';
46
+ const required = new Set(Array.isArray(jsonSchema.required)
47
+ ? jsonSchema.required.filter((r) => typeof r === 'string')
48
+ : []);
49
+ return Object.entries(props)
50
+ .map(([key, val]) => {
51
+ const type = typeof val === 'object' && val !== null && typeof val.type === 'string'
52
+ ? val.type
53
+ : 'any';
54
+ return `${key} (${type}${required.has(key) ? ', required' : ''})`;
55
+ })
56
+ .join(', ');
57
+ }
58
+ function editDistance(a, b) {
59
+ let prevRow = Array.from({ length: b.length + 1 }, (_, i) => i);
60
+ for (let i = 1; i <= a.length; i++) {
61
+ const row = [i];
62
+ for (let j = 1; j <= b.length; j++) {
63
+ const del = (prevRow[j] ?? 0) + 1;
64
+ const ins = (row[j - 1] ?? 0) + 1;
65
+ const sub = (prevRow[j - 1] ?? 0) + (a[i - 1] === b[j - 1] ? 0 : 1);
66
+ row.push(Math.min(del, ins, sub));
67
+ }
68
+ prevRow = row;
69
+ }
70
+ return prevRow[b.length] ?? 0;
71
+ }
72
+ /** Suggest the closest schema key for an unknown input key, if any is close enough. */
73
+ function nearestKey(key, knownKeys) {
74
+ const lower = key.toLowerCase();
75
+ let best;
76
+ let bestScore = Infinity;
77
+ for (const candidate of knownKeys) {
78
+ const cl = candidate.toLowerCase();
79
+ // Substring containment ("path" in "file_path") is a strong signal on its own.
80
+ const score = cl === lower ? 0 : cl.includes(lower) || lower.includes(cl) ? 1 : editDistance(lower, cl);
81
+ if (score < bestScore) {
82
+ bestScore = score;
83
+ best = candidate;
84
+ }
85
+ }
86
+ return bestScore <= 3 ? best : undefined;
87
+ }
88
+ export function createTool(name, description, schema, execute, cwd, options) {
47
89
  const jsonSchema = zodToJsonSchema(schema);
90
+ const knownKeys = new Set(Object.keys(schema.shape));
91
+ const toolAliases = options?.aliases ?? {};
48
92
  const def = {
49
93
  name,
50
94
  description,
@@ -54,18 +98,30 @@ export function createTool(name, description, schema, execute, cwd) {
54
98
  definition: def,
55
99
  validate: (raw) => schema.parse(raw),
56
100
  async execute(input, settings, toolCwd, sessionId) {
57
- // Normalize input: strip null/undefined values and map camelCase
58
- // key aliases to their snake_case equivalents. LLMs (especially local
59
- // models) frequently normalize snake_case schema keys to camelCase.
101
+ // Normalize input: strip null/undefined values and resolve aliased keys.
102
+ // LLMs (especially local models) frequently normalize snake_case schema
103
+ // keys to camelCase or use near-miss names like `path` for `file_path`.
60
104
  const normalized = {};
105
+ const unknownKeys = [];
106
+ // Pass 1: exact schema keys always win, regardless of input key order.
61
107
  for (const [k, v] of Object.entries(input)) {
62
108
  if (v === null || v === undefined)
63
109
  continue;
64
- const targetKey = KEY_ALIASES[k] ?? k;
65
- // Only set if the target key isn't already present (preserve explicit snake_case)
66
- if (!(targetKey in normalized)) {
67
- normalized[targetKey] = v;
110
+ if (knownKeys.has(k))
111
+ normalized[k] = v;
112
+ }
113
+ // Pass 2: resolve remaining keys via per-tool aliases, the global table,
114
+ // then generic camelCase->snake_case when the converted key is in the schema.
115
+ for (const [k, v] of Object.entries(input)) {
116
+ if (v === null || v === undefined || knownKeys.has(k))
117
+ continue;
118
+ const snake = camelToSnake(k);
119
+ const target = toolAliases[k] ?? KEY_ALIASES[k] ?? (knownKeys.has(snake) ? snake : k);
120
+ if (!(target in normalized)) {
121
+ normalized[target] = v;
68
122
  }
123
+ if (!knownKeys.has(target))
124
+ unknownKeys.push(k);
69
125
  }
70
126
  try {
71
127
  const parsed = schema.parse(normalized);
@@ -74,7 +130,17 @@ export function createTool(name, description, schema, execute, cwd) {
74
130
  catch (err) {
75
131
  if (err instanceof z.ZodError) {
76
132
  const details = err.issues.map((i) => `${i.path.join('.')}: ${i.message}`).join('; ');
77
- return { output: null, error: `Validation error for tool "${name}": ${details}` };
133
+ const summary = describeParameters(jsonSchema);
134
+ const hints = unknownKeys
135
+ .map((k) => {
136
+ const suggestion = nearestKey(k, knownKeys);
137
+ return suggestion ? ` Unknown parameter "${k}" — did you mean "${suggestion}"?` : '';
138
+ })
139
+ .join('');
140
+ return {
141
+ output: null,
142
+ error: `Validation error for tool "${name}": ${details}.${summary ? ` Expected parameters: ${summary}.` : ''}${hints}`,
143
+ };
78
144
  }
79
145
  throw err;
80
146
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tool.js","sourceRoot":"","sources":["../../src/tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool.js","sourceRoot":"","sources":["../../src/tool.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  export declare const wikiTool: import("./tool.js").Tool & {
2
2
  validate: (raw: Record<string, unknown>) => {
3
- op: "init" | "list_sources" | "list_pages" | "page_get" | "page_put" | "index_get" | "index_upsert" | "log_append" | "search" | "graph" | "lint_report";
3
+ op: "search" | "page_get" | "page_put" | "index_upsert" | "init" | "list_sources" | "list_pages" | "index_get" | "log_append" | "graph" | "lint_report";
4
4
  slug?: string | undefined;
5
5
  content?: string | undefined;
6
6
  query?: string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/write.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,SAAS;;;;;CAoCrB,CAAC"}
1
+ {"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/write.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,SAAS;;;;;CAgDrB,CAAC"}
package/dist/src/write.js CHANGED
@@ -4,10 +4,13 @@ import { z } from 'zod';
4
4
  import { createTool, expandPath } from './tool.js';
5
5
  import { resolveSafePath, parseAllowlist } from '@curie-agent/core/safety/path-guard.js';
6
6
  const WriteSchema = z.object({
7
- file_path: z.string().describe('The absolute path to the file to write'),
8
- content: z.string().describe('The content to write to the file'),
7
+ file_path: z
8
+ .string()
9
+ .describe('REQUIRED. The path of the file to write — absolute, or relative to the working directory. Use forward slashes even on Windows.'),
10
+ content: z.string().describe('REQUIRED. The full content to write to the file.'),
9
11
  });
10
- export const writeTool = createTool('Write', 'Writes a file to the local filesystem. Creates new files or overwrites existing ones. ' +
12
+ export const writeTool = createTool('Write', 'Writes a file to the local filesystem. Both file_path and content are required. ' +
13
+ 'Creates new files or overwrites existing ones; parent directories are created automatically. ' +
11
14
  'Use this for any content too large to deliver inline — research reports, summaries, essays, generated documents. ' +
12
15
  'For very long content (>500 lines), write a skeleton first with placeholder headings, ' +
13
16
  'then fill each section using the Edit tool so each individual tool call stays small and fits within output limits.', WriteSchema, async (input, ctx) => {
@@ -32,5 +35,14 @@ export const writeTool = createTool('Write', 'Writes a file to the local filesys
32
35
  bytes: Buffer.byteLength(input.content, 'utf-8'),
33
36
  },
34
37
  };
38
+ }, undefined, {
39
+ aliases: {
40
+ path: 'file_path',
41
+ filename: 'file_path',
42
+ filepath: 'file_path',
43
+ file: 'file_path',
44
+ contents: 'content',
45
+ text: 'content',
46
+ },
35
47
  });
36
48
  //# sourceMappingURL=write.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/write.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAoB,MAAM,WAAW,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAEzF,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;IACxE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;CACjE,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,SAAS,GAAG,UAAU,CACjC,OAAO,EACP,wFAAwF;IACxF,mHAAmH;IACnH,wFAAwF;IACxF,oHAAoH,EACpH,WAAW,EACX,KAAK,EAAE,KAAK,EAAE,GAAgB,EAAE,EAAE;IAChC,IAAI,QAAgB,CAAC;IAErB,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,KAAK,KAAK,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAG,eAAe,CAC3B,KAAK,CAAC,SAAS,EACf,GAAG,CAAC,GAAG,EACP,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,cAAc,IAAI,EAAE,CAAC,CAC1D,CAAC;QACF,IAAI,OAAO,IAAI,KAAK;YAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;QAClE,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC;IACxB,CAAC;SAAM,CAAC;QACN,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAEnD,OAAO;QACL,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC;SACjD;KACF,CAAC;AACJ,CAAC,CACF,CAAC"}
1
+ {"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/write.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAoB,MAAM,WAAW,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAEzF,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,QAAQ,CACP,gIAAgI,CACjI;IACH,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;CACjF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,SAAS,GAAG,UAAU,CACjC,OAAO,EACP,kFAAkF;IAClF,+FAA+F;IAC/F,mHAAmH;IACnH,wFAAwF;IACxF,oHAAoH,EACpH,WAAW,EACX,KAAK,EAAE,KAAK,EAAE,GAAgB,EAAE,EAAE;IAChC,IAAI,QAAgB,CAAC;IAErB,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,KAAK,KAAK,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAG,eAAe,CAC3B,KAAK,CAAC,SAAS,EACf,GAAG,CAAC,GAAG,EACP,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,cAAc,IAAI,EAAE,CAAC,CAC1D,CAAC;QACF,IAAI,OAAO,IAAI,KAAK;YAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;QAClE,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC;IACxB,CAAC;SAAM,CAAC;QACN,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAEnD,OAAO;QACL,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC;SACjD;KACF,CAAC;AACJ,CAAC,EACD,SAAS,EACT;IACE,OAAO,EAAE;QACP,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,WAAW;QACrB,QAAQ,EAAE,WAAW;QACrB,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,SAAS;QACnB,IAAI,EAAE,SAAS;KAChB;CACF,CACF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@curie-agent/tools",
3
- "version": "0.3.0",
3
+ "version": "0.3.4",
4
4
  "publish": true,
5
5
  "type": "module",
6
6
  "files": [
@@ -16,8 +16,8 @@
16
16
  },
17
17
  "dependencies": {
18
18
  "zod": "^4.4.3",
19
- "@curie-agent/core": "0.3.0",
20
- "@curie-agent/wiki": "0.3.0"
19
+ "@curie-agent/wiki": "0.3.4",
20
+ "@curie-agent/core": "0.3.4"
21
21
  },
22
22
  "devDependencies": {
23
23
  "@types/node": "^22.0.0",