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
- return wrap(await client.request("POST", "/api/tasks/start", args));
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
- return wrap(await client.request("POST", "/api/workflows", args));
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 "${BLUEKIWI_URL:-http://localhost:3100}/workflows/${WORKFLOW_ID}"
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
- 🔗 ${BLUEKIWI_URL}/workflows/${WORKFLOW_ID}
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 "${BLUEKIWI_URL:-http://localhost:3100}/workflows/${WORKFLOW_ID}"
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 "${BLUEKIWI_URL:-http://localhost:3100}/tasks/${TASK_ID}"
212
+ open "${WEBUI_URL}/tasks/${TASK_ID}"
206
213
  ```
207
214
 
208
- Use `open` on macOS, `xdg-open` on Linux. Derive `BLUEKIWI_URL` from the MCP connection or default to `http://localhost:3100`.
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: ${BLUEKIWI_URL}/tasks/${TASK_ID}
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 "${BLUEKIWI_URL:-http://localhost:3100}/tasks/${TASK_ID}?step=${STEP_ORDER}&vs=true"
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:
@@ -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\][\s\S]*?(?=\n\[|$)/g, "");
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\][\s\S]*?(?=\n\[|$)/g, ""));
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)) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bluekiwi",
3
- "version": "0.3.9",
3
+ "version": "0.3.11",
4
4
  "description": "BlueKiwi CLI — install MCP client and skills into your agent runtime",
5
5
  "license": "MIT",
6
6
  "repository": {