wave-agent-sdk 0.18.6 → 0.18.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/managers/aiManager.d.ts.map +1 -1
- package/dist/managers/aiManager.js +12 -5
- package/dist/managers/cronManager.d.ts.map +1 -1
- package/dist/managers/cronManager.js +2 -0
- package/dist/managers/liveConfigManager.d.ts.map +1 -1
- package/dist/managers/liveConfigManager.js +0 -9
- package/dist/managers/mcpManager.d.ts.map +1 -1
- package/dist/managers/mcpManager.js +6 -1
- package/dist/managers/messageManager.d.ts +1 -1
- package/dist/managers/messageManager.d.ts.map +1 -1
- package/dist/managers/messageManager.js +10 -4
- package/dist/managers/toolManager.d.ts.map +1 -1
- package/dist/managers/toolManager.js +2 -0
- package/dist/services/configurationService.d.ts.map +1 -1
- package/dist/services/configurationService.js +2 -0
- package/dist/telemetry/sessionTracing.d.ts +17 -16
- package/dist/telemetry/sessionTracing.d.ts.map +1 -1
- package/dist/telemetry/sessionTracing.js +62 -58
- package/dist/tools/readTool.d.ts.map +1 -1
- package/dist/tools/readTool.js +6 -7
- package/dist/types/telemetry.d.ts +2 -0
- package/dist/types/telemetry.d.ts.map +1 -1
- package/dist/utils/fileUtils.d.ts +0 -6
- package/dist/utils/fileUtils.d.ts.map +1 -1
- package/dist/utils/fileUtils.js +0 -43
- package/dist/utils/gitUtils.d.ts +11 -0
- package/dist/utils/gitUtils.d.ts.map +1 -1
- package/dist/utils/gitUtils.js +51 -0
- package/dist/utils/groupMessagesByApiRound.d.ts.map +1 -1
- package/dist/utils/groupMessagesByApiRound.js +7 -6
- package/dist/utils/tokenEstimate.d.ts +24 -0
- package/dist/utils/tokenEstimate.d.ts.map +1 -0
- package/dist/utils/tokenEstimate.js +30 -0
- package/dist/utils/worktreeUtils.d.ts.map +1 -1
- package/dist/utils/worktreeUtils.js +3 -1
- package/package.json +1 -1
- package/src/managers/aiManager.ts +14 -5
- package/src/managers/cronManager.ts +2 -0
- package/src/managers/liveConfigManager.ts +0 -12
- package/src/managers/mcpManager.ts +8 -1
- package/src/managers/messageManager.ts +10 -5
- package/src/managers/toolManager.ts +2 -0
- package/src/services/configurationService.ts +2 -0
- package/src/telemetry/sessionTracing.ts +64 -67
- package/src/tools/readTool.ts +6 -12
- package/src/types/telemetry.ts +2 -0
- package/src/utils/fileUtils.ts +0 -46
- package/src/utils/gitUtils.ts +54 -0
- package/src/utils/groupMessagesByApiRound.ts +7 -6
- package/src/utils/tokenEstimate.ts +34 -0
- package/src/utils/worktreeUtils.ts +8 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aiManager.d.ts","sourceRoot":"","sources":["../../src/managers/aiManager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"aiManager.d.ts","sourceRoot":"","sources":["../../src/managers/aiManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import * as aiService from "../services/aiService.js";
|
|
|
2
2
|
import { convertMessagesForAPI } from "../utils/convertMessagesForAPI.js";
|
|
3
3
|
import { parseTaskNotificationXml } from "../utils/notificationXml.js";
|
|
4
4
|
import { calculateComprehensiveTotalTokens } from "../utils/tokenCalculation.js";
|
|
5
|
+
import { estimateTokens } from "../utils/tokenEstimate.js";
|
|
5
6
|
import { getTaskReminderTurnCounts, maybeInjectTaskReminder, TASK_REMINDER_CONFIG, } from "../utils/taskReminder.js";
|
|
6
7
|
import { existsSync } from "node:fs";
|
|
7
8
|
import { buildSystemPrompt } from "../prompts/index.js";
|
|
@@ -390,7 +391,7 @@ export class AIManager {
|
|
|
390
391
|
const recentFiles = this.messageManager.getRecentFileReads(POST_COMPACT_MAX_FILES_TO_RESTORE, POST_COMPACT_MAX_TOKENS_PER_FILE);
|
|
391
392
|
let usedTokens = 0;
|
|
392
393
|
for (const file of recentFiles) {
|
|
393
|
-
const fileTokens =
|
|
394
|
+
const fileTokens = estimateTokens(file.content);
|
|
394
395
|
if (usedTokens + fileTokens > POST_COMPACT_MAX_TOKENS_PER_FILE)
|
|
395
396
|
continue;
|
|
396
397
|
if (fileTokens > 0)
|
|
@@ -422,7 +423,7 @@ export class AIManager {
|
|
|
422
423
|
skillContent =
|
|
423
424
|
skillContent.slice(0, maxSkillChars) + "\n\n...[truncated]...";
|
|
424
425
|
}
|
|
425
|
-
const skillTokens =
|
|
426
|
+
const skillTokens = estimateTokens(skillContent);
|
|
426
427
|
if (skillsUsedTokens + skillTokens > POST_COMPACT_SKILLS_TOKEN_BUDGET)
|
|
427
428
|
break;
|
|
428
429
|
skillsUsedTokens += skillTokens;
|
|
@@ -561,6 +562,7 @@ export class AIManager {
|
|
|
561
562
|
}
|
|
562
563
|
let turnDepth = turnOffset;
|
|
563
564
|
inner: while (true) {
|
|
565
|
+
let llmSpan;
|
|
564
566
|
try {
|
|
565
567
|
// Save session in each iteration to ensure message persistence
|
|
566
568
|
await this.messageManager.saveSession();
|
|
@@ -666,13 +668,17 @@ export class AIManager {
|
|
|
666
668
|
this.messageManager.updateCurrentMessageReasoning(reasoning);
|
|
667
669
|
};
|
|
668
670
|
}
|
|
669
|
-
startLLMRequestSpan(model || this.getModelConfig().model || "");
|
|
671
|
+
llmSpan = startLLMRequestSpan(model || this.getModelConfig().model || "");
|
|
670
672
|
const result = await aiService.callAgent(callAgentOptions);
|
|
671
673
|
// End LLM span with usage data
|
|
672
|
-
endLLMRequestSpan({
|
|
674
|
+
endLLMRequestSpan(llmSpan, {
|
|
673
675
|
model: model || this.getModelConfig().model || "",
|
|
674
676
|
success: true,
|
|
675
677
|
hasToolCall: !!(result.tool_calls && result.tool_calls.length > 0),
|
|
678
|
+
inputTokens: result.usage?.prompt_tokens,
|
|
679
|
+
outputTokens: result.usage?.completion_tokens,
|
|
680
|
+
cacheReadTokens: result.usage?.cache_read_input_tokens,
|
|
681
|
+
cacheCreationTokens: result.usage?.cache_creation_input_tokens,
|
|
676
682
|
});
|
|
677
683
|
const createdByStreaming = assistantMessageCreated;
|
|
678
684
|
// For non-streaming mode, create assistant message after callAgent returns
|
|
@@ -870,7 +876,7 @@ export class AIManager {
|
|
|
870
876
|
}
|
|
871
877
|
catch (error) {
|
|
872
878
|
// End LLM span with error
|
|
873
|
-
endLLMRequestSpan({
|
|
879
|
+
endLLMRequestSpan(llmSpan, {
|
|
874
880
|
model: model || this.getModelConfig().model || "",
|
|
875
881
|
success: false,
|
|
876
882
|
error: error instanceof Error ? error.message : String(error),
|
|
@@ -1202,6 +1208,7 @@ export class AIManager {
|
|
|
1202
1208
|
shortResult: toolResult.shortResult,
|
|
1203
1209
|
isManuallyBackgrounded: toolResult.isManuallyBackgrounded,
|
|
1204
1210
|
startLineNumber: toolResult.startLineNumber,
|
|
1211
|
+
images: toolResult.images,
|
|
1205
1212
|
timestamp: Date.now(),
|
|
1206
1213
|
});
|
|
1207
1214
|
// Execute PostToolUse hooks after successful tool completion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cronManager.d.ts","sourceRoot":"","sources":["../../src/managers/cronManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"cronManager.d.ts","sourceRoot":"","sources":["../../src/managers/cronManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAkB3C,qBAAa,WAAW;IASpB,OAAO,CAAC,SAAS;IARnB,OAAO,CAAC,IAAI,CAA8B;IAC1C,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,oBAAoB,CAA6B;IACzD,OAAO,CAAC,SAAS,CAAS;gBAGhB,SAAS,EAAE,SAAS,EAC5B,SAAS,CAAC,EAAE,MAAM;IAKpB,OAAO,KAAK,SAAS,GAEpB;IAED,OAAO,KAAK,cAAc,GAEzB;IAEM,KAAK,IAAI,IAAI;IA4DpB,OAAO,CAAC,OAAO;IAqBf,OAAO,CAAC,UAAU;IAalB,OAAO,CAAC,cAAc;IA6Bf,IAAI,IAAI,IAAI;IAuBZ,SAAS,CACd,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,GAAG,WAAW,GAAG,SAAS,GAAG,UAAU,CAAC,GAC9D,OAAO;IAgDH,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAoB9B,QAAQ,IAAI,OAAO,EAAE;IAI5B,OAAO,CAAC,WAAW;IAuBnB,OAAO,CAAC,sBAAsB;YAYhB,SAAS;CAuGxB"}
|
|
@@ -2,6 +2,7 @@ import { CronExpressionParser } from "cron-parser";
|
|
|
2
2
|
import { logger } from "../utils/globalLogger.js";
|
|
3
3
|
import { readCronTasks, addCronTask, removeCronTasks, markCronTasksFired, } from "../utils/cronTasks.js";
|
|
4
4
|
import { tryAcquireSchedulerLock, releaseSchedulerLock, registerSchedulerLockCleanup, } from "../utils/cronTasksLock.js";
|
|
5
|
+
import { ensureWaveRuntimeFilesExcluded } from "../utils/gitUtils.js";
|
|
5
6
|
export class CronManager {
|
|
6
7
|
constructor(container, sessionId) {
|
|
7
8
|
this.container = container;
|
|
@@ -71,6 +72,7 @@ export class CronManager {
|
|
|
71
72
|
}
|
|
72
73
|
}
|
|
73
74
|
tryLock(workdir) {
|
|
75
|
+
ensureWaveRuntimeFilesExcluded(workdir);
|
|
74
76
|
tryAcquireSchedulerLock({ dir: workdir, sessionId: this.sessionId })
|
|
75
77
|
.then((acquired) => {
|
|
76
78
|
if (acquired) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"liveConfigManager.d.ts","sourceRoot":"","sources":["../../src/managers/liveConfigManager.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"liveConfigManager.d.ts","sourceRoot":"","sources":["../../src/managers/liveConfigManager.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAYH,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,OAAO,KAAK,EAEV,iBAAiB,EAClB,MAAM,2BAA2B,CAAC;AAInC,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;CAChD;AAED,qBAAa,iBAAiB;IAgB1B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,OAAO;IAhBjB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,aAAa,CAAkB;IAGvC,OAAO,CAAC,oBAAoB,CAAkC;IAC9D,OAAO,CAAC,sBAAsB,CAAkC;IAGhE,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,eAAe,CAAC,CAAW;IACnC,OAAO,CAAC,kBAAkB,CAAC,CAAW;IACtC,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,gBAAgB,CAAkB;gBAGhC,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,wBAAwB;IAO3C,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,KAAK,iBAAiB,GAE5B;IAED,OAAO,KAAK,oBAAoB,GAE/B;IAED;;;;OAIG;YACW,kBAAkB;IAuChC;;OAEG;IACH,uBAAuB,IAAI,iBAAiB,GAAG,IAAI;IAInD;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBjC;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAsB/B;;;OAGG;YACW,mBAAmB;IA0IjC;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAI1C;;OAEG;IACH,gBAAgB,IAAI,OAAO;IAI3B;;OAEG;IACH,gBAAgB;;;;;;;;;;;;IAgBhB,OAAO,CAAC,sBAAsB;YAMhB,gBAAgB;IA2B9B,OAAO,CAAC,aAAa;IAuDrB;;;OAGG;IACH,OAAO,CAAC,qBAAqB;CAU9B"}
|
|
@@ -9,7 +9,6 @@
|
|
|
9
9
|
import { existsSync } from "fs";
|
|
10
10
|
import { FileWatcherService, } from "../services/fileWatcher.js";
|
|
11
11
|
import { isValidHookEvent } from "../types/hooks.js";
|
|
12
|
-
import { ensureGlobalGitIgnore } from "../utils/fileUtils.js";
|
|
13
12
|
import { logger } from "../utils/globalLogger.js";
|
|
14
13
|
export class LiveConfigManager {
|
|
15
14
|
constructor(container, options) {
|
|
@@ -55,9 +54,6 @@ export class LiveConfigManager {
|
|
|
55
54
|
if (projectPaths) {
|
|
56
55
|
for (const projectPath of projectPaths) {
|
|
57
56
|
if (existsSync(projectPath)) {
|
|
58
|
-
if (projectPath.endsWith("settings.local.json")) {
|
|
59
|
-
await ensureGlobalGitIgnore("**/.wave/settings.local.json");
|
|
60
|
-
}
|
|
61
57
|
await this.fileWatcher.watchFile(projectPath, (event) => this.handleFileChange(event, "project"));
|
|
62
58
|
}
|
|
63
59
|
}
|
|
@@ -255,11 +251,6 @@ export class LiveConfigManager {
|
|
|
255
251
|
}
|
|
256
252
|
// Handle file creation or modification
|
|
257
253
|
if (event.type === "change" || event.type === "create") {
|
|
258
|
-
if (source === "project" &&
|
|
259
|
-
event.path.endsWith("settings.local.json") &&
|
|
260
|
-
event.type === "create") {
|
|
261
|
-
await ensureGlobalGitIgnore("**/.wave/settings.local.json");
|
|
262
|
-
}
|
|
263
254
|
// Add small delay to ensure file write is complete
|
|
264
255
|
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
265
256
|
// Reload configuration
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcpManager.d.ts","sourceRoot":"","sources":["../../src/managers/mcpManager.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"mcpManager.d.ts","sourceRoot":"","sources":["../../src/managers/mcpManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -643,9 +643,14 @@ export class McpManager {
|
|
|
643
643
|
else if (result.content) {
|
|
644
644
|
textContent.push(String(result.content));
|
|
645
645
|
}
|
|
646
|
+
const textContentStr = textContent.length > 0
|
|
647
|
+
? textContent.join("\n")
|
|
648
|
+
: images.length > 0
|
|
649
|
+
? `Tool returned ${images.length} image(s).`
|
|
650
|
+
: "No content";
|
|
646
651
|
return {
|
|
647
652
|
success: true,
|
|
648
|
-
content:
|
|
653
|
+
content: textContentStr,
|
|
649
654
|
images: images.length > 0 ? images : undefined,
|
|
650
655
|
serverName,
|
|
651
656
|
};
|
|
@@ -218,7 +218,7 @@ export declare class MessageManager {
|
|
|
218
218
|
/**
|
|
219
219
|
* Get recent file read contents, sorted by timestamp (newest first).
|
|
220
220
|
* @param maxFiles - Maximum number of files to return
|
|
221
|
-
* @param maxTokensPerFile - Maximum tokens per file (
|
|
221
|
+
* @param maxTokensPerFile - Maximum tokens per file (CJK-aware estimation)
|
|
222
222
|
* @returns Array of { path, content } sorted by recency
|
|
223
223
|
*/
|
|
224
224
|
getRecentFileReads(maxFiles?: number, maxTokensPerFile?: number): Array<{
|
|
@@ -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,6BAA6B,EAClC,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;AAE5E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;
|
|
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,6BAA6B,EAClC,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;AAE5E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAMzD,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,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAEtD,yBAAyB,CAAC,EAAE,CAAC,MAAM,EAAE;QACnC,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,WAAW,GAAG,KAAK,CAAC;KAC5B,KAAK,IAAI,CAAC;IAEX,2BAA2B,CAAC,EAAE,CAAC,MAAM,EAAE;QACrC,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,WAAW,GAAG,KAAK,CAAC;KAC5B,KAAK,IAAI,CAAC;IACX,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,6BAA6B,KAAK,IAAI,CAAC;IACrE,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,GAAG,UAAU,CAAC;QACzC,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;QACtD,OAAO,EAAE,MAAM,CAAC;KACjB,KAAK,IAAI,CAAC;CACZ;AAID,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,uBAAuB,CAAC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,cAAc;IAuBvB,OAAO,CAAC,SAAS;IArBnB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,eAAe,CAAC,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAY;IAC5B,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,uBAAuB,CAA0B;IACzD,OAAO,CAAC,aAAa,CAA0B;IAC/C,OAAO,CAAC,eAAe,CACX;IACZ,OAAO,CAAC,aAAa,CACT;IACZ,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,OAAO,CAAe;gBAGpB,SAAS,EAAE,SAAS,EAC5B,OAAO,EAAE,qBAAqB;IAiBhC,OAAO,KAAK,iBAAiB,GAI5B;IAED,OAAO,KAAK,aAAa,GAMxB;IAGM,YAAY,IAAI,MAAM;IAItB,gBAAgB,IAAI,MAAM;IAI1B,kBAAkB,IAAI,MAAM,GAAG,SAAS;IAIxC,WAAW,IAAI,OAAO,EAAE;IAIxB,SAAS,IAAI,KAAK,EAAE;IAIpB,oBAAoB,IAAI,MAAM;IAI9B,UAAU,IAAI,MAAM;IAI3B;;;;OAIG;IACI,qBAAqB,IAAI,UAAU,EAAE;IAmBrC,aAAa,IAAI,MAAM;IAIvB,iBAAiB,IAAI,MAAM;IAIlC;;;OAGG;IACU,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;IAgBjD;;;;OAIG;IACU,qBAAqB,IAAI,OAAO,CAAC;QAC5C,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IAkBF;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAStB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAY5C;;OAEG;YACW,qBAAqB;IAQnC;;;OAGG;IACI,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAO9C;;;OAGG;IACI,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAU1C,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI;IAoB7C;;OAEG;IACU,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAiClC,oBAAoB,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI;IAQ5D;;OAEG;IACI,aAAa,IAAI,IAAI;IAS5B;;OAEG;IACI,iBAAiB,IAAI,IAAI;IAKzB,qBAAqB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAgBrD,cAAc,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM;IAcxD;;OAEG;IACI,iBAAiB,CACtB,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,OAAO,CAAC,iBAAiB,CAAC,GACjC,IAAI;IAKA,mBAAmB,CACxB,OAAO,CAAC,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,qCAAqC,EAAE,EACnD,KAAK,CAAC,EAAE,KAAK,EACb,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACzC,IAAI;IAuBA,8BAA8B,CACnC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACxC,IAAI;IA+BA,eAAe,CAAC,MAAM,EAAE,0BAA0B,GAAG,IAAI;IAsBhE;;OAEG;IACI,qBAAqB,CAC1B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,IAAI,CAAC,0BAA0B,EAAE,IAAI,CAAC,GAC7C,MAAM;IAcF,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IASlC,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAY1C;;OAEG;IACI,+BAA+B,CACpC,gBAAgB,EAAE,MAAM,EACxB,KAAK,CAAC,EAAE,KAAK,GACZ,IAAI;IAsCA,mBAAmB,CACxB,SAAS,EAAE,OAAO,uBAAuB,EAAE,YAAY,EAAE,GACxD,IAAI;IAeA,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IASrC,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAUxD,mBAAmB,CACxB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,MAAM,GACd,IAAI;IAWA,sBAAsB,CAC3B,MAAM,EAAE,IAAI,CAAC,4BAA4B,EAAE,UAAU,CAAC,GACrD,IAAI;IAcP;;;OAGG;IACI,wBAAwB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI;IAW1D;;;OAGG;IACI,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAKnC;;OAEG;IACI,kBAAkB,IAAI,IAAI;IAIjC;;;;;OAKG;IACH,OAAO,CAAC,sBAAsB;IAqC9B;;;;OAIG;IACI,2BAA2B,CAAC,qBAAqB,EAAE,MAAM,GAAG,IAAI;IAuDvE;;;OAGG;IACI,6BAA6B,CAAC,uBAAuB,EAAE,MAAM,GAAG,IAAI;IAqD3E;;;;OAIG;IACI,uBAAuB,IAAI,IAAI;IAgBtC;;;OAGG;IACI,qBAAqB,IAAI,IAAI;IAKvB,oBAAoB,IAAI,OAAO,CAAC;QAC3C,QAAQ,EAAE,OAAO,EAAE,CAAC;QACpB,UAAU,EAAE,MAAM,EAAE,CAAC;KACtB,CAAC;IAKF;;;;OAIG;IACU,eAAe,CAC1B,KAAK,EAAE,MAAM,EACb,gBAAgB,CAAC,EAAE,OAAO,uBAAuB,EAAE,gBAAgB,GAClE,OAAO,CAAC,IAAI,CAAC;IAkGhB;;OAEG;YACW,kBAAkB;IAkBhC;;OAEG;IACH,OAAO,CAAC,2BAA2B;IA6BnC;;;;;OAKG;IACI,kBAAkB,CACvB,QAAQ,SAAI,EACZ,gBAAgB,SAAO,GACtB,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAoB3C;;OAEG;IACH,OAAO,CAAC,kCAAkC;IA2B1C;;;;OAIG;IACI,oBAAoB,CAAC,SAAS,SAAK,GAAG,MAAM,EAAE;IAQrD;;OAEG;IACI,kBAAkB,IAAI,IAAI;IAIjC;;OAEG;IACI,kBAAkB,IAAI,IAAI;IAIjC;;;OAGG;IACI,oBAAoB,IAAI,IAAI;CAcpC"}
|
|
@@ -3,6 +3,7 @@ import { getLastApiRounds } from "../utils/groupMessagesByApiRound.js";
|
|
|
3
3
|
import { join, isAbsolute, relative } from "path";
|
|
4
4
|
import { appendMessages, createSession, generateSessionId, SESSION_DIR, } from "../services/session.js";
|
|
5
5
|
import { pathEncoder } from "../utils/pathEncoder.js";
|
|
6
|
+
import { estimateTokens } from "../utils/tokenEstimate.js";
|
|
6
7
|
import { READ_TOOL_NAME } from "../constants/tools.js";
|
|
7
8
|
import { logger } from "../utils/globalLogger.js";
|
|
8
9
|
export class MessageManager {
|
|
@@ -746,7 +747,7 @@ export class MessageManager {
|
|
|
746
747
|
/**
|
|
747
748
|
* Get recent file read contents, sorted by timestamp (newest first).
|
|
748
749
|
* @param maxFiles - Maximum number of files to return
|
|
749
|
-
* @param maxTokensPerFile - Maximum tokens per file (
|
|
750
|
+
* @param maxTokensPerFile - Maximum tokens per file (CJK-aware estimation)
|
|
750
751
|
* @returns Array of { path, content } sorted by recency
|
|
751
752
|
*/
|
|
752
753
|
getRecentFileReads(maxFiles = 5, maxTokensPerFile = 5000) {
|
|
@@ -755,9 +756,14 @@ export class MessageManager {
|
|
|
755
756
|
.slice(0, maxFiles);
|
|
756
757
|
const result = [];
|
|
757
758
|
for (const [path, { content }] of sorted) {
|
|
758
|
-
const
|
|
759
|
-
|
|
760
|
-
|
|
759
|
+
const tokenCount = estimateTokens(content);
|
|
760
|
+
let truncated = content;
|
|
761
|
+
if (tokenCount > maxTokensPerFile) {
|
|
762
|
+
// Truncate proportionally to fit within the token budget
|
|
763
|
+
const ratio = maxTokensPerFile / tokenCount;
|
|
764
|
+
const cutIndex = Math.floor(content.length * ratio);
|
|
765
|
+
truncated = content.slice(0, cutIndex);
|
|
766
|
+
}
|
|
761
767
|
result.push({ path, content: truncated });
|
|
762
768
|
}
|
|
763
769
|
return result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolManager.d.ts","sourceRoot":"","sources":["../../src/managers/toolManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AA6B7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,KAAK,EACV,cAAc,EAGf,MAAM,mBAAmB,CAAC;AAO3B,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAIlD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGxD,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,SAAS,CAAC;IACrB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,wDAAwD;IACxD,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;CAC5B;AAED;;;;;GAKG;AACH,cAAM,WAAW;IACf,OAAO,CAAC,aAAa,CAAiC;IACtD,OAAO,CAAC,KAAK,CAAC,CAAW;IACzB,OAAO,CAAC,WAAW,CAAC,CAAe;IACnC,OAAO,CAAC,SAAS,CAAY;gBAEjB,OAAO,EAAE,kBAAkB;IAMvC,OAAO,KAAK,UAAU,GAErB;IAED;;OAEG;IACI,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAIvC;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACI,sBAAsB,IAAI,IAAI;IA0CrC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAiBxB;;;;;;;;;;;;OAYG;IACG,OAAO,CACX,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"toolManager.d.ts","sourceRoot":"","sources":["../../src/managers/toolManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AA6B7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,KAAK,EACV,cAAc,EAGf,MAAM,mBAAmB,CAAC;AAO3B,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAIlD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGxD,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,SAAS,CAAC;IACrB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,wDAAwD;IACxD,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;CAC5B;AAED;;;;;GAKG;AACH,cAAM,WAAW;IACf,OAAO,CAAC,aAAa,CAAiC;IACtD,OAAO,CAAC,KAAK,CAAC,CAAW;IACzB,OAAO,CAAC,WAAW,CAAC,CAAe;IACnC,OAAO,CAAC,SAAS,CAAY;gBAEjB,OAAO,EAAE,kBAAkB;IAMvC,OAAO,KAAK,UAAU,GAErB;IAED;;OAEG;IACI,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAIvC;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACI,sBAAsB,IAAI,IAAI;IA0CrC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAiBxB;;;;;;;;;;;;OAYG;IACG,OAAO,CACX,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC;IAuJtB,IAAI,IAAI,UAAU,EAAE;IAYpB,cAAc,CAAC,OAAO,CAAC,EAAE;QACvB,kBAAkB,CAAC,EAAE,qBAAqB,EAAE,CAAC;QAC7C,eAAe,CAAC,EAAE,aAAa,EAAE,CAAC;QAClC,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,OAAO,CAAC;KACtB,GAAG,0BAA0B,EAAE;IAoChC;;OAEG;IACI,QAAQ,IAAI,UAAU,EAAE;IAI/B;;;;OAIG;IACI,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAa/C;;OAEG;IACI,iBAAiB,IAAI,cAAc;IAa1C;;;OAGG;IACI,iBAAiB,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAIpD;;;;;OAKG;IACI,2BAA2B,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAa9D;;OAEG;IACI,oBAAoB,IAAI,iBAAiB,GAAG,SAAS;IAI5D;;OAEG;IACI,cAAc,IACjB,OAAO,4BAA4B,EAAE,WAAW,GAChD,SAAS;CAKd;AAGD,OAAO,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -198,6 +198,7 @@ class ToolManager {
|
|
|
198
198
|
endToolSpan({
|
|
199
199
|
success: result.success,
|
|
200
200
|
durationMs: Date.now() - toolStartTime,
|
|
201
|
+
output: result.content,
|
|
201
202
|
});
|
|
202
203
|
return result;
|
|
203
204
|
}
|
|
@@ -222,6 +223,7 @@ class ToolManager {
|
|
|
222
223
|
endToolSpan({
|
|
223
224
|
success: result.success,
|
|
224
225
|
durationMs: Date.now() - toolStartTime,
|
|
226
|
+
output: result.content,
|
|
225
227
|
});
|
|
226
228
|
return result;
|
|
227
229
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configurationService.d.ts","sourceRoot":"","sources":["../../src/services/configurationService.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,KAAK,EACV,uBAAuB,EACvB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,KAAK,EACL,iBAAiB,EAClB,MAAM,2BAA2B,CAAC;AAOnC,OAAO,EACL,KAAK,2BAA2B,EAChC,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAE7B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,aAAa,EACb,WAAW,EACX,cAAc,EACd,YAAY,EACb,MAAM,mBAAmB,CAAC;AAK3B,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"configurationService.d.ts","sourceRoot":"","sources":["../../src/services/configurationService.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,7 @@ import { DEFAULT_WAVE_MAX_INPUT_TOKENS, DEFAULT_WAVE_MAX_OUTPUT_TOKENS, } from "
|
|
|
15
15
|
import { parseCustomHeaders } from "../utils/stringUtils.js";
|
|
16
16
|
import { getRemoteSettingsSync, mergeRemoteSettings, } from "./remoteSettingsService.js";
|
|
17
17
|
import { createAuthAwareFetch } from "./authService.js";
|
|
18
|
+
import { ensureWaveRuntimeFilesExcluded } from "../utils/gitUtils.js";
|
|
18
19
|
/**
|
|
19
20
|
* Default ConfigurationService implementation
|
|
20
21
|
*
|
|
@@ -631,6 +632,7 @@ export class ConfigurationService {
|
|
|
631
632
|
const localConfigPath = path.join(workdir, ".wave", "settings.local.json");
|
|
632
633
|
// Ensure .wave directory exists
|
|
633
634
|
const waveDir = path.join(workdir, ".wave");
|
|
635
|
+
ensureWaveRuntimeFilesExcluded(workdir);
|
|
634
636
|
if (!existsSync(waveDir)) {
|
|
635
637
|
await fs.mkdir(waveDir, { recursive: true });
|
|
636
638
|
}
|
|
@@ -2,43 +2,44 @@
|
|
|
2
2
|
* Session Tracing -- OpenTelemetry Span Management
|
|
3
3
|
*
|
|
4
4
|
* Provides span creation/ending APIs for interactions, LLM requests, and tool
|
|
5
|
-
* executions
|
|
5
|
+
* executions. Uses two independent AsyncLocalStorage contexts:
|
|
6
|
+
* - interactionContext: holds the interaction span for the entire turn
|
|
7
|
+
* - toolContext: holds the current tool span (cleared on end)
|
|
8
|
+
*
|
|
9
|
+
* LLM request spans do not enter any ALS; they are passed explicitly to
|
|
10
|
+
* endLLMRequestSpan, aligning with Claude Code's approach.
|
|
6
11
|
*/
|
|
7
12
|
import type { Span } from "@opentelemetry/api";
|
|
8
13
|
import type { LLMRequestMetadata, ToolMetadata } from "../types/telemetry.js";
|
|
9
14
|
/**
|
|
10
15
|
* Creates an interaction span for a user turn.
|
|
16
|
+
* The span is stored in interactionContext for the duration of the turn.
|
|
11
17
|
*/
|
|
12
18
|
export declare function startInteractionSpan(userPrompt: string, sequence: number): Span | undefined;
|
|
13
19
|
/**
|
|
14
|
-
* Ends the current
|
|
20
|
+
* Ends the current interaction span and clears the context.
|
|
15
21
|
*/
|
|
16
22
|
export declare function endInteractionSpan(): void;
|
|
17
23
|
/**
|
|
18
|
-
* Creates an LLM request span as a child of the
|
|
24
|
+
* Creates an LLM request span as a child of the interaction span.
|
|
25
|
+
* Does NOT enter any ALS — the span must be passed explicitly to endLLMRequestSpan.
|
|
19
26
|
*/
|
|
20
27
|
export declare function startLLMRequestSpan(model: string, options?: {
|
|
21
28
|
context?: string;
|
|
22
29
|
}): Span | undefined;
|
|
23
30
|
/**
|
|
24
|
-
* Ends
|
|
31
|
+
* Ends an LLM request span with response metadata.
|
|
32
|
+
* The span is passed explicitly — no ALS is read or modified.
|
|
25
33
|
*/
|
|
26
|
-
export declare function endLLMRequestSpan(metadata: LLMRequestMetadata): void;
|
|
34
|
+
export declare function endLLMRequestSpan(span: Span | undefined, metadata: LLMRequestMetadata): void;
|
|
27
35
|
/**
|
|
28
|
-
* Creates a tool execution span as a child of the
|
|
36
|
+
* Creates a tool execution span as a child of the interaction span.
|
|
37
|
+
* Enters toolContext with the new span.
|
|
29
38
|
*/
|
|
30
39
|
export declare function startToolSpan(toolName: string, input?: unknown): Span | undefined;
|
|
31
40
|
/**
|
|
32
|
-
* Ends
|
|
41
|
+
* Ends the current tool span with execution metadata.
|
|
42
|
+
* Reads the span from toolContext, then clears it.
|
|
33
43
|
*/
|
|
34
44
|
export declare function endToolSpan(metadata: ToolMetadata): void;
|
|
35
|
-
/**
|
|
36
|
-
* Returns the current active span from ALS context.
|
|
37
|
-
*/
|
|
38
|
-
export declare function getActiveInteractionSpan(): Span | undefined;
|
|
39
|
-
/**
|
|
40
|
-
* Executes `fn` with `span` as the active context via ALS.
|
|
41
|
-
* Useful for parallel tool calls that each need their own span context.
|
|
42
|
-
*/
|
|
43
|
-
export declare function withSpanContext<T>(span: Span, fn: () => T): T;
|
|
44
45
|
//# sourceMappingURL=sessionTracing.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessionTracing.d.ts","sourceRoot":"","sources":["../../src/telemetry/sessionTracing.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"sessionTracing.d.ts","sourceRoot":"","sources":["../../src/telemetry/sessionTracing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAM/C,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAkB9E;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,IAAI,GAAG,SAAS,CAiBlB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAKzC;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7B,IAAI,GAAG,SAAS,CAsBlB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,IAAI,GAAG,SAAS,EACtB,QAAQ,EAAE,kBAAkB,GAC3B,IAAI,CAmBN;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,OAAO,GACd,IAAI,GAAG,SAAS,CA4BlB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAmBxD"}
|
|
@@ -2,15 +2,18 @@
|
|
|
2
2
|
* Session Tracing -- OpenTelemetry Span Management
|
|
3
3
|
*
|
|
4
4
|
* Provides span creation/ending APIs for interactions, LLM requests, and tool
|
|
5
|
-
* executions
|
|
5
|
+
* executions. Uses two independent AsyncLocalStorage contexts:
|
|
6
|
+
* - interactionContext: holds the interaction span for the entire turn
|
|
7
|
+
* - toolContext: holds the current tool span (cleared on end)
|
|
8
|
+
*
|
|
9
|
+
* LLM request spans do not enter any ALS; they are passed explicitly to
|
|
10
|
+
* endLLMRequestSpan, aligning with Claude Code's approach.
|
|
6
11
|
*/
|
|
7
12
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
8
13
|
import { getOTELApi, isInitialized, getCurrentConfig, } from "./instrumentation.js";
|
|
9
14
|
// -- AsyncLocalStorage for context propagation --
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
const llmSpans = [];
|
|
13
|
-
const toolSpans = [];
|
|
15
|
+
const interactionContext = new AsyncLocalStorage();
|
|
16
|
+
const toolContext = new AsyncLocalStorage();
|
|
14
17
|
// -- Tracer accessor --
|
|
15
18
|
function getTracer() {
|
|
16
19
|
if (!isInitialized())
|
|
@@ -20,29 +23,15 @@ function getTracer() {
|
|
|
20
23
|
return undefined;
|
|
21
24
|
return otelApi.trace.getTracer("wave");
|
|
22
25
|
}
|
|
23
|
-
// -- Helper: create child span with parent context --
|
|
24
|
-
function startChildSpan(name, attributes) {
|
|
25
|
-
const tracer = getTracer();
|
|
26
|
-
if (!tracer)
|
|
27
|
-
return undefined;
|
|
28
|
-
const parent = spanContext.getStore();
|
|
29
|
-
let span;
|
|
30
|
-
if (parent) {
|
|
31
|
-
const otelApi = getOTELApi();
|
|
32
|
-
const ctx = otelApi.trace.setSpan(otelApi.context.active(), parent);
|
|
33
|
-
span = tracer.startSpan(name, { attributes }, ctx);
|
|
34
|
-
}
|
|
35
|
-
else {
|
|
36
|
-
span = tracer.startSpan(name, { attributes });
|
|
37
|
-
}
|
|
38
|
-
spanContext.enterWith(span);
|
|
39
|
-
return span;
|
|
40
|
-
}
|
|
41
26
|
// -- Public API --
|
|
42
27
|
/**
|
|
43
28
|
* Creates an interaction span for a user turn.
|
|
29
|
+
* The span is stored in interactionContext for the duration of the turn.
|
|
44
30
|
*/
|
|
45
31
|
export function startInteractionSpan(userPrompt, sequence) {
|
|
32
|
+
const tracer = getTracer();
|
|
33
|
+
if (!tracer)
|
|
34
|
+
return undefined;
|
|
46
35
|
const config = getCurrentConfig();
|
|
47
36
|
const attributes = {
|
|
48
37
|
"span.type": "interaction",
|
|
@@ -52,21 +41,28 @@ export function startInteractionSpan(userPrompt, sequence) {
|
|
|
52
41
|
if (config?.logUserPrompts) {
|
|
53
42
|
attributes.user_prompt = userPrompt;
|
|
54
43
|
}
|
|
55
|
-
|
|
44
|
+
const span = tracer.startSpan("interaction", { attributes });
|
|
45
|
+
interactionContext.enterWith(span);
|
|
46
|
+
return span;
|
|
56
47
|
}
|
|
57
48
|
/**
|
|
58
|
-
* Ends the current
|
|
49
|
+
* Ends the current interaction span and clears the context.
|
|
59
50
|
*/
|
|
60
51
|
export function endInteractionSpan() {
|
|
61
|
-
const span =
|
|
52
|
+
const span = interactionContext.getStore();
|
|
62
53
|
if (!span)
|
|
63
54
|
return;
|
|
64
55
|
span.end();
|
|
56
|
+
interactionContext.enterWith(undefined);
|
|
65
57
|
}
|
|
66
58
|
/**
|
|
67
|
-
* Creates an LLM request span as a child of the
|
|
59
|
+
* Creates an LLM request span as a child of the interaction span.
|
|
60
|
+
* Does NOT enter any ALS — the span must be passed explicitly to endLLMRequestSpan.
|
|
68
61
|
*/
|
|
69
62
|
export function startLLMRequestSpan(model, options) {
|
|
63
|
+
const tracer = getTracer();
|
|
64
|
+
if (!tracer)
|
|
65
|
+
return undefined;
|
|
70
66
|
const attributes = {
|
|
71
67
|
"span.type": "llm_request",
|
|
72
68
|
model,
|
|
@@ -74,17 +70,23 @@ export function startLLMRequestSpan(model, options) {
|
|
|
74
70
|
if (options?.context) {
|
|
75
71
|
attributes["llm_request.context"] = options.context;
|
|
76
72
|
}
|
|
77
|
-
const
|
|
78
|
-
|
|
79
|
-
|
|
73
|
+
const parent = interactionContext.getStore();
|
|
74
|
+
let span;
|
|
75
|
+
if (parent) {
|
|
76
|
+
const otelApi = getOTELApi();
|
|
77
|
+
const ctx = otelApi.trace.setSpan(otelApi.context.active(), parent);
|
|
78
|
+
span = tracer.startSpan("llm.request", { attributes }, ctx);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
span = tracer.startSpan("llm.request", { attributes });
|
|
80
82
|
}
|
|
81
83
|
return span;
|
|
82
84
|
}
|
|
83
85
|
/**
|
|
84
|
-
* Ends
|
|
86
|
+
* Ends an LLM request span with response metadata.
|
|
87
|
+
* The span is passed explicitly — no ALS is read or modified.
|
|
85
88
|
*/
|
|
86
|
-
export function endLLMRequestSpan(metadata) {
|
|
87
|
-
const span = llmSpans.pop();
|
|
89
|
+
export function endLLMRequestSpan(span, metadata) {
|
|
88
90
|
if (!span)
|
|
89
91
|
return;
|
|
90
92
|
if (metadata.inputTokens != null)
|
|
@@ -105,14 +107,15 @@ export function endLLMRequestSpan(metadata) {
|
|
|
105
107
|
if (metadata.hasToolCall != null)
|
|
106
108
|
span.setAttribute("has_tool_call", metadata.hasToolCall);
|
|
107
109
|
span.end();
|
|
108
|
-
if (llmSpans.length > 0) {
|
|
109
|
-
spanContext.enterWith(llmSpans[llmSpans.length - 1]);
|
|
110
|
-
}
|
|
111
110
|
}
|
|
112
111
|
/**
|
|
113
|
-
* Creates a tool execution span as a child of the
|
|
112
|
+
* Creates a tool execution span as a child of the interaction span.
|
|
113
|
+
* Enters toolContext with the new span.
|
|
114
114
|
*/
|
|
115
115
|
export function startToolSpan(toolName, input) {
|
|
116
|
+
const tracer = getTracer();
|
|
117
|
+
if (!tracer)
|
|
118
|
+
return undefined;
|
|
116
119
|
const config = getCurrentConfig();
|
|
117
120
|
const attributes = {
|
|
118
121
|
"span.type": "tool",
|
|
@@ -125,38 +128,39 @@ export function startToolSpan(toolName, input) {
|
|
|
125
128
|
}
|
|
126
129
|
attributes.tool_input = inputStr;
|
|
127
130
|
}
|
|
128
|
-
const
|
|
129
|
-
|
|
130
|
-
|
|
131
|
+
const parent = interactionContext.getStore();
|
|
132
|
+
let span;
|
|
133
|
+
if (parent) {
|
|
134
|
+
const otelApi = getOTELApi();
|
|
135
|
+
const ctx = otelApi.trace.setSpan(otelApi.context.active(), parent);
|
|
136
|
+
span = tracer.startSpan(`tool.${toolName}`, { attributes }, ctx);
|
|
131
137
|
}
|
|
138
|
+
else {
|
|
139
|
+
span = tracer.startSpan(`tool.${toolName}`, { attributes });
|
|
140
|
+
}
|
|
141
|
+
toolContext.enterWith(span);
|
|
132
142
|
return span;
|
|
133
143
|
}
|
|
134
144
|
/**
|
|
135
|
-
* Ends
|
|
145
|
+
* Ends the current tool span with execution metadata.
|
|
146
|
+
* Reads the span from toolContext, then clears it.
|
|
136
147
|
*/
|
|
137
148
|
export function endToolSpan(metadata) {
|
|
138
|
-
const span =
|
|
149
|
+
const span = toolContext.getStore();
|
|
139
150
|
if (!span)
|
|
140
151
|
return;
|
|
141
152
|
span.setAttribute("success", metadata.success);
|
|
142
153
|
if (metadata.error)
|
|
143
154
|
span.setAttribute("error", metadata.error);
|
|
144
155
|
span.setAttribute("duration_ms", metadata.durationMs);
|
|
145
|
-
|
|
146
|
-
if (
|
|
147
|
-
|
|
156
|
+
const config = getCurrentConfig();
|
|
157
|
+
if (config?.logToolContent && metadata.output) {
|
|
158
|
+
let outputStr = metadata.output;
|
|
159
|
+
if (outputStr.length > 1000) {
|
|
160
|
+
outputStr = outputStr.substring(0, 1000);
|
|
161
|
+
}
|
|
162
|
+
span.setAttribute("tool_output", outputStr);
|
|
148
163
|
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
* Returns the current active span from ALS context.
|
|
152
|
-
*/
|
|
153
|
-
export function getActiveInteractionSpan() {
|
|
154
|
-
return spanContext.getStore();
|
|
155
|
-
}
|
|
156
|
-
/**
|
|
157
|
-
* Executes `fn` with `span` as the active context via ALS.
|
|
158
|
-
* Useful for parallel tool calls that each need their own span context.
|
|
159
|
-
*/
|
|
160
|
-
export function withSpanContext(span, fn) {
|
|
161
|
-
return spanContext.run(span, fn);
|
|
164
|
+
span.end();
|
|
165
|
+
toolContext.enterWith(undefined);
|
|
162
166
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readTool.d.ts","sourceRoot":"","sources":["../../src/tools/readTool.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAA2B,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"readTool.d.ts","sourceRoot":"","sources":["../../src/tools/readTool.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAA2B,MAAM,YAAY,CAAC;AAmItE;;GAEG;AACH,eAAO,MAAM,QAAQ,EAAE,UA+RtB,CAAC"}
|
package/dist/tools/readTool.js
CHANGED
|
@@ -4,6 +4,7 @@ import { createHash } from "crypto";
|
|
|
4
4
|
import { logger } from "../utils/globalLogger.js";
|
|
5
5
|
import { resolvePath, getDisplayPath } from "../utils/path.js";
|
|
6
6
|
import { formatLineNumberPrefix } from "../utils/stringUtils.js";
|
|
7
|
+
import { estimateTokens } from "../utils/tokenEstimate.js";
|
|
7
8
|
import { isBinaryDocument, getBinaryDocumentError, } from "../utils/fileFormat.js";
|
|
8
9
|
import { convertImageToBase64 } from "../utils/messageOperations.js";
|
|
9
10
|
import { READ_TOOL_NAME } from "../constants/tools.js";
|
|
@@ -226,11 +227,10 @@ Usage:
|
|
|
226
227
|
}
|
|
227
228
|
}
|
|
228
229
|
}
|
|
229
|
-
// Resource Limits
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
typeof limit !== "number") {
|
|
230
|
+
// Resource Limits — align with Claude Code: 256KB default, bypassed only
|
|
231
|
+
// when the caller provides an explicit line limit (not offset alone).
|
|
232
|
+
const maxSizeBytes = context.fileReadingLimits?.maxSizeBytes ?? 0.25 * 1024 * 1024; // Default 256KB
|
|
233
|
+
if (stats.size > maxSizeBytes && typeof limit !== "number") {
|
|
234
234
|
return {
|
|
235
235
|
success: false,
|
|
236
236
|
content: "",
|
|
@@ -299,8 +299,7 @@ Usage:
|
|
|
299
299
|
// Token-level validation: estimate tokens and reject if over limit
|
|
300
300
|
const maxTokens = context.fileReadingLimits?.maxTokens ?? 25000; // Default 25000 tokens
|
|
301
301
|
const ext = extname(actualFilePath).toLowerCase().slice(1);
|
|
302
|
-
const
|
|
303
|
-
const estimatedTokens = Math.ceil(formattedContent.length / bytesPerToken);
|
|
302
|
+
const estimatedTokens = estimateTokens(formattedContent, ext);
|
|
304
303
|
if (estimatedTokens > maxTokens) {
|
|
305
304
|
return {
|
|
306
305
|
success: false,
|