@taskless-app/swarm 0.6.35 → 0.6.36
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 +2 -2
- package/dist/overmind.js +77 -29
- package/package.json +2 -2
package/dist/cli.js
CHANGED
|
@@ -3274,7 +3274,7 @@ var init_package = __esm({
|
|
|
3274
3274
|
"package.json"() {
|
|
3275
3275
|
package_default = {
|
|
3276
3276
|
name: "@taskless-app/swarm",
|
|
3277
|
-
version: "0.6.
|
|
3277
|
+
version: "0.6.36",
|
|
3278
3278
|
type: "module",
|
|
3279
3279
|
description: "Local control plane for a fleet of AI coding agents (drones), coordinating through Taskless. The overmind runs the swarm.",
|
|
3280
3280
|
keywords: [
|
|
@@ -3325,7 +3325,7 @@ var init_package = __esm({
|
|
|
3325
3325
|
execa: "^10.0.0",
|
|
3326
3326
|
zod: "3.25.76"
|
|
3327
3327
|
},
|
|
3328
|
-
gitHead: "
|
|
3328
|
+
gitHead: "2d673b2bafb12ef0ced20b2469d798f7ae712b3a"
|
|
3329
3329
|
};
|
|
3330
3330
|
}
|
|
3331
3331
|
});
|
package/dist/overmind.js
CHANGED
|
@@ -11863,7 +11863,7 @@ function parkReasonUnretriable(reason) {
|
|
|
11863
11863
|
// package.json
|
|
11864
11864
|
var package_default = {
|
|
11865
11865
|
name: "@taskless-app/swarm",
|
|
11866
|
-
version: "0.6.
|
|
11866
|
+
version: "0.6.36",
|
|
11867
11867
|
type: "module",
|
|
11868
11868
|
description: "Local control plane for a fleet of AI coding agents (drones), coordinating through Taskless. The overmind runs the swarm.",
|
|
11869
11869
|
keywords: [
|
|
@@ -11914,7 +11914,7 @@ var package_default = {
|
|
|
11914
11914
|
execa: "^10.0.0",
|
|
11915
11915
|
zod: "3.25.76"
|
|
11916
11916
|
},
|
|
11917
|
-
gitHead: "
|
|
11917
|
+
gitHead: "2d673b2bafb12ef0ced20b2469d798f7ae712b3a"
|
|
11918
11918
|
};
|
|
11919
11919
|
|
|
11920
11920
|
// src/version.ts
|
|
@@ -14228,8 +14228,8 @@ function buildAnomalyCandidates(db, now, thresholds, opts) {
|
|
|
14228
14228
|
runId: run.id,
|
|
14229
14229
|
// В ЛЕНТУ, не пушем (TASWM-417). Раньше тут стоял "decision" с обоснованием «рой
|
|
14230
14230
|
// этого сам не расшивает» — оно перестало быть правдой ровно на том же пороге:
|
|
14231
|
-
// wakeAuthorOnChanges поднимает автора
|
|
14232
|
-
//
|
|
14231
|
+
// wakeAuthorOnChanges поднимает автора свежей сессией с брифом фикс-итерации
|
|
14232
|
+
// (TASWM-539; до неё — `--continue`). Значит в момент, когда это правило
|
|
14233
14233
|
// созревает, рой УЖЕ действует, и пуш звал бы человека к работе, которую делают
|
|
14234
14234
|
// без него — ровно тот шум, из-за которого настоящие сигналы тонут. Настоящий
|
|
14235
14235
|
// «нужен человек» приходит отдельно и позже: рой исчерпал побудки (маркер
|
|
@@ -17580,6 +17580,7 @@ var CHANGES_WAKE_COOLDOWN_MS = Number(process.env.SWARM_CHANGES_WAKE_COOLDOWN_MS
|
|
|
17580
17580
|
var CHANGES_WAKE_LIMIT = Number(process.env.SWARM_CHANGES_WAKE_LIMIT) || 2;
|
|
17581
17581
|
var CHANGES_FRESH_WAKE_AFTER_MS = Number(process.env.SWARM_CHANGES_FRESH_WAKE_AFTER_MS) || SWARM_ANOMALY_PR_NO_REVIEWER_MS;
|
|
17582
17582
|
var CHANGES_WAKE_MARK = "\u0444\u0438\u043A\u0441-\u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044F \u043F\u043E \u0432\u0435\u0440\u0434\u0438\u043A\u0442\u0443 \xAB\u043D\u0443\u0436\u043D\u044B \u043F\u0440\u0430\u0432\u043A\u0438\xBB";
|
|
17583
|
+
var CHANGES_FIX_COST_MARK = "\u0442\u0440\u0430\u0442\u044B \u0434\u043E \u0444\u0438\u043A\u0441-\u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438";
|
|
17583
17584
|
var CHANGES_WAKE_FAILED_MARK = "\u043F\u043E\u0431\u0443\u0434\u043A\u0430 \u0441\u043E\u0440\u0432\u0430\u043B\u0430\u0441\u044C";
|
|
17584
17585
|
var BUDGET_STOP_REASON = "\u043D\u0435 \u0443\u043B\u043E\u0436\u0438\u043B\u0441\u044F \u0432 \u043F\u043E\u0442\u043E\u043B\u043E\u043A \u0442\u0440\u0430\u0442: \u0441\u0435\u0441\u0441\u0438\u044E \u043E\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u043B \u0431\u044E\u0434\u0436\u0435\u0442 \u043F\u0440\u043E\u0433\u043E\u043D\u0430";
|
|
17585
17586
|
var NO_AUTO_WAKE_REASONS = [EXITED_NO_DONE_REASON, BUDGET_STOP_REASON, ABORTED_STOP_REASON];
|
|
@@ -18102,19 +18103,55 @@ function buildCiReadyNudge(prUrl, over) {
|
|
|
18102
18103
|
"\u0412\u043E\u043F\u0440\u043E\u0441\u043E\u0432 \u0432 stdout \u043D\u0435 \u0437\u0430\u0434\u0430\u0432\u0430\u0439 \u2014 \u0442\u043E\u043B\u044C\u043A\u043E \u0447\u0435\u0440\u0435\u0437 MCP-\u0442\u0443\u043B ask."
|
|
18103
18104
|
].join("\n");
|
|
18104
18105
|
}
|
|
18105
|
-
function
|
|
18106
|
+
function buildChangesFixPrompt(args) {
|
|
18107
|
+
const { prUrl, slug, branch, base: base3, worktree, verdict } = args;
|
|
18108
|
+
const baseRef = base3 ? `origin/${base3}` : "origin/HEAD";
|
|
18106
18109
|
return [
|
|
18107
|
-
`\
|
|
18110
|
+
`\u0422\u044B \u2014 \u0434\u0440\u043E\u043D ${args.name || "\u0440\u043E\u044F"}, headless-\u0438\u0441\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C (\u041D\u0415 \u0438\u043D\u0442\u0435\u0440\u0430\u043A\u0442\u0438\u0432\u043D\u044B\u0439 \u0447\u0430\u0442). \u041A\u043E\u043C\u043C\u0438\u0442\u044B \u043F\u043E\u0434\u043F\u0438\u0441\u0430\u043D\u044B \u044D\u0442\u0438\u043C \u0438\u043C\u0435\u043D\u0435\u043C \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438.`,
|
|
18108
18111
|
"",
|
|
18109
|
-
|
|
18110
|
-
|
|
18112
|
+
HEADLESS_BLOCK,
|
|
18113
|
+
"",
|
|
18114
|
+
`\u{1F7E0} \u0424\u0418\u041A\u0421-\u0418\u0422\u0415\u0420\u0410\u0426\u0418\u042F \u043F\u043E ${slug}. \u0420\u0435\u0432\u044C\u044E\u0435\u0440 \u0432\u044B\u043D\u0435\u0441 \u043F\u043E PR ${prUrl} \u0432\u0435\u0440\u0434\u0438\u043A\u0442 \xAB\u043D\u0443\u0436\u043D\u044B \u043F\u0440\u0430\u0432\u043A\u0438\xBB.`,
|
|
18115
|
+
"",
|
|
18116
|
+
"\u0422\u044B \u0421\u0412\u0415\u0416\u0418\u0419 \u0434\u0440\u043E\u043D \u043D\u0430 \u0423\u0416\u0415 \u0421\u0414\u0415\u041B\u0410\u041D\u041D\u041E\u0419 \u0440\u0430\u0431\u043E\u0442\u0435. \u0417\u0430\u0434\u0430\u0447\u0430 \u043D\u0435 \u043F\u0435\u0440\u0435\u0434\u0435\u043B\u044B\u0432\u0430\u0435\u0442\u0441\u044F: \u0440\u0435\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u044F \u043B\u0435\u0436\u0438\u0442 \u0432 \u0432\u0435\u0442\u043A\u0435, PR \u043E\u0442\u043A\u0440\u044B\u0442, \u0440\u0435\u0432\u044C\u044E \u0435\u0451 \u043F\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u043B\u043E. \u0422\u0432\u043E\u0451 \u0434\u0435\u043B\u043E \u2014 \u0437\u0430\u043A\u0440\u044B\u0442\u044C \u0437\u0430\u043C\u0435\u0447\u0430\u043D\u0438\u044F, \u0438 \u0442\u043E\u043B\u044C\u043A\u043E \u0438\u0445. \u041D\u0438\u0447\u0435\u0433\u043E \xAB\u0437\u0430\u043E\u0434\u043D\u043E\xBB \u043D\u0435 \u0443\u043B\u0443\u0447\u0448\u0430\u0435\u043C: \u043F\u043E\u0441\u0442\u043E\u0440\u043E\u043D\u043D\u044F\u044F \u043F\u0440\u0430\u0432\u043A\u0430 \u0432 \u044D\u0442\u043E\u043C \u0437\u0430\u0445\u043E\u0434\u0435 \u0441\u0442\u043E\u0438\u0442 \u0432\u0442\u043E\u0440\u043E\u0433\u043E \u043A\u0440\u0443\u0433\u0430 \u0440\u0435\u0432\u044C\u044E \u0432\u0441\u0435\u0439 \u043A\u043E\u043C\u0430\u043D\u0434\u0435.",
|
|
18117
|
+
"",
|
|
18118
|
+
`\u0417\u0430\u0434\u0430\u0447\u0430: ${slug}${args.taskTitle ? ` \u2014 ${args.taskTitle}` : ""}`,
|
|
18119
|
+
// Ссылки может не быть (get_task отдал null / у задачи нет url) — тогда её нигде и не
|
|
18120
|
+
// обещаем: указание «открой ссылку выше» висело бы в воздухе. Канал дочитать постановку
|
|
18121
|
+
// от этого не пропадает — read_task() ниже работает всегда.
|
|
18122
|
+
...args.taskUrl ? [`\u041F\u043E\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0430: ${args.taskUrl}`] : [],
|
|
18123
|
+
`\u0412\u0435\u0442\u043A\u0430: ${branch} (\u0431\u0430\u0437\u0430 ${baseRef}) \xB7 PR: ${prUrl}`,
|
|
18124
|
+
`\u041A\u0430\u0442\u0430\u043B\u043E\u0433: ${worktree}`,
|
|
18125
|
+
"",
|
|
18126
|
+
"## \u0427\u0442\u043E \u043F\u0440\u043E\u0441\u0438\u043B \u0440\u0435\u0432\u044C\u044E\u0435\u0440",
|
|
18127
|
+
verdict ?? "\u0412\u0435\u0440\u0434\u0438\u043A\u0442 \u043D\u0435 \u0441\u043E\u0445\u0440\u0430\u043D\u0438\u043B\u0441\u044F \u0432 \u043B\u0435\u043D\u0442\u0435 \u2014 \u0447\u0438\u0442\u0430\u0439 \u0435\u0433\u043E \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u043E\u043C \u0432 PR (\u043A\u043E\u043C\u0430\u043D\u0434\u0430 \u043D\u0438\u0436\u0435).",
|
|
18128
|
+
"",
|
|
18129
|
+
"## \u0412\u0432\u0435\u0434\u0438 \u0441\u0435\u0431\u044F \u0432 \u043A\u0443\u0440\u0441 \u0421\u0410\u041C \u2014 \u043F\u0430\u043C\u044F\u0442\u0438 \u043F\u0440\u043E\u0448\u043B\u043E\u0439 \u0441\u0435\u0441\u0441\u0438\u0438 \u0443 \u0442\u0435\u0431\u044F \u043D\u0435\u0442",
|
|
18130
|
+
"```",
|
|
18131
|
+
`gh pr view ${prUrl} --comments # \u0412\u0421\u0415 \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0438: \u0432\u0435\u0440\u0434\u0438\u043A\u0442, \u0437\u0430\u043C\u0435\u0447\u0430\u043D\u0438\u044F \u043E\u043F\u0435\u0440\u0430\u0442\u043E\u0440\u0430, \u043E\u0442\u0432\u0435\u0442\u044B`,
|
|
18132
|
+
`git diff ${baseRef}...HEAD # \u0447\u0442\u043E \u0443\u0436\u0435 \u0441\u0434\u0435\u043B\u0430\u043D\u043E \u0432 \u0432\u0435\u0442\u043A\u0435`,
|
|
18133
|
+
`git log --oneline ${baseRef}..HEAD`,
|
|
18134
|
+
"git status # \u041D\u0415\u0417\u0410\u041A\u041E\u041C\u041C\u0418\u0427\u0415\u041D\u041D\u041E\u0415 \u043E\u0442 \u043F\u0440\u043E\u0448\u043B\u043E\u0439 \u043F\u043E\u043F\u044B\u0442\u043A\u0438, \u0435\u0441\u043B\u0438 \u043E\u043D\u0430 \u0431\u044B\u043B\u0430",
|
|
18135
|
+
`cat journal/${slug}.md # \u0440\u0435\u0448\u0435\u043D\u0438\u044F \u0430\u0432\u0442\u043E\u0440\u0430 \u0438 \u0438\u0445 \u043F\u0440\u0438\u0447\u0438\u043D\u044B (\u0435\u0441\u043B\u0438 \u0444\u0430\u0439\u043B \u0435\u0441\u0442\u044C)`,
|
|
18136
|
+
`ls ${ATTACHMENTS_DIR} # \u0432\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u043F\u043E\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0438 (\u0441\u043A\u0440\u0438\u043D\u044B, \u043C\u0430\u043A\u0435\u0442\u044B) \u2014 \u0435\u0441\u043B\u0438 \u043A\u0430\u0442\u0430\u043B\u043E\u0433 \u0443\u0446\u0435\u043B\u0435\u043B`,
|
|
18137
|
+
"```",
|
|
18138
|
+
"\u0422\u0435\u043B\u043E \u0437\u0430\u0434\u0430\u0447\u0438 \u0446\u0435\u043B\u0438\u043A\u043E\u043C \u043D\u0443\u0436\u043D\u043E \u0440\u0435\u0434\u043A\u043E \u2014 \u043E\u043D\u043E \u0443\u0436\u0435 \u0440\u0435\u0430\u043B\u0438\u0437\u043E\u0432\u0430\u043D\u043E. \u041F\u043E\u043D\u0430\u0434\u043E\u0431\u0438\u043B\u043E\u0441\u044C \u2014 \u043F\u0435\u0440\u0435\u0437\u0432\u043E\u043D\u0438 read_task(): \u043E\u043D \u043E\u0442\u0434\u0430\u0451\u0442 \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u0435, \u041A\u0420\u0418\u0422\u0415\u0420\u0418\u0418 \u0413\u041E\u0422\u041E\u0412\u041D\u041E\u0421\u0422\u0418, \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u044B \u0438 \u043F\u0440\u0438\u0432\u044F\u0437\u0430\u043D\u043D\u044B\u0435 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u044B (\u0441\u043F\u0435\u043A\u0430 \u0436\u0438\u0432\u0451\u0442 \u0442\u0430\u043C). \u0412 \u0431\u0440\u0438\u0444\u0435 \u0438\u0445 \u043D\u0435\u0442 \u043D\u0430\u043C\u0435\u0440\u0435\u043D\u043D\u043E, \u0442\u0430\u043A \u0447\u0442\u043E \xAB\u0432 \u0437\u0430\u0434\u0430\u0447\u0435 \u043F\u0440\u043E \u044D\u0442\u043E \u043D\u0435 \u0441\u043A\u0430\u0437\u0430\u043D\u043E\xBB \u043F\u0440\u043E\u0432\u0435\u0440\u044F\u0439 \u0447\u0435\u0440\u0435\u0437 \u043D\u0435\u0433\u043E, \u0430 \u043D\u0435 \u043F\u043E \u043F\u0430\u043C\u044F\u0442\u0438.",
|
|
18111
18139
|
"",
|
|
18112
|
-
"
|
|
18113
|
-
"\
|
|
18114
|
-
|
|
18115
|
-
|
|
18116
|
-
"
|
|
18117
|
-
"\
|
|
18140
|
+
"## \u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B overmind (MCP)",
|
|
18141
|
+
"`done(pr_url, summary, screenshots?)` \u2014 \u0441\u0434\u0430\u0447\u0430; `report_step(text)` \u2014 \u043B\u043E\u0433 \u0445\u043E\u0434\u0430; `read_task()` \u2014 \u0441\u0432\u0435\u0436\u0438\u0439 \u0441\u043D\u0430\u043F\u0448\u043E\u0442 \u0437\u0430\u0434\u0430\u0447\u0438 (\u043E\u043F\u0438\u0441\u0430\u043D\u0438\u0435 + \u043A\u0440\u0438\u0442\u0435\u0440\u0438\u0438 \u0433\u043E\u0442\u043E\u0432\u043D\u043E\u0441\u0442\u0438 + \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u044B + \u0434\u043E\u043A\u0438); `ask(question, options?)` \u2014 \u0443\u043F\u0451\u0440\u0441\u044F \u0432 \u0420\u0415\u0428\u0415\u041D\u0418\u0415, \u0441\u043F\u0440\u043E\u0441\u0438 \u043E\u043F\u0435\u0440\u0430\u0442\u043E\u0440\u0430 \u0438 \u0434\u043E\u0436\u0434\u0438\u0441\u044C \u043E\u0442\u0432\u0435\u0442\u0430 (\u043D\u0435 \u0443\u0433\u0430\u0434\u044B\u0432\u0430\u0439); `note(text)` \u2014 \u0437\u0430\u043C\u0435\u0442\u043A\u0430 \xAB\u0437\u0430\u043C\u0435\u0447\u0435\u043D\u043E \u043F\u043E \u043F\u0443\u0442\u0438\xBB \u0431\u0435\u0437 \u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u043A\u0438; `report_acceptance_check(id, state, evidence)` \u2014 \u0435\u0441\u043B\u0438 \u043F\u0440\u0430\u0432\u043A\u0430 \u0437\u0430\u043A\u0440\u044B\u0432\u0430\u0435\u0442 \u043F\u0443\u043D\u043A\u0442 \u043A\u0440\u0438\u0442\u0435\u0440\u0438\u0435\u0432 \u0433\u043E\u0442\u043E\u0432\u043D\u043E\u0441\u0442\u0438 (id \u0431\u0440\u0430\u0442\u044C \u0438\u0437 \u0431\u043B\u043E\u043A\u0430 \xAB\u041A\u0440\u0438\u0442\u0435\u0440\u0438\u0438 \u0433\u043E\u0442\u043E\u0432\u043D\u043E\u0441\u0442\u0438\xBB \u0432 \u043E\u0442\u0432\u0435\u0442\u0435 read_task).",
|
|
18142
|
+
"`report_weight(note)` \u2014 \u0441\u043A\u0430\u0436\u0438, \u0447\u0442\u043E \u0440\u0430\u0431\u043E\u0442\u0430 \u0442\u044F\u0436\u0435\u043B\u0435\u0435 \u043E\u0436\u0438\u0434\u0430\u043D\u0438\u0439, \u0415\u0421\u041B\u0418 \u0441\u0436\u0451\u0433 \u0431\u043E\u043B\u044C\u0448\u0435 \u043F\u043E\u043B\u043E\u0432\u0438\u043D\u044B \u0431\u044E\u0434\u0436\u0435\u0442\u0430, \u0430 \u0434\u043E \u0441\u0434\u0430\u0447\u0438 \u0434\u0430\u043B\u0435\u043A\u043E: \u0434\u0435\u043C\u043E\u043D \u043F\u043E\u0434\u043D\u0438\u043C\u0435\u0442 \u043F\u043E\u0442\u043E\u043B\u043E\u043A \u0432 \u0438\u0437\u0432\u0435\u0441\u0442\u043D\u044B\u0445 \u043F\u0440\u0435\u0434\u0435\u043B\u0430\u0445. \u0417\u043E\u0432\u0438 \u041F\u041E \u0425\u041E\u0414\u0423 \u2014 \u043F\u043E\u0441\u0442\u0444\u0430\u043A\u0442\u0443\u043C \u043E\u0431\u0441\u043B\u0443\u0436\u0438\u0432\u0430\u0442\u044C \u043D\u0435\u0447\u0435\u0433\u043E.",
|
|
18143
|
+
"",
|
|
18144
|
+
"## \u041F\u043E\u0440\u044F\u0434\u043E\u043A",
|
|
18145
|
+
"\u041F\u043E\u0447\u0438\u043D\u0438 \u2192 \u043F\u0440\u043E\u0433\u043E\u043D\u0438 \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0438 \u2192 \u043C\u0435\u043D\u044F\u043B \u0432\u0438\u0434\u0438\u043C\u044B\u0439 UI \u2014 \u0441\u043D\u0438\u043C\u0438 \u0441\u043A\u0440\u0438\u043D\u044B \u2192 \u0437\u0430\u043A\u043E\u043C\u043C\u0438\u0442\u044C \u0438 \u0437\u0430\u043F\u0443\u0448\u044C \u0432 \u0422\u0423 \u0416\u0415 \u0432\u0435\u0442\u043A\u0443 (\u043F\u0435\u0440\u0435\u0437\u0430\u043F\u0438\u0441\u044C \u0438\u0441\u0442\u043E\u0440\u0438\u0438 \u0438 force-push \u0437\u0430\u043F\u0440\u0435\u0449\u0435\u043D\u044B) \u2192 \u041E\u0411\u042F\u0417\u0410\u0422\u0415\u041B\u042C\u041D\u041E \u0432\u044B\u0437\u043E\u0432\u0438 done(pr_url) \u0441 \u0442\u043E\u0439 \u0436\u0435 \u0441\u0441\u044B\u043B\u043A\u043E\u0439.",
|
|
18146
|
+
`\u{1F4B8} \u0411\u044E\u0434\u0436\u0435\u0442 \u044D\u0442\u043E\u0439 \u0441\u0435\u0441\u0441\u0438\u0438 \u2014 \u041E\u0421\u0422\u0410\u0422\u041E\u041A \u043F\u043E\u0442\u043E\u043B\u043A\u0430 \u043F\u0440\u043E\u0433\u043E\u043D\u0430, \u0430 \u043D\u0435 \u043F\u043E\u043B\u043D\u044B\u0439 \u043F\u043E\u0442\u043E\u043B\u043E\u043A: \u0438\u0441\u0445\u043E\u0434\u043D\u044B\u0439 \u0437\u0430\u0445\u043E\u0434 \u0443\u0436\u0435 \u043F\u043E\u0442\u0440\u0430\u0442\u0438\u043B \u0447\u0430\u0441\u0442\u044C, \u0438 \u0442\u0435\u0431\u0435 \u0434\u043E\u0441\u0442\u0430\u043B\u043E\u0441\u044C \u0442\u043E, \u0447\u0442\u043E \u043E\u0441\u0442\u0430\u043B\u043E\u0441\u044C. \u041F\u043E\u044D\u0442\u043E\u043C\u0443 \u043A\u043E\u043C\u043C\u0438\u0442\u044C \u0438 \u043F\u0443\u0448\u044C \u041F\u041E \u0425\u041E\u0414\u0423, \u043F\u043E\u0441\u043B\u0435 \u043A\u0430\u0436\u0434\u043E\u0433\u043E \u0437\u043D\u0430\u0447\u0438\u043C\u043E\u0433\u043E \u0448\u0430\u0433\u0430, \u0430 \u043D\u0435 \u043E\u0434\u043D\u0438\u043C \u043A\u0443\u0441\u043A\u043E\u043C \u0432 \u043A\u043E\u043D\u0446\u0435: \u043D\u0435\u0437\u0430\u043F\u0443\u0448\u0435\u043D\u043D\u043E\u0435 \u0443\u043C\u0438\u0440\u0430\u0435\u0442 \u0432\u043C\u0435\u0441\u0442\u0435 \u0441 \u0441\u0435\u0441\u0441\u0438\u0435\u0439. \u0421\u043B\u0430\u0433 ${slug} \u2014 \u0432 \u041A\u0410\u0416\u0414\u041E\u041C commit-\u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0438 (\u043F\u043E \u0441\u043B\u0430\u0433\u0430\u043C \u0441\u043E\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044F \u0440\u0435\u043B\u0438\u0437, \u0438 \u043F\u0440\u043E\u0434\u0443\u043A\u0442 \u043F\u0440\u043E\u0432\u0435\u0440\u044F\u0435\u0442 \u044D\u0442\u043E \u0441\u0430\u043C).`,
|
|
18147
|
+
"\u0418\u043C\u0435\u043D\u043D\u043E \u043F\u043E\u0432\u0442\u043E\u0440\u043D\u044B\u0439 done() \u043F\u043E\u0434\u043D\u0438\u043C\u0430\u0435\u0442 \u0440\u0435-\u0440\u0435\u0432\u044C\u044E\u0435\u0440\u0430. \u0411\u0435\u0437 \u043D\u0435\u0433\u043E \u043F\u0440\u0430\u0432\u043A\u0430 \u043D\u0435 \u0437\u0430\u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044F, \u0430 \u0442\u0432\u043E\u0439 \u0432\u044B\u0445\u043E\u0434 \u0440\u043E\u0439 \u043F\u0440\u0438\u043C\u0435\u0442 \u0437\u0430 \u0441\u043C\u0435\u0440\u0442\u044C.",
|
|
18148
|
+
...args.verifyMode === "ci" ? ["\u041F\u0440\u043E\u0432\u0435\u0440\u043A\u0438: \u0440\u0435\u0436\u0438\u043C `ci` \u2014 \u0431\u044B\u0441\u0442\u0440\u044B\u0439 typecheck \u0438 \u0442\u0435\u0441\u0442\u044B \u043F\u043E \u0441\u0432\u043E\u0435\u0439 \u043F\u0440\u0430\u0432\u043A\u0435, \u0442\u044F\u0436\u0451\u043B\u043E\u0435 \u0434\u043E\u0441\u0447\u0438\u0442\u0430\u0435\u0442 CI \u043D\u0430 PR."] : ["\u041F\u0440\u043E\u0432\u0435\u0440\u043A\u0438: \u0440\u0435\u0436\u0438\u043C `local` \u2014 \u043F\u0440\u043E\u0433\u043E\u043D\u0438 \u0442\u043E, \u0447\u0442\u043E \u043F\u043E\u043A\u0440\u044B\u0432\u0430\u0435\u0442 \u043F\u0440\u0430\u0432\u043A\u0443, \u0438 \u0441\u044C\u044E\u0442 \u0441\u0432\u043E\u0435\u0433\u043E \u043F\u0430\u043A\u0435\u0442\u0430 \u043F\u0435\u0440\u0435\u0434 \u0441\u0434\u0430\u0447\u0435\u0439."],
|
|
18149
|
+
`\u0422\u0440\u043E\u043D\u0443\u043B \u0432\u0438\u0434\u0438\u043C\u044B\u0439 UI \u2014 \u0441\u043A\u0440\u0438\u043D\u044B \u041E\u0411\u042F\u0417\u0410\u0422\u0415\u041B\u042C\u041D\u042B \u0438 \u0438\u0434\u0443\u0442 \u0412 \u0417\u0410\u0414\u0410\u0427\u0423: \`swarm shot <url> <out-prefix>\` (\u0441\u0430\u043C \u0441\u043D\u0438\u043C\u0430\u0435\u0442 mobile+desktop), \u043F\u0443\u0442\u0438 \u043F\u0435\u0440\u0435\u0434\u0430\u0439 \u0432 done(pr_url, summary, screenshots: [...]). \u0425\u0430\u0440\u0434-\u043B\u0438\u043C\u0438\u0442 \u043D\u0430 \u0448\u0430\u0433 \u2014 5 \u043C\u0438\u043D\u0443\u0442: \u043D\u0435 \u0443\u043B\u043E\u0436\u0438\u043B\u0441\u044F \u2014 \u043D\u0430\u043F\u0438\u0448\u0438 \u044D\u0442\u043E \u0432 PR \u0438 \u0432\u0441\u0451 \u0440\u0430\u0432\u043D\u043E \u0437\u043E\u0432\u0438 done(). \u0417\u0430\u0434\u0430\u0447\u0430 \u0431\u0435\u0437 \u0441\u043A\u0440\u0438\u043D\u043E\u0432 \u043F\u0440\u0438\u0451\u043C\u043A\u0443 \u043D\u0435 \u043F\u0440\u043E\u0445\u043E\u0434\u0438\u0442.`,
|
|
18150
|
+
`\u0414\u043E\u043F\u0438\u0448\u0438 \u0432 \`journal/${slug}.md\` \u043A\u043E\u0440\u043E\u0442\u043A\u0438\u0439 \u0431\u043B\u043E\u043A \u043F\u0440\u043E \u044D\u0442\u043E\u0442 \u0437\u0430\u0445\u043E\u0434 \u2014 \u0447\u0442\u043E \u043F\u0440\u043E\u0441\u0438\u043B\u0438 \u0438 \u043A\u0430\u043A \u0437\u0430\u043A\u0440\u044B\u043B \u2014 \u0438 \u0437\u0430\u043A\u043E\u043C\u043C\u0438\u0442\u044C \u0432\u043C\u0435\u0441\u0442\u0435 \u0441 \u043F\u0440\u0430\u0432\u043A\u043E\u0439. \u042D\u0442\u043E \u0445\u0440\u043E\u043D\u0438\u043A\u0430 \u0437\u0430\u0434\u0430\u0447\u0438, \u0430 \u043D\u0435 \u043E\u0442\u0447\u0451\u0442: \u043E\u043D \u0438\u0434\u0451\u0442 \u0432 summary \u0443 done().`,
|
|
18151
|
+
"",
|
|
18152
|
+
"## \u0413\u0440\u0430\u043D\u0438\u0446\u044B",
|
|
18153
|
+
"\u0417\u0430\u043C\u0435\u0447\u0430\u043D\u0438\u0435 \u043F\u0440\u043E \u0418\u041D\u0424\u0420\u0410\u0421\u0422\u0420\u0423\u041A\u0422\u0423\u0420\u0423 \u0440\u0435\u043F\u043E\u0437\u0438\u0442\u043E\u0440\u0438\u044F (\u043D\u0435\u0442 CI, \u0447\u0443\u0436\u043E\u0439 \u043A\u0440\u0430\u0441\u043D\u044B\u0439 \u0447\u0435\u043A, \u043E\u043A\u0440\u0443\u0436\u0435\u043D\u0438\u0435) \u2014 \u043D\u0435 \u0447\u0438\u043D\u0438 \u0438 workflow \u043D\u0435 \u0437\u0430\u0432\u043E\u0434\u0438: \u044D\u0442\u043E \u0440\u0435\u0448\u0435\u043D\u0438\u0435 \u0432\u043B\u0430\u0434\u0435\u043B\u044C\u0446\u0430. \u0412\u044B\u0437\u043E\u0432\u0438 note(text), \u043E\u0431\u044A\u044F\u0441\u043D\u0438 \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u043E\u043C \u0432 PR \u0438 \u0432\u0441\u0451 \u0440\u0430\u0432\u043D\u043E \u043F\u043E\u0437\u043E\u0432\u0438 done() \u0441 \u0442\u043E\u0439 \u0436\u0435 \u0441\u0441\u044B\u043B\u043A\u043E\u0439.",
|
|
18154
|
+
"\u041D\u0435 \u0441\u043E\u0433\u043B\u0430\u0441\u0435\u043D \u0441 \u0437\u0430\u043C\u0435\u0447\u0430\u043D\u0438\u0435\u043C \u2014 \u043D\u0435 \u043C\u043E\u043B\u0447\u0438 \u0438 \u043D\u0435 \u0438\u0433\u043D\u043E\u0440\u0438\u0440\u0443\u0439: \u043E\u0431\u044A\u044F\u0441\u043D\u0438 \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u043E\u043C \u0432 PR \u0438 \u0432\u0441\u0451 \u0440\u0430\u0432\u043D\u043E \u043F\u043E\u0437\u043E\u0432\u0438 done()."
|
|
18118
18155
|
].join("\n");
|
|
18119
18156
|
}
|
|
18120
18157
|
var HERO_CONTINUE_NUDGE = "\u0422\u0435\u0431\u044F \u0440\u0430\u0437\u0431\u0443\u0434\u0438\u043B\u0438, \u0413\u0435\u0440\u043E\u0439: \u0432 \u043E\u0442\u0440\u044F\u0434\u0435 \u0447\u0442\u043E-\u0442\u043E \u043F\u0440\u043E\u0438\u0437\u043E\u0448\u043B\u043E (\u0434\u0440\u043E\u043D \u0437\u0430\u0434\u0430\u043B \u0432\u043E\u043F\u0440\u043E\u0441, \u0441\u0434\u0430\u043B PR \u0438\u043B\u0438 \u0443\u043C\u0435\u0440) \u2014 \u043B\u0438\u0431\u043E \u0442\u0435\u0431\u044F \u043F\u043E\u0437\u0432\u0430\u043B \u043E\u043F\u0435\u0440\u0430\u0442\u043E\u0440. \u0422\u044B headless, \u043F\u0440\u043E\u0434\u043E\u043B\u0436\u0430\u0435\u0448\u044C \u0422\u041E\u0422 \u0416\u0415 \u044D\u043F\u0438\u043A: \u0443\u0441\u0442\u0430\u0432 \u0438 \u0442\u0435\u043B\u043E \u044D\u043F\u0438\u043A\u0430 \u0443\u0436\u0435 \u0432 \u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442\u0435 \u043F\u0440\u043E\u0448\u043B\u043E\u0439 \u0441\u0435\u0441\u0441\u0438\u0438. \u0413\u043B\u044F\u043D\u044C \u0441\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u0435 \u043E\u0442\u0440\u044F\u0434\u0430 (squad_status) \u0438 \u0440\u0430\u0437\u0431\u0435\u0440\u0438\u0441\u044C, \u0447\u0442\u043E \u0438\u0437\u043C\u0435\u043D\u0438\u043B\u043E\u0441\u044C: \u0442\u0435\u0445\u043D\u0438\u0447\u0435\u0441\u043A\u0438\u0435 \u0432\u043E\u043F\u0440\u043E\u0441\u044B \u0434\u0440\u043E\u043D\u043E\u0432 \u0437\u0430\u043A\u0440\u044B\u0432\u0430\u0439 answer_drone; \u043F\u0440\u043E\u0434\u0443\u043A\u0442\u043E\u0432\u043E\u0435/\u0434\u0438\u0437\u0430\u0439\u043D/scope \u2014 \u044D\u0441\u043A\u0430\u043B\u0438\u0440\u0443\u0439 \u0447\u0435\u0440\u0435\u0437 ask. \u041A\u043E\u0434 \u043D\u0435 \u043F\u0438\u0448\u0438, PR \u043D\u0435 \u043C\u0435\u0440\u0436\u0438, done \u041D\u0415 \u0437\u043E\u0432\u0438. \u0420\u0430\u0437\u043E\u0431\u0440\u0430\u043B\u0441\u044F \u0441 \u0440\u044B\u0432\u043A\u043E\u043C \u2014 \u0441\u043D\u043E\u0432\u0430 \u0437\u043E\u0432\u0438 rest(summary) \u0438 \u0437\u0430\u043C\u0440\u0438. \u0412\u043E\u043F\u0440\u043E\u0441\u043E\u0432 \u0432 stdout \u043D\u0435 \u0437\u0430\u0434\u0430\u0432\u0430\u0439 \u2014 \u0442\u043E\u043B\u044C\u043A\u043E \u0447\u0435\u0440\u0435\u0437 ask.";
|
|
@@ -18905,18 +18942,15 @@ async function wakeAuthorOnChanges(deps, run, now, droneCap) {
|
|
|
18905
18942
|
}
|
|
18906
18943
|
}
|
|
18907
18944
|
const wt = run.worktree_path;
|
|
18908
|
-
const
|
|
18909
|
-
if (
|
|
18910
|
-
const nudge = buildChangesWakeNudge(prUrl, lastChangesSummary(deps.db, run.id));
|
|
18945
|
+
const worktreeReady = !!wt && (deps.worktreeExists ?? existsSync20)(wt);
|
|
18946
|
+
if (!worktreeReady && !await freshChangesWakeAllowed(deps, run, prUrl, now)) return false;
|
|
18911
18947
|
try {
|
|
18912
|
-
await deps.respawn(run,
|
|
18948
|
+
await deps.respawn(run, "fix");
|
|
18949
|
+
deps.db.addEvent(run.id, "step", `${CHANGES_FIX_COST_MARK}: $${(run.cost_usd ?? 0).toFixed(2)}`);
|
|
18913
18950
|
if (run.stop_reason != null) deps.db.updateRun(run.id, { stop_reason: null });
|
|
18914
|
-
const how =
|
|
18951
|
+
const how = worktreeReady ? "\u0441\u0432\u0435\u0436\u0438\u0439 \u0434\u0440\u043E\u043D \u0441 \u0431\u0440\u0438\u0444\u043E\u043C \u0444\u0438\u043A\u0441-\u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0432 \u0442\u043E\u043C \u0436\u0435 worktree" : "\u0441\u0432\u0435\u0436\u0438\u0439 \u0434\u0440\u043E\u043D \u0441 \u0431\u0440\u0438\u0444\u043E\u043C \u0444\u0438\u043A\u0441-\u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438, worktree \u043F\u0435\u0440\u0435-\u0441\u043E\u0437\u0434\u0430\u0451\u0442\u0441\u044F \u0441 origin";
|
|
18915
18952
|
deps.db.addEvent(run.id, "resumed", `${CHANGES_WAKE_MARK} \u2014 ${how}`);
|
|
18916
|
-
narrate(
|
|
18917
|
-
deps,
|
|
18918
|
-
mode === "continue" ? `\u0420\u0435\u0432\u044C\u044E\u0435\u0440 \u043F\u043E\u043F\u0440\u043E\u0441\u0438\u043B \u043F\u0440\u0430\u0432\u043A\u0438 \u0443 ${droneLabel(run)} \u2014 \u0431\u0443\u0436\u0443 \u0430\u0432\u0442\u043E\u0440\u0430 \u043D\u0430 \u0444\u0438\u043A\u0441-\u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044E.` : `\u0420\u0435\u0432\u044C\u044E\u0435\u0440 \u043F\u043E\u043F\u0440\u043E\u0441\u0438\u043B \u043F\u0440\u0430\u0432\u043A\u0438 \u0443 ${droneLabel(run)}, \u0430 \u043F\u0440\u043E\u0434\u043E\u043B\u0436\u0430\u0442\u044C \u043D\u0435\u0447\u0435\u0433\u043E \u2014 \u043F\u043E\u0434\u043D\u0438\u043C\u0430\u044E \u0441\u0432\u0435\u0436\u0435\u0433\u043E \u0434\u0440\u043E\u043D\u0430 \u043D\u0430 \u0442\u0443 \u0436\u0435 \u0432\u0435\u0442\u043A\u0443.`
|
|
18919
|
-
);
|
|
18953
|
+
narrate(deps, `\u0420\u0435\u0432\u044C\u044E\u0435\u0440 \u043F\u043E\u043F\u0440\u043E\u0441\u0438\u043B \u043F\u0440\u0430\u0432\u043A\u0438 \u0443 ${droneLabel(run)} \u2014 \u043F\u043E\u0434\u043D\u0438\u043C\u0430\u044E \u0441\u0432\u0435\u0436\u0435\u0433\u043E \u0434\u0440\u043E\u043D\u0430 \u043D\u0430 \u0444\u0438\u043A\u0441-\u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044E.`);
|
|
18920
18954
|
return true;
|
|
18921
18955
|
} catch (e) {
|
|
18922
18956
|
deps.db.addEvent(run.id, "resumed", `${CHANGES_WAKE_MARK}: ${CHANGES_WAKE_FAILED_MARK} \u2014 ${String(e)}`);
|
|
@@ -20889,7 +20923,7 @@ async function spawnVerifier(deps, verifiedRun, files) {
|
|
|
20889
20923
|
}
|
|
20890
20924
|
async function respawnRun(deps, run, mode, nudge) {
|
|
20891
20925
|
const repo = normalizeRepo(run.repo || deps.repoFallback);
|
|
20892
|
-
const wt = run.worktree_path || (mode
|
|
20926
|
+
const wt = run.worktree_path || (mode !== "continue" ? droneWorktreePath(deps.worktreesDir, repo, run.task_slug) : null);
|
|
20893
20927
|
if (!wt) throw new Error(`\u043D\u0435\u0442 worktree_path \u0434\u043B\u044F \u043E\u0436\u0438\u0432\u043B\u0435\u043D\u0438\u044F \u043F\u0440\u043E\u0433\u043E\u043D\u0430 #${run.id}`);
|
|
20894
20928
|
if (!run.worktree_path && worktreePathHeldLive(deps.db, wt, run.id)) {
|
|
20895
20929
|
throw new Error(`worktree ${wt} \u0434\u0435\u0440\u0436\u0438\u0442 \u0434\u0440\u0443\u0433\u043E\u0439 \u0436\u0438\u0432\u043E\u0439 \u043F\u0440\u043E\u0433\u043E\u043D \u2014 \u043E\u0436\u0438\u0432\u043B\u0435\u043D\u0438\u0435 #${run.id} \u043E\u0442\u043C\u0435\u043D\u0435\u043D\u043E (TASWM-417)`);
|
|
@@ -20906,7 +20940,9 @@ async function respawnRun(deps, run, mode, nudge) {
|
|
|
20906
20940
|
deps.baseBranch ? deps.baseBranch(repo) : Promise.resolve(""),
|
|
20907
20941
|
// TASWM-466: память зоны — тем же параллельным чтением. Отвалилась → пустой список:
|
|
20908
20942
|
// оживление дрона не должно зависеть от того, доехала ли подсказка.
|
|
20909
|
-
|
|
20943
|
+
// TASWM-539: фикс-итерации память зоны не нужна — она про «как делать задачу в этой
|
|
20944
|
+
// зоне», а задача сделана. Лишний прод-вызов и лишний блок в контексте.
|
|
20945
|
+
deps.zoneMemory && run.area && mode !== "fix" ? deps.zoneMemory(repo, run.area).catch(() => []) : Promise.resolve([])
|
|
20910
20946
|
]);
|
|
20911
20947
|
const base3 = effectiveBaseBranch(run.base_branch, projectBase);
|
|
20912
20948
|
const runToSpawn = base3 && run.base_branch !== base3 ? deps.db.updateRun(run.id, { base_branch: base3 }) ?? run : run;
|
|
@@ -20923,14 +20959,25 @@ async function respawnRun(deps, run, mode, nudge) {
|
|
|
20923
20959
|
}
|
|
20924
20960
|
const depsReport = await ensureWorktreeDeps(wt);
|
|
20925
20961
|
for (const text of depsEvents(depsReport)) deps.db.addEvent(run.id, "step", text);
|
|
20926
|
-
const taskContext = task && deps.getTaskContext ? await deps.getTaskContext(task, run.workspace_id) : void 0;
|
|
20927
|
-
const attachments = await prepareTaskAttachments({
|
|
20962
|
+
const taskContext = task && deps.getTaskContext && mode !== "fix" ? await deps.getTaskContext(task, run.workspace_id) : void 0;
|
|
20963
|
+
const attachments = mode === "fix" ? void 0 : await prepareTaskAttachments({
|
|
20928
20964
|
worktree: wt,
|
|
20929
20965
|
refs: task?.attachments,
|
|
20930
20966
|
fetchFile: deps.fetchFile,
|
|
20931
20967
|
onEvent: (text) => deps.db.addEvent(run.id, "step", text)
|
|
20932
20968
|
});
|
|
20933
|
-
const freshPrompt =
|
|
20969
|
+
const freshPrompt = mode === "fix" ? buildChangesFixPrompt({
|
|
20970
|
+
prUrl: runToSpawn.pr_url ?? "",
|
|
20971
|
+
slug: runToSpawn.task_slug,
|
|
20972
|
+
branch: runToSpawn.branch || runToSpawn.task_slug,
|
|
20973
|
+
base: base3 || "",
|
|
20974
|
+
worktree: wt,
|
|
20975
|
+
verdict: lastChangesSummary(deps.db, runToSpawn.id),
|
|
20976
|
+
name: runToSpawn.name,
|
|
20977
|
+
taskTitle: task?.title ?? null,
|
|
20978
|
+
taskUrl: task?.url ?? null,
|
|
20979
|
+
...verifyMode ? { verifyMode } : {}
|
|
20980
|
+
}) : runToSpawn.kind === "hero" ? buildHeroPrompt(task, runToSpawn, taskContext, attachments) : buildPrompt(task, runToSpawn, verifyMode, taskContext, attachments, renderZoneMemoryBlock(runToSpawn.area, zoneNotes));
|
|
20934
20981
|
const notice = depsPromptNotice(depsReport);
|
|
20935
20982
|
const prompt = [freshPrompt, notice, nudge].filter(Boolean).join("\n\n");
|
|
20936
20983
|
const pid = deps.launch({ worktree: wt, run: runToSpawn, prompt });
|
|
@@ -22332,6 +22379,7 @@ export {
|
|
|
22332
22379
|
ABORT_TEXT,
|
|
22333
22380
|
AWAITING_CI_REASON,
|
|
22334
22381
|
BUDGET_STOP_REASON,
|
|
22382
|
+
CHANGES_FIX_COST_MARK,
|
|
22335
22383
|
CHANGES_FRESH_WAKE_AFTER_MS,
|
|
22336
22384
|
CHANGES_WAKE_COOLDOWN_MS,
|
|
22337
22385
|
CHANGES_WAKE_ESCALATION_MARK,
|
|
@@ -22388,7 +22436,7 @@ export {
|
|
|
22388
22436
|
VERIFY_SPAWN_LIMIT,
|
|
22389
22437
|
WATCHDOG_PARK_REASON,
|
|
22390
22438
|
abortReason,
|
|
22391
|
-
|
|
22439
|
+
buildChangesFixPrompt,
|
|
22392
22440
|
buildCiReadyNudge,
|
|
22393
22441
|
buildCiWakeNudge,
|
|
22394
22442
|
buildHeroPrompt,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@taskless-app/swarm",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.36",
|
|
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": [
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"execa": "^10.0.0",
|
|
40
40
|
"zod": "3.25.76"
|
|
41
41
|
},
|
|
42
|
-
"gitHead": "
|
|
42
|
+
"gitHead": "2d673b2bafb12ef0ced20b2469d798f7ae712b3a",
|
|
43
43
|
"scripts": {
|
|
44
44
|
"overmind": "NODE_OPTIONS=\"${NODE_OPTIONS:-} --conditions=development\" tsx src/overmind.ts",
|
|
45
45
|
"swarm": "NODE_OPTIONS=\"${NODE_OPTIONS:-} --conditions=development\" tsx src/cli.ts",
|