@hienlh/ppm 0.9.77 → 0.9.78

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/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.9.78] - 2026-04-10
4
+
5
+ ### Added
6
+ - **SDK subprocess stderr logging**: Real-time stderr output from Claude CLI subprocess is now logged to server console for debugging hangs and crashes.
7
+ - **MCP servers diagnostic log**: Log which MCP servers are being passed to SDK query.
8
+ - **Query creation log**: Log when `query()` async iterator is created to confirm subprocess started.
9
+
3
10
  ## [0.9.77] - 2026-04-10
4
11
 
5
12
  ### Fixed
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hienlh/ppm",
3
- "version": "0.9.77",
3
+ "version": "0.9.78",
4
4
  "description": "Personal Project Manager — mobile-first web IDE with AI assistance",
5
5
  "author": "hienlh",
6
6
  "license": "MIT",
@@ -723,13 +723,17 @@ export class ClaudeAgentSdkProvider implements AIProvider {
723
723
  const mcpServers = mcpConfigService.list();
724
724
  const hasMcp = Object.keys(mcpServers).length > 0;
725
725
 
726
- // Buffer subprocess stderr for crash diagnostics
726
+ // Buffer subprocess stderr for crash diagnostics + log in real-time
727
727
  let stderrBuffer = "";
728
728
  const stderrCallback = (chunk: string) => {
729
729
  stderrBuffer += chunk;
730
- // Keep only last 2KB to avoid unbounded growth
731
730
  if (stderrBuffer.length > 2048) stderrBuffer = stderrBuffer.slice(-2048);
731
+ const trimmed = chunk.trim();
732
+ if (trimmed) console.log(`[sdk] session=${sessionId} stderr: ${trimmed.slice(0, 500)}`);
732
733
  };
734
+ if (hasMcp) {
735
+ console.log(`[sdk] session=${sessionId} mcpServers: ${Object.keys(mcpServers).join(", ")}`);
736
+ }
733
737
 
734
738
  const queryOptions: Record<string, any> = {
735
739
  // On Windows, child_process.spawn("bun") fails with ENOENT — force node
@@ -786,6 +790,7 @@ export class ClaudeAgentSdkProvider implements AIProvider {
786
790
  this.streamingSessions.set(sessionId, { meta, query: initialQuery, controller: initialCtrl });
787
791
  this.activeQueries.set(sessionId, initialQuery);
788
792
  let eventSource: AsyncIterable<any> = initialQuery;
793
+ console.log(`[sdk] session=${sessionId} query() created, waiting for first SDK event...`);
789
794
 
790
795
  // Helper: close the CURRENT streaming session (not stale closure refs).
791
796
  // All retry paths must use this instead of closing captured variables directly.