fix: switch gateway to ESM + explicit @Inject for tsx compatibility

Pi SDK is ESM-only. tsx (esbuild) doesn't emit decorator metadata,
so NestJS constructor injection fails without explicit @Inject().

- Set "type": "module" in gateway package.json
- Switch tsconfig to NodeNext module resolution
- Add @Inject(AgentService) to ChatController and ChatGateway

Tested end-to-end: REST /api/chat → Pi SDK → Anthropic → response OK.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
This commit is contained in:
2026-03-12 20:43:08 -05:00
co-authored by Claude Opus 4.6
parent c58003e5e3
commit 15352448d5
4 changed files with 7 additions and 6 deletions
+1
View File
@@ -2,6 +2,7 @@
"name": "@mosaic/gateway",
"version": "0.0.0",
"private": true,
"type": "module",
"main": "dist/main.js",
"scripts": {
"build": "tsc",
+2 -2
View File
@@ -1,4 +1,4 @@
import { Controller, Post, Body, Logger, HttpException, HttpStatus } from '@nestjs/common';
import { Controller, Post, Body, Logger, HttpException, HttpStatus, Inject } from '@nestjs/common';
import type { AgentSessionEvent } from '@mariozechner/pi-coding-agent';
import { AgentService } from '../agent/agent.service.js';
import { v4 as uuid } from 'uuid';
@@ -17,7 +17,7 @@ interface ChatResponse {
export class ChatController {
private readonly logger = new Logger(ChatController.name);
constructor(private readonly agentService: AgentService) {}
constructor(@Inject(AgentService) private readonly agentService: AgentService) {}
@Post()
async chat(@Body() body: ChatRequest): Promise<ChatResponse> {
+2 -2
View File
@@ -1,4 +1,4 @@
import { Logger } from '@nestjs/common';
import { Inject, Logger } from '@nestjs/common';
import {
WebSocketGateway,
WebSocketServer,
@@ -33,7 +33,7 @@ export class ChatGateway implements OnGatewayInit, OnGatewayConnection, OnGatewa
{ conversationId: string; cleanup: () => void }
>();
constructor(private readonly agentService: AgentService) {}
constructor(@Inject(AgentService) private readonly agentService: AgentService) {}
afterInit(): void {
this.logger.log('Chat WebSocket gateway initialized');
+2 -2
View File
@@ -5,8 +5,8 @@
"rootDir": "src",
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"module": "CommonJS",
"moduleResolution": "Node"
"module": "NodeNext",
"moduleResolution": "NodeNext"
},
"include": ["src/**/*"],
"exclude": ["node_modules", "dist"]