@wrongstack/core 0.77.0 → 0.82.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-EWdqs8v6.d.ts → agent-bridge-C9P_HPez.d.ts} +2 -2
- package/dist/{agent-subagent-runner-D8qW8OSC.d.ts → agent-subagent-runner-2Aq0jOSj.d.ts} +107 -102
- package/dist/{compactor-D_ExJajC.d.ts → compactor-CJq7LQev.d.ts} +3 -3
- package/dist/{config-Dy0CK_o6.d.ts → config-_DZ7dN-T.d.ts} +77 -75
- package/dist/{context-y87Jc5ei.d.ts → context-ToHAp4-U.d.ts} +119 -90
- package/dist/coordination/index.d.ts +16 -16
- package/dist/coordination/index.js +318 -37
- package/dist/coordination/index.js.map +1 -1
- package/dist/defaults/index.d.ts +31 -31
- package/dist/defaults/index.js +419 -67
- package/dist/defaults/index.js.map +1 -1
- package/dist/{director-state-BmYi3DGA.d.ts → director-state-CgIc30qi.d.ts} +19 -19
- package/dist/{events-CYaoLN5_.d.ts → events-DnRqXaZ3.d.ts} +43 -42
- package/dist/execution/index.d.ts +53 -53
- package/dist/execution/index.js +67 -23
- package/dist/execution/index.js.map +1 -1
- package/dist/extension/index.d.ts +9 -9
- package/dist/extension/index.js +8 -1
- package/dist/extension/index.js.map +1 -1
- package/dist/{goal-store-C7jcumEh.d.ts → goal-store-DvWLNu52.d.ts} +4 -4
- package/dist/{index-DIxjTOga.d.ts → index-BNOLadHw.d.ts} +28 -28
- package/dist/{index-Dsda0uCn.d.ts → index-N0_c4bHQ.d.ts} +45 -45
- package/dist/index.d.ts +165 -165
- package/dist/index.js +593 -137
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/index.d.ts +9 -9
- package/dist/infrastructure/index.js +13 -5
- package/dist/infrastructure/index.js.map +1 -1
- package/dist/kernel/index.d.ts +14 -14
- package/dist/kernel/index.js +7 -0
- package/dist/kernel/index.js.map +1 -1
- package/dist/logger-B72yyPc6.d.ts +12 -0
- package/dist/{logger-BppKxDqZ.d.ts → logger-C_27pj9i.d.ts} +6 -7
- package/dist/{mcp-servers-T0O6UN_w.d.ts → mcp-servers-Dck3T85_.d.ts} +20 -20
- package/dist/{mode-BO4SEUIv.d.ts → mode-CHo2XtHs.d.ts} +4 -4
- package/dist/models/index.d.ts +10 -10
- package/dist/models/index.js +8 -2
- package/dist/models/index.js.map +1 -1
- package/dist/{models-registry-BcYJDKLm.d.ts → models-registry-Be3osGt5.d.ts} +28 -28
- package/dist/{models-registry-Cuq1C8V9.d.ts → models-registry-Boz639EI.d.ts} +12 -12
- package/dist/{multi-agent-coordinator-DpbG3wiy.d.ts → multi-agent-coordinator-DllpCVkF.d.ts} +12 -12
- package/dist/{null-fleet-bus-u5ys3lW_.d.ts → null-fleet-bus-BY0AN-sr.d.ts} +121 -121
- package/dist/observability/index.d.ts +41 -41
- package/dist/observability/index.js.map +1 -1
- package/dist/{observability-BhnVLBLS.d.ts → observability-CoSNZdhX.d.ts} +4 -4
- package/dist/{parallel-eternal-engine-Dn0P8Pbj.d.ts → parallel-eternal-engine-D402RASp.d.ts} +49 -49
- package/dist/{path-resolver-B32v2JIq.d.ts → path-resolver-UPFTsDyD.d.ts} +6 -6
- package/dist/{permission-V5BLOrY6.d.ts → permission-14CChMmO.d.ts} +10 -8
- package/dist/{permission-policy-CBVx-d-8.d.ts → permission-policy-gW5htOo1.d.ts} +7 -7
- package/dist/{plan-templates-BcUwLlMQ.d.ts → plan-templates-DRvPgkfZ.d.ts} +65 -32
- package/dist/{provider-runner-CSi_7l0h.d.ts → provider-runner-COAJM8tC.d.ts} +6 -6
- package/dist/{retry-policy-CG3qvH_e.d.ts → retry-policy-DSu6O6rD.d.ts} +4 -4
- package/dist/sdd/index.d.ts +47 -47
- package/dist/sdd/index.js +47 -22
- package/dist/sdd/index.js.map +1 -1
- package/dist/security/index.d.ts +6 -6
- package/dist/security/index.js +7 -1
- package/dist/security/index.js.map +1 -1
- package/dist/{selector-RvBR_YRW.d.ts → selector-11-fm95U.d.ts} +2 -2
- package/dist/{session-event-bridge-CDHxcmQU.d.ts → session-event-bridge-D0u-x576.d.ts} +7 -7
- package/dist/{session-reader-BIpwM60D.d.ts → session-reader-BQU-toaN.d.ts} +23 -23
- package/dist/{skill-CxuWrsKK.d.ts → skill-BJeF2DwY.d.ts} +1 -1
- package/dist/skills/index.d.ts +9 -9
- package/dist/skills/index.js +15 -3
- package/dist/skills/index.js.map +1 -1
- package/dist/storage/index.d.ts +15 -15
- package/dist/storage/index.js +378 -76
- package/dist/storage/index.js.map +1 -1
- package/dist/{system-prompt-CA11g6Jo.d.ts → system-prompt-C0rLCeyn.d.ts} +16 -11
- package/dist/{task-graph-D1YQbpxF.d.ts → task-graph-CikNdRTG.d.ts} +22 -22
- package/dist/types/index.d.ts +25 -25
- package/dist/types/index.js +45 -10
- package/dist/types/index.js.map +1 -1
- package/dist/utils/index.d.ts +46 -45
- package/dist/utils/index.js +53 -12
- package/dist/utils/index.js.map +1 -1
- package/dist/{wstack-paths-D7evAFWM.d.ts → wstack-paths-BQMvEllz.d.ts} +2 -2
- package/package.json +1 -1
- package/dist/logger-DDd5C--Z.d.ts +0 -12
package/dist/execution/index.js
CHANGED
|
@@ -7,6 +7,12 @@ import * as os from 'os';
|
|
|
7
7
|
import { EventEmitter } from 'events';
|
|
8
8
|
|
|
9
9
|
// src/utils/token-estimate.ts
|
|
10
|
+
function expectDefined(value) {
|
|
11
|
+
if (value === null || value === void 0) {
|
|
12
|
+
throw new Error("Expected value to be defined");
|
|
13
|
+
}
|
|
14
|
+
return value;
|
|
15
|
+
}
|
|
10
16
|
var RoughTokenEstimate = (text, charsPerToken = 3.5) => Math.max(1, Math.ceil(text.length / charsPerToken));
|
|
11
17
|
var ESTIMATE_CACHE = /* @__PURE__ */ new Map();
|
|
12
18
|
var ESTIMATE_CACHE_MAX_SIZE = 1e4;
|
|
@@ -16,7 +22,7 @@ function getCachedEstimate(key, compute) {
|
|
|
16
22
|
if (ESTIMATE_CACHE.size >= ESTIMATE_CACHE_MAX_SIZE) {
|
|
17
23
|
const keys = [...ESTIMATE_CACHE.keys()];
|
|
18
24
|
for (let i = 0; i < Math.floor(ESTIMATE_CACHE_MAX_SIZE / 4); i++) {
|
|
19
|
-
ESTIMATE_CACHE.delete(keys[i]);
|
|
25
|
+
ESTIMATE_CACHE.delete(expectDefined(keys[i]));
|
|
20
26
|
}
|
|
21
27
|
}
|
|
22
28
|
const estimate = compute();
|
|
@@ -94,6 +100,12 @@ function estimateRequestTokensCalibrated(messages, systemPrompt, tools) {
|
|
|
94
100
|
}
|
|
95
101
|
|
|
96
102
|
// src/utils/message-invariants.ts
|
|
103
|
+
function expectDefined2(value) {
|
|
104
|
+
if (value === null || value === void 0) {
|
|
105
|
+
throw new Error("Expected value to be defined");
|
|
106
|
+
}
|
|
107
|
+
return value;
|
|
108
|
+
}
|
|
97
109
|
function repairToolUseAdjacency(messages) {
|
|
98
110
|
const removedToolUses = [];
|
|
99
111
|
const removedToolResults = [];
|
|
@@ -101,7 +113,7 @@ function repairToolUseAdjacency(messages) {
|
|
|
101
113
|
let changed = false;
|
|
102
114
|
const out = [];
|
|
103
115
|
for (let i = 0; i < messages.length; i++) {
|
|
104
|
-
const original = messages[i];
|
|
116
|
+
const original = expectDefined2(messages[i]);
|
|
105
117
|
let msg = original;
|
|
106
118
|
if (hasToolUse(msg)) {
|
|
107
119
|
const nextIds = toolResultIds(messages[i + 1]);
|
|
@@ -498,7 +510,7 @@ var IntelligentCompactor = class {
|
|
|
498
510
|
maxTokens: 1024
|
|
499
511
|
};
|
|
500
512
|
const ac = ctx.signal ? void 0 : new AbortController();
|
|
501
|
-
const signal = ctx.signal ?? ac
|
|
513
|
+
const signal = ctx.signal ?? ac?.signal;
|
|
502
514
|
const res = await this.provider.complete(req, { signal });
|
|
503
515
|
const textBlocks = res.content.filter(isTextBlock);
|
|
504
516
|
return textBlocks.map((b) => b.text).join("\n").trim() || "(empty summary)";
|
|
@@ -601,6 +613,12 @@ var IntelligentCompactor = class {
|
|
|
601
613
|
};
|
|
602
614
|
|
|
603
615
|
// src/models/llm-selector.ts
|
|
616
|
+
function expectDefined3(value) {
|
|
617
|
+
if (value === null || value === void 0) {
|
|
618
|
+
throw new Error("Expected value to be defined");
|
|
619
|
+
}
|
|
620
|
+
return value;
|
|
621
|
+
}
|
|
604
622
|
var DEFAULT_SYSTEM_PROMPT = `You are a context pruning assistant. Given a conversation history and a token budget, decide which message ranges are worth keeping verbatim and which should be collapsed into summaries.
|
|
605
623
|
|
|
606
624
|
Output a JSON object with this structure:
|
|
@@ -641,7 +659,7 @@ function formatMessages(messages, maxChars = 8e3) {
|
|
|
641
659
|
const lines = [];
|
|
642
660
|
let used = 0;
|
|
643
661
|
for (let i = 0; i < messages.length; i++) {
|
|
644
|
-
const m = messages[i];
|
|
662
|
+
const m = expectDefined3(messages[i]);
|
|
645
663
|
const role = m.role.padEnd(10, " ");
|
|
646
664
|
let text;
|
|
647
665
|
if (typeof m.content === "string") {
|
|
@@ -706,7 +724,7 @@ IMPORTANT: Total conversation (${totalTokens} tokens) exceeds budget (${effectiv
|
|
|
706
724
|
let tokenCount = 0;
|
|
707
725
|
let startIdx = 0;
|
|
708
726
|
for (let i = messages.length - 1; i >= 0; i--) {
|
|
709
|
-
const m = messages[i];
|
|
727
|
+
const m = expectDefined3(messages[i]);
|
|
710
728
|
const cost = typeof m.content === "string" ? Math.ceil(m.content.length / 4) : m.content.reduce(
|
|
711
729
|
(acc, b) => acc + (b.type === "text" ? Math.ceil(b.text.length / 4) : Math.ceil(JSON.stringify(b).length / 4)),
|
|
712
730
|
0
|
|
@@ -917,6 +935,7 @@ Summarize the following message range:`;
|
|
|
917
935
|
let boundary = preserveIdx;
|
|
918
936
|
for (let i = preserveIdx; i < messages.length && i < preserveIdx + 6; i++) {
|
|
919
937
|
const m = messages[i];
|
|
938
|
+
if (!m) continue;
|
|
920
939
|
if (m.role === "user" && this.hasTextContent(m)) {
|
|
921
940
|
boundary = i;
|
|
922
941
|
break;
|
|
@@ -1438,6 +1457,12 @@ function createToolOutputSerializer(opts = {}) {
|
|
|
1438
1457
|
}
|
|
1439
1458
|
|
|
1440
1459
|
// src/execution/tool-executor.ts
|
|
1460
|
+
function expectDefined4(value) {
|
|
1461
|
+
if (value === null || value === void 0) {
|
|
1462
|
+
throw new Error("Expected value to be defined");
|
|
1463
|
+
}
|
|
1464
|
+
return value;
|
|
1465
|
+
}
|
|
1441
1466
|
var ToolExecutor = class {
|
|
1442
1467
|
constructor(registry, opts) {
|
|
1443
1468
|
this.registry = registry;
|
|
@@ -1726,6 +1751,9 @@ ${post.additionalContext}` };
|
|
|
1726
1751
|
async runStreamedTool(tool, input, ctx, signal, toolUseId) {
|
|
1727
1752
|
let finalOutput;
|
|
1728
1753
|
let sawFinal = false;
|
|
1754
|
+
if (!tool.executeStream) {
|
|
1755
|
+
throw new Error(`Tool "${tool.name}" does not support streaming execution`);
|
|
1756
|
+
}
|
|
1729
1757
|
const stream = tool.executeStream(input, ctx, { signal });
|
|
1730
1758
|
for await (const ev of stream) {
|
|
1731
1759
|
if (ev.type === "final") {
|
|
@@ -1830,7 +1858,7 @@ function hasMalformedArguments(input) {
|
|
|
1830
1858
|
function extractMalformedRaw(input) {
|
|
1831
1859
|
if (!hasMalformedArguments(input)) return void 0;
|
|
1832
1860
|
const obj = input;
|
|
1833
|
-
const value = obj[Object.keys(obj)[0]];
|
|
1861
|
+
const value = obj[expectDefined4(Object.keys(obj)[0])];
|
|
1834
1862
|
if (value === void 0 || value === null) return void 0;
|
|
1835
1863
|
if (typeof value === "string") return value;
|
|
1836
1864
|
try {
|
|
@@ -2887,16 +2915,16 @@ var SubagentBudget = class _SubagentBudget {
|
|
|
2887
2915
|
}
|
|
2888
2916
|
if (exceeded.length === 0) return [];
|
|
2889
2917
|
if (!this._onThreshold) {
|
|
2890
|
-
const first2 = exceeded[0];
|
|
2918
|
+
const first2 = exceeded[0] ?? { kind: "iterations", limit: 0, used: 0 };
|
|
2891
2919
|
throw new BudgetExceededError(first2.kind, first2.limit, first2.used);
|
|
2892
2920
|
}
|
|
2893
2921
|
if (this._mode === "sync") {
|
|
2894
|
-
const first2 = exceeded[0];
|
|
2922
|
+
const first2 = exceeded[0] ?? { kind: "iterations", limit: 0, used: 0 };
|
|
2895
2923
|
throw new BudgetExceededError(first2.kind, first2.limit, first2.used);
|
|
2896
2924
|
}
|
|
2897
2925
|
const bus = this._events;
|
|
2898
2926
|
if (!bus || !bus.hasListenerFor("budget.threshold_reached")) {
|
|
2899
|
-
const first2 = exceeded[0];
|
|
2927
|
+
const first2 = exceeded[0] ?? { kind: "iterations", limit: 0, used: 0 };
|
|
2900
2928
|
throw new BudgetExceededError(first2.kind, first2.limit, first2.used);
|
|
2901
2929
|
}
|
|
2902
2930
|
for (const entry of exceeded) {
|
|
@@ -2904,8 +2932,9 @@ var SubagentBudget = class _SubagentBudget {
|
|
|
2904
2932
|
const decision2 = this._negotiateExtension(entry.kind, exceeded);
|
|
2905
2933
|
this._pendingNegotiations.set(entry.kind, decision2);
|
|
2906
2934
|
}
|
|
2907
|
-
const first = exceeded[0];
|
|
2935
|
+
const first = exceeded[0] ?? { kind: "iterations", limit: 0, used: 0 };
|
|
2908
2936
|
const decision = this._pendingNegotiations.get(first.kind);
|
|
2937
|
+
if (!decision) throw new Error(`No pending negotiation for ${first.kind}`);
|
|
2909
2938
|
throw new BudgetThresholdSignal(first.kind, first.limit, first.used, decision);
|
|
2910
2939
|
}
|
|
2911
2940
|
/**
|
|
@@ -2927,8 +2956,11 @@ var SubagentBudget = class _SubagentBudget {
|
|
|
2927
2956
|
* a fresh signal.
|
|
2928
2957
|
*/
|
|
2929
2958
|
async _negotiateExtension(kind, exceeded) {
|
|
2959
|
+
if (!this._onThreshold) {
|
|
2960
|
+
return "stop";
|
|
2961
|
+
}
|
|
2930
2962
|
try {
|
|
2931
|
-
const first = exceeded[0];
|
|
2963
|
+
const first = exceeded[0] ?? { kind: "iterations", limit: 0, used: 0 };
|
|
2932
2964
|
const result = this._onThreshold({
|
|
2933
2965
|
kind: first.kind,
|
|
2934
2966
|
used: first.used,
|
|
@@ -5397,6 +5429,11 @@ var AGENT_CATALOG = (() => {
|
|
|
5397
5429
|
|
|
5398
5430
|
// src/coordination/dispatcher.ts
|
|
5399
5431
|
var DEFAULT_DISPATCH_ROLE = "executor";
|
|
5432
|
+
var FALLBACK_DEFINITION = {
|
|
5433
|
+
config: { role: "unknown", name: "Unknown Agent" },
|
|
5434
|
+
budget: {},
|
|
5435
|
+
capability: { phase: "meta", summary: "", keywords: [] }
|
|
5436
|
+
};
|
|
5400
5437
|
function normalize(text) {
|
|
5401
5438
|
return ` ${text.toLowerCase().replace(/[^a-z0-9]+/g, " ").trim()} `;
|
|
5402
5439
|
}
|
|
@@ -5424,7 +5461,7 @@ function scoreAgents(task, catalog = AGENT_CATALOG) {
|
|
|
5424
5461
|
}
|
|
5425
5462
|
function heuristicConfidence(candidates) {
|
|
5426
5463
|
if (candidates.length === 0) return 0;
|
|
5427
|
-
const top = candidates[0]
|
|
5464
|
+
const top = candidates[0]?.score ?? 0;
|
|
5428
5465
|
const second = candidates[1]?.score ?? 0;
|
|
5429
5466
|
const strength = Math.min(1, top / 3);
|
|
5430
5467
|
const margin = (top - second + 1) / (top + 1);
|
|
@@ -5440,7 +5477,7 @@ async function dispatchAgent(task, opts = {}) {
|
|
|
5440
5477
|
if (top && confidence >= threshold) {
|
|
5441
5478
|
return {
|
|
5442
5479
|
role: top.role,
|
|
5443
|
-
definition: catalog[top.role],
|
|
5480
|
+
definition: catalog[top.role] ?? FALLBACK_DEFINITION,
|
|
5444
5481
|
confidence,
|
|
5445
5482
|
method: "heuristic",
|
|
5446
5483
|
reason: `Matched keywords: ${top.matched.slice(0, 4).join(", ")}`,
|
|
@@ -5448,7 +5485,7 @@ async function dispatchAgent(task, opts = {}) {
|
|
|
5448
5485
|
};
|
|
5449
5486
|
}
|
|
5450
5487
|
if (opts.classifier) {
|
|
5451
|
-
const pool = (candidates.length > 0 ? candidates.slice(0, maxCandidates).map((c) => catalog[c.role]) : ALL_AGENT_DEFINITIONS).map((d) => ({
|
|
5488
|
+
const pool = (candidates.length > 0 ? candidates.slice(0, maxCandidates).map((c) => catalog[c.role] ?? FALLBACK_DEFINITION) : ALL_AGENT_DEFINITIONS).map((d) => ({
|
|
5452
5489
|
role: d.config.role,
|
|
5453
5490
|
name: d.config.name,
|
|
5454
5491
|
summary: d.capability.summary
|
|
@@ -5458,7 +5495,7 @@ async function dispatchAgent(task, opts = {}) {
|
|
|
5458
5495
|
if (choice && catalog[choice.role]) {
|
|
5459
5496
|
return {
|
|
5460
5497
|
role: choice.role,
|
|
5461
|
-
definition: catalog[choice.role],
|
|
5498
|
+
definition: catalog[choice.role] ?? FALLBACK_DEFINITION,
|
|
5462
5499
|
confidence: 1,
|
|
5463
5500
|
method: "llm",
|
|
5464
5501
|
reason: choice.reason ?? "Selected by LLM classifier",
|
|
@@ -5471,17 +5508,17 @@ async function dispatchAgent(task, opts = {}) {
|
|
|
5471
5508
|
if (top) {
|
|
5472
5509
|
return {
|
|
5473
5510
|
role: top.role,
|
|
5474
|
-
definition: catalog[top.role],
|
|
5511
|
+
definition: catalog[top.role] ?? FALLBACK_DEFINITION,
|
|
5475
5512
|
confidence,
|
|
5476
5513
|
method: "heuristic",
|
|
5477
5514
|
reason: `Weak match (${top.matched.slice(0, 3).join(", ") || "low signal"})`,
|
|
5478
5515
|
alternatives: candidates.slice(1, maxCandidates)
|
|
5479
5516
|
};
|
|
5480
5517
|
}
|
|
5481
|
-
const fallbackRole = catalog[DEFAULT_DISPATCH_ROLE] ? DEFAULT_DISPATCH_ROLE : Object.keys(catalog)[0];
|
|
5518
|
+
const fallbackRole = catalog[DEFAULT_DISPATCH_ROLE] ? DEFAULT_DISPATCH_ROLE : Object.keys(catalog)[0] ?? DEFAULT_DISPATCH_ROLE;
|
|
5482
5519
|
return {
|
|
5483
5520
|
role: fallbackRole,
|
|
5484
|
-
definition: catalog[fallbackRole],
|
|
5521
|
+
definition: catalog[fallbackRole] ?? FALLBACK_DEFINITION,
|
|
5485
5522
|
confidence: 0,
|
|
5486
5523
|
method: "fallback",
|
|
5487
5524
|
reason: "No keyword signal; defaulting to the generalist Executor",
|
|
@@ -6123,6 +6160,7 @@ var DefaultMultiAgentCoordinator = class _DefaultMultiAgentCoordinator extends E
|
|
|
6123
6160
|
takeNextDispatchableTask() {
|
|
6124
6161
|
for (let i = 0; i < this.pendingTasks.length; i++) {
|
|
6125
6162
|
const task = this.pendingTasks[i];
|
|
6163
|
+
if (!task) continue;
|
|
6126
6164
|
const subagentId = task.subagentId ? this.isIdleSubagent(task.subagentId) ? task.subagentId : null : this.findIdleSubagent();
|
|
6127
6165
|
if (!subagentId) continue;
|
|
6128
6166
|
this.pendingTasks.splice(i, 1);
|
|
@@ -6314,14 +6352,14 @@ var DefaultMultiAgentCoordinator = class _DefaultMultiAgentCoordinator extends E
|
|
|
6314
6352
|
const idleExceeded = idleLimit !== void 0 && budget.idleMs() >= idleLimit;
|
|
6315
6353
|
if (idleExceeded && !wallExceeded) {
|
|
6316
6354
|
this.subagents.get(ctx.subagentId)?.abortController.abort();
|
|
6317
|
-
reject(new BudgetExceededError("timeout", idleLimit, budget.idleMs()));
|
|
6355
|
+
reject(new BudgetExceededError("timeout", idleLimit ?? 0, budget.idleMs()));
|
|
6318
6356
|
return;
|
|
6319
6357
|
}
|
|
6320
6358
|
if (!wallExceeded) {
|
|
6321
6359
|
scheduleNext();
|
|
6322
6360
|
return;
|
|
6323
6361
|
}
|
|
6324
|
-
const limit = wallLimit;
|
|
6362
|
+
const limit = wallLimit ?? 0;
|
|
6325
6363
|
if (!budget.onThreshold) {
|
|
6326
6364
|
this.subagents.get(ctx.subagentId)?.abortController.abort();
|
|
6327
6365
|
reject(new BudgetExceededError("timeout", limit, elapsed));
|
|
@@ -6480,6 +6518,12 @@ var DefaultMultiAgentCoordinator = class _DefaultMultiAgentCoordinator extends E
|
|
|
6480
6518
|
};
|
|
6481
6519
|
|
|
6482
6520
|
// src/execution/parallel-eternal-engine.ts
|
|
6521
|
+
function expectDefined5(value) {
|
|
6522
|
+
if (value === null || value === void 0) {
|
|
6523
|
+
throw new Error("Expected value to be defined");
|
|
6524
|
+
}
|
|
6525
|
+
return value;
|
|
6526
|
+
}
|
|
6483
6527
|
function sleep2(ms) {
|
|
6484
6528
|
return new Promise((resolve2) => setTimeout(resolve2, ms));
|
|
6485
6529
|
}
|
|
@@ -6638,7 +6682,7 @@ var ParallelEternalEngine = class {
|
|
|
6638
6682
|
// Fan-out
|
|
6639
6683
|
// -------------------------------------------------------------------------
|
|
6640
6684
|
async fanOut(goal, tasks) {
|
|
6641
|
-
const coordinator = this.coordinator;
|
|
6685
|
+
const coordinator = expectDefined5(this.coordinator);
|
|
6642
6686
|
const slotCount = Math.min(this.slots, tasks.length);
|
|
6643
6687
|
const routes = this.dispatchEnabled ? await Promise.all(
|
|
6644
6688
|
tasks.slice(0, slotCount).map(
|
|
@@ -6670,7 +6714,7 @@ ${recentJournal}` : "No prior iterations.",
|
|
|
6670
6714
|
const routeInfo = [];
|
|
6671
6715
|
const spawnPromises = [];
|
|
6672
6716
|
for (let i = 0; i < slotCount; i++) {
|
|
6673
|
-
const task = tasks[i];
|
|
6717
|
+
const task = expectDefined5(tasks[i]);
|
|
6674
6718
|
const route = routes[i] ?? null;
|
|
6675
6719
|
const subagentId = `parallel-${this.iterations}-${i}`;
|
|
6676
6720
|
const taskId = randomUUID();
|
|
@@ -7256,7 +7300,7 @@ function parseDescription(raw) {
|
|
|
7256
7300
|
const scope = [];
|
|
7257
7301
|
const coversMatch = /(?:covers|for|including)\s+([^.]+)/i.exec(desc);
|
|
7258
7302
|
if (coversMatch) {
|
|
7259
|
-
const items = coversMatch[1].replace(/[·•]/g, ",").split(",").map((s) => s.trim()).filter(Boolean);
|
|
7303
|
+
const items = coversMatch[1] ?? "".replace(/[·•]/g, ",").split(",").map((s) => s.trim()).filter(Boolean);
|
|
7260
7304
|
scope.push(...items);
|
|
7261
7305
|
}
|
|
7262
7306
|
return { trigger, scope };
|