67 lines
2.0 KiB
TypeScript
67 lines
2.0 KiB
TypeScript
// src/models/chat-session.ts
|
|
// Copyright (C) 2026 Robert Colbert <rob.colbert@openplatform.us>
|
|
// All Rights Reserved
|
|
|
|
import { Types, Schema, Document, model } from "mongoose";
|
|
|
|
import { IUser } from "./user.js";
|
|
import { IProject } from "./project.js";
|
|
|
|
export enum ChatSessionMode {
|
|
Plan = "plan", // for planning and brainstorming
|
|
Build = "build", // for building and coding
|
|
Test = "test", // for testing and debugging
|
|
Ship = "ship", // for finalizing and shipping
|
|
Develop = "dev", // for working on the Gadget Code harness itself
|
|
}
|
|
|
|
export interface IChatSessionPin {
|
|
_id?: Types.ObjectId;
|
|
content: string;
|
|
}
|
|
export const ChatSessionPinSchema = new Schema<IChatSessionPin>({
|
|
content: { type: String, required: true },
|
|
});
|
|
|
|
export interface IChatSession extends Document {
|
|
createdAt: Date;
|
|
lastMessageAt?: Date;
|
|
user: IUser | Types.ObjectId;
|
|
project: IProject | Types.ObjectId;
|
|
name: string;
|
|
mode: ChatSessionMode;
|
|
stats: {
|
|
turnCount: number;
|
|
toolCallCount: number;
|
|
inputTokens: number;
|
|
outputTokens: number;
|
|
};
|
|
pins: IChatSessionPin[];
|
|
}
|
|
export const ChatSessionSchema = new Schema<IChatSession>({
|
|
createdAt: { type: Date, default: Date.now, required: true },
|
|
lastMessageAt: { type: Date },
|
|
user: { type: Types.ObjectId, required: true, index: 1, ref: "User" },
|
|
project: { type: Types.ObjectId, required: false, index: 1, ref: "Project" },
|
|
name: { type: String, default: "New Session", required: true },
|
|
mode: {
|
|
type: String,
|
|
enum: ChatSessionMode,
|
|
default: ChatSessionMode.Build,
|
|
required: true,
|
|
},
|
|
stats: {
|
|
turnCount: { type: Number, default: 0, required: true },
|
|
toolCallCount: { type: Number, default: 0, required: true },
|
|
inputTokens: { type: Number, default: 0, required: true },
|
|
outputTokens: { type: Number, default: 0, required: true },
|
|
},
|
|
pins: { type: [ChatSessionPinSchema], default: [], required: true },
|
|
});
|
|
|
|
export const ChatSession = model<IChatSession>(
|
|
"ChatSession",
|
|
ChatSessionSchema,
|
|
);
|
|
export default ChatSession;
|