@wrongstack/core 0.87.0 → 0.89.3
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-C9P_HPez.d.ts → agent-bridge-DbVe1dHT.d.ts} +1 -1
- package/dist/{agent-subagent-runner-2Aq0jOSj.d.ts → agent-subagent-runner-C6eqID1t.d.ts} +477 -476
- package/dist/{events-DnRqXaZ3.d.ts → brain-s9DyD_Vf.d.ts} +185 -92
- package/dist/{compactor-CJq7LQev.d.ts → compactor-DXLxLcmU.d.ts} +2 -2
- package/dist/{config-_DZ7dN-T.d.ts → config-84VaZpH6.d.ts} +45 -38
- package/dist/{context-ToHAp4-U.d.ts → context-CNRYfhUv.d.ts} +1 -1
- package/dist/coordination/index.d.ts +16 -17
- package/dist/coordination/index.js +208 -93
- package/dist/coordination/index.js.map +1 -1
- package/dist/{default-config-DEXI4jsl.d.ts → default-config-CXsDvOmP.d.ts} +3 -1
- package/dist/defaults/index.d.ts +32 -34
- package/dist/defaults/index.js +744 -274
- package/dist/defaults/index.js.map +1 -1
- package/dist/{director-state-CgIc30qi.d.ts → director-state-BfeCUbmk.d.ts} +1 -1
- package/dist/execution/index.d.ts +18 -19
- package/dist/execution/index.js +79 -64
- package/dist/execution/index.js.map +1 -1
- package/dist/extension/index.d.ts +9 -10
- package/dist/extension/index.js +8 -6
- package/dist/extension/index.js.map +1 -1
- package/dist/{index-BNOLadHw.d.ts → index-CqrroYcU.d.ts} +13 -15
- package/dist/{index-N0_c4bHQ.d.ts → index-D3Nax3YU.d.ts} +11 -10
- package/dist/index.d.ts +191 -178
- package/dist/index.js +1419 -526
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/index.d.ts +9 -9
- package/dist/infrastructure/index.js +16 -5
- package/dist/infrastructure/index.js.map +1 -1
- package/dist/kernel/index.d.ts +14 -16
- package/dist/kernel/index.js +17 -0
- package/dist/kernel/index.js.map +1 -1
- package/dist/{logger-B72yyPc6.d.ts → logger-B63L5bTg.d.ts} +1 -1
- package/dist/{logger-C_27pj9i.d.ts → logger-B9J5puGM.d.ts} +1 -1
- package/dist/{mcp-servers-Dck3T85_.d.ts → mcp-servers-D3E5ixAR.d.ts} +3 -3
- package/dist/{mode-CHo2XtHs.d.ts → mode-ARA3HrkY.d.ts} +1 -1
- package/dist/models/index.d.ts +5 -5
- package/dist/models/index.js +8 -6
- package/dist/models/index.js.map +1 -1
- package/dist/{models-registry-Be3osGt5.d.ts → models-registry-B6_KfS65.d.ts} +1 -1
- package/dist/{models-registry-Boz639EI.d.ts → models-registry-DU64QxQa.d.ts} +1 -1
- package/dist/{multi-agent-coordinator-DllpCVkF.d.ts → multi-agent-coordinator-DHNrjPaA.d.ts} +2 -2
- package/dist/{null-fleet-bus-BY0AN-sr.d.ts → null-fleet-bus-BzzciAc4.d.ts} +39 -32
- package/dist/observability/index.d.ts +3 -3
- package/dist/{observability-CoSNZdhX.d.ts → observability-D-HZN_mF.d.ts} +1 -1
- package/dist/{parallel-eternal-engine-D402RASp.d.ts → parallel-eternal-engine-CTpcrb9O.d.ts} +34 -33
- package/dist/{path-resolver-UPFTsDyD.d.ts → path-resolver-B7hgMAVe.d.ts} +3 -3
- package/dist/{permission-14CChMmO.d.ts → permission-BDv7z0mk.d.ts} +7 -2
- package/dist/{permission-policy-gW5htOo1.d.ts → permission-policy-dF74EpDp.d.ts} +2 -2
- package/dist/{system-prompt-C0rLCeyn.d.ts → pipeline-C1Ad9OjI.d.ts} +73 -73
- package/dist/{plan-templates-DRvPgkfZ.d.ts → plan-templates-CNphsz0n.d.ts} +79 -11
- package/dist/{provider-runner-COAJM8tC.d.ts → provider-runner-cqvlB_oS.d.ts} +5 -5
- package/dist/{retry-policy-DSu6O6rD.d.ts → retry-policy-BcmuT_V0.d.ts} +2 -2
- package/dist/sdd/index.d.ts +12 -33
- package/dist/sdd/index.js +110 -50
- package/dist/sdd/index.js.map +1 -1
- package/dist/{secret-scrubber-yGBFQYju.d.ts → secret-vault-DrOhc2i5.d.ts} +7 -7
- package/dist/security/index.d.ts +4 -5
- package/dist/security/index.js +22 -4
- package/dist/security/index.js.map +1 -1
- package/dist/{selector-11-fm95U.d.ts → selector-C7wcdqMA.d.ts} +1 -1
- package/dist/{session-event-bridge-D0u-x576.d.ts → session-event-bridge-IVzs2GpE.d.ts} +1 -1
- package/dist/{session-reader-BQU-toaN.d.ts → session-reader-DDz1Ek4V.d.ts} +2 -2
- package/dist/{skill-BJeF2DwY.d.ts → skill-BJxzIyyN.d.ts} +1 -1
- package/dist/skills/index.d.ts +1 -1
- package/dist/skills/index.js +3 -9
- package/dist/skills/index.js.map +1 -1
- package/dist/storage/index.d.ts +134 -14
- package/dist/storage/index.js +982 -248
- package/dist/storage/index.js.map +1 -1
- package/dist/{task-graph-CikNdRTG.d.ts → task-graph-DJBqO0EY.d.ts} +1 -1
- package/dist/types/index.d.ts +26 -28
- package/dist/types/index.js +62 -37
- package/dist/types/index.js.map +1 -1
- package/dist/utils/expect-defined.d.ts +7 -0
- package/dist/utils/expect-defined.js +11 -0
- package/dist/utils/expect-defined.js.map +1 -0
- package/dist/utils/index.d.ts +11 -20
- package/dist/utils/index.js +61 -43
- package/dist/utils/index.js.map +1 -1
- package/dist/{wstack-paths-BQMvEllz.d.ts → wstack-paths-_lqjzErq.d.ts} +1 -1
- package/package.json +5 -1
- package/dist/memory-CEXuo7sz.d.ts +0 -16
- package/dist/secret-scrubber-3MHDDAtm.d.ts +0 -6
package/dist/sdd/index.js
CHANGED
|
@@ -17,7 +17,8 @@ var __export = (target, all) => {
|
|
|
17
17
|
var atomic_write_exports = {};
|
|
18
18
|
__export(atomic_write_exports, {
|
|
19
19
|
atomicWrite: () => atomicWrite,
|
|
20
|
-
ensureDir: () => ensureDir
|
|
20
|
+
ensureDir: () => ensureDir,
|
|
21
|
+
withFileLock: () => withFileLock
|
|
21
22
|
});
|
|
22
23
|
async function atomicWrite(targetPath, content, opts = {}) {
|
|
23
24
|
const dir = path.dirname(targetPath);
|
|
@@ -60,6 +61,49 @@ async function atomicWrite(targetPath, content, opts = {}) {
|
|
|
60
61
|
async function ensureDir(dir) {
|
|
61
62
|
await fs.mkdir(dir, { recursive: true });
|
|
62
63
|
}
|
|
64
|
+
async function withFileLock(targetPath, fn, opts = {}) {
|
|
65
|
+
const dir = path.dirname(targetPath);
|
|
66
|
+
await fs.mkdir(dir, { recursive: true });
|
|
67
|
+
const lockPath = path.join(dir, `.${path.basename(targetPath)}.lock`);
|
|
68
|
+
const timeoutMs = opts.timeoutMs ?? 5e3;
|
|
69
|
+
const staleMs = opts.staleMs ?? 3e4;
|
|
70
|
+
const started = Date.now();
|
|
71
|
+
let handle;
|
|
72
|
+
for (; ; ) {
|
|
73
|
+
try {
|
|
74
|
+
handle = await fs.open(lockPath, "wx");
|
|
75
|
+
await handle.writeFile(`${process.pid}:${Date.now()}`);
|
|
76
|
+
break;
|
|
77
|
+
} catch (err) {
|
|
78
|
+
if (err.code !== "EEXIST") throw err;
|
|
79
|
+
try {
|
|
80
|
+
const stat2 = await fs.stat(lockPath);
|
|
81
|
+
if (Date.now() - stat2.mtimeMs > staleMs) {
|
|
82
|
+
await fs.unlink(lockPath);
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
} catch {
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
if (Date.now() - started >= timeoutMs) {
|
|
89
|
+
throw new Error(`Timed out waiting for file lock: ${targetPath}`);
|
|
90
|
+
}
|
|
91
|
+
await new Promise((resolve) => setTimeout(resolve, 25));
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
try {
|
|
95
|
+
return await fn();
|
|
96
|
+
} finally {
|
|
97
|
+
try {
|
|
98
|
+
await handle?.close();
|
|
99
|
+
} catch {
|
|
100
|
+
}
|
|
101
|
+
try {
|
|
102
|
+
await fs.unlink(lockPath);
|
|
103
|
+
} catch {
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
63
107
|
async function renameWithRetry(from, to) {
|
|
64
108
|
if (process.platform !== "win32") {
|
|
65
109
|
await fs.rename(from, to);
|
|
@@ -1199,13 +1243,15 @@ var TaskGraphStore = class {
|
|
|
1199
1243
|
}
|
|
1200
1244
|
};
|
|
1201
1245
|
|
|
1202
|
-
// src/
|
|
1203
|
-
function expectDefined(value) {
|
|
1246
|
+
// src/utils/expect-defined.ts
|
|
1247
|
+
function expectDefined(value, label) {
|
|
1204
1248
|
if (value === null || value === void 0) {
|
|
1205
1249
|
throw new Error("Expected value to be defined");
|
|
1206
1250
|
}
|
|
1207
1251
|
return value;
|
|
1208
1252
|
}
|
|
1253
|
+
|
|
1254
|
+
// src/sdd/spec-builder.ts
|
|
1209
1255
|
function buildQuestioningPrompt(session, min, max) {
|
|
1210
1256
|
const answered = session.answers.length;
|
|
1211
1257
|
const remaining = Math.max(0, min - answered);
|
|
@@ -1993,12 +2039,6 @@ function truncate(str, maxLen) {
|
|
|
1993
2039
|
}
|
|
1994
2040
|
|
|
1995
2041
|
// src/sdd/critical-path.ts
|
|
1996
|
-
function expectDefined2(value) {
|
|
1997
|
-
if (value === null || value === void 0) {
|
|
1998
|
-
throw new Error("Expected value to be defined");
|
|
1999
|
-
}
|
|
2000
|
-
return value;
|
|
2001
|
-
}
|
|
2002
2042
|
function analyzeCriticalPath(graph) {
|
|
2003
2043
|
const nodes = Array.from(graph.nodes.values());
|
|
2004
2044
|
const topoOrder = topologicalSort(graph);
|
|
@@ -2074,7 +2114,7 @@ function getTransitiveBlocked(_graph, taskId, blocksMap) {
|
|
|
2074
2114
|
const visited = /* @__PURE__ */ new Set();
|
|
2075
2115
|
const queue = [taskId];
|
|
2076
2116
|
while (queue.length > 0) {
|
|
2077
|
-
const current =
|
|
2117
|
+
const current = expectDefined(queue.shift());
|
|
2078
2118
|
const blocked = blocksMap.get(current);
|
|
2079
2119
|
if (!blocked) continue;
|
|
2080
2120
|
for (const id of blocked) {
|
|
@@ -2120,7 +2160,7 @@ function computeCriticalPath(graph, _topoOrder, blockedByMap) {
|
|
|
2120
2160
|
if (!changed) break;
|
|
2121
2161
|
}
|
|
2122
2162
|
let maxDist = 0;
|
|
2123
|
-
let maxId =
|
|
2163
|
+
let maxId = expectDefined(allIds[0]);
|
|
2124
2164
|
for (const id of allIds) {
|
|
2125
2165
|
const d = dist.get(id) ?? 0;
|
|
2126
2166
|
if (d > maxDist) {
|
|
@@ -2591,6 +2631,7 @@ var SddTaskDecomposer = class {
|
|
|
2591
2631
|
};
|
|
2592
2632
|
|
|
2593
2633
|
// src/coordination/subagent-budget.ts
|
|
2634
|
+
var TIMEOUT_PREEMPT_FRACTION = 0.85;
|
|
2594
2635
|
var BudgetExceededError = class extends Error {
|
|
2595
2636
|
kind;
|
|
2596
2637
|
limit;
|
|
@@ -2946,15 +2987,7 @@ function makeAgentSubagentRunner(opts) {
|
|
|
2946
2987
|
let budgetError = null;
|
|
2947
2988
|
const onBudgetError = (err) => {
|
|
2948
2989
|
if (err instanceof BudgetThresholdSignal) {
|
|
2949
|
-
|
|
2950
|
-
if (decision === "stop") {
|
|
2951
|
-
budgetError = new BudgetExceededError(err.kind, err.limit, err.used);
|
|
2952
|
-
aborter.abort();
|
|
2953
|
-
}
|
|
2954
|
-
}).catch(() => {
|
|
2955
|
-
budgetError = new BudgetExceededError(err.kind, err.limit, err.used);
|
|
2956
|
-
aborter.abort();
|
|
2957
|
-
});
|
|
2990
|
+
budgetError = err;
|
|
2958
2991
|
return;
|
|
2959
2992
|
}
|
|
2960
2993
|
aborter.abort();
|
|
@@ -3062,15 +3095,23 @@ function makeAgentSubagentRunner(opts) {
|
|
|
3062
3095
|
}
|
|
3063
3096
|
if (budgetError) {
|
|
3064
3097
|
if ("decision" in budgetError) {
|
|
3065
|
-
|
|
3066
|
-
|
|
3098
|
+
try {
|
|
3099
|
+
const decision = await budgetError.decision;
|
|
3100
|
+
if (decision === "stop") {
|
|
3101
|
+
budgetError = new BudgetExceededError(
|
|
3102
|
+
budgetError.kind,
|
|
3103
|
+
budgetError.limit,
|
|
3104
|
+
budgetError.used
|
|
3105
|
+
);
|
|
3106
|
+
} else {
|
|
3107
|
+
budgetError = null;
|
|
3108
|
+
}
|
|
3109
|
+
} catch {
|
|
3067
3110
|
budgetError = new BudgetExceededError(
|
|
3068
3111
|
budgetError.kind,
|
|
3069
3112
|
budgetError.limit,
|
|
3070
3113
|
budgetError.used
|
|
3071
3114
|
);
|
|
3072
|
-
} else {
|
|
3073
|
-
budgetError = null;
|
|
3074
3115
|
}
|
|
3075
3116
|
}
|
|
3076
3117
|
if (budgetError) throw budgetError;
|
|
@@ -6110,15 +6151,38 @@ var DefaultMultiAgentCoordinator = class _DefaultMultiAgentCoordinator extends E
|
|
|
6110
6151
|
}
|
|
6111
6152
|
const start = Date.now();
|
|
6112
6153
|
let timer = null;
|
|
6154
|
+
let preemptedForLimit = null;
|
|
6113
6155
|
const timeoutPromise = new Promise((_, reject) => {
|
|
6114
6156
|
const armFor = (ms) => {
|
|
6115
6157
|
if (timer) clearTimeout(timer);
|
|
6116
6158
|
timer = setTimeout(onTick, Math.max(0, ms));
|
|
6117
6159
|
};
|
|
6118
6160
|
const scheduleNext = () => {
|
|
6119
|
-
const
|
|
6161
|
+
const wallLimit = budget.limits.timeoutMs ?? initialTimeoutMs;
|
|
6162
|
+
const wallRemaining = initialTimeoutMs === void 0 ? Number.POSITIVE_INFINITY : wallLimit - (Date.now() - start);
|
|
6120
6163
|
const idleRemaining = idleLimitMs === void 0 ? Number.POSITIVE_INFINITY : (budget.limits.idleTimeoutMs ?? idleLimitMs) - budget.idleMs();
|
|
6121
|
-
|
|
6164
|
+
const preemptRemaining = initialTimeoutMs === void 0 || preemptedForLimit === wallLimit ? Number.POSITIVE_INFINITY : wallLimit * TIMEOUT_PREEMPT_FRACTION - (Date.now() - start);
|
|
6165
|
+
armFor(Math.max(25, Math.min(wallRemaining, idleRemaining, preemptRemaining)));
|
|
6166
|
+
};
|
|
6167
|
+
const negotiateTimeout = async (used, limit) => {
|
|
6168
|
+
const handler = budget.onThreshold;
|
|
6169
|
+
if (!handler) return "stop";
|
|
6170
|
+
const result = handler({
|
|
6171
|
+
kind: "timeout",
|
|
6172
|
+
used,
|
|
6173
|
+
limit,
|
|
6174
|
+
requestDecision: () => new Promise((resolveDecision) => {
|
|
6175
|
+
budget._events?.emit("budget.threshold_reached", {
|
|
6176
|
+
kind: "timeout",
|
|
6177
|
+
used,
|
|
6178
|
+
limit,
|
|
6179
|
+
timeoutMs: 6e4,
|
|
6180
|
+
extend: (extra) => resolveDecision({ extend: extra }),
|
|
6181
|
+
deny: () => resolveDecision("stop")
|
|
6182
|
+
});
|
|
6183
|
+
})
|
|
6184
|
+
});
|
|
6185
|
+
return typeof result === "string" ? result : await result;
|
|
6122
6186
|
};
|
|
6123
6187
|
const onTick = async () => {
|
|
6124
6188
|
const elapsed = Date.now() - start;
|
|
@@ -6131,6 +6195,21 @@ var DefaultMultiAgentCoordinator = class _DefaultMultiAgentCoordinator extends E
|
|
|
6131
6195
|
reject(new BudgetExceededError("timeout", idleLimit ?? 0, budget.idleMs()));
|
|
6132
6196
|
return;
|
|
6133
6197
|
}
|
|
6198
|
+
if (wallLimit !== void 0 && !wallExceeded && budget.onThreshold && preemptedForLimit !== wallLimit && elapsed >= wallLimit * TIMEOUT_PREEMPT_FRACTION) {
|
|
6199
|
+
try {
|
|
6200
|
+
const decision = await negotiateTimeout(elapsed, wallLimit);
|
|
6201
|
+
if (typeof decision !== "string" && decision.extend.timeoutMs !== void 0) {
|
|
6202
|
+
budget.limits.timeoutMs = decision.extend.timeoutMs;
|
|
6203
|
+
preemptedForLimit = null;
|
|
6204
|
+
} else {
|
|
6205
|
+
preemptedForLimit = wallLimit;
|
|
6206
|
+
}
|
|
6207
|
+
} catch {
|
|
6208
|
+
preemptedForLimit = wallLimit;
|
|
6209
|
+
}
|
|
6210
|
+
scheduleNext();
|
|
6211
|
+
return;
|
|
6212
|
+
}
|
|
6134
6213
|
if (!wallExceeded) {
|
|
6135
6214
|
scheduleNext();
|
|
6136
6215
|
return;
|
|
@@ -6142,28 +6221,15 @@ var DefaultMultiAgentCoordinator = class _DefaultMultiAgentCoordinator extends E
|
|
|
6142
6221
|
return;
|
|
6143
6222
|
}
|
|
6144
6223
|
try {
|
|
6145
|
-
const
|
|
6146
|
-
kind: "timeout",
|
|
6147
|
-
used: elapsed,
|
|
6148
|
-
limit,
|
|
6149
|
-
requestDecision: () => new Promise((resolveDecision) => {
|
|
6150
|
-
budget._events?.emit("budget.threshold_reached", {
|
|
6151
|
-
kind: "timeout",
|
|
6152
|
-
used: elapsed,
|
|
6153
|
-
limit,
|
|
6154
|
-
timeoutMs: 6e4,
|
|
6155
|
-
extend: (extra) => resolveDecision({ extend: extra }),
|
|
6156
|
-
deny: () => resolveDecision("stop")
|
|
6157
|
-
});
|
|
6158
|
-
})
|
|
6159
|
-
});
|
|
6160
|
-
const decision = typeof result === "string" ? result : await result;
|
|
6224
|
+
const decision = await negotiateTimeout(elapsed, limit);
|
|
6161
6225
|
if (decision === "continue" || decision === "throw" || decision === "stop") {
|
|
6226
|
+
preemptedForLimit = null;
|
|
6162
6227
|
armFor(Math.max(1e3, limit));
|
|
6163
6228
|
return;
|
|
6164
6229
|
}
|
|
6165
6230
|
if (decision.extend.timeoutMs !== void 0) {
|
|
6166
6231
|
budget.limits.timeoutMs = decision.extend.timeoutMs;
|
|
6232
|
+
preemptedForLimit = null;
|
|
6167
6233
|
scheduleNext();
|
|
6168
6234
|
return;
|
|
6169
6235
|
}
|
|
@@ -6294,12 +6360,6 @@ var DefaultMultiAgentCoordinator = class _DefaultMultiAgentCoordinator extends E
|
|
|
6294
6360
|
};
|
|
6295
6361
|
|
|
6296
6362
|
// src/sdd/sdd-parallel-run.ts
|
|
6297
|
-
function expectDefined3(value) {
|
|
6298
|
-
if (value === null || value === void 0) {
|
|
6299
|
-
throw new Error("Expected value to be defined");
|
|
6300
|
-
}
|
|
6301
|
-
return value;
|
|
6302
|
-
}
|
|
6303
6363
|
var SddParallelRun = class {
|
|
6304
6364
|
constructor(opts) {
|
|
6305
6365
|
this.opts = opts;
|
|
@@ -6448,8 +6508,8 @@ var SddParallelRun = class {
|
|
|
6448
6508
|
const successCount = results.filter((r) => r.status === "success").length;
|
|
6449
6509
|
const failCount = results.length - successCount;
|
|
6450
6510
|
for (let i = 0; i < results.length; i++) {
|
|
6451
|
-
const result =
|
|
6452
|
-
const taskId =
|
|
6511
|
+
const result = expectDefined(results[i]);
|
|
6512
|
+
const taskId = expectDefined(taskIds[i]);
|
|
6453
6513
|
if (result.status === "success") {
|
|
6454
6514
|
this.opts.tracker.updateNodeStatus(taskId, "completed");
|
|
6455
6515
|
} else {
|