wave-agent-sdk 0.14.1 → 0.14.2
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 +69 -0
- package/builtin/skills/settings/PLUGINS.md +171 -0
- package/builtin/skills/settings/SKILL.md +8 -3
- package/dist/agent.d.ts +2 -2
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +12 -3
- package/dist/managers/aiManager.d.ts +6 -6
- package/dist/managers/aiManager.d.ts.map +1 -1
- package/dist/managers/aiManager.js +122 -59
- package/dist/managers/backgroundTaskManager.d.ts.map +1 -1
- package/dist/managers/backgroundTaskManager.js +28 -18
- package/dist/managers/hookManager.d.ts +16 -1
- package/dist/managers/hookManager.d.ts.map +1 -1
- package/dist/managers/hookManager.js +97 -8
- package/dist/managers/messageManager.d.ts +19 -4
- package/dist/managers/messageManager.d.ts.map +1 -1
- package/dist/managers/messageManager.js +63 -18
- package/dist/prompts/index.d.ts +1 -1
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/index.js +1 -1
- package/dist/services/MarketplaceService.d.ts +0 -11
- package/dist/services/MarketplaceService.d.ts.map +1 -1
- package/dist/services/MarketplaceService.js +21 -89
- package/dist/services/aiService.d.ts +3 -3
- package/dist/services/aiService.d.ts.map +1 -1
- package/dist/services/aiService.js +7 -7
- package/dist/services/hook.d.ts.map +1 -1
- package/dist/services/hook.js +15 -0
- package/dist/services/initializationService.d.ts.map +1 -1
- package/dist/services/initializationService.js +24 -1
- package/dist/services/interactionService.js +1 -1
- package/dist/services/pluginLoader.d.ts +0 -6
- package/dist/services/pluginLoader.d.ts.map +1 -1
- package/dist/services/pluginLoader.js +14 -53
- package/dist/services/session.d.ts +1 -1
- package/dist/services/session.js +7 -7
- package/dist/services/taskManager.d.ts +1 -1
- package/dist/services/taskManager.js +1 -1
- package/dist/types/core.d.ts +1 -1
- package/dist/types/core.d.ts.map +1 -1
- package/dist/types/hooks.d.ts +9 -1
- package/dist/types/hooks.d.ts.map +1 -1
- package/dist/types/hooks.js +2 -0
- package/dist/types/marketplace.d.ts +1 -26
- package/dist/types/marketplace.d.ts.map +1 -1
- package/dist/types/messaging.d.ts +3 -3
- package/dist/types/messaging.d.ts.map +1 -1
- package/dist/types/plugins.d.ts +1 -13
- package/dist/types/plugins.d.ts.map +1 -1
- package/dist/utils/convertMessagesForAPI.d.ts +1 -1
- package/dist/utils/convertMessagesForAPI.js +7 -7
- package/dist/utils/groupMessagesByApiRound.d.ts +1 -1
- package/dist/utils/groupMessagesByApiRound.js +6 -6
- package/dist/utils/messageOperations.d.ts.map +1 -1
- package/dist/utils/messageOperations.js +3 -3
- package/package.json +1 -1
- package/src/agent.ts +16 -3
- package/src/managers/aiManager.ts +142 -63
- package/src/managers/backgroundTaskManager.ts +32 -22
- package/src/managers/hookManager.ts +125 -10
- package/src/managers/messageManager.ts +76 -22
- package/src/prompts/index.ts +1 -1
- package/src/services/MarketplaceService.ts +26 -127
- package/src/services/aiService.ts +11 -11
- package/src/services/hook.ts +17 -0
- package/src/services/initializationService.ts +33 -1
- package/src/services/interactionService.ts +1 -1
- package/src/services/pluginLoader.ts +14 -67
- package/src/services/session.ts +7 -7
- package/src/services/taskManager.ts +1 -1
- package/src/types/core.ts +1 -1
- package/src/types/hooks.ts +16 -2
- package/src/types/marketplace.ts +1 -24
- package/src/types/messaging.ts +3 -3
- package/src/types/plugins.ts +1 -13
- package/src/utils/convertMessagesForAPI.ts +8 -8
- package/src/utils/groupMessagesByApiRound.ts +6 -6
- package/src/utils/messageOperations.ts +3 -5
|
@@ -1,73 +1,28 @@
|
|
|
1
1
|
import * as fs from "fs/promises";
|
|
2
|
-
import * as fsSync from "fs";
|
|
3
2
|
import * as path from "path";
|
|
4
3
|
import { scanCommandsDirectory } from "../utils/customCommands.js";
|
|
5
4
|
import { parseSkillFile } from "../utils/skillParser.js";
|
|
6
5
|
import { resolveMcpConfig } from "../managers/mcpManager.js";
|
|
7
6
|
export class PluginLoader {
|
|
8
|
-
/**
|
|
9
|
-
* Finds the first existing plugin manifest path.
|
|
10
|
-
* Prefers .wave-plugin/ for backward compatibility, falls back to .claude-plugin/.
|
|
11
|
-
* Returns null if neither exists.
|
|
12
|
-
*/
|
|
13
|
-
static findPluginManifestPath(pluginPath) {
|
|
14
|
-
const waveManifestPath = path.join(pluginPath, ".wave-plugin", "plugin.json");
|
|
15
|
-
const claudeManifestPath = path.join(pluginPath, ".claude-plugin", "plugin.json");
|
|
16
|
-
// Check .wave-plugin first for backward compatibility
|
|
17
|
-
try {
|
|
18
|
-
const waveStat = fsSync.statSync(waveManifestPath);
|
|
19
|
-
if (waveStat.isFile()) {
|
|
20
|
-
return waveManifestPath;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
catch {
|
|
24
|
-
// .wave-plugin/plugin.json doesn't exist
|
|
25
|
-
}
|
|
26
|
-
try {
|
|
27
|
-
const claudeStat = fsSync.statSync(claudeManifestPath);
|
|
28
|
-
if (claudeStat.isFile()) {
|
|
29
|
-
return claudeManifestPath;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
catch {
|
|
33
|
-
// .claude-plugin/plugin.json doesn't exist
|
|
34
|
-
}
|
|
35
|
-
return null;
|
|
36
|
-
}
|
|
37
7
|
/**
|
|
38
8
|
* Load and validate a plugin manifest from a directory
|
|
39
9
|
* @param pluginPath Absolute path to the plugin directory
|
|
40
10
|
*/
|
|
41
11
|
static async loadManifest(pluginPath) {
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}
|
|
46
|
-
// Determine which directory is being used for validation
|
|
47
|
-
const pluginDirName = manifestPath.includes(".claude-plugin")
|
|
48
|
-
? ".claude-plugin"
|
|
49
|
-
: ".wave-plugin";
|
|
50
|
-
const pluginDirPath = path.join(pluginPath, pluginDirName);
|
|
51
|
-
// T018: Ensure plugin.json is the only file in the manifest directory
|
|
52
|
-
// For .claude-plugin/, marketplace.json is also allowed (Claude Code convention)
|
|
12
|
+
const dotWavePluginPath = path.join(pluginPath, ".wave-plugin");
|
|
13
|
+
const manifestPath = path.join(dotWavePluginPath, "plugin.json");
|
|
14
|
+
// T018: Ensure plugin.json is the only file in .wave-plugin/
|
|
53
15
|
try {
|
|
54
|
-
const entries = await fs.readdir(
|
|
55
|
-
const
|
|
56
|
-
if (pluginDirName === ".claude-plugin") {
|
|
57
|
-
allowedFiles.push("marketplace.json");
|
|
58
|
-
}
|
|
59
|
-
const misplaced = entries.filter((e) => !allowedFiles.includes(e));
|
|
16
|
+
const entries = await fs.readdir(dotWavePluginPath);
|
|
17
|
+
const misplaced = entries.filter((e) => e !== "plugin.json");
|
|
60
18
|
if (misplaced.length > 0) {
|
|
61
|
-
|
|
62
|
-
? "Only plugin.json and marketplace.json should be in this directory."
|
|
63
|
-
: "Only plugin.json should be in this directory.";
|
|
64
|
-
throw new Error(`Misplaced files/directories in ${pluginDirName}/: ${misplaced.join(", ")}. ${allowedMsg}`);
|
|
19
|
+
throw new Error(`Misplaced files/directories in .wave-plugin/: ${misplaced.join(", ")}. Only plugin.json should be in this directory.`);
|
|
65
20
|
}
|
|
66
21
|
}
|
|
67
22
|
catch (error) {
|
|
68
23
|
if (error instanceof Error &&
|
|
69
24
|
error.code === "ENOENT") {
|
|
70
|
-
throw new Error(`Plugin manifest directory not found at ${
|
|
25
|
+
throw new Error(`Plugin manifest directory not found at ${dotWavePluginPath}`);
|
|
71
26
|
}
|
|
72
27
|
throw error;
|
|
73
28
|
}
|
|
@@ -168,7 +123,13 @@ export class PluginLoader {
|
|
|
168
123
|
const hooksPath = path.join(pluginPath, "hooks", "hooks.json");
|
|
169
124
|
try {
|
|
170
125
|
const content = await fs.readFile(hooksPath, "utf-8");
|
|
171
|
-
|
|
126
|
+
const parsed = JSON.parse(content);
|
|
127
|
+
// Claude Code wrapper format: { "hooks": { "SessionStart": [...] } }
|
|
128
|
+
// (optional "description" sibling key)
|
|
129
|
+
if (parsed && typeof parsed === "object" && "hooks" in parsed) {
|
|
130
|
+
return parsed.hooks;
|
|
131
|
+
}
|
|
132
|
+
return undefined;
|
|
172
133
|
}
|
|
173
134
|
catch {
|
|
174
135
|
return undefined;
|
|
@@ -160,7 +160,7 @@ export declare function sessionExistsInJsonl(sessionId: string, workdir: string,
|
|
|
160
160
|
/**
|
|
161
161
|
* Get the content of the first message in a session
|
|
162
162
|
* For user role: get text block content
|
|
163
|
-
* For assistant role: get
|
|
163
|
+
* For assistant role: get compact block content
|
|
164
164
|
* @param sessionId - Session ID to get first message from
|
|
165
165
|
* @param workdir - Working directory for session operations
|
|
166
166
|
* @returns Promise that resolves to the first message content or null if not found
|
package/dist/services/session.js
CHANGED
|
@@ -637,7 +637,7 @@ export async function sessionExistsInJsonl(sessionId, workdir, sessionType) {
|
|
|
637
637
|
/**
|
|
638
638
|
* Get the content of the first message in a session
|
|
639
639
|
* For user role: get text block content
|
|
640
|
-
* For assistant role: get
|
|
640
|
+
* For assistant role: get compact block content
|
|
641
641
|
* @param sessionId - Session ID to get first message from
|
|
642
642
|
* @param workdir - Working directory for session operations
|
|
643
643
|
* @returns Promise that resolves to the first message content or null if not found
|
|
@@ -778,17 +778,17 @@ export async function loadFullMessageThread(currentSessionId, workdir) {
|
|
|
778
778
|
break;
|
|
779
779
|
sessionIds.unshift(currentId);
|
|
780
780
|
// Add messages from this session to the beginning of the list
|
|
781
|
-
// But skip the "
|
|
781
|
+
// But skip the "compact" block if it's not the first session in our traversal (which is the latest)
|
|
782
782
|
// Actually, we should probably keep all messages and let the UI/logic handle it.
|
|
783
|
-
// But wait, if we are concatenating, the "
|
|
784
|
-
// So if we have session N-1 and session N, we should probably skip the
|
|
783
|
+
// But wait, if we are concatenating, the "compact" block in session N summarizes session N-1.
|
|
784
|
+
// So if we have session N-1 and session N, we should probably skip the compact block in session N.
|
|
785
785
|
const messages = sessionData.messages;
|
|
786
786
|
if (allMessages.length > 0) {
|
|
787
787
|
// If we already have messages (from "later" sessions),
|
|
788
788
|
// we are now adding messages from an "earlier" session.
|
|
789
|
-
// The later session's first message might be a "
|
|
790
|
-
if (allMessages[0].blocks.some((b) => b.type === "
|
|
791
|
-
// Remove the
|
|
789
|
+
// The later session's first message might be a "compact" block.
|
|
790
|
+
if (allMessages[0].blocks.some((b) => b.type === "compact")) {
|
|
791
|
+
// Remove the compact block from the later session's messages
|
|
792
792
|
// because we are now providing the actual messages it summarized.
|
|
793
793
|
allMessages.shift();
|
|
794
794
|
}
|
|
@@ -10,7 +10,7 @@ export declare class TaskManager extends EventEmitter {
|
|
|
10
10
|
setTaskListId(taskListId: string): void;
|
|
11
11
|
/**
|
|
12
12
|
* Syncs the task list ID with the current session's root session ID.
|
|
13
|
-
* This is typically called when the session is cleared or
|
|
13
|
+
* This is typically called when the session is cleared or compacted.
|
|
14
14
|
*/
|
|
15
15
|
syncWithSession(): Promise<void>;
|
|
16
16
|
private getSessionDir;
|
|
@@ -18,7 +18,7 @@ export class TaskManager extends EventEmitter {
|
|
|
18
18
|
}
|
|
19
19
|
/**
|
|
20
20
|
* Syncs the task list ID with the current session's root session ID.
|
|
21
|
-
* This is typically called when the session is cleared or
|
|
21
|
+
* This is typically called when the session is cleared or compacted.
|
|
22
22
|
*/
|
|
23
23
|
async syncWithSession() {
|
|
24
24
|
const messageManager = this.container.get("MessageManager");
|
package/dist/types/core.d.ts
CHANGED
|
@@ -22,7 +22,7 @@ export interface Usage {
|
|
|
22
22
|
completion_tokens: number;
|
|
23
23
|
total_tokens: number;
|
|
24
24
|
model?: string;
|
|
25
|
-
operation_type?: "agent" | "
|
|
25
|
+
operation_type?: "agent" | "compact";
|
|
26
26
|
cache_read_input_tokens?: number;
|
|
27
27
|
cache_creation_input_tokens?: number;
|
|
28
28
|
cache_creation?: {
|
package/dist/types/core.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/types/core.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD;;;GAGG;AACH,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACpC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACnC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACnC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;CACrC;AAED;;;GAGG;AACH,MAAM,WAAW,KAAK;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,OAAO,GAAG,
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/types/core.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD;;;GAGG;AACH,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACpC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACnC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACnC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;CACrC;AAED;;;GAGG;AACH,MAAM,WAAW,KAAK;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAGrC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,cAAc,CAAC,EAAE;QACf,yBAAyB,EAAE,MAAM,CAAC;QAClC,yBAAyB,EAAE,MAAM,CAAC;KACnC,CAAC;CACH;AAED;;;GAGG;AACH,MAAM,WAAW,WAAY,SAAQ,eAAe;IAElD,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IAGrB;;;OAGG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAEjC;;;OAGG;IACH,2BAA2B,CAAC,EAAE,MAAM,CAAC;IAErC;;OAEG;IACH,cAAc,CAAC,EAAE;QACf,0CAA0C;QAC1C,yBAAyB,EAAE,MAAM,CAAC;QAClC,wCAAwC;QACxC,yBAAyB,EAAE,MAAM,CAAC;KACnC,CAAC;CACH;AAED;;;GAGG;AACH,MAAM,WAAW,MAAM;IACrB,wDAAwD;IACxD,UAAU,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,UAAU,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,qBAAa,kBAAmB,SAAQ,KAAK;aAGzB,KAAK,EAAE,MAAM;aACb,QAAQ,CAAC,EAAE,OAAO;gBAFlC,OAAO,EAAE,MAAM,EACC,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,OAAO,YAAA;CAKrC;AAGD,eAAO,MAAM,aAAa;;;;;;CAShB,CAAC"}
|
package/dist/types/hooks.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
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" | "CwdChanged";
|
|
8
|
+
export type HookEvent = "PreToolUse" | "PostToolUse" | "UserPromptSubmit" | "Stop" | "SubagentStop" | "PermissionRequest" | "WorktreeCreate" | "CwdChanged" | "SessionStart" | "SessionEnd";
|
|
9
9
|
export interface HookCommand {
|
|
10
10
|
type: "command";
|
|
11
11
|
command: string;
|
|
@@ -51,6 +51,8 @@ export declare class HookConfigurationError extends Error {
|
|
|
51
51
|
readonly validationErrors: string[];
|
|
52
52
|
constructor(configPath: string, validationErrors: string[]);
|
|
53
53
|
}
|
|
54
|
+
export type SessionStartSource = "startup" | "resume" | "compact";
|
|
55
|
+
export type SessionEndSource = "exit" | "stop" | "compact";
|
|
54
56
|
export declare function isValidHookEvent(event: string): event is HookEvent;
|
|
55
57
|
export declare function isValidHookCommand(cmd: unknown): cmd is HookCommand;
|
|
56
58
|
export declare function isValidHookEventConfig(config: unknown): config is HookEventConfig;
|
|
@@ -67,6 +69,9 @@ export interface HookJsonInput {
|
|
|
67
69
|
name?: string;
|
|
68
70
|
old_cwd?: string;
|
|
69
71
|
new_cwd?: string;
|
|
72
|
+
source?: SessionStartSource;
|
|
73
|
+
agent_type?: string;
|
|
74
|
+
end_source?: SessionEndSource;
|
|
70
75
|
}
|
|
71
76
|
export interface ExtendedHookExecutionContext extends HookExecutionContext {
|
|
72
77
|
sessionId?: string;
|
|
@@ -80,6 +85,9 @@ export interface ExtendedHookExecutionContext extends HookExecutionContext {
|
|
|
80
85
|
worktreeName?: string;
|
|
81
86
|
oldCwd?: string;
|
|
82
87
|
newCwd?: string;
|
|
88
|
+
source?: SessionStartSource;
|
|
89
|
+
agentType?: string;
|
|
90
|
+
endSource?: SessionEndSource;
|
|
83
91
|
}
|
|
84
92
|
export interface HookEnvironment {
|
|
85
93
|
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,GAChB,YAAY,CAAC;AAGjB,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAGD,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,WAAW,EAAE,CAAC;CACtB;AAGD,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,SAAS,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,IAAI,CAAC;CACjB;AAGD,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAGD,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAGD,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAGD,qBAAa,kBAAmB,SAAQ,KAAK;aAEzB,WAAW,EAAE,MAAM;aACnB,aAAa,EAAE,KAAK;aACpB,OAAO,EAAE,oBAAoB;gBAF7B,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,KAAK,EACpB,OAAO,EAAE,oBAAoB;CAKhD;AAGD,qBAAa,sBAAuB,SAAQ,KAAK;aAE7B,UAAU,EAAE,MAAM;aAClB,gBAAgB,EAAE,MAAM,EAAE;gBAD1B,UAAU,EAAE,MAAM,EAClB,gBAAgB,EAAE,MAAM,EAAE;CAO7C;
|
|
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
|
@@ -5,27 +5,8 @@ export interface MarketplaceOwner {
|
|
|
5
5
|
}
|
|
6
6
|
export interface MarketplacePluginEntry {
|
|
7
7
|
name: string;
|
|
8
|
-
source: string
|
|
8
|
+
source: string;
|
|
9
9
|
description: string;
|
|
10
|
-
/** Claude Code compatibility: plugin category */
|
|
11
|
-
category?: string;
|
|
12
|
-
/** Claude Code compatibility: plugin tags */
|
|
13
|
-
tags?: string[];
|
|
14
|
-
/** Claude Code compatibility: when false, plugin.json is optional */
|
|
15
|
-
strict?: boolean;
|
|
16
|
-
/** Claude Code compatibility: inline manifest fields */
|
|
17
|
-
version?: string;
|
|
18
|
-
author?: {
|
|
19
|
-
name: string;
|
|
20
|
-
url?: string;
|
|
21
|
-
};
|
|
22
|
-
homepage?: string;
|
|
23
|
-
repository?: string;
|
|
24
|
-
license?: string;
|
|
25
|
-
keywords?: string[];
|
|
26
|
-
commands?: string;
|
|
27
|
-
skills?: string;
|
|
28
|
-
agents?: string;
|
|
29
10
|
}
|
|
30
11
|
export interface MarketplacePluginStatus extends MarketplacePluginEntry {
|
|
31
12
|
marketplace: string;
|
|
@@ -39,8 +20,6 @@ export interface MarketplaceManifest {
|
|
|
39
20
|
name: string;
|
|
40
21
|
owner: MarketplaceOwner;
|
|
41
22
|
plugins: MarketplacePluginEntry[];
|
|
42
|
-
/** Claude Code compatibility: additional metadata */
|
|
43
|
-
metadata?: Record<string, unknown>;
|
|
44
23
|
}
|
|
45
24
|
export type MarketplaceSource = {
|
|
46
25
|
source: "directory";
|
|
@@ -53,10 +32,6 @@ export type MarketplaceSource = {
|
|
|
53
32
|
source: "git";
|
|
54
33
|
url: string;
|
|
55
34
|
ref?: string;
|
|
56
|
-
} | {
|
|
57
|
-
source: "url";
|
|
58
|
-
url: string;
|
|
59
|
-
ref?: string;
|
|
60
35
|
};
|
|
61
36
|
export interface KnownMarketplace {
|
|
62
37
|
name: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"marketplace.d.ts","sourceRoot":"","sources":["../../src/types/marketplace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"marketplace.d.ts","sourceRoot":"","sources":["../../src/types/marketplace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,uBAAwB,SAAQ,sBAAsB;IACrE,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,gBAAgB,CAAC;IACxB,OAAO,EAAE,sBAAsB,EAAE,CAAC;CACnC;AAED,MAAM,MAAM,iBAAiB,GACzB;IACE,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd,GACD;IACE,MAAM,EAAE,QAAQ,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GACD;IACE,MAAM,EAAE,KAAK,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEN,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,iBAAiB,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uFAAuF;IACvF,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;CAC1D;AAED,MAAM,WAAW,yBAAyB;IACxC,YAAY,EAAE,gBAAgB,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B"}
|
|
@@ -15,7 +15,7 @@ export interface Message {
|
|
|
15
15
|
additionalFields?: Record<string, unknown>;
|
|
16
16
|
isMeta?: boolean;
|
|
17
17
|
}
|
|
18
|
-
export type MessageBlock = TextBlock | ErrorBlock | ToolBlock | ImageBlock | BangBlock |
|
|
18
|
+
export type MessageBlock = TextBlock | ErrorBlock | ToolBlock | ImageBlock | BangBlock | CompactBlock | ReasoningBlock | FileHistoryBlock | TaskNotificationBlock;
|
|
19
19
|
export interface TextBlock {
|
|
20
20
|
type: "text";
|
|
21
21
|
content: string;
|
|
@@ -65,8 +65,8 @@ export interface BangBlock {
|
|
|
65
65
|
stage: "running" | "end";
|
|
66
66
|
exitCode: number | null;
|
|
67
67
|
}
|
|
68
|
-
export interface
|
|
69
|
-
type: "
|
|
68
|
+
export interface CompactBlock {
|
|
69
|
+
type: "compact";
|
|
70
70
|
content: string;
|
|
71
71
|
sessionId: string;
|
|
72
72
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messaging.d.ts","sourceRoot":"","sources":["../../src/types/messaging.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAEvC,oBAAY,aAAa;IACvB,IAAI,SAAS;IACb,IAAI,SAAS;CACd;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,YAAY,GACpB,SAAS,GACT,UAAU,GACV,SAAS,GACT,UAAU,GACV,SAAS,GACT,
|
|
1
|
+
{"version":3,"file":"messaging.d.ts","sourceRoot":"","sources":["../../src/types/messaging.ts"],"names":[],"mappings":"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"}
|
package/dist/types/plugins.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ import { LspConfig } from "./lsp.js";
|
|
|
4
4
|
import { McpConfig } from "./mcp.js";
|
|
5
5
|
import { PartialHookConfiguration } from "./configuration.js";
|
|
6
6
|
/**
|
|
7
|
-
* Plugin manifest structure (.wave-plugin/plugin.json
|
|
7
|
+
* Plugin manifest structure (.wave-plugin/plugin.json)
|
|
8
8
|
*/
|
|
9
9
|
export interface PluginManifest {
|
|
10
10
|
name: string;
|
|
@@ -13,18 +13,6 @@ export interface PluginManifest {
|
|
|
13
13
|
author?: {
|
|
14
14
|
name: string;
|
|
15
15
|
};
|
|
16
|
-
/** Claude Code compatibility: plugin keywords */
|
|
17
|
-
keywords?: string[];
|
|
18
|
-
/** Claude Code compatibility: plugin homepage URL */
|
|
19
|
-
homepage?: string;
|
|
20
|
-
/** Claude Code compatibility: repository info */
|
|
21
|
-
repository?: string;
|
|
22
|
-
/** Claude Code compatibility: license info */
|
|
23
|
-
license?: string;
|
|
24
|
-
/** Claude Code compatibility: plugin dependencies */
|
|
25
|
-
dependencies?: Record<string, string>;
|
|
26
|
-
/** Claude Code compatibility: user configuration schema */
|
|
27
|
-
userConfig?: Record<string, unknown>;
|
|
28
16
|
}
|
|
29
17
|
/**
|
|
30
18
|
* Plugin configuration in AgentOptions or wave.settings.json
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../../src/types/plugins.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;
|
|
1
|
+
{"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../../src/types/plugins.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,MAAO,SAAQ,cAAc;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAC/B,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,WAAW,CAAC,EAAE,wBAAwB,CAAC;CACxC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Message } from "../types/index.js";
|
|
2
2
|
import { ChatCompletionMessageParam } from "openai/resources.js";
|
|
3
3
|
/**
|
|
4
|
-
* Convert message format to API call format, stopping when a
|
|
4
|
+
* Convert message format to API call format, stopping when a compacted message is encountered.
|
|
5
5
|
* Messages with no meaningful content or tool calls are filtered out.
|
|
6
6
|
* @param messages Message list
|
|
7
7
|
* @returns Converted API message format list
|
|
@@ -25,7 +25,7 @@ function safeToolArguments(args) {
|
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
27
|
/**
|
|
28
|
-
* Convert message format to API call format, stopping when a
|
|
28
|
+
* Convert message format to API call format, stopping when a compacted message is encountered.
|
|
29
29
|
* Messages with no meaningful content or tool calls are filtered out.
|
|
30
30
|
* @param messages Message list
|
|
31
31
|
* @returns Converted API message format list
|
|
@@ -35,15 +35,15 @@ export function convertMessagesForAPI(messages) {
|
|
|
35
35
|
const startIndex = messages.length - 1;
|
|
36
36
|
for (let i = startIndex; i >= 0; i--) {
|
|
37
37
|
const message = messages[i];
|
|
38
|
-
// Check if a
|
|
38
|
+
// Check if a compaction block is encountered, if so, stop iteration
|
|
39
39
|
if (message.role === "assistant" &&
|
|
40
|
-
message.blocks.some((block) => block.type === "
|
|
41
|
-
// Add the content of the
|
|
42
|
-
const
|
|
43
|
-
if (
|
|
40
|
+
message.blocks.some((block) => block.type === "compact")) {
|
|
41
|
+
// Add the content of the compaction block as an assistant message to the history
|
|
42
|
+
const compactBlock = message.blocks.find((block) => block.type === "compact");
|
|
43
|
+
if (compactBlock && compactBlock.type === "compact") {
|
|
44
44
|
recentMessages.unshift({
|
|
45
45
|
role: "user",
|
|
46
|
-
content:
|
|
46
|
+
content: compactBlock.content,
|
|
47
47
|
});
|
|
48
48
|
}
|
|
49
49
|
break;
|
|
@@ -12,7 +12,7 @@ export interface ApiRound {
|
|
|
12
12
|
* Boundaries:
|
|
13
13
|
* - A new `role: "user"` message starts a new round.
|
|
14
14
|
* - A new `role: "assistant"` message with a different `id` starts a new round.
|
|
15
|
-
* - A message with a `
|
|
15
|
+
* - A message with a `compact` block is pushed as its own round and starts a
|
|
16
16
|
* new round after it.
|
|
17
17
|
*/
|
|
18
18
|
export declare function groupMessagesByApiRound(messages: Message[]): ApiRound[];
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* Boundaries:
|
|
8
8
|
* - A new `role: "user"` message starts a new round.
|
|
9
9
|
* - A new `role: "assistant"` message with a different `id` starts a new round.
|
|
10
|
-
* - A message with a `
|
|
10
|
+
* - A message with a `compact` block is pushed as its own round and starts a
|
|
11
11
|
* new round after it.
|
|
12
12
|
*/
|
|
13
13
|
export function groupMessagesByApiRound(messages) {
|
|
@@ -20,9 +20,9 @@ export function groupMessagesByApiRound(messages) {
|
|
|
20
20
|
startNewRound = true;
|
|
21
21
|
}
|
|
22
22
|
else if (msg.role === "assistant") {
|
|
23
|
-
//
|
|
24
|
-
const
|
|
25
|
-
if (
|
|
23
|
+
// Compact block is always its own round
|
|
24
|
+
const hasCompact = msg.blocks.some((b) => b.type === "compact");
|
|
25
|
+
if (hasCompact) {
|
|
26
26
|
startNewRound = true;
|
|
27
27
|
}
|
|
28
28
|
else if (msg.id !== lastAssistantId) {
|
|
@@ -46,9 +46,9 @@ export function groupMessagesByApiRound(messages) {
|
|
|
46
46
|
currentRound = [];
|
|
47
47
|
}
|
|
48
48
|
currentRound.push(msg);
|
|
49
|
-
// After pushing a
|
|
49
|
+
// After pushing a compact message as its own round, flush immediately
|
|
50
50
|
if (msg.role === "assistant" &&
|
|
51
|
-
msg.blocks.some((b) => b.type === "
|
|
51
|
+
msg.blocks.some((b) => b.type === "compact")) {
|
|
52
52
|
rounds.push({
|
|
53
53
|
messages: currentRound,
|
|
54
54
|
estimatedTokens: estimateTokens(currentRound),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messageOperations.d.ts","sourceRoot":"","sources":["../../src/utils/messageOperations.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"messageOperations.d.ts","sourceRoot":"","sources":["../../src/utils/messageOperations.ts"],"names":[],"mappings":"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"}
|
|
@@ -423,9 +423,9 @@ export function getMessageContent(message) {
|
|
|
423
423
|
if (bangBlock && "command" in bangBlock) {
|
|
424
424
|
return `!${bangBlock.command}`;
|
|
425
425
|
}
|
|
426
|
-
const
|
|
427
|
-
if (
|
|
428
|
-
return
|
|
426
|
+
const compactBlock = message.blocks.find((block) => block.type === "compact");
|
|
427
|
+
if (compactBlock && "content" in compactBlock) {
|
|
428
|
+
return compactBlock.content;
|
|
429
429
|
}
|
|
430
430
|
return "";
|
|
431
431
|
}
|
package/package.json
CHANGED
package/src/agent.ts
CHANGED
|
@@ -317,9 +317,9 @@ export class Agent {
|
|
|
317
317
|
return this.aiManager.isLoading;
|
|
318
318
|
}
|
|
319
319
|
|
|
320
|
-
/** Get message
|
|
321
|
-
public get
|
|
322
|
-
return this.aiManager.
|
|
320
|
+
/** Get message compaction status */
|
|
321
|
+
public get isCompacting(): boolean {
|
|
322
|
+
return this.aiManager.getIsCompacting();
|
|
323
323
|
}
|
|
324
324
|
|
|
325
325
|
/** Get bash command execution status */
|
|
@@ -633,6 +633,19 @@ export class Agent {
|
|
|
633
633
|
this.pendingNotificationPromises = [];
|
|
634
634
|
}
|
|
635
635
|
|
|
636
|
+
// Fire SessionEnd hooks (fire-and-forget, don't block shutdown)
|
|
637
|
+
try {
|
|
638
|
+
const sessionId = this.messageManager.getSessionId();
|
|
639
|
+
const transcriptPath = this.messageManager.getTranscriptPath();
|
|
640
|
+
await this.hookManager.executeSessionEndHooks(
|
|
641
|
+
"stop",
|
|
642
|
+
sessionId,
|
|
643
|
+
transcriptPath,
|
|
644
|
+
);
|
|
645
|
+
} catch (error) {
|
|
646
|
+
this.logger?.warn(`SessionEnd hooks failed: ${(error as Error).message}`);
|
|
647
|
+
}
|
|
648
|
+
|
|
636
649
|
await this.messageManager.saveSession();
|
|
637
650
|
this.abortAIMessage(); // This will abort tools including Agent tool (subagents)
|
|
638
651
|
this.abortBashCommand();
|