wave-agent-sdk 0.10.1 → 0.10.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent.d.ts +6 -0
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +2 -0
- package/dist/builtin-skills/settings/HOOKS.md +95 -0
- package/dist/builtin-skills/settings/SKILL.md +86 -0
- package/dist/core/session.d.ts +1 -1
- package/dist/core/session.d.ts.map +1 -1
- package/dist/core/session.js +1 -1
- package/dist/managers/aiManager.d.ts.map +1 -1
- package/dist/managers/aiManager.js +1 -0
- package/dist/managers/backgroundTaskManager.d.ts +3 -0
- package/dist/managers/backgroundTaskManager.d.ts.map +1 -1
- package/dist/managers/backgroundTaskManager.js +3 -0
- package/dist/managers/permissionManager.d.ts.map +1 -1
- package/dist/managers/permissionManager.js +43 -4
- package/dist/managers/skillManager.d.ts +17 -2
- package/dist/managers/skillManager.d.ts.map +1 -1
- package/dist/managers/skillManager.js +93 -21
- package/dist/managers/slashCommandManager.d.ts.map +1 -1
- package/dist/managers/slashCommandManager.js +7 -0
- package/dist/prompts/index.d.ts +3 -1
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/index.js +4 -0
- package/dist/services/configurationService.d.ts.map +1 -1
- package/dist/services/configurationService.js +1 -0
- package/dist/services/fileWatcher.d.ts.map +1 -1
- package/dist/services/fileWatcher.js +27 -15
- package/dist/services/session.d.ts +9 -2
- package/dist/services/session.d.ts.map +1 -1
- package/dist/services/session.js +77 -7
- package/dist/tools/bashTool.js +3 -3
- package/dist/tools/exitPlanMode.d.ts.map +1 -1
- package/dist/tools/exitPlanMode.js +3 -1
- package/dist/tools/grepTool.d.ts.map +1 -1
- package/dist/tools/grepTool.js +1 -1
- package/dist/tools/lspTool.d.ts.map +1 -1
- package/dist/tools/lspTool.js +47 -15
- package/dist/tools/taskOutputTool.d.ts.map +1 -1
- package/dist/tools/taskOutputTool.js +22 -5
- package/dist/tools/types.d.ts +1 -0
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/types/agent.d.ts +2 -0
- package/dist/types/agent.d.ts.map +1 -1
- package/dist/types/configuration.d.ts +2 -0
- package/dist/types/configuration.d.ts.map +1 -1
- package/dist/types/permissions.d.ts +1 -1
- package/dist/types/permissions.d.ts.map +1 -1
- package/dist/types/skills.d.ts +4 -2
- package/dist/types/skills.d.ts.map +1 -1
- package/dist/utils/configPaths.d.ts +6 -0
- package/dist/utils/configPaths.d.ts.map +1 -1
- package/dist/utils/configPaths.js +23 -2
- package/dist/utils/containerSetup.d.ts.map +1 -1
- package/dist/utils/containerSetup.js +4 -1
- package/dist/utils/gitUtils.d.ts +6 -0
- package/dist/utils/gitUtils.d.ts.map +1 -1
- package/dist/utils/gitUtils.js +22 -0
- package/package.json +2 -2
- package/src/agent.ts +18 -2
- package/src/builtin-skills/settings/HOOKS.md +95 -0
- package/src/builtin-skills/settings/SKILL.md +86 -0
- package/src/core/session.ts +1 -0
- package/src/managers/aiManager.ts +1 -0
- package/src/managers/backgroundTaskManager.ts +11 -1
- package/src/managers/permissionManager.ts +44 -4
- package/src/managers/skillManager.ts +111 -25
- package/src/managers/slashCommandManager.ts +8 -0
- package/src/prompts/index.ts +7 -0
- package/src/services/configurationService.ts +1 -0
- package/src/services/fileWatcher.ts +33 -17
- package/src/services/session.ts +83 -7
- package/src/tools/bashTool.ts +3 -3
- package/src/tools/exitPlanMode.ts +3 -1
- package/src/tools/grepTool.ts +2 -1
- package/src/tools/lspTool.ts +99 -9
- package/src/tools/taskOutputTool.ts +25 -6
- package/src/tools/types.ts +2 -0
- package/src/types/agent.ts +2 -0
- package/src/types/configuration.ts +2 -0
- package/src/types/permissions.ts +2 -1
- package/src/types/skills.ts +4 -2
- package/src/utils/configPaths.ts +28 -2
- package/src/utils/containerSetup.ts +4 -1
- package/src/utils/gitUtils.ts +22 -0
package/dist/agent.d.ts
CHANGED
|
@@ -67,6 +67,9 @@ export declare class Agent {
|
|
|
67
67
|
stdout: string;
|
|
68
68
|
stderr: string;
|
|
69
69
|
status: string;
|
|
70
|
+
outputPath?: string;
|
|
71
|
+
type: string;
|
|
72
|
+
exitCode?: number;
|
|
70
73
|
} | null;
|
|
71
74
|
/** Kill background bash shell */
|
|
72
75
|
killBackgroundShell(id: string): boolean;
|
|
@@ -75,6 +78,9 @@ export declare class Agent {
|
|
|
75
78
|
stdout: string;
|
|
76
79
|
stderr: string;
|
|
77
80
|
status: string;
|
|
81
|
+
outputPath?: string;
|
|
82
|
+
type: string;
|
|
83
|
+
exitCode?: number;
|
|
78
84
|
} | null;
|
|
79
85
|
/** Stop background task */
|
|
80
86
|
stopBackgroundTask(id: string): boolean;
|
package/dist/agent.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAeA,OAAO,EACL,YAAY,EACZ,kBAAkB,EAElB,YAAY,EACb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EACV,OAAO,EAEP,eAAe,EACf,aAAa,EACb,WAAW,EACX,KAAK,EACL,cAAc,EACd,cAAc,EACf,MAAM,kBAAkB,CAAC;AAY1B,qBAAa,KAAK;IAChB,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,SAAS,CAAY;IAE7B,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,qBAAqB,CAAwB;IACrD,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,mBAAmB,CAAsB;IACjD,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,qBAAqB,CAAwB;IACrD,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,oBAAoB,CAAuB;IACnD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,MAAM,CAAU;IAGxB,OAAO,CAAC,OAAO,CAAe;IAG9B,OAAO,CAAC,qBAAqB,CAAc;IAC3C,OAAO,CAAC,kBAAkB,CAAc;IAGjC,gBAAgB,IAAI,aAAa;IAIjC,cAAc,IAAI,WAAW;IAS7B,iBAAiB,IAAI,MAAM;IAI3B,WAAW,IAAI,MAAM,GAAG,SAAS;IAIxC;;;;;;;;OAQG;IACH,OAAO;IAsEP,IAAW,SAAS,IAAI,MAAM,CAE7B;IAED,IAAW,QAAQ,IAAI,OAAO,EAAE,CAE/B;IAED,IAAW,MAAM,IAAI,KAAK,EAAE,CAE3B;IAED,IAAW,eAAe,IAAI,MAAM,CAEnC;IAED,IAAW,iBAAiB,IAAI,MAAM,CAErC;IAED,4BAA4B;IAC5B,IAAW,gBAAgB,IAAI,MAAM,CAEpC;IAED,iCAAiC;IACjC,IAAW,aAAa,IAAI,MAAM,CAEjC;IAED,8BAA8B;IAC9B,IAAW,UAAU,IAAI,MAAM,CAE9B;IAED,mEAAmE;IACtD,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;IAIjD,4BAA4B;IAC5B,IAAW,SAAS,IAAI,OAAO,CAE9B;IAED,qCAAqC;IACrC,IAAW,aAAa,IAAI,OAAO,CAElC;IAED,wCAAwC;IACxC,IAAW,gBAAgB,IAAI,OAAO,CAErC;IAED,uCAAuC;IAChC,wBAAwB,CAC7B,EAAE,EAAE,MAAM,EACV,MAAM,CAAC,EAAE,MAAM,GACd;
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|
package/dist/agent.js
CHANGED
|
@@ -324,6 +324,8 @@ export class Agent {
|
|
|
324
324
|
}
|
|
325
325
|
// Cleanup subagent manager
|
|
326
326
|
this.subagentManager.cleanup();
|
|
327
|
+
// Cleanup skill manager
|
|
328
|
+
await this.skillManager.destroy();
|
|
327
329
|
// Cleanup live configuration reload
|
|
328
330
|
try {
|
|
329
331
|
await this.liveConfigManager.shutdown();
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# Wave Hooks Configuration
|
|
2
|
+
|
|
3
|
+
Hooks allow you to automate tasks when certain events occur in Wave. This document provides detailed guidance on how to configure complex hooks in `settings.json`.
|
|
4
|
+
|
|
5
|
+
## Hook Events
|
|
6
|
+
|
|
7
|
+
Wave supports the following hook events:
|
|
8
|
+
|
|
9
|
+
- `WorktreeCreate`: Triggered when a new worktree is created.
|
|
10
|
+
- `TaskStart`: Triggered when a task starts.
|
|
11
|
+
- `TaskComplete`: Triggered when a task is completed.
|
|
12
|
+
- `TaskError`: Triggered when a task fails.
|
|
13
|
+
- `SessionStart`: Triggered when a new session starts.
|
|
14
|
+
- `SessionEnd`: Triggered when a session ends.
|
|
15
|
+
|
|
16
|
+
## Hook Configuration Structure
|
|
17
|
+
|
|
18
|
+
Hooks are configured in the `hooks` field of `settings.json`. Each event can have multiple hook configurations.
|
|
19
|
+
|
|
20
|
+
```json
|
|
21
|
+
{
|
|
22
|
+
"hooks": {
|
|
23
|
+
"WorktreeCreate": [
|
|
24
|
+
{
|
|
25
|
+
"command": "pnpm install",
|
|
26
|
+
"description": "Install dependencies in new worktree",
|
|
27
|
+
"blocking": true,
|
|
28
|
+
"timeout": 300000
|
|
29
|
+
}
|
|
30
|
+
],
|
|
31
|
+
"TaskComplete": [
|
|
32
|
+
{
|
|
33
|
+
"command": "pnpm test",
|
|
34
|
+
"description": "Run tests after task completion",
|
|
35
|
+
"blocking": false
|
|
36
|
+
}
|
|
37
|
+
]
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Hook Configuration Fields
|
|
43
|
+
|
|
44
|
+
- `command`: The shell command to execute.
|
|
45
|
+
- `description`: A brief description of the hook's purpose.
|
|
46
|
+
- `blocking`: (Optional) Whether the hook should block the main agent's execution (default: `false`).
|
|
47
|
+
- `timeout`: (Optional) Maximum execution time in milliseconds (default: `60000`).
|
|
48
|
+
- `env`: (Optional) Environment variables specific to this hook.
|
|
49
|
+
- `cwd`: (Optional) Working directory for the hook command.
|
|
50
|
+
|
|
51
|
+
## Advanced Hook Examples
|
|
52
|
+
|
|
53
|
+
### 1. Conditional Hooks
|
|
54
|
+
You can use shell logic within the `command` field to create conditional hooks.
|
|
55
|
+
```json
|
|
56
|
+
{
|
|
57
|
+
"hooks": {
|
|
58
|
+
"TaskComplete": [
|
|
59
|
+
{
|
|
60
|
+
"command": "if [ \"$WAVE_TASK_STATUS\" = \"completed\" ]; then pnpm lint; fi",
|
|
61
|
+
"description": "Run linting only on successful task completion"
|
|
62
|
+
}
|
|
63
|
+
]
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### 2. Hook Chaining
|
|
69
|
+
You can chain multiple commands in a single hook or define multiple hooks for the same event.
|
|
70
|
+
```json
|
|
71
|
+
{
|
|
72
|
+
"hooks": {
|
|
73
|
+
"WorktreeCreate": [
|
|
74
|
+
{
|
|
75
|
+
"command": "pnpm install && pnpm build",
|
|
76
|
+
"description": "Install and build in new worktree"
|
|
77
|
+
}
|
|
78
|
+
]
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### 3. Using Environment Variables
|
|
84
|
+
Wave provides several environment variables to hooks:
|
|
85
|
+
- `WAVE_PROJECT_DIR`: The root directory of the project.
|
|
86
|
+
- `WAVE_SESSION_ID`: The current session ID.
|
|
87
|
+
- `WAVE_TASK_ID`: The current task ID (if applicable).
|
|
88
|
+
- `WAVE_TASK_STATUS`: The status of the task (for `TaskComplete` and `TaskError`).
|
|
89
|
+
|
|
90
|
+
## Best Practices
|
|
91
|
+
|
|
92
|
+
- **Keep hooks fast**: Long-running hooks can slow down your workflow, especially if they are `blocking`.
|
|
93
|
+
- **Use descriptive names**: Help yourself and others understand what each hook does.
|
|
94
|
+
- **Test your hooks**: Run the commands manually first to ensure they work as expected.
|
|
95
|
+
- **Use local overrides**: For machine-specific hooks, use `.wave/settings.local.json`.
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: settings
|
|
3
|
+
description: Manage Wave settings and get guidance on settings.json
|
|
4
|
+
allowed-tools: Bash, Read, Write
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Wave Settings Skill
|
|
8
|
+
|
|
9
|
+
This skill helps you manage your Wave configuration and provides guidance on how to use `settings.json`.
|
|
10
|
+
|
|
11
|
+
## What is `settings.json`?
|
|
12
|
+
|
|
13
|
+
`settings.json` is the central configuration file for Wave. It allows you to customize hooks, environment variables, tool permissions, and more.
|
|
14
|
+
|
|
15
|
+
Wave looks for `settings.json` in three scopes:
|
|
16
|
+
1. **User Scope**: Global settings for all projects. Located at `~/.wave/settings.json`.
|
|
17
|
+
2. **Project Scope**: Settings specific to the current project. Located at `.wave/settings.json` in your project root.
|
|
18
|
+
3. **Local Scope**: Local overrides for the current project (not committed to git). Located at `.wave/settings.local.json`.
|
|
19
|
+
|
|
20
|
+
## Common Settings
|
|
21
|
+
|
|
22
|
+
### 1. Hooks
|
|
23
|
+
Hooks allow you to automate tasks when certain events occur (e.g., `WorktreeCreate`, `TaskStart`).
|
|
24
|
+
For detailed hook configuration, see [HOOKS.md](${WAVE_SKILL_DIR}/HOOKS.md).
|
|
25
|
+
|
|
26
|
+
### 2. Environment Variables
|
|
27
|
+
Set environment variables that will be available to all tools and hooks.
|
|
28
|
+
```json
|
|
29
|
+
{
|
|
30
|
+
"env": {
|
|
31
|
+
"NODE_ENV": "development",
|
|
32
|
+
"API_KEY": "your-api-key"
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### 3. Permissions
|
|
38
|
+
Manage tool permissions and define the "Safe Zone".
|
|
39
|
+
```json
|
|
40
|
+
{
|
|
41
|
+
"permissions": {
|
|
42
|
+
"allow": ["Bash", "Read"],
|
|
43
|
+
"deny": ["Write"],
|
|
44
|
+
"defaultMode": "interactive",
|
|
45
|
+
"additionalDirectories": ["/tmp/wave-exports"]
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### 4. Enabled Plugins
|
|
51
|
+
Enable or disable specific plugins.
|
|
52
|
+
```json
|
|
53
|
+
{
|
|
54
|
+
"enabledPlugins": {
|
|
55
|
+
"git-plugin": true,
|
|
56
|
+
"experimental-plugin": false
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### 5. Model and Token Configuration
|
|
62
|
+
Define which AI models Wave should use and set token limits via environment variables.
|
|
63
|
+
```json
|
|
64
|
+
{
|
|
65
|
+
"env": {
|
|
66
|
+
"WAVE_MODEL": "gemini-3-flash",
|
|
67
|
+
"WAVE_FAST_MODEL": "gemini-2.5-flash",
|
|
68
|
+
"WAVE_MAX_INPUT_TOKENS": "100000",
|
|
69
|
+
"WAVE_MAX_OUTPUT_TOKENS": "4096"
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### 6. Other Settings
|
|
75
|
+
- `language`: Preferred language for agent communication (e.g., `"en"`, `"zh"`).
|
|
76
|
+
- `autoMemoryEnabled`: Enable or disable auto-memory (default: `true`).
|
|
77
|
+
|
|
78
|
+
## How to use this skill
|
|
79
|
+
|
|
80
|
+
You can ask me to:
|
|
81
|
+
- "Show my current settings"
|
|
82
|
+
- "Update my project settings to enable auto-memory"
|
|
83
|
+
- "How do I configure a post-commit hook?"
|
|
84
|
+
- "What are the available permission modes?"
|
|
85
|
+
|
|
86
|
+
I will guide you through the process and ensure your configuration is valid.
|
package/dist/core/session.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { listSessions, truncateContent, loadSessionFromJsonl, loadFullMessageThread, deleteSession, } from "../services/session.js";
|
|
1
|
+
export { listSessions, listAllSessions, truncateContent, loadSessionFromJsonl, loadFullMessageThread, deleteSession, } from "../services/session.js";
|
|
2
2
|
export type { SessionMetadata, SessionData } from "../services/session.js";
|
|
3
3
|
//# sourceMappingURL=session.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/core/session.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,eAAe,EACf,oBAAoB,EACpB,qBAAqB,EACrB,aAAa,GACd,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/core/session.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,qBAAqB,EACrB,aAAa,GACd,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC"}
|
package/dist/core/session.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { listSessions, truncateContent, loadSessionFromJsonl, loadFullMessageThread, deleteSession, } from "../services/session.js";
|
|
1
|
+
export { listSessions, listAllSessions, truncateContent, loadSessionFromJsonl, loadFullMessageThread, deleteSession, } from "../services/session.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aiManager.d.ts","sourceRoot":"","sources":["../../src/managers/aiManager.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,aAAa,EACb,WAAW,EACX,KAAK,EAEN,MAAM,mBAAmB,CAAC;AAY3B,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAKlD,MAAM,WAAW,kBAAkB;IACjC,wBAAwB,CAAC,EAAE,CAAC,aAAa,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5D,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACvC;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uEAAuE;IACvE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,kDAAkD;IAClD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,SAAS;IAYlB,OAAO,CAAC,SAAS;IAXZ,SAAS,EAAE,OAAO,CAAS;IAClC,OAAO,CAAC,eAAe,CAAgC;IACvD,OAAO,CAAC,mBAAmB,CAAgC;IAC3D,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,aAAa,CAAC,CAAS;gBAIrB,SAAS,EAAE,SAAS,EAC5B,OAAO,EAAE,gBAAgB;IAU3B,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,KAAK,cAAc,GAEzB;IAED,OAAO,KAAK,aAAa,GAIxB;IAED,OAAO,KAAK,WAAW,GAItB;IAED,OAAO,KAAK,qBAAqB,GAEhC;IAED,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,KAAK,gBAAgB,GAM3B;IAED,OAAO,KAAK,iBAAiB,GAE5B;IAED,OAAO,KAAK,oBAAoB,GAE/B;IAGM,gBAAgB,IAAI,aAAa;IAIjC,cAAc,IAAI,WAAW;IA6B7B,iBAAiB,IAAI,MAAM;IAI3B,WAAW,IAAI,MAAM,GAAG,SAAS;IAIjC,oBAAoB,IAAI,OAAO;IAItC,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,SAAS,CAAqB;IAEtC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAsBvB,YAAY,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI;IAItC,cAAc,IAAI,IAAI;IAuB7B,OAAO,CAAC,qBAAqB;YAsBf,8BAA8B;IAgFrC,gBAAgB,IAAI,OAAO;IAI3B,gBAAgB,CAAC,aAAa,EAAE,OAAO,GAAG,IAAI;IAOrD,OAAO,KAAK,eAAe,GAE1B;IAED,OAAO,KAAK,YAAY,GAEvB;IAEY,aAAa,CACxB,OAAO,GAAE;QACP,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,oEAAoE;QACpE,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,iEAAiE;QACjE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;KACf,GACL,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"aiManager.d.ts","sourceRoot":"","sources":["../../src/managers/aiManager.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,aAAa,EACb,WAAW,EACX,KAAK,EAEN,MAAM,mBAAmB,CAAC;AAY3B,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAKlD,MAAM,WAAW,kBAAkB;IACjC,wBAAwB,CAAC,EAAE,CAAC,aAAa,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5D,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACvC;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uEAAuE;IACvE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,kDAAkD;IAClD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,SAAS;IAYlB,OAAO,CAAC,SAAS;IAXZ,SAAS,EAAE,OAAO,CAAS;IAClC,OAAO,CAAC,eAAe,CAAgC;IACvD,OAAO,CAAC,mBAAmB,CAAgC;IAC3D,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,aAAa,CAAC,CAAS;gBAIrB,SAAS,EAAE,SAAS,EAC5B,OAAO,EAAE,gBAAgB;IAU3B,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,KAAK,cAAc,GAEzB;IAED,OAAO,KAAK,aAAa,GAIxB;IAED,OAAO,KAAK,WAAW,GAItB;IAED,OAAO,KAAK,qBAAqB,GAEhC;IAED,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,KAAK,gBAAgB,GAM3B;IAED,OAAO,KAAK,iBAAiB,GAE5B;IAED,OAAO,KAAK,oBAAoB,GAE/B;IAGM,gBAAgB,IAAI,aAAa;IAIjC,cAAc,IAAI,WAAW;IA6B7B,iBAAiB,IAAI,MAAM;IAI3B,WAAW,IAAI,MAAM,GAAG,SAAS;IAIjC,oBAAoB,IAAI,OAAO;IAItC,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,SAAS,CAAqB;IAEtC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAsBvB,YAAY,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI;IAItC,cAAc,IAAI,IAAI;IAuB7B,OAAO,CAAC,qBAAqB;YAsBf,8BAA8B;IAgFrC,gBAAgB,IAAI,OAAO;IAI3B,gBAAgB,CAAC,aAAa,EAAE,OAAO,GAAG,IAAI;IAOrD,OAAO,KAAK,eAAe,GAE1B;IAED,OAAO,KAAK,YAAY,GAEvB;IAEY,aAAa,CACxB,OAAO,GAAE;QACP,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,oEAAoE;QACpE,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,iEAAiE;QACjE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;KACf,GACL,OAAO,CAAC,IAAI,CAAC;IAkhBhB;;;;OAIG;YACW,gBAAgB;IAiE9B;;;OAGG;YACW,sBAAsB;IA6DpC;;OAEG;YACW,uBAAuB;CAwDtC"}
|
|
@@ -296,6 +296,7 @@ export class AIManager {
|
|
|
296
296
|
isSubagent: !!this.subagentType,
|
|
297
297
|
planMode: planModeOptions,
|
|
298
298
|
autoMemory: autoMemoryOptions,
|
|
299
|
+
permissionMode: currentMode,
|
|
299
300
|
}), // Pass custom system prompt
|
|
300
301
|
maxTokens: maxTokens, // Pass max tokens override
|
|
301
302
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backgroundTaskManager.d.ts","sourceRoot":"","sources":["../../src/managers/backgroundTaskManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAIzD,OAAO,EAAE,cAAc,EAAmB,MAAM,uBAAuB,CAAC;AAGxE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,MAAM,WAAW,8BAA8B;IAC7C,uBAAuB,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,IAAI,CAAC;CAC7D;AAED,MAAM,WAAW,4BAA4B;IAC3C,SAAS,CAAC,EAAE,8BAA8B,CAAC;IAC3C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,qBAAqB;IAO9B,OAAO,CAAC,SAAS;IANnB,OAAO,CAAC,KAAK,CAAqC;IAClD,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,SAAS,CAAiC;IAClD,OAAO,CAAC,OAAO,CAAS;gBAGd,SAAS,EAAE,SAAS,EAC5B,OAAO,EAAE,4BAA4B;IAMvC,OAAO,CAAC,iBAAiB;IAIlB,UAAU,IAAI,MAAM;IAIpB,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAKnC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAI/C,WAAW,IAAI,cAAc,EAAE;IAI/B,UAAU,CACf,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,GACf;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,YAAY,CAAC;QAAC,MAAM,EAAE,MAAM,IAAI,CAAA;KAAE;IAqInD,YAAY,CACjB,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,MAAM,EACf,aAAa,GAAE,MAAW,EAC1B,aAAa,GAAE,MAAW,GACzB,MAAM;IAkGF,SAAS,CACd,EAAE,EAAE,MAAM,EACV,MAAM,CAAC,EAAE,MAAM,GACd;
|
|
1
|
+
{"version":3,"file":"backgroundTaskManager.d.ts","sourceRoot":"","sources":["../../src/managers/backgroundTaskManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAIzD,OAAO,EAAE,cAAc,EAAmB,MAAM,uBAAuB,CAAC;AAGxE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,MAAM,WAAW,8BAA8B;IAC7C,uBAAuB,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,IAAI,CAAC;CAC7D;AAED,MAAM,WAAW,4BAA4B;IAC3C,SAAS,CAAC,EAAE,8BAA8B,CAAC;IAC3C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,qBAAqB;IAO9B,OAAO,CAAC,SAAS;IANnB,OAAO,CAAC,KAAK,CAAqC;IAClD,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,SAAS,CAAiC;IAClD,OAAO,CAAC,OAAO,CAAS;gBAGd,SAAS,EAAE,SAAS,EAC5B,OAAO,EAAE,4BAA4B;IAMvC,OAAO,CAAC,iBAAiB;IAIlB,UAAU,IAAI,MAAM;IAIpB,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAKnC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAI/C,WAAW,IAAI,cAAc,EAAE;IAI/B,UAAU,CACf,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,GACf;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,YAAY,CAAC;QAAC,MAAM,EAAE,MAAM,IAAI,CAAA;KAAE;IAqInD,YAAY,CACjB,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,MAAM,EACf,aAAa,GAAE,MAAW,EAC1B,aAAa,GAAE,MAAW,GACzB,MAAM;IAkGF,SAAS,CACd,EAAE,EAAE,MAAM,EACV,MAAM,CAAC,EAAE,MAAM,GACd;QACD,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,IAAI;IAoCD,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IA+B7B,OAAO,IAAI,IAAI;CAUvB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permissionManager.d.ts","sourceRoot":"","sources":["../../src/managers/permissionManager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EACV,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACf,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAgBhD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"permissionManager.d.ts","sourceRoot":"","sources":["../../src/managers/permissionManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,7 +11,19 @@ import { RESTRICTED_TOOLS } from "../types/permissions.js";
|
|
|
11
11
|
import { splitBashCommand, stripEnvVars, stripRedirections, hasWriteRedirections, getSmartPrefix, DANGEROUS_COMMANDS, } from "../utils/bashParser.js";
|
|
12
12
|
import { isPathInside } from "../utils/pathSafety.js";
|
|
13
13
|
import { BASH_TOOL_NAME, EDIT_TOOL_NAME, WRITE_TOOL_NAME, READ_TOOL_NAME, } from "../constants/tools.js";
|
|
14
|
-
const SAFE_COMMANDS = [
|
|
14
|
+
const SAFE_COMMANDS = [
|
|
15
|
+
"cd",
|
|
16
|
+
"ls",
|
|
17
|
+
"pwd",
|
|
18
|
+
"true",
|
|
19
|
+
"false",
|
|
20
|
+
"grep",
|
|
21
|
+
"rg",
|
|
22
|
+
"cat",
|
|
23
|
+
"head",
|
|
24
|
+
"tail",
|
|
25
|
+
"wc",
|
|
26
|
+
];
|
|
15
27
|
const DEFAULT_ALLOWED_RULES = [
|
|
16
28
|
"Bash(git status*)",
|
|
17
29
|
"Bash(git diff*)",
|
|
@@ -45,7 +57,12 @@ const DEFAULT_ALLOWED_RULES = [
|
|
|
45
57
|
"Bash(whoami*)",
|
|
46
58
|
"Bash(date*)",
|
|
47
59
|
"Bash(uptime*)",
|
|
48
|
-
"Bash(
|
|
60
|
+
"Bash(grep*)",
|
|
61
|
+
"Bash(rg*)",
|
|
62
|
+
"Bash(cat*)",
|
|
63
|
+
"Bash(head*)",
|
|
64
|
+
"Bash(tail*)",
|
|
65
|
+
"Bash(wc*)",
|
|
49
66
|
];
|
|
50
67
|
import { logger } from "../utils/globalLogger.js";
|
|
51
68
|
export class PermissionManager {
|
|
@@ -295,6 +312,16 @@ export class PermissionManager {
|
|
|
295
312
|
if (!this.isRestrictedTool(context.toolName)) {
|
|
296
313
|
return { behavior: "allow" };
|
|
297
314
|
}
|
|
315
|
+
// 2.1 If dontAsk mode, auto-deny restricted tools that were not allowed by rules above
|
|
316
|
+
if (context.permissionMode === "dontAsk") {
|
|
317
|
+
logger?.info("Restricted tool automatically denied in dontAsk mode", {
|
|
318
|
+
toolName: context.toolName,
|
|
319
|
+
});
|
|
320
|
+
return {
|
|
321
|
+
behavior: "deny",
|
|
322
|
+
message: `Tool '${context.toolName}' was automatically denied because 'dontAsk' permission mode is active and no pre-approved rule matches this call.`,
|
|
323
|
+
};
|
|
324
|
+
}
|
|
298
325
|
// 3. If custom callback provided, call it and return result
|
|
299
326
|
if (context.canUseToolCallback) {
|
|
300
327
|
try {
|
|
@@ -492,7 +519,13 @@ export class PermissionManager {
|
|
|
492
519
|
if (cmd === "pwd" ||
|
|
493
520
|
cmd === "true" ||
|
|
494
521
|
cmd === "false" ||
|
|
495
|
-
cmd === "ls"
|
|
522
|
+
cmd === "ls" ||
|
|
523
|
+
cmd === "grep" ||
|
|
524
|
+
cmd === "rg" ||
|
|
525
|
+
cmd === "cat" ||
|
|
526
|
+
cmd === "head" ||
|
|
527
|
+
cmd === "tail" ||
|
|
528
|
+
cmd === "wc") {
|
|
496
529
|
return true;
|
|
497
530
|
}
|
|
498
531
|
if (workdir) {
|
|
@@ -570,7 +603,13 @@ export class PermissionManager {
|
|
|
570
603
|
if (cmd === "pwd" ||
|
|
571
604
|
cmd === "true" ||
|
|
572
605
|
cmd === "false" ||
|
|
573
|
-
cmd === "ls"
|
|
606
|
+
cmd === "ls" ||
|
|
607
|
+
cmd === "grep" ||
|
|
608
|
+
cmd === "rg" ||
|
|
609
|
+
cmd === "cat" ||
|
|
610
|
+
cmd === "head" ||
|
|
611
|
+
cmd === "tail" ||
|
|
612
|
+
cmd === "wc") {
|
|
574
613
|
isSafe = true;
|
|
575
614
|
}
|
|
576
615
|
else {
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import { EventEmitter } from "events";
|
|
1
2
|
import type { SkillManagerOptions, SkillMetadata, Skill, SkillToolArgs, SkillInvocationContext } from "../types/index.js";
|
|
2
3
|
import { Container } from "../utils/container.js";
|
|
3
4
|
/**
|
|
4
5
|
* Manages skill discovery and loading
|
|
5
6
|
*/
|
|
6
|
-
export declare class SkillManager {
|
|
7
|
+
export declare class SkillManager extends EventEmitter {
|
|
7
8
|
private container;
|
|
8
9
|
private personalSkillsPath;
|
|
9
10
|
private scanTimeout;
|
|
@@ -11,11 +12,25 @@ export declare class SkillManager {
|
|
|
11
12
|
private skillMetadata;
|
|
12
13
|
private skillContent;
|
|
13
14
|
private initialized;
|
|
15
|
+
private fileWatcher;
|
|
16
|
+
private watchEnabled;
|
|
14
17
|
constructor(container: Container, options?: SkillManagerOptions);
|
|
15
18
|
/**
|
|
16
19
|
* Initialize the skill manager by discovering available skills
|
|
17
20
|
*/
|
|
18
21
|
initialize(): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* Refresh skills by re-discovering them
|
|
24
|
+
*/
|
|
25
|
+
private refreshSkills;
|
|
26
|
+
/**
|
|
27
|
+
* Setup file watcher for skill directories
|
|
28
|
+
*/
|
|
29
|
+
private setupWatcher;
|
|
30
|
+
/**
|
|
31
|
+
* Cleanup resources
|
|
32
|
+
*/
|
|
33
|
+
destroy(): Promise<void>;
|
|
19
34
|
/**
|
|
20
35
|
* Check if the skill manager is initialized
|
|
21
36
|
*/
|
|
@@ -34,7 +49,7 @@ export declare class SkillManager {
|
|
|
34
49
|
*/
|
|
35
50
|
loadSkill(skillName: string): Promise<Skill | null>;
|
|
36
51
|
/**
|
|
37
|
-
* Discover skills in
|
|
52
|
+
* Discover skills in builtin, personal and project directories
|
|
38
53
|
*/
|
|
39
54
|
private discoverSkills;
|
|
40
55
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skillManager.d.ts","sourceRoot":"","sources":["../../src/managers/skillManager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,mBAAmB,EACnB,aAAa,EACb,KAAK,EAGL,aAAa,EACb,sBAAsB,EACvB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"skillManager.d.ts","sourceRoot":"","sources":["../../src/managers/skillManager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EACV,mBAAmB,EACnB,aAAa,EACb,KAAK,EAGL,aAAa,EACb,sBAAsB,EACvB,MAAM,mBAAmB,CAAC;AAU3B,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAGlD;;GAEG;AACH,qBAAa,YAAa,SAAQ,YAAY;IAY1C,OAAO,CAAC,SAAS;IAXnB,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,aAAa,CAAoC;IACzD,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAmC;IACtD,OAAO,CAAC,YAAY,CAAU;gBAGpB,SAAS,EAAE,SAAS,EAC5B,OAAO,GAAE,mBAAwB;IAUnC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBjC;;OAEG;YACW,aAAa;IA6B3B;;OAEG;YACW,YAAY;IAkC1B;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAO9B;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACH,kBAAkB,IAAI,aAAa,EAAE;IAQrC;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAQzD;;;OAGG;IACG,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAgBzD;;OAEG;YACW,cAAc;IA4B5B;;OAEG;YACW,uBAAuB;IAoFrC;;OAEG;YACW,oBAAoB;IA4BlC;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC;QAC/C,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,sBAAsB,CAAC;QACjC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;KACzB,CAAC;IA8BF;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAC5C;QACE,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,KAAK,CAAC;KACd,GACD;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,SAAS,CAAA;KAAE,CACzC;IA6BD;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAkB3B;;OAEG;YACW,yBAAyB;IASvC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAc7B;;OAEG;IACH,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI;CA0BhE"}
|
|
@@ -1,23 +1,29 @@
|
|
|
1
1
|
import { readdir, stat } from "fs/promises";
|
|
2
2
|
import { join } from "path";
|
|
3
3
|
import { homedir } from "os";
|
|
4
|
+
import { EventEmitter } from "events";
|
|
5
|
+
import { FileWatcherService } from "../services/fileWatcher.js";
|
|
4
6
|
import { parseSkillFile, formatSkillError } from "../utils/skillParser.js";
|
|
5
7
|
import { substituteCommandParameters } from "../utils/commandArgumentParser.js";
|
|
6
8
|
import { parseBashCommands, replaceBashCommandsWithOutput, executeBashCommands, } from "../utils/markdownParser.js";
|
|
9
|
+
import { getBuiltinSkillsDir } from "../utils/configPaths.js";
|
|
7
10
|
import { logger } from "../utils/globalLogger.js";
|
|
8
11
|
/**
|
|
9
12
|
* Manages skill discovery and loading
|
|
10
13
|
*/
|
|
11
|
-
export class SkillManager {
|
|
14
|
+
export class SkillManager extends EventEmitter {
|
|
12
15
|
constructor(container, options = {}) {
|
|
16
|
+
super();
|
|
13
17
|
this.container = container;
|
|
14
18
|
this.skillMetadata = new Map();
|
|
15
19
|
this.skillContent = new Map();
|
|
16
20
|
this.initialized = false;
|
|
21
|
+
this.fileWatcher = null;
|
|
17
22
|
this.personalSkillsPath =
|
|
18
23
|
options.personalSkillsPath || join(homedir(), ".wave", "skills");
|
|
19
24
|
this.scanTimeout = options.scanTimeout || 5000;
|
|
20
25
|
this.workdir = options.workdir || process.cwd();
|
|
26
|
+
this.watchEnabled = options.watch ?? false;
|
|
21
27
|
}
|
|
22
28
|
/**
|
|
23
29
|
* Initialize the skill manager by discovering available skills
|
|
@@ -25,23 +31,9 @@ export class SkillManager {
|
|
|
25
31
|
async initialize() {
|
|
26
32
|
logger?.debug("Initializing SkillManager...");
|
|
27
33
|
try {
|
|
28
|
-
|
|
29
|
-
this.
|
|
30
|
-
|
|
31
|
-
const discovery = await this.discoverSkills();
|
|
32
|
-
// Store discovered skill metadata
|
|
33
|
-
discovery.personalSkills.forEach((skill, name) => {
|
|
34
|
-
this.skillMetadata.set(name, skill);
|
|
35
|
-
});
|
|
36
|
-
discovery.projectSkills.forEach((skill, name) => {
|
|
37
|
-
this.skillMetadata.set(name, skill);
|
|
38
|
-
});
|
|
39
|
-
// Log any discovery errors
|
|
40
|
-
if (discovery.errors.length > 0) {
|
|
41
|
-
logger?.warn(`Found ${discovery.errors.length} skill discovery errors`);
|
|
42
|
-
discovery.errors.forEach((error) => {
|
|
43
|
-
logger?.warn(`Skill error in ${error.skillPath}: ${error.message}`);
|
|
44
|
-
});
|
|
34
|
+
await this.refreshSkills();
|
|
35
|
+
if (this.watchEnabled && !this.fileWatcher) {
|
|
36
|
+
await this.setupWatcher();
|
|
45
37
|
}
|
|
46
38
|
this.initialized = true;
|
|
47
39
|
logger?.debug(`SkillManager initialized with ${this.skillMetadata.size} skills`);
|
|
@@ -51,6 +43,71 @@ export class SkillManager {
|
|
|
51
43
|
throw error;
|
|
52
44
|
}
|
|
53
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* Refresh skills by re-discovering them
|
|
48
|
+
*/
|
|
49
|
+
async refreshSkills() {
|
|
50
|
+
// Clear existing data before discovery
|
|
51
|
+
this.skillMetadata.clear();
|
|
52
|
+
this.skillContent.clear();
|
|
53
|
+
const discovery = await this.discoverSkills();
|
|
54
|
+
// Store discovered skill metadata
|
|
55
|
+
discovery.builtinSkills.forEach((skill, name) => {
|
|
56
|
+
this.skillMetadata.set(name, skill);
|
|
57
|
+
});
|
|
58
|
+
discovery.personalSkills.forEach((skill, name) => {
|
|
59
|
+
this.skillMetadata.set(name, skill);
|
|
60
|
+
});
|
|
61
|
+
discovery.projectSkills.forEach((skill, name) => {
|
|
62
|
+
this.skillMetadata.set(name, skill);
|
|
63
|
+
});
|
|
64
|
+
// Log any discovery errors
|
|
65
|
+
if (discovery.errors.length > 0) {
|
|
66
|
+
logger?.warn(`Found ${discovery.errors.length} skill discovery errors`);
|
|
67
|
+
discovery.errors.forEach((error) => {
|
|
68
|
+
logger?.warn(`Skill error in ${error.skillPath}: ${error.message}`);
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
this.emit("refreshed", Array.from(this.skillMetadata.values()));
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Setup file watcher for skill directories
|
|
75
|
+
*/
|
|
76
|
+
async setupWatcher() {
|
|
77
|
+
if (this.fileWatcher) {
|
|
78
|
+
await this.fileWatcher.cleanup();
|
|
79
|
+
}
|
|
80
|
+
this.fileWatcher = new FileWatcherService(logger);
|
|
81
|
+
const pathsToWatch = [
|
|
82
|
+
this.personalSkillsPath,
|
|
83
|
+
join(this.workdir, ".wave", "skills"),
|
|
84
|
+
];
|
|
85
|
+
logger?.debug(`Setting up skill watcher for: ${pathsToWatch.join(", ")}`);
|
|
86
|
+
for (const pathToWatch of pathsToWatch) {
|
|
87
|
+
await this.fileWatcher.watchFile(pathToWatch, async (event) => {
|
|
88
|
+
if (event.path.endsWith("SKILL.md") ||
|
|
89
|
+
event.type === "delete" ||
|
|
90
|
+
event.type === "create") {
|
|
91
|
+
logger?.debug(`Skill change detected (${event.type}): ${event.path}. Refreshing skills...`);
|
|
92
|
+
try {
|
|
93
|
+
await this.refreshSkills();
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
logger?.error("Failed to refresh skills after change:", error);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Cleanup resources
|
|
104
|
+
*/
|
|
105
|
+
async destroy() {
|
|
106
|
+
if (this.fileWatcher) {
|
|
107
|
+
await this.fileWatcher.cleanup();
|
|
108
|
+
this.fileWatcher = null;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
54
111
|
/**
|
|
55
112
|
* Check if the skill manager is initialized
|
|
56
113
|
*/
|
|
@@ -93,15 +150,21 @@ export class SkillManager {
|
|
|
93
150
|
return null;
|
|
94
151
|
}
|
|
95
152
|
/**
|
|
96
|
-
* Discover skills in
|
|
153
|
+
* Discover skills in builtin, personal and project directories
|
|
97
154
|
*/
|
|
98
155
|
async discoverSkills() {
|
|
156
|
+
const builtinCollection = await this.discoverSkillCollection(getBuiltinSkillsDir(), "builtin");
|
|
99
157
|
const personalCollection = await this.discoverSkillCollection(this.personalSkillsPath, "personal");
|
|
100
158
|
const projectCollection = await this.discoverSkillCollection(this.workdir, "project");
|
|
101
159
|
return {
|
|
160
|
+
builtinSkills: builtinCollection.skills,
|
|
102
161
|
personalSkills: personalCollection.skills,
|
|
103
162
|
projectSkills: projectCollection.skills,
|
|
104
|
-
errors: [
|
|
163
|
+
errors: [
|
|
164
|
+
...builtinCollection.errors,
|
|
165
|
+
...personalCollection.errors,
|
|
166
|
+
...projectCollection.errors,
|
|
167
|
+
],
|
|
105
168
|
};
|
|
106
169
|
}
|
|
107
170
|
/**
|
|
@@ -114,7 +177,16 @@ export class SkillManager {
|
|
|
114
177
|
skills: new Map(),
|
|
115
178
|
errors: [],
|
|
116
179
|
};
|
|
117
|
-
|
|
180
|
+
let skillsPath;
|
|
181
|
+
if (type === "personal") {
|
|
182
|
+
skillsPath = basePath;
|
|
183
|
+
}
|
|
184
|
+
else if (type === "builtin") {
|
|
185
|
+
skillsPath = basePath;
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
skillsPath = join(basePath, ".wave", "skills");
|
|
189
|
+
}
|
|
118
190
|
try {
|
|
119
191
|
const skillDirs = await this.findSkillDirectories(skillsPath);
|
|
120
192
|
logger?.debug(`Found ${skillDirs.length} potential skill directories in ${skillsPath}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slashCommandManager.d.ts","sourceRoot":"","sources":["../../src/managers/slashCommandManager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAQ1E,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAQlD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAIxD,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,mBAAmB;IAO5B,OAAO,CAAC,SAAS;IANnB,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,cAAc,CAAyC;IAC/D,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,OAAO,CAAS;gBAGd,SAAS,EAAE,SAAS,EAC5B,OAAO,EAAE,0BAA0B;IAK9B,UAAU,IAAI,IAAI;
|
|
1
|
+
{"version":3,"file":"slashCommandManager.d.ts","sourceRoot":"","sources":["../../src/managers/slashCommandManager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAQ1E,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAQlD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAIxD,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,mBAAmB;IAO5B,OAAO,CAAC,SAAS;IANnB,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,cAAc,CAAyC;IAC/D,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,OAAO,CAAS;gBAGd,SAAS,EAAE,SAAS,EAC5B,OAAO,EAAE,0BAA0B;IAK9B,UAAU,IAAI,IAAI;IAazB,OAAO,KAAK,cAAc,GAEzB;IAED,OAAO,KAAK,SAAS,GAEpB;IAED,OAAO,KAAK,qBAAqB,GAEhC;IAED,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,KAAK,YAAY,GAEvB;IAED,OAAO,CAAC,yBAAyB;IAoBjC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA4C1B;;OAEG;IACI,qBAAqB,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI;IA2E3D;;OAEG;IACI,sBAAsB,CAC3B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,kBAAkB,EAAE,GAC7B,IAAI;IA2CP;;OAEG;IACI,oBAAoB,IAAI,IAAI;IAWnC;;OAEG;IACI,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAInD;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;OAEG;IACI,WAAW,IAAI,YAAY,EAAE;IAIpC;;OAEG;IACI,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAI9D;;OAEG;IACU,cAAc,CACzB,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,OAAO,CAAC;IAenB;;;OAGG;IACI,4BAA4B,CAAC,KAAK,EAAE,MAAM,GAAG;QAClD,OAAO,EAAE,OAAO,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf;IAeD;;OAEG;IACI,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI7C;;OAEG;IACI,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAI1E;;OAEG;IACI,iBAAiB,IAAI,kBAAkB,EAAE;IAIhD;;OAEG;YACW,+BAA+B;IAsD7C;;OAEG;IACI,mBAAmB,IAAI,IAAI;CAInC"}
|
|
@@ -14,6 +14,13 @@ export class SlashCommandManager {
|
|
|
14
14
|
initialize() {
|
|
15
15
|
this.initializeBuiltinCommands();
|
|
16
16
|
this.loadCustomCommands();
|
|
17
|
+
// Listen for skill refreshes and update skill commands
|
|
18
|
+
const skillManager = this.container.get("SkillManager");
|
|
19
|
+
if (skillManager) {
|
|
20
|
+
skillManager.on("refreshed", (skills) => {
|
|
21
|
+
this.registerSkillCommands(skills);
|
|
22
|
+
});
|
|
23
|
+
}
|
|
17
24
|
}
|
|
18
25
|
get messageManager() {
|
|
19
26
|
return this.container.get("MessageManager");
|