DeepSeek Harness Remote
DeepSeek Harness Remote 可將手機或另一台電腦與你運行 DeepSeek Harness 的電腦安全連接,隨時隨地繼續你的工作,方便隨時查看進度並繼續工作。
AI 翻譯
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗A spreadsheet-style editor for Favor Church service runsheets, backed by Rock RMS.
A runsheet is a Rock ContentChannel; each segment is a ContentChannelItem. The grid's columns are the channel's item attributes, so they are discovered at runtime rather than hardcoded — a new attribute in Rock shows up as a new column.
pnpm install
pnpm dev # http://localhost:3000
Required environment variables (.env.local):
| Variable | Purpose |
|---|---|
ROCK_API_URL / NEXT_PUBLIC_ROCK_API_URL | Rock REST API base, e.g. https://rock.favor.church/api |
ROCK_API_KEY | Rock API key. Never commit this. |
AUTH0_* | Auth0 config — see auth0.config.js |
REDIS_URL | Optional; the Rock object cache is skipped when unset |
pnpm build # production build (lint + typecheck included)
pnpm typecheck # tsc --noEmit on its own
pnpm test # run full test suite (jest)
pnpm test:full # run full test suite (jest)
pnpm test:unit # run unit tests
pnpm test:integration # run integration tests
pnpm test:changed # run tests for files changed since last commit
pnpm list:channels # print the Rock channel ids that hold runsheets
See docs/testing.md for test tiers, commands, and environment variables (JEST_MAX_WORKERS, JEST_VERBOSE).
src/
app/ Next.js App Router entry, root layout, global CSS
components/runsheet/ The editor UI
RunsheetManager Channel picker and load/create flow
RunsheetTableEditor The grid: rows, merged time cells, drag reorder, save
RichTextCell Tiptap editor mounted on the cell being edited
RichTextToolbar One formatting bar, acting on the open cell
RichTextContent Read-only renderer for every other cell
PeopleSearchDropdown Picker for Rock Person-backed columns
server-actions/ The only write boundary to Rock — see its README
auth0-hooks/ Auth0 session plus Rock-backed authorization helpers
lib/ richText, sanitizeRichText, runsheetTime, logging
constants/ client.ts (public), server.ts (secrets), runsheet config
types/ Shared shapes; Runsheet.ts covers the grid
util-date/ util-rock/ util-connect/ Pure helpers
scripts/ One-off operational scripts
tests/ Jest setup and module mocks
public/ Static assets served at /
Text cells are rich text. Click a cell to edit it and use the formatting bar
above the grid: bold, italic, underline, strikethrough, text and fill colour,
alignment, lists, and clear formatting. Cmd/Ctrl+B, I and U work as usual.
Enter saves the cell, Shift+Enter adds a line inside it, Escape closes it.
Values are stored as a small subset of HTML (src/lib/richText.ts defines the
allowlist). Cells written before this editor used **bold** / ~~italic~~
markers, and those are converted on read, so old runsheets keep their formatting
without a migration. Rock's own ContentChannelItem.Title column is written as
plain text so Rock's admin screens stay readable; the formatted title lives in
the ACTIVITYTITLE attribute.
Person-backed columns (Rock field type 18, plus keys containing PLATFORM,
ANCHOR or PREACHER) stay a people picker rather than a rich-text cell — the
stored value has to remain a resolvable person name.
Each runsheet supports attaching preacher notes (PDFs) uploaded to Rock RMS Asset Manager:
PreacherNotes/<CAMPUS>/, named YYYY-MM-DD <Service Time> <original name>.pdf from the runsheet title (Rock stores spaces as _, e.g. 2026-10-06_7PM_Sermon.pdf). A name Rock already holds gets _2, _3, … Each file is referenced in the channel's PreacherNotes attribute.RunsheetManager lists a fixed set of
channel ids and calls getRockContentChannelOptions() without using the
result. It should instead fetch the runsheet channels the signed-in user can
actually see in Rock. pnpm list:channels is the stopgap for finding ids.rockResolveAccess only resolves
campusIds, so the section helpers in auth0-hooks/server/ always see empty
lists. They are inherited from the Connect portal this app was split out of.rockBulkSaveRunsheetItems issues a handful of Rock
requests per row, so saving a long runsheet takes a few seconds.