wave-agent-sdk 0.17.0 → 0.17.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/deep-research/SKILL.md +90 -0
- package/builtin/skills/settings/ENV.md +6 -3
- package/dist/agent.d.ts +28 -1
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +128 -34
- package/dist/constants/goalPrompts.d.ts +2 -0
- package/dist/constants/goalPrompts.d.ts.map +1 -0
- package/dist/constants/goalPrompts.js +10 -0
- package/dist/constants/tools.d.ts +1 -0
- package/dist/constants/tools.d.ts.map +1 -1
- package/dist/constants/tools.js +1 -0
- package/dist/managers/aiManager.d.ts +7 -0
- package/dist/managers/aiManager.d.ts.map +1 -1
- package/dist/managers/aiManager.js +77 -41
- package/dist/managers/backgroundTaskManager.d.ts.map +1 -1
- package/dist/managers/backgroundTaskManager.js +10 -2
- package/dist/managers/goalManager.d.ts +43 -0
- package/dist/managers/goalManager.d.ts.map +1 -0
- package/dist/managers/goalManager.js +177 -0
- package/dist/managers/messageManager.d.ts +2 -2
- package/dist/managers/messageManager.d.ts.map +1 -1
- package/dist/managers/messageQueue.d.ts +10 -0
- package/dist/managers/messageQueue.d.ts.map +1 -1
- package/dist/managers/messageQueue.js +53 -1
- package/dist/managers/pluginManager.d.ts.map +1 -1
- package/dist/managers/pluginManager.js +7 -1
- package/dist/managers/skillManager.d.ts +2 -0
- package/dist/managers/skillManager.d.ts.map +1 -1
- package/dist/managers/skillManager.js +19 -9
- package/dist/managers/slashCommandManager.d.ts +6 -0
- package/dist/managers/slashCommandManager.d.ts.map +1 -1
- package/dist/managers/slashCommandManager.js +105 -0
- package/dist/managers/toolManager.d.ts.map +1 -1
- package/dist/managers/toolManager.js +5 -0
- package/dist/managers/workflowManager.d.ts +65 -0
- package/dist/managers/workflowManager.d.ts.map +1 -0
- package/dist/managers/workflowManager.js +380 -0
- package/dist/prompts/index.d.ts +2 -1
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/index.js +3 -3
- package/dist/services/aiService.d.ts +23 -0
- package/dist/services/aiService.d.ts.map +1 -1
- package/dist/services/aiService.js +102 -9
- package/dist/services/configurationService.d.ts +1 -1
- package/dist/services/configurationService.d.ts.map +1 -1
- package/dist/services/configurationService.js +3 -16
- package/dist/services/hook.d.ts.map +1 -1
- package/dist/services/hook.js +4 -0
- package/dist/services/session.d.ts +9 -1
- package/dist/services/session.d.ts.map +1 -1
- package/dist/services/session.js +28 -1
- package/dist/tools/bashTool.d.ts.map +1 -1
- package/dist/tools/bashTool.js +49 -7
- package/dist/tools/readTool.d.ts.map +1 -1
- package/dist/tools/readTool.js +1 -1
- package/dist/tools/taskManagementTools.d.ts.map +1 -1
- package/dist/tools/taskManagementTools.js +103 -157
- package/dist/tools/types.d.ts +2 -0
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/webFetchTool.d.ts.map +1 -1
- package/dist/tools/webFetchTool.js +0 -9
- package/dist/tools/workflowTool.d.ts +11 -0
- package/dist/tools/workflowTool.d.ts.map +1 -0
- package/dist/tools/workflowTool.js +190 -0
- package/dist/types/agent.d.ts +2 -0
- package/dist/types/agent.d.ts.map +1 -1
- package/dist/types/commands.d.ts +4 -0
- package/dist/types/commands.d.ts.map +1 -1
- package/dist/types/config.d.ts +2 -2
- package/dist/types/config.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 +2 -0
- package/dist/types/hooks.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/messaging.d.ts +2 -2
- package/dist/types/messaging.d.ts.map +1 -1
- package/dist/types/processes.d.ts +6 -2
- package/dist/types/processes.d.ts.map +1 -1
- package/dist/types/workflow.d.ts +2 -0
- package/dist/types/workflow.d.ts.map +1 -0
- package/dist/types/workflow.js +1 -0
- package/dist/utils/cacheControlUtils.d.ts +13 -8
- package/dist/utils/cacheControlUtils.d.ts.map +1 -1
- package/dist/utils/cacheControlUtils.js +73 -102
- package/dist/utils/containerSetup.d.ts.map +1 -1
- package/dist/utils/containerSetup.js +7 -0
- package/dist/utils/markdownParser.d.ts.map +1 -1
- package/dist/utils/markdownParser.js +21 -6
- package/dist/utils/messageOperations.d.ts +2 -2
- package/dist/utils/messageOperations.d.ts.map +1 -1
- package/dist/utils/notificationXml.d.ts.map +1 -1
- package/dist/workflow/budgetTracker.d.ts +12 -0
- package/dist/workflow/budgetTracker.d.ts.map +1 -0
- package/dist/workflow/budgetTracker.js +30 -0
- package/dist/workflow/concurrencyLimiter.d.ts +14 -0
- package/dist/workflow/concurrencyLimiter.d.ts.map +1 -0
- package/dist/workflow/concurrencyLimiter.js +39 -0
- package/dist/workflow/journal.d.ts +19 -0
- package/dist/workflow/journal.d.ts.map +1 -0
- package/dist/workflow/journal.js +74 -0
- package/dist/workflow/progressReporter.d.ts +21 -0
- package/dist/workflow/progressReporter.d.ts.map +1 -0
- package/dist/workflow/progressReporter.js +118 -0
- package/dist/workflow/runState.d.ts +16 -0
- package/dist/workflow/runState.d.ts.map +1 -0
- package/dist/workflow/runState.js +57 -0
- package/dist/workflow/scriptRuntime.d.ts +35 -0
- package/dist/workflow/scriptRuntime.d.ts.map +1 -0
- package/dist/workflow/scriptRuntime.js +196 -0
- package/dist/workflow/structuredOutput.d.ts +27 -0
- package/dist/workflow/structuredOutput.d.ts.map +1 -0
- package/dist/workflow/structuredOutput.js +106 -0
- package/dist/workflow/types.d.ts +81 -0
- package/dist/workflow/types.d.ts.map +1 -0
- package/dist/workflow/types.js +1 -0
- package/dist/workflow/workflowApis.d.ts +46 -0
- package/dist/workflow/workflowApis.d.ts.map +1 -0
- package/dist/workflow/workflowApis.js +280 -0
- package/package.json +1 -1
- package/src/agent.ts +144 -34
- package/src/constants/goalPrompts.ts +10 -0
- package/src/constants/tools.ts +1 -0
- package/src/managers/aiManager.ts +91 -47
- package/src/managers/backgroundTaskManager.ts +16 -4
- package/src/managers/goalManager.ts +232 -0
- package/src/managers/messageManager.ts +2 -2
- package/src/managers/messageQueue.ts +59 -1
- package/src/managers/pluginManager.ts +8 -1
- package/src/managers/skillManager.ts +20 -9
- package/src/managers/slashCommandManager.ts +119 -0
- package/src/managers/toolManager.ts +7 -0
- package/src/managers/workflowManager.ts +491 -0
- package/src/prompts/index.ts +4 -2
- package/src/services/aiService.ts +166 -12
- package/src/services/configurationService.ts +2 -22
- package/src/services/hook.ts +5 -0
- package/src/services/session.ts +42 -2
- package/src/tools/bashTool.ts +64 -9
- package/src/tools/readTool.ts +1 -2
- package/src/tools/taskManagementTools.ts +146 -195
- package/src/tools/types.ts +2 -0
- package/src/tools/webFetchTool.ts +0 -12
- package/src/tools/workflowTool.ts +205 -0
- package/src/types/agent.ts +6 -0
- package/src/types/commands.ts +4 -0
- package/src/types/config.ts +2 -2
- package/src/types/core.ts +3 -3
- package/src/types/hooks.ts +2 -0
- package/src/types/index.ts +1 -0
- package/src/types/messaging.ts +2 -2
- package/src/types/processes.ts +10 -2
- package/src/types/workflow.ts +5 -0
- package/src/utils/cacheControlUtils.ts +106 -131
- package/src/utils/containerSetup.ts +9 -0
- package/src/utils/markdownParser.ts +26 -8
- package/src/utils/messageOperations.ts +2 -2
- package/src/utils/notificationXml.ts +6 -1
- package/src/workflow/budgetTracker.ts +34 -0
- package/src/workflow/concurrencyLimiter.ts +47 -0
- package/src/workflow/journal.ts +95 -0
- package/src/workflow/progressReporter.ts +141 -0
- package/src/workflow/runState.ts +65 -0
- package/src/workflow/scriptRuntime.ts +274 -0
- package/src/workflow/structuredOutput.ts +123 -0
- package/src/workflow/types.ts +95 -0
- package/src/workflow/workflowApis.ts +412 -0
|
@@ -418,9 +418,7 @@ export class AIManager {
|
|
|
418
418
|
if (usedTokens >= POST_COMPACT_TOKEN_BUDGET)
|
|
419
419
|
break;
|
|
420
420
|
}
|
|
421
|
-
// 2.
|
|
422
|
-
contextParts.push(`\n\n[Working Directory]\nCurrent working directory: ${this.getWorkdir()}`);
|
|
423
|
-
// 3. Plan mode context
|
|
421
|
+
// 2. Plan mode context
|
|
424
422
|
const currentMode = this.permissionManager?.getCurrentEffectiveMode(this.getModelConfig().permissionMode);
|
|
425
423
|
if (currentMode === "plan") {
|
|
426
424
|
const planFilePath = this.permissionManager?.getPlanFilePath();
|
|
@@ -637,6 +635,7 @@ export class AIManager {
|
|
|
637
635
|
model: model, // Use passed model
|
|
638
636
|
systemPrompt: buildSystemPrompt(this.systemPrompt, filteredToolPlugins, {
|
|
639
637
|
workdir: this.getWorkdir(),
|
|
638
|
+
originalWorkdir: this.getOriginalWorkdir(),
|
|
640
639
|
memory: combinedMemory,
|
|
641
640
|
language: this.getLanguage(),
|
|
642
641
|
isSubagent: !!this.subagentType,
|
|
@@ -644,6 +643,7 @@ export class AIManager {
|
|
|
644
643
|
permissionMode: currentMode,
|
|
645
644
|
}), // Pass custom system prompt
|
|
646
645
|
maxTokens: maxTokens, // Pass max tokens override
|
|
646
|
+
toolChoice: this.toolChoiceOverride, // Pass tool_choice override
|
|
647
647
|
};
|
|
648
648
|
// Add streaming callbacks only if streaming is enabled
|
|
649
649
|
if (this.stream) {
|
|
@@ -681,32 +681,11 @@ export class AIManager {
|
|
|
681
681
|
this.messageManager.updateCurrentMessageReasoning(reasoning);
|
|
682
682
|
};
|
|
683
683
|
}
|
|
684
|
-
startLLMRequestSpan(model || this.getModelConfig().model);
|
|
685
|
-
const apiStartTime = Date.now();
|
|
686
|
-
let ttftMs;
|
|
687
|
-
// If streaming, track TTFT via callback
|
|
688
|
-
if (this.stream && callAgentOptions.onContentUpdate) {
|
|
689
|
-
const originalOnContentUpdate = callAgentOptions.onContentUpdate;
|
|
690
|
-
let firstTokenReceived = false;
|
|
691
|
-
callAgentOptions.onContentUpdate = (content) => {
|
|
692
|
-
if (!firstTokenReceived) {
|
|
693
|
-
ttftMs = Date.now() - apiStartTime;
|
|
694
|
-
firstTokenReceived = true;
|
|
695
|
-
}
|
|
696
|
-
originalOnContentUpdate(content);
|
|
697
|
-
};
|
|
698
|
-
}
|
|
684
|
+
startLLMRequestSpan(model || this.getModelConfig().model || "");
|
|
699
685
|
const result = await aiService.callAgent(callAgentOptions);
|
|
700
|
-
const ttltMs = Date.now() - apiStartTime;
|
|
701
686
|
// End LLM span with usage data
|
|
702
687
|
endLLMRequestSpan({
|
|
703
|
-
model: model || this.getModelConfig().model,
|
|
704
|
-
inputTokens: result.usage?.prompt_tokens,
|
|
705
|
-
outputTokens: result.usage?.completion_tokens,
|
|
706
|
-
cacheReadTokens: result.usage?.cache_read_input_tokens,
|
|
707
|
-
cacheCreationTokens: result.usage?.cache_creation_input_tokens,
|
|
708
|
-
ttftMs,
|
|
709
|
-
ttltMs,
|
|
688
|
+
model: model || this.getModelConfig().model || "",
|
|
710
689
|
success: true,
|
|
711
690
|
hasToolCall: !!(result.tool_calls && result.tool_calls.length > 0),
|
|
712
691
|
});
|
|
@@ -906,7 +885,7 @@ export class AIManager {
|
|
|
906
885
|
(toolResult.error ? `Error: ${toolResult.error}` : "");
|
|
907
886
|
if (jsonRecovered) {
|
|
908
887
|
toolResultContent +=
|
|
909
|
-
"\n\
|
|
888
|
+
"\n\nTool arguments were truncated (likely exceeded max output tokens). Please reduce your output or split into multiple tool calls.";
|
|
910
889
|
}
|
|
911
890
|
// Update message state - tool execution completed
|
|
912
891
|
this.messageManager.updateToolBlock({
|
|
@@ -1035,7 +1014,7 @@ export class AIManager {
|
|
|
1035
1014
|
catch (error) {
|
|
1036
1015
|
// End LLM span with error
|
|
1037
1016
|
endLLMRequestSpan({
|
|
1038
|
-
model: model || this.getModelConfig().model,
|
|
1017
|
+
model: model || this.getModelConfig().model || "",
|
|
1039
1018
|
success: false,
|
|
1040
1019
|
error: error instanceof Error ? error.message : String(error),
|
|
1041
1020
|
});
|
|
@@ -1098,19 +1077,75 @@ export class AIManager {
|
|
|
1098
1077
|
this.messageManager.addFileHistoryBlock(snapshots);
|
|
1099
1078
|
}
|
|
1100
1079
|
}
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
//
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1080
|
+
// Goal evaluation — supersedes Stop hooks when active
|
|
1081
|
+
const goalManager = this.container.has("GoalManager")
|
|
1082
|
+
? this.container.get("GoalManager")
|
|
1083
|
+
: undefined;
|
|
1084
|
+
let goalContinuing = false;
|
|
1085
|
+
if (goalManager?.isGoalActive() && !this.subagentType) {
|
|
1086
|
+
// 1. Increment turn count and check circuit breakers
|
|
1087
|
+
goalManager.incrementTurnCount();
|
|
1088
|
+
const circuitBreaker = goalManager.checkCircuitBreakers();
|
|
1089
|
+
if (circuitBreaker) {
|
|
1090
|
+
goalManager.clearGoal();
|
|
1091
|
+
logger?.info(`[Goal] ${circuitBreaker}`);
|
|
1092
|
+
this.messageManager.addUserMessage({
|
|
1093
|
+
content: `<system-reminder>${circuitBreaker}</system-reminder>`,
|
|
1094
|
+
isMeta: true,
|
|
1095
|
+
});
|
|
1096
|
+
// Fall through to normal Stop hooks on the final turn
|
|
1097
|
+
}
|
|
1098
|
+
else {
|
|
1099
|
+
// 2. Evaluate goal
|
|
1100
|
+
const evaluation = await goalManager.evaluateGoal(abortController.signal);
|
|
1101
|
+
if (evaluation.isMet) {
|
|
1102
|
+
goalManager.clearGoal();
|
|
1103
|
+
logger?.info(`[Goal] Goal achieved: ${evaluation.reason}`);
|
|
1104
|
+
this.messageManager.addUserMessage({
|
|
1105
|
+
content: `<system-reminder>Goal achieved: ${evaluation.reason}</system-reminder>`,
|
|
1106
|
+
isMeta: true,
|
|
1107
|
+
});
|
|
1108
|
+
// Fall through to normal Stop hooks on the final turn
|
|
1109
|
+
}
|
|
1110
|
+
else {
|
|
1111
|
+
const goal = goalManager.getGoal();
|
|
1112
|
+
goal.lastReason = evaluation.reason;
|
|
1113
|
+
logger?.info(`[Goal] Not yet met: ${evaluation.reason}`);
|
|
1114
|
+
this.messageManager.addUserMessage({
|
|
1115
|
+
content: `<system-reminder>Goal not yet met: ${evaluation.reason}. Continue working toward: ${goal.condition}</system-reminder>`,
|
|
1116
|
+
isMeta: true,
|
|
1117
|
+
});
|
|
1118
|
+
// Keep loading state active to prevent UI flicker
|
|
1119
|
+
this.setIsLoading(true);
|
|
1120
|
+
goalContinuing = true;
|
|
1121
|
+
await this.sendAIMessage({
|
|
1122
|
+
recursionDepth: 0,
|
|
1123
|
+
model,
|
|
1124
|
+
allowedRules,
|
|
1125
|
+
maxTokens,
|
|
1126
|
+
});
|
|
1127
|
+
}
|
|
1128
|
+
}
|
|
1129
|
+
}
|
|
1130
|
+
// Skip Stop hooks when goal evaluator is continuing the conversation
|
|
1131
|
+
if (goalContinuing) {
|
|
1132
|
+
// Goal evaluator supersedes Stop hooks
|
|
1133
|
+
}
|
|
1134
|
+
else {
|
|
1135
|
+
const shouldContinue = await this.executeStopHooks();
|
|
1136
|
+
// If Stop/SubagentStop hooks indicate we should continue (due to blocking errors),
|
|
1137
|
+
// restart the AI conversation cycle
|
|
1138
|
+
if (shouldContinue) {
|
|
1139
|
+
logger?.info(`${this.subagentType ? "SubagentStop" : "Stop"} hooks indicate issues need fixing, continuing conversation...`);
|
|
1140
|
+
// Restart the conversation to let AI fix the issues
|
|
1141
|
+
// Use recursionDepth = 0 to set loading false again for continuation
|
|
1142
|
+
await this.sendAIMessage({
|
|
1143
|
+
recursionDepth: 0,
|
|
1144
|
+
model,
|
|
1145
|
+
allowedRules,
|
|
1146
|
+
maxTokens,
|
|
1147
|
+
});
|
|
1148
|
+
}
|
|
1114
1149
|
}
|
|
1115
1150
|
}
|
|
1116
1151
|
}
|
|
@@ -1249,6 +1284,7 @@ export class AIManager {
|
|
|
1249
1284
|
toolInput,
|
|
1250
1285
|
toolResponse,
|
|
1251
1286
|
subagentType: this.subagentType, // Include subagent type in hook context
|
|
1287
|
+
planFilePath: this.permissionManager?.getPlanFilePath(),
|
|
1252
1288
|
env: this.container.get("MergedEnv") ||
|
|
1253
1289
|
process.env,
|
|
1254
1290
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backgroundTaskManager.d.ts","sourceRoot":"","sources":["../../src/managers/backgroundTaskManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAIzD,OAAO,EAAE,cAAc,EAAmB,MAAM,uBAAuB,CAAC;AAGxE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAGlD,MAAM,WAAW,8BAA8B;IAC7C,uBAAuB,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,IAAI,CAAC;CAC7D;AAED,MAAM,WAAW,4BAA4B;IAC3C,SAAS,CAAC,EAAE,8BAA8B,CAAC;IAC3C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,qBAAqB;IAO9B,OAAO,CAAC,SAAS;IANnB,OAAO,CAAC,KAAK,CAAqC;IAClD,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,SAAS,CAAiC;IAClD,OAAO,CAAC,OAAO,CAAS;gBAGd,SAAS,EAAE,SAAS,EAC5B,OAAO,EAAE,4BAA4B;IAMvC,OAAO,KAAK,iBAAiB,GAE5B;IAED,OAAO,CAAC,iBAAiB;IAIlB,UAAU,IAAI,MAAM;IAIpB,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAKnC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAI/C,WAAW,IAAI,cAAc,EAAE;IAI/B,UAAU,CACf,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,GACf;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,YAAY,CAAC;QAAC,MAAM,EAAE,MAAM,IAAI,CAAA;KAAE;
|
|
1
|
+
{"version":3,"file":"backgroundTaskManager.d.ts","sourceRoot":"","sources":["../../src/managers/backgroundTaskManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAIzD,OAAO,EAAE,cAAc,EAAmB,MAAM,uBAAuB,CAAC;AAGxE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAGlD,MAAM,WAAW,8BAA8B;IAC7C,uBAAuB,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,IAAI,CAAC;CAC7D;AAED,MAAM,WAAW,4BAA4B;IAC3C,SAAS,CAAC,EAAE,8BAA8B,CAAC;IAC3C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,qBAAqB;IAO9B,OAAO,CAAC,SAAS;IANnB,OAAO,CAAC,KAAK,CAAqC;IAClD,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,SAAS,CAAiC;IAClD,OAAO,CAAC,OAAO,CAAS;gBAGd,SAAS,EAAE,SAAS,EAC5B,OAAO,EAAE,4BAA4B;IAMvC,OAAO,KAAK,iBAAiB,GAE5B;IAED,OAAO,CAAC,iBAAiB;IAIlB,UAAU,IAAI,MAAM;IAIpB,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAKnC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAI/C,WAAW,IAAI,cAAc,EAAE;IAI/B,UAAU,CACf,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,GACf;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,YAAY,CAAC;QAAC,MAAM,EAAE,MAAM,IAAI,CAAA;KAAE;IA8KnD,YAAY,CACjB,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,MAAM,EACf,aAAa,GAAE,MAAW,EAC1B,aAAa,GAAE,MAAW,GACzB,MAAM;IAqIF,SAAS,CACd,EAAE,EAAE,MAAM,EACV,MAAM,CAAC,EAAE,MAAM,GACd;QACD,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,IAAI;IAoCD,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAgC7B,OAAO,IAAI,IAAI;CAUvB"}
|
|
@@ -67,7 +67,11 @@ export class BackgroundTaskManager {
|
|
|
67
67
|
process.kill(-child.pid, "SIGKILL");
|
|
68
68
|
}
|
|
69
69
|
catch (error) {
|
|
70
|
-
|
|
70
|
+
// ESRCH means the process already exited — not an error
|
|
71
|
+
if (!(error instanceof Error) ||
|
|
72
|
+
error.code !== "ESRCH") {
|
|
73
|
+
logger.error("Failed to force kill process:", error);
|
|
74
|
+
}
|
|
71
75
|
}
|
|
72
76
|
}
|
|
73
77
|
}, 1000);
|
|
@@ -217,7 +221,11 @@ export class BackgroundTaskManager {
|
|
|
217
221
|
process.kill(-child.pid, "SIGKILL");
|
|
218
222
|
}
|
|
219
223
|
catch (error) {
|
|
220
|
-
|
|
224
|
+
// ESRCH means the process already exited — not an error
|
|
225
|
+
if (!(error instanceof Error) ||
|
|
226
|
+
error.code !== "ESRCH") {
|
|
227
|
+
logger.error("Failed to force kill process:", error);
|
|
228
|
+
}
|
|
221
229
|
}
|
|
222
230
|
}
|
|
223
231
|
}, 1000);
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Container } from "../utils/container.js";
|
|
2
|
+
export interface GoalState {
|
|
3
|
+
condition: string;
|
|
4
|
+
startedAt: number;
|
|
5
|
+
turnCount: number;
|
|
6
|
+
tokenBaseline: number;
|
|
7
|
+
lastReason?: string;
|
|
8
|
+
consecutiveEvalFailures: number;
|
|
9
|
+
}
|
|
10
|
+
export declare class GoalManager {
|
|
11
|
+
private container;
|
|
12
|
+
private state;
|
|
13
|
+
private onGoalStateChange?;
|
|
14
|
+
private onGoalEvaluating?;
|
|
15
|
+
constructor(container: Container);
|
|
16
|
+
private get messageManager();
|
|
17
|
+
private get aiManager();
|
|
18
|
+
setOnGoalStateChange(callback: (active: boolean, condition?: string, elapsed?: string) => void): void;
|
|
19
|
+
setOnGoalEvaluating(callback: (evaluating: boolean) => void): void;
|
|
20
|
+
setGoal(condition: string): void;
|
|
21
|
+
clearGoal(): void;
|
|
22
|
+
getGoal(): GoalState | null;
|
|
23
|
+
isGoalActive(): boolean;
|
|
24
|
+
incrementTurnCount(): void;
|
|
25
|
+
getStatusString(): string;
|
|
26
|
+
/**
|
|
27
|
+
* Check circuit breakers. Returns a clear reason if goal should be force-cleared, null otherwise.
|
|
28
|
+
*/
|
|
29
|
+
checkCircuitBreakers(): string | null;
|
|
30
|
+
/**
|
|
31
|
+
* Evaluate whether the goal has been met using the fast model.
|
|
32
|
+
*/
|
|
33
|
+
evaluateGoal(abortSignal?: AbortSignal): Promise<{
|
|
34
|
+
isMet: boolean;
|
|
35
|
+
reason: string;
|
|
36
|
+
}>;
|
|
37
|
+
/**
|
|
38
|
+
* Parse the evaluation response from the fast model.
|
|
39
|
+
*/
|
|
40
|
+
private parseEvaluationResponse;
|
|
41
|
+
private formatElapsed;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=goalManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"goalManager.d.ts","sourceRoot":"","sources":["../../src/managers/goalManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAQlD,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uBAAuB,EAAE,MAAM,CAAC;CACjC;AAOD,qBAAa,WAAW;IASV,OAAO,CAAC,SAAS;IAR7B,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,iBAAiB,CAAC,CAIhB;IACV,OAAO,CAAC,gBAAgB,CAAC,CAAgC;gBAErC,SAAS,EAAE,SAAS;IAExC,OAAO,KAAK,cAAc,GAEzB;IAED,OAAO,KAAK,SAAS,GAEpB;IAEM,oBAAoB,CACzB,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,GACxE,IAAI;IAIA,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI;IAIlE,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAqBhC,SAAS,IAAI,IAAI;IAQjB,OAAO,IAAI,SAAS,GAAG,IAAI;IAI3B,YAAY,IAAI,OAAO;IAIvB,kBAAkB,IAAI,IAAI;IAM1B,eAAe,IAAI,MAAM;IAUhC;;OAEG;IACI,oBAAoB,IAAI,MAAM,GAAG,IAAI;IAkB5C;;OAEG;IACU,YAAY,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC;QAC5D,KAAK,EAAE,OAAO,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IA0DF;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA+B/B,OAAO,CAAC,aAAa;CAQtB"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { evaluateGoal as aiEvaluateGoal } from "../services/aiService.js";
|
|
2
|
+
import { convertMessagesForAPI } from "../utils/convertMessagesForAPI.js";
|
|
3
|
+
import { logger } from "../utils/globalLogger.js";
|
|
4
|
+
const MAX_GOAL_TURNS = 50;
|
|
5
|
+
const MAX_GOAL_DURATION_MS = 30 * 60 * 1000; // 30 minutes
|
|
6
|
+
const MAX_CONSECUTIVE_EVAL_FAILURES = 3;
|
|
7
|
+
const MAX_CONDITION_LENGTH = 4000;
|
|
8
|
+
export class GoalManager {
|
|
9
|
+
constructor(container) {
|
|
10
|
+
this.container = container;
|
|
11
|
+
this.state = null;
|
|
12
|
+
}
|
|
13
|
+
get messageManager() {
|
|
14
|
+
return this.container.get("MessageManager");
|
|
15
|
+
}
|
|
16
|
+
get aiManager() {
|
|
17
|
+
return this.container.get("AIManager");
|
|
18
|
+
}
|
|
19
|
+
setOnGoalStateChange(callback) {
|
|
20
|
+
this.onGoalStateChange = callback;
|
|
21
|
+
}
|
|
22
|
+
setOnGoalEvaluating(callback) {
|
|
23
|
+
this.onGoalEvaluating = callback;
|
|
24
|
+
}
|
|
25
|
+
setGoal(condition) {
|
|
26
|
+
if (condition.length > MAX_CONDITION_LENGTH) {
|
|
27
|
+
throw new Error(`Goal condition exceeds maximum length of ${MAX_CONDITION_LENGTH} characters`);
|
|
28
|
+
}
|
|
29
|
+
const totalTokens = this.messageManager.getLatestTotalTokens?.() ?? 0;
|
|
30
|
+
this.state = {
|
|
31
|
+
condition,
|
|
32
|
+
startedAt: Date.now(),
|
|
33
|
+
turnCount: 0,
|
|
34
|
+
tokenBaseline: totalTokens,
|
|
35
|
+
consecutiveEvalFailures: 0,
|
|
36
|
+
};
|
|
37
|
+
this.onGoalStateChange?.(true, condition, "0m");
|
|
38
|
+
logger?.info(`[Goal] Set goal: ${condition}`);
|
|
39
|
+
}
|
|
40
|
+
clearGoal() {
|
|
41
|
+
if (this.state) {
|
|
42
|
+
logger?.info(`[Goal] Cleared goal: ${this.state.condition}`);
|
|
43
|
+
this.state = null;
|
|
44
|
+
this.onGoalStateChange?.(false);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
getGoal() {
|
|
48
|
+
return this.state;
|
|
49
|
+
}
|
|
50
|
+
isGoalActive() {
|
|
51
|
+
return this.state !== null;
|
|
52
|
+
}
|
|
53
|
+
incrementTurnCount() {
|
|
54
|
+
if (this.state) {
|
|
55
|
+
this.state.turnCount++;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
getStatusString() {
|
|
59
|
+
if (!this.state)
|
|
60
|
+
return "No active goal";
|
|
61
|
+
const elapsed = this.formatElapsed(Date.now() - this.state.startedAt);
|
|
62
|
+
let status = `Goal: ${this.state.condition}\nElapsed: ${elapsed}\nTurns: ${this.state.turnCount}`;
|
|
63
|
+
if (this.state.lastReason) {
|
|
64
|
+
status += `\nLast evaluation: ${this.state.lastReason}`;
|
|
65
|
+
}
|
|
66
|
+
return status;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Check circuit breakers. Returns a clear reason if goal should be force-cleared, null otherwise.
|
|
70
|
+
*/
|
|
71
|
+
checkCircuitBreakers() {
|
|
72
|
+
if (!this.state)
|
|
73
|
+
return null;
|
|
74
|
+
if (this.state.turnCount >= MAX_GOAL_TURNS) {
|
|
75
|
+
return `Goal cancelled: maximum turns (${MAX_GOAL_TURNS}) exceeded`;
|
|
76
|
+
}
|
|
77
|
+
if (Date.now() - this.state.startedAt >= MAX_GOAL_DURATION_MS) {
|
|
78
|
+
return `Goal cancelled: time limit (${MAX_GOAL_DURATION_MS / 60000} minutes) exceeded`;
|
|
79
|
+
}
|
|
80
|
+
if (this.state.consecutiveEvalFailures >= MAX_CONSECUTIVE_EVAL_FAILURES) {
|
|
81
|
+
return `Goal cancelled: ${MAX_CONSECUTIVE_EVAL_FAILURES} consecutive evaluation failures`;
|
|
82
|
+
}
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Evaluate whether the goal has been met using the fast model.
|
|
87
|
+
*/
|
|
88
|
+
async evaluateGoal(abortSignal) {
|
|
89
|
+
if (!this.state) {
|
|
90
|
+
return { isMet: false, reason: "No active goal" };
|
|
91
|
+
}
|
|
92
|
+
try {
|
|
93
|
+
const messages = this.messageManager.getMessages();
|
|
94
|
+
const apiMessages = convertMessagesForAPI(messages);
|
|
95
|
+
const gatewayConfig = this.aiManager.getGatewayConfig();
|
|
96
|
+
const modelConfig = this.aiManager.getModelConfig();
|
|
97
|
+
const fastModel = modelConfig.fastModel || modelConfig.model;
|
|
98
|
+
if (!fastModel) {
|
|
99
|
+
return {
|
|
100
|
+
isMet: false,
|
|
101
|
+
reason: "No model configured for goal evaluation",
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
this.onGoalEvaluating?.(true);
|
|
105
|
+
const result = await aiEvaluateGoal({
|
|
106
|
+
gatewayConfig,
|
|
107
|
+
modelConfig,
|
|
108
|
+
model: fastModel,
|
|
109
|
+
goalCondition: this.state.condition,
|
|
110
|
+
messages: apiMessages,
|
|
111
|
+
abortSignal,
|
|
112
|
+
});
|
|
113
|
+
// Track evaluation tokens separately
|
|
114
|
+
if (result.usage) {
|
|
115
|
+
const usage = {
|
|
116
|
+
...result.usage,
|
|
117
|
+
operation_type: "goal_evaluation",
|
|
118
|
+
model: fastModel,
|
|
119
|
+
};
|
|
120
|
+
this.messageManager.addUsage(usage);
|
|
121
|
+
}
|
|
122
|
+
// Reset failure counter on success
|
|
123
|
+
this.state.consecutiveEvalFailures = 0;
|
|
124
|
+
this.onGoalEvaluating?.(false);
|
|
125
|
+
// Parse the response
|
|
126
|
+
return this.parseEvaluationResponse(result.content);
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
this.onGoalEvaluating?.(false);
|
|
130
|
+
this.state.consecutiveEvalFailures++;
|
|
131
|
+
logger?.warn(`[Goal] Evaluation failed (${this.state.consecutiveEvalFailures}/${MAX_CONSECUTIVE_EVAL_FAILURES}): ${error.message}`);
|
|
132
|
+
return {
|
|
133
|
+
isMet: false,
|
|
134
|
+
reason: `Evaluation failed: ${error.message}`,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Parse the evaluation response from the fast model.
|
|
140
|
+
*/
|
|
141
|
+
parseEvaluationResponse(content) {
|
|
142
|
+
// Try direct JSON parse
|
|
143
|
+
try {
|
|
144
|
+
const parsed = JSON.parse(content);
|
|
145
|
+
if (typeof parsed.met === "boolean") {
|
|
146
|
+
return {
|
|
147
|
+
isMet: parsed.met,
|
|
148
|
+
reason: parsed.reason || "No reason provided",
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
// Fall through to regex
|
|
154
|
+
}
|
|
155
|
+
// Try regex extraction
|
|
156
|
+
const metMatch = content.match(/"met"\s*:\s*(true|false)/);
|
|
157
|
+
const reasonMatch = content.match(/"reason"\s*:\s*"([^"]*)"/);
|
|
158
|
+
if (metMatch) {
|
|
159
|
+
return {
|
|
160
|
+
isMet: metMatch[1] === "true",
|
|
161
|
+
reason: reasonMatch?.[1] || "No reason provided",
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
// Default: not met
|
|
165
|
+
return { isMet: false, reason: "Could not parse evaluation response" };
|
|
166
|
+
}
|
|
167
|
+
formatElapsed(ms) {
|
|
168
|
+
const minutes = Math.floor(ms / 60000);
|
|
169
|
+
if (minutes < 1)
|
|
170
|
+
return "<1m";
|
|
171
|
+
if (minutes < 60)
|
|
172
|
+
return `${minutes}m`;
|
|
173
|
+
const hours = Math.floor(minutes / 60);
|
|
174
|
+
const remainingMin = minutes % 60;
|
|
175
|
+
return `${hours}h${remainingMin}m`;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
@@ -24,8 +24,8 @@ export interface MessageManagerCallbacks {
|
|
|
24
24
|
onFileHistoryBlockAdded?: (snapshots: import("../types/reversion.js").FileSnapshot[]) => void;
|
|
25
25
|
onNotificationMessageAdded?: (params: {
|
|
26
26
|
taskId: string;
|
|
27
|
-
taskType: "shell" | "agent";
|
|
28
|
-
status: "completed" | "failed" | "killed";
|
|
27
|
+
taskType: "shell" | "agent" | "workflow";
|
|
28
|
+
status: "completed" | "failed" | "killed" | "aborted";
|
|
29
29
|
summary: string;
|
|
30
30
|
}) => void;
|
|
31
31
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messageManager.d.ts","sourceRoot":"","sources":["../../src/managers/messageManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAYL,iBAAiB,EACjB,KAAK,0BAA0B,EAC/B,KAAK,4BAA4B,EAElC,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAGxD,OAAO,EAIL,WAAW,EAEZ,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,qCAAqC,EAAE,MAAM,qBAAqB,CAAC;AAK5E,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,MAAM,WAAW,uBAAuB;IACtC,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACjD,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,yBAAyB,CAAC,EAAE,CAAC,iBAAiB,EAAE,MAAM,KAAK,IAAI,CAAC;IAChE,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,IAAI,CAAC;IAE3C,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAEzD,uBAAuB,CAAC,EAAE,MAAM,IAAI,CAAC;IAErC,yBAAyB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAEzE,2BAA2B,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3E,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,0BAA0B,KAAK,IAAI,CAAC;IAClE,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,mBAAmB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,uBAAuB,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,KAAK,IAAI,CAAC;IAE1D,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,mBAAmB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAChE,qBAAqB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACpE,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAE7C,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,uBAAuB,CAAC,EAAE,CACxB,SAAS,EAAE,OAAO,uBAAuB,EAAE,YAAY,EAAE,KACtD,IAAI,CAAC;IAEV,0BAA0B,CAAC,EAAE,CAAC,MAAM,EAAE;QACpC,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"messageManager.d.ts","sourceRoot":"","sources":["../../src/managers/messageManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
export type QueueState = "idle" | "dispatching" | "running";
|
|
1
2
|
export interface QueuedMessage {
|
|
3
|
+
id?: string;
|
|
2
4
|
type?: "message" | "bang";
|
|
3
5
|
content: string;
|
|
4
6
|
images?: Array<{
|
|
@@ -6,15 +8,23 @@ export interface QueuedMessage {
|
|
|
6
8
|
mimeType: string;
|
|
7
9
|
}>;
|
|
8
10
|
longTextMap?: Record<string, string>;
|
|
11
|
+
editable?: boolean;
|
|
9
12
|
}
|
|
10
13
|
export declare class MessageQueue {
|
|
11
14
|
private queue;
|
|
15
|
+
private nextId;
|
|
16
|
+
private _state;
|
|
12
17
|
onMessageEnqueued?: () => void;
|
|
18
|
+
get state(): QueueState;
|
|
19
|
+
transitionTo(newState: QueueState): boolean;
|
|
13
20
|
enqueue(message: QueuedMessage): void;
|
|
14
21
|
dequeue(): QueuedMessage | null;
|
|
15
22
|
clear(): void;
|
|
16
23
|
hasPending(): boolean;
|
|
17
24
|
getQueue(): QueuedMessage[];
|
|
18
25
|
removeAt(index: number): boolean;
|
|
26
|
+
removeById(id: string): boolean;
|
|
27
|
+
popLastEditable(): QueuedMessage | null;
|
|
28
|
+
popAllEditable(): QueuedMessage[];
|
|
19
29
|
}
|
|
20
30
|
//# sourceMappingURL=messageQueue.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messageQueue.d.ts","sourceRoot":"","sources":["../../src/managers/messageQueue.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"messageQueue.d.ts","sourceRoot":"","sources":["../../src/managers/messageQueue.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,aAAa,GAAG,SAAS,CAAC;AAE5D,MAAM,WAAW,aAAa;IAC5B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,MAAM,CAAsB;IACpC,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAE/B,IAAI,KAAK,IAAI,UAAU,CAEtB;IAED,YAAY,CAAC,QAAQ,EAAE,UAAU,GAAG,OAAO;IAW3C,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAUrC,OAAO,IAAI,aAAa,GAAG,IAAI;IAI/B,KAAK,IAAI,IAAI;IAKb,UAAU,IAAI,OAAO;IAIrB,QAAQ,IAAI,aAAa,EAAE;IAI3B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAShC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAQ/B,eAAe,IAAI,aAAa,GAAG,IAAI;IASvC,cAAc,IAAI,aAAa,EAAE;CAalC"}
|
|
@@ -1,9 +1,30 @@
|
|
|
1
1
|
export class MessageQueue {
|
|
2
2
|
constructor() {
|
|
3
3
|
this.queue = [];
|
|
4
|
+
this.nextId = 0;
|
|
5
|
+
this._state = "idle";
|
|
6
|
+
}
|
|
7
|
+
get state() {
|
|
8
|
+
return this._state;
|
|
9
|
+
}
|
|
10
|
+
transitionTo(newState) {
|
|
11
|
+
const valid = {
|
|
12
|
+
idle: ["dispatching"],
|
|
13
|
+
dispatching: ["running", "idle"],
|
|
14
|
+
running: ["idle"],
|
|
15
|
+
};
|
|
16
|
+
if (!valid[this._state].includes(newState))
|
|
17
|
+
return false;
|
|
18
|
+
this._state = newState;
|
|
19
|
+
return true;
|
|
4
20
|
}
|
|
5
21
|
enqueue(message) {
|
|
6
|
-
|
|
22
|
+
const msg = {
|
|
23
|
+
...message,
|
|
24
|
+
id: message.id || `mq-${this.nextId++}`,
|
|
25
|
+
editable: message.editable ?? true,
|
|
26
|
+
};
|
|
27
|
+
this.queue.push(msg);
|
|
7
28
|
this.onMessageEnqueued?.();
|
|
8
29
|
}
|
|
9
30
|
dequeue() {
|
|
@@ -11,6 +32,7 @@ export class MessageQueue {
|
|
|
11
32
|
}
|
|
12
33
|
clear() {
|
|
13
34
|
this.queue = [];
|
|
35
|
+
this._state = "idle";
|
|
14
36
|
}
|
|
15
37
|
hasPending() {
|
|
16
38
|
return this.queue.length > 0;
|
|
@@ -26,4 +48,34 @@ export class MessageQueue {
|
|
|
26
48
|
this.onMessageEnqueued?.();
|
|
27
49
|
return true;
|
|
28
50
|
}
|
|
51
|
+
removeById(id) {
|
|
52
|
+
const index = this.queue.findIndex((m) => m.id === id);
|
|
53
|
+
if (index === -1)
|
|
54
|
+
return false;
|
|
55
|
+
this.queue.splice(index, 1);
|
|
56
|
+
this.onMessageEnqueued?.();
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
popLastEditable() {
|
|
60
|
+
for (let i = this.queue.length - 1; i >= 0; i--) {
|
|
61
|
+
if (this.queue[i].editable !== false) {
|
|
62
|
+
return this.queue.splice(i, 1)[0] ?? null;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
popAllEditable() {
|
|
68
|
+
const editable = [];
|
|
69
|
+
const remaining = [];
|
|
70
|
+
for (const msg of this.queue) {
|
|
71
|
+
if (msg.editable !== false) {
|
|
72
|
+
editable.push(msg);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
remaining.push(msg);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
this.queue = remaining;
|
|
79
|
+
return editable;
|
|
80
|
+
}
|
|
29
81
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pluginManager.d.ts","sourceRoot":"","sources":["../../src/managers/pluginManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAWzD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC1C;AAED,qBAAa,aAAa;IAMtB,OAAO,CAAC,SAAS;IALnB,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,cAAc,CAA0B;gBAGtC,SAAS,EAAE,SAAS,EAC5B,OAAO,EAAE,oBAAoB;IAM/B,OAAO,KAAK,YAAY,GAEvB;IAED,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,KAAK,UAAU,GAErB;IAED,OAAO,KAAK,UAAU,GAErB;IAED,OAAO,KAAK,mBAAmB,GAE9B;IAED,OAAO,KAAK,oBAAoB,GAE/B;IAED,OAAO,KAAK,eAAe,GAE1B;IAED;;OAEG;IACH,oBAAoB,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAInE;;OAEG;YACW,oBAAoB;
|
|
1
|
+
{"version":3,"file":"pluginManager.d.ts","sourceRoot":"","sources":["../../src/managers/pluginManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAWzD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC1C;AAED,qBAAa,aAAa;IAMtB,OAAO,CAAC,SAAS;IALnB,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,cAAc,CAA0B;gBAGtC,SAAS,EAAE,SAAS,EAC5B,OAAO,EAAE,oBAAoB;IAM/B,OAAO,KAAK,YAAY,GAEvB;IAED,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,KAAK,UAAU,GAErB;IAED,OAAO,KAAK,UAAU,GAErB;IAED,OAAO,KAAK,mBAAmB,GAE9B;IAED,OAAO,KAAK,oBAAoB,GAE/B;IAED,OAAO,KAAK,eAAe,GAE1B;IAED;;OAEG;IACH,oBAAoB,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAInE;;OAEG;YACW,oBAAoB;IA+HlC;;OAEG;YACW,gBAAgB;IAgE9B;;;OAGG;IACG,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBzD;;OAEG;IACH,UAAU,IAAI,MAAM,EAAE;IAItB;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;CAG5C"}
|
|
@@ -81,7 +81,13 @@ export class PluginManager {
|
|
|
81
81
|
}
|
|
82
82
|
}
|
|
83
83
|
catch {
|
|
84
|
-
// Manifest read failed
|
|
84
|
+
// Manifest read failed — marketplace may not be cloned yet, try to clone/update it
|
|
85
|
+
try {
|
|
86
|
+
await marketplaceService.updateMarketplace(marketplaceName);
|
|
87
|
+
}
|
|
88
|
+
catch (updateError) {
|
|
89
|
+
logger?.warn(`Failed to clone/update marketplace ${marketplaceName}: ${updateError instanceof Error ? updateError.message : String(updateError)}`);
|
|
90
|
+
}
|
|
85
91
|
}
|
|
86
92
|
logger?.info(`Auto-installing missing plugin: ${pluginId}`);
|
|
87
93
|
try {
|
|
@@ -11,6 +11,8 @@ export declare class SkillManager extends EventEmitter {
|
|
|
11
11
|
private workdir;
|
|
12
12
|
private skillMetadata;
|
|
13
13
|
private skillContent;
|
|
14
|
+
private pluginSkillMetadata;
|
|
15
|
+
private pluginSkillContent;
|
|
14
16
|
private initialized;
|
|
15
17
|
private fileWatcher;
|
|
16
18
|
private watchEnabled;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skillManager.d.ts","sourceRoot":"","sources":["../../src/managers/skillManager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EACV,mBAAmB,EACnB,aAAa,EACb,KAAK,EAGL,aAAa,EACb,sBAAsB,EACvB,MAAM,mBAAmB,CAAC;AAU3B,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAGlD;;GAEG;AACH,qBAAa,YAAa,SAAQ,YAAY;
|
|
1
|
+
{"version":3,"file":"skillManager.d.ts","sourceRoot":"","sources":["../../src/managers/skillManager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EACV,mBAAmB,EACnB,aAAa,EACb,KAAK,EAGL,aAAa,EACb,sBAAsB,EACvB,MAAM,mBAAmB,CAAC;AAU3B,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAGlD;;GAEG;AACH,qBAAa,YAAa,SAAQ,YAAY;IAc1C,OAAO,CAAC,SAAS;IAbnB,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,aAAa,CAAoC;IACzD,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,mBAAmB,CAAoC;IAC/D,OAAO,CAAC,kBAAkB,CAA4B;IACtD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAmC;IACtD,OAAO,CAAC,YAAY,CAAU;gBAGpB,SAAS,EAAE,SAAS,EAC5B,OAAO,GAAE,mBAAwB;IAUnC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBjC;;OAEG;YACW,aAAa;IAqC3B;;OAEG;YACW,YAAY;IAkC1B;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAO9B;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACH,kBAAkB,IAAI,aAAa,EAAE;IAQrC;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAQzD;;;OAGG;IACG,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAgBzD;;OAEG;YACW,cAAc;IA4B5B;;OAEG;YACW,uBAAuB;IAoFrC;;OAEG;YACW,oBAAoB;IA4BlC;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC;QAC/C,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,sBAAsB,CAAC;QACjC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;KACzB,CAAC;IA8BF;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAC5C;QACE,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,KAAK,CAAC;KACd,GACD;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,SAAS,CAAA;KAAE,CACzC;IA6BD;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAwB3B;;OAEG;YACW,yBAAyB;IASvC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAc7B;;OAEG;IACH,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI;CA8BhE"}
|