bluekiwi 0.3.9 → 0.3.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.
|
@@ -21101,10 +21101,11 @@ var tools = [
|
|
|
21101
21101
|
),
|
|
21102
21102
|
tool(
|
|
21103
21103
|
"start_workflow",
|
|
21104
|
-
"Start a task from a workflow id. Optionally pin a specific version within the same family. Starting against an archived (inactive) version fails with HTTP 409.",
|
|
21104
|
+
"Start a task from a workflow id. Optionally pin a specific version within the same family. Starting against an archived (inactive) version fails with HTTP 409. Pass a short `title` (max 60 chars, derived from the user's goal) so the task list shows a meaningful label instead of the raw prompt.",
|
|
21105
21105
|
{
|
|
21106
21106
|
workflow_id: { type: "number" },
|
|
21107
21107
|
version: { type: "string" },
|
|
21108
|
+
title: { type: "string" },
|
|
21108
21109
|
context: { type: "string" },
|
|
21109
21110
|
session_meta: { type: "string" },
|
|
21110
21111
|
target: { type: "object" }
|
|
@@ -21679,7 +21680,14 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
21679
21680
|
}
|
|
21680
21681
|
args.provider_slug = providerSlug;
|
|
21681
21682
|
args.model_slug = modelSlug;
|
|
21682
|
-
|
|
21683
|
+
const started = await client.request("POST", "/api/tasks/start", args);
|
|
21684
|
+
const startedTaskId = started?.data?.task_id;
|
|
21685
|
+
return wrap({
|
|
21686
|
+
...started,
|
|
21687
|
+
...startedTaskId !== void 0 && {
|
|
21688
|
+
webui_url: `${apiUrl.replace(/\/$/, "")}/tasks/${startedTaskId}`
|
|
21689
|
+
}
|
|
21690
|
+
});
|
|
21683
21691
|
}
|
|
21684
21692
|
case "execute_step": {
|
|
21685
21693
|
const taskId = requireNumberArg(args, "task_id");
|
|
@@ -21831,8 +21839,20 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
21831
21839
|
await client.request("DELETE", `/api/instructions/${instructionId}`)
|
|
21832
21840
|
);
|
|
21833
21841
|
}
|
|
21834
|
-
case "create_workflow":
|
|
21835
|
-
|
|
21842
|
+
case "create_workflow": {
|
|
21843
|
+
const created = await client.request(
|
|
21844
|
+
"POST",
|
|
21845
|
+
"/api/workflows",
|
|
21846
|
+
args
|
|
21847
|
+
);
|
|
21848
|
+
const createdId = created?.data?.id;
|
|
21849
|
+
return wrap({
|
|
21850
|
+
...created,
|
|
21851
|
+
...createdId !== void 0 && {
|
|
21852
|
+
webui_url: `${apiUrl.replace(/\/$/, "")}/workflows/${createdId}`
|
|
21853
|
+
}
|
|
21854
|
+
});
|
|
21855
|
+
}
|
|
21836
21856
|
case "update_workflow": {
|
|
21837
21857
|
const workflowId = requireNumberArg(args, "workflow_id");
|
|
21838
21858
|
const body = { ...args };
|
|
@@ -113,9 +113,11 @@ Call `create_workflow`:
|
|
|
113
113
|
On success, open the workflow detail page in the browser:
|
|
114
114
|
|
|
115
115
|
```bash
|
|
116
|
-
open "${
|
|
116
|
+
open "${WEBUI_URL}/workflows/${WORKFLOW_ID}"
|
|
117
117
|
```
|
|
118
118
|
|
|
119
|
+
`WEBUI_URL` = the `webui_url` field returned by `create_workflow`.
|
|
120
|
+
|
|
119
121
|
Then display:
|
|
120
122
|
|
|
121
123
|
```
|
|
@@ -123,7 +125,7 @@ Then display:
|
|
|
123
125
|
Name: <title> (ID: <id>)
|
|
124
126
|
Steps: <n>
|
|
125
127
|
Version: 1.0
|
|
126
|
-
🔗 ${
|
|
128
|
+
🔗 ${WEBUI_URL}/workflows/${WORKFLOW_ID}
|
|
127
129
|
|
|
128
130
|
Type `/bk-run` to execute it now.
|
|
129
131
|
```
|
|
@@ -154,9 +154,11 @@ Changed steps: <n>
|
|
|
154
154
|
Open the workflow detail page in the browser:
|
|
155
155
|
|
|
156
156
|
```bash
|
|
157
|
-
open "${
|
|
157
|
+
open "${WEBUI_URL}/workflows/${WORKFLOW_ID}"
|
|
158
158
|
```
|
|
159
159
|
|
|
160
|
+
`WEBUI_URL` = the `webui_url` field returned by `update_workflow` or `create_workflow`.
|
|
161
|
+
|
|
160
162
|
Ask via AskUserQuestion:
|
|
161
163
|
|
|
162
164
|
- header: "Run now?"
|
|
@@ -198,14 +198,21 @@ If the user selects "Create new workflow" from the selection UI → invoke `bk-d
|
|
|
198
198
|
|
|
199
199
|
Call `start_workflow`. Pass any argument as `context`.
|
|
200
200
|
|
|
201
|
+
<HARD-RULE>
|
|
202
|
+
Always derive a short `title` (max 60 chars) from the user's goal or argument and pass it alongside `context`.
|
|
203
|
+
- If the argument is short (≤60 chars): use it as-is.
|
|
204
|
+
- If longer: distill the core topic into a concise noun phrase (e.g. "Hermes AI 아티클 생성" not the full paragraph).
|
|
205
|
+
- Never pass the raw prompt verbatim when it exceeds 60 characters.
|
|
206
|
+
</HARD-RULE>
|
|
207
|
+
|
|
201
208
|
<HARD-RULE>
|
|
202
209
|
After `start_workflow` returns the task_id, immediately open the task monitoring page in the user's browser:
|
|
203
210
|
|
|
204
211
|
```bash
|
|
205
|
-
open "${
|
|
212
|
+
open "${WEBUI_URL}/tasks/${TASK_ID}"
|
|
206
213
|
```
|
|
207
214
|
|
|
208
|
-
Use `open` on macOS, `xdg-open` on Linux.
|
|
215
|
+
`WEBUI_URL` = the `webui_url` field returned by `start_workflow`. Use `open` on macOS, `xdg-open` on Linux.
|
|
209
216
|
</HARD-RULE>
|
|
210
217
|
|
|
211
218
|
### 3. Execute First Step + Auto-Advance Loop
|
|
@@ -221,7 +228,7 @@ Starting: {workflow title} ({n} steps)
|
|
|
221
228
|
━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
222
229
|
**1** → 2 → 3 → 4 → 5 → 6 → 7
|
|
223
230
|
━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
224
|
-
📺 Live: ${
|
|
231
|
+
📺 Live: ${WEBUI_URL}/tasks/${TASK_ID}
|
|
225
232
|
━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
226
233
|
```
|
|
227
234
|
|
|
@@ -286,7 +293,7 @@ but agent-authored content must match the user's locale.
|
|
|
286
293
|
2. Call `set_visual_html(task_id, node_id, html)` with the fragment.
|
|
287
294
|
3. Open the VS deep link so the user sees the selection UI immediately:
|
|
288
295
|
```bash
|
|
289
|
-
open "${
|
|
296
|
+
open "${WEBUI_URL}/tasks/${TASK_ID}?step=${STEP_ORDER}&vs=true"
|
|
290
297
|
```
|
|
291
298
|
4. Poll `get_web_response(task_id)` every 3-5 seconds until a response arrives (max 120 seconds).
|
|
292
299
|
5. The response is a **JSON object** (not a plain string). Parse it to read the user's choices:
|
package/dist/runtimes/codex.js
CHANGED
|
@@ -36,13 +36,13 @@ export class CodexAdapter {
|
|
|
36
36
|
const existing = existsSync(MCP_CONFIG)
|
|
37
37
|
? readFileSync(MCP_CONFIG, "utf8")
|
|
38
38
|
: "";
|
|
39
|
-
const stripped = existing.replace(/\n?\[mcp_servers\.bluekiwi
|
|
39
|
+
const stripped = existing.replace(/\n?\[mcp_servers\.bluekiwi[\s\S]*?(?=\n\[(?!mcp_servers\.bluekiwi)|$)/g, "");
|
|
40
40
|
writeFileSync(MCP_CONFIG, stripped + snippet);
|
|
41
41
|
}
|
|
42
42
|
uninstall() {
|
|
43
43
|
if (existsSync(MCP_CONFIG)) {
|
|
44
44
|
const existing = readFileSync(MCP_CONFIG, "utf8");
|
|
45
|
-
writeFileSync(MCP_CONFIG, existing.replace(/\n?\[mcp_servers\.bluekiwi
|
|
45
|
+
writeFileSync(MCP_CONFIG, existing.replace(/\n?\[mcp_servers\.bluekiwi[\s\S]*?(?=\n\[(?!mcp_servers\.bluekiwi)|$)/g, ""));
|
|
46
46
|
}
|
|
47
47
|
if (existsSync(SKILLS_DIR)) {
|
|
48
48
|
for (const entry of readdirSync(SKILLS_DIR)) {
|