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.