@kenkaiiii/gg-agent 5.28.0 → 5.29.1

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/index.d.cts CHANGED
@@ -20,6 +20,13 @@ interface AgentTool<T extends z.ZodType = z.ZodType> extends Tool {
20
20
  * batch runs in source order so stateful mutations cannot race each other.
21
21
  */
22
22
  executionMode?: ToolExecutionMode;
23
+ /**
24
+ * Overrides the loop's default per-tool timeout. A tool that owns a longer
25
+ * internal budget than the default must declare it here, or the loop cancels
26
+ * it first and the tool's own timeout — with its specific, actionable error
27
+ * message — becomes unreachable.
28
+ */
29
+ timeoutMs?: number;
23
30
  execute: (args: z.infer<T>, context: ToolContext) => ToolExecuteResult | Promise<ToolExecuteResult>;
24
31
  }
25
32
  interface AgentTextDeltaEvent {
@@ -70,6 +77,21 @@ interface AgentTurnEndEvent {
70
77
  usage: Usage;
71
78
  timing: AgentTurnTiming;
72
79
  }
80
+ /**
81
+ * A safe point between steps: the assistant message and every tool result for
82
+ * this turn are now in the message array, and no provider call is in flight.
83
+ *
84
+ * Hosts that persist a transcript flush here. Without it a crash mid-run loses
85
+ * the WHOLE turn — including tool results whose side effects already landed on
86
+ * disk — because the only flush happens after the loop returns.
87
+ *
88
+ * Yielded immediately after tool results are appended, so it pairs with
89
+ * `turn_end` (which covers the assistant half) to cover every message.
90
+ */
91
+ interface AgentCheckpointEvent {
92
+ type: "checkpoint";
93
+ turn: number;
94
+ }
73
95
  interface AgentDoneEvent {
74
96
  type: "agent_done";
75
97
  totalTurns: number;
@@ -163,7 +185,7 @@ interface AgentFollowUpMessageEvent {
163
185
  type: "follow_up_message";
164
186
  content: Message["content"];
165
187
  }
166
- type AgentEvent = AgentTextDeltaEvent | AgentThinkingDeltaEvent | AgentToolCallStartEvent | AgentToolCallUpdateEvent | AgentToolCallEndEvent | AgentToolCallDeltaEvent | AgentServerToolCallEvent | AgentServerToolResultEvent | AgentSteeringMessageEvent | AgentFollowUpMessageEvent | AgentRetryEvent | AgentTurnEndEvent | AgentDoneEvent | AgentMaxTurnsEvent | AgentTurnBudgetExtendedEvent | AgentTruncatedEvent | AgentErrorEvent;
188
+ type AgentEvent = AgentTextDeltaEvent | AgentThinkingDeltaEvent | AgentToolCallStartEvent | AgentToolCallUpdateEvent | AgentToolCallEndEvent | AgentToolCallDeltaEvent | AgentServerToolCallEvent | AgentServerToolResultEvent | AgentSteeringMessageEvent | AgentFollowUpMessageEvent | AgentRetryEvent | AgentTurnEndEvent | AgentCheckpointEvent | AgentDoneEvent | AgentMaxTurnsEvent | AgentTurnBudgetExtendedEvent | AgentTruncatedEvent | AgentErrorEvent;
167
189
  interface TransformContextOptions {
168
190
  /** Force a transform after the provider reports context overflow. */
169
191
  force?: boolean;
package/dist/index.d.ts CHANGED
@@ -20,6 +20,13 @@ interface AgentTool<T extends z.ZodType = z.ZodType> extends Tool {
20
20
  * batch runs in source order so stateful mutations cannot race each other.
21
21
  */
22
22
  executionMode?: ToolExecutionMode;
23
+ /**
24
+ * Overrides the loop's default per-tool timeout. A tool that owns a longer
25
+ * internal budget than the default must declare it here, or the loop cancels
26
+ * it first and the tool's own timeout — with its specific, actionable error
27
+ * message — becomes unreachable.
28
+ */
29
+ timeoutMs?: number;
23
30
  execute: (args: z.infer<T>, context: ToolContext) => ToolExecuteResult | Promise<ToolExecuteResult>;
24
31
  }
25
32
  interface AgentTextDeltaEvent {
@@ -70,6 +77,21 @@ interface AgentTurnEndEvent {
70
77
  usage: Usage;
71
78
  timing: AgentTurnTiming;
72
79
  }
80
+ /**
81
+ * A safe point between steps: the assistant message and every tool result for
82
+ * this turn are now in the message array, and no provider call is in flight.
83
+ *
84
+ * Hosts that persist a transcript flush here. Without it a crash mid-run loses
85
+ * the WHOLE turn — including tool results whose side effects already landed on
86
+ * disk — because the only flush happens after the loop returns.
87
+ *
88
+ * Yielded immediately after tool results are appended, so it pairs with
89
+ * `turn_end` (which covers the assistant half) to cover every message.
90
+ */
91
+ interface AgentCheckpointEvent {
92
+ type: "checkpoint";
93
+ turn: number;
94
+ }
73
95
  interface AgentDoneEvent {
74
96
  type: "agent_done";
75
97
  totalTurns: number;
@@ -163,7 +185,7 @@ interface AgentFollowUpMessageEvent {
163
185
  type: "follow_up_message";
164
186
  content: Message["content"];
165
187
  }
166
- type AgentEvent = AgentTextDeltaEvent | AgentThinkingDeltaEvent | AgentToolCallStartEvent | AgentToolCallUpdateEvent | AgentToolCallEndEvent | AgentToolCallDeltaEvent | AgentServerToolCallEvent | AgentServerToolResultEvent | AgentSteeringMessageEvent | AgentFollowUpMessageEvent | AgentRetryEvent | AgentTurnEndEvent | AgentDoneEvent | AgentMaxTurnsEvent | AgentTurnBudgetExtendedEvent | AgentTruncatedEvent | AgentErrorEvent;
188
+ type AgentEvent = AgentTextDeltaEvent | AgentThinkingDeltaEvent | AgentToolCallStartEvent | AgentToolCallUpdateEvent | AgentToolCallEndEvent | AgentToolCallDeltaEvent | AgentServerToolCallEvent | AgentServerToolResultEvent | AgentSteeringMessageEvent | AgentFollowUpMessageEvent | AgentRetryEvent | AgentTurnEndEvent | AgentCheckpointEvent | AgentDoneEvent | AgentMaxTurnsEvent | AgentTurnBudgetExtendedEvent | AgentTruncatedEvent | AgentErrorEvent;
167
189
  interface TransformContextOptions {
168
190
  /** Force a transform after the provider reports context overflow. */
169
191
  force?: boolean;
package/dist/index.js CHANGED
@@ -35,6 +35,7 @@ function isLocalBackendUrl(baseUrl) {
35
35
 
36
36
  // src/agent-loop.ts
37
37
  var DEFAULT_MAX_TURNS = 300;
38
+ var DEFAULT_TOOL_TIMEOUT_MS = 3e5;
38
39
  var _diagFn = null;
39
40
  function setStreamDiagnostic(fn) {
40
41
  _diagFn = fn;
@@ -950,6 +951,7 @@ async function* agentLoop(messages, options) {
950
951
  );
951
952
  const executionResult = hasSequentialToolCall ? yield* executeToolCallsMixed(toolCalls, toolResults, executionOptions) : yield* executeToolCallsParallel(toolCalls, toolResults, executionOptions);
952
953
  messages.push({ role: "tool", content: executionResult.toolResults });
954
+ yield { type: "checkpoint", turn };
953
955
  const toolsAborted = executionResult.aborted;
954
956
  if (fatalToolArgumentError) {
955
957
  if (fatalToolArgumentRecoverable && !toolArgumentAutoContinueUsed) {
@@ -1080,7 +1082,7 @@ async function executeSingleToolCall(toolCall, options, pushEvent) {
1080
1082
  try {
1081
1083
  const parsed = tool.parameters.parse(toolCall.args);
1082
1084
  const callerSignal = options.signal;
1083
- const toolTimeout = AbortSignal.timeout(3e5);
1085
+ const toolTimeout = AbortSignal.timeout(tool.timeoutMs ?? DEFAULT_TOOL_TIMEOUT_MS);
1084
1086
  const ctx = {
1085
1087
  signal: callerSignal ? AbortSignal.any([callerSignal, toolTimeout]) : toolTimeout,
1086
1088
  toolCallId: toolCall.id,