wildcrane-runner 0.6.9 → 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.
- package/dist/akb/bin/ai4kanban.mjs +1 -1
- package/dist/akb/dist/kanban.mjs +1 -1
- package/dist/launcher.mjs +2 -2
- package/dist/runner.mjs +15 -28
- package/package.json +1 -1
|
@@ -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
|
|
77
|
+
const shared = { program: PROGRAM }
|
|
78
78
|
|
|
79
79
|
const raw = loaded.rawArgv(argv)
|
|
80
80
|
if (raw) {
|
package/dist/akb/dist/kanban.mjs
CHANGED
|
@@ -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 = "#
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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 =
|
|
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\
|
|
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)) {
|
|
@@ -93315,7 +93300,7 @@ async function runClaimed(job, deps, track, keep2, lease) {
|
|
|
93315
93300
|
}
|
|
93316
93301
|
}
|
|
93317
93302
|
if (job.secret) return runSecret(job, deps);
|
|
93318
|
-
if (job.test) return runTest(job, deps);
|
|
93303
|
+
if (job.test) return runTest(job, deps, lease);
|
|
93319
93304
|
if (job.agent) return runAgentJob(job, deps, track, keep2, lease, checkpoint, persist);
|
|
93320
93305
|
const task = job.task ?? job.review?.tasks[0] ?? null;
|
|
93321
93306
|
const folder = task && !job.projectDir ? null : folderFor(job);
|
|
@@ -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);
|
|
@@ -93656,9 +93641,11 @@ async function runSecret(job, deps) {
|
|
|
93656
93641
|
}
|
|
93657
93642
|
await deps.api.finishJob(deps.machineId, job.id, "done", "");
|
|
93658
93643
|
}
|
|
93659
|
-
async function runTest(job, deps) {
|
|
93644
|
+
async function runTest(job, deps, lease) {
|
|
93660
93645
|
const finish2 = async (outcome, reason, ms2) => {
|
|
93661
|
-
await
|
|
93646
|
+
if (!await ended(deps, job.id, lease, outcome, reason, ms2 === void 0 ? void 0 : { ms: ms2 })) {
|
|
93647
|
+
console.error(`runner: connection test ${job.id}: Cloud did not accept the result.`);
|
|
93648
|
+
}
|
|
93662
93649
|
};
|
|
93663
93650
|
const report2 = (await deps.runtimes()).find((r2) => r2.name === job.runtime);
|
|
93664
93651
|
if (!report2?.installed) return finish2("failed", "not_installed");
|
|
@@ -93686,7 +93673,7 @@ async function runTest(job, deps) {
|
|
|
93686
93673
|
return end.ok ? finish2("done", "", ms2) : finish2("failed", (end.error || "The connector stopped.").slice(0, 300), ms2);
|
|
93687
93674
|
}
|
|
93688
93675
|
const renderer = run2.renderer;
|
|
93689
|
-
const
|
|
93676
|
+
const exited = await new Promise((resolve2) => {
|
|
93690
93677
|
let said = "";
|
|
93691
93678
|
const child = spawn4(run2.command, run2.args, { cwd, env: run2.env, detached: process.platform !== "win32", stdio: ["pipe", "pipe", "pipe"] });
|
|
93692
93679
|
const timer = setTimeout(() => {
|
|
@@ -93718,10 +93705,10 @@ async function runTest(job, deps) {
|
|
|
93718
93705
|
});
|
|
93719
93706
|
});
|
|
93720
93707
|
const ms = Date.now() - startedAt;
|
|
93721
|
-
if (
|
|
93722
|
-
if (
|
|
93708
|
+
if (exited.timedOut) return finish2("failed", "timeout", ms);
|
|
93709
|
+
if (exited.error?.code === "ENOENT") return finish2("failed", "not_installed");
|
|
93723
93710
|
renderer.flush();
|
|
93724
|
-
const failure =
|
|
93711
|
+
const failure = exited.error?.message ?? renderer.failure?.() ?? (exited.code === 0 ? void 0 : exited.said.trim().split("\n").at(-1) || `Exited with code ${exited.code}.`);
|
|
93725
93712
|
if (failure) return finish2("failed", failure.slice(0, 300), ms);
|
|
93726
93713
|
return finish2("done", "", ms);
|
|
93727
93714
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "wildcrane-runner",
|
|
3
|
-
"version": "0.6.
|
|
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/",
|