@wrongstack/core 0.8.5 → 0.8.6
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/{agent-bridge-DPxcUVkn.d.ts → agent-bridge-Bad3ZGQ7.d.ts} +1 -1
- package/dist/{agent-subagent-runner-Cav3yEJM.d.ts → agent-subagent-runner-Cc8sRJOF.d.ts} +3 -3
- package/dist/coordination/index.d.ts +8 -8
- package/dist/defaults/index.d.ts +11 -11
- package/dist/{events-DyhxkstG.d.ts → events-yCpJD4wa.d.ts} +49 -0
- package/dist/execution/index.d.ts +7 -7
- package/dist/extension/index.d.ts +2 -2
- package/dist/index-BvZld4Dr.d.ts +200 -0
- package/dist/{index-oYZeWsuJ.d.ts → index-SxpnwRlJ.d.ts} +1 -1
- package/dist/index.d.ts +51 -18
- package/dist/index.js +381 -41
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/index.d.ts +2 -2
- package/dist/kernel/index.d.ts +16 -88
- package/dist/kernel/index.js +3 -1
- package/dist/kernel/index.js.map +1 -1
- package/dist/{multi-agent-CRMznZmf.d.ts → multi-agent-C8uY45AY.d.ts} +9 -1
- package/dist/{multi-agent-coordinator-IQKrMfXz.d.ts → multi-agent-coordinator-C7YbZUY8.d.ts} +2 -2
- package/dist/{null-fleet-bus-sKnVwEd8.d.ts → null-fleet-bus-Bb2jVLKr.d.ts} +5 -5
- package/dist/observability/index.d.ts +1 -1
- package/dist/{path-resolver-1CIYbH2Q.d.ts → path-resolver-DnC1nOjb.d.ts} +1 -1
- package/dist/{plan-templates-D8zQgZzc.d.ts → plan-templates-Cqdy6rtM.d.ts} +2 -2
- package/dist/{provider-runner-BrA0XR-l.d.ts → provider-runner-C4ouU7--.d.ts} +1 -1
- package/dist/sdd/index.d.ts +4 -4
- package/dist/storage/index.d.ts +3 -3
- package/dist/{tool-executor-QwfWnQZ8.d.ts → tool-executor-Ch25BDwa.d.ts} +1 -1
- package/dist/types/index.d.ts +7 -7
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/{wstack-paths-Bxik3CsK.d.ts → wstack-paths-CJYrjQU8.d.ts} +2 -0
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -3,7 +3,7 @@ import { randomBytes, createCipheriv, createDecipheriv, randomUUID, createHash }
|
|
|
3
3
|
import * as fsp2 from 'fs/promises';
|
|
4
4
|
import { readFile, readdir, stat, mkdir } from 'fs/promises';
|
|
5
5
|
import * as path6 from 'path';
|
|
6
|
-
import { join, extname, relative } from 'path';
|
|
6
|
+
import { join, extname, relative, resolve, sep } from 'path';
|
|
7
7
|
import * as fs2 from 'fs';
|
|
8
8
|
import * as os5 from 'os';
|
|
9
9
|
import { execFile, spawn } from 'child_process';
|
|
@@ -93,7 +93,7 @@ async function renameWithRetry(from, to) {
|
|
|
93
93
|
if (!code || !TRANSIENT_RENAME_CODES.has(code) || i === delays.length) {
|
|
94
94
|
throw err;
|
|
95
95
|
}
|
|
96
|
-
await new Promise((
|
|
96
|
+
await new Promise((resolve8) => setTimeout(resolve8, delays[i]));
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
99
|
throw lastErr;
|
|
@@ -830,7 +830,9 @@ var TOKENS = {
|
|
|
830
830
|
ModelsRegistry: t("ModelsRegistry"),
|
|
831
831
|
ModeStore: t("ModeStore"),
|
|
832
832
|
/** Replaces the entire provider call layer — retry, streaming, tracing. */
|
|
833
|
-
ProviderRunner: t("ProviderRunner")
|
|
833
|
+
ProviderRunner: t("ProviderRunner"),
|
|
834
|
+
/** Optional git-worktree lifecycle manager (per-phase isolation in AutoPhase). */
|
|
835
|
+
WorktreeManager: t("WorktreeManager")
|
|
834
836
|
};
|
|
835
837
|
|
|
836
838
|
// src/kernel/run-controller.ts
|
|
@@ -2692,7 +2694,7 @@ var InMemoryAgentBridge = class {
|
|
|
2692
2694
|
);
|
|
2693
2695
|
}
|
|
2694
2696
|
this.inflightGuards.add(correlationId);
|
|
2695
|
-
return new Promise((
|
|
2697
|
+
return new Promise((resolve8, reject) => {
|
|
2696
2698
|
const timer = setTimeout(() => {
|
|
2697
2699
|
this.inflightGuards.delete(correlationId);
|
|
2698
2700
|
this.pendingRequests.delete(correlationId);
|
|
@@ -2704,7 +2706,7 @@ var InMemoryAgentBridge = class {
|
|
|
2704
2706
|
return;
|
|
2705
2707
|
}
|
|
2706
2708
|
this.pendingRequests.set(correlationId, {
|
|
2707
|
-
resolve:
|
|
2709
|
+
resolve: resolve8,
|
|
2708
2710
|
reject,
|
|
2709
2711
|
timer
|
|
2710
2712
|
});
|
|
@@ -3920,6 +3922,7 @@ function resolveWstackPaths(opts) {
|
|
|
3920
3922
|
projectLocalConfig: path6.join(projectDir, "config.local.json"),
|
|
3921
3923
|
inProjectAgentsFile: path6.join(opts.projectRoot, ".wrongstack", "AGENTS.md"),
|
|
3922
3924
|
inProjectSkills: path6.join(opts.projectRoot, ".wrongstack", "skills"),
|
|
3925
|
+
inProjectWorktrees: path6.join(opts.projectRoot, ".wrongstack", "worktrees"),
|
|
3923
3926
|
projectHash: hash,
|
|
3924
3927
|
projectGoal: path6.join(projectDir, "goal.json"),
|
|
3925
3928
|
projectSpecs: path6.join(projectDir, "specs"),
|
|
@@ -6621,8 +6624,8 @@ async function streamProviderToResponse(provider, req, signal, ctx, events) {
|
|
|
6621
6624
|
try {
|
|
6622
6625
|
await Promise.race([
|
|
6623
6626
|
Promise.resolve(iter.return?.()),
|
|
6624
|
-
new Promise((
|
|
6625
|
-
drainTimer = setTimeout(
|
|
6627
|
+
new Promise((resolve8) => {
|
|
6628
|
+
drainTimer = setTimeout(resolve8, 500);
|
|
6626
6629
|
})
|
|
6627
6630
|
]);
|
|
6628
6631
|
} finally {
|
|
@@ -6683,7 +6686,7 @@ async function runProviderWithRetry(opts) {
|
|
|
6683
6686
|
description
|
|
6684
6687
|
});
|
|
6685
6688
|
}
|
|
6686
|
-
await new Promise((
|
|
6689
|
+
await new Promise((resolve8, reject) => {
|
|
6687
6690
|
let settled = false;
|
|
6688
6691
|
const onAbort = () => {
|
|
6689
6692
|
if (settled) return;
|
|
@@ -6696,7 +6699,7 @@ async function runProviderWithRetry(opts) {
|
|
|
6696
6699
|
settled = true;
|
|
6697
6700
|
clearTimeout(t2);
|
|
6698
6701
|
signal.removeEventListener("abort", onAbort);
|
|
6699
|
-
|
|
6702
|
+
resolve8();
|
|
6700
6703
|
}, delay);
|
|
6701
6704
|
if (signal.aborted) {
|
|
6702
6705
|
onAbort();
|
|
@@ -8340,7 +8343,7 @@ ${recentJournal}` : "No prior iterations.",
|
|
|
8340
8343
|
}
|
|
8341
8344
|
};
|
|
8342
8345
|
function sleep(ms) {
|
|
8343
|
-
return new Promise((
|
|
8346
|
+
return new Promise((resolve8) => setTimeout(resolve8, ms));
|
|
8344
8347
|
}
|
|
8345
8348
|
|
|
8346
8349
|
// src/coordination/subagent-budget.ts
|
|
@@ -8490,12 +8493,12 @@ var SubagentBudget = class _SubagentBudget {
|
|
|
8490
8493
|
if (!bus || !bus.hasListenerFor("budget.threshold_reached")) {
|
|
8491
8494
|
return Promise.resolve("stop");
|
|
8492
8495
|
}
|
|
8493
|
-
return new Promise((
|
|
8496
|
+
return new Promise((resolve8) => {
|
|
8494
8497
|
let resolved = false;
|
|
8495
8498
|
const respond = (d) => {
|
|
8496
8499
|
if (resolved) return;
|
|
8497
8500
|
resolved = true;
|
|
8498
|
-
|
|
8501
|
+
resolve8(d);
|
|
8499
8502
|
};
|
|
8500
8503
|
const fallback = setTimeout(
|
|
8501
8504
|
() => respond("stop"),
|
|
@@ -11536,7 +11539,7 @@ var DefaultMultiAgentCoordinator = class extends EventEmitter {
|
|
|
11536
11539
|
taskIds.map((id) => {
|
|
11537
11540
|
const cached = this.completedResults.find((r) => r.taskId === id);
|
|
11538
11541
|
if (cached) return cached;
|
|
11539
|
-
return new Promise((
|
|
11542
|
+
return new Promise((resolve8, reject) => {
|
|
11540
11543
|
const timeout = setTimeout(() => {
|
|
11541
11544
|
this.off("task.completed", handler);
|
|
11542
11545
|
reject(new Error(`awaitTasks timed out waiting for task "${id}"`));
|
|
@@ -11545,7 +11548,7 @@ var DefaultMultiAgentCoordinator = class extends EventEmitter {
|
|
|
11545
11548
|
if (result.taskId === id) {
|
|
11546
11549
|
clearTimeout(timeout);
|
|
11547
11550
|
this.off("task.completed", handler);
|
|
11548
|
-
|
|
11551
|
+
resolve8(result);
|
|
11549
11552
|
}
|
|
11550
11553
|
};
|
|
11551
11554
|
this.on("task.completed", handler);
|
|
@@ -11975,7 +11978,7 @@ function providerErrorToSubagentError(err, message, cause) {
|
|
|
11975
11978
|
|
|
11976
11979
|
// src/execution/parallel-eternal-engine.ts
|
|
11977
11980
|
function sleep2(ms) {
|
|
11978
|
-
return new Promise((
|
|
11981
|
+
return new Promise((resolve8) => setTimeout(resolve8, ms));
|
|
11979
11982
|
}
|
|
11980
11983
|
var GOAL_COMPLETE_MARKER2 = /^\s*\[goal[_\s-]?complete\]\s*$/im;
|
|
11981
11984
|
var ParallelEternalEngine = class {
|
|
@@ -13617,11 +13620,11 @@ var Director = class {
|
|
|
13617
13620
|
if (cached) return cached;
|
|
13618
13621
|
const existing = this.taskWaiters.get(id);
|
|
13619
13622
|
if (existing) return existing.promise;
|
|
13620
|
-
let
|
|
13623
|
+
let resolve8;
|
|
13621
13624
|
const promise = new Promise((res) => {
|
|
13622
|
-
|
|
13625
|
+
resolve8 = res;
|
|
13623
13626
|
});
|
|
13624
|
-
this.taskWaiters.set(id, { promise, resolve:
|
|
13627
|
+
this.taskWaiters.set(id, { promise, resolve: resolve8 });
|
|
13625
13628
|
return promise;
|
|
13626
13629
|
})
|
|
13627
13630
|
);
|
|
@@ -13937,7 +13940,7 @@ function createDelegateTool(opts) {
|
|
|
13937
13940
|
subagentId
|
|
13938
13941
|
});
|
|
13939
13942
|
const dir = director;
|
|
13940
|
-
const result = await new Promise((
|
|
13943
|
+
const result = await new Promise((resolve8) => {
|
|
13941
13944
|
let settled = false;
|
|
13942
13945
|
let timer;
|
|
13943
13946
|
const finish = (value) => {
|
|
@@ -13946,7 +13949,7 @@ function createDelegateTool(opts) {
|
|
|
13946
13949
|
if (timer) clearTimeout(timer);
|
|
13947
13950
|
offTool();
|
|
13948
13951
|
offIter();
|
|
13949
|
-
|
|
13952
|
+
resolve8(value);
|
|
13950
13953
|
};
|
|
13951
13954
|
const arm = () => {
|
|
13952
13955
|
if (timer) clearTimeout(timer);
|
|
@@ -17089,9 +17092,9 @@ var DefaultHealthRegistry = class {
|
|
|
17089
17092
|
}
|
|
17090
17093
|
async runOne(check) {
|
|
17091
17094
|
let timer = null;
|
|
17092
|
-
const timeout = new Promise((
|
|
17095
|
+
const timeout = new Promise((resolve8) => {
|
|
17093
17096
|
timer = setTimeout(
|
|
17094
|
-
() =>
|
|
17097
|
+
() => resolve8({ status: "unhealthy", detail: `timeout after ${this.timeoutMs}ms` }),
|
|
17095
17098
|
this.timeoutMs
|
|
17096
17099
|
);
|
|
17097
17100
|
});
|
|
@@ -17330,14 +17333,14 @@ async function startMetricsServer(opts) {
|
|
|
17330
17333
|
const { createServer } = await import('http');
|
|
17331
17334
|
server = createServer(listener);
|
|
17332
17335
|
}
|
|
17333
|
-
await new Promise((
|
|
17336
|
+
await new Promise((resolve8, reject) => {
|
|
17334
17337
|
const onError = (err) => {
|
|
17335
17338
|
server.off("listening", onListening);
|
|
17336
17339
|
reject(err);
|
|
17337
17340
|
};
|
|
17338
17341
|
const onListening = () => {
|
|
17339
17342
|
server.off("error", onError);
|
|
17340
|
-
|
|
17343
|
+
resolve8();
|
|
17341
17344
|
};
|
|
17342
17345
|
server.once("error", onError);
|
|
17343
17346
|
server.once("listening", onListening);
|
|
@@ -17349,8 +17352,8 @@ async function startMetricsServer(opts) {
|
|
|
17349
17352
|
return {
|
|
17350
17353
|
port: boundPort,
|
|
17351
17354
|
url: `${protocol}://${host}:${boundPort}${path28}`,
|
|
17352
|
-
close: () => new Promise((
|
|
17353
|
-
server.close((err) => err ? reject(err) :
|
|
17355
|
+
close: () => new Promise((resolve8, reject) => {
|
|
17356
|
+
server.close((err) => err ? reject(err) : resolve8());
|
|
17354
17357
|
})
|
|
17355
17358
|
};
|
|
17356
17359
|
}
|
|
@@ -19474,8 +19477,8 @@ var ReportGenerator = class {
|
|
|
19474
19477
|
try {
|
|
19475
19478
|
await stat(this.options.outputDir);
|
|
19476
19479
|
} catch {
|
|
19477
|
-
const { mkdir:
|
|
19478
|
-
await
|
|
19480
|
+
const { mkdir: mkdir14 } = await import('fs/promises');
|
|
19481
|
+
await mkdir14(this.options.outputDir, { recursive: true });
|
|
19479
19482
|
}
|
|
19480
19483
|
}
|
|
19481
19484
|
generateMarkdown(result) {
|
|
@@ -19751,7 +19754,7 @@ var SecurityScannerOrchestrator = class {
|
|
|
19751
19754
|
const delay = Math.round(policy.delayMs(attempt));
|
|
19752
19755
|
const status = isProviderErr ? err.status : 0;
|
|
19753
19756
|
console.warn(`[SecurityScanner] retry ${attempt + 1} after ${delay}ms (status=${status}) \u2014 ${errAsErr.message}`);
|
|
19754
|
-
await new Promise((
|
|
19757
|
+
await new Promise((resolve8) => setTimeout(resolve8, delay));
|
|
19755
19758
|
return this.completeWithRetry(provider, request, abortController, attempt + 1);
|
|
19756
19759
|
}
|
|
19757
19760
|
}
|
|
@@ -21248,12 +21251,12 @@ function makeContinueToNextIterationTool() {
|
|
|
21248
21251
|
// src/core/iteration-limit.ts
|
|
21249
21252
|
function requestLimitExtension(opts) {
|
|
21250
21253
|
const { events, currentIterations, currentLimit, autoExtend, timeoutMs = 3e4 } = opts;
|
|
21251
|
-
return new Promise((
|
|
21254
|
+
return new Promise((resolve8) => {
|
|
21252
21255
|
let resolved = false;
|
|
21253
21256
|
const timerFired = () => {
|
|
21254
21257
|
if (!resolved) {
|
|
21255
21258
|
resolved = true;
|
|
21256
|
-
|
|
21259
|
+
resolve8(0);
|
|
21257
21260
|
}
|
|
21258
21261
|
};
|
|
21259
21262
|
const timer = setTimeout(timerFired, timeoutMs);
|
|
@@ -21262,14 +21265,14 @@ function requestLimitExtension(opts) {
|
|
|
21262
21265
|
if (!resolved) {
|
|
21263
21266
|
resolved = true;
|
|
21264
21267
|
clearTimeout(timer);
|
|
21265
|
-
|
|
21268
|
+
resolve8(0);
|
|
21266
21269
|
}
|
|
21267
21270
|
};
|
|
21268
21271
|
const grant = (extra) => {
|
|
21269
21272
|
if (!resolved) {
|
|
21270
21273
|
resolved = true;
|
|
21271
21274
|
clearTimeout(timer);
|
|
21272
|
-
|
|
21275
|
+
resolve8(Math.max(0, extra));
|
|
21273
21276
|
}
|
|
21274
21277
|
};
|
|
21275
21278
|
events.emit("iteration.limit_reached", {
|
|
@@ -21283,7 +21286,7 @@ function requestLimitExtension(opts) {
|
|
|
21283
21286
|
if (!resolved) {
|
|
21284
21287
|
resolved = true;
|
|
21285
21288
|
clearTimeout(timer);
|
|
21286
|
-
|
|
21289
|
+
resolve8(100);
|
|
21287
21290
|
}
|
|
21288
21291
|
});
|
|
21289
21292
|
}
|
|
@@ -21852,13 +21855,13 @@ var Agent = class {
|
|
|
21852
21855
|
}
|
|
21853
21856
|
}
|
|
21854
21857
|
waitForConfirm(info) {
|
|
21855
|
-
return new Promise((
|
|
21858
|
+
return new Promise((resolve8) => {
|
|
21856
21859
|
this.events.emit("tool.confirm_needed", {
|
|
21857
21860
|
tool: info.tool,
|
|
21858
21861
|
input: info.input,
|
|
21859
21862
|
toolUseId: info.toolUseId,
|
|
21860
21863
|
suggestedPattern: info.suggestedPattern,
|
|
21861
|
-
resolve:
|
|
21864
|
+
resolve: resolve8
|
|
21862
21865
|
});
|
|
21863
21866
|
});
|
|
21864
21867
|
}
|
|
@@ -22575,12 +22578,12 @@ ${mem}`);
|
|
|
22575
22578
|
}
|
|
22576
22579
|
}
|
|
22577
22580
|
async gitStatus(root) {
|
|
22578
|
-
return new Promise((
|
|
22581
|
+
return new Promise((resolve8) => {
|
|
22579
22582
|
let settled = false;
|
|
22580
22583
|
const finish = (s) => {
|
|
22581
22584
|
if (settled) return;
|
|
22582
22585
|
settled = true;
|
|
22583
|
-
|
|
22586
|
+
resolve8(s);
|
|
22584
22587
|
};
|
|
22585
22588
|
let proc;
|
|
22586
22589
|
const timer = setTimeout(() => {
|
|
@@ -23455,10 +23458,19 @@ var PhaseOrchestrator = class {
|
|
|
23455
23458
|
tickInterval = null;
|
|
23456
23459
|
trackerCache = /* @__PURE__ */ new Map();
|
|
23457
23460
|
taskRetryCounts = /* @__PURE__ */ new Map();
|
|
23461
|
+
// ── Git-worktree isolation (optional) ──────────────────────────────────────
|
|
23462
|
+
worktrees;
|
|
23463
|
+
/** Per-phase worktree handles, keyed by phase id. */
|
|
23464
|
+
phaseWorktrees = /* @__PURE__ */ new Map();
|
|
23465
|
+
/** Serializes all merges back to the base branch (one at a time). */
|
|
23466
|
+
mergeQueue = Promise.resolve();
|
|
23467
|
+
/** Per-phase merge promise, so a phase merges only after its deps do. */
|
|
23468
|
+
phaseMergePromise = /* @__PURE__ */ new Map();
|
|
23458
23469
|
constructor(opts) {
|
|
23459
23470
|
this.graph = opts.graph;
|
|
23460
23471
|
this.ctx = opts.ctx;
|
|
23461
23472
|
this.events = opts.events ?? this.createNoopEventBus();
|
|
23473
|
+
this.worktrees = opts.worktrees;
|
|
23462
23474
|
this.opts = {
|
|
23463
23475
|
maxConcurrentPhases: opts.maxConcurrentPhases ?? 1,
|
|
23464
23476
|
maxConcurrentTasks: opts.maxConcurrentTasks ?? 2,
|
|
@@ -23490,10 +23502,17 @@ var PhaseOrchestrator = class {
|
|
|
23490
23502
|
(p) => !this.runningPhases.has(p.id) && p.status !== "completed" && p.status !== "failed"
|
|
23491
23503
|
);
|
|
23492
23504
|
}
|
|
23505
|
+
await this.drainMerges();
|
|
23493
23506
|
if (this.opts.autonomous) {
|
|
23494
23507
|
this.tickInterval = setInterval(() => this.tick(), 1e3);
|
|
23495
23508
|
}
|
|
23496
23509
|
}
|
|
23510
|
+
/** Bekleyen tüm faz merge'lerini (dep-sıralı + global seri) bekle. */
|
|
23511
|
+
async drainMerges() {
|
|
23512
|
+
await Promise.allSettled([...this.phaseMergePromise.values()]);
|
|
23513
|
+
await this.mergeQueue.catch(() => {
|
|
23514
|
+
});
|
|
23515
|
+
}
|
|
23497
23516
|
/** Duraklat — aktif fazlar çalışmaya devam eder ama yeni faz başlamaz */
|
|
23498
23517
|
pause() {
|
|
23499
23518
|
this.paused = true;
|
|
@@ -23518,6 +23537,12 @@ var PhaseOrchestrator = class {
|
|
|
23518
23537
|
this.updatePhaseStatus(phase, "paused");
|
|
23519
23538
|
}
|
|
23520
23539
|
}
|
|
23540
|
+
if (this.worktrees) {
|
|
23541
|
+
for (const handle of this.worktrees.list()) {
|
|
23542
|
+
void this.worktrees.release(handle, { keep: true }).catch(() => {
|
|
23543
|
+
});
|
|
23544
|
+
}
|
|
23545
|
+
}
|
|
23521
23546
|
}
|
|
23522
23547
|
// ─── Tick Loop (Autonomous) ───────────────────────────────────────────────
|
|
23523
23548
|
async tick() {
|
|
@@ -23556,6 +23581,16 @@ var PhaseOrchestrator = class {
|
|
|
23556
23581
|
phase.startedAt = Date.now();
|
|
23557
23582
|
this.runningPhases.add(phase.id);
|
|
23558
23583
|
this.graph.activePhaseIds.push(phase.id);
|
|
23584
|
+
if (this.worktrees && !this.phaseWorktrees.has(phase.id)) {
|
|
23585
|
+
try {
|
|
23586
|
+
const handle = await this.worktrees.allocate(phase.id, {
|
|
23587
|
+
slugHint: phase.name,
|
|
23588
|
+
ownerLabel: phase.name
|
|
23589
|
+
});
|
|
23590
|
+
if (handle.status === "active") this.phaseWorktrees.set(phase.id, handle);
|
|
23591
|
+
} catch {
|
|
23592
|
+
}
|
|
23593
|
+
}
|
|
23559
23594
|
this.emit("phase.started", { phaseId: phase.id, name: phase.name });
|
|
23560
23595
|
try {
|
|
23561
23596
|
await this.executePhaseTasks(phase);
|
|
@@ -23578,6 +23613,7 @@ var PhaseOrchestrator = class {
|
|
|
23578
23613
|
error: `${failedTasks} task(s) failed`
|
|
23579
23614
|
});
|
|
23580
23615
|
this.ctx.onPhaseFail?.(phase, new Error(`${failedTasks} task(s) failed`));
|
|
23616
|
+
await this.keepWorktreeForReview(phase);
|
|
23581
23617
|
} else {
|
|
23582
23618
|
this.updatePhaseStatus(phase, "completed");
|
|
23583
23619
|
phase.completedAt = Date.now();
|
|
@@ -23591,6 +23627,7 @@ var PhaseOrchestrator = class {
|
|
|
23591
23627
|
durationMs: phase.actualDurationMs
|
|
23592
23628
|
});
|
|
23593
23629
|
this.ctx.onPhaseComplete?.(phase);
|
|
23630
|
+
await this.commitAndEnqueueMerge(phase);
|
|
23594
23631
|
}
|
|
23595
23632
|
} catch (error) {
|
|
23596
23633
|
this.updatePhaseStatus(phase, "failed");
|
|
@@ -23605,8 +23642,56 @@ var PhaseOrchestrator = class {
|
|
|
23605
23642
|
error: error instanceof Error ? error.message : String(error)
|
|
23606
23643
|
});
|
|
23607
23644
|
this.ctx.onPhaseFail?.(phase, error instanceof Error ? error : new Error(String(error)));
|
|
23645
|
+
await this.keepWorktreeForReview(phase);
|
|
23608
23646
|
}
|
|
23609
23647
|
}
|
|
23648
|
+
// ─── Worktree integration ───────────────────────────────────────────────────
|
|
23649
|
+
/**
|
|
23650
|
+
* Commit the phase's worktree changes, then enqueue the merge back into the
|
|
23651
|
+
* base branch. Merges run dependency-ordered (a phase merges only after its
|
|
23652
|
+
* `dependsOn` phases) and globally serialized (one at a time) to avoid
|
|
23653
|
+
* concurrent writes to the base tree.
|
|
23654
|
+
*/
|
|
23655
|
+
async commitAndEnqueueMerge(phase) {
|
|
23656
|
+
const handle = this.phaseWorktrees.get(phase.id);
|
|
23657
|
+
if (!this.worktrees || !handle) return;
|
|
23658
|
+
try {
|
|
23659
|
+
await this.worktrees.commitAll(handle, `autophase(${phase.name}): ${phase.id}`);
|
|
23660
|
+
} catch {
|
|
23661
|
+
}
|
|
23662
|
+
const depPromises = phase.dependsOn.map((d) => this.phaseMergePromise.get(d)).filter((p) => Boolean(p));
|
|
23663
|
+
const merged = (async () => {
|
|
23664
|
+
await Promise.allSettled(depPromises);
|
|
23665
|
+
this.mergeQueue = this.mergeQueue.then(() => this.mergeOne(phase, handle));
|
|
23666
|
+
await this.mergeQueue;
|
|
23667
|
+
})();
|
|
23668
|
+
this.phaseMergePromise.set(phase.id, merged);
|
|
23669
|
+
}
|
|
23670
|
+
/** Squash-merge one phase. Conflicts mark the worktree needs-review (run continues). */
|
|
23671
|
+
async mergeOne(phase, handle) {
|
|
23672
|
+
if (!this.worktrees) return;
|
|
23673
|
+
try {
|
|
23674
|
+
const result = await this.worktrees.merge(handle, { squash: true });
|
|
23675
|
+
await this.worktrees.release(handle, { keep: !result.ok });
|
|
23676
|
+
} catch (err) {
|
|
23677
|
+
this.emit("phase.failed", {
|
|
23678
|
+
phaseId: phase.id,
|
|
23679
|
+
name: phase.name,
|
|
23680
|
+
error: `worktree merge failed: ${err instanceof Error ? err.message : String(err)}`
|
|
23681
|
+
});
|
|
23682
|
+
}
|
|
23683
|
+
}
|
|
23684
|
+
/** A failed phase keeps its worktree on disk for inspection (no merge). */
|
|
23685
|
+
async keepWorktreeForReview(phase) {
|
|
23686
|
+
const handle = this.phaseWorktrees.get(phase.id);
|
|
23687
|
+
if (!this.worktrees || !handle) return;
|
|
23688
|
+
try {
|
|
23689
|
+
await this.worktrees.commitAll(handle, `autophase(${phase.name}) [failed]: ${phase.id}`);
|
|
23690
|
+
} catch {
|
|
23691
|
+
}
|
|
23692
|
+
await this.worktrees.release(handle, { keep: true }).catch(() => {
|
|
23693
|
+
});
|
|
23694
|
+
}
|
|
23610
23695
|
async executePhaseTasks(phase) {
|
|
23611
23696
|
const pendingTasks = this.getExecutableTasks(phase);
|
|
23612
23697
|
while (pendingTasks.length > 0 && !this.stopped) {
|
|
@@ -23632,7 +23717,8 @@ var PhaseOrchestrator = class {
|
|
|
23632
23717
|
async executeSingleTask(task, phase) {
|
|
23633
23718
|
const tracker = this.getTrackerForPhase(phase);
|
|
23634
23719
|
tracker.updateNodeStatus(task.id, "in_progress");
|
|
23635
|
-
|
|
23720
|
+
const handle = this.phaseWorktrees.get(phase.id);
|
|
23721
|
+
return this.ctx.executeTask(task, phase.id, { cwd: handle?.dir, branch: handle?.branch });
|
|
23636
23722
|
}
|
|
23637
23723
|
markTaskCompleted(phase, task) {
|
|
23638
23724
|
const tracker = this.getTrackerForPhase(phase);
|
|
@@ -23855,7 +23941,7 @@ var PhaseOrchestrator = class {
|
|
|
23855
23941
|
};
|
|
23856
23942
|
}
|
|
23857
23943
|
delay(ms) {
|
|
23858
|
-
return new Promise((
|
|
23944
|
+
return new Promise((resolve8) => setTimeout(resolve8, ms));
|
|
23859
23945
|
}
|
|
23860
23946
|
};
|
|
23861
23947
|
|
|
@@ -24499,7 +24585,261 @@ var CheckpointManager = class {
|
|
|
24499
24585
|
}
|
|
24500
24586
|
}
|
|
24501
24587
|
};
|
|
24588
|
+
var MAX_SLUG = 40;
|
|
24589
|
+
var WorktreeManager = class {
|
|
24590
|
+
projectRoot;
|
|
24591
|
+
events;
|
|
24592
|
+
gitBin;
|
|
24593
|
+
runGit;
|
|
24594
|
+
/** Keyed by ownerId. */
|
|
24595
|
+
handles = /* @__PURE__ */ new Map();
|
|
24596
|
+
usedSlugs = /* @__PURE__ */ new Set();
|
|
24597
|
+
constructor(opts) {
|
|
24598
|
+
this.projectRoot = resolve(opts.projectRoot);
|
|
24599
|
+
this.events = opts.events;
|
|
24600
|
+
this.gitBin = opts.gitBin ?? "git";
|
|
24601
|
+
this.runGit = opts.run ?? ((args, cwd) => this.defaultRun(args, cwd));
|
|
24602
|
+
}
|
|
24603
|
+
/** Create a fresh worktree + branch forked from the current base branch. */
|
|
24604
|
+
async allocate(ownerId, opts = {}) {
|
|
24605
|
+
const existing = this.handles.get(ownerId);
|
|
24606
|
+
if (existing && (existing.status === "allocating" || existing.status === "active")) {
|
|
24607
|
+
return existing;
|
|
24608
|
+
}
|
|
24609
|
+
const slug = this.makeSlug(opts.slugHint ?? ownerId);
|
|
24610
|
+
const branch = `wstack/ap/${slug}`;
|
|
24611
|
+
const dir = join(this.worktreesRoot(), slug);
|
|
24612
|
+
assertSafePath(dir, this.projectRoot);
|
|
24613
|
+
const baseBranch = opts.baseBranch ?? await this.detectBaseBranch();
|
|
24614
|
+
const handle = {
|
|
24615
|
+
id: slug,
|
|
24616
|
+
ownerId,
|
|
24617
|
+
ownerLabel: opts.ownerLabel ?? opts.slugHint ?? ownerId,
|
|
24618
|
+
slug,
|
|
24619
|
+
dir,
|
|
24620
|
+
branch,
|
|
24621
|
+
baseBranch,
|
|
24622
|
+
status: "allocating",
|
|
24623
|
+
createdAt: Date.now(),
|
|
24624
|
+
updatedAt: Date.now(),
|
|
24625
|
+
insertions: 0,
|
|
24626
|
+
deletions: 0,
|
|
24627
|
+
files: 0
|
|
24628
|
+
};
|
|
24629
|
+
this.handles.set(ownerId, handle);
|
|
24630
|
+
try {
|
|
24631
|
+
await mkdir(this.worktreesRoot(), { recursive: true });
|
|
24632
|
+
const res = await this.runGit(
|
|
24633
|
+
["worktree", "add", "-b", branch, dir, baseBranch],
|
|
24634
|
+
this.projectRoot
|
|
24635
|
+
);
|
|
24636
|
+
if (res.code !== 0) {
|
|
24637
|
+
return this.fail(handle, res.stderr || "git worktree add failed");
|
|
24638
|
+
}
|
|
24639
|
+
} catch (err) {
|
|
24640
|
+
return this.fail(handle, err instanceof Error ? err.message : String(err));
|
|
24641
|
+
}
|
|
24642
|
+
this.setStatus(handle, "active");
|
|
24643
|
+
this.emit("worktree.allocated", {
|
|
24644
|
+
handleId: handle.id,
|
|
24645
|
+
ownerId: handle.ownerId,
|
|
24646
|
+
ownerLabel: handle.ownerLabel,
|
|
24647
|
+
slug: handle.slug,
|
|
24648
|
+
dir: handle.dir,
|
|
24649
|
+
branch: handle.branch,
|
|
24650
|
+
baseBranch: handle.baseBranch
|
|
24651
|
+
});
|
|
24652
|
+
return handle;
|
|
24653
|
+
}
|
|
24654
|
+
/** Stage everything and commit inside the worktree. */
|
|
24655
|
+
async commitAll(handle, message) {
|
|
24656
|
+
this.setStatus(handle, "committing");
|
|
24657
|
+
await this.runGit(["add", "-A"], handle.dir);
|
|
24658
|
+
const staged = await this.runGit(["diff", "--cached", "--quiet"], handle.dir);
|
|
24659
|
+
if (staged.code === 0) {
|
|
24660
|
+
this.emitCommitted(handle, false);
|
|
24661
|
+
return { committed: false };
|
|
24662
|
+
}
|
|
24663
|
+
const committed = await this.runGit(["commit", "-m", message], handle.dir);
|
|
24664
|
+
if (committed.code !== 0) {
|
|
24665
|
+
this.fail(handle, committed.stderr || "git commit failed");
|
|
24666
|
+
return { committed: false };
|
|
24667
|
+
}
|
|
24668
|
+
const stats = await this.collectStats(handle.dir);
|
|
24669
|
+
handle.insertions = stats.insertions;
|
|
24670
|
+
handle.deletions = stats.deletions;
|
|
24671
|
+
handle.files = stats.files;
|
|
24672
|
+
handle.sha = stats.sha;
|
|
24673
|
+
handle.updatedAt = Date.now();
|
|
24674
|
+
this.emitCommitted(handle, true);
|
|
24675
|
+
return { committed: true };
|
|
24676
|
+
}
|
|
24677
|
+
/** Merge the worktree branch back into the base branch (squash by default). */
|
|
24678
|
+
async merge(handle, opts = {}) {
|
|
24679
|
+
const squash = opts.squash ?? true;
|
|
24680
|
+
this.setStatus(handle, "merging");
|
|
24681
|
+
const checkout = await this.runGit(["checkout", handle.baseBranch], this.projectRoot);
|
|
24682
|
+
if (checkout.code !== 0) {
|
|
24683
|
+
this.fail(handle, checkout.stderr || `checkout ${handle.baseBranch} failed`);
|
|
24684
|
+
return { ok: false, stderr: checkout.stderr };
|
|
24685
|
+
}
|
|
24686
|
+
const mergeArgs = squash ? ["merge", "--squash", handle.branch] : ["merge", "--no-ff", handle.branch];
|
|
24687
|
+
const merged = await this.runGit(mergeArgs, this.projectRoot);
|
|
24688
|
+
if (merged.code !== 0) {
|
|
24689
|
+
const conflictFiles = await this.unmergedFiles();
|
|
24690
|
+
await this.runGit(["reset", "--hard", "HEAD"], this.projectRoot);
|
|
24691
|
+
handle.conflictFiles = conflictFiles;
|
|
24692
|
+
this.setStatus(handle, "needs-review", { lastError: merged.stderr });
|
|
24693
|
+
this.emit("worktree.conflict", {
|
|
24694
|
+
handleId: handle.id,
|
|
24695
|
+
ownerId: handle.ownerId,
|
|
24696
|
+
branch: handle.branch,
|
|
24697
|
+
conflictFiles
|
|
24698
|
+
});
|
|
24699
|
+
return { ok: false, conflict: true, conflictFiles, stderr: merged.stderr };
|
|
24700
|
+
}
|
|
24701
|
+
if (squash) {
|
|
24702
|
+
const msg = opts.message ?? `merge ${handle.branch} (squash)`;
|
|
24703
|
+
const commit = await this.runGit(["commit", "-m", msg], this.projectRoot);
|
|
24704
|
+
if (commit.code !== 0 && !/nothing to commit/i.test(commit.stdout + commit.stderr)) {
|
|
24705
|
+
this.fail(handle, commit.stderr || "squash commit failed");
|
|
24706
|
+
return { ok: false, stderr: commit.stderr };
|
|
24707
|
+
}
|
|
24708
|
+
}
|
|
24709
|
+
this.setStatus(handle, "merged");
|
|
24710
|
+
this.emit("worktree.merged", {
|
|
24711
|
+
handleId: handle.id,
|
|
24712
|
+
ownerId: handle.ownerId,
|
|
24713
|
+
branch: handle.branch,
|
|
24714
|
+
baseBranch: handle.baseBranch,
|
|
24715
|
+
squash
|
|
24716
|
+
});
|
|
24717
|
+
return { ok: true };
|
|
24718
|
+
}
|
|
24719
|
+
/**
|
|
24720
|
+
* Remove the worktree + branch. Conflicted/failed handles (or `keep:true`)
|
|
24721
|
+
* are left on disk for inspection.
|
|
24722
|
+
*/
|
|
24723
|
+
async release(handle, opts = {}) {
|
|
24724
|
+
const keep = opts.keep || handle.status === "needs-review" || handle.status === "failed";
|
|
24725
|
+
if (!keep) {
|
|
24726
|
+
await this.runGit(["worktree", "remove", "--force", handle.dir], this.projectRoot);
|
|
24727
|
+
await this.runGit(["branch", "-D", handle.branch], this.projectRoot);
|
|
24728
|
+
await this.runGit(["worktree", "prune"], this.projectRoot);
|
|
24729
|
+
this.handles.delete(handle.ownerId);
|
|
24730
|
+
}
|
|
24731
|
+
this.emit("worktree.released", {
|
|
24732
|
+
handleId: handle.id,
|
|
24733
|
+
ownerId: handle.ownerId,
|
|
24734
|
+
branch: handle.branch,
|
|
24735
|
+
kept: keep
|
|
24736
|
+
});
|
|
24737
|
+
}
|
|
24738
|
+
get(ownerId) {
|
|
24739
|
+
return this.handles.get(ownerId);
|
|
24740
|
+
}
|
|
24741
|
+
list() {
|
|
24742
|
+
return [...this.handles.values()];
|
|
24743
|
+
}
|
|
24744
|
+
// ── internals ────────────────────────────────────────────────────────────
|
|
24745
|
+
worktreesRoot() {
|
|
24746
|
+
return join(this.projectRoot, ".wrongstack", "worktrees");
|
|
24747
|
+
}
|
|
24748
|
+
async detectBaseBranch() {
|
|
24749
|
+
const head = await this.runGit(["rev-parse", "--abbrev-ref", "HEAD"], this.projectRoot);
|
|
24750
|
+
const name = head.stdout.trim();
|
|
24751
|
+
if (name && name !== "HEAD") return name;
|
|
24752
|
+
const sha = await this.runGit(["rev-parse", "HEAD"], this.projectRoot);
|
|
24753
|
+
return sha.stdout.trim() || "HEAD";
|
|
24754
|
+
}
|
|
24755
|
+
makeSlug(hint) {
|
|
24756
|
+
let base = hint.toLowerCase().replace(/[^a-z0-9._-]+/g, "-").replace(/-+/g, "-").replace(/^[-.]+/, "").replace(/[-.]+$/, "").slice(0, MAX_SLUG).replace(/[-.]+$/, "");
|
|
24757
|
+
if (!base) base = "wt";
|
|
24758
|
+
let slug = `${base}-${crypto.randomUUID().slice(0, 6)}`;
|
|
24759
|
+
while (this.usedSlugs.has(slug)) slug = `${base}-${crypto.randomUUID().slice(0, 6)}`;
|
|
24760
|
+
this.usedSlugs.add(slug);
|
|
24761
|
+
return slug;
|
|
24762
|
+
}
|
|
24763
|
+
async collectStats(dir) {
|
|
24764
|
+
const sha = (await this.runGit(["rev-parse", "HEAD"], dir)).stdout.trim();
|
|
24765
|
+
const numstat = await this.runGit(["show", "--numstat", "--format=", "HEAD"], dir);
|
|
24766
|
+
let insertions = 0;
|
|
24767
|
+
let deletions = 0;
|
|
24768
|
+
let files = 0;
|
|
24769
|
+
for (const line of numstat.stdout.split("\n")) {
|
|
24770
|
+
const m = line.trim().match(/^(\d+|-)\t(\d+|-)\t(.+)$/);
|
|
24771
|
+
if (!m) continue;
|
|
24772
|
+
files++;
|
|
24773
|
+
if (m[1] !== "-") insertions += Number(m[1]);
|
|
24774
|
+
if (m[2] !== "-") deletions += Number(m[2]);
|
|
24775
|
+
}
|
|
24776
|
+
return { insertions, deletions, files, sha };
|
|
24777
|
+
}
|
|
24778
|
+
async unmergedFiles() {
|
|
24779
|
+
const res = await this.runGit(
|
|
24780
|
+
["diff", "--name-only", "--diff-filter=U"],
|
|
24781
|
+
this.projectRoot
|
|
24782
|
+
);
|
|
24783
|
+
return res.stdout.split("\n").map((s) => s.trim()).filter(Boolean);
|
|
24784
|
+
}
|
|
24785
|
+
emitCommitted(handle, committed) {
|
|
24786
|
+
this.emit("worktree.committed", {
|
|
24787
|
+
handleId: handle.id,
|
|
24788
|
+
ownerId: handle.ownerId,
|
|
24789
|
+
branch: handle.branch,
|
|
24790
|
+
committed,
|
|
24791
|
+
insertions: handle.insertions,
|
|
24792
|
+
deletions: handle.deletions,
|
|
24793
|
+
files: handle.files,
|
|
24794
|
+
sha: handle.sha
|
|
24795
|
+
});
|
|
24796
|
+
}
|
|
24797
|
+
fail(handle, error) {
|
|
24798
|
+
this.setStatus(handle, "failed", { lastError: error });
|
|
24799
|
+
this.emit("worktree.failed", {
|
|
24800
|
+
handleId: handle.id,
|
|
24801
|
+
ownerId: handle.ownerId,
|
|
24802
|
+
branch: handle.branch,
|
|
24803
|
+
error
|
|
24804
|
+
});
|
|
24805
|
+
return handle;
|
|
24806
|
+
}
|
|
24807
|
+
setStatus(handle, status, patch) {
|
|
24808
|
+
handle.status = status;
|
|
24809
|
+
handle.updatedAt = Date.now();
|
|
24810
|
+
if (patch) Object.assign(handle, patch);
|
|
24811
|
+
}
|
|
24812
|
+
emit(event, payload) {
|
|
24813
|
+
this.events?.emit(event, payload);
|
|
24814
|
+
}
|
|
24815
|
+
defaultRun(args, cwd) {
|
|
24816
|
+
return new Promise((res) => {
|
|
24817
|
+
let stdout = "";
|
|
24818
|
+
let stderr = "";
|
|
24819
|
+
const child = spawn(this.gitBin, args, {
|
|
24820
|
+
cwd,
|
|
24821
|
+
env: buildChildEnv(),
|
|
24822
|
+
stdio: ["ignore", "pipe", "pipe"]
|
|
24823
|
+
});
|
|
24824
|
+
child.stdout?.on("data", (c) => {
|
|
24825
|
+
stdout += c.toString();
|
|
24826
|
+
});
|
|
24827
|
+
child.stderr?.on("data", (c) => {
|
|
24828
|
+
stderr += c.toString();
|
|
24829
|
+
});
|
|
24830
|
+
child.on("error", (err) => res({ code: 1, stdout, stderr: err.message }));
|
|
24831
|
+
child.on("close", (code) => res({ code: code ?? 1, stdout, stderr }));
|
|
24832
|
+
});
|
|
24833
|
+
}
|
|
24834
|
+
};
|
|
24835
|
+
function assertSafePath(dir, projectRoot) {
|
|
24836
|
+
const root = resolve(projectRoot);
|
|
24837
|
+
const abs = resolve(dir);
|
|
24838
|
+
if (abs !== root && !abs.startsWith(root + sep)) {
|
|
24839
|
+
throw new Error(`worktree path escapes project root: ${dir}`);
|
|
24840
|
+
}
|
|
24841
|
+
}
|
|
24502
24842
|
|
|
24503
|
-
export { AGENTS_BY_PHASE, AGENT_CATALOG, AISpecBuilder, ALL_AGENT_DEFINITIONS, ALL_FLEET_AGENTS, AUDIT_LOG_AGENT, Agent, AgentError, AutoApprovePermissionPolicy, AutoCompactionMiddleware, AutoExecutor, AutoPhasePlanner, AutoPhaseRunner, AutonomousRunner, BUG_HUNTER_AGENT, BudgetExceededError, CONTEXT_WINDOW_MODES, CheckpointManager, ConfigError, ConfigMigrationError, Container, Context, ConversationState, DEFAULT_CONFIG_MIGRATIONS, DEFAULT_CONTEXT_CONFIG, DEFAULT_CONTEXT_WINDOW_MODE_ID, DEFAULT_DIRECTOR_PREAMBLE, DEFAULT_DISPATCH_ROLE, DEFAULT_MAX_ITERATIONS, DEFAULT_MODES, DEFAULT_RECOVERY_STRATEGIES, DEFAULT_SPEC_TEMPLATE, DEFAULT_SUBAGENT_BASELINE, DEFAULT_TOOLS_CONFIG, DefaultAttachmentStore, DefaultConfigLoader, DefaultConfigStore, DefaultErrorHandler, DefaultHealthRegistry, DefaultLogger, DefaultMemoryStore, DefaultModeStore, DefaultModelsRegistry, DefaultMultiAgentCoordinator, DefaultPathResolver, DefaultPermissionPolicy, DefaultPluginAPI, DefaultProviderRunner, DefaultRetryPolicy, DefaultSecretScrubber, DefaultSecretVault, DefaultSessionReader, DefaultSessionRewinder, DefaultSessionStore, DefaultSkillLoader, DefaultSystemPromptBuilder, DefaultTaskStore, DefaultTokenCounter, Director, DirectorStateCheckpoint, DoneConditionChecker, ERROR_CODES, EternalAutonomyEngine, EventBus, ExtensionRegistry, FLEET_ROSTER, FLEET_ROSTER_BUDGETS, FleetBus, FleetManager, FleetSpawnBudgetError, FleetUsageAggregator, FsError, GitignoreUpdater, HybridCompactor, InMemoryAgentBridge, InMemoryBridgeTransport, InMemoryMetricsSink, InputBuilder, IntelligentCompactor, KERNEL_API_VERSION, LAYER_1_IDENTITY, LLMSelector, MAX_JOURNAL_ENTRIES, NULL_FLEET_BUS, NoopMetricsSink, NoopTracer, OTelTracer, PROMETHEUS_CONTENT_TYPE, ParallelEternalEngine, PhaseGraphBuilder, PhaseOrchestrator, PhaseStore, Pipeline, PluginError, ProviderError, ProviderRegistry, QueueStore, REFACTOR_PLANNER_AGENT, RecoveryLock, ReportGenerator, RunController, SECURITY_SCANNER_AGENT, SPEC_TEMPLATES, ScopedEventBus, SddParallelRun, SddTaskDecomposer, SecurityScanner, SecurityScannerOrchestrator, SelectiveCompactor, SessionAnalyzer, SessionError, SkillGenerator, SkillInstaller, SkillManifestStore, SlashCommandRegistry, SpecDrivenDev, SpecParser, SpecStore, SpecVersioning, SubagentBudget, TOKENS, TaskFlow, TaskGenerator, TaskGraphStore, TaskTracker, TechStackDetector, ToolError, ToolExecutor, ToolRegistry, WrongStackError, addPlanItem, allServers, analyzeCriticalPath, appendJournal, applyRosterBudget, asBlocks, asText, atomicWrite, attachAutoExtend, attachPlanCheckpoint, attachTodosCheckpoint, awsServer, blockServer, braveSearchServer, buildBtwBlock, buildChildEnv, buildGoalPreamble, buildOtlpMetricsRequest, buildOtlpTracesRequest, buildRecoveryStrategies, classifyFamily, clearPlan, color, compileGlob, compileUserRegex, composeDirectorPrompt, composeSubagentPrompt, computeTaskProgress, consumeBtwNotes, context7Server, contextManagerTool, createAutoExecutor, createAutoPhaseFromTaskGraph, createContextManagerTool, createDefaultPipelines, createDelegateTool, createMcpControlTool, createMessage, createSecuritySlashCommand, createToolOutputSerializer, decryptConfigSecrets, defaultGitignoreUpdater, defaultOrchestrator, defaultReportGenerator, defaultSecurityScanner, defaultSkillGenerator, defaultTechStackDetector, deriveTodosFromPlanItem, detectNewlineStyle, dispatchAgent, downloadGitHubTarball, emptyGoal, emptyPlan, encryptConfigSecrets, ensureDir, estimateRequestTokens, estimateTextTokens, estimateToolDefTokens, estimateToolInputTokens, estimateToolResultTokens, everArtServer, extractRunEnv, filesystemServer, findCriticalPath, formatContextWindowModeList, formatGoal, formatPlan, formatPlanTemplates, formatTodosList, getAgentDefinition, getContextWindowMode, getPlanTemplate, getTemplate, githubServer, goalFilePath, googleMapsServer, isAgentError, isConfigError, isContextWindowModeId, isFsError, isImageBlock, isPluginError, isSessionError, isTextBlock, isThinkingBlock, isToolError, isToolResultBlock, isToolUseBlock, isWrongStackError, listContextWindowModes, listPlanTemplates, listTemplates, loadDirectorState, loadGoal, loadPlan, loadPlugins, loadProjectModes, loadTodosCheckpoint, loadUserModes, makeAgentSubagentRunner, makeAutonomyPromptContributor, makeContinueToNextIterationTool, makeDirectorSessionFactory, makeLLMClassifier, matchAny, matchGlob, migratePlaintextSecrets, miniMaxVisionServer, normalizeToLf, parseContinueDirective, parseSkillRef, pendingBtwCount, projectHash, removePlanItem, renderProgress, renderPrometheus, renderSpecAnalysis, renderTaskGraph, renderTaskList, repairToolUseAdjacency, resolveContextWindowPolicy, resolveWstackPaths, rewriteConfigEncrypted, rosterSummaryFromConfigs, runConfigMigrations, safeParse, safeStringify, sanitizeJsonString, saveGoal, savePlan, saveTodosCheckpoint, scoreAgents, securitySlashCommand, sentinelServer, setBtwNote, setPlanItemStatus, slackServer, startMetricsServer, startOtlpMetricsExporter, startOtlpTraceExporter, stripAnsi, summarizeUsage, templateToMarkdown, toStyle, toWrongStackError, topologicalSort, unifiedDiff, unloadPlugins, validateAgainstSchema, wireMetricsToEvents, wrapAsState, zaiVisionServer };
|
|
24843
|
+
export { AGENTS_BY_PHASE, AGENT_CATALOG, AISpecBuilder, ALL_AGENT_DEFINITIONS, ALL_FLEET_AGENTS, AUDIT_LOG_AGENT, Agent, AgentError, AutoApprovePermissionPolicy, AutoCompactionMiddleware, AutoExecutor, AutoPhasePlanner, AutoPhaseRunner, AutonomousRunner, BUG_HUNTER_AGENT, BudgetExceededError, CONTEXT_WINDOW_MODES, CheckpointManager, ConfigError, ConfigMigrationError, Container, Context, ConversationState, DEFAULT_CONFIG_MIGRATIONS, DEFAULT_CONTEXT_CONFIG, DEFAULT_CONTEXT_WINDOW_MODE_ID, DEFAULT_DIRECTOR_PREAMBLE, DEFAULT_DISPATCH_ROLE, DEFAULT_MAX_ITERATIONS, DEFAULT_MODES, DEFAULT_RECOVERY_STRATEGIES, DEFAULT_SPEC_TEMPLATE, DEFAULT_SUBAGENT_BASELINE, DEFAULT_TOOLS_CONFIG, DefaultAttachmentStore, DefaultConfigLoader, DefaultConfigStore, DefaultErrorHandler, DefaultHealthRegistry, DefaultLogger, DefaultMemoryStore, DefaultModeStore, DefaultModelsRegistry, DefaultMultiAgentCoordinator, DefaultPathResolver, DefaultPermissionPolicy, DefaultPluginAPI, DefaultProviderRunner, DefaultRetryPolicy, DefaultSecretScrubber, DefaultSecretVault, DefaultSessionReader, DefaultSessionRewinder, DefaultSessionStore, DefaultSkillLoader, DefaultSystemPromptBuilder, DefaultTaskStore, DefaultTokenCounter, Director, DirectorStateCheckpoint, DoneConditionChecker, ERROR_CODES, EternalAutonomyEngine, EventBus, ExtensionRegistry, FLEET_ROSTER, FLEET_ROSTER_BUDGETS, FleetBus, FleetManager, FleetSpawnBudgetError, FleetUsageAggregator, FsError, GitignoreUpdater, HybridCompactor, InMemoryAgentBridge, InMemoryBridgeTransport, InMemoryMetricsSink, InputBuilder, IntelligentCompactor, KERNEL_API_VERSION, LAYER_1_IDENTITY, LLMSelector, MAX_JOURNAL_ENTRIES, NULL_FLEET_BUS, NoopMetricsSink, NoopTracer, OTelTracer, PROMETHEUS_CONTENT_TYPE, ParallelEternalEngine, PhaseGraphBuilder, PhaseOrchestrator, PhaseStore, Pipeline, PluginError, ProviderError, ProviderRegistry, QueueStore, REFACTOR_PLANNER_AGENT, RecoveryLock, ReportGenerator, RunController, SECURITY_SCANNER_AGENT, SPEC_TEMPLATES, ScopedEventBus, SddParallelRun, SddTaskDecomposer, SecurityScanner, SecurityScannerOrchestrator, SelectiveCompactor, SessionAnalyzer, SessionError, SkillGenerator, SkillInstaller, SkillManifestStore, SlashCommandRegistry, SpecDrivenDev, SpecParser, SpecStore, SpecVersioning, SubagentBudget, TOKENS, TaskFlow, TaskGenerator, TaskGraphStore, TaskTracker, TechStackDetector, ToolError, ToolExecutor, ToolRegistry, WorktreeManager, WrongStackError, addPlanItem, allServers, analyzeCriticalPath, appendJournal, applyRosterBudget, asBlocks, asText, assertSafePath, atomicWrite, attachAutoExtend, attachPlanCheckpoint, attachTodosCheckpoint, awsServer, blockServer, braveSearchServer, buildBtwBlock, buildChildEnv, buildGoalPreamble, buildOtlpMetricsRequest, buildOtlpTracesRequest, buildRecoveryStrategies, classifyFamily, clearPlan, color, compileGlob, compileUserRegex, composeDirectorPrompt, composeSubagentPrompt, computeTaskProgress, consumeBtwNotes, context7Server, contextManagerTool, createAutoExecutor, createAutoPhaseFromTaskGraph, createContextManagerTool, createDefaultPipelines, createDelegateTool, createMcpControlTool, createMessage, createSecuritySlashCommand, createToolOutputSerializer, decryptConfigSecrets, defaultGitignoreUpdater, defaultOrchestrator, defaultReportGenerator, defaultSecurityScanner, defaultSkillGenerator, defaultTechStackDetector, deriveTodosFromPlanItem, detectNewlineStyle, dispatchAgent, downloadGitHubTarball, emptyGoal, emptyPlan, encryptConfigSecrets, ensureDir, estimateRequestTokens, estimateTextTokens, estimateToolDefTokens, estimateToolInputTokens, estimateToolResultTokens, everArtServer, extractRunEnv, filesystemServer, findCriticalPath, formatContextWindowModeList, formatGoal, formatPlan, formatPlanTemplates, formatTodosList, getAgentDefinition, getContextWindowMode, getPlanTemplate, getTemplate, githubServer, goalFilePath, googleMapsServer, isAgentError, isConfigError, isContextWindowModeId, isFsError, isImageBlock, isPluginError, isSessionError, isTextBlock, isThinkingBlock, isToolError, isToolResultBlock, isToolUseBlock, isWrongStackError, listContextWindowModes, listPlanTemplates, listTemplates, loadDirectorState, loadGoal, loadPlan, loadPlugins, loadProjectModes, loadTodosCheckpoint, loadUserModes, makeAgentSubagentRunner, makeAutonomyPromptContributor, makeContinueToNextIterationTool, makeDirectorSessionFactory, makeLLMClassifier, matchAny, matchGlob, migratePlaintextSecrets, miniMaxVisionServer, normalizeToLf, parseContinueDirective, parseSkillRef, pendingBtwCount, projectHash, removePlanItem, renderProgress, renderPrometheus, renderSpecAnalysis, renderTaskGraph, renderTaskList, repairToolUseAdjacency, resolveContextWindowPolicy, resolveWstackPaths, rewriteConfigEncrypted, rosterSummaryFromConfigs, runConfigMigrations, safeParse, safeStringify, sanitizeJsonString, saveGoal, savePlan, saveTodosCheckpoint, scoreAgents, securitySlashCommand, sentinelServer, setBtwNote, setPlanItemStatus, slackServer, startMetricsServer, startOtlpMetricsExporter, startOtlpTraceExporter, stripAnsi, summarizeUsage, templateToMarkdown, toStyle, toWrongStackError, topologicalSort, unifiedDiff, unloadPlugins, validateAgainstSchema, wireMetricsToEvents, wrapAsState, zaiVisionServer };
|
|
24504
24844
|
//# sourceMappingURL=index.js.map
|
|
24505
24845
|
//# sourceMappingURL=index.js.map
|