@google/gemini-cli-core 0.7.1 → 0.8.0-nightly.20250926.2defdcff

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.
Files changed (162) hide show
  1. package/README.md +10 -4
  2. package/dist/index.d.ts +3 -2
  3. package/dist/index.js +3 -2
  4. package/dist/index.js.map +1 -1
  5. package/dist/src/config/config.d.ts +7 -0
  6. package/dist/src/config/config.js +29 -1
  7. package/dist/src/config/config.js.map +1 -1
  8. package/dist/src/core/baseLlmClient.d.ts +4 -0
  9. package/dist/src/core/baseLlmClient.js +5 -2
  10. package/dist/src/core/baseLlmClient.js.map +1 -1
  11. package/dist/src/core/baseLlmClient.test.js +23 -0
  12. package/dist/src/core/baseLlmClient.test.js.map +1 -1
  13. package/dist/src/core/client.js +1 -2
  14. package/dist/src/core/client.js.map +1 -1
  15. package/dist/src/core/client.test.js +0 -39
  16. package/dist/src/core/client.test.js.map +1 -1
  17. package/dist/src/core/coreToolScheduler.js +12 -3
  18. package/dist/src/core/coreToolScheduler.js.map +1 -1
  19. package/dist/src/core/coreToolScheduler.test.js +99 -0
  20. package/dist/src/core/coreToolScheduler.test.js.map +1 -1
  21. package/dist/src/core/geminiChat.d.ts +4 -3
  22. package/dist/src/core/geminiChat.js +50 -56
  23. package/dist/src/core/geminiChat.js.map +1 -1
  24. package/dist/src/core/geminiChat.test.js +217 -27
  25. package/dist/src/core/geminiChat.test.js.map +1 -1
  26. package/dist/src/core/prompts.js +3 -2
  27. package/dist/src/core/prompts.js.map +1 -1
  28. package/dist/src/core/turn.d.ts +1 -4
  29. package/dist/src/core/turn.js +2 -12
  30. package/dist/src/core/turn.js.map +1 -1
  31. package/dist/src/generated/git-commit.d.ts +2 -2
  32. package/dist/src/generated/git-commit.js +2 -2
  33. package/dist/src/generated/git-commit.js.map +1 -1
  34. package/dist/src/ide/detect-ide.d.ts +4 -2
  35. package/dist/src/ide/detect-ide.js +7 -1
  36. package/dist/src/ide/detect-ide.js.map +1 -1
  37. package/dist/src/ide/detect-ide.test.js +23 -0
  38. package/dist/src/ide/detect-ide.test.js.map +1 -1
  39. package/dist/src/ide/ide-client.d.ts +2 -1
  40. package/dist/src/ide/ide-client.js +22 -17
  41. package/dist/src/ide/ide-client.js.map +1 -1
  42. package/dist/src/ide/ide-client.test.js +2 -2
  43. package/dist/src/ide/ide-client.test.js.map +1 -1
  44. package/dist/src/index.d.ts +2 -0
  45. package/dist/src/index.js +2 -0
  46. package/dist/src/index.js.map +1 -1
  47. package/dist/src/mcp/oauth-provider.d.ts +1 -0
  48. package/dist/src/mcp/oauth-provider.js +19 -14
  49. package/dist/src/mcp/oauth-provider.js.map +1 -1
  50. package/dist/src/mcp/oauth-provider.test.js +137 -1
  51. package/dist/src/mcp/oauth-provider.test.js.map +1 -1
  52. package/dist/src/mcp/oauth-utils.js +1 -0
  53. package/dist/src/mcp/oauth-utils.js.map +1 -1
  54. package/dist/src/routing/strategies/compositeStrategy.js +4 -3
  55. package/dist/src/routing/strategies/compositeStrategy.js.map +1 -1
  56. package/dist/src/services/chatRecordingService.d.ts +1 -1
  57. package/dist/src/services/chatRecordingService.js +1 -1
  58. package/dist/src/services/chatRecordingService.js.map +1 -1
  59. package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +6 -2
  60. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +38 -0
  61. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  62. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.d.ts +1 -0
  63. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +128 -1
  64. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
  65. package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +7 -1
  66. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +12 -0
  67. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
  68. package/dist/src/telemetry/config.d.ts +31 -0
  69. package/dist/src/telemetry/config.js +76 -0
  70. package/dist/src/telemetry/config.js.map +1 -0
  71. package/dist/src/telemetry/config.test.d.ts +6 -0
  72. package/dist/src/telemetry/config.test.js +124 -0
  73. package/dist/src/telemetry/config.test.js.map +1 -0
  74. package/dist/src/telemetry/constants.d.ts +18 -0
  75. package/dist/src/telemetry/constants.js +20 -0
  76. package/dist/src/telemetry/constants.js.map +1 -1
  77. package/dist/src/telemetry/index.d.ts +3 -1
  78. package/dist/src/telemetry/index.js +9 -1
  79. package/dist/src/telemetry/index.js.map +1 -1
  80. package/dist/src/telemetry/loggers.d.ts +3 -1
  81. package/dist/src/telemetry/loggers.js +36 -2
  82. package/dist/src/telemetry/loggers.js.map +1 -1
  83. package/dist/src/telemetry/loggers.test.js +31 -3
  84. package/dist/src/telemetry/loggers.test.js.map +1 -1
  85. package/dist/src/telemetry/metrics.d.ts +40 -1
  86. package/dist/src/telemetry/metrics.js +248 -2
  87. package/dist/src/telemetry/metrics.js.map +1 -1
  88. package/dist/src/telemetry/metrics.test.js +387 -1
  89. package/dist/src/telemetry/metrics.test.js.map +1 -1
  90. package/dist/src/telemetry/sdk.js +4 -1
  91. package/dist/src/telemetry/sdk.js.map +1 -1
  92. package/dist/src/telemetry/sdk.test.js +13 -0
  93. package/dist/src/telemetry/sdk.test.js.map +1 -1
  94. package/dist/src/telemetry/types.d.ts +18 -3
  95. package/dist/src/telemetry/types.js +28 -2
  96. package/dist/src/telemetry/types.js.map +1 -1
  97. package/dist/src/tools/edit.js +6 -0
  98. package/dist/src/tools/edit.js.map +1 -1
  99. package/dist/src/tools/edit.test.js +41 -0
  100. package/dist/src/tools/edit.test.js.map +1 -1
  101. package/dist/src/tools/mcp-client.d.ts +2 -12
  102. package/dist/src/tools/mcp-client.js +5 -64
  103. package/dist/src/tools/mcp-client.js.map +1 -1
  104. package/dist/src/tools/mcp-client.test.js +9 -154
  105. package/dist/src/tools/mcp-client.test.js.map +1 -1
  106. package/dist/src/tools/mcp-tool.js +30 -2
  107. package/dist/src/tools/mcp-tool.js.map +1 -1
  108. package/dist/src/tools/mcp-tool.test.js +117 -0
  109. package/dist/src/tools/mcp-tool.test.js.map +1 -1
  110. package/dist/src/tools/message-bus-integration.test.d.ts +6 -0
  111. package/dist/src/tools/message-bus-integration.test.js +183 -0
  112. package/dist/src/tools/message-bus-integration.test.js.map +1 -0
  113. package/dist/src/tools/ripGrep.js +1 -1
  114. package/dist/src/tools/ripGrep.js.map +1 -1
  115. package/dist/src/tools/ripGrep.test.js +2 -2
  116. package/dist/src/tools/ripGrep.test.js.map +1 -1
  117. package/dist/src/tools/shell.js +54 -1
  118. package/dist/src/tools/shell.js.map +1 -1
  119. package/dist/src/tools/shell.test.js +1 -0
  120. package/dist/src/tools/shell.test.js.map +1 -1
  121. package/dist/src/tools/smart-edit.js +8 -2
  122. package/dist/src/tools/smart-edit.js.map +1 -1
  123. package/dist/src/tools/smart-edit.test.js +47 -2
  124. package/dist/src/tools/smart-edit.test.js.map +1 -1
  125. package/dist/src/tools/tool-error.d.ts +1 -0
  126. package/dist/src/tools/tool-error.js +1 -0
  127. package/dist/src/tools/tool-error.js.map +1 -1
  128. package/dist/src/tools/tools.d.ts +11 -3
  129. package/dist/src/tools/tools.js +94 -3
  130. package/dist/src/tools/tools.js.map +1 -1
  131. package/dist/src/tools/write-todos.d.ts +25 -0
  132. package/dist/src/tools/write-todos.js +150 -0
  133. package/dist/src/tools/write-todos.js.map +1 -0
  134. package/dist/src/tools/write-todos.test.d.ts +6 -0
  135. package/dist/src/tools/write-todos.test.js +89 -0
  136. package/dist/src/tools/write-todos.test.js.map +1 -0
  137. package/dist/src/utils/llm-edit-fixer.js +1 -0
  138. package/dist/src/utils/llm-edit-fixer.js.map +1 -1
  139. package/dist/src/utils/retry.js +7 -1
  140. package/dist/src/utils/retry.js.map +1 -1
  141. package/dist/src/utils/retry.test.js +29 -0
  142. package/dist/src/utils/retry.test.js.map +1 -1
  143. package/dist/src/utils/schemaValidator.js +11 -1
  144. package/dist/src/utils/schemaValidator.js.map +1 -1
  145. package/dist/src/utils/schemaValidator.test.d.ts +6 -0
  146. package/dist/src/utils/schemaValidator.test.js +113 -0
  147. package/dist/src/utils/schemaValidator.test.js.map +1 -0
  148. package/dist/src/utils/shell-utils.d.ts +1 -0
  149. package/dist/src/utils/shell-utils.js +1 -1
  150. package/dist/src/utils/shell-utils.js.map +1 -1
  151. package/dist/src/utils/thoughtUtils.d.ts +21 -0
  152. package/dist/src/utils/thoughtUtils.js +39 -0
  153. package/dist/src/utils/thoughtUtils.js.map +1 -0
  154. package/dist/src/utils/thoughtUtils.test.d.ts +6 -0
  155. package/dist/src/utils/thoughtUtils.test.js +78 -0
  156. package/dist/src/utils/thoughtUtils.test.js.map +1 -0
  157. package/dist/src/utils/tool-utils.js +2 -2
  158. package/dist/src/utils/tool-utils.js.map +1 -1
  159. package/dist/src/utils/tool-utils.test.js +8 -0
  160. package/dist/src/utils/tool-utils.test.js.map +1 -1
  161. package/dist/tsconfig.tsbuildinfo +1 -1
  162. package/package.json +3 -3
@@ -5,20 +5,109 @@
5
5
  */
6
6
  import { ToolErrorType } from './tool-error.js';
7
7
  import { SchemaValidator } from '../utils/schemaValidator.js';
8
+ import { randomUUID } from 'node:crypto';
9
+ import { MessageBusType, } from '../confirmation-bus/types.js';
8
10
  /**
9
11
  * A convenience base class for ToolInvocation.
10
12
  */
11
13
  export class BaseToolInvocation {
12
14
  params;
13
- constructor(params) {
15
+ messageBus;
16
+ constructor(params, messageBus) {
14
17
  this.params = params;
18
+ this.messageBus = messageBus;
19
+ if (this.messageBus) {
20
+ console.log(`[DEBUG] Tool ${this.constructor.name} created with messageBus: YES`);
21
+ }
15
22
  }
16
23
  toolLocations() {
17
24
  return [];
18
25
  }
19
26
  shouldConfirmExecute(_abortSignal) {
27
+ // If message bus is available, use it for confirmation
28
+ if (this.messageBus) {
29
+ console.log(`[DEBUG] Using message bus for tool confirmation: ${this.constructor.name}`);
30
+ return this.handleMessageBusConfirmation(_abortSignal);
31
+ }
32
+ // Fall back to existing confirmation flow
20
33
  return Promise.resolve(false);
21
34
  }
35
+ /**
36
+ * Handle tool confirmation using the message bus.
37
+ * This method publishes a confirmation request and waits for the response.
38
+ */
39
+ async handleMessageBusConfirmation(abortSignal) {
40
+ if (!this.messageBus) {
41
+ return false;
42
+ }
43
+ const correlationId = randomUUID();
44
+ const toolCall = {
45
+ name: this.constructor.name,
46
+ args: this.params,
47
+ };
48
+ return new Promise((resolve, reject) => {
49
+ if (!this.messageBus) {
50
+ resolve(false);
51
+ return;
52
+ }
53
+ let timeoutId;
54
+ // Centralized cleanup function
55
+ const cleanup = () => {
56
+ if (timeoutId) {
57
+ clearTimeout(timeoutId);
58
+ timeoutId = undefined;
59
+ }
60
+ abortSignal.removeEventListener('abort', abortHandler);
61
+ this.messageBus?.unsubscribe(MessageBusType.TOOL_CONFIRMATION_RESPONSE, responseHandler);
62
+ };
63
+ // Set up abort handler
64
+ const abortHandler = () => {
65
+ cleanup();
66
+ reject(new Error('Tool confirmation aborted'));
67
+ };
68
+ // Check if already aborted
69
+ if (abortSignal.aborted) {
70
+ reject(new Error('Tool confirmation aborted'));
71
+ return;
72
+ }
73
+ // Set up response handler
74
+ const responseHandler = (response) => {
75
+ if (response.correlationId === correlationId) {
76
+ cleanup();
77
+ if (response.confirmed) {
78
+ // Tool was confirmed, return false to indicate no further confirmation needed
79
+ resolve(false);
80
+ }
81
+ else {
82
+ // Tool was denied, reject to prevent execution
83
+ reject(new Error('Tool execution denied by policy'));
84
+ }
85
+ }
86
+ };
87
+ // Add event listener for abort signal
88
+ abortSignal.addEventListener('abort', abortHandler);
89
+ // Set up timeout
90
+ timeoutId = setTimeout(() => {
91
+ cleanup();
92
+ resolve(false);
93
+ }, 30000); // 30 second timeout
94
+ // Subscribe to response
95
+ this.messageBus.subscribe(MessageBusType.TOOL_CONFIRMATION_RESPONSE, responseHandler);
96
+ // Publish confirmation request
97
+ const request = {
98
+ type: MessageBusType.TOOL_CONFIRMATION_REQUEST,
99
+ toolCall,
100
+ correlationId,
101
+ };
102
+ try {
103
+ this.messageBus.publish(request);
104
+ }
105
+ catch (_error) {
106
+ cleanup();
107
+ resolve(false);
108
+ }
109
+ });
110
+ }
22
111
  }
23
112
  /**
24
113
  * New base class for tools that separates validation from execution.
@@ -32,7 +121,8 @@ export class DeclarativeTool {
32
121
  parameterSchema;
33
122
  isOutputMarkdown;
34
123
  canUpdateOutput;
35
- constructor(name, displayName, description, kind, parameterSchema, isOutputMarkdown = true, canUpdateOutput = false) {
124
+ messageBus;
125
+ constructor(name, displayName, description, kind, parameterSchema, isOutputMarkdown = true, canUpdateOutput = false, messageBus) {
36
126
  this.name = name;
37
127
  this.displayName = displayName;
38
128
  this.description = description;
@@ -40,6 +130,7 @@ export class DeclarativeTool {
40
130
  this.parameterSchema = parameterSchema;
41
131
  this.isOutputMarkdown = isOutputMarkdown;
42
132
  this.canUpdateOutput = canUpdateOutput;
133
+ this.messageBus = messageBus;
43
134
  }
44
135
  get schema() {
45
136
  return {
@@ -135,7 +226,7 @@ export class BaseDeclarativeTool extends DeclarativeTool {
135
226
  if (validationError) {
136
227
  throw new Error(validationError);
137
228
  }
138
- return this.createInvocation(params);
229
+ return this.createInvocation(params, this.messageBus);
139
230
  }
140
231
  validateToolParams(params) {
141
232
  const errors = SchemaValidator.validate(this.schema.parametersJsonSchema, params);
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/tools/tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/tools/tools.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAG9D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,cAAc,GAGf,MAAM,8BAA8B,CAAC;AAiDtC;;GAEG;AACH,MAAM,OAAgB,kBAAkB;IAM3B;IACU;IAFrB,YACW,MAAe,EACL,UAAuB;QADjC,WAAM,GAAN,MAAM,CAAS;QACL,eAAU,GAAV,UAAU,CAAa;QAE1C,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CACT,gBAAgB,IAAI,CAAC,WAAW,CAAC,IAAI,+BAA+B,CACrE,CAAC;QACJ,CAAC;IACH,CAAC;IAID,aAAa;QACX,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,oBAAoB,CAClB,YAAyB;QAEzB,uDAAuD;QACvD,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CACT,oDAAoD,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAC5E,CAAC;YACF,OAAO,IAAI,CAAC,4BAA4B,CAAC,YAAY,CAAC,CAAC;QACzD,CAAC;QAED,0CAA0C;QAC1C,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAED;;;OAGG;IACO,KAAK,CAAC,4BAA4B,CAC1C,WAAwB;QAExB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,aAAa,GAAG,UAAU,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG;YACf,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI;YAC3B,IAAI,EAAE,IAAI,CAAC,MAAiC;SAC7C,CAAC;QAEF,OAAO,IAAI,OAAO,CAChB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAClB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;gBACrB,OAAO,CAAC,KAAK,CAAC,CAAC;gBACf,OAAO;YACT,CAAC;YAED,IAAI,SAAqC,CAAC;YAE1C,+BAA+B;YAC/B,MAAM,OAAO,GAAG,GAAG,EAAE;gBACnB,IAAI,SAAS,EAAE,CAAC;oBACd,YAAY,CAAC,SAAS,CAAC,CAAC;oBACxB,SAAS,GAAG,SAAS,CAAC;gBACxB,CAAC;gBACD,WAAW,CAAC,mBAAmB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;gBACvD,IAAI,CAAC,UAAU,EAAE,WAAW,CAC1B,cAAc,CAAC,0BAA0B,EACzC,eAAe,CAChB,CAAC;YACJ,CAAC,CAAC;YAEF,uBAAuB;YACvB,MAAM,YAAY,GAAG,GAAG,EAAE;gBACxB,OAAO,EAAE,CAAC;gBACV,MAAM,CAAC,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAC;YACjD,CAAC,CAAC;YAEF,2BAA2B;YAC3B,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;gBACxB,MAAM,CAAC,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAC;gBAC/C,OAAO;YACT,CAAC;YAED,0BAA0B;YAC1B,MAAM,eAAe,GAAG,CAAC,QAAkC,EAAE,EAAE;gBAC7D,IAAI,QAAQ,CAAC,aAAa,KAAK,aAAa,EAAE,CAAC;oBAC7C,OAAO,EAAE,CAAC;oBAEV,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;wBACvB,8EAA8E;wBAC9E,OAAO,CAAC,KAAK,CAAC,CAAC;oBACjB,CAAC;yBAAM,CAAC;wBACN,+CAA+C;wBAC/C,MAAM,CAAC,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC;oBACvD,CAAC;gBACH,CAAC;YACH,CAAC,CAAC;YAEF,sCAAsC;YACtC,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YAEpD,iBAAiB;YACjB,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC1B,OAAO,EAAE,CAAC;gBACV,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,oBAAoB;YAE/B,wBAAwB;YACxB,IAAI,CAAC,UAAU,CAAC,SAAS,CACvB,cAAc,CAAC,0BAA0B,EACzC,eAAe,CAChB,CAAC;YAEF,+BAA+B;YAC/B,MAAM,OAAO,GAA4B;gBACvC,IAAI,EAAE,cAAc,CAAC,yBAAyB;gBAC9C,QAAQ;gBACR,aAAa;aACd,CAAC;YAEF,IAAI,CAAC;gBACH,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACnC,CAAC;YAAC,OAAO,MAAM,EAAE,CAAC;gBAChB,OAAO,EAAE,CAAC;gBACV,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC;QACH,CAAC,CACF,CAAC;IACJ,CAAC;CAOF;AAyDD;;;GAGG;AACH,MAAM,OAAgB,eAAe;IAMxB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IARX,YACW,IAAY,EACZ,WAAmB,EACnB,WAAmB,EACnB,IAAU,EACV,eAAwB,EACxB,mBAA4B,IAAI,EAChC,kBAA2B,KAAK,EAChC,UAAuB;QAPvB,SAAI,GAAJ,IAAI,CAAQ;QACZ,gBAAW,GAAX,WAAW,CAAQ;QACnB,gBAAW,GAAX,WAAW,CAAQ;QACnB,SAAI,GAAJ,IAAI,CAAM;QACV,oBAAe,GAAf,eAAe,CAAS;QACxB,qBAAgB,GAAhB,gBAAgB,CAAgB;QAChC,oBAAe,GAAf,eAAe,CAAiB;QAChC,eAAU,GAAV,UAAU,CAAa;IAC/B,CAAC;IAEJ,IAAI,MAAM;QACR,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,oBAAoB,EAAE,IAAI,CAAC,eAAe;SAC3C,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACH,kBAAkB,CAAC,OAAgB;QACjC,qDAAqD;QACrD,OAAO,IAAI,CAAC;IACd,CAAC;IAWD;;;;;;;OAOG;IACH,KAAK,CAAC,eAAe,CACnB,MAAe,EACf,MAAmB,EACnB,YAAoD,EACpD,oBAA2C;QAE3C,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACtC,OAAO,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,YAAY,EAAE,oBAAoB,CAAC,CAAC;IACxE,CAAC;IAED;;;;OAIG;IACK,WAAW,CACjB,MAAe;QAEf,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,YAAY,KAAK,EAAE,CAAC;gBACvB,OAAO,CAAC,CAAC;YACX,CAAC;YACD,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,uBAAuB,CAC3B,MAAe,EACf,WAAwB;QAExB,MAAM,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACnD,IAAI,iBAAiB,YAAY,KAAK,EAAE,CAAC;YACvC,MAAM,YAAY,GAAG,iBAAiB,CAAC,OAAO,CAAC;YAC/C,OAAO;gBACL,UAAU,EAAE,+CAA+C,YAAY,EAAE;gBACzE,aAAa,EAAE,YAAY;gBAC3B,KAAK,EAAE;oBACL,OAAO,EAAE,YAAY;oBACrB,IAAI,EAAE,aAAa,CAAC,mBAAmB;iBACxC;aACF,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,OAAO,MAAM,iBAAiB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAChB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACzD,OAAO;gBACL,UAAU,EAAE,8CAA8C,YAAY,EAAE;gBACxE,aAAa,EAAE,YAAY;gBAC3B,KAAK,EAAE;oBACL,OAAO,EAAE,YAAY;oBACrB,IAAI,EAAE,aAAa,CAAC,gBAAgB;iBACrC;aACF,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,OAAgB,mBAGpB,SAAQ,eAAiC;IACzC,KAAK,CAAC,MAAe;QACnB,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACxD,IAAI,eAAe,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACxD,CAAC;IAEQ,kBAAkB,CAAC,MAAe;QACzC,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,CACrC,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAChC,MAAM,CACP,CAAC;QAEF,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,OAAO,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;IAES,uBAAuB,CAAC,OAAgB;QAChD,qDAAqD;QACrD,OAAO,IAAI,CAAC;IACd,CAAC;CAMF;AAOD;;;;GAIG;AACH,MAAM,UAAU,MAAM,CAAC,GAAY;IACjC,OAAO,CACL,OAAO,GAAG,KAAK,QAAQ;QACvB,GAAG,KAAK,IAAI;QACZ,MAAM,IAAI,GAAG;QACb,OAAO,IAAI,GAAG;QACd,OAAQ,GAA0B,CAAC,KAAK,KAAK,UAAU,CACxD,CAAC;AACJ,CAAC;AA2BD;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,SAAS,UAAU,CAAC,GAAW;QAC7B,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,OAAO,GAAY,MAAM,CAAC;QAC9B,KAAK,MAAM,OAAO,IAAI,IAAI,EAAE,CAAC;YAC3B,IACE,OAAO,OAAO,KAAK,QAAQ;gBAC3B,OAAO,KAAK,IAAI;gBAChB,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,EACvD,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,GAAI,OAAmC,CAAC,OAAO,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,OAAiB,CAAC;IAC3B,CAAC;IAED,SAAS,QAAQ,CACf,IAAa,EACb,WAAwB,EACxB,QAAqB;QAErB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAC9C,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;gBACxB,IAAI,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,CAAC;oBAC1C,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,MAAM,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACpD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;YACtB,IAAI,GAAG,KAAK,IAAI,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtC,wCAAwC;gBACxC,OAAO,IAAI,CAAC,CAAC,kBAAkB;YACjC,CAAC;YACD,IAAI,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzB,OAAO,KAAK,CAAC,CAAC,+CAA+C;YAC/D,CAAC;YAED,MAAM,YAAY,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,YAAY,EAAE,CAAC;gBACjB,8CAA8C;gBAC9C,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACrB,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAClB,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;gBAC/D,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,mCAAmC;gBACzD,OAAO,QAAQ,CAAC;YAClB,CAAC;QACH,CAAC;QAED,mCAAmC;QACnC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;gBACpD,IACE,QAAQ,CACL,IAAgC,CAAC,GAAG,CAAC,EACtC,WAAW,EACX,QAAQ,CACT,EACD,CAAC;oBACD,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,QAAQ,CAAC,MAAM,EAAE,IAAI,GAAG,EAAU,EAAE,IAAI,GAAG,EAAU,CAAC,CAAC;AAChE,CAAC;AA4ED,MAAM,CAAN,IAAY,uBAOX;AAPD,WAAY,uBAAuB;IACjC,uDAA4B,CAAA;IAC5B,2DAAgC,CAAA;IAChC,wEAA6C,CAAA;IAC7C,oEAAyC,CAAA;IACzC,kEAAuC,CAAA;IACvC,4CAAiB,CAAA;AACnB,CAAC,EAPW,uBAAuB,KAAvB,uBAAuB,QAOlC;AAED,MAAM,CAAN,IAAY,IAUX;AAVD,WAAY,IAAI;IACd,qBAAa,CAAA;IACb,qBAAa,CAAA;IACb,yBAAiB,CAAA;IACjB,qBAAa,CAAA;IACb,yBAAiB,CAAA;IACjB,2BAAmB,CAAA;IACnB,uBAAe,CAAA;IACf,uBAAe,CAAA;IACf,uBAAe,CAAA;AACjB,CAAC,EAVW,IAAI,KAAJ,IAAI,QAUf;AAED,wCAAwC;AACxC,MAAM,CAAC,MAAM,aAAa,GAAW;IACnC,IAAI,CAAC,IAAI;IACT,IAAI,CAAC,MAAM;IACX,IAAI,CAAC,IAAI;IACT,IAAI,CAAC,OAAO;CACJ,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import type { ToolInvocation } from './tools.js';
7
+ import { BaseDeclarativeTool, type ToolResult } from './tools.js';
8
+ export declare const WRITE_TODOS_DESCRIPTION = "This tool can help you list out the current subtasks that are required to be completed for a given user request. The list of subtasks helps you keep track of the current task, organize complex queries and help ensure that you don't miss any steps. With this list, the user can also see the current progress you are making in executing a given task.\n\nDepending on the task complexity, you should first divide a given task into subtasks and then use this tool to list out the subtasks that are required to be completed for a given user request.\nEach of the subtasks should be clear and distinct. \n\nUse this tool for complex queries that require multiple steps. If you find that the request is actually complex after you have started executing the user task, create a todo list and use it. If execution of the user task requires multiple steps, planning and generally is higher complexity than a simple Q&A, use this tool.\n\nDO NOT use this tool for simple tasks that can be completed in less than 2 steps. If the user query is simple and straightforward, do not use the tool. If you can respond with an answer in a single turn then this tool is not required.\n\n## Task state definitions\n\n- pending: Work has not begun on a given subtask.\n- in_progress: Marked just prior to beginning work on a given subtask. You should only have one subtask as in_progress at a time.\n- completed: Subtask was succesfully completed with no errors or issues. If the subtask required more steps to complete, update the todo list with the subtasks. All steps should be identified as completed only when they are completed.\n- cancelled: As you update the todo list, some tasks are not required anymore due to the dynamic nature of the task. In this case, mark the subtasks as cancelled.\n\n\n## Methodology for using this tool\n1. Use this todo list list as soon as you receive a user request based on the complexity of the task.\n2. Keep track of every subtask that you update the list with.\n3. Mark a subtask as in_progress before you begin working on it. You should only have one subtask as in_progress at a time.\n4. Update the subtask list as you proceed in executing the task. The subtask list is not static and should reflect your progress and current plans, which may evolve as you acquire new information.\n5. Mark a subtask as completed when you have completed it.\n6. Mark a subtask as cancelled if the subtask is no longer needed.\n7. You must update the todo list as soon as you start, stop or cancel a subtask. Don't batch or wait to update the todo list.\n\n\n## Examples of When to Use the Todo List\n\n<example>\nUser request: Create a website with a React for creating fancy logos using gemini-2.5-flash-image\n\nToDo list created by the agent:\n1. Initialize a new React project environment (e.g., using Vite).\n2. Design and build the core UI components: a text input (prompt field) for the logo description, selection controls for style parameters (if the API supports them), and an image preview area.\n3. Implement state management (e.g., React Context or Zustand) to manage the user's input prompt, the API loading status (pending, success, error), and the resulting image data.\n4. Create an API service module within the React app (using \"fetch\" or \"axios\") to securely format and send the prompt data via an HTTP POST request to the specified \"gemini-2.5-flash-image\" (Gemini model) endpoint.\n5. Implement asynchronous logic to handle the API call: show a loading indicator while the request is pending, retrieve the generated image (e.g., as a URL or base64 string) upon success, and display any errors.\n6. Display the returned \"fancy logo\" from the API response in the preview area component.\n7. Add functionality (e.g., a \"Download\" button) to allow the user to save the generated image file.\n8. Deploy the application to a web server or hosting platform.\n\n<reasoning>\nThe agent used the todo list to break the task into distinct, manageable steps:\n1. Building an entire interactive web application from scratch is a highly complex, multi-stage process involving setup, UI development, logic integration, and deployment.\n2. The agent inferred the core functionality required for a \"logo creator,\" such as UI controls for customization (Task 3) and an export feature (Task 7), which must be tracked as distinct goals.\n3. The agent rightly inferred the requirement of an API service model for interacting with the image model endpoint.\n</reasoning>\n</example>\n\n\n## Examples of When NOT to Use the Todo List\n\n<example>\nUser request: Ensure that the test <test file> passes.\n\nAgent:\n<Goes into a loop of running the test, identifying errors, and updating the code until the test passes.>\n\n<reasoning>\nThe agent did not use the todo list because this task could be completed by a tight loop of execute test->edit->execute test.\n</reasoning>\n</example>\n";
9
+ export type TodoStatus = 'pending' | 'in_progress' | 'completed' | 'cancelled';
10
+ export interface Todo {
11
+ description: string;
12
+ status: TodoStatus;
13
+ }
14
+ export interface WriteTodosToolParams {
15
+ /**
16
+ * The full list of todos. This will overwrite any existing list.
17
+ */
18
+ todos: Todo[];
19
+ }
20
+ export declare class WriteTodosTool extends BaseDeclarativeTool<WriteTodosToolParams, ToolResult> {
21
+ static readonly Name: string;
22
+ constructor();
23
+ protected validateToolParamValues(params: WriteTodosToolParams): string | null;
24
+ protected createInvocation(params: WriteTodosToolParams): ToolInvocation<WriteTodosToolParams, ToolResult>;
25
+ }
@@ -0,0 +1,150 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { BaseDeclarativeTool, BaseToolInvocation, Kind, } from './tools.js';
7
+ // Insprired by langchain/deepagents.
8
+ export const WRITE_TODOS_DESCRIPTION = `This tool can help you list out the current subtasks that are required to be completed for a given user request. The list of subtasks helps you keep track of the current task, organize complex queries and help ensure that you don't miss any steps. With this list, the user can also see the current progress you are making in executing a given task.
9
+
10
+ Depending on the task complexity, you should first divide a given task into subtasks and then use this tool to list out the subtasks that are required to be completed for a given user request.
11
+ Each of the subtasks should be clear and distinct.
12
+
13
+ Use this tool for complex queries that require multiple steps. If you find that the request is actually complex after you have started executing the user task, create a todo list and use it. If execution of the user task requires multiple steps, planning and generally is higher complexity than a simple Q&A, use this tool.
14
+
15
+ DO NOT use this tool for simple tasks that can be completed in less than 2 steps. If the user query is simple and straightforward, do not use the tool. If you can respond with an answer in a single turn then this tool is not required.
16
+
17
+ ## Task state definitions
18
+
19
+ - pending: Work has not begun on a given subtask.
20
+ - in_progress: Marked just prior to beginning work on a given subtask. You should only have one subtask as in_progress at a time.
21
+ - completed: Subtask was succesfully completed with no errors or issues. If the subtask required more steps to complete, update the todo list with the subtasks. All steps should be identified as completed only when they are completed.
22
+ - cancelled: As you update the todo list, some tasks are not required anymore due to the dynamic nature of the task. In this case, mark the subtasks as cancelled.
23
+
24
+
25
+ ## Methodology for using this tool
26
+ 1. Use this todo list list as soon as you receive a user request based on the complexity of the task.
27
+ 2. Keep track of every subtask that you update the list with.
28
+ 3. Mark a subtask as in_progress before you begin working on it. You should only have one subtask as in_progress at a time.
29
+ 4. Update the subtask list as you proceed in executing the task. The subtask list is not static and should reflect your progress and current plans, which may evolve as you acquire new information.
30
+ 5. Mark a subtask as completed when you have completed it.
31
+ 6. Mark a subtask as cancelled if the subtask is no longer needed.
32
+ 7. You must update the todo list as soon as you start, stop or cancel a subtask. Don't batch or wait to update the todo list.
33
+
34
+
35
+ ## Examples of When to Use the Todo List
36
+
37
+ <example>
38
+ User request: Create a website with a React for creating fancy logos using gemini-2.5-flash-image
39
+
40
+ ToDo list created by the agent:
41
+ 1. Initialize a new React project environment (e.g., using Vite).
42
+ 2. Design and build the core UI components: a text input (prompt field) for the logo description, selection controls for style parameters (if the API supports them), and an image preview area.
43
+ 3. Implement state management (e.g., React Context or Zustand) to manage the user's input prompt, the API loading status (pending, success, error), and the resulting image data.
44
+ 4. Create an API service module within the React app (using "fetch" or "axios") to securely format and send the prompt data via an HTTP POST request to the specified "gemini-2.5-flash-image" (Gemini model) endpoint.
45
+ 5. Implement asynchronous logic to handle the API call: show a loading indicator while the request is pending, retrieve the generated image (e.g., as a URL or base64 string) upon success, and display any errors.
46
+ 6. Display the returned "fancy logo" from the API response in the preview area component.
47
+ 7. Add functionality (e.g., a "Download" button) to allow the user to save the generated image file.
48
+ 8. Deploy the application to a web server or hosting platform.
49
+
50
+ <reasoning>
51
+ The agent used the todo list to break the task into distinct, manageable steps:
52
+ 1. Building an entire interactive web application from scratch is a highly complex, multi-stage process involving setup, UI development, logic integration, and deployment.
53
+ 2. The agent inferred the core functionality required for a "logo creator," such as UI controls for customization (Task 3) and an export feature (Task 7), which must be tracked as distinct goals.
54
+ 3. The agent rightly inferred the requirement of an API service model for interacting with the image model endpoint.
55
+ </reasoning>
56
+ </example>
57
+
58
+
59
+ ## Examples of When NOT to Use the Todo List
60
+
61
+ <example>
62
+ User request: Ensure that the test <test file> passes.
63
+
64
+ Agent:
65
+ <Goes into a loop of running the test, identifying errors, and updating the code until the test passes.>
66
+
67
+ <reasoning>
68
+ The agent did not use the todo list because this task could be completed by a tight loop of execute test->edit->execute test.
69
+ </reasoning>
70
+ </example>
71
+ `;
72
+ class WriteTodosToolInvocation extends BaseToolInvocation {
73
+ getDescription() {
74
+ const count = this.params.todos?.length ?? 0;
75
+ if (count === 0) {
76
+ return 'Cleared todo list';
77
+ }
78
+ return `Set ${count} todo(s)`;
79
+ }
80
+ async execute(_signal, _updateOutput) {
81
+ const todos = this.params.todos ?? [];
82
+ const todoListString = todos
83
+ .map((todo, index) => `${index + 1}. [${todo.status}] ${todo.description}`)
84
+ .join('\n');
85
+ const llmContent = todos.length > 0
86
+ ? `Successfully updated the todo list. The current list is now:\n${todoListString}`
87
+ : 'Successfully cleared the todo list.';
88
+ return {
89
+ llmContent,
90
+ returnDisplay: llmContent,
91
+ };
92
+ }
93
+ }
94
+ export class WriteTodosTool extends BaseDeclarativeTool {
95
+ static Name = 'write_todos_list';
96
+ constructor() {
97
+ super(WriteTodosTool.Name, 'Write Todos', WRITE_TODOS_DESCRIPTION, Kind.Other, {
98
+ type: 'object',
99
+ properties: {
100
+ todos: {
101
+ type: 'array',
102
+ description: 'The complete list of todo items. This will replace the existing list.',
103
+ items: {
104
+ type: 'object',
105
+ description: 'A single todo item.',
106
+ properties: {
107
+ description: {
108
+ type: 'string',
109
+ description: 'The description of the task.',
110
+ },
111
+ status: {
112
+ type: 'string',
113
+ description: 'The current status of the task.',
114
+ enum: ['pending', 'in_progress', 'completed'],
115
+ },
116
+ },
117
+ required: ['description', 'status'],
118
+ },
119
+ },
120
+ },
121
+ required: ['todos'],
122
+ });
123
+ }
124
+ validateToolParamValues(params) {
125
+ const todos = params?.todos;
126
+ if (!params || !Array.isArray(todos)) {
127
+ return '`todos` parameter must be an array';
128
+ }
129
+ for (const todo of todos) {
130
+ if (typeof todo !== 'object' || todo === null) {
131
+ return 'Each todo item must be an object';
132
+ }
133
+ if (typeof todo.description !== 'string' || !todo.description.trim()) {
134
+ return 'Each todo must have a non-empty description string';
135
+ }
136
+ if (!['pending', 'in_progress', 'completed'].includes(todo.status)) {
137
+ return 'Each todo must have a valid status (pending, in_progress, or completed)';
138
+ }
139
+ }
140
+ const inProgressCount = todos.filter((todo) => todo.status === 'in_progress').length;
141
+ if (inProgressCount > 1) {
142
+ return 'Invalid parameters: Only one task can be "in_progress" at a time.';
143
+ }
144
+ return null;
145
+ }
146
+ createInvocation(params) {
147
+ return new WriteTodosToolInvocation(params);
148
+ }
149
+ }
150
+ //# sourceMappingURL=write-todos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write-todos.js","sourceRoot":"","sources":["../../../src/tools/write-todos.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};
@@ -0,0 +1,89 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { describe, expect, it } from 'vitest';
7
+ import { WriteTodosTool } from './write-todos.js';
8
+ describe('WriteTodosTool', () => {
9
+ const tool = new WriteTodosTool();
10
+ const signal = new AbortController().signal;
11
+ describe('validation', () => {
12
+ it('should not throw for valid parameters', async () => {
13
+ const params = {
14
+ todos: [
15
+ { description: 'Task 1', status: 'pending' },
16
+ { description: 'Task 2', status: 'in_progress' },
17
+ { description: 'Task 3', status: 'completed' },
18
+ ],
19
+ };
20
+ await expect(tool.buildAndExecute(params, signal)).resolves.toBeDefined();
21
+ });
22
+ it('should not throw for an empty list', async () => {
23
+ const params = {
24
+ todos: [],
25
+ };
26
+ await expect(tool.buildAndExecute(params, signal)).resolves.toBeDefined();
27
+ });
28
+ it('should throw an error if todos is not an array', async () => {
29
+ const params = {
30
+ todos: 'not-an-array',
31
+ };
32
+ await expect(tool.buildAndExecute(params, signal)).rejects.toThrow('params/todos must be array');
33
+ });
34
+ it('should throw an error if a todo item is not an object', async () => {
35
+ const params = {
36
+ todos: ['not-an-object'],
37
+ };
38
+ await expect(tool.buildAndExecute(params, signal)).rejects.toThrow('params/todos/0 must be object');
39
+ });
40
+ it('should throw an error if a todo description is missing or empty', async () => {
41
+ const params = {
42
+ todos: [{ description: ' ', status: 'pending' }],
43
+ };
44
+ await expect(tool.buildAndExecute(params, signal)).rejects.toThrow('Each todo must have a non-empty description string');
45
+ });
46
+ it('should throw an error if a todo status is invalid', async () => {
47
+ const params = {
48
+ todos: [{ description: 'Task 1', status: 'invalid-status' }],
49
+ };
50
+ await expect(tool.buildAndExecute(params, signal)).rejects.toThrow('params/todos/0/status must be equal to one of the allowed values');
51
+ });
52
+ it('should throw an error if more than one task is in_progress', async () => {
53
+ const params = {
54
+ todos: [
55
+ { description: 'Task 1', status: 'in_progress' },
56
+ { description: 'Task 2', status: 'in_progress' },
57
+ ],
58
+ };
59
+ await expect(tool.buildAndExecute(params, signal)).rejects.toThrow('Invalid parameters: Only one task can be "in_progress" at a time.');
60
+ });
61
+ });
62
+ describe('execute', () => {
63
+ it('should return a success message for clearing the list', async () => {
64
+ const params = {
65
+ todos: [],
66
+ };
67
+ const result = await tool.buildAndExecute(params, signal);
68
+ expect(result.llmContent).toBe('Successfully cleared the todo list.');
69
+ expect(result.returnDisplay).toBe('Successfully cleared the todo list.');
70
+ });
71
+ it('should return a formatted todo list on success', async () => {
72
+ const params = {
73
+ todos: [
74
+ { description: 'First task', status: 'completed' },
75
+ { description: 'Second task', status: 'in_progress' },
76
+ { description: 'Third task', status: 'pending' },
77
+ ],
78
+ };
79
+ const result = await tool.buildAndExecute(params, signal);
80
+ const expectedOutput = `Successfully updated the todo list. The current list is now:
81
+ 1. [completed] First task
82
+ 2. [in_progress] Second task
83
+ 3. [pending] Third task`;
84
+ expect(result.llmContent).toBe(expectedOutput);
85
+ expect(result.returnDisplay).toBe(expectedOutput);
86
+ });
87
+ });
88
+ });
89
+ //# sourceMappingURL=write-todos.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write-todos.test.js","sourceRoot":"","sources":["../../../src/tools/write-todos.test.ts"],"names":[],"mappings":"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"}
@@ -111,6 +111,7 @@ export async function FixLLMEditWithInstruction(instruction, old_string, new_str
111
111
  model: DEFAULT_GEMINI_FLASH_MODEL,
112
112
  systemInstruction: EDIT_SYS_PROMPT,
113
113
  promptId,
114
+ maxAttempts: 1,
114
115
  }));
115
116
  editCorrectionWithInstructionCache.set(cacheKey, result);
116
117
  return result;
@@ -1 +1 @@
1
- {"version":3,"file":"llm-edit-fixer.js","sourceRoot":"","sources":["../../../src/utils/llm-edit-fixer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"llm-edit-fixer.js","sourceRoot":"","sources":["../../../src/utils/llm-edit-fixer.ts"],"names":[],"mappings":"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"}
@@ -49,9 +49,15 @@ function delay(ms) {
49
49
  * @throws The last error encountered if all attempts fail.
50
50
  */
51
51
  export async function retryWithBackoff(fn, options) {
52
+ if (options?.maxAttempts !== undefined && options.maxAttempts <= 0) {
53
+ throw new Error('maxAttempts must be a positive number.');
54
+ }
55
+ const cleanOptions = options
56
+ ? Object.fromEntries(Object.entries(options).filter(([_, v]) => v != null))
57
+ : {};
52
58
  const { maxAttempts, initialDelayMs, maxDelayMs, onPersistent429, authType, shouldRetry, } = {
53
59
  ...DEFAULT_RETRY_OPTIONS,
54
- ...options,
60
+ ...cleanOptions,
55
61
  };
56
62
  let attempt = 0;
57
63
  let currentDelay = initialDelayMs;
@@ -1 +1 @@
1
- {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../../src/utils/retry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../../src/utils/retry.ts"],"names":[],"mappings":"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"}
@@ -77,6 +77,28 @@ describe('retryWithBackoff', () => {
77
77
  // 5. Finally, assert the number of calls.
78
78
  expect(mockFn).toHaveBeenCalledTimes(3);
79
79
  });
80
+ it('should default to 5 maxAttempts if no options are provided', async () => {
81
+ // This function will fail more than 5 times to ensure all retries are used.
82
+ const mockFn = createFailingFunction(10);
83
+ const promise = retryWithBackoff(mockFn);
84
+ // Expect it to fail with the error from the 5th attempt.
85
+ // eslint-disable-next-line vitest/valid-expect
86
+ const assertionPromise = expect(promise).rejects.toThrow('Simulated error attempt 5');
87
+ await vi.runAllTimersAsync();
88
+ await assertionPromise;
89
+ expect(mockFn).toHaveBeenCalledTimes(5);
90
+ });
91
+ it('should default to 5 maxAttempts if options.maxAttempts is undefined', async () => {
92
+ // This function will fail more than 5 times to ensure all retries are used.
93
+ const mockFn = createFailingFunction(10);
94
+ const promise = retryWithBackoff(mockFn, { maxAttempts: undefined });
95
+ // Expect it to fail with the error from the 5th attempt.
96
+ // eslint-disable-next-line vitest/valid-expect
97
+ const assertionPromise = expect(promise).rejects.toThrow('Simulated error attempt 5');
98
+ await vi.runAllTimersAsync();
99
+ await assertionPromise;
100
+ expect(mockFn).toHaveBeenCalledTimes(5);
101
+ });
80
102
  it('should not retry if shouldRetry returns false', async () => {
81
103
  const mockFn = vi.fn(async () => {
82
104
  throw new NonRetryableError('Non-retryable error');
@@ -89,6 +111,13 @@ describe('retryWithBackoff', () => {
89
111
  await expect(promise).rejects.toThrow('Non-retryable error');
90
112
  expect(mockFn).toHaveBeenCalledTimes(1);
91
113
  });
114
+ it('should throw an error if maxAttempts is not a positive number', async () => {
115
+ const mockFn = createFailingFunction(1);
116
+ // Test with 0
117
+ await expect(retryWithBackoff(mockFn, { maxAttempts: 0 })).rejects.toThrow('maxAttempts must be a positive number.');
118
+ // The function should not be called at all if validation fails
119
+ expect(mockFn).not.toHaveBeenCalled();
120
+ });
92
121
  it('should use default shouldRetry if not provided, retrying on 429', async () => {
93
122
  const mockFn = vi.fn(async () => {
94
123
  const error = new Error('Too Many Requests');