wave-agent-sdk 0.13.4 → 0.13.6
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/builtin/skills/settings/HOOKS.md +25 -0
- package/builtin/skills/settings/MCP.md +22 -0
- package/builtin/skills/settings/SKILL.md +4 -1
- package/dist/agent.d.ts +21 -0
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +102 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/managers/aiManager.d.ts +5 -0
- package/dist/managers/aiManager.d.ts.map +1 -1
- package/dist/managers/aiManager.js +19 -4
- package/dist/managers/bangManager.d.ts +1 -0
- package/dist/managers/bangManager.d.ts.map +1 -1
- package/dist/managers/bangManager.js +1 -0
- package/dist/managers/hookManager.d.ts +5 -1
- package/dist/managers/hookManager.d.ts.map +1 -1
- package/dist/managers/hookManager.js +55 -5
- package/dist/managers/lspManager.d.ts.map +1 -1
- package/dist/managers/lspManager.js +17 -2
- package/dist/managers/mcpManager.d.ts.map +1 -1
- package/dist/managers/mcpManager.js +20 -6
- package/dist/managers/messageManager.d.ts.map +1 -1
- package/dist/managers/messageManager.js +22 -0
- package/dist/managers/messageQueue.d.ts +20 -0
- package/dist/managers/messageQueue.d.ts.map +1 -0
- package/dist/managers/messageQueue.js +29 -0
- package/dist/managers/permissionManager.d.ts +5 -7
- package/dist/managers/permissionManager.d.ts.map +1 -1
- package/dist/managers/permissionManager.js +27 -22
- package/dist/managers/pluginManager.d.ts.map +1 -1
- package/dist/managers/pluginManager.js +5 -3
- package/dist/managers/skillManager.d.ts.map +1 -1
- package/dist/managers/skillManager.js +5 -0
- package/dist/managers/slashCommandManager.d.ts.map +1 -1
- package/dist/managers/slashCommandManager.js +12 -1
- package/dist/managers/subagentManager.d.ts.map +1 -1
- package/dist/managers/subagentManager.js +6 -18
- package/dist/services/autoMemoryService.d.ts.map +1 -1
- package/dist/services/autoMemoryService.js +1 -0
- package/dist/services/hook.d.ts +4 -0
- package/dist/services/hook.d.ts.map +1 -1
- package/dist/services/hook.js +10 -0
- package/dist/services/interactionService.d.ts.map +1 -1
- package/dist/services/interactionService.js +3 -0
- package/dist/services/pluginLoader.d.ts.map +1 -1
- package/dist/services/pluginLoader.js +3 -1
- package/dist/tools/bashTool.d.ts.map +1 -1
- package/dist/tools/bashTool.js +33 -2
- package/dist/tools/types.d.ts +2 -0
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/types/agent.d.ts +4 -0
- package/dist/types/agent.d.ts.map +1 -1
- package/dist/types/hooks.d.ts +6 -1
- package/dist/types/hooks.d.ts.map +1 -1
- package/dist/types/hooks.js +4 -0
- package/dist/types/lsp.d.ts +2 -0
- package/dist/types/lsp.d.ts.map +1 -1
- package/dist/types/mcp.d.ts +2 -0
- package/dist/types/mcp.d.ts.map +1 -1
- package/dist/types/skills.d.ts +1 -0
- package/dist/types/skills.d.ts.map +1 -1
- package/dist/utils/containerSetup.d.ts.map +1 -1
- package/dist/utils/containerSetup.js +4 -1
- package/package.json +1 -1
- package/src/agent.ts +122 -2
- package/src/index.ts +1 -0
- package/src/managers/aiManager.ts +35 -5
- package/src/managers/bangManager.ts +2 -0
- package/src/managers/hookManager.ts +78 -19
- package/src/managers/lspManager.ts +23 -2
- package/src/managers/mcpManager.ts +29 -6
- package/src/managers/messageManager.ts +38 -0
- package/src/managers/messageQueue.ts +41 -0
- package/src/managers/permissionManager.ts +32 -26
- package/src/managers/pluginManager.ts +5 -3
- package/src/managers/skillManager.ts +9 -0
- package/src/managers/slashCommandManager.ts +16 -4
- package/src/managers/subagentManager.ts +10 -25
- package/src/services/autoMemoryService.ts +1 -0
- package/src/services/hook.ts +15 -0
- package/src/services/interactionService.ts +3 -0
- package/src/services/pluginLoader.ts +3 -1
- package/src/tools/bashTool.ts +39 -2
- package/src/tools/types.ts +2 -0
- package/src/types/agent.ts +4 -0
- package/src/types/hooks.ts +13 -2
- package/src/types/lsp.ts +2 -0
- package/src/types/mcp.ts +2 -0
- package/src/types/skills.ts +1 -0
- package/src/utils/containerSetup.ts +5 -1
|
@@ -12,6 +12,9 @@ export class InteractionService {
|
|
|
12
12
|
const { isValid, commandId, args } = slashCommandManager.parseAndValidateSlashCommand(command);
|
|
13
13
|
if (isValid && commandId !== undefined) {
|
|
14
14
|
// Execute valid slash command
|
|
15
|
+
// Note: executeCommand sets isLoading early (e.g., custom commands set it
|
|
16
|
+
// before bash execution). sendAIMessage() no longer guards against isLoading,
|
|
17
|
+
// so callers can safely set it early without blocking subsequent AI calls.
|
|
15
18
|
await slashCommandManager.executeCommand(commandId, args);
|
|
16
19
|
return;
|
|
17
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pluginLoader.d.ts","sourceRoot":"","sources":["../../src/services/pluginLoader.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,KAAK,EACL,SAAS,EACT,SAAS,EACT,wBAAwB,EACzB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"pluginLoader.d.ts","sourceRoot":"","sources":["../../src/services/pluginLoader.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,KAAK,EACL,SAAS,EACT,SAAS,EACT,wBAAwB,EACzB,MAAM,mBAAmB,CAAC;AAK3B,qBAAa,YAAY;IACvB;;;OAGG;WACU,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IA6CtE;;;OAGG;IACH,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,kBAAkB,EAAE;IAK7D;;;OAGG;WACU,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAuC7D;;OAEG;WACU,aAAa,CACxB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAUjC;;OAEG;WACU,aAAa,CACxB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAUjC;;OAEG;WACU,eAAe,CAC1B,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,wBAAwB,GAAG,SAAS,CAAC;IAUhD;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;CAgBhC"}
|
|
@@ -2,6 +2,7 @@ import * as fs from "fs/promises";
|
|
|
2
2
|
import * as path from "path";
|
|
3
3
|
import { scanCommandsDirectory } from "../utils/customCommands.js";
|
|
4
4
|
import { parseSkillFile } from "../utils/skillParser.js";
|
|
5
|
+
import { resolveMcpConfig } from "../managers/mcpManager.js";
|
|
5
6
|
export class PluginLoader {
|
|
6
7
|
/**
|
|
7
8
|
* Load and validate a plugin manifest from a directory
|
|
@@ -70,6 +71,7 @@ export class PluginLoader {
|
|
|
70
71
|
skills.push({
|
|
71
72
|
...parsed.skillMetadata,
|
|
72
73
|
type: "project", // Plugin skills are treated as project skills
|
|
74
|
+
pluginRoot: pluginPath,
|
|
73
75
|
content: parsed.content,
|
|
74
76
|
frontmatter: parsed.frontmatter,
|
|
75
77
|
isValid: parsed.isValid,
|
|
@@ -108,7 +110,7 @@ export class PluginLoader {
|
|
|
108
110
|
const mcpPath = path.join(pluginPath, ".mcp.json");
|
|
109
111
|
try {
|
|
110
112
|
const content = await fs.readFile(mcpPath, "utf-8");
|
|
111
|
-
return JSON.parse(content);
|
|
113
|
+
return resolveMcpConfig(JSON.parse(content));
|
|
112
114
|
}
|
|
113
115
|
catch {
|
|
114
116
|
return undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bashTool.d.ts","sourceRoot":"","sources":["../../src/tools/bashTool.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAA2B,MAAM,YAAY,CAAC;AAwCtE;;GAEG;AACH,eAAO,MAAM,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"bashTool.d.ts","sourceRoot":"","sources":["../../src/tools/bashTool.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAA2B,MAAM,YAAY,CAAC;AAwCtE;;GAEG;AACH,eAAO,MAAM,QAAQ,EAAE,UA+ctB,CAAC"}
|
package/dist/tools/bashTool.js
CHANGED
|
@@ -194,7 +194,10 @@ Use the gh command via the Bash tool for GitHub-related tasks including working
|
|
|
194
194
|
}
|
|
195
195
|
// Foreground execution (original behavior)
|
|
196
196
|
return new Promise((resolve) => {
|
|
197
|
-
|
|
197
|
+
// Create a temporary file to store the CWD
|
|
198
|
+
const tempCwdFile = path.join(os.tmpdir(), `wave_cwd_${Date.now()}_${Math.random().toString(36).substring(2, 11)}.tmp`);
|
|
199
|
+
const wrappedCommand = `${command} && pwd -P >| ${tempCwdFile}`;
|
|
200
|
+
const child = spawn(wrappedCommand, {
|
|
198
201
|
shell: true,
|
|
199
202
|
stdio: "pipe",
|
|
200
203
|
cwd: context.workdir,
|
|
@@ -340,7 +343,7 @@ Use the gh command via the Bash tool for GitHub-related tasks including working
|
|
|
340
343
|
updateRealtimeResults();
|
|
341
344
|
}
|
|
342
345
|
});
|
|
343
|
-
child.on("exit", (code) => {
|
|
346
|
+
child.on("exit", async (code) => {
|
|
344
347
|
isFinished = true;
|
|
345
348
|
if (context.foregroundTaskManager) {
|
|
346
349
|
context.foregroundTaskManager.unregisterForegroundTask(foregroundTaskId);
|
|
@@ -349,6 +352,34 @@ Use the gh command via the Bash tool for GitHub-related tasks including working
|
|
|
349
352
|
if (timeoutHandle) {
|
|
350
353
|
clearTimeout(timeoutHandle);
|
|
351
354
|
}
|
|
355
|
+
// Read the new CWD from the temporary file
|
|
356
|
+
let newCwd;
|
|
357
|
+
try {
|
|
358
|
+
if (fs.existsSync(tempCwdFile)) {
|
|
359
|
+
newCwd = fs.readFileSync(tempCwdFile, "utf8").trim();
|
|
360
|
+
// Validate the path exists before calling the callback
|
|
361
|
+
fs.accessSync(newCwd, fs.constants.F_OK);
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
catch (fileError) {
|
|
365
|
+
logger.warn(`Could not read or validate new CWD from temp file ${tempCwdFile}:`, fileError);
|
|
366
|
+
newCwd = undefined;
|
|
367
|
+
}
|
|
368
|
+
finally {
|
|
369
|
+
// Ensure temp file is cleaned up even if reading fails
|
|
370
|
+
try {
|
|
371
|
+
if (fs.existsSync(tempCwdFile)) {
|
|
372
|
+
fs.unlinkSync(tempCwdFile);
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
catch (fileError) {
|
|
376
|
+
logger.error("Failed to clean up temp CWD file:", fileError);
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
// If CWD changed, call the onCwdChange callback
|
|
380
|
+
if (newCwd && newCwd !== context.workdir && context.onCwdChange) {
|
|
381
|
+
context.onCwdChange(newCwd);
|
|
382
|
+
}
|
|
352
383
|
const exitCode = code ?? 0;
|
|
353
384
|
const combinedOutput = outputBuffer + (errorBuffer ? "\n" + errorBuffer : "");
|
|
354
385
|
// Handle large output by truncation and persistence if needed
|
package/dist/tools/types.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types/agent.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ClientOptions } from "openai";
|
|
2
|
+
import type { QueuedMessage } from "../managers/messageQueue.js";
|
|
2
3
|
import type { Message, Logger, PermissionMode, PermissionCallback, ILspManager, PluginConfig, BackgroundTask } from "./index.js";
|
|
3
4
|
import type { MessageManagerCallbacks } from "../managers/messageManager.js";
|
|
4
5
|
import type { BackgroundTaskManagerCallbacks } from "../managers/backgroundTaskManager.js";
|
|
@@ -76,5 +77,8 @@ export interface AgentCallbacks extends MessageManagerCallbacks, BackgroundTaskM
|
|
|
76
77
|
onModelChange?: (model: string) => void;
|
|
77
78
|
onConfiguredModelsChange?: (models: string[]) => void;
|
|
78
79
|
onLoadingChange?: (loading: boolean) => void;
|
|
80
|
+
onCommandRunningChange?: (running: boolean) => void;
|
|
81
|
+
onWorkdirChange?: (newCwd: string) => void;
|
|
82
|
+
onQueuedMessagesChange?: (messages: QueuedMessage[]) => void;
|
|
79
83
|
}
|
|
80
84
|
//# sourceMappingURL=agent.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/types/agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,KAAK,EACV,OAAO,EACP,MAAM,EACN,cAAc,EACd,kBAAkB,EAClB,WAAW,EACX,YAAY,EACZ,cAAc,EACf,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,sCAAsC,CAAC;AAC3F,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAE/E;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAE3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,YAAY,CAAC,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IAC7C,KAAK,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IACrB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iFAAiF;IACjF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6CAA6C;IAC7C,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,gCAAgC;IAChC,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,uEAAuE;IACvE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,qFAAqF;IACrF,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB,oCAAoC;IACpC,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,4BAA4B;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8CAA8C;IAC9C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,cACf,SAAQ,uBAAuB,EAC7B,8BAA8B,EAC9B,mBAAmB,EACnB,wBAAwB;IAC1B,uBAAuB,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,IAAI,CAAC;IAC5D,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,YAAY,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;IAC7D,sBAAsB,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IACxD,iCAAiC,CAAC,EAAE,CAClC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,KACX,IAAI,CAAC;IACV,uBAAuB,CAAC,EAAE,MAAM,IAAI,CAAC;IACrC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,wBAAwB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACtD,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/types/agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EACV,OAAO,EACP,MAAM,EACN,cAAc,EACd,kBAAkB,EAClB,WAAW,EACX,YAAY,EACZ,cAAc,EACf,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,sCAAsC,CAAC;AAC3F,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAE/E;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAE3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,YAAY,CAAC,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IAC7C,KAAK,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IACrB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iFAAiF;IACjF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6CAA6C;IAC7C,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,gCAAgC;IAChC,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,uEAAuE;IACvE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,qFAAqF;IACrF,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB,oCAAoC;IACpC,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,4BAA4B;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8CAA8C;IAC9C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,cACf,SAAQ,uBAAuB,EAC7B,8BAA8B,EAC9B,mBAAmB,EACnB,wBAAwB;IAC1B,uBAAuB,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,IAAI,CAAC;IAC5D,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,YAAY,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;IAC7D,sBAAsB,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IACxD,iCAAiC,CAAC,EAAE,CAClC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,KACX,IAAI,CAAC;IACV,uBAAuB,CAAC,EAAE,MAAM,IAAI,CAAC;IACrC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,wBAAwB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACtD,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,sBAAsB,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACpD,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,sBAAsB,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,IAAI,CAAC;CAC9D"}
|
package/dist/types/hooks.d.ts
CHANGED
|
@@ -5,12 +5,13 @@
|
|
|
5
5
|
* enabling automated actions at specific workflow points.
|
|
6
6
|
*/
|
|
7
7
|
export type { WaveConfiguration, HookConfiguration, PartialHookConfiguration, HookConfigurationRecord, } from "./configuration.js";
|
|
8
|
-
export type HookEvent = "PreToolUse" | "PostToolUse" | "UserPromptSubmit" | "Stop" | "SubagentStop" | "PermissionRequest" | "WorktreeCreate";
|
|
8
|
+
export type HookEvent = "PreToolUse" | "PostToolUse" | "UserPromptSubmit" | "Stop" | "SubagentStop" | "PermissionRequest" | "WorktreeCreate" | "CwdChanged";
|
|
9
9
|
export interface HookCommand {
|
|
10
10
|
type: "command";
|
|
11
11
|
command: string;
|
|
12
12
|
async?: boolean;
|
|
13
13
|
timeout?: number;
|
|
14
|
+
pluginRoot?: string;
|
|
14
15
|
}
|
|
15
16
|
export interface HookEventConfig {
|
|
16
17
|
matcher?: string;
|
|
@@ -64,6 +65,8 @@ export interface HookJsonInput {
|
|
|
64
65
|
user_prompt?: string;
|
|
65
66
|
subagent_type?: string;
|
|
66
67
|
name?: string;
|
|
68
|
+
old_cwd?: string;
|
|
69
|
+
new_cwd?: string;
|
|
67
70
|
}
|
|
68
71
|
export interface ExtendedHookExecutionContext extends HookExecutionContext {
|
|
69
72
|
sessionId?: string;
|
|
@@ -75,6 +78,8 @@ export interface ExtendedHookExecutionContext extends HookExecutionContext {
|
|
|
75
78
|
userPrompt?: string;
|
|
76
79
|
subagentType?: string;
|
|
77
80
|
worktreeName?: string;
|
|
81
|
+
oldCwd?: string;
|
|
82
|
+
newCwd?: string;
|
|
78
83
|
}
|
|
79
84
|
export interface HookEnvironment {
|
|
80
85
|
WAVE_PROJECT_DIR: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/types/hooks.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,YAAY,EACV,iBAAiB,EACjB,iBAAiB,EACjB,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,oBAAoB,CAAC;AAG5B,MAAM,MAAM,SAAS,GACjB,YAAY,GACZ,aAAa,GACb,kBAAkB,GAClB,MAAM,GACN,cAAc,GACd,mBAAmB,GACnB,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/types/hooks.ts"],"names":[],"mappings":"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"}
|
package/dist/types/hooks.js
CHANGED
|
@@ -33,6 +33,7 @@ export function isValidHookEvent(event) {
|
|
|
33
33
|
"SubagentStop",
|
|
34
34
|
"PermissionRequest",
|
|
35
35
|
"WorktreeCreate",
|
|
36
|
+
"CwdChanged",
|
|
36
37
|
].includes(event);
|
|
37
38
|
}
|
|
38
39
|
export function isValidHookCommand(cmd) {
|
|
@@ -52,6 +53,9 @@ export function isValidHookCommand(cmd) {
|
|
|
52
53
|
if ("timeout" in hookCmd && typeof hookCmd.timeout !== "number") {
|
|
53
54
|
return false;
|
|
54
55
|
}
|
|
56
|
+
if ("pluginRoot" in hookCmd && typeof hookCmd.pluginRoot !== "string") {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
55
59
|
return true;
|
|
56
60
|
}
|
|
57
61
|
export function isValidHookEventConfig(config) {
|
package/dist/types/lsp.d.ts
CHANGED
|
@@ -14,6 +14,8 @@ export interface LspServerConfig {
|
|
|
14
14
|
shutdownTimeout?: number;
|
|
15
15
|
restartOnCrash?: boolean;
|
|
16
16
|
maxRestarts?: number;
|
|
17
|
+
/** Internal: plugin directory path when the server is registered by a plugin */
|
|
18
|
+
pluginRoot?: string;
|
|
17
19
|
}
|
|
18
20
|
export interface LspConfig {
|
|
19
21
|
[language: string]: LspServerConfig;
|
package/dist/types/lsp.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lsp.d.ts","sourceRoot":"","sources":["../../src/types/lsp.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,SAAS,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"lsp.d.ts","sourceRoot":"","sources":["../../src/types/lsp.ts"],"names":[],"mappings":"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"}
|
package/dist/types/mcp.d.ts
CHANGED
|
@@ -8,6 +8,8 @@ export interface McpServerConfig {
|
|
|
8
8
|
env?: Record<string, string>;
|
|
9
9
|
url?: string;
|
|
10
10
|
headers?: Record<string, string>;
|
|
11
|
+
/** Internal: plugin directory path when the server is registered by a plugin */
|
|
12
|
+
pluginRoot?: string;
|
|
11
13
|
}
|
|
12
14
|
export interface McpConfig {
|
|
13
15
|
mcpServers: Record<string, McpServerConfig>;
|
package/dist/types/mcp.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/types/mcp.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/types/mcp.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,gFAAgF;IAChF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,EAAE,cAAc,GAAG,WAAW,GAAG,YAAY,GAAG,OAAO,CAAC;IAC9D,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
|
package/dist/types/skills.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/types/skills.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/types/skills.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"containerSetup.d.ts","sourceRoot":"","sources":["../../src/utils/containerSetup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"containerSetup.d.ts","sourceRoot":"","sources":["../../src/utils/containerSetup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAwB3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAM3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EACV,cAAc,EACd,KAAK,EACL,IAAI,EACJ,cAAc,EAEf,MAAM,mBAAmB,CAAC;AAI3B,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,oBAAoB,EAAE,oBAAoB,CAAC;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,OAAO,CAAC;IAGhB,uBAAuB,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,IAAI,CAAC;IAC3D,aAAa,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;IACvC,sBAAsB,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IACvD,wBAAwB,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IACzD,iBAAiB,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IAClD,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAED,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,0BAA0B,GACvC,SAAS,CAuQX"}
|
|
@@ -2,6 +2,7 @@ import { Container } from "./container.js";
|
|
|
2
2
|
import { ForegroundTaskManager } from "../managers/foregroundTaskManager.js";
|
|
3
3
|
import { BackgroundTaskManager } from "../managers/backgroundTaskManager.js";
|
|
4
4
|
import { NotificationQueue } from "../managers/notificationQueue.js";
|
|
5
|
+
import { MessageQueue } from "../managers/messageQueue.js";
|
|
5
6
|
import { TaskManager } from "../services/taskManager.js";
|
|
6
7
|
import { MessageManager } from "../managers/messageManager.js";
|
|
7
8
|
import { AIManager } from "../managers/aiManager.js";
|
|
@@ -32,8 +33,11 @@ export function setupAgentContainer(setupOptions) {
|
|
|
32
33
|
const callbacks = options.callbacks || {};
|
|
33
34
|
const container = new Container();
|
|
34
35
|
container.register("AgentOptions", options);
|
|
36
|
+
container.register("Workdir", workdir);
|
|
35
37
|
const notificationQueue = new NotificationQueue();
|
|
36
38
|
container.register("NotificationQueue", notificationQueue);
|
|
39
|
+
const messageQueue = new MessageQueue();
|
|
40
|
+
container.register("MessageQueue", messageQueue);
|
|
37
41
|
const foregroundTaskManager = new ForegroundTaskManager(container);
|
|
38
42
|
container.register("ForegroundTaskManager", foregroundTaskManager);
|
|
39
43
|
container.register("ConfigurationService", configurationService);
|
|
@@ -89,7 +93,6 @@ export function setupAgentContainer(setupOptions) {
|
|
|
89
93
|
const lspManager = options.lspManager || new LspManager(container);
|
|
90
94
|
container.register("LspManager", lspManager);
|
|
91
95
|
const permissionManager = new PermissionManager(container, {
|
|
92
|
-
workdir,
|
|
93
96
|
instanceAllowedRules: options.allowedTools,
|
|
94
97
|
instanceDeniedRules: options.disallowedTools,
|
|
95
98
|
});
|
package/package.json
CHANGED
package/src/agent.ts
CHANGED
|
@@ -10,6 +10,7 @@ import { BangManager } from "./managers/bangManager.js";
|
|
|
10
10
|
import { CronManager } from "./managers/cronManager.js";
|
|
11
11
|
import { BackgroundTaskManager } from "./managers/backgroundTaskManager.js";
|
|
12
12
|
import { NotificationQueue } from "./managers/notificationQueue.js";
|
|
13
|
+
import { MessageQueue, type QueuedMessage } from "./managers/messageQueue.js";
|
|
13
14
|
import { SlashCommandManager } from "./managers/slashCommandManager.js";
|
|
14
15
|
import { PluginManager } from "./managers/pluginManager.js";
|
|
15
16
|
import { HookManager } from "./managers/hookManager.js";
|
|
@@ -67,6 +68,8 @@ export class Agent {
|
|
|
67
68
|
private hookManager: HookManager; // Add hooks manager instance
|
|
68
69
|
private reversionManager: ReversionManager;
|
|
69
70
|
private notificationQueue: NotificationQueue; // Add notification queue instance
|
|
71
|
+
private messageQueue: MessageQueue; // Add message queue instance
|
|
72
|
+
private pendingNotificationPromises: Promise<void>[] = []; // Track pending notification processing
|
|
70
73
|
private memoryRuleManager: MemoryRuleManager; // Add memory rule manager instance
|
|
71
74
|
private liveConfigManager: LiveConfigManager; // Add live configuration manager
|
|
72
75
|
private taskManager: TaskManager;
|
|
@@ -197,13 +200,57 @@ export class Agent {
|
|
|
197
200
|
this.bangManager = this.container.get("BangManager")!;
|
|
198
201
|
this.cronManager = this.container.get("CronManager")!;
|
|
199
202
|
this.notificationQueue = this.container.get("NotificationQueue")!;
|
|
203
|
+
this.messageQueue = this.container.get("MessageQueue")!;
|
|
200
204
|
|
|
201
205
|
// Wire up notification queue to trigger AI when notifications arrive while idle
|
|
202
206
|
this.notificationQueue.onNotificationsEnqueued = () => {
|
|
203
207
|
// If the AI is NOT loading (idle), trigger a new AI cycle to process notifications
|
|
204
208
|
if (!this.aiManager.isLoading) {
|
|
205
|
-
this.processPendingNotifications().catch(
|
|
206
|
-
|
|
209
|
+
const pendingPromise = this.processPendingNotifications().catch(
|
|
210
|
+
(error) => {
|
|
211
|
+
this.logger?.error(
|
|
212
|
+
"Failed to process pending notifications:",
|
|
213
|
+
error,
|
|
214
|
+
);
|
|
215
|
+
},
|
|
216
|
+
);
|
|
217
|
+
this.pendingNotificationPromises.push(pendingPromise);
|
|
218
|
+
}
|
|
219
|
+
};
|
|
220
|
+
|
|
221
|
+
// Wire up CWD change callback from AIManager to sync Agent's workdir
|
|
222
|
+
this.aiManager.setOnCwdChange((newCwd) => {
|
|
223
|
+
this.workdir = newCwd;
|
|
224
|
+
this.container.register("Workdir", newCwd);
|
|
225
|
+
this.options.callbacks?.onWorkdirChange?.(newCwd);
|
|
226
|
+
});
|
|
227
|
+
|
|
228
|
+
// Wire up message queue to process when agent becomes idle
|
|
229
|
+
this.messageQueue.onMessageEnqueued = () => {
|
|
230
|
+
// If the AI is NOT loading and command is not running, trigger dequeue
|
|
231
|
+
if (!this.aiManager.isLoading && !this.isCommandRunning) {
|
|
232
|
+
this.processQueuedMessage().catch((error) => {
|
|
233
|
+
this.logger?.error("Failed to process queued message:", error);
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
};
|
|
237
|
+
|
|
238
|
+
// Wire up AI loading changes to process queue when AI becomes idle
|
|
239
|
+
this.aiManager.onLoadingChange = (loading: boolean) => {
|
|
240
|
+
if (!loading && !this.isCommandRunning) {
|
|
241
|
+
this.processQueuedMessage().catch((error) => {
|
|
242
|
+
this.logger?.error("Failed to process queued message:", error);
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
};
|
|
246
|
+
|
|
247
|
+
// Wire up bang manager callback for command running changes
|
|
248
|
+
this.bangManager.onCommandRunningChange = (running: boolean) => {
|
|
249
|
+
this.options.callbacks?.onCommandRunningChange?.(running);
|
|
250
|
+
// When command stops and AI is idle, process queue
|
|
251
|
+
if (!running && !this.aiManager.isLoading) {
|
|
252
|
+
this.processQueuedMessage().catch((error) => {
|
|
253
|
+
this.logger?.error("Failed to process queued message:", error);
|
|
207
254
|
});
|
|
208
255
|
}
|
|
209
256
|
};
|
|
@@ -240,6 +287,16 @@ export class Agent {
|
|
|
240
287
|
return this.workdir;
|
|
241
288
|
}
|
|
242
289
|
|
|
290
|
+
/**
|
|
291
|
+
* Set the working directory
|
|
292
|
+
* @param newCwd - The new working directory
|
|
293
|
+
*/
|
|
294
|
+
public setWorkdir(newCwd: string): void {
|
|
295
|
+
this.workdir = newCwd;
|
|
296
|
+
this.container.register("Workdir", newCwd);
|
|
297
|
+
this.options.callbacks?.onWorkdirChange?.(newCwd);
|
|
298
|
+
}
|
|
299
|
+
|
|
243
300
|
/** Get project memory content */
|
|
244
301
|
public get projectMemory(): string {
|
|
245
302
|
return this._projectMemoryContent;
|
|
@@ -270,6 +327,42 @@ export class Agent {
|
|
|
270
327
|
return this.bangManager?.isCommandRunning ?? false;
|
|
271
328
|
}
|
|
272
329
|
|
|
330
|
+
/** Get queued messages */
|
|
331
|
+
public get queuedMessages(): QueuedMessage[] {
|
|
332
|
+
return this.messageQueue.getQueue();
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
/**
|
|
336
|
+
* Remove a queued message by index
|
|
337
|
+
* @param index - The index of the message to remove
|
|
338
|
+
* @returns true if the message was removed, false if the index was out of bounds
|
|
339
|
+
*/
|
|
340
|
+
public removeQueuedMessage(index: number): boolean {
|
|
341
|
+
const removed = this.messageQueue.removeAt(index);
|
|
342
|
+
if (removed) {
|
|
343
|
+
this.options.callbacks?.onQueuedMessagesChange?.(this.queuedMessages);
|
|
344
|
+
}
|
|
345
|
+
return removed;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
/**
|
|
349
|
+
* Process the next queued message when the agent becomes idle.
|
|
350
|
+
* Dequeues the next message and handles it based on type.
|
|
351
|
+
*/
|
|
352
|
+
private async processQueuedMessage(): Promise<void> {
|
|
353
|
+
const next = this.messageQueue.dequeue();
|
|
354
|
+
if (!next) return;
|
|
355
|
+
|
|
356
|
+
this.options.callbacks?.onQueuedMessagesChange?.(this.queuedMessages);
|
|
357
|
+
|
|
358
|
+
if (next.type === "bang") {
|
|
359
|
+
await this.bangManager?.executeCommand(next.content);
|
|
360
|
+
await this.messageManager.saveSession();
|
|
361
|
+
} else {
|
|
362
|
+
await this.sendMessage(next.content, next.images);
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
|
|
273
366
|
/** Get background bash shell output */
|
|
274
367
|
public getBackgroundShellOutput(
|
|
275
368
|
id: string,
|
|
@@ -469,6 +562,13 @@ export class Agent {
|
|
|
469
562
|
|
|
470
563
|
/** Execute bash command (bang command) */
|
|
471
564
|
public async bang(command: string): Promise<void> {
|
|
565
|
+
// If the agent is busy, enqueue the bang command
|
|
566
|
+
if (this.aiManager.isLoading || this.isCommandRunning) {
|
|
567
|
+
this.messageQueue.enqueue({ type: "bang", content: command });
|
|
568
|
+
this.options.callbacks?.onQueuedMessagesChange?.(this.queuedMessages);
|
|
569
|
+
return;
|
|
570
|
+
}
|
|
571
|
+
|
|
472
572
|
await this.bangManager?.executeCommand(command);
|
|
473
573
|
await this.messageManager.saveSession();
|
|
474
574
|
}
|
|
@@ -482,6 +582,8 @@ export class Agent {
|
|
|
482
582
|
this.abortAIMessage(); // This will abort tools including Agent tool (subagents)
|
|
483
583
|
this.abortBashCommand();
|
|
484
584
|
this.abortSlashCommand();
|
|
585
|
+
this.messageQueue.clear();
|
|
586
|
+
this.options.callbacks?.onQueuedMessagesChange?.(this.queuedMessages);
|
|
485
587
|
}
|
|
486
588
|
|
|
487
589
|
/** Interrupt bash command execution */
|
|
@@ -518,6 +620,17 @@ export class Agent {
|
|
|
518
620
|
|
|
519
621
|
/** Destroy managers, clean up resources */
|
|
520
622
|
public async destroy(): Promise<void> {
|
|
623
|
+
// Clear notification callback first to prevent any late triggers from
|
|
624
|
+
// starting async work during teardown
|
|
625
|
+
this.notificationQueue.onNotificationsEnqueued = undefined;
|
|
626
|
+
|
|
627
|
+
// Await any pending notification processing to prevent race conditions
|
|
628
|
+
// with test teardown (e.g., V8 coverage stream cleanup)
|
|
629
|
+
if (this.pendingNotificationPromises.length > 0) {
|
|
630
|
+
await Promise.allSettled(this.pendingNotificationPromises);
|
|
631
|
+
this.pendingNotificationPromises = [];
|
|
632
|
+
}
|
|
633
|
+
|
|
521
634
|
await this.messageManager.saveSession();
|
|
522
635
|
this.abortAIMessage(); // This will abort tools including Agent tool (subagents)
|
|
523
636
|
this.abortBashCommand();
|
|
@@ -602,6 +715,13 @@ export class Agent {
|
|
|
602
715
|
content: string,
|
|
603
716
|
images?: Array<{ path: string; mimeType: string }>,
|
|
604
717
|
): Promise<void> {
|
|
718
|
+
// If the agent is busy, enqueue the message
|
|
719
|
+
if (this.aiManager.isLoading || this.isCommandRunning) {
|
|
720
|
+
this.messageQueue.enqueue({ content, images });
|
|
721
|
+
this.options.callbacks?.onQueuedMessagesChange?.(this.queuedMessages);
|
|
722
|
+
return;
|
|
723
|
+
}
|
|
724
|
+
|
|
605
725
|
await InteractionService.sendMessage(
|
|
606
726
|
{
|
|
607
727
|
messageManager: this.messageManager,
|
package/src/index.ts
CHANGED
|
@@ -8,6 +8,7 @@ export * from "./constants/tools.js";
|
|
|
8
8
|
export * from "./agent.js";
|
|
9
9
|
export * from "./core/plugin.js";
|
|
10
10
|
export * from "./managers/cronManager.js";
|
|
11
|
+
export * from "./managers/messageQueue.js";
|
|
11
12
|
|
|
12
13
|
// Export all utilities
|
|
13
14
|
export * from "./utils/bashParser.js";
|
|
@@ -31,6 +31,7 @@ import { logger } from "../utils/globalLogger.js";
|
|
|
31
31
|
export interface AIManagerCallbacks {
|
|
32
32
|
onCompressionStateChange?: (isCompressing: boolean) => void;
|
|
33
33
|
onUsageAdded?: (usage: Usage) => void;
|
|
34
|
+
onCwdChange?: (newCwd: string) => void;
|
|
34
35
|
}
|
|
35
36
|
|
|
36
37
|
export interface AIManagerOptions {
|
|
@@ -47,12 +48,14 @@ export interface AIManagerOptions {
|
|
|
47
48
|
export class AIManager {
|
|
48
49
|
public isLoading: boolean = false;
|
|
49
50
|
private abortController: AbortController | null = null;
|
|
51
|
+
onLoadingChange?: (loading: boolean) => void;
|
|
50
52
|
private toolAbortController: AbortController | null = null;
|
|
51
53
|
private workdir: string;
|
|
52
54
|
private systemPrompt?: string;
|
|
53
55
|
private subagentType?: string; // Store subagent type for hook context
|
|
54
56
|
private stream: boolean; // Streaming mode flag
|
|
55
57
|
private modelOverride?: string;
|
|
58
|
+
private _onCwdChange?: (newCwd: string) => void; // Store callback for CWD changes
|
|
56
59
|
|
|
57
60
|
// Service overrides
|
|
58
61
|
constructor(
|
|
@@ -65,6 +68,7 @@ export class AIManager {
|
|
|
65
68
|
this.stream = options.stream ?? true; // Default to true if not specified
|
|
66
69
|
this.callbacks = options.callbacks ?? {};
|
|
67
70
|
this.modelOverride = options.modelOverride;
|
|
71
|
+
this._onCwdChange = options.callbacks?.onCwdChange; // Initialize onCwdChange
|
|
68
72
|
}
|
|
69
73
|
|
|
70
74
|
private get toolManager(): ToolManager {
|
|
@@ -157,6 +161,14 @@ export class AIManager {
|
|
|
157
161
|
return this.configurationService.resolveAutoMemoryEnabled();
|
|
158
162
|
}
|
|
159
163
|
|
|
164
|
+
public getWorkdir(): string {
|
|
165
|
+
return this.workdir;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
public setOnCwdChange(callback: (newCwd: string) => void): void {
|
|
169
|
+
this._onCwdChange = callback;
|
|
170
|
+
}
|
|
171
|
+
|
|
160
172
|
private isCompressing: boolean = false;
|
|
161
173
|
private callbacks: AIManagerCallbacks;
|
|
162
174
|
|
|
@@ -180,6 +192,7 @@ export class AIManager {
|
|
|
180
192
|
|
|
181
193
|
public setIsLoading(isLoading: boolean): void {
|
|
182
194
|
this.isLoading = isLoading;
|
|
195
|
+
this.onLoadingChange?.(isLoading);
|
|
183
196
|
const options =
|
|
184
197
|
this.container.get<import("../types/agent.js").AgentOptions>(
|
|
185
198
|
"AgentOptions",
|
|
@@ -342,11 +355,6 @@ export class AIManager {
|
|
|
342
355
|
): Promise<void> {
|
|
343
356
|
const { recursionDepth = 0, model, allowedRules, maxTokens } = options;
|
|
344
357
|
|
|
345
|
-
// Only check isLoading for the initial call (recursionDepth === 0)
|
|
346
|
-
if (recursionDepth === 0 && this.isLoading) {
|
|
347
|
-
return;
|
|
348
|
-
}
|
|
349
|
-
|
|
350
358
|
// Set loading state early for the initial call, before any async work
|
|
351
359
|
if (recursionDepth === 0) {
|
|
352
360
|
this.setIsLoading(true);
|
|
@@ -720,6 +728,28 @@ export class AIManager {
|
|
|
720
728
|
stage: "running", // Keep it in running stage while updating result
|
|
721
729
|
});
|
|
722
730
|
},
|
|
731
|
+
onCwdChange: async (newCwd: string) => {
|
|
732
|
+
const oldCwd = this.workdir;
|
|
733
|
+
this.workdir = newCwd;
|
|
734
|
+
this._onCwdChange?.(newCwd);
|
|
735
|
+
if (this.hookManager) {
|
|
736
|
+
const sessionId = this.messageManager.getSessionId();
|
|
737
|
+
const transcriptPath =
|
|
738
|
+
this.messageManager.getTranscriptPath();
|
|
739
|
+
const env = Object.fromEntries(
|
|
740
|
+
Object.entries(process.env).filter(
|
|
741
|
+
(e) => e[1] !== undefined,
|
|
742
|
+
),
|
|
743
|
+
) as Record<string, string>;
|
|
744
|
+
await this.hookManager.executeCwdChangedHooks(
|
|
745
|
+
oldCwd,
|
|
746
|
+
newCwd,
|
|
747
|
+
sessionId,
|
|
748
|
+
transcriptPath,
|
|
749
|
+
env,
|
|
750
|
+
);
|
|
751
|
+
}
|
|
752
|
+
},
|
|
723
753
|
};
|
|
724
754
|
|
|
725
755
|
// Execute tool
|
|
@@ -15,6 +15,7 @@ export class BangManager {
|
|
|
15
15
|
private workdir: string;
|
|
16
16
|
public isCommandRunning = false;
|
|
17
17
|
private currentProcess: ChildProcess | null = null;
|
|
18
|
+
onCommandRunningChange?: (running: boolean) => void;
|
|
18
19
|
|
|
19
20
|
constructor(
|
|
20
21
|
private container: Container,
|
|
@@ -29,6 +30,7 @@ export class BangManager {
|
|
|
29
30
|
|
|
30
31
|
private setCommandRunning(isRunning: boolean): void {
|
|
31
32
|
this.isCommandRunning = isRunning;
|
|
33
|
+
this.onCommandRunningChange?.(isRunning);
|
|
32
34
|
}
|
|
33
35
|
|
|
34
36
|
public async executeCommand(command: string): Promise<number> {
|