@bogyie/opencode-kiro-plugin 0.2.10 → 0.2.11

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.
@@ -15,6 +15,12 @@ function conversationId(request) {
15
15
  return `opencode-${hash.toString(16)}-${Date.now().toString(36)}`;
16
16
  }
17
17
  export function toKiroRestPayload(request, profileArn) {
18
+ const toolResults = request.toolResults.map((item) => ({
19
+ toolUseId: item.toolUseId,
20
+ content: [{ text: item.content }],
21
+ status: "success",
22
+ ...(item.toolName ? { toolName: item.toolName } : {}),
23
+ }));
18
24
  const history = [
19
25
  ...(request.system
20
26
  ? [
@@ -54,6 +60,20 @@ export function toKiroRestPayload(request, profileArn) {
54
60
  origin: "AI_EDITOR",
55
61
  },
56
62
  }),
63
+ ...(toolResults.length > 0
64
+ ? [
65
+ {
66
+ userInputMessage: {
67
+ content: "",
68
+ modelId: request.modelId,
69
+ origin: "AI_EDITOR",
70
+ userInputMessageContext: {
71
+ toolResults,
72
+ },
73
+ },
74
+ },
75
+ ]
76
+ : []),
57
77
  ];
58
78
  const tools = request.tools.map((item) => ({
59
79
  toolSpecification: {
@@ -62,16 +82,9 @@ export function toKiroRestPayload(request, profileArn) {
62
82
  inputSchema: { json: item.inputSchema },
63
83
  },
64
84
  }));
65
- const toolResults = request.toolResults.map((item) => ({
66
- toolUseId: item.toolUseId,
67
- content: [{ text: item.content }],
68
- status: "success",
69
- ...(item.toolName ? { toolName: item.toolName } : {}),
70
- }));
71
- const userInputMessageContext = tools.length > 0 || toolResults.length > 0
85
+ const userInputMessageContext = tools.length > 0
72
86
  ? {
73
87
  ...(tools.length > 0 ? { tools } : {}),
74
- ...(toolResults.length > 0 ? { toolResults } : {}),
75
88
  }
76
89
  : undefined;
77
90
  const inferenceConfig = request.modelOptions.maxTokens !== undefined || request.modelOptions.temperature !== undefined
@@ -49,6 +49,12 @@ export function createCodeWhispererClient(options) {
49
49
  export function toGenerateAssistantResponseInput(request, options = {}) {
50
50
  const content = request.prompt;
51
51
  const modelFields = additionalModelRequestFields(request);
52
+ const toolResults = request.toolResults.map((item) => ({
53
+ toolUseId: item.toolUseId,
54
+ content: [{ text: item.content }],
55
+ status: "SUCCESS",
56
+ ...(item.toolName ? { toolName: item.toolName } : {}),
57
+ }));
52
58
  return {
53
59
  ...(options.profileArn ? { profileArn: options.profileArn } : {}),
54
60
  agentMode: options.agentMode ?? DEFAULT_AGENT_MODE,
@@ -87,6 +93,19 @@ export function toGenerateAssistantResponseInput(request, options = {}) {
87
93
  origin: "AI_EDITOR",
88
94
  },
89
95
  }),
96
+ ...(toolResults.length > 0
97
+ ? [
98
+ {
99
+ userInputMessage: {
100
+ content: "",
101
+ origin: "AI_EDITOR",
102
+ userInputMessageContext: {
103
+ toolResults,
104
+ },
105
+ },
106
+ },
107
+ ]
108
+ : []),
90
109
  ],
91
110
  currentMessage: {
92
111
  userInputMessage: {
@@ -110,7 +129,7 @@ export function toGenerateAssistantResponseInput(request, options = {}) {
110
129
  })),
111
130
  }
112
131
  : {}),
113
- userInputMessageContext: request.tools.length > 0 || request.toolResults.length > 0
132
+ userInputMessageContext: request.tools.length > 0
114
133
  ? {
115
134
  ...(request.tools.length > 0
116
135
  ? {
@@ -123,16 +142,6 @@ export function toGenerateAssistantResponseInput(request, options = {}) {
123
142
  })),
124
143
  }
125
144
  : {}),
126
- ...(request.toolResults.length > 0
127
- ? {
128
- toolResults: request.toolResults.map((item) => ({
129
- toolUseId: item.toolUseId,
130
- content: [{ text: item.content }],
131
- status: "SUCCESS",
132
- ...(item.toolName ? { toolName: item.toolName } : {}),
133
- })),
134
- }
135
- : {}),
136
145
  }
137
146
  : undefined,
138
147
  },
@@ -164,6 +164,17 @@ function trailingToolMessageIndexes(messages) {
164
164
  }
165
165
  return indexes;
166
166
  }
167
+ function previousAssistantIndexForTrailingTools(messages, trailingIndexes) {
168
+ if (trailingIndexes.size === 0)
169
+ return undefined;
170
+ for (let index = messages.length - 1; index >= 0; index -= 1) {
171
+ const message = messages[index];
172
+ if (!message || message.role === "system" || trailingIndexes.has(index))
173
+ continue;
174
+ return message.role === "assistant" ? index : undefined;
175
+ }
176
+ return undefined;
177
+ }
167
178
  function toolUses(message) {
168
179
  return (message.tool_calls ?? [])
169
180
  .map((toolCall) => {
@@ -222,6 +233,7 @@ export function toKiroGenerateRequest(request, resolver) {
222
233
  const resolved = resolver.resolve(request.model);
223
234
  const activeToolResults = toolResults(request.messages);
224
235
  const activeTrailingToolIndexes = activeToolResults.length > 0 ? trailingToolMessageIndexes(request.messages) : new Set();
236
+ const activeToolUseAssistantIndex = previousAssistantIndexForTrailingTools(request.messages, activeTrailingToolIndexes);
225
237
  const system = request.messages
226
238
  .filter((message) => message.role === "system")
227
239
  .map((message) => textFromContent(message.content))
@@ -232,7 +244,7 @@ export function toKiroGenerateRequest(request, resolver) {
232
244
  if (message.role === "system" || activeTrailingToolIndexes.has(index))
233
245
  continue;
234
246
  const content = textFromContent(message.content);
235
- const assistantToolUses = message.role === "assistant" ? toolUses(message) : [];
247
+ const assistantToolUses = message.role === "assistant" && index === activeToolUseAssistantIndex ? toolUses(message) : [];
236
248
  if (!content && assistantToolUses.length === 0)
237
249
  continue;
238
250
  turns.push({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bogyie/opencode-kiro-plugin",
3
- "version": "0.2.10",
3
+ "version": "0.2.11",
4
4
  "description": "OpenCode plugin for using Kiro as a provider adapter",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",