Co-Authored-By: Claude Opus 4.8 <[email protected]> Claude-Session: https://claude.ai/code/session_01ESFAnh2t9HmLwng8oW95St
38 lines
1.7 KiB
TypeScript
38 lines
1.7 KiB
TypeScript
import { Module } from '@nestjs/common';
|
|
import { HarnessRegistry } from './harness.registry.js';
|
|
import { HarnessService } from './harness.service.js';
|
|
import {
|
|
HARNESS_CONVERSATION_SERVICE,
|
|
HARNESS_CONVERSATION_SERVICE_UNAVAILABLE,
|
|
HARNESS_REGISTRY,
|
|
HARNESS_SERVICE,
|
|
} from './harness.tokens.js';
|
|
import { HarnessController } from './harness.controller.js';
|
|
import { HarnessSelectionController } from './harness-selection.controller.js';
|
|
import { HarnessSelectionService } from './harness-selection.service.js';
|
|
import { HarnessSelectionRepository } from './harness-selection.repository.js';
|
|
|
|
/**
|
|
* Wires the harness-neutral registry/service (Task Two) together with the
|
|
* Slice-Zero catalog and selection HTTP surfaces (Task Three).
|
|
*
|
|
* The registry is provided empty here; real harness adapters are registered in a
|
|
* later task. Because the controllers/services resolve their collaborators through
|
|
* this real module graph, an unresolved provider fails loudly at `app.init()`.
|
|
*/
|
|
@Module({
|
|
controllers: [HarnessController, HarnessSelectionController],
|
|
providers: [
|
|
{ provide: HARNESS_REGISTRY, useFactory: () => new HarnessRegistry() },
|
|
{ provide: HARNESS_SERVICE, useClass: HarnessService },
|
|
// Task Five: bind the conversation-service token to its explicit "not yet bound"
|
|
// sentinel. The pi-rpc router treats this as a hard, typed startup failure; Task 14
|
|
// replaces it with a real service. Exported so ChatModule's router can inject it.
|
|
{ provide: HARNESS_CONVERSATION_SERVICE, useValue: HARNESS_CONVERSATION_SERVICE_UNAVAILABLE },
|
|
HarnessSelectionRepository,
|
|
HarnessSelectionService,
|
|
],
|
|
exports: [HARNESS_REGISTRY, HARNESS_SERVICE, HARNESS_CONVERSATION_SERVICE],
|
|
})
|
|
export class HarnessModule {}
|