DeepSeek Harness Remote
DeepSeek Harness Remote 可將手機或另一台電腦與你運行 DeepSeek Harness 的電腦安全連接,隨時隨地繼續你的工作,方便隨時查看進度並繼續工作。
AI 翻譯
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗Site para realizar organizações de tasks de rotina.
Sincroniza nos dois sentidos com a agenda principal do usuário: tarefas com prazo viram eventos, e eventos da agenda viram tarefas. Cor e horário acompanham nos dois lados; concluídas ganham "✓" no título.
Usa a agenda principal (e não um calendário dedicado) para que qualquer evento criado no Google vire tarefa sem exigir escolher um calendário na hora. O custo é que compromissos comuns também viram tarefa — convites recusados são o único filtro. Feriados e aniversários ficam de fora por serem calendários separados no Google.
Todo o SQL fica em supabase/ e roda à mão no SQL Editor do Supabase. Os arquivos
podem rodar mais de uma vez sem problema.
supabase/schema_base.sql — as tabelas que nasceram pelo painel (profiles,
projects, project_members, tasks, task_comments), as funções
is_project_owner, is_project_member e accept_invite_by_code, o bucket
avatars e as policies de tudo isso, como estão em produção hoje. Serve de
registro e para montar um banco novo.supabase/rls_correcoes.sql — fecha os furos de RLS que a revisão encontrou nas
policies do schema base: visualizador que se promovia a editor, editor que tomava
o projeto do dono, tarefa enfiada em projeto alheio, perfis legíveis sem login,
bucket listável e outros. Cada bloco explica o risco que fecha. Rode depois do
schema base. O app esconde botões de quem só visualiza, mas a proteção de verdade
é este RLS.supabase/inspecionar_schema.sql — só leitura. Devolve numa célula de texto as
colunas, policies, funções, grants e storage do banco, para conferir se ele bate
com os arquivos daqui.Num banco novo, a ordem é: schema_base.sql, depois as migrações
(google_credentials, task_color, eventos_ignorados, task_sync_google,
routines, task_tags, tarefas_google_unicas, desafio, desafio_v2),
rls_correcoes.sql e, por último, as correções que vieram depois dele:
convites_pendentes.sql e tarefas_projeto_acesso.sql.
Os convites por email confiam no email do login, então mantenha ligada a confirmação de email do Supabase ("Confirm email", nas configurações do provedor Email em Authentication). Sem ela, alguém poderia criar conta com o email de outra pessoa e aceitar os convites dela.
O "Esqueci minha senha" da tela de login usa o email "Reset Password" do Supabase
(Authentication → Emails → Templates); o template padrão já serve. O link volta
para a raiz do app, então a origem dele (https://SEU-APP.vercel.app e, para testar,
http://localhost:8000) precisa estar em Redirect URLs, em Authentication → URL
Configuration. Fora da lista, o Supabase manda a pessoa para a Site URL e o app não
abre o formulário de senha nova.
Rode supabase/google_credentials.sql no SQL Editor do Supabase. A tabela fica
com RLS ligado e sem policies, então nada no navegador consegue ler os
refresh tokens — só as funções em api/, que usam a service role key.
Depois rode supabase/tarefas_google_unicas.sql: ele cria o índice que impede a
mesma reunião de virar duas tarefas quando o app está aberto em mais de um
aparelho. O passo 1 do arquivo lista duplicatas que já existam (o índice não é
criado enquanto houver alguma).
https://SEU-APP.vercel.apphttps://SEU-APP.vercel.app/api/google/callback| Variável | Onde obter |
|---|---|
GOOGLE_CLIENT_ID | Google Cloud Console (passo 2) |
GOOGLE_CLIENT_SECRET | Google Cloud Console (passo 2) |
SUPABASE_URL | Supabase → Project Settings → API |
SUPABASE_ANON_KEY | Supabase → Project Settings → API (chave pública) |
SUPABASE_SERVICE_ROLE_KEY | Supabase → Project Settings → API (secreta) |
OAUTH_STATE_SECRET | Qualquer string aleatória longa: openssl rand -base64 32 |
GOOGLE_REDIRECT_URI | Opcional. Só se o domínio do callback for diferente do host da requisição |
APP_ORIGIN | Opcional, mas recomendado. Origem fixa do app (https://SEU-APP.vercel.app). Sem ela, o redirect do callback é montado a partir do header x-forwarded-host, que vem do cliente |
A service role key ignora todo o RLS do Supabase e o client secret dá acesso ao Google em nome do app. Nenhum dos dois pode ir para o repositório nem para o navegador — só nas variáveis de ambiente da Vercel.
api/google/start — monta a URL de consentimento com um state assinado (HMAC)
contendo a identidade do usuário e um nonce, que também vai num cookie HttpOnly
deste navegador; o callback não confia no navegador e só aceita a volta no mesmo
navegador que começou o fluxoapi/google/callback — confere state e cookie, troca o código pelos tokens e
guarda o refresh tokenapi/google/token — devolve ao navegador um access token curto, renovando pelo
refresh token quando vence; também guarda o id do calendário e o sync token. Se o Google
falhar de forma passageira ao renovar, responde 503 e o app tenta de novo depois,
sem dar a conta por desconectadaapi/google/disconnect — revoga no Google e apaga a credencialO navegador nunca vê o refresh token; por isso a conexão sobrevive a recarregar a página e dura até ser revogada.