All checks were successful
CI/CD / detect-changes (pull_request) Successful in 22s
CI/CD / test-frontend (pull_request) Successful in 5s
CI/CD / test-go-pg (pull_request) Successful in 2m48s
CI/CD / test-sqlite (pull_request) Successful in 3m5s
CI/CD / build-and-deploy (pull_request) Successful in 2m29s
Canvas force-directed graph view for notes surface. GET /graph API endpoint returns all non-archived notes as nodes (with tags) and resolved wikilinks as edges. Force simulation with repulsion, attraction, and center gravity. Click focus dims unconnected nodes, shift+click chains neighborhoods, double-click opens note. Hover tooltips show title, tags, and connection count. Nodes colored by folder (10-color palette), tag filter dims non-matching. Orphan nodes shown with dashed stroke and hide toggle. Zoom/pan via scroll wheel and mouse drag. Retina-aware canvas rendering with CSS variable resolution via getComputedStyle. Notes package 0.7.0 → 0.8.0. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
105 lines
2.6 KiB
JSON
105 lines
2.6 KiB
JSON
{
|
|
"id": "notes",
|
|
"title": "Notes",
|
|
"type": "full",
|
|
"tier": "starlark",
|
|
"route": "/s/notes",
|
|
"auth": "authenticated",
|
|
"layout": "single",
|
|
"version": "0.8.0",
|
|
"icon": "📝",
|
|
"description": "Markdown notes surface with rich editor, folders, tags, backlinks, import/export, sidebar tabs, document outline, and note graph.",
|
|
"author": "switchboard",
|
|
|
|
"permissions": ["db.write"],
|
|
|
|
"api_routes": [
|
|
{"method": "GET", "path": "/notes"},
|
|
{"method": "POST", "path": "/notes"},
|
|
{"method": "GET", "path": "/notes/*"},
|
|
{"method": "PUT", "path": "/notes/*"},
|
|
{"method": "DELETE", "path": "/notes/*"},
|
|
{"method": "GET", "path": "/search"},
|
|
{"method": "GET", "path": "/stats"},
|
|
{"method": "GET", "path": "/graph"},
|
|
{"method": "GET", "path": "/folders"},
|
|
{"method": "POST", "path": "/folders"},
|
|
{"method": "PUT", "path": "/folders/*"},
|
|
{"method": "DELETE", "path": "/folders/*"},
|
|
{"method": "POST", "path": "/notes/move"},
|
|
{"method": "GET", "path": "/tags"},
|
|
{"method": "GET", "path": "/tags/*"},
|
|
{"method": "PUT", "path": "/tags/*"},
|
|
{"method": "GET", "path": "/links/*"},
|
|
{"method": "GET", "path": "/backlinks/*"}
|
|
],
|
|
|
|
"db_tables": {
|
|
"notes": {
|
|
"columns": {
|
|
"title": "text",
|
|
"body": "text",
|
|
"folder_id": "text",
|
|
"creator_id": "text",
|
|
"updated_at": "text",
|
|
"pinned": "int",
|
|
"archived": "int"
|
|
},
|
|
"indexes": [
|
|
["folder_id"],
|
|
["creator_id"],
|
|
["pinned"],
|
|
["updated_at"]
|
|
]
|
|
},
|
|
"tags": {
|
|
"columns": {
|
|
"note_id": "text",
|
|
"tag": "text"
|
|
},
|
|
"indexes": [
|
|
["note_id"],
|
|
["tag"]
|
|
]
|
|
},
|
|
"links": {
|
|
"columns": {
|
|
"source_id": "text",
|
|
"target_id": "text",
|
|
"link_text": "text"
|
|
},
|
|
"indexes": [
|
|
["source_id"],
|
|
["target_id"]
|
|
]
|
|
},
|
|
"folders": {
|
|
"columns": {
|
|
"name": "text",
|
|
"parent_id": "text",
|
|
"creator_id": "text",
|
|
"sort_order": "int"
|
|
},
|
|
"indexes": [
|
|
["parent_id"],
|
|
["creator_id"]
|
|
]
|
|
}
|
|
},
|
|
|
|
"settings": {
|
|
"default_view": {
|
|
"type": "string",
|
|
"label": "Default View",
|
|
"description": "Default note list view: recent or pinned",
|
|
"default": "recent"
|
|
},
|
|
"editor_mode": {
|
|
"type": "string",
|
|
"label": "Default Editor Mode",
|
|
"description": "How notes open: rendered (read-only preview), edit (CodeMirror editor), or split (side-by-side)",
|
|
"default": "rendered"
|
|
}
|
|
}
|
|
}
|