chore: adiciona .gitignore e commit.command
This commit is contained in:
@@ -0,0 +1,121 @@
|
||||
# 07 — Estudo (SUSPENSO): Detectar o Projeto Ativo no Final Cut Pro
|
||||
|
||||
> **Status: SUSPENSO** (2026-08-14). Estudo retomável. Ver seção
|
||||
> ["Onde parámos e próximos passos"](#onde-paramos-e-proximos-passos) ao fundo.
|
||||
|
||||
## Objetivo
|
||||
|
||||
Descobrir se é possível detectar, de forma programática, **qual projeto/timeline
|
||||
está aberto e em edição no Final Cut Pro** — não apenas enumerar os projetos —
|
||||
para que as ferramentas do MCP possam operar sobre o projeto ativo.
|
||||
|
||||
Contexto atual do repositório: `fcpxml/live.py` já implementa `list_fcp_libraries`
|
||||
(enumerar bibliotecas → eventos → projetos) e `push_to_fcp` (import via Open
|
||||
Document). O que **falta** é saber *qual* projeto o usuário está vendo/editando.
|
||||
|
||||
## Fatos verificados na máquina (2026-08-14)
|
||||
|
||||
- **FCP está em execução**, mas o executável **não está em `/Applications`**:
|
||||
localizado em `/Volumes/Merongo/Applications/Final Cut Pro Creator Studio.app`.
|
||||
Aplicativo aparece como "Final Cut Pro Creator Studio" mas o bundle id é
|
||||
`com.apple.FinalCut` (processo `Final Cut Pro`).
|
||||
- Ambiente: `osascript` funciona (permissão de automação concedida para o host).
|
||||
|
||||
## Superfície oficial: AppleScript (`ProEditor.sdef`)
|
||||
|
||||
O dicionário oficial fica em:
|
||||
`/Volumes/Merongo/Applications/Final Cut Pro Creator Studio.app/Contents/Resources/ProEditor.sdef`
|
||||
|
||||
Observações estruturais do `.sdef`:
|
||||
|
||||
- **Top-level = somente `libraries`** → `events` → `projects`/`sequences`.
|
||||
- **NÃO existe** propriedade `active project`, `front project` ou `active sequence`
|
||||
no dicionário. A única leitura possível é `get` (100% read-only).
|
||||
- O `sdef` inclui a suite padrão (`CocoaStandard.sdef`), o que traz `document`.
|
||||
|
||||
### Testes de terminal (resultados reais)
|
||||
|
||||
| Comando (via `osascript`) | Resultado |
|
||||
|---|---|
|
||||
| `get name of front document` | `Biblioteca Padrão` — retorna a **biblioteca** em primeiro plano (class `document` que corresponde a um `library`; o id casa com um `library`). |
|
||||
| `get class of front document` | `document` |
|
||||
| `get name of front window` | `Final Cut Pro` (apenas o nome da janela do app, **não** o projeto) |
|
||||
| `front project` | erro (`Não é possível obter project 1`) |
|
||||
| `active document` | erro de sintaxe (`active` não é palavra-chave) |
|
||||
| `events of front document` | erro `-1728` (eventos ficam em `library`, não em `document`) |
|
||||
| `get name of every project` | erro `-1728` (projetos não são top-level) |
|
||||
|
||||
### Conclusão da superfície oficial
|
||||
|
||||
- ✅ Dá para detectar a **biblioteca em primeiro plano** via `front document`
|
||||
(equivalente a `libraries` de maior prioridade na lista).
|
||||
- ❌ **NÃO dá** para detectar o **projeto ativo** (a timeline em edição) apenas
|
||||
pelo AppleScript oficial.
|
||||
|
||||
## Superfície não-oficial: CommandPost
|
||||
|
||||
CommandPost instalado: **v1.4.13** em `/Applications/CommandPost.app` (versão 1,
|
||||
gratuita; **NÃO** é a v2 que requer LateNite). LateNite **não está** instalado.
|
||||
|
||||
- Na v1.4.13 **não estava rodando** e a porta WebSocket `27480` **estava fechada**
|
||||
(essa porta é do servidor WebSocket da v2). Logo, a integração via WS na porta
|
||||
27480 **não se aplica** a esta instalação.
|
||||
- O app é baseado em **Hammerspoon** e tem um comando AppleScript próprio:
|
||||
**`execute lua code`** (declarado em
|
||||
`/Applications/CommandPost.app/Contents/Resources/CommandPost.sdef`).
|
||||
Isso permite rodar Lua dentro do ambiente do CommandPost (que tem acesso à
|
||||
árvore Accessibility/AX do FCP e à API `cp.*`).
|
||||
- O CommandPost usa **Accessibility (AX) scripting** para ler o FCP. A API interna
|
||||
(`cp.apple.finalcutpro`) é extensa e profunda; os caminhos para "documento ativo"
|
||||
não são uma propriedade direta e limpa — são derivados da árvore AX (ex.: título
|
||||
da janela da timeline).
|
||||
|
||||
## Superfície não-oficial: AX direto (System Events)
|
||||
|
||||
Testado: ler títulos das janelas do processo "Final Cut Pro" via `System Events`:
|
||||
|
||||
```
|
||||
tell application "System Events" to tell process "Final Cut Pro" to get title of every window
|
||||
```
|
||||
|
||||
- Resultado: **erro `-25211` — "osascript é um acesso assistivo não permitido"**
|
||||
(o host não tem permissão de Accessibility/Assistive Access).
|
||||
- Isso é uma permissão de sistema (System Settings → Privacy & Security →
|
||||
Accessibility) que precisa ser concedida ao processo host.
|
||||
- A princípio o título da janela da timeline do FCP **contém o nome do projeto**,
|
||||
o que tornaria essa a via mais simples — desde que a permissão AX exista.
|
||||
|
||||
## Mapa de decisão (resumo)
|
||||
|
||||
| Via | Detecta projeto ativo? | Permissão extra | Robustez |
|
||||
|---|---|---|---|
|
||||
| AppleScript oficial (`front document`) | Só a biblioteca, não o projeto | Automação (já ok) | Alta (sanctioned) |
|
||||
| CommandPost `execute lua code` | Sim (via AX/`cp.*`) | CommandPost rodando + AX do CommandPost | Média (frágil a updates do FCP) |
|
||||
| AX direto (`System Events` título da janela) | Sim (título da timeline tem o projeto) | Accessibility no host | Média-alta |
|
||||
| CommandPost v2 WS porta 27480 | Sim | CommandPost v2 + LateNite (~US$10) | — (não aplicável aqui, é v1) |
|
||||
|
||||
## Onde paramos e próximos passos
|
||||
|
||||
**Estado:** investigação inicial feita; **nenhum código foi escrito/alterado**.
|
||||
Nenhum arquivo do repositório foi modificado; nada foi commitado.
|
||||
|
||||
Próximos passos sugeridos ao retomar:
|
||||
|
||||
1. **Decidir a via** — provavelmente a mais promissora e de menor custo é a
|
||||
**AX direta via `System Events`** (ler o título da janela da timeline), pois
|
||||
dispensa CommandPost. Requer apenas conceder Accessibility ao host.
|
||||
2. **Conceder permissão** de Accessibility ao terminal/host em System Settings →
|
||||
Privacy & Security → Accessibility, e re-testar:
|
||||
```
|
||||
tell application "System Events" to tell process "Final Cut Pro" to get title of every window
|
||||
```
|
||||
Confirmar que o título da timeline contém o nome do projeto ativo.
|
||||
3. Se AX direto for inviável, **testar CommandPost `execute lua code`**:
|
||||
iniciar o CommandPost, e via osascript executar Lua que consulta a árvore AX
|
||||
do FCP (ex.: a janela `PrimaryWindow` / a `timeline`) para extrair o título.
|
||||
A API interna relevante vive em `extensions/cp/apple/finalcutpro/`.
|
||||
4. **Projetar o tool MCP** (ex.: `get_fcp_active_project` / `detect_fcp_project`),
|
||||
seguindo o padrão de `handle_*` em `server.py` e a documentação de boas
|
||||
práticas (`Engine/docs/06_BOAS_PRATICAS.md`).
|
||||
5. **Registrar** qualquer correção/erro recorrente em
|
||||
`Engine/docs/05_EXPERIENCIAS.md` e rodar `./Engine/run_after_fix.sh`.
|
||||
Reference in New Issue
Block a user