wave-agent-sdk 0.16.12 → 0.16.13
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 +3 -1
- package/dist/managers/backgroundTaskManager.js +1 -1
- package/dist/managers/bangManager.js +1 -1
- package/dist/managers/hookManager.js +2 -1
- package/dist/managers/mcpManager.d.ts.map +1 -1
- package/dist/managers/mcpManager.js +4 -2
- package/dist/services/jsonlHandler.d.ts +1 -1
- package/dist/services/jsonlHandler.d.ts.map +1 -1
- package/dist/services/jsonlHandler.js +22 -7
- package/dist/services/session.d.ts +3 -2
- package/dist/services/session.d.ts.map +1 -1
- package/dist/services/session.js +30 -13
- package/dist/tools/agentTool.js +1 -1
- package/dist/tools/bashTool.d.ts.map +1 -1
- package/dist/tools/bashTool.js +2 -4
- package/dist/tools/readTool.d.ts.map +1 -1
- package/dist/tools/readTool.js +19 -4
- package/dist/tools/types.d.ts +2 -0
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/types/agent.d.ts +2 -0
- package/dist/types/agent.d.ts.map +1 -1
- package/dist/utils/containerSetup.d.ts.map +1 -1
- package/dist/utils/containerSetup.js +6 -1
- package/package.json +1 -1
- package/src/managers/aiManager.ts +4 -3
- package/src/managers/backgroundTaskManager.ts +1 -1
- package/src/managers/bangManager.ts +1 -1
- package/src/managers/hookManager.ts +3 -3
- package/src/managers/mcpManager.ts +5 -2
- package/src/services/jsonlHandler.ts +27 -7
- package/src/services/session.ts +33 -13
- package/src/tools/agentTool.ts +1 -1
- package/src/tools/bashTool.ts +2 -4
- package/src/tools/readTool.ts +23 -5
- package/src/tools/types.ts +2 -0
- package/src/types/agent.ts +2 -0
- package/src/utils/containerSetup.ts +7 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aiManager.d.ts","sourceRoot":"","sources":["../../src/managers/aiManager.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"aiManager.d.ts","sourceRoot":"","sources":["../../src/managers/aiManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -742,6 +742,7 @@ export class AIManager {
|
|
|
742
742
|
backgroundTaskManager: this.backgroundTaskManager,
|
|
743
743
|
workdir: this.getWorkdir(),
|
|
744
744
|
originalWorkdir: this.originalWorkdir,
|
|
745
|
+
env: this.container.get("MergedEnv"),
|
|
745
746
|
messageId: this.messageManager.getMessages().slice(-1)[0]?.id,
|
|
746
747
|
sessionId: this.messageManager.getSessionId(),
|
|
747
748
|
toolCallId: toolId,
|
|
@@ -1122,7 +1123,8 @@ export class AIManager {
|
|
|
1122
1123
|
toolInput,
|
|
1123
1124
|
toolResponse,
|
|
1124
1125
|
subagentType: this.subagentType, // Include subagent type in hook context
|
|
1125
|
-
env:
|
|
1126
|
+
env: this.container.get("MergedEnv") ||
|
|
1127
|
+
process.env,
|
|
1126
1128
|
};
|
|
1127
1129
|
const results = await this.hookManager.executeHooks("PostToolUse", context);
|
|
1128
1130
|
// Process hook results to handle exit codes and update tool results
|
|
@@ -687,7 +687,8 @@ export class HookManager {
|
|
|
687
687
|
transcriptPath,
|
|
688
688
|
cwd: this.workdir,
|
|
689
689
|
endSource: source,
|
|
690
|
-
env:
|
|
690
|
+
env: this.container.get("MergedEnv") ||
|
|
691
|
+
process.env,
|
|
691
692
|
};
|
|
692
693
|
const results = await this.executeHooks("SessionEnd", context);
|
|
693
694
|
// Process results but never block shutdown
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcpManager.d.ts","sourceRoot":"","sources":["../../src/managers/mcpManager.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAEjE,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,KAAK,EACV,MAAM,EACN,eAAe,EACf,SAAS,EACT,OAAO,EACP,eAAe,EAChB,MAAM,mBAAmB,CAAC;AAQ3B,MAAM,WAAW,mBAAmB;IAClC,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,IAAI,CAAC;CAC3D;AAID,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC9C;AAQD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAUnD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,CAsC7D;AAED,qBAAa,UAAU;IAanB,OAAO,CAAC,SAAS;IAZnB,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,OAAO,CAA2C;IAC1D,OAAO,CAAC,WAAW,CAAyC;IAC5D,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,UAAU,CAA8C;IAEhE,OAAO,CAAC,eAAe,CAA0C;IACjE,OAAO,CAAC,iBAAiB,CAAkC;gBAGjD,SAAS,EAAE,SAAS,EAC5B,OAAO,GAAE,iBAAsB;IAMjC;;OAEG;IACG,UAAU,CACd,OAAO,EAAE,MAAM,EACf,WAAW,GAAE,OAAe,GAC3B,OAAO,CAAC,IAAI,CAAC;IAgDV,kBAAkB,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAO/C,UAAU,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAgEvC,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;IAWrD,SAAS,IAAI,SAAS,GAAG,IAAI;IAI7B,aAAa,IAAI,eAAe,EAAE;IAIlC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAIpD,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI;IASzE,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO;IAuDzD,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAgB7B,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"mcpManager.d.ts","sourceRoot":"","sources":["../../src/managers/mcpManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -326,8 +326,10 @@ export class McpManager {
|
|
|
326
326
|
}
|
|
327
327
|
}
|
|
328
328
|
else if (server.config.command) {
|
|
329
|
+
const agentEnv = this.container.get("MergedEnv") ||
|
|
330
|
+
process.env;
|
|
329
331
|
const env = {
|
|
330
|
-
...
|
|
332
|
+
...agentEnv,
|
|
331
333
|
...(server.config.env || {}),
|
|
332
334
|
};
|
|
333
335
|
// For plugin servers, substitute ${WAVE_PLUGIN_ROOT} in command/args/env
|
|
@@ -612,7 +614,7 @@ export class McpManager {
|
|
|
612
614
|
textContent.push(`[Resource: ${c.resource?.uri || ""}]`);
|
|
613
615
|
}
|
|
614
616
|
else {
|
|
615
|
-
textContent.push(JSON.stringify(c));
|
|
617
|
+
textContent.push(JSON.stringify(c, null, 2));
|
|
616
618
|
}
|
|
617
619
|
});
|
|
618
620
|
}
|
|
@@ -62,7 +62,7 @@ export declare class JsonlHandler {
|
|
|
62
62
|
isValidSessionFilename(filename: string): boolean;
|
|
63
63
|
/**
|
|
64
64
|
* Generate simple filename for sessions
|
|
65
|
-
* @param sessionId - UUID
|
|
65
|
+
* @param sessionId - Session identifier (timestamp-prefixed or legacy UUID format)
|
|
66
66
|
* @param sessionType - Type of session ("main" or "subagent")
|
|
67
67
|
* @returns Generated filename
|
|
68
68
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsonlHandler.d.ts","sourceRoot":"","sources":["../../src/services/jsonlHandler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAEhC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA8B;;IAQlE;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQpD;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAItE;;OAEG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ1E;;OAEG;IACG,MAAM,CACV,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,IAAI,CAAC;IAmChB;;OAEG;IACG,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAoChD;;OAEG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAgC/D;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA4BxB;;OAEG;YACW,eAAe;IAW7B;;;;OAIG;IACH,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe;
|
|
1
|
+
{"version":3,"file":"jsonlHandler.d.ts","sourceRoot":"","sources":["../../src/services/jsonlHandler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAEhC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA8B;;IAQlE;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQpD;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAItE;;OAEG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ1E;;OAEG;IACG,MAAM,CACV,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,IAAI,CAAC;IAmChB;;OAEG;IACG,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAoChD;;OAEG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAgC/D;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA4BxB;;OAEG;YACW,eAAe;IAW7B;;;;OAIG;IACH,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe;IAwCvD;;;;OAIG;IACH,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAkBjD;;;;;OAKG;IACH,uBAAuB,CACrB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAAG,UAAU,GAC/B,MAAM;CAeV"}
|
|
@@ -179,7 +179,16 @@ export class JsonlHandler {
|
|
|
179
179
|
parseSessionFilename(filePath) {
|
|
180
180
|
// Extract filename from path
|
|
181
181
|
const filename = filePath.split("/").pop() || "";
|
|
182
|
-
//
|
|
182
|
+
// New timestamp-prefixed format
|
|
183
|
+
const newSubagentMatch = filename.match(/^subagent-(\d{14}-[0-9a-f]{8})\.jsonl$/);
|
|
184
|
+
if (newSubagentMatch) {
|
|
185
|
+
return { sessionId: newSubagentMatch[1], sessionType: "subagent" };
|
|
186
|
+
}
|
|
187
|
+
const newMainMatch = filename.match(/^(\d{14}-[0-9a-f]{8})\.jsonl$/);
|
|
188
|
+
if (newMainMatch) {
|
|
189
|
+
return { sessionId: newMainMatch[1], sessionType: "main" };
|
|
190
|
+
}
|
|
191
|
+
// Old UUID format (backward compat)
|
|
183
192
|
const subagentMatch = filename.match(/^subagent-([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\.jsonl$/);
|
|
184
193
|
if (subagentMatch) {
|
|
185
194
|
return {
|
|
@@ -187,7 +196,6 @@ export class JsonlHandler {
|
|
|
187
196
|
sessionType: "subagent",
|
|
188
197
|
};
|
|
189
198
|
}
|
|
190
|
-
// Check if it's a main session
|
|
191
199
|
const mainMatch = filename.match(/^([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\.jsonl$/);
|
|
192
200
|
if (mainMatch) {
|
|
193
201
|
return {
|
|
@@ -203,21 +211,28 @@ export class JsonlHandler {
|
|
|
203
211
|
* @returns True if valid, false otherwise
|
|
204
212
|
*/
|
|
205
213
|
isValidSessionFilename(filename) {
|
|
206
|
-
//
|
|
214
|
+
// New timestamp-prefixed format patterns
|
|
215
|
+
const newFormatPattern = /^(\d{14}-[0-9a-f]{8})\.jsonl$/;
|
|
216
|
+
const newSubagentPattern = /^subagent-(\d{14}-[0-9a-f]{8})\.jsonl$/;
|
|
217
|
+
// Old UUID format patterns (backward compat)
|
|
207
218
|
const uuidPattern = /^([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\.jsonl$/;
|
|
208
219
|
const subagentPattern = /^subagent-([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\.jsonl$/;
|
|
209
|
-
return
|
|
220
|
+
return (newFormatPattern.test(filename) ||
|
|
221
|
+
newSubagentPattern.test(filename) ||
|
|
222
|
+
uuidPattern.test(filename) ||
|
|
223
|
+
subagentPattern.test(filename));
|
|
210
224
|
}
|
|
211
225
|
/**
|
|
212
226
|
* Generate simple filename for sessions
|
|
213
|
-
* @param sessionId - UUID
|
|
227
|
+
* @param sessionId - Session identifier (timestamp-prefixed or legacy UUID format)
|
|
214
228
|
* @param sessionType - Type of session ("main" or "subagent")
|
|
215
229
|
* @returns Generated filename
|
|
216
230
|
*/
|
|
217
231
|
generateSessionFilename(sessionId, sessionType) {
|
|
218
|
-
// Validate sessionId is
|
|
232
|
+
// Validate sessionId is either new timestamp-prefixed format or legacy UUID
|
|
233
|
+
const newFormatPattern = /^\d{14}-[0-9a-f]{8}$/;
|
|
219
234
|
const uuidPattern = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;
|
|
220
|
-
if (!uuidPattern.test(sessionId)) {
|
|
235
|
+
if (!newFormatPattern.test(sessionId) && !uuidPattern.test(sessionId)) {
|
|
221
236
|
throw new Error(`Invalid session ID format: ${sessionId}`);
|
|
222
237
|
}
|
|
223
238
|
if (sessionType === "subagent") {
|
|
@@ -44,8 +44,9 @@ export interface SessionIndex {
|
|
|
44
44
|
lastUpdated: string;
|
|
45
45
|
}
|
|
46
46
|
/**
|
|
47
|
-
* Generate a new session ID
|
|
48
|
-
*
|
|
47
|
+
* Generate a new session ID with a timestamp prefix for sortability
|
|
48
|
+
* Format: {YYYYMMDDHHmmss}-{8hex} (e.g. 20260527143025-a1b2c3d4)
|
|
49
|
+
* @returns Timestamp-prefixed session ID string
|
|
49
50
|
*/
|
|
50
51
|
export declare function generateSessionId(): string;
|
|
51
52
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/services/session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAOjD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,QAAQ,EAAE;QACR,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,EAAE,MAAM,CAAC;QACrB,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;CACH;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,UAAU,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,IAAI,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CACd,MAAM,EACN,IAAI,CAAC,eAAe,EAAE,IAAI,GAAG,cAAc,CAAC,GAAG;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CACxE,CAAC;IACF,WAAW,EAAE,MAAM,CAAC;CACrB;AAED
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/services/session.ts"],"names":[],"mappings":"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"}
|
package/dist/services/session.js
CHANGED
|
@@ -24,11 +24,22 @@ import { extractLatestTotalTokens } from "../utils/tokenCalculation.js";
|
|
|
24
24
|
import { logger } from "../utils/globalLogger.js";
|
|
25
25
|
import { getMessageContent } from "../utils/messageOperations.js";
|
|
26
26
|
/**
|
|
27
|
-
* Generate a new session ID
|
|
28
|
-
*
|
|
27
|
+
* Generate a new session ID with a timestamp prefix for sortability
|
|
28
|
+
* Format: {YYYYMMDDHHmmss}-{8hex} (e.g. 20260527143025-a1b2c3d4)
|
|
29
|
+
* @returns Timestamp-prefixed session ID string
|
|
29
30
|
*/
|
|
30
31
|
export function generateSessionId() {
|
|
31
|
-
|
|
32
|
+
const now = new Date();
|
|
33
|
+
const ts = [
|
|
34
|
+
now.getFullYear(),
|
|
35
|
+
String(now.getMonth() + 1).padStart(2, "0"),
|
|
36
|
+
String(now.getDate()).padStart(2, "0"),
|
|
37
|
+
String(now.getHours()).padStart(2, "0"),
|
|
38
|
+
String(now.getMinutes()).padStart(2, "0"),
|
|
39
|
+
String(now.getSeconds()).padStart(2, "0"),
|
|
40
|
+
].join("");
|
|
41
|
+
const shortId = randomUUID().slice(0, 8);
|
|
42
|
+
return `${ts}-${shortId}`;
|
|
32
43
|
}
|
|
33
44
|
/**
|
|
34
45
|
* Generate filename for subagent sessions
|
|
@@ -345,12 +356,14 @@ export async function listSessionsFromJsonl(workdir) {
|
|
|
345
356
|
}
|
|
346
357
|
try {
|
|
347
358
|
const filePath = join(projectDir.encodedPath, file);
|
|
348
|
-
// Validate main session filename format (UUID
|
|
359
|
+
// Validate main session filename format (new timestamp format or legacy UUID)
|
|
360
|
+
const newFormatMatch = file.match(/^(\d{14}-[0-9a-f]{8})\.jsonl$/);
|
|
349
361
|
const uuidMatch = file.match(/^([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\.jsonl$/);
|
|
350
|
-
|
|
362
|
+
const match = newFormatMatch || uuidMatch;
|
|
363
|
+
if (!match) {
|
|
351
364
|
continue; // Skip invalid filenames
|
|
352
365
|
}
|
|
353
|
-
const sessionId =
|
|
366
|
+
const sessionId = match[1];
|
|
354
367
|
// PERFORMANCE OPTIMIZATION: Only read the last message for timestamps and tokens
|
|
355
368
|
const jsonlHandler = new JsonlHandler();
|
|
356
369
|
const lastMessage = await jsonlHandler.getLastMessage(filePath);
|
|
@@ -514,13 +527,17 @@ export async function cleanupExpiredSessionsFromJsonl(workdir) {
|
|
|
514
527
|
const indexPath = join(projectDir.encodedPath, SESSION_INDEX_FILENAME);
|
|
515
528
|
const indexContent = await fs.readFile(indexPath, "utf8");
|
|
516
529
|
const index = JSON.parse(indexContent);
|
|
517
|
-
|
|
518
|
-
const
|
|
519
|
-
const
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
530
|
+
// New timestamp-prefixed format patterns
|
|
531
|
+
const newMainMatch = file.match(/^(\d{14}-[0-9a-f]{8})\.jsonl$/);
|
|
532
|
+
const newSubagentMatch = file.match(/^subagent-(\d{14}-[0-9a-f]{8})\.jsonl$/);
|
|
533
|
+
// Old UUID format patterns (backward compat)
|
|
534
|
+
const uuidMatch = file.match(/^([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\.jsonl$/);
|
|
535
|
+
const subagentMatch = file.match(/^subagent-([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\.jsonl$/);
|
|
536
|
+
const sessionId = newMainMatch?.[1] ??
|
|
537
|
+
newSubagentMatch?.[1] ??
|
|
538
|
+
uuidMatch?.[1] ??
|
|
539
|
+
subagentMatch?.[1] ??
|
|
540
|
+
null;
|
|
524
541
|
if (sessionId && index.sessions[sessionId]) {
|
|
525
542
|
delete index.sessions[sessionId];
|
|
526
543
|
await fs.writeFile(indexPath, JSON.stringify(index, null, 2), "utf8");
|
package/dist/tools/agentTool.js
CHANGED
|
@@ -196,7 +196,7 @@ When using the Agent tool, you must specify a subagent_type parameter to select
|
|
|
196
196
|
resolve({
|
|
197
197
|
success: true,
|
|
198
198
|
content: backgroundMsg,
|
|
199
|
-
shortResult: `Agent started in background: ${result}`,
|
|
199
|
+
shortResult: `Agent started in background: ${result}${outputPath ? ` → ${outputPath}` : ""}`,
|
|
200
200
|
});
|
|
201
201
|
return;
|
|
202
202
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bashTool.d.ts","sourceRoot":"","sources":["../../src/tools/bashTool.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAA2B,MAAM,YAAY,CAAC;AAYtE;;GAEG;AACH,eAAO,MAAM,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"bashTool.d.ts","sourceRoot":"","sources":["../../src/tools/bashTool.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAA2B,MAAM,YAAY,CAAC;AAYtE;;GAEG;AACH,eAAO,MAAM,QAAQ,EAAE,UA0etB,CAAC"}
|
package/dist/tools/bashTool.js
CHANGED
|
@@ -179,7 +179,7 @@ The working directory persists between commands. Try to maintain your current wo
|
|
|
179
179
|
return {
|
|
180
180
|
success: true,
|
|
181
181
|
content: backgroundMsg,
|
|
182
|
-
shortResult: `Background process ${taskId} started`,
|
|
182
|
+
shortResult: `Background process ${taskId} started${outputPath ? ` → ${outputPath}` : ""}`,
|
|
183
183
|
};
|
|
184
184
|
}
|
|
185
185
|
// Foreground execution (original behavior)
|
|
@@ -192,9 +192,7 @@ The working directory persists between commands. Try to maintain your current wo
|
|
|
192
192
|
stdio: "pipe",
|
|
193
193
|
detached: true,
|
|
194
194
|
cwd: context.workdir,
|
|
195
|
-
env: {
|
|
196
|
-
...process.env,
|
|
197
|
-
},
|
|
195
|
+
env: context.env || { ...process.env },
|
|
198
196
|
});
|
|
199
197
|
let outputBuffer = "";
|
|
200
198
|
let errorBuffer = "";
|
|
@@ -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;AAkItE;;GAEG;AACH,eAAO,MAAM,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"readTool.d.ts","sourceRoot":"","sources":["../../src/tools/readTool.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAA2B,MAAM,YAAY,CAAC;AAkItE;;GAEG;AACH,eAAO,MAAM,QAAQ,EAAE,UA6RtB,CAAC"}
|
package/dist/tools/readTool.js
CHANGED
|
@@ -126,7 +126,7 @@ Usage:
|
|
|
126
126
|
- The file_path parameter must be an absolute path, not a relative path
|
|
127
127
|
- By default, it reads up to 2000 lines starting from the beginning of the file
|
|
128
128
|
- You can optionally specify a line offset and limit (especially handy for long files), but it's recommended to read the whole file by not providing these parameters
|
|
129
|
-
-
|
|
129
|
+
- If the file content exceeds the token limit, use offset and limit parameters to read specific portions of the file, or use Bash with grep/jq to extract specific content
|
|
130
130
|
- Results are returned using cat -n format, with line numbers starting at 1
|
|
131
131
|
- This tool allows Agent to read images (eg PNG, JPG, etc). When reading an image file the contents are presented visually as Agent is a multimodal LLM.
|
|
132
132
|
- You have the capability to call multiple tools in a single response. It is always better to speculatively read multiple files as a batch that are potentially useful.
|
|
@@ -285,11 +285,26 @@ Usage:
|
|
|
285
285
|
const formattedContent = selectedLines
|
|
286
286
|
.map((line, index) => {
|
|
287
287
|
const lineNumber = startLine + index;
|
|
288
|
-
|
|
289
|
-
const truncatedLine = line.length > 2000 ? line.substring(0, 2000) + "..." : line;
|
|
290
|
-
return `${formatLineNumberPrefix(lineNumber)}${truncatedLine}`;
|
|
288
|
+
return `${formatLineNumberPrefix(lineNumber)}${line}`;
|
|
291
289
|
})
|
|
292
290
|
.join("\n");
|
|
291
|
+
// Token-level validation: estimate tokens and reject if over limit
|
|
292
|
+
const maxTokens = context.fileReadingLimits?.maxTokens ?? 25000; // Default 25000 tokens
|
|
293
|
+
const ext = extname(actualFilePath).toLowerCase().slice(1);
|
|
294
|
+
const bytesPerToken = ext === "json" || ext === "jsonl" || ext === "jsonc" ? 2 : 4;
|
|
295
|
+
const estimatedTokens = Math.ceil(formattedContent.length / bytesPerToken);
|
|
296
|
+
if (estimatedTokens > maxTokens) {
|
|
297
|
+
return {
|
|
298
|
+
success: false,
|
|
299
|
+
content: "",
|
|
300
|
+
error: `File content (~${estimatedTokens.toLocaleString()} tokens) exceeds maximum allowed tokens (${maxTokens.toLocaleString()}). Use offset and limit parameters to read specific portions of the file, or use Bash with grep/jq to search within it for specific content.`,
|
|
301
|
+
metadata: {
|
|
302
|
+
type: "error_token_limit_exceeded",
|
|
303
|
+
estimatedTokens,
|
|
304
|
+
maxTokens,
|
|
305
|
+
},
|
|
306
|
+
};
|
|
307
|
+
}
|
|
293
308
|
// Add file information header
|
|
294
309
|
let content = `File: ${filePath}\n`;
|
|
295
310
|
if (startLine > 1 || endLine < totalLines) {
|
package/dist/tools/types.d.ts
CHANGED
|
@@ -94,5 +94,7 @@ export interface ToolContext {
|
|
|
94
94
|
onCwdChange?: (newCwd: string) => void;
|
|
95
95
|
/** Original working directory (before any cd changes) for CWD reset */
|
|
96
96
|
originalWorkdir?: string;
|
|
97
|
+
/** Merged environment variables (process.env + agent env) for child processes */
|
|
98
|
+
env?: Record<string, string>;
|
|
97
99
|
}
|
|
98
100
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types/agent.d.ts
CHANGED
|
@@ -82,6 +82,8 @@ export interface AgentOptions {
|
|
|
82
82
|
* File-based hooks (from config.json/.waverc.json) merge on top of these.
|
|
83
83
|
*/
|
|
84
84
|
hooks?: PartialHookConfiguration;
|
|
85
|
+
/** Per-agent environment variables, merged on top of process.env for bash, MCP, and hooks */
|
|
86
|
+
env?: Record<string, string>;
|
|
85
87
|
[key: string]: unknown;
|
|
86
88
|
}
|
|
87
89
|
export interface AgentCallbacks extends MessageManagerCallbacks, BackgroundTaskManagerCallbacks, McpManagerCallbacks, SubagentManagerCallbacks {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/types/agent.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/types/agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"containerSetup.d.ts","sourceRoot":"","sources":["../../src/utils/containerSetup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAwB3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAM3E,OAAO,KAAK,EAAE,YAAY,EAAmB,MAAM,mBAAmB,CAAC;AACvE,OAAO,KAAK,EACV,cAAc,EACd,KAAK,EACL,IAAI,EACJ,cAAc,EAEf,MAAM,mBAAmB,CAAC;AAM3B,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,oBAAoB,EAAE,oBAAoB,CAAC;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,OAAO,CAAC;IAGhB,uBAAuB,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,IAAI,CAAC;IAC3D,aAAa,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;IACvC,sBAAsB,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IACvD,wBAAwB,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IACzD,iBAAiB,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IAClD,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAED,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,0BAA0B,GACvC,SAAS,
|
|
1
|
+
{"version":3,"file":"containerSetup.d.ts","sourceRoot":"","sources":["../../src/utils/containerSetup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAwB3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAM3E,OAAO,KAAK,EAAE,YAAY,EAAmB,MAAM,mBAAmB,CAAC;AACvE,OAAO,KAAK,EACV,cAAc,EACd,KAAK,EACL,IAAI,EACJ,cAAc,EAEf,MAAM,mBAAmB,CAAC;AAM3B,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,oBAAoB,EAAE,oBAAoB,CAAC;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,OAAO,CAAC;IAGhB,uBAAuB,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,IAAI,CAAC;IAC3D,aAAa,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;IACvC,sBAAsB,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IACvD,wBAAwB,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IACzD,iBAAiB,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IAClD,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAED,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,0BAA0B,GACvC,SAAS,CAgSX"}
|
|
@@ -36,6 +36,11 @@ export function setupAgentContainer(setupOptions) {
|
|
|
36
36
|
const container = new Container();
|
|
37
37
|
container.register("AgentOptions", options);
|
|
38
38
|
container.register("Workdir", workdir);
|
|
39
|
+
const mergedEnv = {
|
|
40
|
+
...process.env,
|
|
41
|
+
...(options.env || {}),
|
|
42
|
+
};
|
|
43
|
+
container.register("MergedEnv", mergedEnv);
|
|
39
44
|
if (options.worktreeName) {
|
|
40
45
|
container.register("WorktreeName", options.worktreeName);
|
|
41
46
|
container.register("MainRepoRoot", getGitMainRepoRoot(workdir));
|
|
@@ -151,7 +156,7 @@ export function setupAgentContainer(setupOptions) {
|
|
|
151
156
|
cwd: workdir,
|
|
152
157
|
toolName: context.toolName,
|
|
153
158
|
toolInput: context.toolInput,
|
|
154
|
-
env:
|
|
159
|
+
env: mergedEnv,
|
|
155
160
|
});
|
|
156
161
|
if (results.length > 0) {
|
|
157
162
|
const processResult = hookManager.processHookResults("PermissionRequest", results, messageManager);
|
package/package.json
CHANGED
|
@@ -1013,6 +1013,7 @@ export class AIManager {
|
|
|
1013
1013
|
backgroundTaskManager: this.backgroundTaskManager,
|
|
1014
1014
|
workdir: this.getWorkdir(),
|
|
1015
1015
|
originalWorkdir: this.originalWorkdir,
|
|
1016
|
+
env: this.container.get<Record<string, string>>("MergedEnv"),
|
|
1016
1017
|
messageId: this.messageManager.getMessages().slice(-1)[0]?.id,
|
|
1017
1018
|
sessionId: this.messageManager.getSessionId(),
|
|
1018
1019
|
toolCallId: toolId,
|
|
@@ -1524,9 +1525,9 @@ export class AIManager {
|
|
|
1524
1525
|
toolInput,
|
|
1525
1526
|
toolResponse,
|
|
1526
1527
|
subagentType: this.subagentType, // Include subagent type in hook context
|
|
1527
|
-
env:
|
|
1528
|
-
|
|
1529
|
-
|
|
1528
|
+
env:
|
|
1529
|
+
this.container.get<Record<string, string>>("MergedEnv") ||
|
|
1530
|
+
(process.env as Record<string, string>),
|
|
1530
1531
|
};
|
|
1531
1532
|
|
|
1532
1533
|
const results = await this.hookManager.executeHooks(
|
|
@@ -948,9 +948,9 @@ export class HookManager {
|
|
|
948
948
|
transcriptPath,
|
|
949
949
|
cwd: this.workdir,
|
|
950
950
|
endSource: source,
|
|
951
|
-
env:
|
|
952
|
-
|
|
953
|
-
|
|
951
|
+
env:
|
|
952
|
+
this.container.get<Record<string, string>>("MergedEnv") ||
|
|
953
|
+
(process.env as Record<string, string>),
|
|
954
954
|
};
|
|
955
955
|
|
|
956
956
|
const results = await this.executeHooks("SessionEnd", context);
|
|
@@ -424,8 +424,11 @@ export class McpManager {
|
|
|
424
424
|
logger?.info(`Connected to MCP server ${name} using SSE (fallback)`);
|
|
425
425
|
}
|
|
426
426
|
} else if (server.config.command) {
|
|
427
|
+
const agentEnv =
|
|
428
|
+
this.container.get<Record<string, string>>("MergedEnv") ||
|
|
429
|
+
(process.env as Record<string, string>);
|
|
427
430
|
const env: Record<string, string> = {
|
|
428
|
-
...
|
|
431
|
+
...agentEnv,
|
|
429
432
|
...(server.config.env || {}),
|
|
430
433
|
};
|
|
431
434
|
|
|
@@ -798,7 +801,7 @@ export class McpManager {
|
|
|
798
801
|
} else if (c.type === "resource") {
|
|
799
802
|
textContent.push(`[Resource: ${c.resource?.uri || ""}]`);
|
|
800
803
|
} else {
|
|
801
|
-
textContent.push(JSON.stringify(c));
|
|
804
|
+
textContent.push(JSON.stringify(c, null, 2));
|
|
802
805
|
}
|
|
803
806
|
},
|
|
804
807
|
);
|
|
@@ -229,7 +229,19 @@ export class JsonlHandler {
|
|
|
229
229
|
// Extract filename from path
|
|
230
230
|
const filename = filePath.split("/").pop() || "";
|
|
231
231
|
|
|
232
|
-
//
|
|
232
|
+
// New timestamp-prefixed format
|
|
233
|
+
const newSubagentMatch = filename.match(
|
|
234
|
+
/^subagent-(\d{14}-[0-9a-f]{8})\.jsonl$/,
|
|
235
|
+
);
|
|
236
|
+
if (newSubagentMatch) {
|
|
237
|
+
return { sessionId: newSubagentMatch[1], sessionType: "subagent" };
|
|
238
|
+
}
|
|
239
|
+
const newMainMatch = filename.match(/^(\d{14}-[0-9a-f]{8})\.jsonl$/);
|
|
240
|
+
if (newMainMatch) {
|
|
241
|
+
return { sessionId: newMainMatch[1], sessionType: "main" };
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
// Old UUID format (backward compat)
|
|
233
245
|
const subagentMatch = filename.match(
|
|
234
246
|
/^subagent-([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\.jsonl$/,
|
|
235
247
|
);
|
|
@@ -240,7 +252,6 @@ export class JsonlHandler {
|
|
|
240
252
|
};
|
|
241
253
|
}
|
|
242
254
|
|
|
243
|
-
// Check if it's a main session
|
|
244
255
|
const mainMatch = filename.match(
|
|
245
256
|
/^([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\.jsonl$/,
|
|
246
257
|
);
|
|
@@ -260,18 +271,26 @@ export class JsonlHandler {
|
|
|
260
271
|
* @returns True if valid, false otherwise
|
|
261
272
|
*/
|
|
262
273
|
isValidSessionFilename(filename: string): boolean {
|
|
263
|
-
//
|
|
274
|
+
// New timestamp-prefixed format patterns
|
|
275
|
+
const newFormatPattern = /^(\d{14}-[0-9a-f]{8})\.jsonl$/;
|
|
276
|
+
const newSubagentPattern = /^subagent-(\d{14}-[0-9a-f]{8})\.jsonl$/;
|
|
277
|
+
// Old UUID format patterns (backward compat)
|
|
264
278
|
const uuidPattern =
|
|
265
279
|
/^([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\.jsonl$/;
|
|
266
280
|
const subagentPattern =
|
|
267
281
|
/^subagent-([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\.jsonl$/;
|
|
268
282
|
|
|
269
|
-
return
|
|
283
|
+
return (
|
|
284
|
+
newFormatPattern.test(filename) ||
|
|
285
|
+
newSubagentPattern.test(filename) ||
|
|
286
|
+
uuidPattern.test(filename) ||
|
|
287
|
+
subagentPattern.test(filename)
|
|
288
|
+
);
|
|
270
289
|
}
|
|
271
290
|
|
|
272
291
|
/**
|
|
273
292
|
* Generate simple filename for sessions
|
|
274
|
-
* @param sessionId - UUID
|
|
293
|
+
* @param sessionId - Session identifier (timestamp-prefixed or legacy UUID format)
|
|
275
294
|
* @param sessionType - Type of session ("main" or "subagent")
|
|
276
295
|
* @returns Generated filename
|
|
277
296
|
*/
|
|
@@ -279,10 +298,11 @@ export class JsonlHandler {
|
|
|
279
298
|
sessionId: string,
|
|
280
299
|
sessionType: "main" | "subagent",
|
|
281
300
|
): string {
|
|
282
|
-
// Validate sessionId is
|
|
301
|
+
// Validate sessionId is either new timestamp-prefixed format or legacy UUID
|
|
302
|
+
const newFormatPattern = /^\d{14}-[0-9a-f]{8}$/;
|
|
283
303
|
const uuidPattern =
|
|
284
304
|
/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;
|
|
285
|
-
if (!uuidPattern.test(sessionId)) {
|
|
305
|
+
if (!newFormatPattern.test(sessionId) && !uuidPattern.test(sessionId)) {
|
|
286
306
|
throw new Error(`Invalid session ID format: ${sessionId}`);
|
|
287
307
|
}
|
|
288
308
|
|
package/src/services/session.ts
CHANGED
|
@@ -59,11 +59,22 @@ export interface SessionIndex {
|
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
/**
|
|
62
|
-
* Generate a new session ID
|
|
63
|
-
*
|
|
62
|
+
* Generate a new session ID with a timestamp prefix for sortability
|
|
63
|
+
* Format: {YYYYMMDDHHmmss}-{8hex} (e.g. 20260527143025-a1b2c3d4)
|
|
64
|
+
* @returns Timestamp-prefixed session ID string
|
|
64
65
|
*/
|
|
65
66
|
export function generateSessionId(): string {
|
|
66
|
-
|
|
67
|
+
const now = new Date();
|
|
68
|
+
const ts = [
|
|
69
|
+
now.getFullYear(),
|
|
70
|
+
String(now.getMonth() + 1).padStart(2, "0"),
|
|
71
|
+
String(now.getDate()).padStart(2, "0"),
|
|
72
|
+
String(now.getHours()).padStart(2, "0"),
|
|
73
|
+
String(now.getMinutes()).padStart(2, "0"),
|
|
74
|
+
String(now.getSeconds()).padStart(2, "0"),
|
|
75
|
+
].join("");
|
|
76
|
+
const shortId = randomUUID().slice(0, 8);
|
|
77
|
+
return `${ts}-${shortId}`;
|
|
67
78
|
}
|
|
68
79
|
|
|
69
80
|
/**
|
|
@@ -472,15 +483,17 @@ export async function listSessionsFromJsonl(
|
|
|
472
483
|
try {
|
|
473
484
|
const filePath = join(projectDir.encodedPath, file);
|
|
474
485
|
|
|
475
|
-
// Validate main session filename format (UUID
|
|
486
|
+
// Validate main session filename format (new timestamp format or legacy UUID)
|
|
487
|
+
const newFormatMatch = file.match(/^(\d{14}-[0-9a-f]{8})\.jsonl$/);
|
|
476
488
|
const uuidMatch = file.match(
|
|
477
489
|
/^([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\.jsonl$/,
|
|
478
490
|
);
|
|
479
|
-
|
|
491
|
+
const match = newFormatMatch || uuidMatch;
|
|
492
|
+
if (!match) {
|
|
480
493
|
continue; // Skip invalid filenames
|
|
481
494
|
}
|
|
482
495
|
|
|
483
|
-
const sessionId =
|
|
496
|
+
const sessionId = match[1];
|
|
484
497
|
|
|
485
498
|
// PERFORMANCE OPTIMIZATION: Only read the last message for timestamps and tokens
|
|
486
499
|
const jsonlHandler = new JsonlHandler();
|
|
@@ -667,17 +680,24 @@ export async function cleanupExpiredSessionsFromJsonl(
|
|
|
667
680
|
);
|
|
668
681
|
const indexContent = await fs.readFile(indexPath, "utf8");
|
|
669
682
|
const index = JSON.parse(indexContent) as SessionIndex;
|
|
683
|
+
// New timestamp-prefixed format patterns
|
|
684
|
+
const newMainMatch = file.match(/^(\d{14}-[0-9a-f]{8})\.jsonl$/);
|
|
685
|
+
const newSubagentMatch = file.match(
|
|
686
|
+
/^subagent-(\d{14}-[0-9a-f]{8})\.jsonl$/,
|
|
687
|
+
);
|
|
688
|
+
// Old UUID format patterns (backward compat)
|
|
670
689
|
const uuidMatch = file.match(
|
|
671
|
-
/^([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\.jsonl$/,
|
|
690
|
+
/^([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\.jsonl$/,
|
|
672
691
|
);
|
|
673
692
|
const subagentMatch = file.match(
|
|
674
|
-
/^subagent-([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\.jsonl$/,
|
|
693
|
+
/^subagent-([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\.jsonl$/,
|
|
675
694
|
);
|
|
676
|
-
const sessionId =
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
695
|
+
const sessionId =
|
|
696
|
+
newMainMatch?.[1] ??
|
|
697
|
+
newSubagentMatch?.[1] ??
|
|
698
|
+
uuidMatch?.[1] ??
|
|
699
|
+
subagentMatch?.[1] ??
|
|
700
|
+
null;
|
|
681
701
|
|
|
682
702
|
if (sessionId && index.sessions[sessionId]) {
|
|
683
703
|
delete index.sessions[sessionId];
|
package/src/tools/agentTool.ts
CHANGED
|
@@ -246,7 +246,7 @@ When using the Agent tool, you must specify a subagent_type parameter to select
|
|
|
246
246
|
resolve({
|
|
247
247
|
success: true,
|
|
248
248
|
content: backgroundMsg,
|
|
249
|
-
shortResult: `Agent started in background: ${result}`,
|
|
249
|
+
shortResult: `Agent started in background: ${result}${outputPath ? ` → ${outputPath}` : ""}`,
|
|
250
250
|
});
|
|
251
251
|
return;
|
|
252
252
|
}
|
package/src/tools/bashTool.ts
CHANGED
|
@@ -208,7 +208,7 @@ The working directory persists between commands. Try to maintain your current wo
|
|
|
208
208
|
return {
|
|
209
209
|
success: true,
|
|
210
210
|
content: backgroundMsg,
|
|
211
|
-
shortResult: `Background process ${taskId} started`,
|
|
211
|
+
shortResult: `Background process ${taskId} started${outputPath ? ` → ${outputPath}` : ""}`,
|
|
212
212
|
};
|
|
213
213
|
}
|
|
214
214
|
|
|
@@ -226,9 +226,7 @@ The working directory persists between commands. Try to maintain your current wo
|
|
|
226
226
|
stdio: "pipe",
|
|
227
227
|
detached: true,
|
|
228
228
|
cwd: context.workdir,
|
|
229
|
-
env: {
|
|
230
|
-
...process.env,
|
|
231
|
-
},
|
|
229
|
+
env: context.env || { ...process.env },
|
|
232
230
|
});
|
|
233
231
|
|
|
234
232
|
let outputBuffer = "";
|
package/src/tools/readTool.ts
CHANGED
|
@@ -145,7 +145,7 @@ Usage:
|
|
|
145
145
|
- The file_path parameter must be an absolute path, not a relative path
|
|
146
146
|
- By default, it reads up to 2000 lines starting from the beginning of the file
|
|
147
147
|
- You can optionally specify a line offset and limit (especially handy for long files), but it's recommended to read the whole file by not providing these parameters
|
|
148
|
-
-
|
|
148
|
+
- If the file content exceeds the token limit, use offset and limit parameters to read specific portions of the file, or use Bash with grep/jq to extract specific content
|
|
149
149
|
- Results are returned using cat -n format, with line numbers starting at 1
|
|
150
150
|
- This tool allows Agent to read images (eg PNG, JPG, etc). When reading an image file the contents are presented visually as Agent is a multimodal LLM.
|
|
151
151
|
- You have the capability to call multiple tools in a single response. It is always better to speculatively read multiple files as a batch that are potentially useful.
|
|
@@ -341,13 +341,31 @@ Usage:
|
|
|
341
341
|
const formattedContent = selectedLines
|
|
342
342
|
.map((line, index) => {
|
|
343
343
|
const lineNumber = startLine + index;
|
|
344
|
-
|
|
345
|
-
const truncatedLine =
|
|
346
|
-
line.length > 2000 ? line.substring(0, 2000) + "..." : line;
|
|
347
|
-
return `${formatLineNumberPrefix(lineNumber)}${truncatedLine}`;
|
|
344
|
+
return `${formatLineNumberPrefix(lineNumber)}${line}`;
|
|
348
345
|
})
|
|
349
346
|
.join("\n");
|
|
350
347
|
|
|
348
|
+
// Token-level validation: estimate tokens and reject if over limit
|
|
349
|
+
const maxTokens = context.fileReadingLimits?.maxTokens ?? 25000; // Default 25000 tokens
|
|
350
|
+
const ext = extname(actualFilePath).toLowerCase().slice(1);
|
|
351
|
+
const bytesPerToken =
|
|
352
|
+
ext === "json" || ext === "jsonl" || ext === "jsonc" ? 2 : 4;
|
|
353
|
+
const estimatedTokens = Math.ceil(
|
|
354
|
+
formattedContent.length / bytesPerToken,
|
|
355
|
+
);
|
|
356
|
+
if (estimatedTokens > maxTokens) {
|
|
357
|
+
return {
|
|
358
|
+
success: false,
|
|
359
|
+
content: "",
|
|
360
|
+
error: `File content (~${estimatedTokens.toLocaleString()} tokens) exceeds maximum allowed tokens (${maxTokens.toLocaleString()}). Use offset and limit parameters to read specific portions of the file, or use Bash with grep/jq to search within it for specific content.`,
|
|
361
|
+
metadata: {
|
|
362
|
+
type: "error_token_limit_exceeded",
|
|
363
|
+
estimatedTokens,
|
|
364
|
+
maxTokens,
|
|
365
|
+
},
|
|
366
|
+
};
|
|
367
|
+
}
|
|
368
|
+
|
|
351
369
|
// Add file information header
|
|
352
370
|
let content = `File: ${filePath}\n`;
|
|
353
371
|
if (startLine > 1 || endLine < totalLines) {
|
package/src/tools/types.ts
CHANGED
|
@@ -111,4 +111,6 @@ export interface ToolContext {
|
|
|
111
111
|
onCwdChange?: (newCwd: string) => void;
|
|
112
112
|
/** Original working directory (before any cd changes) for CWD reset */
|
|
113
113
|
originalWorkdir?: string;
|
|
114
|
+
/** Merged environment variables (process.env + agent env) for child processes */
|
|
115
|
+
env?: Record<string, string>;
|
|
114
116
|
}
|
package/src/types/agent.ts
CHANGED
|
@@ -95,6 +95,8 @@ export interface AgentOptions {
|
|
|
95
95
|
* File-based hooks (from config.json/.waverc.json) merge on top of these.
|
|
96
96
|
*/
|
|
97
97
|
hooks?: PartialHookConfiguration;
|
|
98
|
+
/** Per-agent environment variables, merged on top of process.env for bash, MCP, and hooks */
|
|
99
|
+
env?: Record<string, string>;
|
|
98
100
|
[key: string]: unknown;
|
|
99
101
|
}
|
|
100
102
|
|
|
@@ -81,6 +81,12 @@ export function setupAgentContainer(
|
|
|
81
81
|
container.register("AgentOptions", options);
|
|
82
82
|
container.register("Workdir", workdir);
|
|
83
83
|
|
|
84
|
+
const mergedEnv: Record<string, string> = {
|
|
85
|
+
...(process.env as Record<string, string>),
|
|
86
|
+
...(options.env || {}),
|
|
87
|
+
};
|
|
88
|
+
container.register("MergedEnv", mergedEnv);
|
|
89
|
+
|
|
84
90
|
if (options.worktreeName) {
|
|
85
91
|
container.register("WorktreeName", options.worktreeName);
|
|
86
92
|
container.register("MainRepoRoot", getGitMainRepoRoot(workdir));
|
|
@@ -218,9 +224,7 @@ export function setupAgentContainer(
|
|
|
218
224
|
cwd: workdir,
|
|
219
225
|
toolName: context.toolName,
|
|
220
226
|
toolInput: context.toolInput,
|
|
221
|
-
env:
|
|
222
|
-
Object.entries(process.env).filter((e) => e[1] !== undefined),
|
|
223
|
-
) as Record<string, string>,
|
|
227
|
+
env: mergedEnv,
|
|
224
228
|
});
|
|
225
229
|
|
|
226
230
|
if (results.length > 0) {
|