ai-cut/doc/CUT_AI_FRONTEND_SPEC.md

122 lines
1.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Cursor 開發最高準則Nuxt 4 · Gemini Direct
## 1. 前提
- 專案已存在
- 使用 Nuxt 4
- 使用真實 Gemini API
- Token 由使用者於設定頁輸入
---
## 2. Dependency 規則
### 規劃階段
- 允許討論是否需要新增 dependency
- 需說明必要性與替代方案
### 實作階段(預設)
- ❌ 不新增任何 dependency
- ❌ 不安裝任何套件
- ❌ 不隱性引入 library
---
## 3. Component 拆解原則Token 最小化)
只允許三層:
### Base
- BaseButton
- BaseInput
- BaseTextarea
- BaseCard
### Feature
- ToolCard
- SceneCard
- CameraShotCard
### Page
- pages/*.vue
- 僅組合元件與呼叫 composable
---
## 4. 拆 component 的唯一判斷
是否會被兩個以上頁面重用:
- 是 → 拆
- 否 → 留在頁面
---
## 5. AI 呼叫規則
- UI 不得直接呼叫 Gemini
- UI 只呼叫 composable
- Prompt 組裝只存在於 utils/ai
---
## 6. AI Provider 架構
### Interface/types/ai.ts
```ts
export interface AIProvider {
generateStoryboard(input: unknown): Promise<string>
analyzeCamera(input: unknown): Promise<string>
generateVideoPlan(input: unknown): Promise<string>
}
```
### Gemini Client
- 從 localStorage 讀取 token
- 單一責任:呼叫 API
### Grok Client
- 與 Gemini 相同介面
- 預設不啟用
### Provider Selector
- 依設定頁選擇 provider
- 預設 Gemini
---
## 7. 鏡頭語言處理規則
- 不 hardcode 鏡頭語言
- 不寫 enum
- 不驗證 AI 選擇是否合理
- UI 僅顯示結構化結果
建議結構:
```ts
{
shot: string
movement: string
composition: string
lighting: string
description: string
}
```
---
## 8. Cursor 輸出限制
- 一次只產生一個檔案
- 不跨檔案修改
- 不自動優化
- 不補未使用功能
---
## 9. 開發順序(不可跳)
1. Settings Page
2. Gemini Client
3. Provider Selector
4. AI 分鏡表
5. 其他工具頁