TreeMap
A free, open-source disk-space visualizer. Squarified treemap, duplicate hunting, disk-full forecasting, and cleanup that only ever moves files to the Trash.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
Noeis is a four-room knowledge workspace for turning reading into durable understanding and better judgment.
Library grounds what you know, Think is the native notebook, Wiki maintains durable synthesis, and Judgment compounds decisions, outcomes, and lessons.檢視完整 README ↗Noeis is a four-room knowledge workspace for turning reading into durable understanding and better judgment. Library grounds what you know, Think is the native notebook, Wiki maintains durable synthesis, and Judgment compounds decisions, outcomes, and lessons.
Core product flow:
/login, /register) with optional Chrome extension setup/wiki), then move through Library (/library), Think (/think), Wiki, and Judgment (/judgment) without losing source context/settings)Agentic capabilities (optional, human-in-the-loop):
Release design and acceptance details: Noeis four-room implementation plan.
Vectors live in the vectoritems collection on the same Atlas cluster as
everything else — no separate vector database to run or provision. Embeddings
come from OpenRouter (OPENROUTER_API_KEY), the same account as the text model.
First-time setup (idempotent, safe to re-run):
node scripts/create_vector_index.js # builds the Atlas index, polls to READY
node scripts/backfill_embeddings.js --user <id> # or --all-users
GET /health reports vectorIndex.status and vectorIndex.itemCount. A READY
index with zero items means the backfill has not run — it is called out
explicitly there because two previous vector stores emptied themselves in
production without anything noticing.
Endpoints:
GET /api/semantic/related?sourceType=highlight&sourceId=... → { results: [...] }GET /api/highlights/:id/related → { results: [...] }POST /api/semantic/margins { paragraphs, articleId?, excludeHighlightIds? } → { notes: [{ paragraph, relation: 'close', highlight }] } — the closest highlight from another source per paragraph (at most five); empty when nothing is close or no embedding provider is configuredThe backend now records critical product events as JSON lines (default) with pseudonymous user IDs. No highlight text, note content, usernames, or raw queries are logged.
Tracked events:
user_signuphighlight_capturedworkspace_createdcapture_completedconcept_createdrevisit_scheduledsemantic_search_performedai_draft_generatedai_draft_acceptedrelated_highlight_clickedEnvironment variables:
ANALYTICS_ENABLED (default: true)ANALYTICS_LOG_PATH (default: server/logs/product-events.jsonl)ANALYTICS_HASH_SALT (recommended, used to hash user/object ids)POSTHOG_HOST and POSTHOG_PROJECT_API_KEY (optional; if set, events are also mirrored to self-hosted PostHog)POSTHOG_TIMEOUT_MS (default: 3000)The Node API calls OpenRouter directly for both text generation and embeddings.
Without OPENROUTER_API_KEY (or HF_TOKEN for text), AI features stay quiet and
the rest of the app works. Model routes and the remaining knobs are documented in
.env.example.
Agent eval:
npm run agent:eval seeds a small reading library (server/agentEval/library.js), asks the thought partner the questions in server/agentEval/cases.js from the surfaces readers use, and scores each answer. It checks that the right sources were found, that the answer carries their actual words, that it cites only what it used, that it never invents a quotation or answers with a template, and that it says so when the library has nothing.HF_TOKEN or OPENROUTER_API_KEY in .env it measures the model path; without one it measures what readers get when the model is unavailable. modelAnswered in the summary says which.npm run agent:eval:check exits non-zero when any rate falls below server/agentEval/baseline.json. Raise the baseline with -- --update-baseline after an improvement lands.-- --case=summary,hiring --verbose runs selected cases and prints the replies. Reports are written to tmp/agent-eval/.AGENT_EVAL_MONGODB_URI to use a throwaway server instead; it never reads MONGODB_URI.npm run agent:approval-smoke -- --base-url=https://your-api --token=JWT --action=reject creates a real pending memory.commit approval, verifies it is listable, rejects it with an audit note, and writes a JSON report to tmp/agent-approval-smoke-runs. Use --action=approve only when you intentionally want the smoke test to commit working-memory rows.POST /api/agent/memory-approvals stages working-memory updates as memory.commit protocol approvals. Approving the protocol approval executes the commit into WorkingMemoryItem; rejecting it stores the user decision note for audit review.GET /api/agent/write-boundary summarizes the safety split between approved memory commits, pending memory approvals, and staged structure proposals. The Thought Partner panel renders this as a write-boundary card plus a separate Memory approvals review queue.A publish-ready HTML draft for docs.noeis.io lives at:
docs/docs.noeis.io/index.htmlIt documents the current marketing narrative across:
Concepts now persist a document-outline workspace in concept.workspace:
{
"version": 1,
"groups": [
{
"id": "uuid",
"title": "Workspace",
"description": "",
"collapsed": false,
"order": 0
}
],
"items": [
{
"id": "uuid",
"type": "highlight",
"refId": "mongo-object-id",
"groupId": "group-uuid",
"parentId": "",
"order": 0
}
],
"updatedAt": "2026-02-21T00:00:00.000Z"
}
Workspace endpoints (JWT required):
GET /api/concepts/:conceptId/workspace -> returns workspace and lazily initializes default group if missingPUT /api/concepts/:conceptId/workspace -> replaces workspace with validated payloadPATCH /api/concepts/:conceptId/workspace -> applies operation payload { op, payload }POST /api/concepts/:conceptId/agent/build -> runs the library-only concept agent loop. Supports preview: true for confirm-before-apply, and applyPreview: true to apply the latest stored preview.POST /api/concepts/:conceptId/agent/suggest -> generates AI draft suggestions from your library for the concept (library_only)GET /api/concepts/:conceptId/agent/suggestions -> returns active AI-generated draft suggestions (pending + accepted, excluding discarded)POST /api/concepts/:conceptId/agent/suggestions/:draftId/accept -> accepts selected or all pending AI draft suggestions; accepted items are added to workspace InboxPOST /api/concepts/:conceptId/agent/suggestions/:draftId/discard -> discards selected or all pending AI draft suggestionsGET /api/debug/agent-metrics -> returns in-memory observability counters for scout/build and AI upstream outcomesAI draft suggestions are explicitly marked as AI-generated, require user acceptance to enter Inbox, and persist until discarded.
Patch operations:
addGroup, updateGroup, deleteGroupaddItem, moveItem, updateItem, deleteItemThe UI shell now uses a shared token-driven layer across the four primary rooms:
Wiki is the post-login return route (/wiki); Library, Think, Wiki, and Judgment remain persistent primary navigation.AppShell (note-taker-ui/src/layout/AppShell.jsx)TopBar (note-taker-ui/src/layout/TopBar.jsx)RightDrawer (note-taker-ui/src/layout/RightDrawer.jsx)SurfaceCard, PillButton, Chip (note-taker-ui/src/components/ui.js)note-taker-ui/src/styles/dashboard-refresh.cssnote-taker-ui/src/styles/theme.cssnote-taker-ui/src/styles/semantic-theme.cssnote-taker-ui/src/styles/dashboard-refresh.css (--space-*, --radius-*, --surface-*, --text-*)note-taker-ui/src/layout/AppShell.jsxnote-taker-ui/src/layout/LeftNav.jsxnote-taker-ui/src/layout/TopBar.jsxnote-taker-ui/src/layout/RightDrawer.jsxnote-taker-ui/src/pages/ThinkMode.jsxnote-taker-ui/src/components/think/ThinkHome.jsxdocs/ui-regression/think-home-baseline.mdnote-taker-ui/src/styles/think-home-polish.css