wildcrane-runner 0.6.10 → 0.6.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.
@@ -74,7 +74,7 @@ async function rules() {
74
74
  async function main() {
75
75
  const argv = process.argv.slice(2)
76
76
  const loaded = await rules()
77
- const shared = { program: PROGRAM, installHint: `\`${PROGRAM} install\`` }
77
+ const shared = { program: PROGRAM }
78
78
 
79
79
  const raw = loaded.rawArgv(argv)
80
80
  if (raw) {
@@ -23305,7 +23305,7 @@ var init_describe_project = __esm({
23305
23305
  var discuss_idea_default;
23306
23306
  var init_discuss_idea = __esm({
23307
23307
  "../cli/src/guide/discuss-idea.md"() {
23308
- discuss_idea_default = "# Help decide what is worth building\n\nYou are this workspace's **Idea helper**. Help the user decide what to build and shape it into\nideas they start as tasks. Read the current project's code and board when it helps, but never\nchange a file. Each turn takes one of three branches.\n\n## Draft ideas (default)\n\n\u4ECE\u5B8C\u6574\u5BF9\u8BDD\u4E2D\u4E00\u65E6\u5F62\u6210\u5177\u4F53\u4E14\u503C\u5F97\u505A\u7684\u4EA4\u4ED8\u76EE\u6807\uFF0C\u5C31\u5728\u5F53\u8F6E\u4FDD\u5B58\u4E3A\u60F3\u6CD5\uFF1B\u4FDD\u5B58\u4E0D\u4EE3\u8868\u7528\u6237\u627F\u8BFA\u5B9E\u65BD\u3002\n\n- **\u4FDD\u5B58\u60F3\u6CD5**\uFF1A\u901A\u8FC7 `akb raw idea new --title \"<title>\" --body-file <draft>` \u4FDD\u5B58\uFF1B\u540E\u7EED\u8BA8\u8BBA\u7528\n `akb raw idea save --id <idea> --body-file <draft>` \u66F4\u65B0\u5DF2\u6709\u60F3\u6CD5\u3002\u4EC5\u5728\u547D\u4EE4\u786E\u8BA4\u6210\u529F\u540E\u62A5\u544A\u3002\n- **Idea shape**: in the user's language, the outcome in at most 150 words, then a\n `## Done when` list of checks a reviewer can verify. No technical design.\n- **Pick the workflow**: add `--workflow <id>` naming the workflow in `akb workflow list` that\n does the work, judged by the work and not the topic, and `coding` when none fits; use the\n one the user names or picks. Call it by its listed name in the user's language.\n- **One idea per deliverable**: give separate deliverables separate ideas, and drop a replaced\n one with `akb raw idea drop --id <idea>`.\n- **Settle what you can**: decide the outcome questions you can judge and say which calls you\n made; ask only what the user alone can answer and would change the outcome, with the option\n you recommend.\n- **Finish the turn**: save the ideas and stop; never end by asking them to confirm or press\n **Start**.\n\n## Start on a go\n\nWhen the user tells you to go ahead, start the ideas they mean with\n`akb raw idea start --id <idea>`, drafting them first when needed, and say which tasks started.\n\n## Just answer\n\n\u6CA1\u6709\u5177\u4F53\u4E14\u503C\u5F97\u505A\u7684\u5DE5\u4F5C\u53EF\u4FDD\u5B58\uFF0C\u6216\u7528\u6237\u660E\u786E\u8981\u6C42\u53EA\u8BA8\u8BBA\u3001\u4E0D\u4FDD\u5B58\u60F3\u6CD5\u65F6\uFF0C\u53EA\u56DE\u7B54\u3002\n\n- **Answer first**: say whether it is worth doing and why; disagreeing, advising a pause, or\n asking for evidence is a complete answer. Read a reliable source before stating an external\n fact.\n\n## Always\n\n- **Plain words**: answer directly in the user's language, using everyday words.\n\n- **Hide machinery**: never mention plans, files, paths, commands, or the tools and connectors\n you run with, and refer to actions by their button labels.\n";
23308
+ discuss_idea_default = "# \u60F3\u6CD5\u8BA8\u8BBA\n\n\u50CF\u6CA1\u6709\u989D\u5916\u4E0A\u4E0B\u6587\u65F6\u4E00\u6837\u4E0E\u7528\u6237\u6C9F\u901A\uFF1B\u5B9E\u9645\u6784\u5EFA\u524D\u7684\u4EFB\u4F55\u5DE5\u4F5C\u90FD\u53EF\u4EE5\u505A\u3002\n\n- **\u6784\u5EFA\u8FB9\u754C**\uFF1A\u9700\u8981\u5B9E\u9645\u6784\u5EFA\u65F6\uFF0C\u7528 `akb raw idea` \u4FDD\u5B58\u6216\u66F4\u65B0\u60F3\u6CD5\uFF08\u53C2\u89C1 `akb raw idea --help`\uFF09\uFF0C\u7136\u540E\u505C\u6B62\uFF1B\u65E2\u6709\u6784\u5EFA\u6D41\u7A0B\u6CBF\u5F53\u524D\u4F1A\u8BDD\u7EE7\u7EED\uFF0C\u5E76\u9075\u5FAA\u9879\u76EE\u65E2\u6709\u6784\u5EFA\u8981\u6C42\u3002\n- **\u7F3A\u5931\u4FE1\u606F**\uFF1A\u6682\u65F6\u65E0\u6CD5\u5F62\u6210\u60F3\u6CD5\u65F6\uFF0C\u53EF\u4EE5\u5411\u7528\u6237\u8BE2\u95EE\u7F3A\u5931\u4FE1\u606F\u3002\n\n## Ideas\n\n- **\u60F3\u6CD5\u683C\u5F0F**\uFF1A\u6BCF\u4E2A\u60F3\u6CD5\u5305\u542B\u6807\u9898\u3001\u7528\u7528\u6237\u8BED\u8A00\u5199\u7684\u4E0D\u8D85\u8FC7 150 \u8BCD\u7684\u7ED3\u679C\uFF0C\u4EE5\u53CA\u5217\u51FA\u53EF\u9A8C\u8BC1\u9A8C\u6536\u9879\u7684 `## Done when`\uFF0C\u4E0D\u542B\u6280\u672F\u8BBE\u8BA1\u3002\n- **\u72EC\u7ACB\u4EA4\u4ED8**\uFF1A\u4E0D\u540C\u4EA4\u4ED8\u7269\u5206\u522B\u4FDD\u5B58\u4E3A\u60F3\u6CD5\uFF0C\u7528 `akb raw idea drop --id <idea>` \u5220\u9664\u88AB\u66FF\u6362\u7684\u60F3\u6CD5\u3002\n- **\u81EA\u884C\u5224\u65AD**\uFF1A\u81EA\u884C\u51B3\u5B9A\u80FD\u591F\u5224\u65AD\u7684\u7ED3\u679C\u95EE\u9898\uFF0C\u5E76\u8BF4\u660E\u6240\u4F5C\u51B3\u5B9A\uFF1B\u53EA\u95EE\u7528\u6237\u624D\u80FD\u56DE\u7B54\u4E14\u4F1A\u6539\u53D8\u7ED3\u679C\u7684\u95EE\u9898\uFF0C\u540C\u65F6\u7ED9\u51FA\u63A8\u8350\u9009\u9879\u3002\n- **\u76F4\u767D\u8868\u8FBE**\uFF1A\u7528\u7528\u6237\u7684\u8BED\u8A00\u548C\u65E5\u5E38\u7528\u8BED\u76F4\u63A5\u56DE\u7B54\u3002\n- **\u9690\u85CF\u5185\u90E8\u64CD\u4F5C**\uFF1A\u4E0D\u63D0\u53CA\u8BA1\u5212\u3001\u6587\u4EF6\u3001\u8DEF\u5F84\u3001\u547D\u4EE4\u6216\u4F7F\u7528\u7684\u5DE5\u5177\u4E0E\u8FDE\u63A5\u5668\uFF1B\u4EE5\u6309\u94AE\u540D\u79F0\u6307\u4EE3\u64CD\u4F5C\u3002\n";
23309
23309
  }
23310
23310
  });
23311
23311
 
package/dist/launcher.mjs CHANGED
@@ -1,4 +1,4 @@
1
- // wildcrane-runner 0.6.10 — built by runner/scripts/build.mjs. Do not edit.
1
+ // wildcrane-runner 0.6.11 — built by runner/scripts/build.mjs. Do not edit.
2
2
  import { createRequire as __ai4kanbanRequire } from 'node:module'
3
3
  const require = __ai4kanbanRequire(import.meta.url)
4
4
 
@@ -107,7 +107,7 @@ function status(line) {
107
107
  }
108
108
 
109
109
  // src/protocol.ts
110
- var VERSION = true ? "0.6.10" : "0.0.0";
110
+ var VERSION = true ? "0.6.11" : "0.0.0";
111
111
  var EXIT_REFUSED = 10;
112
112
  var EXIT_OUTDATED = 11;
113
113
  var EXIT_UPDATE = 12;
package/dist/runner.mjs CHANGED
@@ -1,4 +1,4 @@
1
- // wildcrane-runner 0.6.10 — built by runner/scripts/build.mjs. Do not edit.
1
+ // wildcrane-runner 0.6.11 — built by runner/scripts/build.mjs. Do not edit.
2
2
  import { createRequire as __ai4kanbanRequire } from 'node:module'
3
3
  const require = __ai4kanbanRequire(import.meta.url)
4
4
  var __create = Object.create;
@@ -84435,7 +84435,7 @@ function status(line) {
84435
84435
  }
84436
84436
 
84437
84437
  // src/protocol.ts
84438
- var VERSION = true ? "0.6.10" : "0.0.0";
84438
+ var VERSION = true ? "0.6.11" : "0.0.0";
84439
84439
  var AKB_VERSION = true ? "0.11.8" : "0.0.0";
84440
84440
  var AKB_CONTRACT = true ? 4 : 0;
84441
84441
  var EXIT_REFUSED = 10;
@@ -88228,7 +88228,7 @@ var secretsSet = () => Object.fromEntries(Object.entries(readAll()).map(([id, ke
88228
88228
 
88229
88229
  // src/api.ts
88230
88230
  var RUNTIMES = ["claude-code", "codex", "cursor", "opencode", "kimi", "dsh", "zcode", "grok"];
88231
- var PROTOCOL = 12;
88231
+ var PROTOCOL = 13;
88232
88232
  var TIMEOUT_MS = 2e4;
88233
88233
  async function send(method, route, body, signedIn, ms, type) {
88234
88234
  const headers = { accept: "application/json" };
@@ -92766,17 +92766,6 @@ function progressEvidence(job, folder) {
92766
92766
  return null;
92767
92767
  }
92768
92768
  }
92769
- function checkProgress(job) {
92770
- const folder = authorizedFolder(job.projectDir);
92771
- if (!folder) return { handoffIssue: "folder_unavailable" };
92772
- if (!job.handoff?.started) return {};
92773
- const progress = progressFolder(job, folder);
92774
- if (!progress) return { handoffIssue: "progress_missing" };
92775
- const evidence = progressEvidence({ ...job, flow: { verb: job.handoff.verb ?? "implement", workflow: job.workflow ?? "" } }, progress);
92776
- if (!evidence) return { handoffIssue: "progress_missing" };
92777
- if (!job.handoff.evidence || evidence !== job.handoff.evidence) return { handoffIssue: "progress_unknown", evidence };
92778
- return { evidence };
92779
- }
92780
92769
  function restartFolder(job, folder) {
92781
92770
  const token = job.handoff?.isolation ?? job.id;
92782
92771
  if (!/^[a-zA-Z0-9-]{1,80}$/.test(token)) throw new Error("\u9694\u79BB\u76EE\u5F55\u7F16\u53F7\u65E0\u6548\u3002");
@@ -93287,18 +93276,14 @@ async function runClaimed(job, deps, track, keep2, lease) {
93287
93276
  }
93288
93277
  if (recovering && checkpoint.session) job = { ...job, resume: checkpoint.session, fork: false };
93289
93278
  if (!recovering) persist();
93290
- if (job.handoff?.kind === "check") {
93291
- const runtime = (await deps.runtimes()).find((r2) => r2.name === job.runtime);
93292
- const report2 = !runtime?.installed || runtime.loggedIn === false ? { handoffIssue: "runtime_unavailable" } : checkProgress(job);
93293
- return finish(deps, id, lease, "done", "", report2);
93294
- }
93295
93279
  if (job.handoff?.kind === "execution") {
93296
93280
  if (recovering) job = { ...job, handoff: { ...job.handoff, recovering: true } };
93297
93281
  const handoff = job.handoff;
93298
93282
  const runtime = (await deps.runtimes()).find((r2) => r2.name === job.runtime);
93299
- if (!runtime?.installed || runtime.loggedIn === false) return finish(deps, id, lease, "failed", "\u76EE\u6807\u8FD0\u884C\u5DE5\u5177\u5DF2\u4E0D\u53EF\u7528\uFF0C\u8BF7\u91CD\u65B0\u68C0\u67E5\u3002");
93283
+ if (!runtime?.installed || runtime.loggedIn === false) return finish(deps, id, lease, "failed", "\u76EE\u6807\u8FD0\u884C\u5DE5\u5177\u5DF2\u4E0D\u53EF\u7528\uFF0C\u8BF7\u5B89\u88C5\u5E76\u767B\u5F55\u540E\u91CD\u8BD5\u3002");
93300
93284
  const folder2 = authorizedFolder(job.projectDir);
93301
93285
  if (!folder2) return finish(deps, id, lease, "failed", "\u76EE\u6807\u76EE\u5F55\u6388\u6743\u5DF2\u53D8\u5316\u3002");
93286
+ if (handoff.action === "runtime") job = { ...job, projectDir: folder2, resume: null, fork: false };
93302
93287
  if (handoff.action === "continue") {
93303
93288
  const progress = progressFolder(job, folder2);
93304
93289
  if (!progress || !handoff.recovering && (!handoff.evidence || progressEvidence({ ...job, flow: job.flow ? { ...job.flow, verb: handoff.verb ?? job.flow.verb } : job.flow }, progress) !== handoff.evidence)) {
@@ -93452,7 +93437,7 @@ ${prompt}` : prompt;
93452
93437
  await stream.end();
93453
93438
  if (stream.lost()) return;
93454
93439
  const boardStopped = await confirmFlowStopped(ws, job, deps);
93455
- const evidence = progressEvidence(job, ws.cwd);
93440
+ const evidence = job.handoff?.action === "continue" || job.handoff?.action === "restart" ? progressEvidence(job, ws.cwd) : null;
93456
93441
  const proof = boardStopped && await stream.confirmed() ? { processesStopped: true, ...evidence ? { evidence } : {} } : {};
93457
93442
  if (ended3.ok) complete("done", { ...ended3.report, ...proof });
93458
93443
  if (stopped2) return finish(deps, id, lease, "stopped", "", proof);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wildcrane-runner",
3
- "version": "0.6.10",
3
+ "version": "0.6.11",
4
4
  "description": "WildCrane's Local Runner \u2014 connects this computer to WildCrane and runs its jobs on your local Claude Code, Codex, OpenCode or Cursor.",
5
5
  "license": "FSL-1.1-ALv2",
6
6
  "homepage": "https://wildcrane.ai/",