@taskless-app/swarm 0.6.12 → 0.6.13

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/cli.js CHANGED
@@ -2103,7 +2103,7 @@ var init_package = __esm({
2103
2103
  "package.json"() {
2104
2104
  package_default = {
2105
2105
  name: "@taskless-app/swarm",
2106
- version: "0.6.12",
2106
+ version: "0.6.13",
2107
2107
  type: "module",
2108
2108
  description: "Local control plane for a fleet of AI coding agents (drones), coordinating through Taskless. The overmind runs the swarm.",
2109
2109
  keywords: [
@@ -2153,7 +2153,7 @@ var init_package = __esm({
2153
2153
  execa: "^10.0.0",
2154
2154
  zod: "3.25.76"
2155
2155
  },
2156
- gitHead: "43c844efdbea61a27c54edc17a111d658ce6e2b4"
2156
+ gitHead: "ea3913bf66c52d730c25ad62b7090621a5006ee7"
2157
2157
  };
2158
2158
  }
2159
2159
  });
package/dist/overmind.js CHANGED
@@ -3500,6 +3500,7 @@ function bad(status, error) {
3500
3500
  function scopeOf(store, run) {
3501
3501
  const ids = /* @__PURE__ */ new Set([run.id]);
3502
3502
  if (run.reviews_run_id != null) ids.add(run.reviews_run_id);
3503
+ if (run.verifies_run_id != null) ids.add(run.verifies_run_id);
3503
3504
  if (run.kind === "hero") for (const r of store.squadRuns(run.id)) ids.add(r.id);
3504
3505
  return ids;
3505
3506
  }
@@ -3512,6 +3513,10 @@ function invalidPatchValue(field, v) {
3512
3513
  return typeof v === "string" && v in STATUS_META ? null : `\u043D\u0435\u0434\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u044B\u0439 \u0441\u0442\u0430\u0442\u0443\u0441: ${String(v)}`;
3513
3514
  case "review_verdict":
3514
3515
  return v === null || v === "approve" || v === "changes" ? null : `\u043D\u0435\u0434\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u044B\u0439 \u0432\u0435\u0440\u0434\u0438\u043A\u0442: ${String(v)}`;
3516
+ // TASWM-444: словарь исходов верификатора — один на весь продукт (swarm-core), поэтому
3517
+ // проверяем его же функцией, а не повторяем литералы третьим списком.
3518
+ case "verify_verdict":
3519
+ return v === null || isVerifyVerdict(v) ? null : `\u043D\u0435\u0434\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u044B\u0439 \u0432\u0435\u0440\u0434\u0438\u043A\u0442 \u0432\u0435\u0440\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440\u0430: ${String(v)}`;
3515
3520
  case "review_cycle":
3516
3521
  return typeof v === "number" && Number.isInteger(v) && v >= 0 ? null : `\u043D\u0435\u0434\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u044B\u0439 \u0446\u0438\u043A\u043B \u0440\u0435\u0432\u044C\u044E: ${String(v)}`;
3517
3522
  case "pr_url":
@@ -3775,7 +3780,16 @@ var init_droneChannel = __esm({
3775
3780
  "use strict";
3776
3781
  init_src();
3777
3782
  LOCAL_CLI_KEY = "cli";
3778
- PATCHABLE = /* @__PURE__ */ new Set(["status", "pr_url", "review_verdict", "review_cycle"]);
3783
+ PATCHABLE = /* @__PURE__ */ new Set([
3784
+ "status",
3785
+ "pr_url",
3786
+ "review_verdict",
3787
+ // TASWM-444: вердикт верификатора — такая же сдача работы, как review_verdict у ревьюера,
3788
+ // и пишется он тем же путём на ПРОВЕРЯЕМЫЙ прогон. Без него роль verifier была немой:
3789
+ // вердикт выносился комментарием на PR, а `done` отбивался каналом.
3790
+ "verify_verdict",
3791
+ "review_cycle"
3792
+ ]);
3779
3793
  EVENT_KIND_SET = new Set(EVENT_KINDS);
3780
3794
  ChannelUnavailableError = class extends Error {
3781
3795
  constructor(downMs, message) {
@@ -12187,7 +12201,7 @@ async function changedPaths(worktree, opts = {}) {
12187
12201
  // package.json
12188
12202
  var package_default = {
12189
12203
  name: "@taskless-app/swarm",
12190
- version: "0.6.12",
12204
+ version: "0.6.13",
12191
12205
  type: "module",
12192
12206
  description: "Local control plane for a fleet of AI coding agents (drones), coordinating through Taskless. The overmind runs the swarm.",
12193
12207
  keywords: [
@@ -12237,7 +12251,7 @@ var package_default = {
12237
12251
  execa: "^10.0.0",
12238
12252
  zod: "3.25.76"
12239
12253
  },
12240
- gitHead: "43c844efdbea61a27c54edc17a111d658ce6e2b4"
12254
+ gitHead: "ea3913bf66c52d730c25ad62b7090621a5006ee7"
12241
12255
  };
12242
12256
 
12243
12257
  // src/version.ts
@@ -14974,7 +14988,14 @@ async function prGateForReviewer(deps, run, prUrl, when) {
14974
14988
  }
14975
14989
  }
14976
14990
  function doneMergedPrForSlug(db, slug) {
14977
- const done = db.listRuns("done").find((r) => r.task_slug === slug && r.pr_url && r.kind !== "hero" && r.resolves_run_id == null && r.reviews_run_id == null);
14991
+ const done = db.listRuns("done").find(
14992
+ (r) => r.task_slug === slug && r.pr_url && r.kind !== "hero" && r.resolves_run_id == null && r.reviews_run_id == null && // TASWM-446: и НЕ верификатор. «done = смержено» верно только для прогона, который PR
14993
+ // делал; верификатор же заканчивает в `done`, держа `pr_url` ПРОВЕРЯЕМОГО — открытого —
14994
+ // PR, и его завершение читалось как доказательство мержа. Дальше pre-spawn гейт закрывал
14995
+ // исполнителя как дубль: 17.08 так погибли пять живых прогонов подряд, а задача после
14996
+ // этого не бралась вовсе — следующий дрон умирал на том же месте.
14997
+ r.verifies_run_id == null
14998
+ );
14978
14999
  return done?.pr_url ?? null;
14979
15000
  }
14980
15001
  async function closeDuplicateTaskRun(deps, run, mergedUrl) {
@@ -14993,7 +15014,8 @@ async function closeDuplicateTaskRun(deps, run, mergedUrl) {
14993
15014
  async function closeMergedTaskRuns(deps) {
14994
15015
  const bySlug = /* @__PURE__ */ new Map();
14995
15016
  for (const run of deps.db.listRuns()) {
14996
- if (run.kind === "hero" || run.resolves_run_id != null || run.reviews_run_id != null) continue;
15017
+ if (run.kind === "hero" || run.resolves_run_id != null || run.reviews_run_id != null || run.verifies_run_id != null)
15018
+ continue;
14997
15019
  let group = bySlug.get(run.task_slug);
14998
15020
  if (!group) bySlug.set(run.task_slug, group = []);
14999
15021
  group.push(run);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@taskless-app/swarm",
3
- "version": "0.6.12",
3
+ "version": "0.6.13",
4
4
  "type": "module",
5
5
  "description": "Local control plane for a fleet of AI coding agents (drones), coordinating through Taskless. The overmind runs the swarm.",
6
6
  "keywords": [
@@ -38,7 +38,7 @@
38
38
  "execa": "^10.0.0",
39
39
  "zod": "3.25.76"
40
40
  },
41
- "gitHead": "43c844efdbea61a27c54edc17a111d658ce6e2b4",
41
+ "gitHead": "ea3913bf66c52d730c25ad62b7090621a5006ee7",
42
42
  "scripts": {
43
43
  "overmind": "NODE_OPTIONS=\"${NODE_OPTIONS:-} --conditions=development\" tsx src/overmind.ts",
44
44
  "swarm": "NODE_OPTIONS=\"${NODE_OPTIONS:-} --conditions=development\" tsx src/cli.ts",