wave-agent-sdk 0.14.0 → 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/core/plugin.d.ts +2 -2
- package/dist/core/plugin.d.ts.map +1 -1
- package/dist/core/plugin.js +7 -7
- 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 -30
- 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/managers/pluginManager.d.ts.map +1 -1
- package/dist/managers/pluginManager.js +1 -1
- 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 +42 -12
- package/dist/services/MarketplaceService.d.ts.map +1 -1
- package/dist/services/MarketplaceService.js +225 -105
- 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/configurationService.d.ts +17 -1
- package/dist/services/configurationService.d.ts.map +1 -1
- package/dist/services/configurationService.js +104 -0
- 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.map +1 -1
- package/dist/services/pluginLoader.js +7 -1
- 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/configuration.d.ts +7 -0
- package/dist/types/configuration.d.ts.map +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 +2 -0
- 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/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/core/plugin.ts +13 -7
- package/src/managers/aiManager.ts +142 -63
- package/src/managers/backgroundTaskManager.ts +33 -42
- package/src/managers/hookManager.ts +125 -10
- package/src/managers/messageManager.ts +76 -22
- package/src/managers/pluginManager.ts +4 -1
- package/src/prompts/index.ts +1 -1
- package/src/services/MarketplaceService.ts +301 -111
- package/src/services/aiService.ts +11 -11
- package/src/services/configurationService.ts +131 -0
- 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 +7 -1
- package/src/services/session.ts +7 -7
- package/src/services/taskManager.ts +1 -1
- package/src/types/configuration.ts +8 -0
- package/src/types/core.ts +1 -1
- package/src/types/hooks.ts +16 -2
- package/src/types/marketplace.ts +2 -0
- package/src/types/messaging.ts +3 -3
- package/src/utils/convertMessagesForAPI.ts +8 -8
- package/src/utils/groupMessagesByApiRound.ts +6 -6
- package/src/utils/messageOperations.ts +3 -5
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Centralized service for loading, validating, and managing Wave configuration files.
|
|
5
5
|
* Replaces distributed configuration logic previously embedded in hook.ts.
|
|
6
6
|
*/
|
|
7
|
-
import type { ConfigurationLoadResult, ValidationResult, ConfigurationPaths, WaveConfiguration, Scope } from "../types/configuration.js";
|
|
7
|
+
import type { ConfigurationLoadResult, ValidationResult, ConfigurationPaths, WaveConfiguration, Scope, MarketplaceConfig } from "../types/configuration.js";
|
|
8
8
|
import { type EnvironmentValidationResult, type MergedEnvironmentContext, type EnvironmentMergeOptions } from "../types/environment.js";
|
|
9
9
|
import { GatewayConfig, ModelConfig, PermissionMode, AgentOptions } from "../types/index.js";
|
|
10
10
|
import { ClientOptions } from "openai";
|
|
@@ -114,6 +114,22 @@ export declare class ConfigurationService {
|
|
|
114
114
|
* Update the enabled state of a plugin in the specified scope
|
|
115
115
|
*/
|
|
116
116
|
updateEnabledPlugin(workdir: string, scope: Scope, pluginId: string, enabled: boolean): Promise<void>;
|
|
117
|
+
/**
|
|
118
|
+
* Get merged marketplaces from all scopes
|
|
119
|
+
*/
|
|
120
|
+
getMergedMarketplaces(workdir: string): Record<string, MarketplaceConfig>;
|
|
121
|
+
/**
|
|
122
|
+
* Get marketplaces at a specific scope
|
|
123
|
+
*/
|
|
124
|
+
getScopedMarketplaces(workdir: string, scope: Scope): Record<string, MarketplaceConfig>;
|
|
125
|
+
/**
|
|
126
|
+
* Add a marketplace to the specified scope
|
|
127
|
+
*/
|
|
128
|
+
addMarketplaceToScope(workdir: string, scope: Scope, name: string, config: MarketplaceConfig): Promise<void>;
|
|
129
|
+
/**
|
|
130
|
+
* Remove a marketplace from the specified scope
|
|
131
|
+
*/
|
|
132
|
+
removeMarketplaceFromScope(workdir: string, scope: Scope, name: string): Promise<void>;
|
|
117
133
|
/**
|
|
118
134
|
* Remove a plugin from the enabled plugins in the specified scope
|
|
119
135
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configurationService.d.ts","sourceRoot":"","sources":["../../src/services/configurationService.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EACV,uBAAuB,EACvB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,KAAK,
|
|
1
|
+
{"version":3,"file":"configurationService.d.ts","sourceRoot":"","sources":["../../src/services/configurationService.ts"],"names":[],"mappings":"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"}
|
|
@@ -627,6 +627,99 @@ export class ConfigurationService {
|
|
|
627
627
|
config.enabledPlugins[pluginId] = enabled;
|
|
628
628
|
await fs.writeFile(configPath, JSON.stringify(config, null, 2), "utf-8");
|
|
629
629
|
}
|
|
630
|
+
/**
|
|
631
|
+
* Get merged marketplaces from all scopes
|
|
632
|
+
*/
|
|
633
|
+
getMergedMarketplaces(workdir) {
|
|
634
|
+
const mergedConfig = loadMergedWaveConfig(workdir);
|
|
635
|
+
return mergedConfig?.marketplaces || {};
|
|
636
|
+
}
|
|
637
|
+
/**
|
|
638
|
+
* Get marketplaces at a specific scope
|
|
639
|
+
*/
|
|
640
|
+
getScopedMarketplaces(workdir, scope) {
|
|
641
|
+
let configPath;
|
|
642
|
+
if (scope === "user") {
|
|
643
|
+
configPath = getUserConfigPaths()[0];
|
|
644
|
+
}
|
|
645
|
+
else if (scope === "project") {
|
|
646
|
+
configPath = getProjectConfigPaths(workdir)[1];
|
|
647
|
+
}
|
|
648
|
+
else {
|
|
649
|
+
configPath = getProjectConfigPaths(workdir)[0];
|
|
650
|
+
}
|
|
651
|
+
const config = loadWaveConfigFromFile(configPath);
|
|
652
|
+
return config?.marketplaces || {};
|
|
653
|
+
}
|
|
654
|
+
/**
|
|
655
|
+
* Add a marketplace to the specified scope
|
|
656
|
+
*/
|
|
657
|
+
async addMarketplaceToScope(workdir, scope, name, config) {
|
|
658
|
+
if (scope !== "user" && !existsSync(workdir)) {
|
|
659
|
+
throw new Error(`Working directory does not exist: ${workdir}`);
|
|
660
|
+
}
|
|
661
|
+
let configPath;
|
|
662
|
+
if (scope === "user") {
|
|
663
|
+
configPath = getUserConfigPaths()[0];
|
|
664
|
+
}
|
|
665
|
+
else if (scope === "project") {
|
|
666
|
+
configPath = getProjectConfigPaths(workdir)[1];
|
|
667
|
+
}
|
|
668
|
+
else {
|
|
669
|
+
configPath = getProjectConfigPaths(workdir)[0];
|
|
670
|
+
}
|
|
671
|
+
const configDir = path.dirname(configPath);
|
|
672
|
+
if (!existsSync(configDir)) {
|
|
673
|
+
await fs.mkdir(configDir, { recursive: true });
|
|
674
|
+
}
|
|
675
|
+
let fileConfig = {};
|
|
676
|
+
if (existsSync(configPath)) {
|
|
677
|
+
try {
|
|
678
|
+
const content = await fs.readFile(configPath, "utf-8");
|
|
679
|
+
fileConfig = JSON.parse(content);
|
|
680
|
+
}
|
|
681
|
+
catch {
|
|
682
|
+
// Start with empty config if file is corrupted
|
|
683
|
+
}
|
|
684
|
+
}
|
|
685
|
+
if (!fileConfig.marketplaces) {
|
|
686
|
+
fileConfig.marketplaces = {};
|
|
687
|
+
}
|
|
688
|
+
fileConfig.marketplaces[name] = config;
|
|
689
|
+
await fs.writeFile(configPath, JSON.stringify(fileConfig, null, 2), "utf-8");
|
|
690
|
+
}
|
|
691
|
+
/**
|
|
692
|
+
* Remove a marketplace from the specified scope
|
|
693
|
+
*/
|
|
694
|
+
async removeMarketplaceFromScope(workdir, scope, name) {
|
|
695
|
+
if (scope !== "user" && !existsSync(workdir)) {
|
|
696
|
+
throw new Error(`Working directory does not exist: ${workdir}`);
|
|
697
|
+
}
|
|
698
|
+
let configPath;
|
|
699
|
+
if (scope === "user") {
|
|
700
|
+
configPath = getUserConfigPaths()[0];
|
|
701
|
+
}
|
|
702
|
+
else if (scope === "project") {
|
|
703
|
+
configPath = getProjectConfigPaths(workdir)[1];
|
|
704
|
+
}
|
|
705
|
+
else {
|
|
706
|
+
configPath = getProjectConfigPaths(workdir)[0];
|
|
707
|
+
}
|
|
708
|
+
if (!existsSync(configPath)) {
|
|
709
|
+
return;
|
|
710
|
+
}
|
|
711
|
+
try {
|
|
712
|
+
const content = await fs.readFile(configPath, "utf-8");
|
|
713
|
+
const fileConfig = JSON.parse(content);
|
|
714
|
+
if (fileConfig.marketplaces && name in fileConfig.marketplaces) {
|
|
715
|
+
delete fileConfig.marketplaces[name];
|
|
716
|
+
await fs.writeFile(configPath, JSON.stringify(fileConfig, null, 2), "utf-8");
|
|
717
|
+
}
|
|
718
|
+
}
|
|
719
|
+
catch {
|
|
720
|
+
// Ignore errors for corrupted or non-existent files
|
|
721
|
+
}
|
|
722
|
+
}
|
|
630
723
|
/**
|
|
631
724
|
* Remove a plugin from the enabled plugins in the specified scope
|
|
632
725
|
*/
|
|
@@ -777,6 +870,7 @@ export function loadWaveConfigFromFile(filePath) {
|
|
|
777
870
|
? config.autoMemoryEnabled
|
|
778
871
|
: undefined,
|
|
779
872
|
models: config.models || undefined,
|
|
873
|
+
marketplaces: config.marketplaces || undefined,
|
|
780
874
|
};
|
|
781
875
|
}
|
|
782
876
|
catch (error) {
|
|
@@ -893,6 +987,12 @@ export function loadMergedWaveConfig(workdir) {
|
|
|
893
987
|
if (config.autoMemoryFrequency !== undefined) {
|
|
894
988
|
mergedConfig.autoMemoryFrequency = config.autoMemoryFrequency;
|
|
895
989
|
}
|
|
990
|
+
// Merge marketplaces (last one wins for same key)
|
|
991
|
+
if (config.marketplaces) {
|
|
992
|
+
if (!mergedConfig.marketplaces)
|
|
993
|
+
mergedConfig.marketplaces = {};
|
|
994
|
+
Object.assign(mergedConfig.marketplaces, config.marketplaces);
|
|
995
|
+
}
|
|
896
996
|
// Merge models
|
|
897
997
|
if (config.models) {
|
|
898
998
|
if (!mergedConfig.models)
|
|
@@ -922,6 +1022,10 @@ export function loadMergedWaveConfig(workdir) {
|
|
|
922
1022
|
: undefined,
|
|
923
1023
|
language: mergedConfig.language,
|
|
924
1024
|
autoMemoryEnabled: mergedConfig.autoMemoryEnabled,
|
|
1025
|
+
marketplaces: mergedConfig.marketplaces &&
|
|
1026
|
+
Object.keys(mergedConfig.marketplaces).length > 0
|
|
1027
|
+
? mergedConfig.marketplaces
|
|
1028
|
+
: undefined,
|
|
925
1029
|
models: mergedConfig.models && Object.keys(mergedConfig.models).length > 0
|
|
926
1030
|
? mergedConfig.models
|
|
927
1031
|
: undefined,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../src/services/hook.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,4BAA4B,EAElC,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../src/services/hook.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,4BAA4B,EAElC,MAAM,mBAAmB,CAAC;AA2F3B;;GAEG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,oBAAoB,GAAG,4BAA4B,EAC5D,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,mBAAmB,CAAC,CA6I9B;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAAE,EAClB,OAAO,EAAE,oBAAoB,GAAG,4BAA4B,EAC5D,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAchC;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAMhC;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAsBtD"}
|
package/dist/services/hook.js
CHANGED
|
@@ -58,6 +58,21 @@ async function buildHookJsonInput(context) {
|
|
|
58
58
|
jsonInput.name = context.worktreeName;
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
|
+
// Add SessionStart-specific fields
|
|
62
|
+
if (context.event === "SessionStart") {
|
|
63
|
+
if (context.source !== undefined) {
|
|
64
|
+
jsonInput.source = context.source;
|
|
65
|
+
}
|
|
66
|
+
if (context.agentType !== undefined) {
|
|
67
|
+
jsonInput.agent_type = context.agentType;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// Add SessionEnd-specific fields
|
|
71
|
+
if (context.event === "SessionEnd") {
|
|
72
|
+
if (context.endSource !== undefined) {
|
|
73
|
+
jsonInput.end_source = context.endSource;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
61
76
|
return jsonInput;
|
|
62
77
|
}
|
|
63
78
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initializationService.d.ts","sourceRoot":"","sources":["../../src/services/initializationService.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,OAAO,EACP,MAAM,EACN,YAAY,EACZ,WAAW,EACZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAIpD,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,YAAY,CAAC;IAC3B,eAAe,EAAE,eAAe,CAAC;IACjC,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,WAAW,CAAC;IACzB,aAAa,EAAE,aAAa,CAAC;IAC7B,OAAO,EAAE,YAAY,CAAC;IACtB,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,WAAW,CAAC;IACxB,oBAAoB,EAAE,oBAAoB,CAAC;IAC3C,WAAW,EAAE,WAAW,CAAC;IACzB,cAAc,EAAE,cAAc,CAAC;IAC/B,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,WAAW,EAAE,WAAW,CAAC;IACzB,gBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,wBAAwB,EAAE,MAAM,IAAI,CAAC;CACtC;AAED,qBAAa,qBAAqB;WACZ,UAAU,CAC5B,OAAO,EAAE,qBAAqB,EAC9B,OAAO,CAAC,EAAE;QACR,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,mBAAmB,CAAC,EAAE,OAAO,CAAC;QAC9B,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;KACtB,GACA,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"initializationService.d.ts","sourceRoot":"","sources":["../../src/services/initializationService.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,OAAO,EACP,MAAM,EACN,YAAY,EACZ,WAAW,EACZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAIpD,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,YAAY,CAAC;IAC3B,eAAe,EAAE,eAAe,CAAC;IACjC,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,WAAW,CAAC;IACzB,aAAa,EAAE,aAAa,CAAC;IAC7B,OAAO,EAAE,YAAY,CAAC;IACtB,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,WAAW,CAAC;IACxB,oBAAoB,EAAE,oBAAoB,CAAC;IAC3C,WAAW,EAAE,WAAW,CAAC;IACzB,cAAc,EAAE,cAAc,CAAC;IAC/B,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,WAAW,EAAE,WAAW,CAAC;IACzB,gBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,wBAAwB,EAAE,MAAM,IAAI,CAAC;CACtC;AAED,qBAAa,qBAAqB;WACZ,UAAU,CAC5B,OAAO,EAAE,qBAAqB,EAC9B,OAAO,CAAC,EAAE;QACR,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,mBAAmB,CAAC,EAAE,OAAO,CAAC;QAC9B,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;KACtB,GACA,OAAO,CAAC,IAAI,CAAC;CAyTjB"}
|
|
@@ -75,6 +75,29 @@ export class InitializationService {
|
|
|
75
75
|
logger?.error("Failed to initialize hooks system:", error);
|
|
76
76
|
// Don't throw error to prevent app startup failure
|
|
77
77
|
}
|
|
78
|
+
// Execute SessionStart hooks
|
|
79
|
+
try {
|
|
80
|
+
const phaseStart = performance.now();
|
|
81
|
+
const sessionStartResult = await hookManager.executeSessionStartHooks("startup", messageManager.getSessionId(), messageManager.getTranscriptPath());
|
|
82
|
+
// Inject additionalContext as a meta user message (matches Claude Code)
|
|
83
|
+
if (sessionStartResult.additionalContext) {
|
|
84
|
+
messageManager.addUserMessage({
|
|
85
|
+
content: `<system-reminder>\nSessionStart hook additional context: ${sessionStartResult.additionalContext}\n</system-reminder>`,
|
|
86
|
+
isMeta: true,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
// Inject initialUserMessage as a meta user message
|
|
90
|
+
if (sessionStartResult.initialUserMessage) {
|
|
91
|
+
messageManager.addUserMessage({
|
|
92
|
+
content: sessionStartResult.initialUserMessage,
|
|
93
|
+
isMeta: true,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
logger?.debug(`Initialization Phase [SessionStart Hooks] took ${(performance.now() - phaseStart).toFixed(2)}ms`);
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
logger?.warn("SessionStart hooks execution failed:", error);
|
|
100
|
+
}
|
|
78
101
|
// Trigger WorktreeCreate hook if this is a new worktree
|
|
79
102
|
if (agentOptions.isNewWorktree && hookManager) {
|
|
80
103
|
try {
|
|
@@ -188,7 +211,7 @@ export class InitializationService {
|
|
|
188
211
|
messageManager.rebuildUsageFromMessages(sessionToRestore?.messages || []);
|
|
189
212
|
if (sessionToRestore) {
|
|
190
213
|
messageManager.initializeFromSession(sessionToRestore);
|
|
191
|
-
// Update task manager with the root session ID to ensure continuity across
|
|
214
|
+
// Update task manager with the root session ID to ensure continuity across compactions
|
|
192
215
|
taskManager.setTaskListId(sessionToRestore.rootSessionId || sessionToRestore.id);
|
|
193
216
|
// After session is initialized, load tasks for the session
|
|
194
217
|
const tasks = await taskManager.listTasks();
|
|
@@ -103,7 +103,7 @@ export class InteractionService {
|
|
|
103
103
|
messageManager.rebuildUsageFromMessages(sessionData.messages);
|
|
104
104
|
// 6. Initialize session state last
|
|
105
105
|
messageManager.initializeFromSession(sessionData);
|
|
106
|
-
// Update task manager with the root session ID to ensure continuity across
|
|
106
|
+
// Update task manager with the root session ID to ensure continuity across compactions
|
|
107
107
|
taskManager.setTaskListId(sessionData.rootSessionId || sessionData.id);
|
|
108
108
|
// 7. Load tasks for the restored session
|
|
109
109
|
const tasks = await taskManager.listTasks();
|
|
@@ -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;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;
|
|
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;IAgBhD;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;CAgBhC"}
|
|
@@ -123,7 +123,13 @@ export class PluginLoader {
|
|
|
123
123
|
const hooksPath = path.join(pluginPath, "hooks", "hooks.json");
|
|
124
124
|
try {
|
|
125
125
|
const content = await fs.readFile(hooksPath, "utf-8");
|
|
126
|
-
|
|
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;
|
|
127
133
|
}
|
|
128
134
|
catch {
|
|
129
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");
|
|
@@ -8,7 +8,12 @@
|
|
|
8
8
|
import type { HookEvent, HookEventConfig } from "./hooks.js";
|
|
9
9
|
import type { PermissionMode } from "./permissions.js";
|
|
10
10
|
import type { ModelConfig } from "./config.js";
|
|
11
|
+
import type { MarketplaceSource } from "./marketplace.js";
|
|
11
12
|
export type Scope = "user" | "project" | "local";
|
|
13
|
+
export interface MarketplaceConfig {
|
|
14
|
+
source: MarketplaceSource;
|
|
15
|
+
autoUpdate?: boolean;
|
|
16
|
+
}
|
|
12
17
|
/**
|
|
13
18
|
* Root configuration structure for all Wave Agent settings including hooks and environment variables
|
|
14
19
|
*/
|
|
@@ -36,6 +41,8 @@ export interface WaveConfiguration {
|
|
|
36
41
|
autoMemoryFrequency?: number;
|
|
37
42
|
/** Model-specific configuration overrides */
|
|
38
43
|
models?: Record<string, Partial<ModelConfig>>;
|
|
44
|
+
/** Scoped marketplace declarations */
|
|
45
|
+
marketplaces?: Record<string, MarketplaceConfig>;
|
|
39
46
|
}
|
|
40
47
|
/**
|
|
41
48
|
* Legacy alias for backward compatibility - will be deprecated
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configuration.d.ts","sourceRoot":"","sources":["../../src/types/configuration.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"configuration.d.ts","sourceRoot":"","sources":["../../src/types/configuration.ts"],"names":[],"mappings":"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"}
|
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
|
@@ -39,6 +39,8 @@ export interface KnownMarketplace {
|
|
|
39
39
|
isBuiltin?: boolean;
|
|
40
40
|
autoUpdate?: boolean;
|
|
41
41
|
lastUpdated?: string;
|
|
42
|
+
/** The scope where this marketplace was declared (user, project, local, or builtin) */
|
|
43
|
+
declaredScope?: "user" | "project" | "local" | "builtin";
|
|
42
44
|
}
|
|
43
45
|
export interface KnownMarketplacesRegistry {
|
|
44
46
|
marketplaces: KnownMarketplace[];
|
|
@@ -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,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;
|
|
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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"}
|
|
@@ -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),
|