lsd-pi 1.3.9 → 1.3.10

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 (46) hide show
  1. package/dist/resources/extensions/mcp-client/index.js +191 -83
  2. package/dist/resources/extensions/mcp-client/mcp-manager-component.js +220 -0
  3. package/dist/resources/extensions/slash-commands/plan.js +67 -13
  4. package/dist/resources/extensions/subagent/agents.js +7 -0
  5. package/dist/resources/extensions/subagent/index.js +25 -8
  6. package/dist/resources/extensions/subagent/model-resolution.js +1 -0
  7. package/package.json +1 -1
  8. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-summary-line.test.js +104 -2
  9. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-summary-line.test.js.map +1 -1
  10. package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.d.ts +39 -2
  11. package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  12. package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.js +135 -18
  13. package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.js.map +1 -1
  14. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-summary-line.d.ts +21 -2
  15. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-summary-line.d.ts.map +1 -1
  16. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-summary-line.js +146 -8
  17. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-summary-line.js.map +1 -1
  18. package/packages/pi-coding-agent/dist/modes/interactive/controllers/__tests__/chat-controller.collapsed-tool-summary.test.js +51 -13
  19. package/packages/pi-coding-agent/dist/modes/interactive/controllers/__tests__/chat-controller.collapsed-tool-summary.test.js.map +1 -1
  20. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  21. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +75 -4
  22. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  23. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.d.ts +4 -0
  24. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.d.ts.map +1 -1
  25. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.js.map +1 -1
  26. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +4 -0
  27. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  28. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +31 -2
  29. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  30. package/packages/pi-coding-agent/package.json +1 -1
  31. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/tool-summary-line.test.ts +129 -2
  32. package/packages/pi-coding-agent/src/modes/interactive/components/assistant-message.ts +158 -18
  33. package/packages/pi-coding-agent/src/modes/interactive/components/tool-summary-line.ts +163 -9
  34. package/packages/pi-coding-agent/src/modes/interactive/controllers/__tests__/chat-controller.collapsed-tool-summary.test.ts +60 -13
  35. package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +86 -5
  36. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode-state.ts +1 -0
  37. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +31 -2
  38. package/pkg/package.json +1 -1
  39. package/src/resources/extensions/mcp-client/index.ts +212 -90
  40. package/src/resources/extensions/mcp-client/mcp-manager-component.ts +256 -0
  41. package/src/resources/extensions/mcp-client/tests/mcp-manager-component.test.ts +141 -0
  42. package/src/resources/extensions/mcp-client/tests/server-name-spaces.test.ts +18 -2
  43. package/src/resources/extensions/slash-commands/plan.ts +70 -13
  44. package/src/resources/extensions/subagent/agents.ts +9 -0
  45. package/src/resources/extensions/subagent/index.ts +30 -8
  46. package/src/resources/extensions/subagent/model-resolution.ts +1 -0
@@ -492,6 +492,10 @@ interface SubagentDetails {
492
492
  agentScope: AgentScope;
493
493
  projectAgentsDir: string | null;
494
494
  results: SingleResult[];
495
+ /** Total planned steps for chain mode (undefined for single/parallel). */
496
+ totalChainSteps?: number;
497
+ /** Currently executing chain step (1-indexed, undefined if chain completed). */
498
+ currentChainStep?: number;
495
499
  }
496
500
 
497
501
  function getFinalOutput(messages: Message[]): string {
@@ -1254,11 +1258,13 @@ export default function(pi: ExtensionAPI) {
1254
1258
 
1255
1259
  const makeDetails =
1256
1260
  (mode: "single" | "parallel" | "chain") =>
1257
- (results: SingleResult[]): SubagentDetails => ({
1261
+ (results: SingleResult[], opts?: { totalSteps?: number; currentStep?: number }): SubagentDetails => ({
1258
1262
  mode,
1259
1263
  agentScope,
1260
1264
  projectAgentsDir: discovery.projectAgentsDir,
1261
1265
  results,
1266
+ totalChainSteps: opts?.totalSteps,
1267
+ currentChainStep: opts?.currentStep,
1262
1268
  });
1263
1269
 
1264
1270
  const trackInProcessDepth = (
@@ -1362,7 +1368,8 @@ export default function(pi: ExtensionAPI) {
1362
1368
  const step = params.chain[i];
1363
1369
  const taskWithContext = step.task.replace(/\{previous\}/g, previousOutput);
1364
1370
 
1365
- // Create update callback that includes all previous results
1371
+ // Create update callback that includes all previous results + chain progress
1372
+ const chainTotalSteps = params.chain.length;
1366
1373
  const chainUpdate: OnUpdateCallback | undefined = onUpdate
1367
1374
  ? (partial) => {
1368
1375
  // Combine completed results with current streaming result
@@ -1371,7 +1378,10 @@ export default function(pi: ExtensionAPI) {
1371
1378
  const allResults = [...results, currentResult];
1372
1379
  onUpdate({
1373
1380
  content: partial.content,
1374
- details: makeDetails("chain")(allResults),
1381
+ details: makeDetails("chain")(allResults, {
1382
+ totalSteps: chainTotalSteps,
1383
+ currentStep: i + 1,
1384
+ }),
1375
1385
  });
1376
1386
  }
1377
1387
  }
@@ -1425,7 +1435,7 @@ export default function(pi: ExtensionAPI) {
1425
1435
  result.errorMessage || result.stderr || getFinalOutput(result.messages) || "(no output)";
1426
1436
  return {
1427
1437
  content: [{ type: "text", text: `Chain stopped at step ${i + 1} (${step.agent}): ${errorMsg}` }],
1428
- details: makeDetails("chain")(results),
1438
+ details: makeDetails("chain")(results, { totalSteps: params.chain.length }),
1429
1439
  isError: true,
1430
1440
  };
1431
1441
  }
@@ -1433,7 +1443,7 @@ export default function(pi: ExtensionAPI) {
1433
1443
  }
1434
1444
  return {
1435
1445
  content: [{ type: "text", text: getFinalOutput(results[results.length - 1].messages) || "(no output)" }],
1436
- details: makeDetails("chain")(results),
1446
+ details: makeDetails("chain")(results, { totalSteps: params.chain.length }),
1437
1447
  };
1438
1448
  }
1439
1449
 
@@ -2109,7 +2119,19 @@ export default function(pi: ExtensionAPI) {
2109
2119
 
2110
2120
  if (details.mode === "chain") {
2111
2121
  const successCount = details.results.filter((r) => r.exitCode === 0).length;
2112
- const icon = successCount === details.results.length ? theme.fg("success", "✓") : theme.fg("error", "✗");
2122
+ const isRunning = details.currentChainStep != null;
2123
+ const icon = !isRunning && successCount === details.results.length
2124
+ ? theme.fg("success", "✓")
2125
+ : isRunning
2126
+ ? theme.fg("accent", "◉")
2127
+ : theme.fg("error", "✗");
2128
+
2129
+ const totalLabel = details.totalChainSteps != null
2130
+ ? `${details.results.length}/${details.totalChainSteps} steps`
2131
+ : `${details.results.length} steps`;
2132
+ const progressLabel = isRunning
2133
+ ? ` (step ${details.currentChainStep} running)`
2134
+ : "";
2113
2135
 
2114
2136
  if (expanded) {
2115
2137
  const container = new Container();
@@ -2118,7 +2140,7 @@ export default function(pi: ExtensionAPI) {
2118
2140
  icon +
2119
2141
  " " +
2120
2142
  theme.fg("toolTitle", theme.bold("chain ")) +
2121
- theme.fg("accent", `${successCount}/${details.results.length} steps`),
2143
+ theme.fg("accent", `${totalLabel}${progressLabel}`),
2122
2144
  0,
2123
2145
  0,
2124
2146
  ),
@@ -2175,7 +2197,7 @@ export default function(pi: ExtensionAPI) {
2175
2197
  icon +
2176
2198
  " " +
2177
2199
  theme.fg("toolTitle", theme.bold("chain ")) +
2178
- theme.fg("accent", `${successCount}/${details.results.length} steps`);
2200
+ theme.fg("accent", `${totalLabel}${progressLabel}`);
2179
2201
  for (const r of details.results) {
2180
2202
  const rIcon = r.exitCode === 0 ? theme.fg("success", "✓") : theme.fg("error", "✗");
2181
2203
  const displayItems = getDisplayItems(r.messages);
@@ -21,6 +21,7 @@ const BARE_MODEL_PROVIDER_RULES: Array<{ provider: string; matches: (modelId: st
21
21
  matches: (modelId) => /^(mistral-|ministral-|codestral-)/.test(modelId),
22
22
  },
23
23
  { provider: "groq", matches: (modelId) => modelId.startsWith("llama-") || modelId.startsWith("mixtral-") },
24
+ { provider: "zhipu", matches: (modelId) => modelId.startsWith("glm-") },
24
25
  ];
25
26
 
26
27
  export function inferProviderForBareModel(modelId: string): string | undefined {