@curie-agent/tools 0.2.4 → 0.2.5

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 (47) hide show
  1. package/LICENSE +179 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/src/bash.js +2 -2
  4. package/dist/src/bash.js.map +1 -1
  5. package/dist/src/edit.js +2 -2
  6. package/dist/src/edit.js.map +1 -1
  7. package/dist/src/glob.d.ts.map +1 -1
  8. package/dist/src/glob.js +42 -13
  9. package/dist/src/glob.js.map +1 -1
  10. package/dist/src/grep.d.ts.map +1 -1
  11. package/dist/src/grep.js +10 -2
  12. package/dist/src/grep.js.map +1 -1
  13. package/dist/src/index.d.ts +27 -0
  14. package/dist/src/index.d.ts.map +1 -1
  15. package/dist/src/index.js +8 -1
  16. package/dist/src/index.js.map +1 -1
  17. package/dist/src/read.d.ts.map +1 -1
  18. package/dist/src/read.js +3 -9
  19. package/dist/src/read.js.map +1 -1
  20. package/dist/src/reminder.d.ts +4 -0
  21. package/dist/src/reminder.d.ts.map +1 -1
  22. package/dist/src/reminder.js +31 -10
  23. package/dist/src/reminder.js.map +1 -1
  24. package/dist/src/skill.d.ts +34 -0
  25. package/dist/src/skill.d.ts.map +1 -0
  26. package/dist/src/skill.js +133 -0
  27. package/dist/src/skill.js.map +1 -0
  28. package/dist/src/spawn-agent.d.ts +13 -0
  29. package/dist/src/spawn-agent.d.ts.map +1 -0
  30. package/dist/src/spawn-agent.js +89 -0
  31. package/dist/src/spawn-agent.js.map +1 -0
  32. package/dist/src/task.d.ts +11 -0
  33. package/dist/src/task.d.ts.map +1 -0
  34. package/dist/src/task.js +49 -0
  35. package/dist/src/task.js.map +1 -0
  36. package/dist/src/todo.d.ts +21 -0
  37. package/dist/src/todo.d.ts.map +1 -0
  38. package/dist/src/todo.js +322 -0
  39. package/dist/src/todo.js.map +1 -0
  40. package/dist/src/tool.d.ts +1 -0
  41. package/dist/src/tool.d.ts.map +1 -1
  42. package/dist/src/tool.js +9 -3
  43. package/dist/src/tool.js.map +1 -1
  44. package/dist/src/web-search.js +2 -2
  45. package/dist/src/write.js +2 -2
  46. package/dist/src/write.js.map +1 -1
  47. package/package.json +10 -10
@@ -1 +1 @@
1
- {"version":3,"file":"edit.js","sourceRoot":"","sources":["../../src/edit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"edit.js","sourceRoot":"","sources":["../../src/edit.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"glob.d.ts","sourceRoot":"","sources":["../../src/glob.ts"],"names":[],"mappings":"AA2CA,eAAO,MAAM,QAAQ;;;;;CAoCpB,CAAC"}
1
+ {"version":3,"file":"glob.d.ts","sourceRoot":"","sources":["../../src/glob.ts"],"names":[],"mappings":"AAiDA,eAAO,MAAM,QAAQ;;;;;CA4DpB,CAAC"}
package/dist/src/glob.js CHANGED
@@ -1,7 +1,8 @@
1
1
  import fs from 'node:fs';
2
2
  import path from 'node:path';
3
3
  import { z } from 'zod';
4
- import { createTool } from './tool.js';
4
+ import { isPathAllowed, parseAllowlist } from '@curie-agent/core/safety/path-guard.js';
5
+ import { createTool, expandPath } from './tool.js';
5
6
  const GlobSchema = z.object({
6
7
  pattern: z.string().describe('The glob pattern to match files against'),
7
8
  path: z.string().optional().describe('The directory to search in'),
@@ -11,11 +12,14 @@ function minimatch(pattern, str) {
11
12
  return regex.test(str);
12
13
  }
13
14
  function globToRegex(pattern) {
14
- let regex = pattern
15
+ // Use unique Unicode placeholders instead of backslash-escaping to avoid conflicts
16
+ // between the ** protection and single-* replacement steps.
17
+ const placeholder = '';
18
+ const regex = pattern
15
19
  .replace(/[.+?^${}()|[\]\\]/g, '\\$&')
16
- .replace(/\*\*/g, '\\*\\*')
20
+ .replace(/\*\*/g, placeholder)
17
21
  .replace(/\*/g, '[^/]*')
18
- .replace(/\\\*\\\*/g, '.*')
22
+ .replace(placeholder, '.*')
19
23
  .replace(/\?/g, '[^/]');
20
24
  return new RegExp(`^${regex}$`);
21
25
  }
@@ -33,16 +37,40 @@ function shouldIgnore(relPath, patterns) {
33
37
  for (const p of patterns) {
34
38
  if (minimatch(p, relPath))
35
39
  return true;
36
- if (minimatch(`${p}/**`, relPath))
40
+ // Also match as directory prefix: "node_modules" should ignore node_modules/foo/bar
41
+ const dirPrefix = p.replace(/\/$/, '') + '/';
42
+ if (relPath.startsWith(dirPrefix))
37
43
  return true;
38
44
  }
39
45
  return false;
40
46
  }
41
47
  export const globTool = createTool('Glob', 'Fast file pattern matching. Gitignore-aware file pattern matching.', GlobSchema, async (input, ctx) => {
42
- const searchDir = input.path ? path.resolve(ctx.cwd, input.path) : ctx.cwd;
43
- const gitignorePatterns = readGitignore(ctx.cwd);
48
+ const searchDir = input.path ? path.resolve(ctx.cwd, expandPath(input.path)) : ctx.cwd;
49
+ // Safety: refuse searches outside allowed directories.
50
+ if (ctx.settings.safety?.path_guard !== 'off') {
51
+ const allowlist = parseAllowlist(ctx.settings.safety?.path_allowlist ?? '');
52
+ if (!isPathAllowed(searchDir, ctx.cwd, allowlist)) {
53
+ return { output: null, error: 'PathGuard: glob blocked — path is outside allowed directories' };
54
+ }
55
+ }
56
+ // Read .gitignore from both cwd (global filters) and searchDir (local filters).
57
+ const cwdGitignorePatterns = readGitignore(ctx.cwd);
44
58
  const results = [];
45
- function walk(dir) {
59
+ // Track visited real directories to prevent symlink cycle loops.
60
+ const visitedDirs = new Set();
61
+ function walk(dir, depth) {
62
+ if (depth > 100)
63
+ return; // Safety limit
64
+ let realDir;
65
+ try {
66
+ realDir = fs.realpathSync(dir);
67
+ }
68
+ catch {
69
+ return; // Can't resolve directory (dangling symlink, permission denied)
70
+ }
71
+ if (visitedDirs.has(realDir))
72
+ return;
73
+ visitedDirs.add(realDir);
46
74
  let entries;
47
75
  try {
48
76
  entries = fs.readdirSync(dir, { withFileTypes: true });
@@ -52,14 +80,15 @@ export const globTool = createTool('Glob', 'Fast file pattern matching. Gitignor
52
80
  }
53
81
  for (const entry of entries) {
54
82
  const fullPath = path.join(dir, entry.name);
55
- const relPath = path.relative(ctx.cwd, fullPath);
83
+ // Normalize to forward slashes so globToRegex patterns work on all platforms.
84
+ const relPath = path.relative(ctx.cwd, fullPath).replace(/\\/g, '/');
56
85
  if (entry.isDirectory()) {
57
- if (shouldIgnore(relPath, gitignorePatterns))
86
+ if (shouldIgnore(relPath, cwdGitignorePatterns))
58
87
  continue;
59
- walk(fullPath);
88
+ walk(fullPath, depth + 1);
60
89
  }
61
90
  else {
62
- if (shouldIgnore(relPath, gitignorePatterns))
91
+ if (shouldIgnore(relPath, cwdGitignorePatterns))
63
92
  continue;
64
93
  if (minimatch(input.pattern, relPath)) {
65
94
  results.push(fullPath);
@@ -67,7 +96,7 @@ export const globTool = createTool('Glob', 'Fast file pattern matching. Gitignor
67
96
  }
68
97
  }
69
98
  }
70
- walk(searchDir);
99
+ walk(searchDir, 0);
71
100
  return { output: results.sort() };
72
101
  });
73
102
  //# sourceMappingURL=glob.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"glob.js","sourceRoot":"","sources":["../../src/glob.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"glob.js","sourceRoot":"","sources":["../../src/glob.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,aAAa,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AACvF,OAAO,EAAE,UAAU,EAAE,UAAU,EAAoB,MAAM,WAAW,CAAC;AAErE,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;IACvE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;CACnE,CAAC,CAAC;AAEH,SAAS,SAAS,CAAC,OAAe,EAAE,GAAW;IAC7C,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACnC,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,WAAW,CAAC,OAAe;IAClC,mFAAmF;IACnF,4DAA4D;IAC5D,MAAM,WAAW,GAAG,GAAG,CAAC;IACxB,MAAM,KAAK,GAAG,OAAO;SAClB,OAAO,CAAC,oBAAoB,EAAE,MAAM,CAAC;SACrC,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC;SAC7B,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;SACvB,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC;SAC1B,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC1B,OAAO,IAAI,MAAM,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,aAAa,CAAC,GAAW;IAChC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IACnD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC;QAAE,OAAO,EAAE,CAAC;IAC7C,OAAO,EAAE;SACN,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC;SACpC,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,YAAY,CAAC,OAAe,EAAE,QAAkB;IACvD,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC;YAAE,OAAO,IAAI,CAAC;QACvC,oFAAoF;QACpF,MAAM,SAAS,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;QAC7C,IAAI,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,IAAI,CAAC;IACjD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,UAAU,CAChC,MAAM,EACN,oEAAoE,EACpE,UAAU,EACV,KAAK,EAAE,KAAK,EAAE,GAAgB,EAAE,EAAE;IAChC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAEvF,uDAAuD;IACvD,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,KAAK,KAAK,EAAE,CAAC;QAC9C,MAAM,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,cAAc,IAAI,EAAE,CAAC,CAAC;QAC5E,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,CAAC;YAClD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,+DAA+D,EAAE,CAAC;QAClG,CAAC;IACH,CAAC;IAED,gFAAgF;IAChF,MAAM,oBAAoB,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAEpD,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,iEAAiE;IACjE,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IAEtC,SAAS,IAAI,CAAC,GAAW,EAAE,KAAa;QACtC,IAAI,KAAK,GAAG,GAAG;YAAE,OAAO,CAAC,eAAe;QACxC,IAAI,OAAe,CAAC;QACpB,IAAI,CAAC;YACH,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,gEAAgE;QAC1E,CAAC;QACD,IAAI,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,OAAO;QACrC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAEzB,IAAI,OAAO,CAAC;QACZ,IAAI,CAAC;YACH,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5C,8EAA8E;YAC9E,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAErE,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,IAAI,YAAY,CAAC,OAAO,EAAE,oBAAoB,CAAC;oBAAE,SAAS;gBAC1D,IAAI,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;YAC5B,CAAC;iBAAM,CAAC;gBACN,IAAI,YAAY,CAAC,OAAO,EAAE,oBAAoB,CAAC;oBAAE,SAAS;gBAC1D,IAAI,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;oBACtC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;AACpC,CAAC,CACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"grep.d.ts","sourceRoot":"","sources":["../../src/grep.ts"],"names":[],"mappings":"AA0BA,eAAO,MAAM,QAAQ;;;;;;;;;;CAyDpB,CAAC"}
1
+ {"version":3,"file":"grep.d.ts","sourceRoot":"","sources":["../../src/grep.ts"],"names":[],"mappings":"AA2BA,eAAO,MAAM,QAAQ;;;;;;;;;;CAkEpB,CAAC"}
package/dist/src/grep.js CHANGED
@@ -1,7 +1,8 @@
1
1
  import fs from 'node:fs';
2
2
  import path from 'node:path';
3
3
  import { z } from 'zod';
4
- import { createTool } from './tool.js';
4
+ import { isPathAllowed, parseAllowlist } from '@curie-agent/core/safety/path-guard.js';
5
+ import { createTool, expandPath } from './tool.js';
5
6
  const GrepSchema = z.object({
6
7
  pattern: z.string().describe('The regular expression pattern to search for'),
7
8
  path: z.string().optional().describe('File or directory to search in'),
@@ -22,7 +23,14 @@ const EXT_MAP = {
22
23
  rs: ['.rs'],
23
24
  };
24
25
  export const grepTool = createTool('Grep', 'Content search with regex support. Searches file contents for matching patterns.', GrepSchema, async (input, ctx) => {
25
- const searchPath = input.path ? path.resolve(ctx.cwd, input.path) : ctx.cwd;
26
+ const searchPath = input.path ? path.resolve(ctx.cwd, expandPath(input.path)) : ctx.cwd;
27
+ // Safety: refuse searches outside allowed directories.
28
+ if (ctx.settings.safety?.path_guard !== 'off') {
29
+ const allowlist = parseAllowlist(ctx.settings.safety?.path_allowlist ?? '');
30
+ if (!isPathAllowed(searchPath, ctx.cwd, allowlist)) {
31
+ return { output: null, error: 'PathGuard: grep blocked — path is outside allowed directories' };
32
+ }
33
+ }
26
34
  const regexFlags = input['-i'] ? 'gi' : 'g';
27
35
  const pattern = input.pattern ?? '';
28
36
  const regex = new RegExp(pattern, regexFlags);
@@ -1 +1 @@
1
- {"version":3,"file":"grep.js","sourceRoot":"","sources":["../../src/grep.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"grep.js","sourceRoot":"","sources":["../../src/grep.ts"],"names":[],"mappings":"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"}
@@ -6,8 +6,12 @@ export { globTool } from './glob.js';
6
6
  export { grepTool } from './grep.js';
7
7
  export { bashTool } from './bash.js';
8
8
  export { reminderTool } from './reminder.js';
9
+ export { scheduledTaskTool } from './task.js';
9
10
  export { webSearchTool } from './web-search.js';
10
11
  export { webFetchTool } from './web-fetch.js';
12
+ export { skillTool, discoverAllSkills, formatSkillsForPrompt, listSkills, parseFrontmatter, type ParsedSkill } from './skill.js';
13
+ export { createSpawnAgentTool } from './spawn-agent.js';
14
+ export { todoTool } from './todo.js';
11
15
  export declare const allTools: ((import("./tool.js").Tool & {
12
16
  validate: (raw: Record<string, unknown>) => {
13
17
  command: string;
@@ -43,6 +47,11 @@ export declare const allTools: ((import("./tool.js").Tool & {
43
47
  message: string;
44
48
  scheduled_at: string;
45
49
  };
50
+ }) | (import("./tool.js").Tool & {
51
+ validate: (raw: Record<string, unknown>) => {
52
+ instruction: string;
53
+ scheduled_at: string;
54
+ };
46
55
  }) | (import("./tool.js").Tool & {
47
56
  validate: (raw: Record<string, unknown>) => {
48
57
  query: string;
@@ -55,5 +64,23 @@ export declare const allTools: ((import("./tool.js").Tool & {
55
64
  url: string;
56
65
  prompt: string;
57
66
  };
67
+ }) | (import("./tool.js").Tool & {
68
+ validate: (raw: Record<string, unknown>) => {
69
+ skill: string;
70
+ };
71
+ }) | (import("./tool.js").Tool & {
72
+ validate: (raw: Record<string, unknown>) => {
73
+ action: "edit" | "list" | "add" | "remove" | "complete" | "cancel" | "start" | "reorder";
74
+ scope: "personal" | "project";
75
+ id?: string | undefined;
76
+ title?: string | undefined;
77
+ description?: string | undefined;
78
+ status?: "backlog" | "todo" | "in_progress" | "done" | "canceled" | undefined;
79
+ priority?: "low" | "medium" | "high" | "critical" | undefined;
80
+ tags?: string[] | undefined;
81
+ ids?: string[] | undefined;
82
+ filter_status?: "backlog" | "todo" | "in_progress" | "done" | "canceled" | undefined;
83
+ filter_priority?: "low" | "medium" | "high" | "critical" | undefined;
84
+ };
58
85
  }))[];
59
86
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAAE,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,KAAK,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACjH,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAY9C,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAA2G,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAAE,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,KAAK,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACjH,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,UAAU,EAAE,gBAAgB,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AACjI,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAerC,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAAmJ,CAAC"}
package/dist/src/index.js CHANGED
@@ -6,8 +6,12 @@ export { globTool } from './glob.js';
6
6
  export { grepTool } from './grep.js';
7
7
  export { bashTool } from './bash.js';
8
8
  export { reminderTool } from './reminder.js';
9
+ export { scheduledTaskTool } from './task.js';
9
10
  export { webSearchTool } from './web-search.js';
10
11
  export { webFetchTool } from './web-fetch.js';
12
+ export { skillTool, discoverAllSkills, formatSkillsForPrompt, listSkills, parseFrontmatter } from './skill.js';
13
+ export { createSpawnAgentTool } from './spawn-agent.js';
14
+ export { todoTool } from './todo.js';
11
15
  import { readTool } from './read.js';
12
16
  import { editTool } from './edit.js';
13
17
  import { writeTool } from './write.js';
@@ -15,7 +19,10 @@ import { globTool } from './glob.js';
15
19
  import { grepTool } from './grep.js';
16
20
  import { bashTool } from './bash.js';
17
21
  import { reminderTool } from './reminder.js';
22
+ import { scheduledTaskTool } from './task.js';
18
23
  import { webSearchTool } from './web-search.js';
19
24
  import { webFetchTool } from './web-fetch.js';
20
- export const allTools = [readTool, editTool, writeTool, globTool, grepTool, bashTool, reminderTool, webSearchTool, webFetchTool];
25
+ import { skillTool } from './skill.js';
26
+ import { todoTool } from './todo.js';
27
+ export const allTools = [readTool, editTool, writeTool, globTool, grepTool, bashTool, reminderTool, scheduledTaskTool, webSearchTool, webFetchTool, skillTool, todoTool];
21
28
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8D,UAAU,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACjH,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8D,UAAU,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACjH,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,UAAU,EAAE,gBAAgB,EAAoB,MAAM,YAAY,CAAC;AACjI,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,iBAAiB,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/read.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,QAAQ;;;;;;;CA6EpB,CAAC"}
1
+ {"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/read.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,QAAQ;;;;;;;CAuEpB,CAAC"}
package/dist/src/read.js CHANGED
@@ -12,8 +12,8 @@ const ReadSchema = z.object({
12
12
  export const readTool = createTool('Read', 'Reads a file from the local filesystem. Supports text files, PDF, notebooks, and images.', ReadSchema, async (input, ctx) => {
13
13
  const filePath = path.resolve(ctx.cwd, expandPath(input.file_path));
14
14
  // Safety: refuse reads outside allowed directories (project cwd + user allowlist).
15
- if (ctx.settings.SAFETY_PATH_GUARD !== 'off') {
16
- const allowlist = parseAllowlist(ctx.settings.SAFETY_PATH_ALLOWLIST ?? '');
15
+ if (ctx.settings.safety?.path_guard !== 'off') {
16
+ const allowlist = parseAllowlist(ctx.settings.safety?.path_allowlist ?? '');
17
17
  if (!isPathAllowed(filePath, ctx.cwd, allowlist)) {
18
18
  return { output: null, error: 'PathGuard: read blocked — path is outside allowed directories' };
19
19
  }
@@ -63,12 +63,6 @@ export const readTool = createTool('Read', 'Reads a file from the local filesyst
63
63
  return `${ln}\t${line}`;
64
64
  })
65
65
  .join('\n');
66
- return {
67
- output: {
68
- path: filePath,
69
- totalLines: lines.length,
70
- content: numbered,
71
- },
72
- };
66
+ return { output: numbered };
73
67
  });
74
68
  //# sourceMappingURL=read.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/read.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/read.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,7 @@
1
+ /**
2
+ * CreateReminder tool — schedules a notification at a specific time.
3
+ * Migrated from CronManager to TaskManager (mode='notify').
4
+ */
1
5
  export declare const reminderTool: import("./tool.js").Tool & {
2
6
  validate: (raw: Record<string, unknown>) => {
3
7
  message: string;
@@ -1 +1 @@
1
- {"version":3,"file":"reminder.d.ts","sourceRoot":"","sources":["../../src/reminder.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,YAAY;;;;;CAuBxB,CAAC"}
1
+ {"version":3,"file":"reminder.d.ts","sourceRoot":"","sources":["../../src/reminder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,eAAO,MAAM,YAAY;;;;;CA2CxB,CAAC"}
@@ -1,27 +1,48 @@
1
+ /**
2
+ * CreateReminder tool — schedules a notification at a specific time.
3
+ * Migrated from CronManager to TaskManager (mode='notify').
4
+ */
1
5
  import { z } from 'zod';
2
6
  import { createTool } from './tool.js';
3
- import { CronManager } from '@curie-agent/core';
4
- const CronManagerSingleton = new CronManager();
7
+ import { TaskManager } from '@curie-agent/core';
8
+ const taskManager = new TaskManager();
5
9
  const CreateReminderSchema = z.object({
6
10
  message: z.string().describe('What to remind the user about'),
7
- scheduled_at: z.string().describe('ISO 8601 datetime (e.g. "2026-05-03T07:00:00Z")'),
11
+ scheduled_at: z.string().describe('ISO 8601 datetime with the user\'s local timezone offset suffix. You MUST append the timezone offset matching the offset in the date/time context (e.g. "2026-05-03T07:00:00+02:00"). Do NOT omit the offset.'),
8
12
  });
9
- export const reminderTool = createTool('CreateReminder', 'Creates a reminder notification that will fire at the specified time.', CreateReminderSchema, async (input) => {
10
- const scheduledAt = new Date(input.scheduled_at).getTime();
13
+ export const reminderTool = createTool('CreateReminder', 'Creates a reminder notification that will fire at the specified time.', CreateReminderSchema, async (input, ctx) => {
14
+ let dateStr = input.scheduled_at.trim();
15
+ const hasTimezone = /[Zz]|[+-]\d{2}(:?\d{2})?$/.test(dateStr);
16
+ if (!hasTimezone) {
17
+ const date = new Date();
18
+ const offsetMinutes = -date.getTimezoneOffset();
19
+ const sign = offsetMinutes >= 0 ? '+' : '-';
20
+ const absMinutes = Math.abs(offsetMinutes);
21
+ const hours = String(Math.floor(absMinutes / 60)).padStart(2, '0');
22
+ const mins = String(absMinutes % 60).padStart(2, '0');
23
+ dateStr = `${dateStr}${sign}${hours}:${mins}`;
24
+ }
25
+ const scheduledAt = new Date(dateStr).getTime();
11
26
  if (isNaN(scheduledAt)) {
12
27
  return {
13
28
  output: null,
14
- error: `Invalid datetime: "${input.scheduled_at}". Use ISO 8601 format (e.g. "2026-05-03T07:00:00Z").`,
29
+ error: `Invalid datetime: "${input.scheduled_at}". Use ISO 8601 format with timezone offset suffix.`,
15
30
  };
16
31
  }
17
- const task = CronManagerSingleton.createReminder(input.message, scheduledAt);
18
- const timeStr = new Date(scheduledAt).toLocaleString();
32
+ taskManager.load();
33
+ const task = taskManager.create({
34
+ title: input.message,
35
+ mode: 'notify',
36
+ scope: 'personal',
37
+ scheduled_at: scheduledAt,
38
+ });
19
39
  return {
20
40
  output: {
21
41
  id: task.id,
22
- message: task.message,
23
- scheduledAt: timeStr,
42
+ message: task.title,
43
+ scheduledAt: task.scheduled_at ? new Date(task.scheduled_at).toLocaleString() : '—',
24
44
  status: task.status,
45
+ mode: task.mode,
25
46
  },
26
47
  };
27
48
  });
@@ -1 +1 @@
1
- {"version":3,"file":"reminder.js","sourceRoot":"","sources":["../../src/reminder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAoB,MAAM,WAAW,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,oBAAoB,GAAG,IAAI,WAAW,EAAE,CAAC;AAE/C,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;IAC7D,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC;CACrF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CACpC,gBAAgB,EAChB,uEAAuE,EACvE,oBAAoB,EACpB,KAAK,EAAE,KAAK,EAAE,EAAE;IACd,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,CAAC;IAC3D,IAAI,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;QACvB,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,KAAK,EAAE,sBAAsB,KAAK,CAAC,YAAY,uDAAuD;SACvG,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,oBAAoB,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAC7E,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,cAAc,EAAE,CAAC;IACvD,OAAO;QACL,MAAM,EAAE;YACN,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,WAAW,EAAE,OAAO;YACpB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB;KACF,CAAC;AACJ,CAAC,CACF,CAAC"}
1
+ {"version":3,"file":"reminder.js","sourceRoot":"","sources":["../../src/reminder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAoB,MAAM,WAAW,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AAEtC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;IAC7D,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+MAA+M,CAAC;CACnP,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CACpC,gBAAgB,EAChB,uEAAuE,EACvE,oBAAoB,EACpB,KAAK,EAAE,KAAK,EAAE,GAAgB,EAAE,EAAE;IAChC,IAAI,OAAO,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;IACxC,MAAM,WAAW,GAAG,2BAA2B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9D,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QACxB,MAAM,aAAa,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAChD,MAAM,IAAI,GAAG,aAAa,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACnE,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACtD,OAAO,GAAG,GAAG,OAAO,GAAG,IAAI,GAAG,KAAK,IAAI,IAAI,EAAE,CAAC;IAChD,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;IAChD,IAAI,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;QACvB,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,KAAK,EAAE,sBAAsB,KAAK,CAAC,YAAY,qDAAqD;SACrG,CAAC;IACJ,CAAC;IAED,WAAW,CAAC,IAAI,EAAE,CAAC;IACnB,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC;QAC9B,KAAK,EAAE,KAAK,CAAC,OAAO;QACpB,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,UAAU;QACjB,YAAY,EAAE,WAAW;KAC1B,CAAC,CAAC;IAEH,OAAO;QACL,MAAM,EAAE;YACN,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,OAAO,EAAE,IAAI,CAAC,KAAK;YACnB,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,GAAG;YACnF,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB;KACF,CAAC;AACJ,CAAC,CACF,CAAC"}
@@ -0,0 +1,34 @@
1
+ export interface ParsedSkill {
2
+ name: string;
3
+ description: string;
4
+ tools?: string[];
5
+ body: string;
6
+ filePath: string;
7
+ }
8
+ export interface SkillMetadataEntry {
9
+ name: string;
10
+ description: string;
11
+ source: 'global' | 'project';
12
+ filePath: string;
13
+ }
14
+ /** Parse `---` delimited YAML frontmatter (simple key: value only). */
15
+ export declare function parseFrontmatter(content: string): {
16
+ frontmatter: Record<string, string>;
17
+ body: string;
18
+ };
19
+ /** Discover skills in a single directory. */
20
+ export declare function discoverSkillsInDir(dir: string): ParsedSkill[];
21
+ /** Discover all skills (global + project), project overrides global by name. */
22
+ export declare function discoverAllSkills(cwd: string): ParsedSkill[];
23
+ /** Find a skill by name (case-insensitive), project first then global. */
24
+ export declare function findSkill(cwd: string, skillName: string): ParsedSkill | null;
25
+ /** Format skills as a markdown section for the system prompt. */
26
+ export declare function formatSkillsForPrompt(skills: ParsedSkill[]): string;
27
+ /** List skills with source information (for /skill slash command). */
28
+ export declare function listSkills(cwd: string): SkillMetadataEntry[];
29
+ export declare const skillTool: import("./tool.js").Tool & {
30
+ validate: (raw: Record<string, unknown>) => {
31
+ skill: string;
32
+ };
33
+ };
34
+ //# sourceMappingURL=skill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../../src/skill.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAID,uEAAuE;AACvE,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAmBvG;AAED,6CAA6C;AAC7C,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,EAAE,CAqC9D;AAED,gFAAgF;AAChF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,EAAE,CAY5D;AAED,0EAA0E;AAC1E,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAI5E;AAED,iEAAiE;AACjE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,CAgBnE;AAED,sEAAsE;AACtE,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,EAAE,CAkB5D;AAID,eAAO,MAAM,SAAS;;;;CAerB,CAAC"}
@@ -0,0 +1,133 @@
1
+ import { z } from 'zod';
2
+ import { existsSync, readdirSync, readFileSync, statSync } from 'node:fs';
3
+ import { homedir } from 'node:os';
4
+ import { join, resolve } from 'node:path';
5
+ import { createTool } from './tool.js';
6
+ const KEBAB_CASE_RE = /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/;
7
+ /** Parse `---` delimited YAML frontmatter (simple key: value only). */
8
+ export function parseFrontmatter(content) {
9
+ if (!content.startsWith('---')) {
10
+ return { frontmatter: {}, body: content };
11
+ }
12
+ const endIdx = content.indexOf('---', 3);
13
+ if (endIdx === -1)
14
+ return { frontmatter: {}, body: content };
15
+ const fmBlock = content.slice(3, endIdx).trim();
16
+ const body = content.slice(endIdx + 3).trim();
17
+ const frontmatter = {};
18
+ for (const line of fmBlock.split('\n')) {
19
+ const colonIdx = line.indexOf(':');
20
+ if (colonIdx === -1)
21
+ continue;
22
+ const key = line.slice(0, colonIdx).trim();
23
+ const value = line.slice(colonIdx + 1).trim();
24
+ if (key)
25
+ frontmatter[key] = value;
26
+ }
27
+ return { frontmatter, body };
28
+ }
29
+ /** Discover skills in a single directory. */
30
+ export function discoverSkillsInDir(dir) {
31
+ const skills = [];
32
+ if (!existsSync(dir) || !statSync(dir).isDirectory())
33
+ return skills;
34
+ for (const entry of readdirSync(dir, { withFileTypes: true })) {
35
+ let skillPath = null;
36
+ if (entry.isDirectory()) {
37
+ skillPath = join(dir, entry.name, 'SKILL.md');
38
+ }
39
+ else if (/^(.+)-SKILL\.md$/i.test(entry.name)) {
40
+ skillPath = join(dir, entry.name);
41
+ }
42
+ if (!skillPath || !existsSync(skillPath))
43
+ continue;
44
+ try {
45
+ const content = readFileSync(skillPath, 'utf-8');
46
+ const { frontmatter, body } = parseFrontmatter(content);
47
+ const name = frontmatter['name'];
48
+ if (!name || !KEBAB_CASE_RE.test(name))
49
+ continue;
50
+ const tools = frontmatter['tools']
51
+ ? frontmatter['tools'].split(',').map(s => s.trim()).filter(Boolean)
52
+ : undefined;
53
+ skills.push({
54
+ name,
55
+ description: frontmatter['description'] || '',
56
+ tools,
57
+ body,
58
+ filePath: resolve(skillPath),
59
+ });
60
+ }
61
+ catch {
62
+ // skip unreadable files
63
+ }
64
+ }
65
+ return skills;
66
+ }
67
+ /** Discover all skills (global + project), project overrides global by name. */
68
+ export function discoverAllSkills(cwd) {
69
+ const globalDir = join(homedir(), '.curie-agent', 'skills');
70
+ const projectDir = join(cwd, '.curie-agent', 'skills');
71
+ const globalSkills = discoverSkillsInDir(globalDir);
72
+ const projectSkills = discoverSkillsInDir(projectDir);
73
+ const map = new Map();
74
+ for (const s of globalSkills)
75
+ map.set(s.name.toLowerCase(), s);
76
+ for (const s of projectSkills)
77
+ map.set(s.name.toLowerCase(), s);
78
+ return [...map.values()];
79
+ }
80
+ /** Find a skill by name (case-insensitive), project first then global. */
81
+ export function findSkill(cwd, skillName) {
82
+ const target = skillName.toLowerCase();
83
+ const all = discoverAllSkills(cwd);
84
+ return all.find(s => s.name.toLowerCase() === target) ?? null;
85
+ }
86
+ /** Format skills as a markdown section for the system prompt. */
87
+ export function formatSkillsForPrompt(skills) {
88
+ if (skills.length === 0)
89
+ return '';
90
+ const lines = [
91
+ '## Available Skills',
92
+ '',
93
+ 'You have access to the following skills. When the user\'s request matches a skill description,',
94
+ 'invoke the Skill tool with the skill name to load its full instructions.',
95
+ '',
96
+ '| Skill | Description |',
97
+ '|-------|-------------|',
98
+ ];
99
+ for (const s of skills) {
100
+ lines.push(`| ${s.name} | ${s.description} |`);
101
+ }
102
+ return lines.join('\n');
103
+ }
104
+ /** List skills with source information (for /skill slash command). */
105
+ export function listSkills(cwd) {
106
+ const globalDir = join(homedir(), '.curie-agent', 'skills');
107
+ const projectDir = join(cwd, '.curie-agent', 'skills');
108
+ const entries = [];
109
+ const seen = new Set();
110
+ // Global first
111
+ for (const s of discoverSkillsInDir(globalDir)) {
112
+ entries.push({ name: s.name, description: s.description, source: 'global', filePath: s.filePath });
113
+ seen.add(s.name.toLowerCase());
114
+ }
115
+ // Project skills (override display, but we keep global entry too - tool resolves project-first)
116
+ for (const s of discoverSkillsInDir(projectDir)) {
117
+ entries.push({ name: s.name, description: s.description, source: 'project', filePath: s.filePath });
118
+ }
119
+ return entries;
120
+ }
121
+ // ── Skill Tool ──
122
+ export const skillTool = createTool('Skill', 'Invoke a skill by name. Returns the skill\'s instructions which you should follow. Available skills are listed in the system prompt under "## Available Skills".', z.object({
123
+ skill: z.string().describe('The name of the skill to invoke (kebab-case identifier)'),
124
+ }), async (input, ctx) => {
125
+ const skill = findSkill(ctx.cwd, input.skill);
126
+ if (!skill) {
127
+ const all = discoverAllSkills(ctx.cwd);
128
+ const available = all.map(s => s.name).join(', ') || '(none)';
129
+ return { output: null, error: `Skill "${input.skill}" not found. Available: ${available}` };
130
+ }
131
+ return { output: skill.body };
132
+ });
133
+ //# sourceMappingURL=skill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill.js","sourceRoot":"","sources":["../../src/skill.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { Tool } from '@curie-agent/core';
2
+ import { SubagentExecutor } from '@curie-agent/core';
3
+ import type { ProviderStream } from '@curie-agent/core';
4
+ import type { CurieSettings } from '@curie-agent/core';
5
+ export interface SpawnAgentToolConfig {
6
+ subagentExecutor: SubagentExecutor;
7
+ provider: ProviderStream;
8
+ cwd: string;
9
+ settings: CurieSettings;
10
+ model: string;
11
+ }
12
+ export declare function createSpawnAgentTool(config: SpawnAgentToolConfig): Tool;
13
+ //# sourceMappingURL=spawn-agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn-agent.d.ts","sourceRoot":"","sources":["../../src/spawn-agent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAmB,MAAM,mBAAmB,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGvD,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,QAAQ,EAAE,cAAc,CAAC;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,aAAa,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI,CA2FvE"}