@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.
- package/LICENSE +179 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/src/bash.js +2 -2
- package/dist/src/bash.js.map +1 -1
- package/dist/src/edit.js +2 -2
- package/dist/src/edit.js.map +1 -1
- package/dist/src/glob.d.ts.map +1 -1
- package/dist/src/glob.js +42 -13
- package/dist/src/glob.js.map +1 -1
- package/dist/src/grep.d.ts.map +1 -1
- package/dist/src/grep.js +10 -2
- package/dist/src/grep.js.map +1 -1
- package/dist/src/index.d.ts +27 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +8 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/read.d.ts.map +1 -1
- package/dist/src/read.js +3 -9
- package/dist/src/read.js.map +1 -1
- package/dist/src/reminder.d.ts +4 -0
- package/dist/src/reminder.d.ts.map +1 -1
- package/dist/src/reminder.js +31 -10
- package/dist/src/reminder.js.map +1 -1
- package/dist/src/skill.d.ts +34 -0
- package/dist/src/skill.d.ts.map +1 -0
- package/dist/src/skill.js +133 -0
- package/dist/src/skill.js.map +1 -0
- package/dist/src/spawn-agent.d.ts +13 -0
- package/dist/src/spawn-agent.d.ts.map +1 -0
- package/dist/src/spawn-agent.js +89 -0
- package/dist/src/spawn-agent.js.map +1 -0
- package/dist/src/task.d.ts +11 -0
- package/dist/src/task.d.ts.map +1 -0
- package/dist/src/task.js +49 -0
- package/dist/src/task.js.map +1 -0
- package/dist/src/todo.d.ts +21 -0
- package/dist/src/todo.d.ts.map +1 -0
- package/dist/src/todo.js +322 -0
- package/dist/src/todo.js.map +1 -0
- package/dist/src/tool.d.ts +1 -0
- package/dist/src/tool.d.ts.map +1 -1
- package/dist/src/tool.js +9 -3
- package/dist/src/tool.js.map +1 -1
- package/dist/src/web-search.js +2 -2
- package/dist/src/write.js +2 -2
- package/dist/src/write.js.map +1 -1
- package/package.json +10 -10
package/dist/src/edit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edit.js","sourceRoot":"","sources":["../../src/edit.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,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;IACzE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IACtD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IAC9D,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;CACxE,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,QAAQ,GAAG,UAAU,CAChC,MAAM,EACN,wFAAwF,EACxF,UAAU,EACV,KAAK,EAAE,KAAK,EAAE,GAAgB,EAAE,EAAE;IAChC,IAAI,QAAgB,CAAC;IAErB,IAAI,GAAG,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"edit.js","sourceRoot":"","sources":["../../src/edit.ts"],"names":[],"mappings":"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"}
|
package/dist/src/glob.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glob.d.ts","sourceRoot":"","sources":["../../src/glob.ts"],"names":[],"mappings":"
|
|
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 {
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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,
|
|
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
|
package/dist/src/glob.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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,UAAU,EAAoB,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"glob.js","sourceRoot":"","sources":["../../src/glob.ts"],"names":[],"mappings":"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"}
|
package/dist/src/grep.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grep.d.ts","sourceRoot":"","sources":["../../src/grep.ts"],"names":[],"mappings":"
|
|
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 {
|
|
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);
|
package/dist/src/grep.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grep.js","sourceRoot":"","sources":["../../src/grep.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,EAAoB,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"grep.js","sourceRoot":"","sources":["../../src/grep.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.d.ts
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, 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
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
-
|
|
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
|
package/dist/src/index.js.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/src/read.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/read.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,QAAQ;;;;;;;
|
|
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.
|
|
16
|
-
const allowlist = parseAllowlist(ctx.settings.
|
|
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
|
package/dist/src/read.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/read.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,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IACvE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IAC/E,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IACpE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;CAClE,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,QAAQ,GAAG,UAAU,CAChC,MAAM,EACN,0FAA0F,EAC1F,UAAU,EACV,KAAK,EAAE,KAAK,EAAE,GAAgB,EAAE,EAAE;IAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IAEpE,mFAAmF;IACnF,IAAI,GAAG,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/read.ts"],"names":[],"mappings":"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"}
|
package/dist/src/reminder.d.ts
CHANGED
|
@@ -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":"
|
|
1
|
+
{"version":3,"file":"reminder.d.ts","sourceRoot":"","sources":["../../src/reminder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,eAAO,MAAM,YAAY;;;;;CA2CxB,CAAC"}
|
package/dist/src/reminder.js
CHANGED
|
@@ -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 {
|
|
4
|
-
const
|
|
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:
|
|
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
|
-
|
|
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
|
|
29
|
+
error: `Invalid datetime: "${input.scheduled_at}". Use ISO 8601 format with timezone offset suffix.`,
|
|
15
30
|
};
|
|
16
31
|
}
|
|
17
|
-
|
|
18
|
-
const
|
|
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.
|
|
23
|
-
scheduledAt:
|
|
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
|
});
|
package/dist/src/reminder.js.map
CHANGED
|
@@ -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,
|
|
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":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAiBvC,MAAM,aAAa,GAAG,+BAA+B,CAAC;AAEtD,uEAAuE;AACvE,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC5C,CAAC;IACD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACzC,IAAI,MAAM,KAAK,CAAC,CAAC;QAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAE7D,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAChD,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9C,MAAM,WAAW,GAA2B,EAAE,CAAC;IAE/C,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,QAAQ,KAAK,CAAC,CAAC;YAAE,SAAS;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9C,IAAI,GAAG;YAAE,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACpC,CAAC;IACD,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AAC/B,CAAC;AAED,6CAA6C;AAC7C,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAC7C,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE;QAAE,OAAO,MAAM,CAAC;IAEpE,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC9D,IAAI,SAAS,GAAkB,IAAI,CAAC;QAEpC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAChD,CAAC;aAAM,IAAI,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;QAED,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,SAAS;QAEnD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACjD,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;YACxD,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;YACjC,IAAI,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,SAAS;YAEjD,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC;gBAChC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;gBACpE,CAAC,CAAC,SAAS,CAAC;YAEd,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI;gBACJ,WAAW,EAAE,WAAW,CAAC,aAAa,CAAC,IAAI,EAAE;gBAC7C,KAAK;gBACL,IAAI;gBACJ,QAAQ,EAAE,OAAO,CAAC,SAAS,CAAC;aAC7B,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,wBAAwB;QAC1B,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;IAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;IAEvD,MAAM,YAAY,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;IACpD,MAAM,aAAa,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAEtD,MAAM,GAAG,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC3C,KAAK,MAAM,CAAC,IAAI,YAAY;QAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;IAC/D,KAAK,MAAM,CAAC,IAAI,aAAa;QAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;IAEhE,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;AAC3B,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,SAAS,CAAC,GAAW,EAAE,SAAiB;IACtD,MAAM,MAAM,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;IACvC,MAAM,GAAG,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACnC,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC;AAChE,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,qBAAqB,CAAC,MAAqB;IACzD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEnC,MAAM,KAAK,GAAG;QACZ,qBAAqB;QACrB,EAAE;QACF,gGAAgG;QAChG,0EAA0E;QAC1E,EAAE;QACF,yBAAyB;QACzB,yBAAyB;KAC1B,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;IAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;IAEvD,MAAM,OAAO,GAAyB,EAAE,CAAC;IACzC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,eAAe;IACf,KAAK,MAAM,CAAC,IAAI,mBAAmB,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QACnG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IACjC,CAAC;IACD,gGAAgG;IAChG,KAAK,MAAM,CAAC,IAAI,mBAAmB,CAAC,UAAU,CAAC,EAAE,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IACtG,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,mBAAmB;AAEnB,MAAM,CAAC,MAAM,SAAS,GAAG,UAAU,CACjC,OAAO,EACP,kKAAkK,EAClK,CAAC,CAAC,MAAM,CAAC;IACP,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yDAAyD,CAAC;CACtF,CAAC,EACF,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;IACnB,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAC9C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,GAAG,GAAG,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvC,MAAM,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC;QAC9D,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,KAAK,CAAC,KAAK,2BAA2B,SAAS,EAAE,EAAE,CAAC;IAC9F,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;AAChC,CAAC,CACF,CAAC"}
|
|
@@ -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"}
|