@proxysoul/soulforge 2.3.0 → 2.4.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 (3) hide show
  1. package/README.md +337 -167
  2. package/dist/index.js +672 -656
  3. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -39260,7 +39260,7 @@ var package_default;
39260
39260
  var init_package = __esm(() => {
39261
39261
  package_default = {
39262
39262
  name: "@proxysoul/soulforge",
39263
- version: "2.3.0",
39263
+ version: "2.4.0",
39264
39264
  description: "Graph-powered code intelligence \u2014 multi-agent coding with codebase-aware AI",
39265
39265
  repository: {
39266
39266
  type: "git",
@@ -77803,6 +77803,7 @@ __export(exports_providers, {
77803
77803
  proxy: () => proxy2,
77804
77804
  openrouter: () => openrouter2,
77805
77805
  openai: () => openai2,
77806
+ onProvidersChanged: () => onProvidersChanged,
77806
77807
  ollama: () => ollama,
77807
77808
  mistral: () => mistral2,
77808
77809
  minimax: () => minimax2,
@@ -77821,6 +77822,9 @@ __export(exports_providers, {
77821
77822
  bedrock: () => bedrock2,
77822
77823
  anthropic: () => anthropic2
77823
77824
  });
77825
+ function onProvidersChanged(fn) {
77826
+ changeListeners.push(fn);
77827
+ }
77824
77828
  function registerCustomProviders(configs) {
77825
77829
  const builtinIds = new Set(BUILTIN_PROVIDERS.map((p) => p.id));
77826
77830
  const seen = new Map;
@@ -77839,6 +77843,8 @@ function registerCustomProviders(configs) {
77839
77843
  }
77840
77844
  allProviders = [...BUILTIN_PROVIDERS, ...seen.values()];
77841
77845
  providerMap = new Map(allProviders.map((p) => [p.id, p]));
77846
+ for (const fn of changeListeners)
77847
+ fn();
77842
77848
  }
77843
77849
  function getProvider(id) {
77844
77850
  return providerMap.get(id);
@@ -77855,7 +77861,7 @@ function getProviderSecretEntries() {
77855
77861
  keyUrl: p.keyUrl
77856
77862
  }));
77857
77863
  }
77858
- var BUILTIN_PROVIDERS, allProviders, providerMap;
77864
+ var BUILTIN_PROVIDERS, allProviders, providerMap, changeListeners;
77859
77865
  var init_providers = __esm(() => {
77860
77866
  init_anthropic();
77861
77867
  init_bedrock();
@@ -77898,6 +77904,7 @@ var init_providers = __esm(() => {
77898
77904
  BUILTIN_PROVIDERS = [llmgateway2, anthropic2, proxy2, vercelGatewayProvider, openai2, xai2, google2, groq2, deepseek2, mistral2, bedrock2, fireworks2, minimax2, copilot, githubModels, openrouter2, ollama, lmstudio];
77899
77905
  allProviders = [...BUILTIN_PROVIDERS];
77900
77906
  providerMap = new Map(allProviders.map((p) => [p.id, p]));
77907
+ changeListeners = [];
77901
77908
  });
77902
77909
 
77903
77910
  // src/headless/constants.ts
@@ -78971,6 +78978,15 @@ __export(exports_models, {
78971
78978
  ensureModelMetadata: () => ensureModelMetadata,
78972
78979
  PROVIDER_CONFIGS: () => PROVIDER_CONFIGS
78973
78980
  });
78981
+ function buildProviderConfigs() {
78982
+ return getAllProviders().map((p) => ({
78983
+ id: p.id,
78984
+ name: p.name,
78985
+ envVar: p.envVar,
78986
+ grouped: p.grouped,
78987
+ fallbackModels: p.fallbackModels
78988
+ }));
78989
+ }
78974
78990
  function getModelContextInfoSync(modelId) {
78975
78991
  const slashIdx = modelId.indexOf("/");
78976
78992
  const providerId = slashIdx >= 0 ? modelId.slice(0, slashIdx) : "";
@@ -79541,13 +79557,10 @@ var init_models = __esm(() => {
79541
79557
  init_lifecycle();
79542
79558
  init_secrets();
79543
79559
  init_providers();
79544
- PROVIDER_CONFIGS = getAllProviders().map((p) => ({
79545
- id: p.id,
79546
- name: p.name,
79547
- envVar: p.envVar,
79548
- grouped: p.grouped,
79549
- fallbackModels: p.fallbackModels
79550
- }));
79560
+ PROVIDER_CONFIGS = buildProviderConfigs();
79561
+ onProvidersChanged(() => {
79562
+ PROVIDER_CONFIGS.splice(0, PROVIDER_CONFIGS.length, ...buildProviderConfigs());
79563
+ });
79551
79564
  MODEL_CACHE_TTL = 30 * 60000;
79552
79565
  modelCache = new Map;
79553
79566
  groupedCache = new Map;
@@ -463497,6 +463510,44 @@ var init_Markdown = __esm(async () => {
463497
463510
  });
463498
463511
  });
463499
463512
 
463513
+ // src/types/plan-schema.ts
463514
+ function parsePlanOutput(raw2) {
463515
+ if (raw2 == null || typeof raw2 !== "object")
463516
+ return null;
463517
+ const result = planOutputSchema.safeParse(raw2);
463518
+ if (!result.success)
463519
+ return null;
463520
+ return result.data;
463521
+ }
463522
+ var planSymbolChangeSchema, planFileChangeSchema, planOutputSchema;
463523
+ var init_plan_schema = __esm(() => {
463524
+ init_zod();
463525
+ planSymbolChangeSchema = exports_external.object({
463526
+ name: exports_external.string(),
463527
+ kind: exports_external.string(),
463528
+ action: exports_external.enum(["add", "modify", "remove", "rename"]),
463529
+ details: exports_external.string(),
463530
+ line: exports_external.number().nullable().optional().transform((v4) => v4 ?? undefined)
463531
+ });
463532
+ planFileChangeSchema = exports_external.object({
463533
+ path: exports_external.string(),
463534
+ action: exports_external.enum(["create", "modify", "delete"]),
463535
+ description: exports_external.string(),
463536
+ symbols: exports_external.array(planSymbolChangeSchema).nullable().optional().catch(undefined).transform((v4) => v4 ?? undefined)
463537
+ });
463538
+ planOutputSchema = exports_external.object({
463539
+ title: exports_external.string(),
463540
+ context: exports_external.string().catch(""),
463541
+ files: exports_external.array(planFileChangeSchema),
463542
+ steps: exports_external.array(exports_external.object({
463543
+ id: exports_external.string(),
463544
+ label: exports_external.string(),
463545
+ details: exports_external.string().optional()
463546
+ })),
463547
+ verification: exports_external.array(exports_external.string()).catch([])
463548
+ });
463549
+ });
463550
+
463500
463551
  // src/components/plan/StructuredPlanView.tsx
463501
463552
  function getActionColors(t2) {
463502
463553
  return {
@@ -463514,7 +463565,7 @@ function getSymbolActionColors(t2) {
463514
463565
  };
463515
463566
  }
463516
463567
  function StructuredPlanView(t0) {
463517
- const $5 = import_compiler_runtime14.c(124);
463568
+ const $5 = import_compiler_runtime14.c(105);
463518
463569
  const {
463519
463570
  plan,
463520
463571
  result,
@@ -463529,618 +463580,573 @@ function StructuredPlanView(t0) {
463529
463580
  const STEP_NUM_COLOR = t2.brandAlt;
463530
463581
  const TEXT_COLOR = t2.textSecondary;
463531
463582
  const CHECK_COLOR = t2.success;
463583
+ const {
463584
+ files,
463585
+ steps,
463586
+ verification,
463587
+ context: context2
463588
+ } = plan;
463589
+ let resolvedFile = planFile;
463590
+ if (!resolvedFile && result) {
463591
+ try {
463592
+ let t14;
463593
+ if ($5[0] !== result) {
463594
+ t14 = JSON.parse(result);
463595
+ $5[0] = result;
463596
+ $5[1] = t14;
463597
+ } else {
463598
+ t14 = $5[1];
463599
+ }
463600
+ const parsed = t14;
463601
+ if (typeof parsed.file === "string") {
463602
+ resolvedFile = parsed.file;
463603
+ }
463604
+ } catch {}
463605
+ }
463532
463606
  let t1;
463533
- let t10;
463607
+ if ($5[2] !== result) {
463608
+ t1 = result?.includes("cancelled by user");
463609
+ $5[2] = result;
463610
+ $5[3] = t1;
463611
+ } else {
463612
+ t1 = $5[3];
463613
+ }
463614
+ const isCancelled = t1;
463534
463615
  let t22;
463616
+ if ($5[4] !== result) {
463617
+ t22 = result?.startsWith("User wants changes to the plan:");
463618
+ $5[4] = result;
463619
+ $5[5] = t22;
463620
+ } else {
463621
+ t22 = $5[5];
463622
+ }
463623
+ const isRevised = t22;
463535
463624
  let t3;
463625
+ if ($5[6] !== isRevised || $5[7] !== result) {
463626
+ t3 = isRevised && result ? result.replace("User wants changes to the plan: ", "") : null;
463627
+ $5[6] = isRevised;
463628
+ $5[7] = result;
463629
+ $5[8] = t3;
463630
+ } else {
463631
+ t3 = $5[8];
463632
+ }
463633
+ const reviseFeedback = t3;
463634
+ const isRejected = isCancelled || isRevised;
463635
+ const borderColor = isRejected ? t2.textSubtle : BORDER;
463636
+ const titleColor = isRejected ? t2.textMuted : TITLE_COLOR;
463637
+ if (collapsed) {
463638
+ let t42;
463639
+ if ($5[9] !== plan.files) {
463640
+ t42 = plan.files ?? [];
463641
+ $5[9] = plan.files;
463642
+ $5[10] = t42;
463643
+ } else {
463644
+ t42 = $5[10];
463645
+ }
463646
+ const files_0 = t42;
463647
+ let t52;
463648
+ if ($5[11] !== plan.steps) {
463649
+ t52 = plan.steps ?? [];
463650
+ $5[11] = plan.steps;
463651
+ $5[12] = t52;
463652
+ } else {
463653
+ t52 = $5[12];
463654
+ }
463655
+ const steps_0 = t52;
463656
+ let t62;
463657
+ if ($5[13] !== CHECK_COLOR) {
463658
+ t62 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
463659
+ fg: CHECK_COLOR,
463660
+ children: "\u2713 "
463661
+ }, undefined, false, undefined, this);
463662
+ $5[13] = CHECK_COLOR;
463663
+ $5[14] = t62;
463664
+ } else {
463665
+ t62 = $5[14];
463666
+ }
463667
+ let t72;
463668
+ if ($5[15] !== TITLE_COLOR || $5[16] !== plan.title) {
463669
+ t72 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
463670
+ fg: TITLE_COLOR,
463671
+ attributes: TextAttributes.BOLD,
463672
+ children: plan.title
463673
+ }, undefined, false, undefined, this);
463674
+ $5[15] = TITLE_COLOR;
463675
+ $5[16] = plan.title;
463676
+ $5[17] = t72;
463677
+ } else {
463678
+ t72 = $5[17];
463679
+ }
463680
+ const t82 = t2.textMuted;
463681
+ const t92 = String(files_0.length);
463682
+ const t102 = files_0.length !== 1 ? "s" : "";
463683
+ const t112 = String(steps_0.length);
463684
+ const t122 = steps_0.length !== 1 ? "s" : "";
463685
+ let t132;
463686
+ if ($5[18] !== t2.textMuted || $5[19] !== t102 || $5[20] !== t112 || $5[21] !== t122 || $5[22] !== t92) {
463687
+ t132 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
463688
+ fg: t82,
463689
+ children: [
463690
+ " ",
463691
+ "(",
463692
+ t92,
463693
+ " file",
463694
+ t102,
463695
+ ", ",
463696
+ t112,
463697
+ " step",
463698
+ t122,
463699
+ ")"
463700
+ ]
463701
+ }, undefined, true, undefined, this);
463702
+ $5[18] = t2.textMuted;
463703
+ $5[19] = t102;
463704
+ $5[20] = t112;
463705
+ $5[21] = t122;
463706
+ $5[22] = t92;
463707
+ $5[23] = t132;
463708
+ } else {
463709
+ t132 = $5[23];
463710
+ }
463711
+ let t14;
463712
+ if ($5[24] !== resolvedFile || $5[25] !== t2.textFaint || $5[26] !== t2.textMuted) {
463713
+ t14 = resolvedFile ? /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(import_jsx_dev_runtime2.Fragment, {
463714
+ children: [
463715
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
463716
+ fg: t2.textFaint,
463717
+ children: " \u2500 "
463718
+ }, undefined, false, undefined, this),
463719
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
463720
+ fg: t2.textMuted,
463721
+ children: resolvedFile
463722
+ }, undefined, false, undefined, this)
463723
+ ]
463724
+ }, undefined, true, undefined, this) : null;
463725
+ $5[24] = resolvedFile;
463726
+ $5[25] = t2.textFaint;
463727
+ $5[26] = t2.textMuted;
463728
+ $5[27] = t14;
463729
+ } else {
463730
+ t14 = $5[27];
463731
+ }
463732
+ let t15;
463733
+ if ($5[28] !== t132 || $5[29] !== t14 || $5[30] !== t62 || $5[31] !== t72) {
463734
+ t15 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
463735
+ height: 1,
463736
+ flexShrink: 0,
463737
+ children: /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
463738
+ truncate: true,
463739
+ children: [
463740
+ t62,
463741
+ t72,
463742
+ t132,
463743
+ t14
463744
+ ]
463745
+ }, undefined, true, undefined, this)
463746
+ }, undefined, false, undefined, this);
463747
+ $5[28] = t132;
463748
+ $5[29] = t14;
463749
+ $5[30] = t62;
463750
+ $5[31] = t72;
463751
+ $5[32] = t15;
463752
+ } else {
463753
+ t15 = $5[32];
463754
+ }
463755
+ return t15;
463756
+ }
463757
+ if (isRejected) {
463758
+ let t42;
463759
+ if ($5[33] !== titleColor) {
463760
+ t42 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
463761
+ fg: titleColor,
463762
+ children: "\uF0CB"
463763
+ }, undefined, false, undefined, this);
463764
+ $5[33] = titleColor;
463765
+ $5[34] = t42;
463766
+ } else {
463767
+ t42 = $5[34];
463768
+ }
463769
+ let t52;
463770
+ if ($5[35] !== plan.title || $5[36] !== titleColor) {
463771
+ t52 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
463772
+ fg: titleColor,
463773
+ attributes: TextAttributes.BOLD,
463774
+ children: plan.title
463775
+ }, undefined, false, undefined, this);
463776
+ $5[35] = plan.title;
463777
+ $5[36] = titleColor;
463778
+ $5[37] = t52;
463779
+ } else {
463780
+ t52 = $5[37];
463781
+ }
463782
+ let t62;
463783
+ if ($5[38] !== resolvedFile || $5[39] !== t2.textDim || $5[40] !== t2.textFaint) {
463784
+ t62 = resolvedFile ? /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(import_jsx_dev_runtime2.Fragment, {
463785
+ children: [
463786
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
463787
+ fg: t2.textFaint,
463788
+ children: " \u2500 "
463789
+ }, undefined, false, undefined, this),
463790
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
463791
+ fg: t2.textDim,
463792
+ children: resolvedFile
463793
+ }, undefined, false, undefined, this)
463794
+ ]
463795
+ }, undefined, true, undefined, this) : null;
463796
+ $5[38] = resolvedFile;
463797
+ $5[39] = t2.textDim;
463798
+ $5[40] = t2.textFaint;
463799
+ $5[41] = t62;
463800
+ } else {
463801
+ t62 = $5[41];
463802
+ }
463803
+ let t72;
463804
+ if ($5[42] !== t42 || $5[43] !== t52 || $5[44] !== t62) {
463805
+ t72 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
463806
+ truncate: true,
463807
+ children: [
463808
+ t42,
463809
+ " ",
463810
+ t52,
463811
+ t62
463812
+ ]
463813
+ }, undefined, true, undefined, this);
463814
+ $5[42] = t42;
463815
+ $5[43] = t52;
463816
+ $5[44] = t62;
463817
+ $5[45] = t72;
463818
+ } else {
463819
+ t72 = $5[45];
463820
+ }
463821
+ let t82;
463822
+ if ($5[46] !== t2.bgSecondary || $5[47] !== t72) {
463823
+ t82 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
463824
+ height: 1,
463825
+ flexShrink: 0,
463826
+ paddingX: 1,
463827
+ backgroundColor: t2.bgSecondary,
463828
+ alignSelf: "flex-start",
463829
+ marginTop: -1,
463830
+ children: t72
463831
+ }, undefined, false, undefined, this);
463832
+ $5[46] = t2.bgSecondary;
463833
+ $5[47] = t72;
463834
+ $5[48] = t82;
463835
+ } else {
463836
+ t82 = $5[48];
463837
+ }
463838
+ let t92;
463839
+ if ($5[49] !== isCancelled || $5[50] !== reviseFeedback || $5[51] !== t2.error || $5[52] !== t2.textSecondary || $5[53] !== t2.warning) {
463840
+ t92 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
463841
+ paddingX: 1,
463842
+ children: isCancelled ? /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
463843
+ fg: t2.error,
463844
+ children: "\u2717 Plan cancelled"
463845
+ }, undefined, false, undefined, this) : /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
463846
+ children: [
463847
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
463848
+ fg: t2.warning,
463849
+ children: "\u21BB Revision requested: "
463850
+ }, undefined, false, undefined, this),
463851
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
463852
+ fg: t2.textSecondary,
463853
+ children: reviseFeedback
463854
+ }, undefined, false, undefined, this)
463855
+ ]
463856
+ }, undefined, true, undefined, this)
463857
+ }, undefined, false, undefined, this);
463858
+ $5[49] = isCancelled;
463859
+ $5[50] = reviseFeedback;
463860
+ $5[51] = t2.error;
463861
+ $5[52] = t2.textSecondary;
463862
+ $5[53] = t2.warning;
463863
+ $5[54] = t92;
463864
+ } else {
463865
+ t92 = $5[54];
463866
+ }
463867
+ let t102;
463868
+ if ($5[55] !== borderColor || $5[56] !== t82 || $5[57] !== t92) {
463869
+ t102 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
463870
+ flexDirection: "column",
463871
+ flexShrink: 0,
463872
+ border: true,
463873
+ borderStyle: "rounded",
463874
+ borderColor,
463875
+ children: [
463876
+ t82,
463877
+ t92
463878
+ ]
463879
+ }, undefined, true, undefined, this);
463880
+ $5[55] = borderColor;
463881
+ $5[56] = t82;
463882
+ $5[57] = t92;
463883
+ $5[58] = t102;
463884
+ } else {
463885
+ t102 = $5[58];
463886
+ }
463887
+ return t102;
463888
+ }
463536
463889
  let t4;
463890
+ if ($5[59] !== TITLE_COLOR) {
463891
+ t4 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
463892
+ fg: TITLE_COLOR,
463893
+ children: "\uF0CB"
463894
+ }, undefined, false, undefined, this);
463895
+ $5[59] = TITLE_COLOR;
463896
+ $5[60] = t4;
463897
+ } else {
463898
+ t4 = $5[60];
463899
+ }
463537
463900
  let t5;
463901
+ if ($5[61] !== TITLE_COLOR || $5[62] !== plan.title) {
463902
+ t5 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
463903
+ fg: TITLE_COLOR,
463904
+ attributes: TextAttributes.BOLD,
463905
+ children: plan.title
463906
+ }, undefined, false, undefined, this);
463907
+ $5[61] = TITLE_COLOR;
463908
+ $5[62] = plan.title;
463909
+ $5[63] = t5;
463910
+ } else {
463911
+ t5 = $5[63];
463912
+ }
463538
463913
  let t6;
463914
+ if ($5[64] !== resolvedFile || $5[65] !== t2.textFaint || $5[66] !== t2.textMuted) {
463915
+ t6 = resolvedFile ? /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(import_jsx_dev_runtime2.Fragment, {
463916
+ children: [
463917
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
463918
+ fg: t2.textFaint,
463919
+ children: " \u2500 "
463920
+ }, undefined, false, undefined, this),
463921
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
463922
+ fg: t2.textMuted,
463923
+ children: resolvedFile
463924
+ }, undefined, false, undefined, this)
463925
+ ]
463926
+ }, undefined, true, undefined, this) : null;
463927
+ $5[64] = resolvedFile;
463928
+ $5[65] = t2.textFaint;
463929
+ $5[66] = t2.textMuted;
463930
+ $5[67] = t6;
463931
+ } else {
463932
+ t6 = $5[67];
463933
+ }
463539
463934
  let t7;
463935
+ if ($5[68] !== t4 || $5[69] !== t5 || $5[70] !== t6) {
463936
+ t7 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
463937
+ truncate: true,
463938
+ children: [
463939
+ t4,
463940
+ " ",
463941
+ t5,
463942
+ t6
463943
+ ]
463944
+ }, undefined, true, undefined, this);
463945
+ $5[68] = t4;
463946
+ $5[69] = t5;
463947
+ $5[70] = t6;
463948
+ $5[71] = t7;
463949
+ } else {
463950
+ t7 = $5[71];
463951
+ }
463540
463952
  let t8;
463953
+ if ($5[72] !== t2.bgSecondary || $5[73] !== t7) {
463954
+ t8 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
463955
+ height: 1,
463956
+ flexShrink: 0,
463957
+ paddingX: 1,
463958
+ backgroundColor: t2.bgSecondary,
463959
+ alignSelf: "flex-start",
463960
+ marginTop: -1,
463961
+ children: t7
463962
+ }, undefined, false, undefined, this);
463963
+ $5[72] = t2.bgSecondary;
463964
+ $5[73] = t7;
463965
+ $5[74] = t8;
463966
+ } else {
463967
+ t8 = $5[74];
463968
+ }
463541
463969
  let t9;
463542
- let verification;
463543
- if ($5[0] !== BORDER || $5[1] !== CHECK_COLOR || $5[2] !== FILE_PATH_COLOR || $5[3] !== SECTION_COLOR || $5[4] !== STEP_NUM_COLOR || $5[5] !== TEXT_COLOR || $5[6] !== TITLE_COLOR || $5[7] !== collapsed || $5[8] !== plan.context || $5[9] !== plan.files || $5[10] !== plan.steps || $5[11] !== plan.title || $5[12] !== plan.verification || $5[13] !== planFile || $5[14] !== result || $5[15] !== t2) {
463544
- t10 = Symbol.for("react.early_return_sentinel");
463545
- bb0: {
463546
- const files = plan.files ?? [];
463547
- const steps = plan.steps ?? [];
463548
- let t112;
463549
- if ($5[27] !== plan.verification) {
463550
- t112 = plan.verification ?? [];
463551
- $5[27] = plan.verification;
463552
- $5[28] = t112;
463553
- } else {
463554
- t112 = $5[28];
463555
- }
463556
- verification = t112;
463557
- const context2 = plan.context ?? "";
463558
- let resolvedFile = planFile;
463559
- if (!resolvedFile && result) {
463560
- try {
463561
- let t123;
463562
- if ($5[29] !== result) {
463563
- t123 = JSON.parse(result);
463564
- $5[29] = result;
463565
- $5[30] = t123;
463566
- } else {
463567
- t123 = $5[30];
463568
- }
463569
- const parsed = t123;
463570
- if (typeof parsed.file === "string") {
463571
- resolvedFile = parsed.file;
463572
- }
463573
- } catch {}
463574
- }
463575
- let t122;
463576
- if ($5[31] !== result) {
463577
- t122 = result?.includes("cancelled by user");
463578
- $5[31] = result;
463579
- $5[32] = t122;
463580
- } else {
463581
- t122 = $5[32];
463582
- }
463583
- const isCancelled = t122;
463584
- let t13;
463585
- if ($5[33] !== result) {
463586
- t13 = result?.startsWith("User wants changes to the plan:");
463587
- $5[33] = result;
463588
- $5[34] = t13;
463589
- } else {
463590
- t13 = $5[34];
463591
- }
463592
- const isRevised = t13;
463593
- let t14;
463594
- if ($5[35] !== isRevised || $5[36] !== result) {
463595
- t14 = isRevised && result ? result.replace("User wants changes to the plan: ", "") : null;
463596
- $5[35] = isRevised;
463597
- $5[36] = result;
463598
- $5[37] = t14;
463599
- } else {
463600
- t14 = $5[37];
463601
- }
463602
- const reviseFeedback = t14;
463603
- const isRejected = isCancelled || isRevised;
463604
- const borderColor = isRejected ? t2.textSubtle : BORDER;
463605
- const titleColor = isRejected ? t2.textMuted : TITLE_COLOR;
463606
- if (collapsed) {
463607
- let t152;
463608
- if ($5[38] !== plan.files) {
463609
- t152 = plan.files ?? [];
463610
- $5[38] = plan.files;
463611
- $5[39] = t152;
463612
- } else {
463613
- t152 = $5[39];
463614
- }
463615
- const files_0 = t152;
463616
- let t162;
463617
- if ($5[40] !== plan.steps) {
463618
- t162 = plan.steps ?? [];
463619
- $5[40] = plan.steps;
463620
- $5[41] = t162;
463621
- } else {
463622
- t162 = $5[41];
463623
- }
463624
- const steps_0 = t162;
463625
- let t172;
463626
- if ($5[42] !== CHECK_COLOR) {
463627
- t172 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
463628
- fg: CHECK_COLOR,
463629
- children: "\u2713 "
463630
- }, undefined, false, undefined, this);
463631
- $5[42] = CHECK_COLOR;
463632
- $5[43] = t172;
463633
- } else {
463634
- t172 = $5[43];
463635
- }
463636
- let t182;
463637
- if ($5[44] !== TITLE_COLOR || $5[45] !== plan.title) {
463638
- t182 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
463639
- fg: TITLE_COLOR,
463640
- attributes: TextAttributes.BOLD,
463641
- children: plan.title
463642
- }, undefined, false, undefined, this);
463643
- $5[44] = TITLE_COLOR;
463644
- $5[45] = plan.title;
463645
- $5[46] = t182;
463646
- } else {
463647
- t182 = $5[46];
463648
- }
463649
- const t19 = t2.textMuted;
463650
- const t20 = String(files_0.length);
463651
- const t21 = files_0.length !== 1 ? "s" : "";
463652
- const t222 = String(steps_0.length);
463653
- const t23 = steps_0.length !== 1 ? "s" : "";
463654
- let t24;
463655
- if ($5[47] !== t2.textMuted || $5[48] !== t20 || $5[49] !== t21 || $5[50] !== t222 || $5[51] !== t23) {
463656
- t24 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
463657
- fg: t19,
463658
- children: [
463659
- " ",
463660
- "(",
463661
- t20,
463662
- " file",
463663
- t21,
463664
- ", ",
463665
- t222,
463666
- " step",
463667
- t23,
463668
- ")"
463669
- ]
463670
- }, undefined, true, undefined, this);
463671
- $5[47] = t2.textMuted;
463672
- $5[48] = t20;
463673
- $5[49] = t21;
463674
- $5[50] = t222;
463675
- $5[51] = t23;
463676
- $5[52] = t24;
463677
- } else {
463678
- t24 = $5[52];
463679
- }
463680
- let t25;
463681
- if ($5[53] !== resolvedFile || $5[54] !== t2.textFaint || $5[55] !== t2.textMuted) {
463682
- t25 = resolvedFile ? /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(import_jsx_dev_runtime2.Fragment, {
463683
- children: [
463684
- /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
463685
- fg: t2.textFaint,
463686
- children: " \u2500 "
463687
- }, undefined, false, undefined, this),
463688
- /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
463689
- fg: t2.textMuted,
463690
- children: resolvedFile
463691
- }, undefined, false, undefined, this)
463692
- ]
463693
- }, undefined, true, undefined, this) : null;
463694
- $5[53] = resolvedFile;
463695
- $5[54] = t2.textFaint;
463696
- $5[55] = t2.textMuted;
463697
- $5[56] = t25;
463698
- } else {
463699
- t25 = $5[56];
463700
- }
463701
- let t26;
463702
- if ($5[57] !== t172 || $5[58] !== t182 || $5[59] !== t24 || $5[60] !== t25) {
463703
- t26 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
463704
- height: 1,
463705
- flexShrink: 0,
463706
- children: /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
463707
- truncate: true,
463970
+ if ($5[75] !== SECTION_COLOR || $5[76] !== TEXT_COLOR || $5[77] !== context2) {
463971
+ t9 = context2 && /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
463972
+ flexDirection: "column",
463973
+ paddingX: 1,
463974
+ children: [
463975
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
463976
+ fg: SECTION_COLOR,
463977
+ attributes: TextAttributes.BOLD,
463978
+ children: "Context"
463979
+ }, undefined, false, undefined, this),
463980
+ context2.split(`
463981
+ `).map((line2, i4) => /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
463982
+ fg: TEXT_COLOR,
463983
+ children: line2
463984
+ }, `ctx-${String(i4)}`, false, undefined, this))
463985
+ ]
463986
+ }, undefined, true, undefined, this);
463987
+ $5[75] = SECTION_COLOR;
463988
+ $5[76] = TEXT_COLOR;
463989
+ $5[77] = context2;
463990
+ $5[78] = t9;
463991
+ } else {
463992
+ t9 = $5[78];
463993
+ }
463994
+ let t10;
463995
+ if ($5[79] !== FILE_PATH_COLOR || $5[80] !== SECTION_COLOR || $5[81] !== context2 || $5[82] !== files || $5[83] !== t2) {
463996
+ t10 = files.length > 0 && /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
463997
+ flexDirection: "column",
463998
+ paddingX: 1,
463999
+ marginTop: context2 ? 1 : 0,
464000
+ children: [
464001
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
464002
+ children: [
464003
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
464004
+ fg: SECTION_COLOR,
464005
+ attributes: TextAttributes.BOLD,
464006
+ children: "Files"
464007
+ }, undefined, false, undefined, this),
464008
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
464009
+ fg: t2.textMuted,
463708
464010
  children: [
463709
- t172,
463710
- t182,
463711
- t24,
463712
- t25
464011
+ " (",
464012
+ String(files.length),
464013
+ ")"
463713
464014
  ]
463714
464015
  }, undefined, true, undefined, this)
463715
- }, undefined, false, undefined, this);
463716
- $5[57] = t172;
463717
- $5[58] = t182;
463718
- $5[59] = t24;
463719
- $5[60] = t25;
463720
- $5[61] = t26;
463721
- } else {
463722
- t26 = $5[61];
463723
- }
463724
- t10 = t26;
463725
- break bb0;
463726
- }
463727
- if (isRejected) {
463728
- let t152;
463729
- if ($5[62] !== titleColor) {
463730
- t152 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
463731
- fg: titleColor,
463732
- children: "\uF0CB"
463733
- }, undefined, false, undefined, this);
463734
- $5[62] = titleColor;
463735
- $5[63] = t152;
463736
- } else {
463737
- t152 = $5[63];
463738
- }
463739
- let t162;
463740
- if ($5[64] !== plan.title || $5[65] !== titleColor) {
463741
- t162 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
463742
- fg: titleColor,
463743
- attributes: TextAttributes.BOLD,
463744
- children: plan.title
463745
- }, undefined, false, undefined, this);
463746
- $5[64] = plan.title;
463747
- $5[65] = titleColor;
463748
- $5[66] = t162;
463749
- } else {
463750
- t162 = $5[66];
463751
- }
463752
- let t172;
463753
- if ($5[67] !== resolvedFile || $5[68] !== t2.textDim || $5[69] !== t2.textFaint) {
463754
- t172 = resolvedFile ? /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(import_jsx_dev_runtime2.Fragment, {
463755
- children: [
463756
- /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
463757
- fg: t2.textFaint,
463758
- children: " \u2500 "
463759
- }, undefined, false, undefined, this),
463760
- /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
463761
- fg: t2.textDim,
463762
- children: resolvedFile
463763
- }, undefined, false, undefined, this)
463764
- ]
463765
- }, undefined, true, undefined, this) : null;
463766
- $5[67] = resolvedFile;
463767
- $5[68] = t2.textDim;
463768
- $5[69] = t2.textFaint;
463769
- $5[70] = t172;
463770
- } else {
463771
- t172 = $5[70];
463772
- }
463773
- let t182;
463774
- if ($5[71] !== t152 || $5[72] !== t162 || $5[73] !== t172) {
463775
- t182 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
463776
- truncate: true,
463777
- children: [
463778
- t152,
463779
- " ",
463780
- t162,
463781
- t172
463782
- ]
463783
- }, undefined, true, undefined, this);
463784
- $5[71] = t152;
463785
- $5[72] = t162;
463786
- $5[73] = t172;
463787
- $5[74] = t182;
463788
- } else {
463789
- t182 = $5[74];
463790
- }
463791
- let t19;
463792
- if ($5[75] !== t2.bgSecondary || $5[76] !== t182) {
463793
- t19 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
463794
- height: 1,
463795
- flexShrink: 0,
463796
- paddingX: 1,
463797
- backgroundColor: t2.bgSecondary,
463798
- alignSelf: "flex-start",
463799
- marginTop: -1,
463800
- children: t182
463801
- }, undefined, false, undefined, this);
463802
- $5[75] = t2.bgSecondary;
463803
- $5[76] = t182;
463804
- $5[77] = t19;
463805
- } else {
463806
- t19 = $5[77];
463807
- }
463808
- let t20;
463809
- if ($5[78] !== isCancelled || $5[79] !== reviseFeedback || $5[80] !== t2.error || $5[81] !== t2.textSecondary || $5[82] !== t2.warning) {
463810
- t20 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
463811
- paddingX: 1,
463812
- children: isCancelled ? /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
463813
- fg: t2.error,
463814
- children: "\u2717 Plan cancelled"
463815
- }, undefined, false, undefined, this) : /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
464016
+ ]
464017
+ }, undefined, true, undefined, this),
464018
+ files.slice(0, MAX_VISIBLE2).map((f3) => /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
464019
+ flexDirection: "column",
464020
+ children: [
464021
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
464022
+ children: [
464023
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
464024
+ fg: getActionColors(t2)[f3.action] ?? t2.textSecondary,
464025
+ children: [
464026
+ ACTION_ICONS[f3.action] ?? "?",
464027
+ " "
464028
+ ]
464029
+ }, undefined, true, undefined, this),
464030
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
464031
+ fg: FILE_PATH_COLOR,
464032
+ children: f3.path
464033
+ }, undefined, false, undefined, this)
464034
+ ]
464035
+ }, undefined, true, undefined, this),
464036
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
464037
+ fg: t2.textMuted,
464038
+ children: [
464039
+ " ",
464040
+ f3.description
464041
+ ]
464042
+ }, undefined, true, undefined, this),
464043
+ f3.symbols?.map((s2, si) => /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
464044
+ fg: t2.textMuted,
463816
464045
  children: [
464046
+ " ",
463817
464047
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
463818
- fg: t2.warning,
463819
- children: "\u21BB Revision requested: "
464048
+ fg: getSymbolActionColors(t2)[s2.action] ?? t2.textSecondary,
464049
+ children: s2.action
463820
464050
  }, undefined, false, undefined, this),
464051
+ " ",
463821
464052
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
463822
464053
  fg: t2.textSecondary,
463823
- children: reviseFeedback
463824
- }, undefined, false, undefined, this)
464054
+ children: s2.name
464055
+ }, undefined, false, undefined, this),
464056
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
464057
+ fg: t2.textMuted,
464058
+ children: [
464059
+ " (",
464060
+ s2.kind,
464061
+ ")"
464062
+ ]
464063
+ }, undefined, true, undefined, this)
463825
464064
  ]
463826
- }, undefined, true, undefined, this)
463827
- }, undefined, false, undefined, this);
463828
- $5[78] = isCancelled;
463829
- $5[79] = reviseFeedback;
463830
- $5[80] = t2.error;
463831
- $5[81] = t2.textSecondary;
463832
- $5[82] = t2.warning;
463833
- $5[83] = t20;
463834
- } else {
463835
- t20 = $5[83];
463836
- }
463837
- let t21;
463838
- if ($5[84] !== borderColor || $5[85] !== t19 || $5[86] !== t20) {
463839
- t21 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
463840
- flexDirection: "column",
463841
- flexShrink: 0,
463842
- border: true,
463843
- borderStyle: "rounded",
463844
- borderColor,
463845
- children: [
463846
- t19,
463847
- t20
463848
- ]
463849
- }, undefined, true, undefined, this);
463850
- $5[84] = borderColor;
463851
- $5[85] = t19;
463852
- $5[86] = t20;
463853
- $5[87] = t21;
463854
- } else {
463855
- t21 = $5[87];
463856
- }
463857
- t10 = t21;
463858
- break bb0;
463859
- }
463860
- t1 = "column";
463861
- t22 = 0;
463862
- t3 = true;
463863
- t4 = "rounded";
463864
- t5 = BORDER;
463865
- let t15;
463866
- if ($5[88] !== TITLE_COLOR) {
463867
- t15 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
463868
- fg: TITLE_COLOR,
463869
- children: "\uF0CB"
463870
- }, undefined, false, undefined, this);
463871
- $5[88] = TITLE_COLOR;
463872
- $5[89] = t15;
463873
- } else {
463874
- t15 = $5[89];
463875
- }
463876
- let t16;
463877
- if ($5[90] !== TITLE_COLOR || $5[91] !== plan.title) {
463878
- t16 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
463879
- fg: TITLE_COLOR,
463880
- attributes: TextAttributes.BOLD,
463881
- children: plan.title
463882
- }, undefined, false, undefined, this);
463883
- $5[90] = TITLE_COLOR;
463884
- $5[91] = plan.title;
463885
- $5[92] = t16;
463886
- } else {
463887
- t16 = $5[92];
463888
- }
463889
- let t17;
463890
- if ($5[93] !== resolvedFile || $5[94] !== t2.textFaint || $5[95] !== t2.textMuted) {
463891
- t17 = resolvedFile ? /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(import_jsx_dev_runtime2.Fragment, {
464065
+ }, `${f3.path}-s${String(si)}`, true, undefined, this))
464066
+ ]
464067
+ }, f3.path, true, undefined, this)),
464068
+ files.length > MAX_VISIBLE2 && /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
464069
+ fg: t2.textMuted,
464070
+ children: [
464071
+ "+",
464072
+ String(files.length - MAX_VISIBLE2),
464073
+ " more"
464074
+ ]
464075
+ }, undefined, true, undefined, this)
464076
+ ]
464077
+ }, undefined, true, undefined, this);
464078
+ $5[79] = FILE_PATH_COLOR;
464079
+ $5[80] = SECTION_COLOR;
464080
+ $5[81] = context2;
464081
+ $5[82] = files;
464082
+ $5[83] = t2;
464083
+ $5[84] = t10;
464084
+ } else {
464085
+ t10 = $5[84];
464086
+ }
464087
+ let t11;
464088
+ if ($5[85] !== SECTION_COLOR || $5[86] !== STEP_NUM_COLOR || $5[87] !== TEXT_COLOR || $5[88] !== context2 || $5[89] !== files.length || $5[90] !== steps || $5[91] !== t2.textMuted) {
464089
+ t11 = steps.length > 0 && /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
464090
+ flexDirection: "column",
464091
+ paddingX: 1,
464092
+ marginTop: files.length > 0 || context2 ? 1 : 0,
464093
+ children: [
464094
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
463892
464095
  children: [
463893
464096
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
463894
- fg: t2.textFaint,
463895
- children: " \u2500 "
464097
+ fg: SECTION_COLOR,
464098
+ attributes: TextAttributes.BOLD,
464099
+ children: "Steps"
463896
464100
  }, undefined, false, undefined, this),
463897
464101
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
463898
464102
  fg: t2.textMuted,
463899
- children: resolvedFile
463900
- }, undefined, false, undefined, this)
464103
+ children: [
464104
+ " (",
464105
+ String(steps.length),
464106
+ ")"
464107
+ ]
464108
+ }, undefined, true, undefined, this)
463901
464109
  ]
463902
- }, undefined, true, undefined, this) : null;
463903
- $5[93] = resolvedFile;
463904
- $5[94] = t2.textFaint;
463905
- $5[95] = t2.textMuted;
463906
- $5[96] = t17;
463907
- } else {
463908
- t17 = $5[96];
463909
- }
463910
- let t18;
463911
- if ($5[97] !== t15 || $5[98] !== t16 || $5[99] !== t17) {
463912
- t18 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
463913
- truncate: true,
464110
+ }, undefined, true, undefined, this),
464111
+ steps.slice(0, MAX_VISIBLE2).map((s_0, i_0) => /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
463914
464112
  children: [
463915
- t15,
463916
- " ",
463917
- t16,
463918
- t17
464113
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
464114
+ fg: STEP_NUM_COLOR,
464115
+ children: [
464116
+ String(i_0 + 1),
464117
+ ". "
464118
+ ]
464119
+ }, undefined, true, undefined, this),
464120
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
464121
+ fg: TEXT_COLOR,
464122
+ children: s_0.label
464123
+ }, undefined, false, undefined, this)
463919
464124
  ]
463920
- }, undefined, true, undefined, this);
463921
- $5[97] = t15;
463922
- $5[98] = t16;
463923
- $5[99] = t17;
463924
- $5[100] = t18;
463925
- } else {
463926
- t18 = $5[100];
463927
- }
463928
- if ($5[101] !== t2.bgSecondary || $5[102] !== t18) {
463929
- t6 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
463930
- height: 1,
463931
- flexShrink: 0,
463932
- paddingX: 1,
463933
- backgroundColor: t2.bgSecondary,
463934
- alignSelf: "flex-start",
463935
- marginTop: -1,
463936
- children: t18
463937
- }, undefined, false, undefined, this);
463938
- $5[101] = t2.bgSecondary;
463939
- $5[102] = t18;
463940
- $5[103] = t6;
463941
- } else {
463942
- t6 = $5[103];
463943
- }
463944
- if ($5[104] !== SECTION_COLOR || $5[105] !== TEXT_COLOR || $5[106] !== context2) {
463945
- t7 = context2 && /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
463946
- flexDirection: "column",
463947
- paddingX: 1,
464125
+ }, s_0.id, true, undefined, this)),
464126
+ steps.length > MAX_VISIBLE2 && /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
464127
+ fg: t2.textMuted,
463948
464128
  children: [
463949
- /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
463950
- fg: SECTION_COLOR,
463951
- attributes: TextAttributes.BOLD,
463952
- children: "Context"
463953
- }, undefined, false, undefined, this),
463954
- context2.split(`
463955
- `).map((line2, i4) => /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
463956
- fg: TEXT_COLOR,
463957
- children: line2
463958
- }, `ctx-${String(i4)}`, false, undefined, this))
464129
+ "+",
464130
+ String(steps.length - MAX_VISIBLE2),
464131
+ " more"
463959
464132
  ]
463960
- }, undefined, true, undefined, this);
463961
- $5[104] = SECTION_COLOR;
463962
- $5[105] = TEXT_COLOR;
463963
- $5[106] = context2;
463964
- $5[107] = t7;
463965
- } else {
463966
- t7 = $5[107];
463967
- }
463968
- t8 = files.length > 0 && /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
463969
- flexDirection: "column",
463970
- paddingX: 1,
463971
- marginTop: context2 ? 1 : 0,
463972
- children: [
463973
- /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
463974
- children: [
463975
- /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
463976
- fg: SECTION_COLOR,
463977
- attributes: TextAttributes.BOLD,
463978
- children: "Files"
463979
- }, undefined, false, undefined, this),
463980
- /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
463981
- fg: t2.textMuted,
463982
- children: [
463983
- " (",
463984
- String(files.length),
463985
- ")"
463986
- ]
463987
- }, undefined, true, undefined, this)
463988
- ]
463989
- }, undefined, true, undefined, this),
463990
- files.slice(0, MAX_VISIBLE2).map((f3) => /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
463991
- flexDirection: "column",
463992
- children: [
463993
- /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
463994
- children: [
463995
- /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
463996
- fg: getActionColors(t2)[f3.action] ?? t2.textSecondary,
463997
- children: [
463998
- ACTION_ICONS[f3.action] ?? "?",
463999
- " "
464000
- ]
464001
- }, undefined, true, undefined, this),
464002
- /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
464003
- fg: FILE_PATH_COLOR,
464004
- children: f3.path
464005
- }, undefined, false, undefined, this)
464006
- ]
464007
- }, undefined, true, undefined, this),
464008
- /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
464009
- fg: t2.textMuted,
464010
- children: [
464011
- " ",
464012
- f3.description
464013
- ]
464014
- }, undefined, true, undefined, this),
464015
- f3.symbols?.map((s2, si) => /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
464016
- fg: t2.textMuted,
464017
- children: [
464018
- " ",
464019
- /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
464020
- fg: getSymbolActionColors(t2)[s2.action] ?? t2.textSecondary,
464021
- children: s2.action
464022
- }, undefined, false, undefined, this),
464023
- " ",
464024
- /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
464025
- fg: t2.textSecondary,
464026
- children: s2.name
464027
- }, undefined, false, undefined, this),
464028
- /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
464029
- fg: t2.textMuted,
464030
- children: [
464031
- " (",
464032
- s2.kind,
464033
- ")"
464034
- ]
464035
- }, undefined, true, undefined, this)
464036
- ]
464037
- }, `${f3.path}-s${String(si)}`, true, undefined, this))
464038
- ]
464039
- }, f3.path, true, undefined, this)),
464040
- files.length > MAX_VISIBLE2 && /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
464041
- fg: t2.textMuted,
464042
- children: [
464043
- "+",
464044
- String(files.length - MAX_VISIBLE2),
464045
- " more"
464046
- ]
464047
- }, undefined, true, undefined, this)
464048
- ]
464049
- }, undefined, true, undefined, this);
464050
- t9 = steps.length > 0 && /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
464051
- flexDirection: "column",
464052
- paddingX: 1,
464053
- marginTop: files.length > 0 || context2 ? 1 : 0,
464054
- children: [
464055
- /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
464056
- children: [
464057
- /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
464058
- fg: SECTION_COLOR,
464059
- attributes: TextAttributes.BOLD,
464060
- children: "Steps"
464061
- }, undefined, false, undefined, this),
464062
- /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
464063
- fg: t2.textMuted,
464064
- children: [
464065
- " (",
464066
- String(steps.length),
464067
- ")"
464068
- ]
464069
- }, undefined, true, undefined, this)
464070
- ]
464071
- }, undefined, true, undefined, this),
464072
- steps.slice(0, MAX_VISIBLE2).map((s_0, i_0) => /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
464073
- children: [
464074
- /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
464075
- fg: STEP_NUM_COLOR,
464076
- children: [
464077
- String(i_0 + 1),
464078
- ". "
464079
- ]
464080
- }, undefined, true, undefined, this),
464081
- /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
464082
- fg: TEXT_COLOR,
464083
- children: s_0.label
464084
- }, undefined, false, undefined, this)
464085
- ]
464086
- }, s_0.id, true, undefined, this)),
464087
- steps.length > MAX_VISIBLE2 && /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
464088
- fg: t2.textMuted,
464089
- children: [
464090
- "+",
464091
- String(steps.length - MAX_VISIBLE2),
464092
- " more"
464093
- ]
464094
- }, undefined, true, undefined, this)
464095
- ]
464096
- }, undefined, true, undefined, this);
464097
- }
464098
- $5[0] = BORDER;
464099
- $5[1] = CHECK_COLOR;
464100
- $5[2] = FILE_PATH_COLOR;
464101
- $5[3] = SECTION_COLOR;
464102
- $5[4] = STEP_NUM_COLOR;
464103
- $5[5] = TEXT_COLOR;
464104
- $5[6] = TITLE_COLOR;
464105
- $5[7] = collapsed;
464106
- $5[8] = plan.context;
464107
- $5[9] = plan.files;
464108
- $5[10] = plan.steps;
464109
- $5[11] = plan.title;
464110
- $5[12] = plan.verification;
464111
- $5[13] = planFile;
464112
- $5[14] = result;
464113
- $5[15] = t2;
464114
- $5[16] = t1;
464115
- $5[17] = t10;
464116
- $5[18] = t22;
464117
- $5[19] = t3;
464118
- $5[20] = t4;
464119
- $5[21] = t5;
464120
- $5[22] = t6;
464121
- $5[23] = t7;
464122
- $5[24] = t8;
464123
- $5[25] = t9;
464124
- $5[26] = verification;
464133
+ }, undefined, true, undefined, this)
464134
+ ]
464135
+ }, undefined, true, undefined, this);
464136
+ $5[85] = SECTION_COLOR;
464137
+ $5[86] = STEP_NUM_COLOR;
464138
+ $5[87] = TEXT_COLOR;
464139
+ $5[88] = context2;
464140
+ $5[89] = files.length;
464141
+ $5[90] = steps;
464142
+ $5[91] = t2.textMuted;
464143
+ $5[92] = t11;
464125
464144
  } else {
464126
- t1 = $5[16];
464127
- t10 = $5[17];
464128
- t22 = $5[18];
464129
- t3 = $5[19];
464130
- t4 = $5[20];
464131
- t5 = $5[21];
464132
- t6 = $5[22];
464133
- t7 = $5[23];
464134
- t8 = $5[24];
464135
- t9 = $5[25];
464136
- verification = $5[26];
464137
- }
464138
- if (t10 !== Symbol.for("react.early_return_sentinel")) {
464139
- return t10;
464145
+ t11 = $5[92];
464140
464146
  }
464141
- let t11;
464142
- if ($5[108] !== CHECK_COLOR || $5[109] !== SECTION_COLOR || $5[110] !== TEXT_COLOR || $5[111] !== verification) {
464143
- t11 = verification.length > 0 && /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
464147
+ let t12;
464148
+ if ($5[93] !== CHECK_COLOR || $5[94] !== SECTION_COLOR || $5[95] !== TEXT_COLOR || $5[96] !== verification) {
464149
+ t12 = verification.length > 0 && /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
464144
464150
  flexDirection: "column",
464145
464151
  paddingX: 1,
464146
464152
  marginTop: 1,
@@ -464164,45 +464170,41 @@ function StructuredPlanView(t0) {
464164
464170
  }, `v-${String(i_1)}`, true, undefined, this))
464165
464171
  ]
464166
464172
  }, undefined, true, undefined, this);
464167
- $5[108] = CHECK_COLOR;
464168
- $5[109] = SECTION_COLOR;
464169
- $5[110] = TEXT_COLOR;
464170
- $5[111] = verification;
464171
- $5[112] = t11;
464173
+ $5[93] = CHECK_COLOR;
464174
+ $5[94] = SECTION_COLOR;
464175
+ $5[95] = TEXT_COLOR;
464176
+ $5[96] = verification;
464177
+ $5[97] = t12;
464172
464178
  } else {
464173
- t11 = $5[112];
464179
+ t12 = $5[97];
464174
464180
  }
464175
- let t12;
464176
- if ($5[113] !== t1 || $5[114] !== t11 || $5[115] !== t22 || $5[116] !== t3 || $5[117] !== t4 || $5[118] !== t5 || $5[119] !== t6 || $5[120] !== t7 || $5[121] !== t8 || $5[122] !== t9) {
464177
- t12 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
464178
- flexDirection: t1,
464179
- flexShrink: t22,
464180
- border: t3,
464181
- borderStyle: t4,
464182
- borderColor: t5,
464181
+ let t13;
464182
+ if ($5[98] !== BORDER || $5[99] !== t10 || $5[100] !== t11 || $5[101] !== t12 || $5[102] !== t8 || $5[103] !== t9) {
464183
+ t13 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
464184
+ flexDirection: "column",
464185
+ flexShrink: 0,
464186
+ border: true,
464187
+ borderStyle: "rounded",
464188
+ borderColor: BORDER,
464183
464189
  children: [
464184
- t6,
464185
- t7,
464186
464190
  t8,
464187
464191
  t9,
464188
- t11
464192
+ t10,
464193
+ t11,
464194
+ t12
464189
464195
  ]
464190
464196
  }, undefined, true, undefined, this);
464191
- $5[113] = t1;
464192
- $5[114] = t11;
464193
- $5[115] = t22;
464194
- $5[116] = t3;
464195
- $5[117] = t4;
464196
- $5[118] = t5;
464197
- $5[119] = t6;
464198
- $5[120] = t7;
464199
- $5[121] = t8;
464200
- $5[122] = t9;
464201
- $5[123] = t12;
464202
- } else {
464203
- t12 = $5[123];
464197
+ $5[98] = BORDER;
464198
+ $5[99] = t10;
464199
+ $5[100] = t11;
464200
+ $5[101] = t12;
464201
+ $5[102] = t8;
464202
+ $5[103] = t9;
464203
+ $5[104] = t13;
464204
+ } else {
464205
+ t13 = $5[104];
464204
464206
  }
464205
- return t12;
464207
+ return t13;
464206
464208
  }
464207
464209
  var import_compiler_runtime14, ACTION_ICONS, MAX_VISIBLE2 = 5;
464208
464210
  var init_StructuredPlanView = __esm(async () => {
@@ -465516,6 +465518,9 @@ var init_dispatch_display = __esm(async () => {
465516
465518
  });
465517
465519
 
465518
465520
  // src/components/chat/ToolCallDisplay.tsx
465521
+ function isObj(v4) {
465522
+ return v4 != null && typeof v4 === "object" && !Array.isArray(v4);
465523
+ }
465519
465524
  function useElapsedTimers(calls) {
465520
465525
  const startTimes = import_react41.useRef(new Map);
465521
465526
  const callsRef = import_react41.useRef(calls);
@@ -465621,8 +465626,8 @@ function extractPath(args2) {
465621
465626
  function renderToolCall2(tc, seconds, diffStyle, t2, connector) {
465622
465627
  if ((tc.toolName === "write_plan" || tc.toolName === "plan") && tc.args) {
465623
465628
  try {
465624
- const plan = JSON.parse(tc.args);
465625
- if (plan.title && Array.isArray(plan.steps) && Array.isArray(plan.files)) {
465629
+ const plan = parsePlanOutput(JSON.parse(tc.args));
465630
+ if (plan) {
465626
465631
  const planContent = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(import_jsx_dev_runtime2.Fragment, {
465627
465632
  children: [
465628
465633
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(StructuredPlanView, {
@@ -465731,6 +465736,7 @@ var init_ToolCallDisplay = __esm(async () => {
465731
465736
  init_icons();
465732
465737
  init_theme();
465733
465738
  init_tool_display();
465739
+ init_plan_schema();
465734
465740
  init_shared2();
465735
465741
  init_multi_agent_display();
465736
465742
  init_jsx_dev_runtime();
@@ -466578,14 +466584,18 @@ var init_ToolCallDisplay = __esm(async () => {
466578
466584
  try {
466579
466585
  const parsed = JSON.parse(tc.args);
466580
466586
  if (Array.isArray(parsed.tasks) && parsed.tasks.length >= 1) {
466581
- const tasks = parsed.tasks.map((entry, i4) => ({
466582
- agentId: entry.id ?? entry.agentId ?? `agent-${String(i4 + 1)}`,
466583
- role: entry.role,
466584
- task: entry.task,
466585
- dependsOn: entry.dependsOn
466586
- }));
466587
+ const rawTasks = parsed.tasks;
466588
+ const tasks = rawTasks.map((entry, i4) => {
466589
+ const e = isObj(entry) ? entry : {};
466590
+ return {
466591
+ agentId: String(e.id ?? e.agentId ?? `agent-${String(i4 + 1)}`),
466592
+ role: typeof e.role === "string" ? e.role : undefined,
466593
+ task: typeof e.task === "string" ? e.task : undefined,
466594
+ dependsOn: Array.isArray(e.dependsOn) ? e.dependsOn.map(String) : undefined
466595
+ };
466596
+ });
466587
466597
  return {
466588
- totalAgents: parsed.tasks.length,
466598
+ totalAgents: rawTasks.length,
466589
466599
  tasks
466590
466600
  };
466591
466601
  }
@@ -466943,6 +466953,9 @@ var init_ToolCallDisplay = __esm(async () => {
466943
466953
 
466944
466954
  // src/components/chat/tool-formatters.ts
466945
466955
  import { resolve as resolve36 } from "path";
466956
+ function isObj2(v4) {
466957
+ return v4 != null && typeof v4 === "object" && !Array.isArray(v4);
466958
+ }
466946
466959
  function formatArgs(toolName, args2) {
466947
466960
  if (!args2)
466948
466961
  return "";
@@ -466951,7 +466964,7 @@ function formatArgs(toolName, args2) {
466951
466964
  if (toolName === "read") {
466952
466965
  const files = Array.isArray(parsed.files) ? parsed.files : parsed.files ? [parsed.files] : [];
466953
466966
  if (files.length === 0 && parsed.path)
466954
- return parsed.path;
466967
+ return String(parsed.path);
466955
466968
  if (files.length === 1) {
466956
466969
  const f3 = files[0];
466957
466970
  const hasRanges = f3.ranges && f3.ranges.length > 0;
@@ -466973,18 +466986,18 @@ function formatArgs(toolName, args2) {
466973
466986
  return "";
466974
466987
  }
466975
466988
  if (toolName === "edit_file" && parsed.path)
466976
- return parsed.path;
466989
+ return String(parsed.path);
466977
466990
  if (toolName === "multi_edit" && parsed.path)
466978
- return parsed.path;
466991
+ return String(parsed.path);
466979
466992
  if (toolName === "undo_edit" && parsed.path)
466980
- return parsed.path;
466993
+ return String(parsed.path);
466981
466994
  if (toolName === "list_dir" && parsed.path) {
466982
466995
  if (Array.isArray(parsed.path)) {
466983
- const paths = parsed.path;
466996
+ const paths = parsed.path.map(String);
466984
466997
  const label = paths.join(", ");
466985
466998
  return label.length > 60 ? `${String(paths.length)} dirs` : label;
466986
466999
  }
466987
- return parsed.path;
467000
+ return String(parsed.path);
466988
467001
  }
466989
467002
  if (toolName === "rename_file") {
466990
467003
  if (parsed.from && parsed.to) {
@@ -467002,9 +467015,9 @@ function formatArgs(toolName, args2) {
467002
467015
  return cmd.length > 60 ? `${cmd.slice(0, 57)}...` : cmd;
467003
467016
  }
467004
467017
  if (toolName === "grep" && parsed.pattern)
467005
- return `/${parsed.pattern}/`;
467018
+ return `/${String(parsed.pattern)}/`;
467006
467019
  if (toolName === "glob" && parsed.pattern)
467007
- return parsed.pattern;
467020
+ return String(parsed.pattern);
467008
467021
  if (toolName === "web_search" && parsed.query) {
467009
467022
  const q4 = String(parsed.query);
467010
467023
  return q4.length > 50 ? `${q4.slice(0, 47)}...` : q4;
@@ -467018,13 +467031,18 @@ function formatArgs(toolName, args2) {
467018
467031
  return `search: ${String(parsed.query)}`;
467019
467032
  return String(parsed.action);
467020
467033
  }
467021
- if (toolName === "dispatch" && parsed.tasks) {
467034
+ if (toolName === "dispatch" && Array.isArray(parsed.tasks)) {
467022
467035
  const tasks = parsed.tasks;
467023
- const roles = new Set(tasks.map((t2) => t2.role ?? "explore"));
467036
+ const roles = new Set(tasks.map((t2) => {
467037
+ if (isObj2(t2))
467038
+ return String(t2.role ?? "explore");
467039
+ return "explore";
467040
+ }));
467024
467041
  const roleTags = [...roles].map((r4) => `[${r4}]`).join("");
467025
467042
  if (tasks.length === 1 && tasks[0]) {
467026
- const t2 = String(tasks[0].task);
467027
- const trimmed2 = t2.length > 45 ? `${t2.slice(0, 42)}...` : t2;
467043
+ const task0 = tasks[0];
467044
+ const taskStr = isObj2(task0) ? String(task0.task ?? "") : "";
467045
+ const trimmed2 = taskStr.length > 45 ? `${taskStr.slice(0, 42)}...` : taskStr;
467028
467046
  return `${roleTags} ${trimmed2}`;
467029
467047
  }
467030
467048
  const obj = parsed.objective ? String(parsed.objective) : `${String(tasks.length)} agents`;
@@ -467171,7 +467189,7 @@ function formatResult2(toolName, result) {
467171
467189
  if (p2.repoMapHit && p2.output) {
467172
467190
  const out2 = String(p2.output);
467173
467191
  const match2 = out2.match(/indexed at ([^\s]+)/);
467174
- return match2 ? `\u2192 ${match2[1]}` : out2.slice(0, 40);
467192
+ return match2?.[1] ? `\u2192 ${match2[1]}` : out2.slice(0, 40);
467175
467193
  }
467176
467194
  if (p2.output && typeof p2.output === "string" && p2.output.startsWith("[from dispatch cache]")) {
467177
467195
  const lines2 = p2.output.split(`
@@ -467296,7 +467314,8 @@ function formatResult2(toolName, result) {
467296
467314
  if (Array.isArray(p2.reads) || Array.isArray(p2.filesEdited)) {
467297
467315
  const parts2 = [];
467298
467316
  if (Array.isArray(p2.reads)) {
467299
- const paths = new Set(p2.reads.map((r4) => r4.path));
467317
+ const reads = p2.reads;
467318
+ const paths = new Set(reads.map((r4) => isObj2(r4) ? String(r4.path) : ""));
467300
467319
  if (paths.size > 0)
467301
467320
  parts2.push(`${String(paths.size)} files read`);
467302
467321
  }
@@ -467343,7 +467362,7 @@ function formatResult2(toolName, result) {
467343
467362
  if (parsed.error)
467344
467363
  return String(parsed.error).slice(0, 50);
467345
467364
  if (parsed.branch !== undefined) {
467346
- const parts2 = [parsed.branch];
467365
+ const parts2 = [String(parsed.branch)];
467347
467366
  const counts = [];
467348
467367
  if (Array.isArray(parsed.staged) && parsed.staged.length > 0)
467349
467368
  counts.push(`${String(parsed.staged.length)} staged`);
@@ -468061,13 +468080,13 @@ function cleanErrorDetail(msg) {
468061
468080
  }
468062
468081
  function extractErrorCode(raw2) {
468063
468082
  const statusMatch = raw2.match(/\b(4\d{2}|5\d{2})\b/);
468064
- if (statusMatch)
468083
+ if (statusMatch?.[1])
468065
468084
  return statusMatch[1];
468066
468085
  const typeMatch = raw2.match(/"type"\s*:\s*"([^"]+)"/);
468067
- if (typeMatch)
468086
+ if (typeMatch?.[1])
468068
468087
  return typeMatch[1];
468069
468088
  const codeMatch = raw2.match(/\b(ECONNREFUSED|ETIMEDOUT|INTERNAL_ERROR)\b/);
468070
- if (codeMatch)
468089
+ if (codeMatch?.[1])
468071
468090
  return codeMatch[1];
468072
468091
  return null;
468073
468092
  }
@@ -468125,7 +468144,7 @@ function categorizeError(msg) {
468125
468144
  }
468126
468145
  function parseRetry(text3) {
468127
468146
  const match2 = text3.match(/^Retry (\d+\/\d+): (.+?) \[delay:(\d+)s\]$/);
468128
- if (!match2)
468147
+ if (!match2?.[1] || !match2[2] || !match2[3])
468129
468148
  return null;
468130
468149
  return {
468131
468150
  attempt: match2[1],
@@ -468718,11 +468737,7 @@ function _temp35(tc) {
468718
468737
  function parsePlanFromArgs(tc) {
468719
468738
  if (tc.name !== "write_plan" && tc.name !== "plan")
468720
468739
  return null;
468721
- const a2 = tc.args;
468722
- if (typeof a2.title === "string" && Array.isArray(a2.files) && Array.isArray(a2.steps)) {
468723
- return a2;
468724
- }
468725
- return null;
468740
+ return parsePlanOutput(tc.args);
468726
468741
  }
468727
468742
  function parsePlanResult(tc) {
468728
468743
  if (!tc.result?.output)
@@ -469328,6 +469343,7 @@ var init_MessageList = __esm(async () => {
469328
469343
  init_theme();
469329
469344
  init_tool_display();
469330
469345
  init_useElapsed();
469346
+ init_plan_schema();
469331
469347
  init_shared2();
469332
469348
  init_ReasoningBlock();
469333
469349
  init_tool_grouping();