@theia/ai-ide 1.71.0-next.8 → 1.71.0

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 (212) hide show
  1. package/lib/browser/agent-mode-confirmation-service.d.ts.map +1 -1
  2. package/lib/browser/agent-mode-confirmation-service.js +15 -15
  3. package/lib/browser/agent-mode-confirmation-service.js.map +1 -1
  4. package/lib/browser/ai-configuration/agent-configuration-widget.js +2 -2
  5. package/lib/browser/ai-configuration/agent-configuration-widget.js.map +1 -1
  6. package/lib/browser/ai-configuration/ai-configuration-view-contribution.js +1 -1
  7. package/lib/browser/ai-configuration/ai-configuration-view-contribution.js.map +1 -1
  8. package/lib/browser/ai-configuration/prompt-fragments-configuration-widget.d.ts.map +1 -1
  9. package/lib/browser/ai-configuration/prompt-fragments-configuration-widget.js +2 -1
  10. package/lib/browser/ai-configuration/prompt-fragments-configuration-widget.js.map +1 -1
  11. package/lib/browser/ai-configuration/skills-configuration-widget.d.ts.map +1 -1
  12. package/lib/browser/ai-configuration/skills-configuration-widget.js +2 -1
  13. package/lib/browser/ai-configuration/skills-configuration-widget.js.map +1 -1
  14. package/lib/browser/ai-ide-activation-service.d.ts +10 -1
  15. package/lib/browser/ai-ide-activation-service.d.ts.map +1 -1
  16. package/lib/browser/ai-ide-activation-service.js +41 -1
  17. package/lib/browser/ai-ide-activation-service.js.map +1 -1
  18. package/lib/browser/ai-workspace-restriction-contribution.d.ts +7 -0
  19. package/lib/browser/ai-workspace-restriction-contribution.d.ts.map +1 -0
  20. package/lib/browser/ai-workspace-restriction-contribution.js +42 -0
  21. package/lib/browser/ai-workspace-restriction-contribution.js.map +1 -0
  22. package/lib/browser/app-tester-prompt-template.js +1 -1
  23. package/lib/browser/architect-agent.d.ts +1 -0
  24. package/lib/browser/architect-agent.d.ts.map +1 -1
  25. package/lib/browser/architect-agent.js +5 -3
  26. package/lib/browser/architect-agent.js.map +1 -1
  27. package/lib/browser/architect-prompt-template.js +3 -3
  28. package/lib/browser/chat-session-card-action-contribution.js +1 -1
  29. package/lib/browser/chat-session-card-action-contribution.js.map +1 -1
  30. package/lib/browser/chat-sessions-welcome-message-provider.d.ts +1 -0
  31. package/lib/browser/chat-sessions-welcome-message-provider.d.ts.map +1 -1
  32. package/lib/browser/chat-sessions-welcome-message-provider.js +7 -1
  33. package/lib/browser/chat-sessions-welcome-message-provider.js.map +1 -1
  34. package/lib/browser/code-reviewer-agent.d.ts +1 -0
  35. package/lib/browser/code-reviewer-agent.d.ts.map +1 -1
  36. package/lib/browser/code-reviewer-agent.js +1 -0
  37. package/lib/browser/code-reviewer-agent.js.map +1 -1
  38. package/lib/browser/coder-agent.d.ts +4 -0
  39. package/lib/browser/coder-agent.d.ts.map +1 -1
  40. package/lib/browser/coder-agent.js +28 -4
  41. package/lib/browser/coder-agent.js.map +1 -1
  42. package/lib/browser/create-skill-agent.d.ts +1 -0
  43. package/lib/browser/create-skill-agent.d.ts.map +1 -1
  44. package/lib/browser/create-skill-agent.js +1 -0
  45. package/lib/browser/create-skill-agent.js.map +1 -1
  46. package/lib/browser/explore-agent.d.ts +1 -0
  47. package/lib/browser/explore-agent.d.ts.map +1 -1
  48. package/lib/browser/explore-agent.js +1 -0
  49. package/lib/browser/explore-agent.js.map +1 -1
  50. package/lib/browser/file-changeset-functions.d.ts.map +1 -1
  51. package/lib/browser/file-changeset-functions.js +17 -9
  52. package/lib/browser/file-changeset-functions.js.map +1 -1
  53. package/lib/browser/frontend-module.d.ts.map +1 -1
  54. package/lib/browser/frontend-module.js +12 -10
  55. package/lib/browser/frontend-module.js.map +1 -1
  56. package/lib/browser/github-capability-contribution.js +1 -1
  57. package/lib/browser/github-capability-contribution.js.map +1 -1
  58. package/lib/browser/github-prompt-template.js +1 -1
  59. package/lib/browser/ide-chat-welcome-message-provider.d.ts +4 -0
  60. package/lib/browser/ide-chat-welcome-message-provider.d.ts.map +1 -1
  61. package/lib/browser/ide-chat-welcome-message-provider.js +34 -0
  62. package/lib/browser/ide-chat-welcome-message-provider.js.map +1 -1
  63. package/lib/browser/project-info-agent.d.ts +1 -0
  64. package/lib/browser/project-info-agent.d.ts.map +1 -1
  65. package/lib/browser/project-info-agent.js +1 -0
  66. package/lib/browser/project-info-agent.js.map +1 -1
  67. package/lib/browser/{junior-agent.d.ts → review/pr-review-agent.d.ts} +7 -5
  68. package/lib/browser/review/pr-review-agent.d.ts.map +1 -0
  69. package/lib/browser/{junior-agent.js → review/pr-review-agent.js} +17 -15
  70. package/lib/browser/review/pr-review-agent.js.map +1 -0
  71. package/lib/browser/review/pr-review-prompt-template.d.ts +4 -0
  72. package/lib/browser/review/pr-review-prompt-template.d.ts.map +1 -0
  73. package/lib/browser/review/pr-review-prompt-template.js +437 -0
  74. package/lib/browser/review/pr-review-prompt-template.js.map +1 -0
  75. package/lib/browser/template-preference-contribution.d.ts +2 -0
  76. package/lib/browser/template-preference-contribution.d.ts.map +1 -1
  77. package/lib/browser/template-preference-contribution.js +43 -14
  78. package/lib/browser/template-preference-contribution.js.map +1 -1
  79. package/lib/browser/todo-tool-renderer.d.ts +1 -1
  80. package/lib/browser/todo-tool-renderer.d.ts.map +1 -1
  81. package/lib/browser/todo-tool-renderer.js +1 -1
  82. package/lib/browser/todo-tool-renderer.js.map +1 -1
  83. package/lib/browser/todo-tool.d.ts +0 -1
  84. package/lib/browser/todo-tool.d.ts.map +1 -1
  85. package/lib/browser/todo-tool.js +36 -16
  86. package/lib/browser/todo-tool.js.map +1 -1
  87. package/lib/browser/todo-tool.spec.d.ts +2 -0
  88. package/lib/browser/todo-tool.spec.d.ts.map +1 -0
  89. package/lib/browser/todo-tool.spec.js +44 -0
  90. package/lib/browser/todo-tool.spec.js.map +1 -0
  91. package/lib/browser/user-interaction-tool-renderer.d.ts +18 -0
  92. package/lib/browser/user-interaction-tool-renderer.d.ts.map +1 -0
  93. package/lib/browser/user-interaction-tool-renderer.js +330 -0
  94. package/lib/browser/user-interaction-tool-renderer.js.map +1 -0
  95. package/lib/browser/user-interaction-tool.d.ts +47 -0
  96. package/lib/browser/user-interaction-tool.d.ts.map +1 -0
  97. package/lib/browser/user-interaction-tool.js +397 -0
  98. package/lib/browser/user-interaction-tool.js.map +1 -0
  99. package/lib/browser/user-interaction-tool.spec.d.ts +2 -0
  100. package/lib/browser/user-interaction-tool.spec.d.ts.map +1 -0
  101. package/lib/browser/user-interaction-tool.spec.js +336 -0
  102. package/lib/browser/user-interaction-tool.spec.js.map +1 -0
  103. package/lib/browser/workspace-functions.d.ts.map +1 -1
  104. package/lib/browser/workspace-functions.js +9 -2
  105. package/lib/browser/workspace-functions.js.map +1 -1
  106. package/lib/browser/workspace-launch-provider.d.ts.map +1 -1
  107. package/lib/browser/workspace-launch-provider.js +9 -4
  108. package/lib/browser/workspace-launch-provider.js.map +1 -1
  109. package/lib/browser/workspace-launch-provider.spec.js +4 -4
  110. package/lib/browser/workspace-launch-provider.spec.js.map +1 -1
  111. package/lib/browser/workspace-task-provider.d.ts.map +1 -1
  112. package/lib/browser/workspace-task-provider.js +4 -1
  113. package/lib/browser/workspace-task-provider.js.map +1 -1
  114. package/lib/browser/workspace-task-provider.spec.js +90 -1
  115. package/lib/browser/workspace-task-provider.spec.js.map +1 -1
  116. package/lib/common/ai-ide-preferences.d.ts +1 -1
  117. package/lib/common/ai-ide-preferences.d.ts.map +1 -1
  118. package/lib/common/ai-ide-preferences.js +6 -6
  119. package/lib/common/ai-ide-preferences.js.map +1 -1
  120. package/lib/common/coder-replace-prompt-template.d.ts.map +1 -1
  121. package/lib/common/coder-replace-prompt-template.js +133 -17
  122. package/lib/common/coder-replace-prompt-template.js.map +1 -1
  123. package/lib/common/command-chat-agents.d.ts +1 -0
  124. package/lib/common/command-chat-agents.d.ts.map +1 -1
  125. package/lib/common/command-chat-agents.js +1 -0
  126. package/lib/common/command-chat-agents.js.map +1 -1
  127. package/lib/common/command-prompt-template.js +1 -1
  128. package/lib/common/orchestrator-chat-agent.d.ts.map +1 -1
  129. package/lib/common/orchestrator-chat-agent.js +2 -2
  130. package/lib/common/orchestrator-chat-agent.js.map +1 -1
  131. package/lib/common/universal-chat-agent.d.ts +1 -0
  132. package/lib/common/universal-chat-agent.d.ts.map +1 -1
  133. package/lib/common/universal-chat-agent.js +1 -0
  134. package/lib/common/universal-chat-agent.js.map +1 -1
  135. package/lib/common/universal-prompt-template.js +1 -1
  136. package/lib/common/user-interaction-tool.d.ts +53 -0
  137. package/lib/common/user-interaction-tool.d.ts.map +1 -0
  138. package/lib/common/user-interaction-tool.js +176 -0
  139. package/lib/common/user-interaction-tool.js.map +1 -0
  140. package/lib/common/user-interaction-tool.spec.d.ts +2 -0
  141. package/lib/common/user-interaction-tool.spec.d.ts.map +1 -0
  142. package/lib/common/user-interaction-tool.spec.js +216 -0
  143. package/lib/common/user-interaction-tool.spec.js.map +1 -0
  144. package/package.json +27 -27
  145. package/src/browser/agent-mode-confirmation-service.ts +19 -18
  146. package/src/browser/ai-configuration/agent-configuration-widget.tsx +2 -2
  147. package/src/browser/ai-configuration/ai-configuration-view-contribution.ts +1 -1
  148. package/src/browser/ai-configuration/prompt-fragments-configuration-widget.tsx +2 -1
  149. package/src/browser/ai-configuration/skills-configuration-widget.tsx +2 -1
  150. package/src/browser/ai-ide-activation-service.ts +43 -3
  151. package/src/browser/ai-workspace-restriction-contribution.ts +39 -0
  152. package/src/browser/app-tester-prompt-template.ts +1 -1
  153. package/src/browser/architect-agent.ts +6 -3
  154. package/src/browser/architect-prompt-template.ts +3 -3
  155. package/src/browser/chat-session-card-action-contribution.ts +1 -1
  156. package/src/browser/chat-sessions-welcome-message-provider.tsx +11 -2
  157. package/src/browser/code-reviewer-agent.ts +1 -0
  158. package/src/browser/coder-agent.ts +31 -4
  159. package/src/browser/create-skill-agent.ts +1 -0
  160. package/src/browser/explore-agent.ts +1 -0
  161. package/src/browser/file-changeset-functions.ts +17 -8
  162. package/src/browser/frontend-module.ts +14 -12
  163. package/src/browser/github-capability-contribution.ts +1 -1
  164. package/src/browser/github-prompt-template.ts +1 -1
  165. package/src/browser/ide-chat-welcome-message-provider.tsx +53 -0
  166. package/src/browser/project-info-agent.ts +1 -1
  167. package/src/browser/{context-reviewer-agent.ts → review/pr-review-agent.ts} +13 -11
  168. package/src/browser/review/pr-review-prompt-template.ts +449 -0
  169. package/src/browser/style/index.css +299 -0
  170. package/src/browser/template-preference-contribution.ts +40 -14
  171. package/src/browser/todo-tool-renderer.tsx +1 -1
  172. package/src/browser/todo-tool.spec.ts +49 -0
  173. package/src/browser/todo-tool.ts +35 -14
  174. package/src/browser/user-interaction-tool-renderer.tsx +531 -0
  175. package/src/browser/user-interaction-tool.spec.ts +396 -0
  176. package/src/browser/user-interaction-tool.ts +423 -0
  177. package/src/browser/workspace-functions.ts +10 -3
  178. package/src/browser/workspace-launch-provider.spec.ts +4 -4
  179. package/src/browser/workspace-launch-provider.ts +10 -6
  180. package/src/browser/workspace-task-provider.spec.ts +119 -1
  181. package/src/browser/workspace-task-provider.ts +4 -1
  182. package/src/common/ai-ide-preferences.ts +7 -7
  183. package/src/common/coder-replace-prompt-template.ts +133 -17
  184. package/src/common/command-chat-agents.ts +1 -0
  185. package/src/common/command-prompt-template.ts +1 -1
  186. package/src/common/orchestrator-chat-agent.ts +2 -2
  187. package/src/common/universal-chat-agent.ts +1 -0
  188. package/src/common/universal-prompt-template.ts +1 -1
  189. package/src/common/user-interaction-tool.spec.ts +241 -0
  190. package/src/common/user-interaction-tool.ts +237 -0
  191. package/lib/browser/context-reviewer-agent.d.ts +0 -17
  192. package/lib/browser/context-reviewer-agent.d.ts.map +0 -1
  193. package/lib/browser/context-reviewer-agent.js +0 -45
  194. package/lib/browser/context-reviewer-agent.js.map +0 -1
  195. package/lib/browser/context-reviewer-prompt-template.d.ts +0 -4
  196. package/lib/browser/context-reviewer-prompt-template.d.ts.map +0 -1
  197. package/lib/browser/context-reviewer-prompt-template.js +0 -160
  198. package/lib/browser/context-reviewer-prompt-template.js.map +0 -1
  199. package/lib/browser/junior-agent.d.ts.map +0 -1
  200. package/lib/browser/junior-agent.js.map +0 -1
  201. package/lib/browser/junior-plan-capability-contribution.d.ts +0 -8
  202. package/lib/browser/junior-plan-capability-contribution.d.ts.map +0 -1
  203. package/lib/browser/junior-plan-capability-contribution.js +0 -131
  204. package/lib/browser/junior-plan-capability-contribution.js.map +0 -1
  205. package/lib/browser/junior-prompt-template.d.ts +0 -4
  206. package/lib/browser/junior-prompt-template.d.ts.map +0 -1
  207. package/lib/browser/junior-prompt-template.js +0 -149
  208. package/lib/browser/junior-prompt-template.js.map +0 -1
  209. package/src/browser/context-reviewer-prompt-template.ts +0 -160
  210. package/src/browser/junior-agent.ts +0 -40
  211. package/src/browser/junior-plan-capability-contribution.ts +0 -129
  212. package/src/browser/junior-prompt-template.ts +0 -149
@@ -1 +1 @@
1
- {"version":3,"file":"todo-tool.d.ts","sourceRoot":"","sources":["../../src/browser/todo-tool.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAGtE,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAExF,qBACa,aAAc,YAAW,YAAY;IAC9C,MAAM,CAAC,EAAE,SAA0B;IAEnC,OAAO,IAAI,WAAW;CAkDzB"}
1
+ {"version":3,"file":"todo-tool.d.ts","sourceRoot":"","sources":["../../src/browser/todo-tool.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAGtE,qBACa,aAAc,YAAW,YAAY;IAC9C,MAAM,CAAC,EAAE,SAA0B;IAEnC,OAAO,IAAI,WAAW;CAyEzB"}
@@ -16,13 +16,10 @@
16
16
  // *****************************************************************************
17
17
  var TodoWriteTool_1;
18
18
  Object.defineProperty(exports, "__esModule", { value: true });
19
- exports.TodoWriteTool = exports.isValidTodoItem = exports.TODO_WRITE_FUNCTION_ID = void 0;
19
+ exports.TodoWriteTool = void 0;
20
20
  const tslib_1 = require("tslib");
21
21
  const inversify_1 = require("@theia/core/shared/inversify");
22
22
  const todo_tool_1 = require("../common/todo-tool");
23
- var todo_tool_2 = require("../common/todo-tool");
24
- Object.defineProperty(exports, "TODO_WRITE_FUNCTION_ID", { enumerable: true, get: function () { return todo_tool_2.TODO_WRITE_FUNCTION_ID; } });
25
- Object.defineProperty(exports, "isValidTodoItem", { enumerable: true, get: function () { return todo_tool_2.isValidTodoItem; } });
26
23
  let TodoWriteTool = class TodoWriteTool {
27
24
  static { TodoWriteTool_1 = this; }
28
25
  static { this.ID = todo_tool_1.TODO_WRITE_FUNCTION_ID; }
@@ -31,20 +28,43 @@ let TodoWriteTool = class TodoWriteTool {
31
28
  id: TodoWriteTool_1.ID,
32
29
  name: TodoWriteTool_1.ID,
33
30
  providerName: 'ai-ide',
34
- description: 'Write a todo list to track task progress. Use this to plan multi-step tasks ' +
35
- 'and show progress to the user. Each todo has content (imperative: "Run tests"), ' +
36
- 'activeForm (continuous: "Running tests"), and status (pending/in_progress/completed). ' +
37
- 'Call this to update the entire list - it replaces the previous list.',
31
+ description: 'Create or replace a structured task list for the current session. ' +
32
+ 'This helps you track progress, organize complex tasks, and demonstrate thoroughness to the user. ' +
33
+ 'It also helps the user understand the progress and overall status of their requests.\n\n' +
34
+ 'When to use:\n' +
35
+ '- Tasks requiring 3+ steps or careful planning\n' +
36
+ '- User provides multiple tasks or explicitly requests a todo list\n' +
37
+ '- After receiving new instructions — immediately capture requirements as todos\n' +
38
+ 'Skip for single, trivial tasks, conversational or informational requests that need no tracking.\n' +
39
+ 'When in doubt, use this tool.\n\n' +
40
+ 'Task states:\n' +
41
+ '- pending: Task not yet started\n' +
42
+ '- in_progress: Currently working on (limit to ONE task at a time)\n' +
43
+ '- completed: Task finished successfully\n\n' +
44
+ 'Task management:\n' +
45
+ '- Mark a task in_progress BEFORE starting work on it (one at a time)\n' +
46
+ '- Complete the current task before starting new ones\n' +
47
+ '- Mark tasks completed immediately after finishing — do not batch completions\n' +
48
+ '- Only mark completed when fully accomplished (no failing tests, no partial implementation, no unresolved errors)\n' +
49
+ '- If blocked, add a new task describing what needs to be resolved\n' +
50
+ '- Add follow-up tasks discovered during implementation\n' +
51
+ '- Remove tasks that are no longer relevant\n\n' +
52
+ 'Task breakdown:\n' +
53
+ '- Create specific, actionable items\n' +
54
+ '- Break complex tasks into smaller, manageable steps\n' +
55
+ '- Use clear, descriptive task names\n\n' +
56
+ 'Being proactive with task management demonstrates attentiveness and ensures you complete all requirements successfully.',
38
57
  parameters: {
39
58
  type: 'object',
40
59
  properties: {
41
60
  todos: {
42
61
  type: 'array',
62
+ description: 'The updated todo list.',
43
63
  items: {
44
64
  type: 'object',
45
65
  properties: {
46
- content: { type: 'string', description: 'Imperative form: "Run tests"' },
47
- activeForm: { type: 'string', description: 'Continuous form: "Running tests"' },
66
+ content: { type: 'string', description: 'Clear, actionable task description (e.g., "Extract TokenValidator from AuthService").' },
67
+ activeForm: { type: 'string', description: 'Continuous form shown during execution (e.g., "Extracting TokenValidator from AuthService").' },
48
68
  status: { type: 'string', enum: ['pending', 'in_progress', 'completed'] }
49
69
  },
50
70
  required: ['content', 'activeForm', 'status']
@@ -61,14 +81,14 @@ let TodoWriteTool = class TodoWriteTool {
61
81
  }
62
82
  const validTodos = todos.filter(todo_tool_1.isValidTodoItem);
63
83
  const invalidCount = todos.length - validTodos.length;
84
+ const response = {
85
+ success: true,
86
+ count: validTodos.length,
87
+ };
64
88
  if (invalidCount > 0) {
65
- return JSON.stringify({
66
- success: true,
67
- count: validTodos.length,
68
- warning: `${invalidCount} invalid todo item(s) were filtered out`
69
- });
89
+ response.warning = `${invalidCount} invalid todo item(s) were filtered out`;
70
90
  }
71
- return JSON.stringify({ success: true, count: validTodos.length });
91
+ return JSON.stringify(response);
72
92
  }
73
93
  catch (error) {
74
94
  const message = error instanceof Error ? error.message : String(error);
@@ -1 +1 @@
1
- {"version":3,"file":"todo-tool.js","sourceRoot":"","sources":["../../src/browser/todo-tool.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;;;AAEhF,4DAA0D;AAE1D,mDAA8E;AAE9E,iDAAwF;AAA/E,mHAAA,sBAAsB,OAAA;AAAY,4GAAA,eAAe,OAAA;AAGnD,IAAM,aAAa,GAAnB,MAAM,aAAa;;aACf,OAAE,GAAG,kCAAsB,AAAzB,CAA0B;IAEnC,OAAO;QACH,OAAO;YACH,EAAE,EAAE,eAAa,CAAC,EAAE;YACpB,IAAI,EAAE,eAAa,CAAC,EAAE;YACtB,YAAY,EAAE,QAAQ;YACtB,WAAW,EAAE,8EAA8E;gBACvF,kFAAkF;gBAClF,wFAAwF;gBACxF,sEAAsE;YAC1E,UAAU,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACR,KAAK,EAAE;wBACH,IAAI,EAAE,OAAO;wBACb,KAAK,EAAE;4BACH,IAAI,EAAE,QAAQ;4BACd,UAAU,EAAE;gCACR,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,8BAA8B,EAAE;gCACxE,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kCAAkC,EAAE;gCAC/E,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,aAAa,EAAE,WAAW,CAAC,EAAE;6BAC5E;4BACD,QAAQ,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,QAAQ,CAAC;yBAChD;qBACJ;iBACJ;gBACD,QAAQ,EAAE,CAAC,OAAO,CAAC;aACtB;YACD,OAAO,EAAE,KAAK,EAAE,UAAkB,EAAE,EAAE;gBAClC,IAAI,CAAC;oBACD,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;oBACzC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;wBACxB,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,wBAAwB,EAAE,CAAC,CAAC;oBAC/D,CAAC;oBACD,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,2BAAe,CAAC,CAAC;oBACjD,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;oBACtD,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;wBACnB,OAAO,IAAI,CAAC,SAAS,CAAC;4BAClB,OAAO,EAAE,IAAI;4BACb,KAAK,EAAE,UAAU,CAAC,MAAM;4BACxB,OAAO,EAAE,GAAG,YAAY,yCAAyC;yBACpE,CAAC,CAAC;oBACP,CAAC;oBACD,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;gBACvE,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACb,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBACvE,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,0BAA0B,OAAO,EAAE,EAAE,CAAC,CAAC;gBAC1E,CAAC;YACL,CAAC;SACJ,CAAC;IACN,CAAC;;AApDQ,sCAAa;wBAAb,aAAa;IADzB,IAAA,sBAAU,GAAE;GACA,aAAa,CAqDzB"}
1
+ {"version":3,"file":"todo-tool.js","sourceRoot":"","sources":["../../src/browser/todo-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=todo-tool.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"todo-tool.spec.d.ts","sourceRoot":"","sources":["../../src/browser/todo-tool.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ // *****************************************************************************
3
+ // Copyright (C) 2026 EclipseSource GmbH.
4
+ //
5
+ // This program and the accompanying materials are made available under the
6
+ // terms of the Eclipse Public License v. 2.0 which is available at
7
+ // http://www.eclipse.org/legal/epl-2.0.
8
+ //
9
+ // This Source Code may also be made available under the following Secondary
10
+ // Licenses when the conditions for such availability set forth in the Eclipse
11
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
12
+ // with the GNU Classpath Exception which is available at
13
+ // https://www.gnu.org/software/classpath/license.html.
14
+ //
15
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
16
+ // *****************************************************************************
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ const chai_1 = require("chai");
19
+ const todo_tool_1 = require("../common/todo-tool");
20
+ describe('isValidTodoItem', () => {
21
+ it('should accept a minimal valid item', () => {
22
+ (0, chai_1.expect)((0, todo_tool_1.isValidTodoItem)({ content: 'Do something', activeForm: 'Doing something', status: 'pending' })).to.be.true;
23
+ });
24
+ it('should accept all valid statuses', () => {
25
+ (0, chai_1.expect)((0, todo_tool_1.isValidTodoItem)({ content: 'X', activeForm: 'Xing', status: 'pending' })).to.be.true;
26
+ (0, chai_1.expect)((0, todo_tool_1.isValidTodoItem)({ content: 'X', activeForm: 'Xing', status: 'in_progress' })).to.be.true;
27
+ (0, chai_1.expect)((0, todo_tool_1.isValidTodoItem)({ content: 'X', activeForm: 'Xing', status: 'completed' })).to.be.true;
28
+ });
29
+ it('should reject non-object values', () => {
30
+ (0, chai_1.expect)((0, todo_tool_1.isValidTodoItem)(undefined)).to.be.false;
31
+ (0, chai_1.expect)((0, todo_tool_1.isValidTodoItem)('string')).to.be.false;
32
+ (0, chai_1.expect)((0, todo_tool_1.isValidTodoItem)(42)).to.be.false;
33
+ });
34
+ it('should reject items with missing required fields', () => {
35
+ (0, chai_1.expect)((0, todo_tool_1.isValidTodoItem)({ status: 'pending' })).to.be.false;
36
+ (0, chai_1.expect)((0, todo_tool_1.isValidTodoItem)({ content: 'X' })).to.be.false;
37
+ (0, chai_1.expect)((0, todo_tool_1.isValidTodoItem)({ content: 'X', status: 'pending' })).to.be.false;
38
+ (0, chai_1.expect)((0, todo_tool_1.isValidTodoItem)({ content: 'X', activeForm: 'Xing' })).to.be.false;
39
+ });
40
+ it('should reject items with invalid status', () => {
41
+ (0, chai_1.expect)((0, todo_tool_1.isValidTodoItem)({ content: 'X', activeForm: 'Xing', status: 'unknown' })).to.be.false;
42
+ });
43
+ });
44
+ //# sourceMappingURL=todo-tool.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"todo-tool.spec.js","sourceRoot":"","sources":["../../src/browser/todo-tool.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { ChatResponsePartRenderer } from '@theia/ai-chat-ui/lib/browser/chat-response-part-renderer';
2
+ import { ResponseNode } from '@theia/ai-chat-ui/lib/browser/chat-tree-view';
3
+ import { ChatResponseContent, ToolCallChatResponseContent } from '@theia/ai-chat/lib/common';
4
+ import { ReactNode } from '@theia/core/shared/react';
5
+ import { ContextMenuRenderer, OpenerService } from '@theia/core/lib/browser';
6
+ import { ToolConfirmationManager } from '@theia/ai-chat/lib/browser/chat-tool-preference-bindings';
7
+ import { ToolInvocationRegistry } from '@theia/ai-core';
8
+ import { UserInteractionTool } from './user-interaction-tool';
9
+ export declare class UserInteractionToolRenderer implements ChatResponsePartRenderer<ToolCallChatResponseContent> {
10
+ protected toolConfirmationManager: ToolConfirmationManager;
11
+ protected contextMenuRenderer: ContextMenuRenderer;
12
+ protected toolInvocationRegistry: ToolInvocationRegistry;
13
+ protected userInteractionTool: UserInteractionTool;
14
+ protected openerService: OpenerService;
15
+ canHandle(response: ChatResponseContent): number;
16
+ render(response: ToolCallChatResponseContent, parentNode: ResponseNode): ReactNode;
17
+ }
18
+ //# sourceMappingURL=user-interaction-tool-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-interaction-tool-renderer.d.ts","sourceRoot":"","sources":["../../src/browser/user-interaction-tool-renderer.tsx"],"names":[],"mappings":"AAiBA,OAAO,EAAE,wBAAwB,EAAE,MAAM,2DAA2D,CAAC;AACrG,OAAO,EAAE,YAAY,EAAE,MAAM,8CAA8C,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAC7F,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD,OAAO,EAAW,mBAAmB,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAItF,OAAO,EAAE,uBAAuB,EAAE,MAAM,0DAA0D,CAAC;AACnG,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAib9D,qBACa,2BAA4B,YAAW,wBAAwB,CAAC,2BAA2B,CAAC;IAGrG,SAAS,CAAC,uBAAuB,EAAE,uBAAuB,CAAC;IAG3D,SAAS,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;IAGnD,SAAS,CAAC,sBAAsB,EAAE,sBAAsB,CAAC;IAGzD,SAAS,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;IAGnD,SAAS,CAAC,aAAa,EAAE,aAAa,CAAC;IAEvC,SAAS,CAAC,QAAQ,EAAE,mBAAmB,GAAG,MAAM;IAOhD,MAAM,CAAC,QAAQ,EAAE,2BAA2B,EAAE,UAAU,EAAE,YAAY,GAAG,SAAS;CA4CrF"}
@@ -0,0 +1,330 @@
1
+ "use strict";
2
+ // *****************************************************************************
3
+ // Copyright (C) 2026 EclipseSource GmbH.
4
+ //
5
+ // This program and the accompanying materials are made available under the
6
+ // terms of the Eclipse Public License v. 2.0 which is available at
7
+ // http://www.eclipse.org/legal/epl-2.0.
8
+ //
9
+ // This Source Code may also be made available under the following Secondary
10
+ // Licenses when the conditions for such availability set forth in the Eclipse
11
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
12
+ // with the GNU Classpath Exception which is available at
13
+ // https://www.gnu.org/software/classpath/license.html.
14
+ //
15
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
16
+ // *****************************************************************************
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.UserInteractionToolRenderer = void 0;
19
+ const tslib_1 = require("tslib");
20
+ const inversify_1 = require("@theia/core/shared/inversify");
21
+ const common_1 = require("@theia/ai-chat/lib/common");
22
+ const React = require("@theia/core/shared/react");
23
+ const browser_1 = require("@theia/core/lib/browser");
24
+ const nls_1 = require("@theia/core/lib/common/nls");
25
+ const markdown_part_renderer_1 = require("@theia/ai-chat-ui/lib/browser/chat-response-renderer/markdown-part-renderer");
26
+ const tool_confirmation_1 = require("@theia/ai-chat-ui/lib/browser/chat-response-renderer/tool-confirmation");
27
+ const chat_tool_preference_bindings_1 = require("@theia/ai-chat/lib/browser/chat-tool-preference-bindings");
28
+ const ai_core_1 = require("@theia/ai-core");
29
+ const user_interaction_tool_1 = require("./user-interaction-tool");
30
+ const user_interaction_tool_2 = require("../common/user-interaction-tool");
31
+ const UserInteractionComponent = ({ args, toolCallId, tool, finished, canceled, responseComplete, result, openerService }) => {
32
+ const steps = args.interactions;
33
+ const stepCount = steps.length;
34
+ const [currentStep, setCurrentStep] = React.useState(0);
35
+ const [stepStates, setStepStates] = React.useState(() => steps.map(() => ({ comments: [] })));
36
+ const [pendingComment, setPendingComment] = React.useState('');
37
+ const activeStep = steps[currentStep];
38
+ const isLastStep = currentStep === stepCount - 1;
39
+ const messageRef = (0, markdown_part_renderer_1.useMarkdownRendering)(activeStep?.message ?? '', openerService);
40
+ // A parent response that completed without delivering a tool result means the
41
+ // interaction was restored from a serialized "waiting for input" state. The
42
+ // agent that was waiting is no longer running, so it must be treated as
43
+ // canceled and all inputs locked.
44
+ const restoredWithoutResult = responseComplete && !result;
45
+ const isFinal = finished || !!result || canceled || restoredWithoutResult;
46
+ // Auto-open the active step's links the first time the user reaches it.
47
+ // Going Back and then Forward must not re-open them.
48
+ const visitedStepsRef = React.useRef(new Set());
49
+ React.useEffect(() => {
50
+ if (isFinal || !activeStep || visitedStepsRef.current.has(currentStep)) {
51
+ return;
52
+ }
53
+ visitedStepsRef.current.add(currentStep);
54
+ const links = activeStep.links ?? [];
55
+ for (const link of links) {
56
+ if (link.autoOpen !== false) {
57
+ tool.openLink(link).catch(err => console.warn('Failed to auto-open user-interaction link:', err));
58
+ }
59
+ }
60
+ }, [currentStep, activeStep, isFinal, tool]);
61
+ const persistStepState = React.useCallback((stepIndex, state) => {
62
+ tool.setStepResult(toolCallId, stepIndex, {
63
+ value: state.value,
64
+ comments: state.comments.length > 0 ? state.comments : undefined
65
+ });
66
+ }, [tool, toolCallId]);
67
+ const updateStepState = React.useCallback((stepIndex, updater) => {
68
+ setStepStates(prev => {
69
+ const next = prev.slice();
70
+ const updated = updater(prev[stepIndex]);
71
+ next[stepIndex] = updated;
72
+ persistStepState(stepIndex, updated);
73
+ return next;
74
+ });
75
+ }, [persistStepState]);
76
+ const isSingleStep = stepCount === 1;
77
+ const hasOptions = !!activeStep?.options && activeStep.options.length > 0;
78
+ const handleOptionClick = React.useCallback((value) => {
79
+ if (isFinal) {
80
+ return;
81
+ }
82
+ if (isSingleStep) {
83
+ setStepStates(prev => {
84
+ const next = prev.slice();
85
+ next[0] = { ...prev[0], value };
86
+ return next;
87
+ });
88
+ tool.completeInteractionWith(toolCallId, 0, { value });
89
+ return;
90
+ }
91
+ updateStepState(currentStep, prev => ({
92
+ ...prev,
93
+ value: prev.value === value ? undefined : value
94
+ }));
95
+ }, [currentStep, isFinal, isSingleStep, tool, toolCallId, updateStepState]);
96
+ const handleAddComment = React.useCallback(() => {
97
+ const trimmed = pendingComment.trim();
98
+ if (isFinal || !trimmed) {
99
+ return;
100
+ }
101
+ updateStepState(currentStep, prev => ({
102
+ ...prev,
103
+ comments: [...prev.comments, trimmed]
104
+ }));
105
+ setPendingComment('');
106
+ }, [currentStep, isFinal, pendingComment, updateStepState]);
107
+ const handleRemoveComment = React.useCallback((commentIndex) => {
108
+ if (isFinal) {
109
+ return;
110
+ }
111
+ updateStepState(currentStep, prev => ({
112
+ ...prev,
113
+ comments: prev.comments.filter((_, i) => i !== commentIndex)
114
+ }));
115
+ }, [currentStep, isFinal, updateStepState]);
116
+ const handleCommentKeyDown = React.useCallback((e) => {
117
+ if (e.key === 'Enter') {
118
+ e.preventDefault();
119
+ handleAddComment();
120
+ }
121
+ }, [handleAddComment]);
122
+ const goToStep = React.useCallback((idx) => {
123
+ if (idx < 0 || idx >= stepCount) {
124
+ return;
125
+ }
126
+ setCurrentStep(idx);
127
+ setPendingComment('');
128
+ }, [stepCount]);
129
+ const handleAdvance = React.useCallback(() => {
130
+ if (isLastStep) {
131
+ if (!isFinal) {
132
+ tool.completeInteraction(toolCallId);
133
+ }
134
+ return;
135
+ }
136
+ setCurrentStep(idx => idx + 1);
137
+ setPendingComment('');
138
+ }, [isFinal, isLastStep, tool, toolCallId]);
139
+ const handleBack = React.useCallback(() => {
140
+ if (currentStep === 0) {
141
+ return;
142
+ }
143
+ setCurrentStep(idx => idx - 1);
144
+ setPendingComment('');
145
+ }, [currentStep]);
146
+ if (!activeStep) {
147
+ return undefined;
148
+ }
149
+ const activeState = stepStates[currentStep];
150
+ const stepLabel = nls_1.nls.localize('theia/ai-ide/userInteractionStepLabel', 'Step {0} of {1}', currentStep + 1, stepCount);
151
+ const advanceLabel = isLastStep
152
+ ? nls_1.nls.localize('theia/ai-ide/userInteractionFinishStep', 'Finish')
153
+ : nls_1.nls.localizeByDefault('Next');
154
+ const showAdvanceRow = !isSingleStep;
155
+ return (React.createElement("div", { className: 'tool-call container user-interaction-wizard' },
156
+ React.createElement("div", { className: 'tool-call header' },
157
+ React.createElement("span", { className: (0, browser_1.codicon)('comment-discussion') }),
158
+ React.createElement("span", { className: 'user-interaction-tool title' }, activeStep.title),
159
+ (() => {
160
+ // The tool's own result is authoritative: a completed
161
+ // interaction must stay "Completed" even if the chat
162
+ // session is canceled later. A response that completed
163
+ // without a result indicates the interaction was restored
164
+ // from a "waiting" state and is treated as canceled.
165
+ const status = result?.completed === true ? 'completed' :
166
+ result?.completed === false || canceled || restoredWithoutResult ? 'canceled' :
167
+ 'waiting';
168
+ if (status === 'completed') {
169
+ return (React.createElement("span", { className: 'user-interaction-tool status completed' },
170
+ React.createElement("i", { className: (0, browser_1.codicon)('check') }),
171
+ nls_1.nls.localizeByDefault('Completed')));
172
+ }
173
+ if (status === 'canceled') {
174
+ return (React.createElement("span", { className: 'user-interaction-tool status canceled' },
175
+ React.createElement("i", { className: (0, browser_1.codicon)('close') }),
176
+ nls_1.nls.localize('theia/ai-ide/userInteractionCanceled', 'Canceled')));
177
+ }
178
+ return (React.createElement("span", { className: 'user-interaction-tool status waiting', role: 'status', "aria-live": 'polite' }, nls_1.nls.localize('theia/ai/chat-ui/chat-view-tree-widget/waitingForInput', 'Waiting for input')));
179
+ })()),
180
+ !isSingleStep && React.createElement(StepProgress, { current: currentStep, total: stepCount, onSelect: goToStep, steps: steps }),
181
+ activeStep.links && activeStep.links.length > 0 && (React.createElement("div", { className: 'user-interaction-tool links' }, activeStep.links.map((link, i) => (React.createElement(LinkButton, { key: i, link: link, onClick: () => tool.openLink(link).catch(err => console.warn('Failed to open user-interaction link:', err)) }))))),
182
+ React.createElement("div", { className: 'user-interaction-tool message', ref: messageRef }),
183
+ hasOptions && (React.createElement("div", { className: 'user-interaction-tool options' }, activeStep.options.map((option, i) => {
184
+ const isSelected = activeState.value === option.value;
185
+ const className = 'user-interaction-tool option-button theia-button '
186
+ + (isSelected ? 'main selected' : 'secondary');
187
+ const label = option.buttonLabel || option.text;
188
+ return (React.createElement("button", { key: i, className: className, onClick: () => handleOptionClick(option.value), disabled: isFinal, title: option.description, "aria-pressed": isSelected },
189
+ React.createElement("span", { className: 'user-interaction-tool option-button-bold-spacer', "aria-hidden": 'true' }, label),
190
+ React.createElement("span", { className: 'user-interaction-tool option-button-label' }, label)));
191
+ }))),
192
+ !isSingleStep && (React.createElement("div", { className: 'user-interaction-tool comment-section' },
193
+ !isFinal && (React.createElement("div", { className: 'user-interaction-tool comment-input-row' },
194
+ React.createElement("input", { type: 'text', className: 'theia-input user-interaction-tool comment-input-field', placeholder: nls_1.nls.localize('theia/ai-ide/userInteractionCommentPlaceholder', 'Add a comment for this step...'), value: pendingComment, onChange: e => setPendingComment(e.target.value), onKeyDown: handleCommentKeyDown }),
195
+ React.createElement("button", { className: 'theia-button secondary user-interaction-tool comment-submit', onClick: handleAddComment, disabled: !pendingComment.trim() }, nls_1.nls.localizeByDefault('Comment')))),
196
+ activeState.comments.length > 0 && (React.createElement("ul", { className: 'user-interaction-tool comment-list' }, activeState.comments.map((comment, i) => (React.createElement("li", { key: i, className: 'user-interaction-tool comment-item' },
197
+ React.createElement("span", { className: 'user-interaction-tool comment-text' }, comment),
198
+ !isFinal && (React.createElement("button", { className: 'user-interaction-tool comment-remove', onClick: () => handleRemoveComment(i), title: nls_1.nls.localizeByDefault('Remove'), "aria-label": nls_1.nls.localizeByDefault('Remove') },
199
+ React.createElement("i", { className: (0, browser_1.codicon)('close') })))))))))),
200
+ showAdvanceRow && (React.createElement("div", { className: 'user-interaction-tool advance-row' },
201
+ !isSingleStep && (React.createElement(React.Fragment, null,
202
+ React.createElement("button", { className: 'theia-button secondary user-interaction-tool back-button', onClick: handleBack, disabled: currentStep === 0, title: nls_1.nls.localizeByDefault('Back') },
203
+ React.createElement("i", { className: (0, browser_1.codicon)('arrow-left') }),
204
+ nls_1.nls.localizeByDefault('Back')),
205
+ React.createElement("span", { className: 'user-interaction-tool page-counter', "aria-label": stepLabel },
206
+ currentStep + 1,
207
+ " / ",
208
+ stepCount))),
209
+ React.createElement("button", { className: 'theia-button main user-interaction-tool advance-button', onClick: handleAdvance, disabled: isFinal && isLastStep },
210
+ advanceLabel,
211
+ React.createElement("i", { className: (0, browser_1.codicon)(isLastStep ? 'check' : 'arrow-right') }))))));
212
+ };
213
+ const StepProgress = ({ current, total, onSelect, steps }) => (React.createElement("div", { className: 'user-interaction-tool progress' }, Array.from({ length: total }).map((_, i) => {
214
+ const label = nls_1.nls.localize('theia/ai-ide/userInteractionGoToStep', 'Go to step {0}: {1}', i + 1, steps[i]?.title ?? '');
215
+ return (React.createElement("button", { key: i, type: 'button', className: 'user-interaction-tool progress-dot'
216
+ + (i < current ? ' done' : '')
217
+ + (i === current ? ' active' : ''), onClick: () => onSelect(i), title: label, "aria-label": label, "aria-current": i === current ? 'step' : undefined }));
218
+ })));
219
+ const LinkButton = ({ link, onClick }) => {
220
+ const isDiff = link.rightRef !== undefined;
221
+ const icon = isDiff ? (0, browser_1.codicon)('diff') : (0, browser_1.codicon)('go-to-file');
222
+ const left = (0, user_interaction_tool_2.resolveContentRef)(link.ref);
223
+ let label;
224
+ if (link.label) {
225
+ label = link.label;
226
+ }
227
+ else if (isDiff) {
228
+ label = (0, user_interaction_tool_2.buildDiffLabel)(left, (0, user_interaction_tool_2.resolveContentRef)(link.rightRef));
229
+ }
230
+ else {
231
+ label = (0, user_interaction_tool_2.isEmptyContentRef)(left)
232
+ ? (left.label || nls_1.nls.localize('theia/ai-ide/userInteractionEmpty', 'Empty'))
233
+ : left.path;
234
+ }
235
+ return (React.createElement("button", { className: 'user-interaction-tool link-button', onClick: onClick },
236
+ React.createElement("i", { className: icon }),
237
+ React.createElement("span", null, label)));
238
+ };
239
+ const UserInteractionWithConfirmation = (0, tool_confirmation_1.withToolCallConfirmation)(UserInteractionComponent);
240
+ const StreamingProgress = ({ title, stepCount }) => {
241
+ let label;
242
+ if (title && stepCount > 0) {
243
+ label = nls_1.nls.localize('theia/ai-ide/userInteractionPreparingSteps', 'Preparing: {0} ({1} steps)', title, stepCount);
244
+ }
245
+ else if (title) {
246
+ label = nls_1.nls.localize('theia/ai-ide/userInteractionPreparingTitle', 'Preparing: {0}', title);
247
+ }
248
+ else {
249
+ label = nls_1.nls.localize('theia/ai-ide/userInteractionPreparing', 'Preparing user interaction...');
250
+ }
251
+ return (React.createElement("div", { className: 'tool-call container' },
252
+ React.createElement("div", { className: 'tool-call header pending' },
253
+ React.createElement("span", { className: (0, browser_1.codicon)('comment-discussion') }),
254
+ React.createElement("span", { className: `${(0, browser_1.codicon)('loading')} theia-animation-spin` }),
255
+ React.createElement("span", { className: 'user-interaction-tool pending-text' }, label))));
256
+ };
257
+ const MalformedInteraction = ({ message }) => (React.createElement("div", { className: 'tool-call container' },
258
+ React.createElement("div", { className: 'tool-call header error' },
259
+ React.createElement("span", { className: (0, browser_1.codicon)('comment-discussion') }),
260
+ React.createElement("span", { className: 'user-interaction-tool title' }, nls_1.nls.localize('theia/ai-ide/userInteractionMalformed', 'User interaction could not be displayed'))),
261
+ React.createElement("div", { className: 'tool-call error-message' }, message)));
262
+ function parseToolErrorResult(raw) {
263
+ let candidate = raw;
264
+ if (typeof raw === 'string') {
265
+ try {
266
+ candidate = JSON.parse(raw);
267
+ }
268
+ catch {
269
+ return undefined;
270
+ }
271
+ }
272
+ if (candidate && typeof candidate === 'object' && typeof candidate.error === 'string') {
273
+ return candidate;
274
+ }
275
+ return undefined;
276
+ }
277
+ let UserInteractionToolRenderer = class UserInteractionToolRenderer {
278
+ canHandle(response) {
279
+ if (common_1.ToolCallChatResponseContent.is(response) && response.name === user_interaction_tool_2.USER_INTERACTION_FUNCTION_ID) {
280
+ return 20;
281
+ }
282
+ return -1;
283
+ }
284
+ render(response, parentNode) {
285
+ const args = (0, user_interaction_tool_2.parseUserInteractionArgs)(response.arguments);
286
+ if (!args || !response.id) {
287
+ // The tool already returned a result but the args don't validate: this
288
+ // is a malformed invocation (e.g., the agent sent a step the tool
289
+ // rejected, or arguments that fail shared parsing). Show an error state
290
+ // instead of a perpetual loading spinner.
291
+ if (response.result !== undefined) {
292
+ const error = parseToolErrorResult(response.result);
293
+ const message = error?.error
294
+ ?? nls_1.nls.localize('theia/ai-ide/userInteractionMalformedFallback', 'The arguments could not be parsed.');
295
+ return React.createElement(MalformedInteraction, { message: message });
296
+ }
297
+ const input = (0, user_interaction_tool_2.parseUserInteractionInput)(response.arguments);
298
+ return React.createElement(StreamingProgress, { title: input.title, stepCount: input.stepCount });
299
+ }
300
+ const chatId = parentNode.sessionId;
301
+ const toolRequest = this.toolInvocationRegistry.getFunction(user_interaction_tool_2.USER_INTERACTION_FUNCTION_ID);
302
+ const confirmationMode = this.toolConfirmationManager.getConfirmationMode(user_interaction_tool_2.USER_INTERACTION_FUNCTION_ID, chatId, toolRequest);
303
+ return (React.createElement(UserInteractionWithConfirmation, { args: args, toolCallId: response.id, tool: this.userInteractionTool, finished: response.finished, canceled: parentNode.response.isCanceled, responseComplete: parentNode.response.isComplete, result: (0, user_interaction_tool_2.parseUserInteractionResult)(response.result), openerService: this.openerService, response: response, confirmationMode: confirmationMode, toolConfirmationManager: this.toolConfirmationManager, toolRequest: toolRequest, chatId: chatId, requestCanceled: parentNode.response.isCanceled, contextMenuRenderer: this.contextMenuRenderer }));
304
+ }
305
+ };
306
+ exports.UserInteractionToolRenderer = UserInteractionToolRenderer;
307
+ tslib_1.__decorate([
308
+ (0, inversify_1.inject)(chat_tool_preference_bindings_1.ToolConfirmationManager),
309
+ tslib_1.__metadata("design:type", chat_tool_preference_bindings_1.ToolConfirmationManager)
310
+ ], UserInteractionToolRenderer.prototype, "toolConfirmationManager", void 0);
311
+ tslib_1.__decorate([
312
+ (0, inversify_1.inject)(browser_1.ContextMenuRenderer),
313
+ tslib_1.__metadata("design:type", browser_1.ContextMenuRenderer)
314
+ ], UserInteractionToolRenderer.prototype, "contextMenuRenderer", void 0);
315
+ tslib_1.__decorate([
316
+ (0, inversify_1.inject)(ai_core_1.ToolInvocationRegistry),
317
+ tslib_1.__metadata("design:type", Object)
318
+ ], UserInteractionToolRenderer.prototype, "toolInvocationRegistry", void 0);
319
+ tslib_1.__decorate([
320
+ (0, inversify_1.inject)(user_interaction_tool_1.UserInteractionTool),
321
+ tslib_1.__metadata("design:type", user_interaction_tool_1.UserInteractionTool)
322
+ ], UserInteractionToolRenderer.prototype, "userInteractionTool", void 0);
323
+ tslib_1.__decorate([
324
+ (0, inversify_1.inject)(browser_1.OpenerService),
325
+ tslib_1.__metadata("design:type", Object)
326
+ ], UserInteractionToolRenderer.prototype, "openerService", void 0);
327
+ exports.UserInteractionToolRenderer = UserInteractionToolRenderer = tslib_1.__decorate([
328
+ (0, inversify_1.injectable)()
329
+ ], UserInteractionToolRenderer);
330
+ //# sourceMappingURL=user-interaction-tool-renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-interaction-tool-renderer.js","sourceRoot":"","sources":["../../src/browser/user-interaction-tool-renderer.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import { ToolProvider, ToolRequest } from '@theia/ai-core';
2
+ import { ToolInvocationContext } from '@theia/ai-core/lib/common/language-model';
3
+ import { OpenerService } from '@theia/core/lib/browser';
4
+ import { Deferred } from '@theia/core/lib/common/promise-util';
5
+ import { ResourceProvider } from '@theia/core/lib/common/resource';
6
+ import URI from '@theia/core/lib/common/uri';
7
+ import { EditorManager } from '@theia/editor/lib/browser';
8
+ import { ScmService } from '@theia/scm/lib/browser/scm-service';
9
+ import { WorkspaceFunctionScope } from './workspace-functions';
10
+ import { ContentRef, PathContentRef, UserInteractionLink, UserInteractionStep, UserInteractionStepResult } from '../common/user-interaction-tool';
11
+ interface PendingInteraction {
12
+ deferred: Deferred<string>;
13
+ steps: UserInteractionStep[];
14
+ stepResults: UserInteractionStepResult[];
15
+ resolved: boolean;
16
+ }
17
+ export declare class UserInteractionTool implements ToolProvider {
18
+ static ID: string;
19
+ protected readonly openerService: OpenerService;
20
+ protected readonly editorManager: EditorManager;
21
+ protected readonly scmService: ScmService;
22
+ protected readonly workspaceScope: WorkspaceFunctionScope;
23
+ protected readonly resourceProvider: ResourceProvider;
24
+ protected readonly pendingInteractions: Map<string, PendingInteraction>;
25
+ getTool(): ToolRequest;
26
+ setStepResult(toolCallId: string, stepIndex: number, partial: Partial<UserInteractionStepResult>): void;
27
+ completeInteraction(toolCallId: string): void;
28
+ /**
29
+ * Set the result for a step and immediately complete the interaction.
30
+ * Use this to atomically pass the user's input value into the result, avoiding
31
+ * any reliance on synchronous state updates between `setStepResult` and `completeInteraction`.
32
+ */
33
+ completeInteractionWith(toolCallId: string, stepIndex: number, partial: Partial<UserInteractionStepResult>): void;
34
+ cancelInteraction(toolCallId: string): void;
35
+ protected normalizeStepResults(pending: PendingInteraction): UserInteractionStepResult[];
36
+ openLink(link: UserInteractionLink): Promise<void>;
37
+ protected resolveUri(ref: PathContentRef, workspaceRoot: URI): URI | undefined;
38
+ protected handleInteraction(argString: string, ctx: ToolInvocationContext | undefined): Promise<string>;
39
+ protected resolveDiffSideUri(ref: ContentRef, workspaceRoot: URI): Promise<URI>;
40
+ protected errorContentUri(path: string, gitRef: string): URI;
41
+ protected refNotFoundUri(path: string, gitRef: string): URI;
42
+ protected fileNotFoundUri(path: string): URI;
43
+ protected emptyContentUri(path: string): URI;
44
+ protected canResolveUri(uri: URI): Promise<boolean>;
45
+ }
46
+ export {};
47
+ //# sourceMappingURL=user-interaction-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-interaction-tool.d.ts","sourceRoot":"","sources":["../../src/browser/user-interaction-tool.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAuD,MAAM,gBAAgB,CAAC;AAChH,OAAO,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AAEjF,OAAO,EAAQ,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAC/D,OAAO,EAAqC,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACtG,OAAO,GAAG,MAAM,4BAA4B,CAAC;AAE7C,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EACH,UAAU,EAEV,cAAc,EACd,mBAAmB,EAEnB,mBAAmB,EACnB,yBAAyB,EAK5B,MAAM,iCAAiC,CAAC;AAEzC,UAAU,kBAAkB;IACxB,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC3B,KAAK,EAAE,mBAAmB,EAAE,CAAC;IAC7B,WAAW,EAAE,yBAAyB,EAAE,CAAC;IACzC,QAAQ,EAAE,OAAO,CAAC;CACrB;AA4GD,qBACa,mBAAoB,YAAW,YAAY;IACpD,MAAM,CAAC,EAAE,SAAgC;IAGzC,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IAGhD,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IAGhD,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAG1C,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,sBAAsB,CAAC;IAG1D,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAEtD,SAAS,CAAC,QAAQ,CAAC,mBAAmB,kCAAyC;IAE/E,OAAO,IAAI,WAAW;IAWtB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,yBAAyB,CAAC,GAAG,IAAI;IAgBvG,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAa7C;;;;OAIG;IACH,uBAAuB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,yBAAyB,CAAC,GAAG,IAAI;IAKjH,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAmB3C,SAAS,CAAC,oBAAoB,CAAC,OAAO,EAAE,kBAAkB,GAAG,yBAAyB,EAAE;IAIlF,QAAQ,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAkDxD,SAAS,CAAC,UAAU,CAChB,GAAG,EAAE,cAAc,EACnB,aAAa,EAAE,GAAG,GACnB,GAAG,GAAG,SAAS;cAeF,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,qBAAqB,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;cAmD7F,kBAAkB,CAAC,GAAG,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAkBrF,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,GAAG;IAO5D,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,GAAG;IAM3D,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG;IAK5C,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG;cAI5B,aAAa,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;CAe5D"}