Files
code-utils/model/models.go

518 lines
19 KiB
Go
Raw Normal View History

2026-08-11 19:07:05 +08:00
// Package model 定义后端服务、SQLite 仓储和 Wails 前端之间共享的数据结构。
// 该包只描述数据,不包含数据库或系统命令逻辑,因此可被各层安全复用。
package model
type Project struct {
ID int64 `json:"id"`
Name string `json:"name"`
Path string `json:"path"`
Description string `json:"description"`
GroupID int64 `json:"groupId"`
GroupName string `json:"groupName"`
2026-08-15 17:18:00 +08:00
Icon string `json:"icon"` // 本地 dataURL不同步
2026-08-11 19:07:05 +08:00
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
Stats ProjectStats `json:"stats"`
Languages []LanguageStat `json:"languages"`
}
type ProjectInput struct {
Name string `json:"name"`
Path string `json:"path"`
Description string `json:"description"`
GroupID int64 `json:"groupId"`
}
type ProjectGroup struct {
ID int64 `json:"id"`
Name string `json:"name"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
}
type ProjectStats struct {
TotalLines int64 `json:"totalLines"`
CodeLines int64 `json:"codeLines"`
CommentLines int64 `json:"commentLines"`
BlankLines int64 `json:"blankLines"`
FileCount int64 `json:"fileCount"`
CommitCount int64 `json:"commitCount"`
AddedLines int64 `json:"addedLines"`
DeletedLines int64 `json:"deletedLines"`
ContributorCount int64 `json:"contributorCount"`
LastAnalyzed string `json:"lastAnalyzed"`
}
type LanguageStat struct {
Name string `json:"name"`
Files int64 `json:"files"`
Code int64 `json:"code"`
Comments int64 `json:"comments"`
Blanks int64 `json:"blanks"`
}
type FileEntry struct {
Path string `json:"path"`
Name string `json:"name"`
Extension string `json:"extension"`
Size int64 `json:"size"`
IsDir bool `json:"isDir"`
Parent string `json:"parent"`
}
type StructureStats struct {
Files []FileEntry `json:"files"`
TotalFiles int64 `json:"totalFiles"`
TotalDirs int64 `json:"totalDirs"`
TotalSize int64 `json:"totalSize"`
LargeFiles []FileEntry `json:"largeFiles"`
Folders []FolderStat `json:"folders"`
Extensions []ExtensionStat `json:"extensions"`
}
type FolderStat struct {
Name string `json:"name"`
Files int64 `json:"files"`
Size int64 `json:"size"`
}
type ExtensionStat struct {
Extension string `json:"extension"`
Files int64 `json:"files"`
Size int64 `json:"size"`
}
type GitCommit struct {
Hash string `json:"hash"`
Author string `json:"author"`
Email string `json:"email"`
Message string `json:"message"`
Date string `json:"date"`
Added int64 `json:"added"`
Deleted int64 `json:"deleted"`
}
type GitRef struct {
Name string `json:"name"`
Hash string `json:"hash"`
Kind string `json:"kind"`
Current bool `json:"current"`
}
type Contributor struct {
Name string `json:"name"`
Email string `json:"email"`
Commits int64 `json:"commits"`
Added int64 `json:"added"`
Deleted int64 `json:"deleted"`
}
type HeatDay struct {
2026-08-14 07:51:46 +08:00
Date string `json:"date"`
Count int64 `json:"count"`
Added int64 `json:"added"`
Deleted int64 `json:"deleted"`
}
// GitFileHotspot 记录变更最频繁的文件,用于识别高风险热点。
type GitFileHotspot struct {
Path string `json:"path"`
Changes int64 `json:"changes"`
Added int64 `json:"added"`
Deleted int64 `json:"deleted"`
2026-08-11 19:07:05 +08:00
}
type GitStats struct {
2026-08-14 07:51:46 +08:00
Available bool `json:"available"`
Error string `json:"error,omitempty"`
CurrentBranch string `json:"currentBranch"`
WorkspaceBranch string `json:"workspaceBranch"`
ViewRef string `json:"viewRef"`
CommitCount int64 `json:"commitCount"`
Added int64 `json:"added"`
Deleted int64 `json:"deleted"`
ContributorCount int64 `json:"contributorCount"`
Commits []GitCommit `json:"commits"`
Refs []GitRef `json:"refs"`
Contributors []Contributor `json:"contributors"`
Heatmap []HeatDay `json:"heatmap"`
Hotspots []GitFileHotspot `json:"hotspots"`
2026-08-11 19:07:05 +08:00
}
type GitDiagnostics struct {
Available bool `json:"available"`
ErrorCode string `json:"errorCode,omitempty"`
Detail string `json:"detail,omitempty"`
IsWSL bool `json:"isWsl"`
Distro string `json:"distro,omitempty"`
LinuxPath string `json:"linuxPath,omitempty"`
WorkspaceBranch string `json:"workspaceBranch,omitempty"`
ViewRef string `json:"viewRef,omitempty"`
RefCount int `json:"refCount"`
}
type ProjectInsights struct {
ProjectID int64 `json:"projectId"`
HealthScore int `json:"healthScore"`
GeneratedAt string `json:"generatedAt"`
Summary InsightSummary `json:"summary"`
Issues []InsightIssue `json:"issues"`
}
type InsightSummary struct {
High int `json:"high"`
Medium int `json:"medium"`
Low int `json:"low"`
TodoCount int `json:"todoCount"`
LongFiles int `json:"longFiles"`
LargeFiles int `json:"largeFiles"`
}
type InsightIssue struct {
Severity string `json:"severity"`
Type string `json:"type"`
Title string `json:"title"`
Detail string `json:"detail"`
Path string `json:"path,omitempty"`
Line int `json:"line,omitempty"`
Suggestion string `json:"suggestion"`
Evidence string `json:"evidence,omitempty"`
}
type GitFileChange struct {
Path string `json:"path"`
Status string `json:"status"`
Added int64 `json:"added"`
Deleted int64 `json:"deleted"`
}
type GitCommitDetail struct {
GitCommit
Files []GitFileChange `json:"files"`
}
type CheckoutResult struct {
Branch string `json:"branch"`
Message string `json:"message"`
}
type ExclusionRule struct {
ID int64 `json:"id"`
Pattern string `json:"pattern"`
Category string `json:"category"`
Builtin bool `json:"builtin"`
1. 后台图表多样化 API 的 /admin/overview 新增了按 AI 提供商聚合的用量(providerSeries)和云端数据构成(dataDist)。Admin.vue 概览页改用 ECharts:日活折线图、Token 堆叠柱状图(叠加调用次数折线)、AI 提供商用量饼图、云端数据构成饼图。 2. 端口监控与刷新间隔 「存为应用」不再跳转启动台,而是在本页弹出复用的 LaunchAppFormModal 表单,保存成功后弹确认框询问「留在本页 / 前往启动台」。启动台和端口监控页头都加了 RefreshIntervalPicker(仅手动 / 5 / 10 / 30 / 60 秒,默认 30 秒),选择记忆在 localStorage。 3. 团队所有者与用户详情 团队列表的所有者、用户列表的用户名都改为「头像 + 昵称 + ID」的可点击单元格,点击弹出用户详情:头像、昵称、头衔、待办/工单/笔记/团队数量、注册时间、最近活跃、拥有团队数。API 新增 GET /admin/users/:id,团队列表关联查询出 ownerNickname/ownerAvatar。 4. 项目专属排除规则 SQLite exclusion_rules 加了 project_id 列(唯一约束改为 (project_id, pattern),旧库自动重建迁移)。项目详情页「代码」标签下新增专属规则面板,可增删;扫描时全局规则 + 项目规则叠加生效。规则随项目身份上云,其它机器认领项目后自动带回。 5. 一句话 AI 生成待办/工单 待办页和工单页工具栏各嵌入一个 AI 生成输入条:一句话回车后由后端 AIGenerateTasks 调用 AI 拆解成多条草稿,弹预览框逐条勾选、可改标题/类型/优先级/日期,选归属项目后批量保存。 6. 项目云同步与认领 全局挂载了 CloudClaimModal:登录同步后发现云端有本机未落地的项目时自动弹出(同一批只打扰一次),每个项目可「选目录认领」或「忽略」;工作台横幅和个人主页可随时再打开。 统计数据按机器码推送到 stats:<机器码> 文档,只推不拉,不同电脑的扫描历史互不覆盖。 个人主页 · 云同步新增「项目云同步」区块:自动/手动模式切换(手动模式下常规同步跳过项目文档,仅点「立即同步项目」时推拉)、待认领入口、已忽略项目的恢复列表。 途中补齐了约 60 个中英双语 i18n 键,并修掉了 PortMonitor 引用但缺失的 pmSavedToast 键。
2026-08-17 09:04:53 +08:00
// ProjectID 0=全局规则;>0 仅对该项目生效(与全局规则叠加)。
ProjectID int64 `json:"projectId"`
2026-08-11 19:07:05 +08:00
}
type LogEntry struct {
ID int64 `json:"id"`
Level string `json:"level"`
Category string `json:"category"`
Message string `json:"message"`
Detail string `json:"detail"`
CreatedAt string `json:"createdAt"`
}
2026-08-14 07:51:46 +08:00
type Todo struct {
ID int64 `json:"id"`
UUID string `json:"uuid"`
Title string `json:"title"`
Content string `json:"content"`
ProjectID int64 `json:"projectId"`
ProjectName string `json:"projectName"`
DueAt string `json:"dueAt"`
Priority string `json:"priority"` // low | medium | high
Status string `json:"status"` // open | doing | done
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
History string `json:"history"` // JSON 数组:[{"status","at"}],记录每次进入某状态的时间
TeamID int64 `json:"teamId"` // >0 表示已共享给该团队
}
type Ticket struct {
ID int64 `json:"id"`
UUID string `json:"uuid"`
Title string `json:"title"`
Description string `json:"description"`
Type string `json:"type"` // feature | bug | task | improvement
ProjectID int64 `json:"projectId"`
ProjectName string `json:"projectName"`
StartAt string `json:"startAt"`
DueAt string `json:"dueAt"`
Status string `json:"status"` // open | in_progress | resolved | closed
Priority string `json:"priority"` // low | medium | high
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
History string `json:"history"` // JSON 数组:[{"status","at"}],记录每次进入某状态的时间
TeamID int64 `json:"teamId"` // >0 表示已共享给该团队
}
type Note struct {
ID int64 `json:"id"`
UUID string `json:"uuid"`
Content string `json:"content"`
UpdatedAt string `json:"updatedAt"`
}
type Message struct {
ID int64 `json:"id"`
Kind string `json:"kind"` // todo_due | ticket_due | analysis | sync | system
Title string `json:"title"`
Body string `json:"body"`
SourceType string `json:"sourceType"` // todo | ticket | project | ""
SourceID int64 `json:"sourceId"`
Read bool `json:"read"`
CreatedAt string `json:"createdAt"`
}
2026-08-11 19:07:05 +08:00
type AppSettings struct {
Theme string `json:"theme"`
Locale string `json:"locale"`
GitScope string `json:"gitScope"`
DatabasePath string `json:"databasePath"`
AutoRefresh bool `json:"autoRefresh"`
GlassOpacity int `json:"glassOpacity"`
LoadingStyle string `json:"loadingStyle"`
2026-08-14 07:51:46 +08:00
// 托盘与定时更新Phase 2
MinimizeToTray bool `json:"minimizeToTray"`
AutoUpdateEnabled bool `json:"autoUpdateEnabled"`
AutoUpdateMode string `json:"autoUpdateMode"` // daily | everyNDays | everyNHours
AutoUpdateInterval int `json:"autoUpdateInterval"` // everyNDays/everyNHours 的 N
AutoUpdateTime string `json:"autoUpdateTime"` // daily/everyNDays 的触发时刻 HH:MM
// AI 分析Phase 5
AIProvider string `json:"aiProvider"` // spark | deepseek
SparkKey string `json:"sparkKey"`
DeepSeekKey string `json:"deepSeekKey"`
2026-08-15 17:18:00 +08:00
// SyncAPIKeys 开启后 AI API Key 会加密同步到云端(密钥由登录密码派生,服务器不可解密)。
2026-08-14 07:51:46 +08:00
SyncAPIKeys bool `json:"syncApiKeys"`
// 用户头像AvatarMode 为 ""(未设置) | base64 | url | pathAvatarValue 依模式存 dataURL / 图片 URL / 本地文件路径。
AvatarMode string `json:"avatarMode"`
AvatarValue string `json:"avatarValue"`
// 内容图片存储:待办/工单 Markdown 里粘贴或插入的图片如何保存。
// base64内嵌 dataURL随内容同步到云端| path写入数据目录仅本机可见
ImageMode string `json:"imageMode"`
1. 后台图表多样化 API 的 /admin/overview 新增了按 AI 提供商聚合的用量(providerSeries)和云端数据构成(dataDist)。Admin.vue 概览页改用 ECharts:日活折线图、Token 堆叠柱状图(叠加调用次数折线)、AI 提供商用量饼图、云端数据构成饼图。 2. 端口监控与刷新间隔 「存为应用」不再跳转启动台,而是在本页弹出复用的 LaunchAppFormModal 表单,保存成功后弹确认框询问「留在本页 / 前往启动台」。启动台和端口监控页头都加了 RefreshIntervalPicker(仅手动 / 5 / 10 / 30 / 60 秒,默认 30 秒),选择记忆在 localStorage。 3. 团队所有者与用户详情 团队列表的所有者、用户列表的用户名都改为「头像 + 昵称 + ID」的可点击单元格,点击弹出用户详情:头像、昵称、头衔、待办/工单/笔记/团队数量、注册时间、最近活跃、拥有团队数。API 新增 GET /admin/users/:id,团队列表关联查询出 ownerNickname/ownerAvatar。 4. 项目专属排除规则 SQLite exclusion_rules 加了 project_id 列(唯一约束改为 (project_id, pattern),旧库自动重建迁移)。项目详情页「代码」标签下新增专属规则面板,可增删;扫描时全局规则 + 项目规则叠加生效。规则随项目身份上云,其它机器认领项目后自动带回。 5. 一句话 AI 生成待办/工单 待办页和工单页工具栏各嵌入一个 AI 生成输入条:一句话回车后由后端 AIGenerateTasks 调用 AI 拆解成多条草稿,弹预览框逐条勾选、可改标题/类型/优先级/日期,选归属项目后批量保存。 6. 项目云同步与认领 全局挂载了 CloudClaimModal:登录同步后发现云端有本机未落地的项目时自动弹出(同一批只打扰一次),每个项目可「选目录认领」或「忽略」;工作台横幅和个人主页可随时再打开。 统计数据按机器码推送到 stats:<机器码> 文档,只推不拉,不同电脑的扫描历史互不覆盖。 个人主页 · 云同步新增「项目云同步」区块:自动/手动模式切换(手动模式下常规同步跳过项目文档,仅点「立即同步项目」时推拉)、待认领入口、已忽略项目的恢复列表。 途中补齐了约 60 个中英双语 i18n 键,并修掉了 PortMonitor 引用但缺失的 pmSavedToast 键。
2026-08-17 09:04:53 +08:00
// 项目云同步模式auto登录后随每轮同步自动推拉项目清单/规则/统计)| manual仅手动触发
ProjectSyncMode string `json:"projectSyncMode"`
2026-08-14 07:51:46 +08:00
}
// AvatarPick 是选择头像图片的结果Value 为要保存的值Preview 为可直接显示的图片源。
// SearchHit 全局搜索Ctrl+K 命令面板)的一条结果。
type SearchHit struct {
Kind string `json:"kind"` // project | todo | ticket | conversation
ID int64 `json:"id"`
Title string `json:"title"`
Sub string `json:"sub"` // 路径 / 状态 / 供应商等辅助信息
Extra string `json:"extra"` // 次级状态(如优先级)
}
type AvatarPick struct {
// Mode 是选图后实际采用的存储模式base64 | urlauto 选图时由全局配置决定。
Mode string `json:"mode"`
Value string `json:"value"`
Preview string `json:"preview"`
}
// AIConversation 是一次 AI 分析会话(可绑定项目)。
type AIConversation struct {
ID int64 `json:"id"`
ProjectID int64 `json:"projectId"`
ProjectName string `json:"projectName"`
Provider string `json:"provider"`
Title string `json:"title"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
}
// AIMessage 是会话中的一条消息。
type AIMessage struct {
ID int64 `json:"id"`
ConversationID int64 `json:"conversationId"`
Role string `json:"role"` // user | assistant
Content string `json:"content"`
CreatedAt string `json:"createdAt"`
}
// AISummary 是分析完成后 AI 生成的模块介绍(按项目+模块各存最新一份)。
type AISummary struct {
ProjectID int64 `json:"projectId"`
Kind string `json:"kind"` // project | git
Content string `json:"content"`
Provider string `json:"provider"`
GeneratedAt string `json:"generatedAt"`
2026-08-11 19:07:05 +08:00
}
type Dashboard struct {
2026-08-14 07:51:46 +08:00
Projects int64 `json:"projects"`
TotalLines int64 `json:"totalLines"`
CodeLines int64 `json:"codeLines"`
CommentLines int64 `json:"commentLines"`
BlankLines int64 `json:"blankLines"`
FileCount int64 `json:"fileCount"`
Commits int64 `json:"commits"`
Contributors int64 `json:"contributors"`
Languages []LanguageStat `json:"languages"`
}
// FileStorageConfig 是全局「文件存储方式」配置:由管理员(云端账号 id=1设置
// 云端存 sync_settings 的 file_storage 行(挂在 id=1 名下),随同步分发给所有账号。
// mode=local 时图片维持本地行为mode=server 时内容图imageMode=server
// 头像选图上传到 nl-pms-api 换取 http URL远程/跨设备场景直接引用。
type FileStorageConfig struct {
Mode string `json:"mode"` // local | server
BaseURL string `json:"baseUrl"` // nl-pms-api 地址,如 http://192.168.1.10:8788
2026-08-15 17:18:00 +08:00
APIKey string `json:"apiKey"` // 已废弃;上传改用登录 JWT
2026-08-14 07:51:46 +08:00
}
// ServerFile 是 nl-pms-api 素材库中的一条文件记录(含上传者用户名与公开访问 URL
type ServerFile struct {
ID int64 `json:"id"`
Name string `json:"name"`
URL string `json:"url"`
Mime string `json:"mime"`
Size int64 `json:"size"`
UserID int64 `json:"userId"`
TeamID int64 `json:"teamId"`
Kind string `json:"kind"` // avatar | content
Username string `json:"username"`
CreatedAt string `json:"createdAt"`
}
// ServerFileList 是素材库的一页结果。
type ServerFileList struct {
Total int64 `json:"total"`
Items []ServerFile `json:"items"`
}
2026-08-15 17:18:00 +08:00
// SyncConfig 是 nl-pms-api 的 HTTP 基址配置(保存在本地 SQLite meta
2026-08-14 07:51:46 +08:00
type SyncConfig struct {
2026-08-15 17:18:00 +08:00
BaseURL string `json:"baseUrl"`
2026-08-14 07:51:46 +08:00
}
// SyncStatus 描述当前登录与同步状态,供设置页展示。
type SyncStatus struct {
Configured bool `json:"configured"`
LoggedIn bool `json:"loggedIn"`
// UserID 为云端账号 idid=1 视为管理员(可配置节日背景图等全局资源)。
UserID int64 `json:"userId"`
Username string `json:"username"`
LastSyncAt string `json:"lastSyncAt"`
Syncing bool `json:"syncing"`
Online bool `json:"online"`
LastError string `json:"lastError"`
Pushed int `json:"pushed"`
Pulled int `json:"pulled"`
// Pending 为本地待推送dirty行数用于界面徽标。
Pending int `json:"pending"`
}
// FestivalImage 是一个节日的背景配置mode 决定日历格显示自定义照片还是动态插画。
// image 在 mode=art 时仍保留,方便管理员切回图片模式无需重新上传。
type FestivalImage struct {
Mode string `json:"mode"` // photo | art
Image string `json:"image"`
}
// LogPage 是日志分页搜索的结果counts 基于当前搜索条件(忽略级别筛选)。
type LogPage struct {
Items []LogEntry `json:"items"`
Total int64 `json:"total"`
Info int64 `json:"info"`
Warning int64 `json:"warning"`
Error int64 `json:"error"`
}
// BatchSummary 是批量统计完成后的汇总事件载荷。
type BatchSummary struct {
Total int `json:"total"`
Completed int `json:"completed"`
Failed int `json:"failed"`
Cancelled int `json:"cancelled"`
Failures []string `json:"failures"`
}
// FilePreview 是文件预览接口的返回载荷。
type FilePreview struct {
Path string `json:"path"`
Name string `json:"name"`
Extension string `json:"extension"`
Size int64 `json:"size"`
Content string `json:"content"`
Lines int `json:"lines"`
Truncated bool `json:"truncated"`
Binary bool `json:"binary"`
2026-08-11 19:07:05 +08:00
}
// TaskEvent 只传递稳定消息键,具体中文或英文由前端根据当前语言即时翻译。
type TaskEvent struct {
TaskID string `json:"taskId"`
ProjectID int64 `json:"projectId"`
Stage string `json:"stage"`
Progress int `json:"progress"`
MessageKey string `json:"messageKey"`
Params map[string]any `json:"params,omitempty"`
}
2026-08-14 07:51:46 +08:00
// CloneInput 是「从 Git 克隆并添加项目」的入参。
type CloneInput struct {
URL string `json:"url"`
ParentDir string `json:"parentDir"`
Name string `json:"name"`
GroupID int64 `json:"groupId"`
Description string `json:"description"`
}
2026-08-15 17:18:00 +08:00
// LaunchCategory 是启动台一级分类(用户自定义,仅本地)。
type LaunchCategory struct {
2026-08-14 07:51:46 +08:00
ID int64 `json:"id"`
Name string `json:"name"`
2026-08-15 17:18:00 +08:00
Sort int `json:"sort"`
2026-08-14 07:51:46 +08:00
CreatedAt string `json:"createdAt"`
2026-08-15 17:18:00 +08:00
}
// LaunchApp 是启动台保存的应用(含启停命令)。
type LaunchApp struct {
ID int64 `json:"id"`
Name string `json:"name"`
Kind string `json:"kind"`
Port int `json:"port"`
Dir string `json:"dir"`
StartCmd string `json:"startCmd"`
StopCmd string `json:"stopCmd"`
LastPID int64 `json:"lastPid"`
Icon string `json:"icon"` // dataURL本地抓取或用户选图
CategoryID int64 `json:"categoryId"` // 一级分类 id0=未归类
Category string `json:"category"` // 二级分类(自由文本)
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
2026-08-14 07:51:46 +08:00
}
// LaunchEntry 是启动台卡片条目:保存的应用与实时扫描到的监听进程合并后的视图。
type LaunchEntry struct {
2026-08-15 17:18:00 +08:00
ID int64 `json:"id"` // launch_apps id0 表示未保存的扫描条目
Name string `json:"name"`
Kind string `json:"kind"`
Port int `json:"port"`
Dir string `json:"dir"`
StartCmd string `json:"startCmd"`
StopCmd string `json:"stopCmd"`
Running bool `json:"running"`
PID int32 `json:"pid"`
Exe string `json:"exe"`
Cmdline string `json:"cmdline"`
Ports []int `json:"ports"`
CPU float64 `json:"cpu"` // 占全机 CPU 百分比
MemMB float64 `json:"memMB"` // 常驻内存
IOKBs float64 `json:"ioKBs"` // 磁盘读写吞吐
ProjectID int64 `json:"projectId"` // 若目录匹配到「我的项目」则带上
Icon string `json:"icon"` // dataURL
CategoryID int64 `json:"categoryId"` // 一级分类
Category string `json:"category"` // 二级分类
// Status: starting | running | stopped | failed内存态失败会标红
Status string `json:"status"`
LastError string `json:"lastError"`
LastLog string `json:"lastLog"`
}
// LaunchLogLine 启动台本地进程日志行(不同步)。
type LaunchLogLine struct {
ID int64 `json:"id"`
AppID int64 `json:"appId"`
Level string `json:"level"`
Line string `json:"line"`
CreatedAt string `json:"createdAt"`
2026-08-14 07:51:46 +08:00
}
// LaunchSuggest 是按项目种类推荐的启停命令。
type LaunchSuggest struct {
Start []string `json:"start"`
Stop []string `json:"stop"`
}
2026-08-15 17:18:00 +08:00
// LaunchProfile 根据目录/项目探测出的启动草稿(种类、推荐命令、默认端口)。
type LaunchProfile struct {
Name string `json:"name"`
Kind string `json:"kind"`
Port int `json:"port"`
Dir string `json:"dir"`
StartCmd string `json:"startCmd"`
StopCmd string `json:"stopCmd"`
Start []string `json:"start"`
Stop []string `json:"stop"`
ProjectID int64 `json:"projectId"`
}