Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1,185 changes: 690 additions & 495 deletions build/api/index.js

Large diffs are not rendered by default.

5 changes: 4 additions & 1 deletion build/api/src/api.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ import type { FindingsQueryPort } from './application/ports/agent_findings_ports
import type { BugbotScmPorts } from './application/ports/bugbot_scm_ports';
import type { BugbotTelemetryPort } from './application/ports/bugbot_telemetry_ports';
import type { BugbotReviewConfiguration } from './domain/bugbot/review_configuration';
import type { MessageCatalogResolutionPort } from './application/ports/message_catalog_ports';
export type { MessageCatalogResolutionPort } from './application/ports/message_catalog_ports';
/** Already-bound SCM authority for exactly one repository. */
export interface BugbotScmGateway extends BugbotScmPorts {
readonly repository: {
Expand Down Expand Up @@ -41,14 +43,15 @@ export interface BugbotReviewRequest {
readonly commentLimit?: number;
readonly authenticatedUser?: string;
readonly locale?: {
readonly issue?: string;
readonly pullRequest?: string;
};
}
/** Provider-neutral programmatic entry point. Consumers supply agent and SCM adapters. */
export declare class BugbotReviewService {
private readonly useCase;
private readonly repository;
constructor(agent: FindingsQueryPort, scm: BugbotScmGateway);
constructor(agent: FindingsQueryPort, scm: BugbotScmGateway, catalogResolver?: MessageCatalogResolutionPort);
review(request: BugbotReviewRequest): Promise<readonly Result[]>;
}
export { evaluateBugbotFindings, evaluateBugbotQualityGate } from './tooling/bugbot_quality_eval';
Expand Down
17 changes: 17 additions & 0 deletions build/api/src/application/ports/message_catalog_ports.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import type { AgentConfiguration } from '../../domain/agent';
import type { CatalogMessage, MessageCatalogDefinition, ResolvedMessageCatalog, CatalogResolutionObservation } from '../../domain/message_catalog';
export interface MessageCatalogResolutionRequest<Id extends string> {
readonly targetLocale: string;
readonly ids: readonly Id[];
readonly sourceCatalog: MessageCatalogDefinition<Id>;
readonly bundledCatalogs: readonly MessageCatalogDefinition<Id>[];
readonly configuration?: Readonly<AgentConfiguration>;
}
export interface MessageCatalogResolutionPort {
resolve<Id extends string>(request: MessageCatalogResolutionRequest<Id>): Promise<ResolvedMessageCatalog<Id>>;
observations?(): readonly CatalogResolutionObservation[];
}
export interface DynamicMessageCatalogResponse<Id extends string> {
readonly targetLocale: string;
readonly messages: Readonly<Record<Id, CatalogMessage>>;
}
35 changes: 35 additions & 0 deletions build/api/src/domain/message_catalog.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
export declare const MESSAGE_CATALOG_VERSION = "1";
export type CatalogResolutionSource = 'exact' | 'base' | 'dynamic' | 'fallback';
export type CatalogFallbackReason = 'dynamic-provider-unavailable' | 'dynamic-response-invalid' | 'dynamic-request-failed';
export declare const CATALOG_PLURAL_CATEGORIES: readonly ["zero", "one", "two", "few", "many", "other"];
export type CatalogPluralCategory = typeof CATALOG_PLURAL_CATEGORIES[number];
export type CatalogPluralMessage = Readonly<Partial<Record<CatalogPluralCategory, string>> & {
readonly other: string;
}>;
export type CatalogMessage = string | CatalogPluralMessage;
export interface MessageCatalogDefinition<Id extends string = string> {
readonly version: string;
readonly locale: string;
readonly compatibleBaseLanguage: string;
readonly messages: Readonly<Record<Id, CatalogMessage>>;
}
export interface ResolvedMessageCatalog<Id extends string = string> {
readonly requestedLocale: string;
readonly resolvedLocale: string;
readonly source: CatalogResolutionSource;
readonly messages: Readonly<Record<Id, CatalogMessage>>;
readonly fallbackReason?: CatalogFallbackReason;
}
export interface CatalogResolutionObservation {
readonly requestedLocale: string;
readonly resolvedLocale: string;
readonly source: CatalogResolutionSource;
readonly descriptorCount: number;
readonly fallbackReason?: CatalogFallbackReason;
}
export declare function selectBundledMessageCatalog<Id extends string>(requestedValue: string, catalogs: readonly MessageCatalogDefinition<Id>[]): ResolvedMessageCatalog<Id> | undefined;
export declare function validateCatalogDefinition<Id extends string>(catalog: MessageCatalogDefinition<Id>, requiredIds: readonly Id[]): readonly string[];
export declare function validateDynamicCatalogMessages<Id extends string>(value: unknown, sourceMessages: Readonly<Record<Id, CatalogMessage>>, requiredIds: readonly Id[], targetLocale?: string): value is Readonly<Record<Id, CatalogMessage>>;
export declare function renderCatalogMessage(message: CatalogMessage, variables?: Readonly<Record<string, string | number>>, locale?: string, count?: number): string;
export declare function catalogPlaceholders(message: CatalogMessage): readonly string[];
export declare function catalogPluralCategories(locale: string): readonly CatalogPluralCategory[];
Loading