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 <noreply@anthropic.com>
This commit is contained in:
2026-03-12 20:43:08 -05:00
parent c58003e5e3
commit 15352448d5
4 changed files with 7 additions and 6 deletions

View File

@@ -2,6 +2,7 @@
"name": "@mosaic/gateway",
"version": "0.0.0",
"private": true,
"type": "module",
"main": "dist/main.js",
"scripts": {
"build": "tsc",

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> {

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');

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"]