优化: P0 shell stdout修复+灵感路由+3工具新增+ai-md全局CSS+import路径统一
P0 修复:
- B-260615-37: shell.rs 补 Stdio::piped() 修复 run_command stdout/stderr 恒空
(tokio 默认 inherit 导致 wait_with_output 读不到 pipe)
P1 功能:
- B-260615-36: 路由加 /ideas/:id + Ideas.vue 接 route.params.id + watch
(修复项目详情点「来源灵感」跳空白页)
- F-260615-08: 新增 file_info 工具(元信息: exists/size/lines/binary/dir)
- F-260615-09: 新增 append_file 工具(追加写入, RiskLevel::Medium)
- F-260615-12: 新增 search_files 工具(文件名 glob 搜索,递归,限50条)
+ search_files_recursive 辅助函数 + i18n zh/en 3工具×2命名空间
DRY/重构:
- CR-260615-09: .ai-md 样式5份→全局 src/styles/ai-md.css(75行)
AiChat.vue 删71行重复 + main.ts 引入 + typo修正(.a-md→.ai-md)
- 全量 import 路径统一为 @/ 别名(stores/composables/views ~28文件)
vite.config.ts 加 resolve.alias.{ '@': '/src' }
- i18n 批量改进: store error fallback 11处中文→t() / ToolCard ARG_LABEL
/ useAiSend queue文案 / Dashboard 空态 / Ideas.vue null守卫
- cargo check 0 error / vue-tsc 0 error
This commit is contained in:
@@ -20,7 +20,7 @@
|
||||
//! - state 为模块级单例,全应用共享同一引用
|
||||
|
||||
import { reactive, watch } from 'vue'
|
||||
import type { AiChatEvent, AiConversationSummary, AiMessage, AiProviderConfig, AiToolCallInfo, SkillInfo } from '../api/types'
|
||||
import type { AiChatEvent, AiConversationSummary, AiMessage, AiProviderConfig, AiToolCallInfo, SkillInfo } from '@/api/types'
|
||||
|
||||
/**
|
||||
* 单对话 messages 软上限(滚动淘汰)。
|
||||
@@ -36,14 +36,14 @@ import type { AiChatEvent, AiConversationSummary, AiMessage, AiProviderConfig, A
|
||||
const MESSAGE_CAP = 200
|
||||
/** push 单次增量上限(用于区分 push 增长 vs 整体替换)。useAiSend 连续 push user+ai=2,其余事件 push 1。 */
|
||||
const MESSAGE_PUSH_BURST = 2
|
||||
import { useAiEvents } from '../composables/ai/useAiEvents'
|
||||
import { useAiStream } from '../composables/ai/useAiStream'
|
||||
import { useAiSend } from '../composables/ai/useAiSend'
|
||||
import { useAiConversations } from '../composables/ai/useAiConversations'
|
||||
import { useAiWindow } from '../composables/ai/useAiWindow'
|
||||
import { useAiPanel } from '../composables/ai/useAiPanel'
|
||||
import { useAiEvents } from '@/composables/ai/useAiEvents'
|
||||
import { useAiStream } from '@/composables/ai/useAiStream'
|
||||
import { useAiSend } from '@/composables/ai/useAiSend'
|
||||
import { useAiConversations } from '@/composables/ai/useAiConversations'
|
||||
import { useAiWindow } from '@/composables/ai/useAiWindow'
|
||||
import { useAiPanel } from '@/composables/ai/useAiPanel'
|
||||
|
||||
/// 模块级单例 state — 全应用共享(composables 通过 `import { state } from '../../stores/ai'` 取用)
|
||||
/// 模块级单例 state — 全应用共享(composables 通过 `import { state } from '@/stores/ai'` 取用)
|
||||
export const state = reactive({
|
||||
messages: [] as AiMessage[],
|
||||
streaming: false,
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { reactive, computed } from 'vue'
|
||||
import { knowledgeApi } from '../api'
|
||||
import { knowledgeApi } from '@/api'
|
||||
import i18n from '@/i18n'
|
||||
import type {
|
||||
KnowledgeRecord,
|
||||
@@ -8,7 +8,7 @@ import type {
|
||||
CreateKnowledgeInput,
|
||||
UpdateKnowledgeInput,
|
||||
KnowledgeConfig,
|
||||
} from '../api/types'
|
||||
} from '@/api/types'
|
||||
|
||||
// composable 外全局 i18n 实例(非 setup 上下文)
|
||||
const t = ((i18n as any).global.t as (k: string) => string).bind((i18n as any).global)
|
||||
|
||||
@@ -5,7 +5,7 @@ import { createTasksStore } from './project/tasks'
|
||||
import { createIdeasStore } from './project/ideas'
|
||||
import { createWorkflowStore } from './project/workflow'
|
||||
import { state, clearError } from './project/state'
|
||||
import type { DfDataChangedPayload } from '../api/types'
|
||||
import type { DfDataChangedPayload } from '@/api/types'
|
||||
|
||||
// ── barrel 组合器(零行为变更,纯重构) ──
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { ideaApi } from '../../api'
|
||||
import { ideaApi } from '@/api'
|
||||
import i18n from '@/i18n'
|
||||
import { state } from './state'
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { projectApi } from '../../api'
|
||||
import type { ImportProjectInput } from '../../api/project'
|
||||
import { projectApi } from '@/api'
|
||||
import type { ImportProjectInput } from '@/api/project'
|
||||
import i18n from '@/i18n'
|
||||
import { state, clearError } from './state'
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { taskApi } from '../../api'
|
||||
import { taskApi } from '@/api'
|
||||
import i18n from '@/i18n'
|
||||
import { state } from './state'
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { workflowApi } from '../../api'
|
||||
import { workflowApi } from '@/api'
|
||||
import i18n from '@/i18n'
|
||||
import { state, _eventUnlisten, setEventUnlisten } from './state'
|
||||
|
||||
|
||||
Reference in New Issue
Block a user