78 lines
2.0 KiB
TypeScript
78 lines
2.0 KiB
TypeScript
import type { ProjectAgentResponsibility, ProjectType } from './project-config';
|
|
import type { ConversationModelState } from './coding-conversation-contracts';
|
|
|
|
export interface CodingProjectSummary {
|
|
id: string;
|
|
name: string;
|
|
createdAt: string;
|
|
updatedAt: string;
|
|
lastOpenedAt: string;
|
|
}
|
|
|
|
export type ProjectIdentityChoice =
|
|
| { kind: 'create' }
|
|
| { kind: 'bind'; projectId: string };
|
|
|
|
export interface CodingProjectAgent extends ConversationModelState {
|
|
id: string;
|
|
avatarId: string;
|
|
avatarDataUrl?: string;
|
|
roleName: string;
|
|
name: string;
|
|
builtIn: boolean;
|
|
enabled: boolean;
|
|
skillIds: string[];
|
|
responsibility: ProjectAgentResponsibility;
|
|
prompt: string;
|
|
archivedAt: string | null;
|
|
pinned: boolean;
|
|
createdAt: string;
|
|
updatedAt: string;
|
|
}
|
|
|
|
export interface CodingProjectConfig {
|
|
schemaVersion: 2;
|
|
projectType: ProjectType;
|
|
projectId?: string;
|
|
initialized: boolean;
|
|
agents: CodingProjectAgent[];
|
|
knowledgeDirectory: 'knowledge';
|
|
createdAt: string;
|
|
updatedAt: string;
|
|
}
|
|
|
|
export interface CodingConversationMetadata extends ConversationModelState {
|
|
id: string;
|
|
agentId: string;
|
|
title: string;
|
|
archivedAt: string | null;
|
|
unread: boolean;
|
|
createdAt: string;
|
|
updatedAt: string;
|
|
}
|
|
|
|
export interface CodingProjectConfigSnapshot {
|
|
project: CodingProjectSummary;
|
|
config: CodingProjectConfig;
|
|
knowledgeFiles: string[];
|
|
}
|
|
|
|
export function isCodingProjectAgentReady(agent: CodingProjectAgent): boolean {
|
|
return agent.enabled
|
|
&& agent.archivedAt === null
|
|
&& agent.name.trim().length > 0
|
|
&& agent.avatarId.trim().length > 0
|
|
&& agent.roleName.trim().length > 0
|
|
&& agent.responsibility.mission.trim().length > 0
|
|
&& agent.modelResolution === 'resolved'
|
|
&& agent.model !== null;
|
|
}
|
|
|
|
export function hasReadyCodingProjectAgent(config: CodingProjectConfig): boolean {
|
|
return config.agents.some(isCodingProjectAgentReady);
|
|
}
|
|
|
|
export function isCodingProjectConversationReady(config: CodingProjectConfig): boolean {
|
|
return config.initialized && hasReadyCodingProjectAgent(config);
|
|
}
|