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 change: 1 addition & 0 deletions changelog.d/1058-bot-task-kanban.added.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Each Bot keeps a task list it updates from the conversation, and a board shows Not started, In progress and Done for that Bot, a child Bot, and — for a group admin — the tasks member Bots are tracking in the group ([#1058](https://github.com/ThinkFlowLab/FlyBot/issues/1058)).
3,917 changes: 2,213 additions & 1,704 deletions core/client.js

Large diffs are not rendered by default.

23 changes: 23 additions & 0 deletions core/src/client/i18n.js
Original file line number Diff line number Diff line change
Expand Up @@ -605,6 +605,29 @@ const ZH = {
'Latest: {text}': '最新:{text}',
'{count} tool calls': '{count} 次工具调用',
'Untitled task': '未命名任务',
// Bot task board (#1058)
Tasks: '任务',
'Close tasks': '关闭任务',
'Task board': '任务板',
'Not started': '未开始',
'Groups you admin': '你管理的群',
'No tasks yet.': '还没有任务。',
'Nothing in this column.': '这一列是空的。',
Highest: '最高',
High: '较高',
Low: '较低',
Claimed: '已认领',
Blocked: '受阻',
Start: '开始',
Complete: '完成',
'Start task': '开始任务',
'Complete task': '完成任务',
'Add task': '添加任务',
'Task title': '任务标题',
Progress: '进度',
Group: '群',
'{percent}%': '{percent}%',
'{done}/{total}': '{done}/{total}',
'for {time}': '已 {time}',
'just started': '刚开始',
'Open {name}': '打开 {name}',
Expand Down
12 changes: 9 additions & 3 deletions core/src/client/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import { FOLDER_CSS } from './folder-menu.js'
import { USAGE_CSS } from './usage-page.js'
import { SCHEDULE_CSS } from './schedules.js'
import { INBOX_CSS } from './inbox.js'
import { KANBAN_CSS } from './kanban.js'
import { MOBILE_CSS } from './mobile.js'
import { PANE_MIN_WIDTH_CSS } from './panes.js'
import { STORAGE, migrateStorage } from './storage.js'
Expand Down Expand Up @@ -485,16 +486,18 @@ export function apply(ctx) {
openMemory: (botId) => { ui.set(state => ({ ...state, memory: botId, menu: null, palette: null })) },
closeMemory: () => { ui.set(state => (state.memory ? { ...state, memory: null } : state)) },
// The Agent inbox (#349) opens over the conversation; Open on a card closes it first.
openInbox: () => { ui.set(state => ({ ...state, inbox: true, menu: null, palette: null, newChat: null })) },
openInbox: () => { ui.set(state => ({ ...state, inbox: true, board: null, menu: null, palette: null, newChat: null })) },
closeInbox: () => { ui.set(state => (state.inbox ? { ...state, inbox: null } : state)) },
openBoard: () => { ui.set(state => ({ ...state, board: true, inbox: null, menu: null, palette: null, newChat: null })) },
closeBoard: () => { ui.set(state => (state.board ? { ...state, board: null } : state)) },
openConnectors: () => { ui.set(state => ({ ...state, settings: { page: 'connectors', id: null }, menu: null, palette: null, newChat: null })) },
// Agent mode hands the surface back to the shell; everything open on the Bot
// surface closes first so nothing stale reopens on the way back.
setSurface: (mode) => {
if (mode !== 'bot' && mode !== 'agent') return
if (surface.getSnapshot().mode === mode) return
if (mode === 'agent') {
ui.set(state => ({ ...state, details: null, view: 'details', settings: null, remoteBotSettings: null, palette: null, newChat: null, menu: null, voice: null, exchange: null, memory: null, inbox: null, toast: null }))
ui.set(state => ({ ...state, details: null, view: 'details', settings: null, remoteBotSettings: null, palette: null, newChat: null, menu: null, voice: null, exchange: null, memory: null, inbox: null, board: null, toast: null }))
}
writeMode(mode)
surface.set(state => ({ ...state, mode }))
Expand Down Expand Up @@ -596,7 +599,9 @@ export function apply(ctx) {
approveCapability: name => after(call('capability-approve', { name })),
setBotConnector: (botId, connector, enabled) => after(call('bot-connectors', { botId, connector, enabled })),
setBotCapability: (botId, name, attached) => after(call('bot-capability', { botId, name, attached })),
tasks: () => call('tasks'),
tasks: (payload) => call('tasks', payload ?? {}),
taskUpdate: (payload) => call('task-update', payload),
taskCreate: (payload) => call('task-create', payload),
schedules: () => call('schedules'),
scheduleCreate: task => call('schedule-create', task),
scheduleUpdate: task => call('schedule-update', task),
Expand Down Expand Up @@ -851,6 +856,7 @@ export function apply(ctx) {
installCompiledStyles(USAGE_CSS, 'usage'),
installCompiledStyles(SCHEDULE_CSS, 'schedules'),
installCompiledStyles(INBOX_CSS, 'inbox'),
installCompiledStyles(KANBAN_CSS, 'kanban'),
installCompiledStyles(FEEDBACK_CSS, 'feedback'),
installCompiledStyles(ABOUT_CSS, 'about'),
installCompiledStyles(FLYBOT_CSS, 'flybot'),
Expand Down
Loading
Loading