bingocode 1.0.1 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (187) hide show
  1. package/bin/bingo-win.cjs +34 -3
  2. package/desktop/README.md +30 -0
  3. package/desktop/bunfig.toml +1 -0
  4. package/desktop/index.html +17 -0
  5. package/desktop/package.json +55 -0
  6. package/desktop/pnpm-lock.yaml +3832 -0
  7. package/desktop/public/app-icon.jpg +0 -0
  8. package/desktop/public/fonts/inter-latin-ext.woff2 +0 -0
  9. package/desktop/public/fonts/inter-latin.woff2 +0 -0
  10. package/desktop/public/fonts/jetbrains-mono-latin-ext.woff2 +0 -0
  11. package/desktop/public/fonts/jetbrains-mono-latin.woff2 +0 -0
  12. package/desktop/public/fonts/manrope-latin-ext.woff2 +0 -0
  13. package/desktop/public/fonts/manrope-latin.woff2 +0 -0
  14. package/desktop/public/fonts/material-symbols-outlined.woff2 +0 -0
  15. package/desktop/public/icons/bilibili.svg +1 -0
  16. package/desktop/public/icons/douyin.svg +1 -0
  17. package/desktop/public/icons/github.svg +3 -0
  18. package/desktop/public/icons/xiaohongshu.svg +1 -0
  19. package/desktop/scripts/build-macos-arm64.sh +270 -0
  20. package/desktop/scripts/build-sidecars.ts +183 -0
  21. package/desktop/scripts/build-windows-x64.ps1 +295 -0
  22. package/desktop/scripts/scan-missing-imports.ts +235 -0
  23. package/desktop/sidecars/claude-sidecar.ts +156 -0
  24. package/desktop/src/App.tsx +5 -0
  25. package/desktop/src/__tests__/agentsSettings.test.tsx +349 -0
  26. package/desktop/src/__tests__/pages.test.tsx +290 -0
  27. package/desktop/src/__tests__/skillsSettings.test.tsx +205 -0
  28. package/desktop/src/api/adapters.ts +12 -0
  29. package/desktop/src/api/agents.ts +36 -0
  30. package/desktop/src/api/cliTasks.ts +28 -0
  31. package/desktop/src/api/client.ts +63 -0
  32. package/desktop/src/api/computerUse.ts +76 -0
  33. package/desktop/src/api/filesystem.ts +30 -0
  34. package/desktop/src/api/hahaOAuth.ts +38 -0
  35. package/desktop/src/api/models.ts +28 -0
  36. package/desktop/src/api/providers.ts +63 -0
  37. package/desktop/src/api/search.ts +29 -0
  38. package/desktop/src/api/sessions.ts +56 -0
  39. package/desktop/src/api/settings.ts +20 -0
  40. package/desktop/src/api/skills.ts +19 -0
  41. package/desktop/src/api/tasks.ts +36 -0
  42. package/desktop/src/api/teams.ts +44 -0
  43. package/desktop/src/api/websocket.ts +164 -0
  44. package/desktop/src/components/chat/AskUserQuestion.tsx +268 -0
  45. package/desktop/src/components/chat/AssistantMessage.tsx +29 -0
  46. package/desktop/src/components/chat/AttachmentGallery.tsx +113 -0
  47. package/desktop/src/components/chat/ChatInput.tsx +622 -0
  48. package/desktop/src/components/chat/CodeViewer.tsx +161 -0
  49. package/desktop/src/components/chat/ComputerUsePermissionModal.test.tsx +174 -0
  50. package/desktop/src/components/chat/ComputerUsePermissionModal.tsx +311 -0
  51. package/desktop/src/components/chat/DiffViewer.tsx +157 -0
  52. package/desktop/src/components/chat/FileSearchMenu.tsx +198 -0
  53. package/desktop/src/components/chat/ImageGalleryModal.tsx +91 -0
  54. package/desktop/src/components/chat/InlineImageGallery.tsx +106 -0
  55. package/desktop/src/components/chat/InlineTaskSummary.tsx +60 -0
  56. package/desktop/src/components/chat/MermaidRenderer.test.tsx +98 -0
  57. package/desktop/src/components/chat/MermaidRenderer.tsx +361 -0
  58. package/desktop/src/components/chat/MessageActionBar.tsx +27 -0
  59. package/desktop/src/components/chat/MessageList.test.tsx +313 -0
  60. package/desktop/src/components/chat/MessageList.tsx +249 -0
  61. package/desktop/src/components/chat/PermissionDialog.tsx +262 -0
  62. package/desktop/src/components/chat/SessionTaskBar.test.tsx +99 -0
  63. package/desktop/src/components/chat/SessionTaskBar.tsx +159 -0
  64. package/desktop/src/components/chat/StreamingIndicator.tsx +41 -0
  65. package/desktop/src/components/chat/TerminalChrome.tsx +35 -0
  66. package/desktop/src/components/chat/ThinkingBlock.tsx +87 -0
  67. package/desktop/src/components/chat/ToolCallBlock.tsx +247 -0
  68. package/desktop/src/components/chat/ToolCallGroup.tsx +617 -0
  69. package/desktop/src/components/chat/ToolResultBlock.tsx +107 -0
  70. package/desktop/src/components/chat/UserMessage.tsx +38 -0
  71. package/desktop/src/components/chat/chatBlocks.test.tsx +136 -0
  72. package/desktop/src/components/chat/clipboard.ts +25 -0
  73. package/desktop/src/components/chat/composerUtils.test.ts +55 -0
  74. package/desktop/src/components/chat/composerUtils.ts +149 -0
  75. package/desktop/src/components/controls/ModelSelector.tsx +156 -0
  76. package/desktop/src/components/controls/PermissionModeSelector.tsx +229 -0
  77. package/desktop/src/components/layout/AppShell.tsx +107 -0
  78. package/desktop/src/components/layout/ContentRouter.tsx +27 -0
  79. package/desktop/src/components/layout/ProjectFilter.tsx +126 -0
  80. package/desktop/src/components/layout/Sidebar.test.tsx +158 -0
  81. package/desktop/src/components/layout/Sidebar.tsx +384 -0
  82. package/desktop/src/components/layout/StatusBar.tsx +31 -0
  83. package/desktop/src/components/layout/TabBar.test.tsx +136 -0
  84. package/desktop/src/components/layout/TabBar.tsx +318 -0
  85. package/desktop/src/components/layout/TitleBar.tsx +96 -0
  86. package/desktop/src/components/layout/WindowControls.test.tsx +69 -0
  87. package/desktop/src/components/layout/WindowControls.tsx +89 -0
  88. package/desktop/src/components/markdown/MarkdownRenderer.test.tsx +100 -0
  89. package/desktop/src/components/markdown/MarkdownRenderer.tsx +229 -0
  90. package/desktop/src/components/settings/ClaudeOfficialLogin.tsx +107 -0
  91. package/desktop/src/components/shared/Button.tsx +63 -0
  92. package/desktop/src/components/shared/CopyButton.tsx +58 -0
  93. package/desktop/src/components/shared/DirectoryPicker.tsx +316 -0
  94. package/desktop/src/components/shared/Dropdown.tsx +91 -0
  95. package/desktop/src/components/shared/Input.tsx +38 -0
  96. package/desktop/src/components/shared/Modal.tsx +65 -0
  97. package/desktop/src/components/shared/ProjectContextChip.tsx +30 -0
  98. package/desktop/src/components/shared/Spinner.tsx +30 -0
  99. package/desktop/src/components/shared/Textarea.tsx +38 -0
  100. package/desktop/src/components/shared/Toast.tsx +47 -0
  101. package/desktop/src/components/shared/UpdateChecker.tsx +90 -0
  102. package/desktop/src/components/skills/SkillDetail.test.tsx +89 -0
  103. package/desktop/src/components/skills/SkillDetail.tsx +403 -0
  104. package/desktop/src/components/skills/SkillList.tsx +254 -0
  105. package/desktop/src/components/tasks/DayOfWeekPicker.tsx +57 -0
  106. package/desktop/src/components/tasks/NewTaskModal.tsx +407 -0
  107. package/desktop/src/components/tasks/PromptEditor.tsx +74 -0
  108. package/desktop/src/components/tasks/TaskEmptyState.tsx +30 -0
  109. package/desktop/src/components/tasks/TaskList.tsx +46 -0
  110. package/desktop/src/components/tasks/TaskRow.tsx +253 -0
  111. package/desktop/src/components/tasks/TaskRunsPanel.tsx +195 -0
  112. package/desktop/src/components/teams/TeamStatusBar.tsx +147 -0
  113. package/desktop/src/config/providerPresets.ts +78 -0
  114. package/desktop/src/config/spinnerVerbs.ts +193 -0
  115. package/desktop/src/hooks/useKeyboardShortcuts.ts +60 -0
  116. package/desktop/src/i18n/index.ts +54 -0
  117. package/desktop/src/i18n/locales/en.ts +670 -0
  118. package/desktop/src/i18n/locales/zh.ts +670 -0
  119. package/desktop/src/lib/__tests__/cronDescribe.test.ts +93 -0
  120. package/desktop/src/lib/cronDescribe.ts +188 -0
  121. package/desktop/src/lib/desktopRuntime.ts +54 -0
  122. package/desktop/src/lib/parseRunOutput.ts +79 -0
  123. package/desktop/src/main.tsx +13 -0
  124. package/desktop/src/mocks/data.ts +202 -0
  125. package/desktop/src/pages/ActiveSession.test.tsx +181 -0
  126. package/desktop/src/pages/ActiveSession.tsx +219 -0
  127. package/desktop/src/pages/AdapterSettings.tsx +375 -0
  128. package/desktop/src/pages/AgentTeams.tsx +200 -0
  129. package/desktop/src/pages/ComputerUseSettings.tsx +420 -0
  130. package/desktop/src/pages/EmptySession.tsx +518 -0
  131. package/desktop/src/pages/NewTaskModal.tsx +346 -0
  132. package/desktop/src/pages/ScheduledTasks.tsx +66 -0
  133. package/desktop/src/pages/ScheduledTasksEmpty.tsx +152 -0
  134. package/desktop/src/pages/ScheduledTasksList.tsx +416 -0
  135. package/desktop/src/pages/SessionControls.tsx +460 -0
  136. package/desktop/src/pages/Settings.tsx +1448 -0
  137. package/desktop/src/pages/ToolInspection.tsx +235 -0
  138. package/desktop/src/stores/adapterStore.ts +106 -0
  139. package/desktop/src/stores/agentStore.ts +34 -0
  140. package/desktop/src/stores/chatStore.test.ts +505 -0
  141. package/desktop/src/stores/chatStore.ts +850 -0
  142. package/desktop/src/stores/cliTaskStore.ts +152 -0
  143. package/desktop/src/stores/hahaOAuthStore.test.ts +77 -0
  144. package/desktop/src/stores/hahaOAuthStore.ts +97 -0
  145. package/desktop/src/stores/providerStore.ts +101 -0
  146. package/desktop/src/stores/sessionStore.test.ts +63 -0
  147. package/desktop/src/stores/sessionStore.ts +102 -0
  148. package/desktop/src/stores/settingsStore.ts +120 -0
  149. package/desktop/src/stores/skillStore.ts +51 -0
  150. package/desktop/src/stores/tabStore.ts +169 -0
  151. package/desktop/src/stores/taskStore.ts +68 -0
  152. package/desktop/src/stores/teamStore.ts +344 -0
  153. package/desktop/src/stores/uiStore.ts +100 -0
  154. package/desktop/src/stores/updateStore.test.ts +71 -0
  155. package/desktop/src/stores/updateStore.ts +221 -0
  156. package/desktop/src/theme/globals.css +465 -0
  157. package/desktop/src/types/adapter.ts +33 -0
  158. package/desktop/src/types/chat.ts +152 -0
  159. package/desktop/src/types/cliTask.ts +24 -0
  160. package/desktop/src/types/provider.ts +62 -0
  161. package/desktop/src/types/session.ts +27 -0
  162. package/desktop/src/types/settings.ts +22 -0
  163. package/desktop/src/types/skill.ts +38 -0
  164. package/desktop/src/types/task.ts +56 -0
  165. package/desktop/src/types/team.ts +38 -0
  166. package/desktop/src-tauri/Cargo.lock +5549 -0
  167. package/desktop/src-tauri/Cargo.toml +20 -0
  168. package/desktop/src-tauri/app-icon.svg +13 -0
  169. package/desktop/src-tauri/build.rs +3 -0
  170. package/desktop/src-tauri/capabilities/default.json +106 -0
  171. package/desktop/src-tauri/icons/android/mipmap-anydpi-v26/ic_launcher.xml +5 -0
  172. package/desktop/src-tauri/icons/android/values/ic_launcher_background.xml +4 -0
  173. package/desktop/src-tauri/icons/icon.icns +0 -0
  174. package/desktop/src-tauri/icons/icon.ico +0 -0
  175. package/desktop/src-tauri/src/lib.rs +408 -0
  176. package/desktop/src-tauri/src/main.rs +6 -0
  177. package/desktop/src-tauri/tauri.conf.json +78 -0
  178. package/desktop/src-tauri/tauri.macos.conf.json +18 -0
  179. package/desktop/src-tauri/tauri.release-ci.json +5 -0
  180. package/desktop/src-tauri/tauri.windows.conf.json +16 -0
  181. package/desktop/src-tauri/windows-installer-hooks.nsh +17 -0
  182. package/desktop/tsconfig.json +25 -0
  183. package/desktop/vite.config.ts +26 -0
  184. package/desktop/vitest.config.ts +18 -0
  185. package/package.json +1 -1
  186. package/src/commands/desktop/desktop.tsx +9 -0
  187. package/src/commands/desktop/index.ts +26 -0
@@ -0,0 +1,152 @@
1
+ import type { PermissionMode } from './settings'
2
+
3
+ // Source: src/server/ws/events.ts
4
+
5
+ // ─── Client → Server ──────────────────────────────────────────────
6
+
7
+ export type ClientMessage =
8
+ | { type: 'user_message'; content: string; attachments?: AttachmentRef[] }
9
+ | { type: 'permission_response'; requestId: string; allowed: boolean; rule?: string }
10
+ | {
11
+ type: 'computer_use_permission_response'
12
+ requestId: string
13
+ response: ComputerUsePermissionResponse
14
+ }
15
+ | { type: 'set_permission_mode'; mode: PermissionMode }
16
+ | { type: 'stop_generation' }
17
+ | { type: 'ping' }
18
+
19
+ export type AttachmentRef = {
20
+ type: 'file' | 'image'
21
+ name?: string
22
+ path?: string
23
+ data?: string
24
+ mimeType?: string
25
+ }
26
+
27
+ export type UIAttachment = {
28
+ type: 'file' | 'image'
29
+ name: string
30
+ data?: string
31
+ mimeType?: string
32
+ }
33
+
34
+ // ─── Server → Client ──────────────────────────────────────────────
35
+
36
+ export type ServerMessage =
37
+ | { type: 'connected'; sessionId: string }
38
+ | { type: 'content_start'; blockType: 'text' | 'tool_use'; toolName?: string; toolUseId?: string; parentToolUseId?: string }
39
+ | { type: 'content_delta'; text?: string; toolInput?: string }
40
+ | { type: 'tool_use_complete'; toolName: string; toolUseId: string; input: unknown; parentToolUseId?: string }
41
+ | { type: 'tool_result'; toolUseId: string; content: unknown; isError: boolean; parentToolUseId?: string }
42
+ | { type: 'permission_request'; requestId: string; toolName: string; input: unknown; description?: string }
43
+ | {
44
+ type: 'computer_use_permission_request'
45
+ requestId: string
46
+ request: ComputerUsePermissionRequest
47
+ }
48
+ | { type: 'message_complete'; usage: TokenUsage }
49
+ | { type: 'thinking'; text: string }
50
+ | { type: 'status'; state: ChatState; verb?: string; elapsed?: number; tokens?: number }
51
+ | { type: 'error'; message: string; code: string; retryable?: boolean }
52
+ | { type: 'system_notification'; subtype: string; message?: string; data?: unknown }
53
+ | { type: 'pong' }
54
+ | { type: 'team_update'; teamName: string; members: TeamMemberStatus[] }
55
+ | { type: 'team_created'; teamName: string }
56
+ | { type: 'team_deleted'; teamName: string }
57
+ | { type: 'task_update'; taskId: string; status: string; progress?: string }
58
+ | { type: 'session_title_updated'; sessionId: string; title: string }
59
+
60
+ export type TokenUsage = {
61
+ input_tokens: number
62
+ output_tokens: number
63
+ cache_read_tokens?: number
64
+ cache_creation_tokens?: number
65
+ }
66
+
67
+ export type ChatState = 'idle' | 'thinking' | 'tool_executing' | 'streaming' | 'permission_pending'
68
+
69
+ export type TeamMemberStatus = {
70
+ agentId: string
71
+ role: string
72
+ status: 'running' | 'idle' | 'completed' | 'error'
73
+ currentTask?: string
74
+ }
75
+
76
+ export type ComputerUseGrantFlags = {
77
+ clipboardRead: boolean
78
+ clipboardWrite: boolean
79
+ systemKeyCombos: boolean
80
+ }
81
+
82
+ export type ComputerUseResolvedApp = {
83
+ bundleId: string
84
+ displayName: string
85
+ path?: string
86
+ iconDataUrl?: string
87
+ }
88
+
89
+ export type ComputerUseResolvedAppRequest = {
90
+ requestedName: string
91
+ resolved?: ComputerUseResolvedApp
92
+ isSentinel: boolean
93
+ alreadyGranted: boolean
94
+ proposedTier: 'read' | 'click' | 'full'
95
+ }
96
+
97
+ export type ComputerUsePermissionRequest = {
98
+ requestId: string
99
+ reason: string
100
+ apps: ComputerUseResolvedAppRequest[]
101
+ requestedFlags: Partial<ComputerUseGrantFlags>
102
+ screenshotFiltering: 'native' | 'none'
103
+ tccState?: {
104
+ accessibility: boolean
105
+ screenRecording: boolean
106
+ }
107
+ willHide?: Array<{ bundleId: string; displayName: string }>
108
+ autoUnhideEnabled?: boolean
109
+ }
110
+
111
+ export type ComputerUsePermissionResponse = {
112
+ granted: Array<{
113
+ bundleId: string
114
+ displayName: string
115
+ grantedAt: number
116
+ tier?: 'read' | 'click' | 'full'
117
+ }>
118
+ denied: Array<{
119
+ bundleId: string
120
+ reason: 'user_denied' | 'not_installed'
121
+ }>
122
+ flags: ComputerUseGrantFlags
123
+ userConsented?: boolean
124
+ }
125
+
126
+ export type AgentTaskNotification = {
127
+ taskId: string
128
+ toolUseId: string
129
+ status: 'completed' | 'failed' | 'stopped'
130
+ summary?: string
131
+ outputFile?: string
132
+ }
133
+
134
+ // ─── UI Message model (rendered in MessageList) ───────────────────
135
+
136
+ export type TaskSummaryItem = {
137
+ id: string
138
+ subject: string
139
+ status: 'pending' | 'in_progress' | 'completed'
140
+ activeForm?: string
141
+ }
142
+
143
+ export type UIMessage =
144
+ | { id: string; type: 'user_text'; content: string; timestamp: number; attachments?: UIAttachment[]; pending?: boolean }
145
+ | { id: string; type: 'assistant_text'; content: string; timestamp: number; model?: string }
146
+ | { id: string; type: 'thinking'; content: string; timestamp: number }
147
+ | { id: string; type: 'tool_use'; toolName: string; toolUseId: string; input: unknown; timestamp: number; parentToolUseId?: string }
148
+ | { id: string; type: 'tool_result'; toolUseId: string; content: unknown; isError: boolean; timestamp: number; parentToolUseId?: string }
149
+ | { id: string; type: 'system'; content: string; timestamp: number }
150
+ | { id: string; type: 'permission_request'; requestId: string; toolName: string; input: unknown; description?: string; timestamp: number }
151
+ | { id: string; type: 'error'; message: string; code: string; timestamp: number }
152
+ | { id: string; type: 'task_summary'; tasks: TaskSummaryItem[]; timestamp: number }
@@ -0,0 +1,24 @@
1
+ // Source: src/server/services/taskService.ts (CLI V2 Tasks)
2
+
3
+ export type TaskStatus = 'pending' | 'in_progress' | 'completed'
4
+
5
+ export type CLITask = {
6
+ id: string
7
+ subject: string
8
+ description: string
9
+ activeForm?: string
10
+ owner?: string
11
+ status: TaskStatus
12
+ blocks: string[]
13
+ blockedBy: string[]
14
+ metadata?: Record<string, unknown>
15
+ taskListId: string
16
+ }
17
+
18
+ export type TaskListSummary = {
19
+ id: string
20
+ taskCount: number
21
+ completedCount: number
22
+ inProgressCount: number
23
+ pendingCount: number
24
+ }
@@ -0,0 +1,62 @@
1
+ // desktop/src/types/provider.ts
2
+
3
+ export type ApiFormat = 'anthropic' | 'openai_chat' | 'openai_responses'
4
+
5
+ export type ModelMapping = {
6
+ main: string
7
+ haiku: string
8
+ sonnet: string
9
+ opus: string
10
+ }
11
+
12
+ export type SavedProvider = {
13
+ id: string
14
+ presetId: string
15
+ name: string
16
+ apiKey: string // masked from server
17
+ baseUrl: string
18
+ apiFormat: ApiFormat
19
+ models: ModelMapping
20
+ notes?: string
21
+ }
22
+
23
+ export type CreateProviderInput = {
24
+ presetId: string
25
+ name: string
26
+ apiKey: string
27
+ baseUrl: string
28
+ apiFormat?: ApiFormat
29
+ models: ModelMapping
30
+ notes?: string
31
+ }
32
+
33
+ export type UpdateProviderInput = {
34
+ name?: string
35
+ apiKey?: string
36
+ baseUrl?: string
37
+ apiFormat?: ApiFormat
38
+ models?: ModelMapping
39
+ notes?: string
40
+ }
41
+
42
+ export type TestProviderConfigInput = {
43
+ baseUrl: string
44
+ apiKey: string
45
+ modelId: string
46
+ apiFormat?: ApiFormat
47
+ }
48
+
49
+ export type ProviderTestStepResult = {
50
+ success: boolean
51
+ latencyMs: number
52
+ error?: string
53
+ modelUsed?: string
54
+ httpStatus?: number
55
+ }
56
+
57
+ export type ProviderTestResult = {
58
+ /** Step 1: Basic connectivity */
59
+ connectivity: ProviderTestStepResult
60
+ /** Step 2: Proxy pipeline (only for openai_* formats) */
61
+ proxy?: ProviderTestStepResult
62
+ }
@@ -0,0 +1,27 @@
1
+ // Source: src/server/services/sessionService.ts
2
+
3
+ export type SessionListItem = {
4
+ id: string
5
+ title: string
6
+ createdAt: string
7
+ modifiedAt: string
8
+ messageCount: number
9
+ projectPath: string
10
+ workDir: string | null
11
+ workDirExists: boolean
12
+ }
13
+
14
+ export type MessageEntry = {
15
+ id: string
16
+ type: 'user' | 'assistant' | 'system' | 'tool_use' | 'tool_result'
17
+ content: unknown
18
+ timestamp: string
19
+ model?: string
20
+ parentUuid?: string
21
+ parentToolUseId?: string
22
+ isSidechain?: boolean
23
+ }
24
+
25
+ export type SessionDetail = SessionListItem & {
26
+ messages: MessageEntry[]
27
+ }
@@ -0,0 +1,22 @@
1
+ // Source: src/server/api/models.ts, src/server/api/settings.ts
2
+
3
+ export type PermissionMode = 'default' | 'acceptEdits' | 'plan' | 'bypassPermissions' | 'dontAsk'
4
+
5
+ export type EffortLevel = 'low' | 'medium' | 'high' | 'max'
6
+ export type ThemeMode = 'light' | 'dark'
7
+
8
+ export type ModelInfo = {
9
+ id: string
10
+ name: string
11
+ description: string
12
+ context: string
13
+ }
14
+
15
+ export type UserSettings = {
16
+ model?: string
17
+ modelContext?: string
18
+ effort?: EffortLevel
19
+ permissionMode?: PermissionMode
20
+ theme?: ThemeMode
21
+ [key: string]: unknown
22
+ }
@@ -0,0 +1,38 @@
1
+ export type SkillSource = 'user' | 'project' | 'plugin' | 'mcp' | 'bundled'
2
+
3
+ export type SkillMeta = {
4
+ name: string
5
+ displayName?: string
6
+ description: string
7
+ source: SkillSource
8
+ userInvocable: boolean
9
+ version?: string
10
+ contentLength: number
11
+ hasDirectory: boolean
12
+ pluginName?: string
13
+ }
14
+
15
+ export type FileTreeNode = {
16
+ name: string
17
+ path: string
18
+ type: 'file' | 'directory'
19
+ children?: FileTreeNode[]
20
+ }
21
+
22
+ export type SkillFrontmatter = Record<string, unknown>
23
+
24
+ export type SkillFile = {
25
+ path: string
26
+ content: string
27
+ language: string
28
+ frontmatter?: SkillFrontmatter
29
+ body?: string
30
+ isEntry?: boolean
31
+ }
32
+
33
+ export type SkillDetail = {
34
+ meta: SkillMeta
35
+ tree: FileTreeNode[]
36
+ files: SkillFile[]
37
+ skillRoot: string
38
+ }
@@ -0,0 +1,56 @@
1
+ // Source: src/server/services/cronService.ts
2
+
3
+ export type TaskNotificationConfig = {
4
+ enabled: boolean
5
+ channels: ('telegram' | 'feishu')[]
6
+ }
7
+
8
+ export type CronTask = {
9
+ id: string
10
+ name: string
11
+ description?: string
12
+ cron: string
13
+ prompt: string
14
+ enabled: boolean
15
+ recurring?: boolean
16
+ permanent?: boolean
17
+ createdAt: number
18
+ lastRunAt?: number
19
+ lastFiredAt?: string
20
+ nextRunAt?: number
21
+ permissionMode?: string
22
+ model?: string
23
+ folderPath?: string
24
+ useWorktree?: boolean
25
+ notification?: TaskNotificationConfig
26
+ }
27
+
28
+ export type CreateTaskInput = {
29
+ name: string
30
+ description?: string
31
+ cron: string
32
+ prompt: string
33
+ enabled?: boolean
34
+ recurring?: boolean
35
+ permanent?: boolean
36
+ permissionMode?: string
37
+ model?: string
38
+ folderPath?: string
39
+ useWorktree?: boolean
40
+ notification?: TaskNotificationConfig
41
+ }
42
+
43
+ export type TaskRun = {
44
+ id: string
45
+ taskId: string
46
+ taskName: string
47
+ startedAt: string
48
+ completedAt?: string
49
+ status: 'running' | 'completed' | 'failed' | 'timeout'
50
+ prompt: string
51
+ output?: string
52
+ error?: string
53
+ exitCode?: number
54
+ durationMs?: number
55
+ sessionId?: string
56
+ }
@@ -0,0 +1,38 @@
1
+ // Source: src/server/services/teamService.ts, src/server/ws/events.ts
2
+
3
+ export type TeamSummary = {
4
+ name: string
5
+ memberCount: number
6
+ createdAt?: string
7
+ }
8
+
9
+ export type TeamMember = {
10
+ agentId: string
11
+ name?: string
12
+ role: string
13
+ status: 'running' | 'idle' | 'completed' | 'error'
14
+ currentTask?: string
15
+ color?: AgentColor
16
+ sessionId?: string
17
+ }
18
+
19
+ export type TeamDetail = {
20
+ name: string
21
+ leadAgentId?: string
22
+ leadSessionId?: string
23
+ members: TeamMember[]
24
+ createdAt?: string
25
+ }
26
+
27
+ export type AgentColor = 'red' | 'blue' | 'green' | 'yellow' | 'purple' | 'orange' | 'pink' | 'cyan'
28
+
29
+ export const AGENT_COLORS: AgentColor[] = ['red', 'blue', 'green', 'yellow', 'purple', 'orange', 'pink', 'cyan']
30
+
31
+ /** Lifecycle message types that should be filtered from agent output display */
32
+ export const AGENT_LIFECYCLE_TYPES = new Set([
33
+ 'shutdown_approved',
34
+ 'shutdown_rejected',
35
+ 'shutdown_request',
36
+ 'teammate_terminated',
37
+ 'idle_notification',
38
+ ])