@wrongstack/core 0.268.0 → 0.269.0

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.
Files changed (75) hide show
  1. package/dist/{agent-bridge-UhojbpWx.d.ts → agent-bridge-PcHQl_UQ.d.ts} +1 -1
  2. package/dist/{agent-subagent-runner-Bvtf1o9K.d.ts → agent-subagent-runner-SHJW7t8q.d.ts} +8 -8
  3. package/dist/{brain-69wzMKp1.d.ts → brain-BYcK__Ym.d.ts} +1 -1
  4. package/dist/{compactor-CBQAJoDc.d.ts → compactor-C2RKEBtC.d.ts} +1 -1
  5. package/dist/{config-VKfOZ-6X.d.ts → config-C_ae2k86.d.ts} +11 -2
  6. package/dist/{context-C0U8B9NF.d.ts → context-Dp87Bcaq.d.ts} +24 -1
  7. package/dist/coordination/index.d.ts +22 -16
  8. package/dist/coordination/index.js +233 -86
  9. package/dist/coordination/index.js.map +1 -1
  10. package/dist/defaults/index.d.ts +25 -25
  11. package/dist/defaults/index.js +272 -69
  12. package/dist/defaults/index.js.map +1 -1
  13. package/dist/execution/index.d.ts +15 -15
  14. package/dist/execution/index.js +116 -19
  15. package/dist/execution/index.js.map +1 -1
  16. package/dist/execution/prompt-enhancer.d.ts +1 -1
  17. package/dist/extension/index.d.ts +6 -6
  18. package/dist/{global-mailbox-KByEFFBa.d.ts → global-mailbox-Bvrz1P3f.d.ts} +2 -1
  19. package/dist/{goal-preamble-CrYjmdw4.d.ts → goal-preamble-CA_4yiGQ.d.ts} +9 -9
  20. package/dist/{goal-store-Y_zdLZ3q.d.ts → goal-store-DhuJoUNG.d.ts} +1 -1
  21. package/dist/hq/index.d.ts +15 -6
  22. package/dist/hq/index.js +55 -8
  23. package/dist/hq/index.js.map +1 -1
  24. package/dist/{index-CtQnmkaS.d.ts → index-CZQ6Pwbs.d.ts} +8 -8
  25. package/dist/{index-gCv830d7.d.ts → index-W4VJCzHa.d.ts} +5 -5
  26. package/dist/{index-BfaS-f_m.d.ts → index-whDfTANu.d.ts} +2 -2
  27. package/dist/index.d.ts +41 -41
  28. package/dist/index.js +531 -167
  29. package/dist/index.js.map +1 -1
  30. package/dist/infrastructure/index.d.ts +6 -6
  31. package/dist/infrastructure/index.js +3 -3
  32. package/dist/infrastructure/index.js.map +1 -1
  33. package/dist/kernel/index.d.ts +9 -9
  34. package/dist/{mcp-servers-HT3Fi7Bl.d.ts → mcp-servers-DJdZiRcv.d.ts} +3 -3
  35. package/dist/models/index.d.ts +5 -5
  36. package/dist/models/index.js +1 -1
  37. package/dist/models/index.js.map +1 -1
  38. package/dist/{models-registry-Bvcl3Vaa.d.ts → models-registry-C3a-2-Yd.d.ts} +1 -1
  39. package/dist/{multi-agent-coordinator-BACjsmkC.d.ts → multi-agent-coordinator-CJSpTe5O.d.ts} +1 -1
  40. package/dist/{null-fleet-bus-DA7fvhUg.d.ts → null-fleet-bus-QVshIsDx.d.ts} +6 -6
  41. package/dist/observability/index.d.ts +2 -2
  42. package/dist/{parallel-eternal-engine-Ci71gYu_.d.ts → parallel-eternal-engine-D9y5Pkcc.d.ts} +9 -9
  43. package/dist/{path-resolver-O1IJnmKE.d.ts → path-resolver-CnQ8SIfh.d.ts} +3 -3
  44. package/dist/{permission-Bd-57Lbl.d.ts → permission-CvYQNUqZ.d.ts} +1 -1
  45. package/dist/{permission-policy-uNXC6Kge.d.ts → permission-policy-D5Ss8j4B.d.ts} +2 -2
  46. package/dist/{pipeline-BDNvENyV.d.ts → pipeline-l_zzFRh3.d.ts} +2 -2
  47. package/dist/{plan-templates-EMsalEtN.d.ts → plan-templates-NtPgyeJA.d.ts} +6 -5
  48. package/dist/{provider-model-resolve-CEb9x886.d.ts → provider-model-resolve-d5poT5y0.d.ts} +3 -3
  49. package/dist/{provider-runner-DWJbpo70.d.ts → provider-runner-gkctlQV_.d.ts} +3 -3
  50. package/dist/{retry-policy-C3s_lvdK.d.ts → retry-policy-CtFhfwa8.d.ts} +1 -1
  51. package/dist/sdd/index.d.ts +8 -8
  52. package/dist/sdd/index.js +1 -1
  53. package/dist/sdd/index.js.map +1 -1
  54. package/dist/{secret-vault-Cgduf5xL.d.ts → secret-vault-BLsVmTIK.d.ts} +1 -1
  55. package/dist/security/index.d.ts +5 -5
  56. package/dist/security/index.js.map +1 -1
  57. package/dist/{selector-47LBnBVk.d.ts → selector-CXl2_y9W.d.ts} +1 -1
  58. package/dist/{session-event-bridge-Cw7oqmW2.d.ts → session-event-bridge-Ccud20CC.d.ts} +1 -1
  59. package/dist/{session-reader-DD4v2Obw.d.ts → session-reader-ZeXQmsmE.d.ts} +1 -1
  60. package/dist/skills/index.js.map +1 -1
  61. package/dist/storage/index.d.ts +13 -11
  62. package/dist/storage/index.js +210 -64
  63. package/dist/storage/index.js.map +1 -1
  64. package/dist/tools/index.d.ts +2 -2
  65. package/dist/tools/index.js.map +1 -1
  66. package/dist/types/index.d.ts +21 -21
  67. package/dist/types/index.js +110 -19
  68. package/dist/types/index.js.map +1 -1
  69. package/dist/utils/index.d.ts +2 -2
  70. package/dist/utils/index.js +58 -24
  71. package/dist/utils/index.js.map +1 -1
  72. package/package.json +1 -1
  73. package/skills/chimera/SKILL.md +1 -1
  74. package/skills/typescript-strict/SKILL.md +3 -3
  75. package/skills/typescript-strict/SKILL.save.md +1 -1
@@ -29,6 +29,16 @@ function asText(content) {
29
29
  if (typeof content === "string") return content;
30
30
  return content.filter((b) => b.type === "text").map((b) => b.text).join("");
31
31
  }
32
+
33
+ // src/types/tool.ts
34
+ var ToolErrorCategory = /* @__PURE__ */ ((ToolErrorCategory2) => {
35
+ ToolErrorCategory2["TRANSIENT"] = "transient";
36
+ ToolErrorCategory2["NOT_FOUND"] = "not_found";
37
+ ToolErrorCategory2["PERMISSION"] = "permission";
38
+ ToolErrorCategory2["VALIDATION"] = "validation";
39
+ ToolErrorCategory2["FATAL"] = "fatal";
40
+ return ToolErrorCategory2;
41
+ })(ToolErrorCategory || {});
32
42
  async function atomicWrite(targetPath, content, opts = {}) {
33
43
  const dir = path6.dirname(targetPath);
34
44
  await fs.mkdir(dir, { recursive: true });
@@ -504,7 +514,7 @@ function hasToolResult(msg) {
504
514
  }
505
515
  function toolUseIds(msg) {
506
516
  const ids = /* @__PURE__ */ new Set();
507
- if (!msg || msg.role !== "assistant") return ids;
517
+ if (msg?.role !== "assistant") return ids;
508
518
  for (const block of contentBlocks(msg)) {
509
519
  if (block.type === "tool_use") ids.add(block.id);
510
520
  }
@@ -512,7 +522,7 @@ function toolUseIds(msg) {
512
522
  }
513
523
  function toolResultIds(msg) {
514
524
  const ids = /* @__PURE__ */ new Set();
515
- if (!msg || msg.role !== "user") return ids;
525
+ if (msg?.role !== "user") return ids;
516
526
  for (const block of contentBlocks(msg)) {
517
527
  if (block.type === "tool_result") ids.add(block.tool_use_id);
518
528
  }
@@ -693,7 +703,7 @@ function calState(key) {
693
703
  return state;
694
704
  }
695
705
  var ESTIMATE_CACHE = /* @__PURE__ */ new Map();
696
- var ESTIMATE_CACHE_MAX_SIZE = 1e4;
706
+ var ESTIMATE_CACHE_MAX_SIZE = 5e4;
697
707
  function getCachedEstimate(key, compute) {
698
708
  const existing = ESTIMATE_CACHE.get(key);
699
709
  if (existing !== void 0) return existing;
@@ -811,6 +821,7 @@ var GREP_MATCHES_PER_FILE = 3;
811
821
  var DIFF_INLINE_LINE_LIMIT = 260;
812
822
  var DIFF_HUNK_LIMIT = 8;
813
823
  var DIFF_HUNK_CONTEXT = 14;
824
+ var GREP_LINE_RE = /^(.+?):(\d+):(.*)$/;
814
825
  function createToolOutputSerializer(opts = {}) {
815
826
  const capBytes = opts.perIterationOutputCapBytes ?? 1e5;
816
827
  function serialize(value, context = {}) {
@@ -1196,7 +1207,7 @@ ${renderStringList(passthrough, "", 50)}`);
1196
1207
  return sections.join("\n");
1197
1208
  }
1198
1209
  function parseGrepContentLine(line) {
1199
- const match = /^(.+?):(\d+):(.*)$/.exec(line);
1210
+ const match = GREP_LINE_RE.exec(line);
1200
1211
  if (!match?.[1] || !match[2]) return void 0;
1201
1212
  return { file: match[1], line: match[2], text: match[3] ?? "" };
1202
1213
  }
@@ -1214,22 +1225,20 @@ function compactDiff(diff) {
1214
1225
  const hunks = lines.filter((line) => line.startsWith("@@")).length;
1215
1226
  const added = lines.filter((line) => line.startsWith("+") && !line.startsWith("+++")).length;
1216
1227
  const removed = lines.filter((line) => line.startsWith("-") && !line.startsWith("---")).length;
1217
- const selected = /* @__PURE__ */ new Set();
1228
+ const intervals = [];
1218
1229
  let hunkCount = 0;
1219
1230
  for (let i = 0; i < lines.length; i++) {
1220
1231
  const line = lines[i] ?? "";
1221
1232
  if (line.startsWith("diff --git") || line.startsWith("--- ") || line.startsWith("+++ ")) {
1222
- selected.add(i);
1233
+ intervals.push([i, i]);
1223
1234
  continue;
1224
1235
  }
1225
1236
  if (!line.startsWith("@@")) continue;
1226
1237
  if (hunkCount >= DIFF_HUNK_LIMIT) continue;
1227
1238
  hunkCount++;
1228
- for (let j = i; j <= Math.min(lines.length - 1, i + DIFF_HUNK_CONTEXT); j++) {
1229
- selected.add(j);
1230
- }
1239
+ intervals.push([i, Math.min(lines.length - 1, i + DIFF_HUNK_CONTEXT)]);
1231
1240
  }
1232
- if (selected.size === 0) {
1241
+ if (intervals.length === 0) {
1233
1242
  return joinSections([
1234
1243
  renderHeader("diff_summary", {
1235
1244
  files: fileCount,
@@ -1242,17 +1251,29 @@ function compactDiff(diff) {
1242
1251
  `[serializer omitted ${Math.max(0, lines.length - DIFF_INLINE_LINE_LIMIT)} diff line(s)]`
1243
1252
  ]);
1244
1253
  }
1254
+ const merged = [intervals[0]];
1255
+ for (let i = 1; i < intervals.length; i++) {
1256
+ const last = merged[merged.length - 1];
1257
+ const current = intervals[i];
1258
+ if (current[0] <= last[1] + 1) {
1259
+ last[1] = Math.max(last[1], current[1]);
1260
+ } else {
1261
+ merged.push(current);
1262
+ }
1263
+ }
1245
1264
  const excerpt = [];
1246
- let previous = -1;
1247
- for (const index of [...selected].sort((a, b) => a - b)) {
1248
- if (index > previous + 1) {
1249
- const omitted = previous === -1 ? index : index - previous - 1;
1265
+ let prevLine = -1;
1266
+ for (const [start, end] of merged) {
1267
+ if (start > prevLine + 1) {
1268
+ const omitted = prevLine === -1 ? start : start - prevLine - 1;
1250
1269
  excerpt.push(`[serializer omitted ${omitted} diff line(s)]`);
1251
1270
  }
1252
- excerpt.push(lines[index] ?? "");
1253
- previous = index;
1271
+ for (let j = start; j <= end; j++) {
1272
+ excerpt.push(lines[j] ?? "");
1273
+ }
1274
+ prevLine = end;
1254
1275
  }
1255
- const trailing = lines.length - previous - 1;
1276
+ const trailing = lines.length - prevLine - 1;
1256
1277
  if (trailing > 0) excerpt.push(`[serializer omitted ${trailing} trailing diff line(s)]`);
1257
1278
  return joinSections([
1258
1279
  renderHeader("diff_summary", {
@@ -1786,6 +1807,17 @@ function normalizeTokenSavingTier(val) {
1786
1807
  ]);
1787
1808
  return validTiers.has(val) ? val : "off";
1788
1809
  }
1810
+ var DEFAULT_TUI_THINKING_WORD = "thinking";
1811
+ var MAX_TUI_THINKING_WORD_LENGTH = 16;
1812
+ function normalizeTuiThinkingWord(value) {
1813
+ if (typeof value !== "string") return DEFAULT_TUI_THINKING_WORD;
1814
+ const word = value.trim();
1815
+ if (word.length === 0 || word.length > MAX_TUI_THINKING_WORD_LENGTH) {
1816
+ return DEFAULT_TUI_THINKING_WORD;
1817
+ }
1818
+ if (!/^[\p{L}\p{N}_-]+$/u.test(word)) return DEFAULT_TUI_THINKING_WORD;
1819
+ return word;
1820
+ }
1789
1821
 
1790
1822
  // src/types/default-config.ts
1791
1823
  var DEFAULT_TOOLS_CONFIG = Object.freeze({
@@ -4584,6 +4616,7 @@ ${post.additionalContext}`;
4584
4616
  } catch (err) {
4585
4617
  const msg = toErrorMessage(err);
4586
4618
  const scrubbed = this.opts.secretScrubber.scrub(msg);
4619
+ const { category, retryable, detail } = classifyToolError(err);
4587
4620
  this.opts.renderer?.writeToolResult(tool.name, scrubbed, true);
4588
4621
  const result = {
4589
4622
  type: "tool_result",
@@ -4594,6 +4627,9 @@ ${post.additionalContext}`;
4594
4627
  budget = this.budgetForString(result.content, budget);
4595
4628
  if (err instanceof Error) span?.recordError(err);
4596
4629
  span?.setAttribute("tool.is_error", true);
4630
+ span?.setAttribute("tool.error_category", category);
4631
+ span?.setAttribute("tool.error_retryable", retryable);
4632
+ if (detail) span?.setAttribute("tool.error_detail", detail);
4597
4633
  return { result, tool, durationMs: Date.now() - start };
4598
4634
  } finally {
4599
4635
  span?.end();
@@ -4605,6 +4641,9 @@ ${post.additionalContext}`;
4605
4641
  } catch (err) {
4606
4642
  const msg = toErrorMessage(err);
4607
4643
  const scrubbed = this.opts.secretScrubber.scrub(msg);
4644
+ const { category, retryable, detail } = classifyToolError(err);
4645
+ const tool = this.registry.get(use.name);
4646
+ this.opts.renderer?.writeToolResult(tool?.name ?? use.name, scrubbed, true);
4608
4647
  const result = {
4609
4648
  type: "tool_result",
4610
4649
  tool_use_id: use.id,
@@ -4612,7 +4651,7 @@ ${post.additionalContext}`;
4612
4651
  is_error: true
4613
4652
  };
4614
4653
  budget = this.budgetForString(result.content, budget);
4615
- return { result, tool: this.registry.get(use.name), durationMs: 0 };
4654
+ return { result, tool, durationMs: 0 };
4616
4655
  }
4617
4656
  };
4618
4657
  if (strategy === "sequential") {
@@ -4844,6 +4883,58 @@ function extractMalformedRaw(input) {
4844
4883
  }
4845
4884
  }
4846
4885
  var TOOL_OUTPUT_ARTIFACT_THRESHOLD_BYTES = 64 * 1024;
4886
+ function classifyToolError(err) {
4887
+ if (err instanceof Error && err.name === "AbortError") {
4888
+ return { category: "fatal" /* FATAL */, retryable: false, detail: "aborted" };
4889
+ }
4890
+ if (err instanceof Error && "code" in err) {
4891
+ const code = err.code;
4892
+ switch (code) {
4893
+ case "ETIMEDOUT":
4894
+ case "ECONNRESET":
4895
+ case "ECONNREFUSED":
4896
+ case "ENETUNREACH":
4897
+ case "EHOSTUNREACH":
4898
+ return { category: "transient" /* TRANSIENT */, retryable: true, detail: code };
4899
+ case "ENOENT":
4900
+ case "ENOTDIR":
4901
+ return { category: "not_found" /* NOT_FOUND */, retryable: false, detail: code };
4902
+ case "EACCES":
4903
+ case "EPERM":
4904
+ return { category: "permission" /* PERMISSION */, retryable: false, detail: code };
4905
+ case "EBUSY":
4906
+ case "EMFILE":
4907
+ case "ENFILE":
4908
+ return { category: "transient" /* TRANSIENT */, retryable: true, detail: code };
4909
+ }
4910
+ }
4911
+ if (err instanceof Error && "response" in err) {
4912
+ const response = err.response;
4913
+ const status = response?.status;
4914
+ if (status !== void 0) {
4915
+ if (status === 429 || status === 503 || status === 502 || status === 504) {
4916
+ return { category: "transient" /* TRANSIENT */, retryable: true, detail: `HTTP ${status}` };
4917
+ }
4918
+ if (status === 404 || status === 410) {
4919
+ return { category: "not_found" /* NOT_FOUND */, retryable: false, detail: `HTTP ${status}` };
4920
+ }
4921
+ if (status === 401 || status === 403) {
4922
+ return { category: "permission" /* PERMISSION */, retryable: false, detail: `HTTP ${status}` };
4923
+ }
4924
+ if (status === 400) {
4925
+ return { category: "validation" /* VALIDATION */, retryable: false, detail: `HTTP ${status}` };
4926
+ }
4927
+ }
4928
+ }
4929
+ if (err instanceof Error && err.message.includes("validation")) {
4930
+ return { category: "validation" /* VALIDATION */, retryable: false, detail: "validation" };
4931
+ }
4932
+ return {
4933
+ category: "fatal" /* FATAL */,
4934
+ retryable: false,
4935
+ detail: err instanceof Error ? err.message.slice(0, 100) : String(err).slice(0, 100)
4936
+ };
4937
+ }
4847
4938
  async function maybePersistLargeToolOutput(toolName, content, budget) {
4848
4939
  const bytes = Buffer.byteLength(content, "utf8");
4849
4940
  if (bytes <= Math.min(TOOL_OUTPUT_ARTIFACT_THRESHOLD_BYTES, Math.max(0, budget))) {
@@ -5426,6 +5517,6 @@ function renderPlainText(meta, events) {
5426
5517
  return lines.join("\n");
5427
5518
  }
5428
5519
 
5429
- export { AgentError, CONTEXT_WINDOW_MODES, ConfigError, Context, DEFAULT_AUTONOMY_CONFIG, DEFAULT_CIRCUIT_BREAKER_CONFIG, DEFAULT_CONTEXT_CONFIG, DEFAULT_CONTEXT_WINDOW_MODE_ID, DEFAULT_MODES, DEFAULT_RECOVERY_STRATEGIES, DEFAULT_SESSION_LOGGING_CONFIG, DEFAULT_SESSION_PRUNE_DAYS, DEFAULT_SPEC_TEMPLATE, DEFAULT_TOOLS_CONFIG, DefaultErrorHandler, DefaultLogger, DefaultModelsRegistry, DefaultPathResolver, DefaultRetryPolicy, DefaultSecretScrubber, DefaultSecretVault, DefaultSessionReader, DefaultTokenCounter, ERROR_CODES, FsError, HybridCompactor, InMemoryAgentBridge, InMemoryBridgeTransport, MEMORY_TYPE_LABELS, PluginError, ProviderError, SddError, SessionError, StreamHangError, ToolError, ToolExecutor, WrongStackError, asBlocks, asText, buildRecoveryStrategies, classifyFamily, computeTaskProgress, createMessage, decryptConfigSecrets, encryptConfigSecrets, findCriticalPath, formatContextWindowModeList, getContextWindowMode, isAgentError, isConfigError, isContextWindowModeId, isFsError, isImageBlock, isPluginError, isSddError, isSecretField, isSessionError, isTextBlock, isThinkingBlock, isToolError, isToolResultBlock, isToolUseBlock, isWrongStackError, listContextWindowModes, migratePlaintextSecrets, noOpLogger, normalizeTokenSavingTier, resolveContextWindowPolicy, rewriteConfigEncrypted, rotateConfigKeys, toWrongStackError, topologicalSort };
5520
+ export { AgentError, CONTEXT_WINDOW_MODES, ConfigError, Context, DEFAULT_AUTONOMY_CONFIG, DEFAULT_CIRCUIT_BREAKER_CONFIG, DEFAULT_CONTEXT_CONFIG, DEFAULT_CONTEXT_WINDOW_MODE_ID, DEFAULT_MODES, DEFAULT_RECOVERY_STRATEGIES, DEFAULT_SESSION_LOGGING_CONFIG, DEFAULT_SESSION_PRUNE_DAYS, DEFAULT_SPEC_TEMPLATE, DEFAULT_TOOLS_CONFIG, DEFAULT_TUI_THINKING_WORD, DefaultErrorHandler, DefaultLogger, DefaultModelsRegistry, DefaultPathResolver, DefaultRetryPolicy, DefaultSecretScrubber, DefaultSecretVault, DefaultSessionReader, DefaultTokenCounter, ERROR_CODES, FsError, HybridCompactor, InMemoryAgentBridge, InMemoryBridgeTransport, MAX_TUI_THINKING_WORD_LENGTH, MEMORY_TYPE_LABELS, PluginError, ProviderError, SddError, SessionError, StreamHangError, ToolError, ToolErrorCategory, ToolExecutor, WrongStackError, asBlocks, asText, buildRecoveryStrategies, classifyFamily, computeTaskProgress, createMessage, decryptConfigSecrets, encryptConfigSecrets, findCriticalPath, formatContextWindowModeList, getContextWindowMode, isAgentError, isConfigError, isContextWindowModeId, isFsError, isImageBlock, isPluginError, isSddError, isSecretField, isSessionError, isTextBlock, isThinkingBlock, isToolError, isToolResultBlock, isToolUseBlock, isWrongStackError, listContextWindowModes, migratePlaintextSecrets, noOpLogger, normalizeTokenSavingTier, normalizeTuiThinkingWord, resolveContextWindowPolicy, rewriteConfigEncrypted, rotateConfigKeys, toWrongStackError, topologicalSort };
5430
5521
  //# sourceMappingURL=index.js.map
5431
5522
  //# sourceMappingURL=index.js.map