Files
flowdeck/.ua/fingerprints.json
bruno 3ed2181e89
FlowDeck CI / test (push) Failing after 5s
FlowDeck CI / docker (push) Has been skipped
feat: add Understand-Anything knowledge graph for FlowDeck
- 267 nodes, 518 edges across 9 architectural layers
- 13-step guided tour in French
- 9 languages detected (Python, JavaScript, HTML, CSS, YAML, JSON, Markdown, Dockerfile, TOML)
- 6 frameworks (FastAPI, Pydantic, Uvicorn, pytest, Docker, Docker Compose)
- Generated via Understand-Anything multi-agent pipeline
2026-07-10 08:56:28 -04:00

4098 lines
93 KiB
JSON

{
"version": "1.0.0",
"gitCommitHash": "c86c04ca220672fb012bb69916e930102be44ef4",
"generatedAt": "2026-07-10T12:53:39.706Z",
"files": {
".dockerignore": {
"filePath": ".dockerignore",
"contentHash": "72d51e57c64e7583ccb9b122eca019a2a4e49244463af8d4adf6342ac4739047",
"functions": [],
"classes": [],
"imports": [],
"exports": [],
"totalLines": 17,
"hasStructuralAnalysis": false
},
".env.example": {
"filePath": ".env.example",
"contentHash": "8e05f50c3676e3d6bc2d2eb5baff7308efa83e6563a074562dc0b10f6a3f6621",
"functions": [],
"classes": [],
"imports": [],
"exports": [],
"totalLines": 23,
"hasStructuralAnalysis": true
},
".gitea/workflows/ci.yml": {
"filePath": ".gitea/workflows/ci.yml",
"contentHash": "1e72222548adfad22b442eae11a55041dc6de667741b131cd060e08fd26fb7ed",
"functions": [],
"classes": [],
"imports": [],
"exports": [],
"totalLines": 36,
"hasStructuralAnalysis": true
},
".ua/.understandignore": {
"filePath": ".ua/.understandignore",
"contentHash": "27a2034ecb02b6e160e33cc37257d2492552856f76550bd3c91af50e61a2d79f",
"functions": [],
"classes": [],
"imports": [],
"exports": [],
"totalLines": 53,
"hasStructuralAnalysis": false
},
".ua/config.json": {
"filePath": ".ua/config.json",
"contentHash": "3a60666fa673e1d392185dec6f91c716860a481acd510ac86736cd6c832e2809",
"functions": [],
"classes": [],
"imports": [],
"exports": [],
"totalLines": 2,
"hasStructuralAnalysis": true
},
"app/__init__.py": {
"filePath": "app/__init__.py",
"contentHash": "abf9e17668dd6c771481dd5daf0f0439a3bba0be70165baa09ae1a9c82380112",
"functions": [],
"classes": [],
"imports": [],
"exports": [],
"totalLines": 2,
"hasStructuralAnalysis": true
},
"app/auth/__init__.py": {
"filePath": "app/auth/__init__.py",
"contentHash": "9b2c4beedc2273bdd8c348b6f7247fe5fa7b722dc5617006a291048973a76843",
"functions": [],
"classes": [],
"imports": [
{
"source": "app.auth.oauth",
"specifiers": [
"GiteaOAuth"
]
},
{
"source": "app.auth.session",
"specifiers": [
"SessionManager",
"get_current_user"
]
}
],
"exports": [],
"totalLines": 4,
"hasStructuralAnalysis": true
},
"app/auth/oauth.py": {
"filePath": "app/auth/oauth.py",
"contentHash": "62fca284b1c19a1513ec58cd4b8960eac1b4d14e5b5e9802480608fe406d4e4f",
"functions": [],
"classes": [
{
"name": "GiteaOAuth",
"methods": [
"__init__",
"enabled",
"get_authorize_url",
"exchange_code",
"get_user"
],
"properties": [],
"exported": true,
"lineCount": 60
}
],
"imports": [
{
"source": "logging",
"specifiers": [
"logging"
]
},
{
"source": "urllib.parse",
"specifiers": [
"urlencode"
]
},
{
"source": "httpx",
"specifiers": [
"httpx"
]
},
{
"source": "app.config",
"specifiers": [
"settings"
]
}
],
"exports": [
"GiteaOAuth"
],
"totalLines": 78,
"hasStructuralAnalysis": true
},
"app/auth/session.py": {
"filePath": "app/auth/session.py",
"contentHash": "1706b71bfa6546d954796e4444c3410dcd70d62c221441c36318fbece0fe487a",
"functions": [
{
"name": "get_current_user",
"params": [
"request"
],
"returnType": "dict | None",
"exported": true,
"lineCount": 7
}
],
"classes": [
{
"name": "SessionManager",
"methods": [
"create_session",
"decode_session",
"store_token",
"get_token"
],
"properties": [],
"exported": true,
"lineCount": 45
}
],
"imports": [
{
"source": "json",
"specifiers": [
"json"
]
},
{
"source": "datetime",
"specifiers": [
"datetime",
"timedelta"
]
},
{
"source": "itsdangerous",
"specifiers": [
"URLSafeTimedSerializer",
"BadSignature",
"SignatureExpired"
]
},
{
"source": "app.config",
"specifiers": [
"settings"
]
}
],
"exports": [
"SessionManager",
"get_current_user"
],
"totalLines": 69,
"hasStructuralAnalysis": true
},
"app/config.py": {
"filePath": "app/config.py",
"contentHash": "dd5a86aae2cd722b90028f2d3fa8ad6afc21aacfe92ad3b2a15506463ce7f8fa",
"functions": [],
"classes": [
{
"name": "Settings",
"methods": [
"db_path"
],
"properties": [
"gitea_url",
"gitea_token",
"gitea_oauth_client_id",
"gitea_oauth_client_secret",
"gitea_webhook_secret",
"oauth_redirect_uri",
"webhook_base_url",
"app_secret_key",
"app_host",
"app_port",
"log_level",
"default_lang",
"rate_limit_enabled",
"rate_limit_requests",
"database_url",
"sync_interval",
"gitea_cache_ttl"
],
"exported": true,
"lineCount": 43
}
],
"imports": [
{
"source": "pathlib",
"specifiers": [
"Path"
]
},
{
"source": "pydantic_settings",
"specifiers": [
"BaseSettings",
"SettingsConfigDict"
]
}
],
"exports": [
"Settings"
],
"totalLines": 54,
"hasStructuralAnalysis": true
},
"app/db.py": {
"filePath": "app/db.py",
"contentHash": "7354c63a66ecc73a9228816edeaef575e85492b0a13e8a273ad123a6e63d5e58",
"functions": [
{
"name": "get_db_path",
"params": [],
"returnType": "Path",
"exported": true,
"lineCount": 3
},
{
"name": "init_db",
"params": [],
"exported": true,
"lineCount": 282
},
{
"name": "get_conn",
"params": [],
"exported": true,
"lineCount": 11
}
],
"classes": [],
"imports": [
{
"source": "sqlite3",
"specifiers": [
"sqlite3"
]
},
{
"source": "contextlib",
"specifiers": [
"contextmanager"
]
},
{
"source": "pathlib",
"specifiers": [
"Path"
]
}
],
"exports": [
"get_db_path",
"init_db",
"get_conn"
],
"totalLines": 310,
"hasStructuralAnalysis": true
},
"app/main.py": {
"filePath": "app/main.py",
"contentHash": "6ce18cabb0f092319d7657ad2ca7a39b2ab40d215edb8e85b3f748b86de8fd14",
"functions": [
{
"name": "lifespan",
"params": [
"_app"
],
"exported": true,
"lineCount": 11
},
{
"name": "pwa_manifest",
"params": [],
"exported": true,
"lineCount": 10
}
],
"classes": [],
"imports": [
{
"source": "logging",
"specifiers": [
"logging"
]
},
{
"source": "contextlib",
"specifiers": [
"asynccontextmanager"
]
},
{
"source": "fastapi",
"specifiers": [
"FastAPI"
]
},
{
"source": "fastapi.staticfiles",
"specifiers": [
"StaticFiles"
]
},
{
"source": "fastapi.middleware.cors",
"specifiers": [
"CORSMiddleware"
]
},
{
"source": "starlette.middleware.sessions",
"specifiers": [
"SessionMiddleware"
]
},
{
"source": "app.config",
"specifiers": [
"settings"
]
},
{
"source": "app.db",
"specifiers": [
"init_db"
]
},
{
"source": "app.middleware.csrf",
"specifiers": [
"CSRFMiddleware"
]
},
{
"source": "app.routers",
"specifiers": [
"dashboard",
"board",
"notes",
"api",
"auth",
"webhooks",
"collections",
"my_tasks",
"workspace",
"public_api"
]
},
{
"source": "app.services.gitea_client",
"specifiers": [
"gitea"
]
},
{
"source": "app.services.webhook_outbound",
"specifiers": [
"init_webhook_tables"
]
}
],
"exports": [
"lifespan",
"pwa_manifest"
],
"totalLines": 77,
"hasStructuralAnalysis": true
},
"app/middleware/__init__.py": {
"filePath": "app/middleware/__init__.py",
"contentHash": "e060b3e6ddbe46184e17ae08884508acbaa45cf80549b91c91bd592d0005c752",
"functions": [],
"classes": [],
"imports": [
{
"source": "app.middleware.csrf",
"specifiers": [
"CSRFMiddleware"
]
}
],
"exports": [],
"totalLines": 3,
"hasStructuralAnalysis": true
},
"app/middleware/csrf.py": {
"filePath": "app/middleware/csrf.py",
"contentHash": "41736bde320c1ceee4c6ff698da74b52017008935762a26ff045722eaa46dd35",
"functions": [],
"classes": [
{
"name": "CSRFMiddleware",
"methods": [
"dispatch"
],
"properties": [],
"exported": true,
"lineCount": 39
}
],
"imports": [
{
"source": "secrets",
"specifiers": [
"secrets"
]
},
{
"source": "starlette.middleware.base",
"specifiers": [
"BaseHTTPMiddleware"
]
},
{
"source": "starlette.responses",
"specifiers": [
"JSONResponse"
]
},
{
"source": "starlette.requests",
"specifiers": [
"Request"
]
}
],
"exports": [
"CSRFMiddleware"
],
"totalLines": 50,
"hasStructuralAnalysis": true
},
"app/models/__init__.py": {
"filePath": "app/models/__init__.py",
"contentHash": "2d9800f0c58ae44cf71f439e9d8dd635bac5d9ee89d378f574b8e30b1641dcb9",
"functions": [],
"classes": [],
"imports": [],
"exports": [],
"totalLines": 2,
"hasStructuralAnalysis": true
},
"app/routers/__init__.py": {
"filePath": "app/routers/__init__.py",
"contentHash": "953cd8e76e85d3d0a12706d5531ce1e6579db58b44329dd7d0859f543d747622",
"functions": [],
"classes": [],
"imports": [],
"exports": [],
"totalLines": 2,
"hasStructuralAnalysis": true
},
"app/routers/api.py": {
"filePath": "app/routers/api.py",
"contentHash": "190f5c8953d8cf4b8cff28c0ab31b57110956d47c301655c09326b79c6586c2d",
"functions": [
{
"name": "_check_rate_limit",
"params": [
"request"
],
"returnType": "bool",
"exported": true,
"lineCount": 14
},
{
"name": "health",
"params": [],
"exported": true,
"lineCount": 22
},
{
"name": "stats",
"params": [],
"exported": true,
"lineCount": 14
},
{
"name": "projects",
"params": [
"search",
"show_archived"
],
"exported": true,
"lineCount": 13
},
{
"name": "move_card",
"params": [
"request",
"owner",
"repo",
"issue_id",
"column"
],
"exported": true,
"lineCount": 67
},
{
"name": "_get_status_labels",
"params": [
"owner",
"repo",
"board_id"
],
"returnType": "list[str]",
"exported": true,
"lineCount": 7
},
{
"name": "set_col_mapping",
"params": [
"owner",
"repo",
"column",
"gitea_label",
"close_issue"
],
"exported": true,
"lineCount": 27
},
{
"name": "delete_col_mapping",
"params": [
"owner",
"repo",
"column"
],
"exported": true,
"lineCount": 22
},
{
"name": "get_board_config",
"params": [
"owner",
"repo"
],
"exported": true,
"lineCount": 18
},
{
"name": "update_board_config",
"params": [
"owner",
"repo",
"columns",
"wip_limits"
],
"exported": true,
"lineCount": 23
},
{
"name": "create_issue",
"params": [
"request",
"owner",
"repo",
"title",
"body",
"labels",
"milestone",
"assignee"
],
"exported": true,
"lineCount": 38
},
{
"name": "update_issue_api",
"params": [
"request",
"owner",
"repo",
"issue_id",
"title",
"body",
"state",
"labels",
"milestone",
"assignee"
],
"exported": true,
"lineCount": 55
},
{
"name": "get_issue_detail",
"params": [
"owner",
"repo",
"issue_id",
"format"
],
"exported": true,
"lineCount": 70
},
{
"name": "create_checklist",
"params": [
"owner",
"repo",
"issue_id",
"title"
],
"exported": true,
"lineCount": 21
},
{
"name": "add_checklist_item",
"params": [
"owner",
"repo",
"issue_id",
"checklist_id",
"content"
],
"exported": true,
"lineCount": 15
},
{
"name": "toggle_checklist_item",
"params": [
"item_id",
"checked",
"content"
],
"exported": true,
"lineCount": 19
},
{
"name": "delete_checklist_item",
"params": [
"item_id"
],
"exported": true,
"lineCount": 6
},
{
"name": "delete_checklist",
"params": [
"checklist_id"
],
"exported": true,
"lineCount": 7
},
{
"name": "get_my_profile",
"params": [
"request"
],
"exported": true,
"lineCount": 12
},
{
"name": "update_my_profile",
"params": [
"request",
"full_name",
"email"
],
"exported": true,
"lineCount": 14
},
{
"name": "update_card",
"params": [
"owner",
"repo",
"issue_id",
"priority",
"due_date"
],
"exported": true,
"lineCount": 35
},
{
"name": "get_collaborators",
"params": [
"owner",
"repo"
],
"exported": true,
"lineCount": 7
}
],
"classes": [],
"imports": [
{
"source": "json",
"specifiers": [
"json"
]
},
{
"source": "logging",
"specifiers": [
"logging"
]
},
{
"source": "datetime",
"specifiers": [
"datetime"
]
},
{
"source": "typing",
"specifiers": [
"Optional"
]
},
{
"source": "fastapi",
"specifiers": [
"APIRouter",
"HTTPException",
"Query",
"Request"
]
},
{
"source": "fastapi.responses",
"specifiers": [
"HTMLResponse"
]
},
{
"source": "app.config",
"specifiers": [
"settings"
]
},
{
"source": "app.db",
"specifiers": [
"get_conn"
]
},
{
"source": "app.routers.board",
"specifiers": [
"_issue_column",
"_map_issue_to_card",
"STATUS_COLORS",
"STATUS_LABELS"
]
},
{
"source": "app.services.gitea_client",
"specifiers": [
"gitea"
]
},
{
"source": "app.auth.session",
"specifiers": [
"SessionManager"
]
}
],
"exports": [
"_check_rate_limit",
"health",
"stats",
"projects",
"move_card",
"_get_status_labels",
"set_col_mapping",
"delete_col_mapping",
"get_board_config",
"update_board_config",
"create_issue",
"update_issue_api",
"get_issue_detail",
"create_checklist",
"add_checklist_item",
"toggle_checklist_item",
"delete_checklist_item",
"delete_checklist",
"get_my_profile",
"update_my_profile",
"update_card",
"get_collaborators"
],
"totalLines": 626,
"hasStructuralAnalysis": true
},
"app/routers/auth.py": {
"filePath": "app/routers/auth.py",
"contentHash": "dd2bf3c70d14fd200aa1dc2e61db0336f9d9f8a6c0f802dcd858413dcc7ee9dc",
"functions": [
{
"name": "login",
"params": [
"request"
],
"exported": true,
"lineCount": 21
},
{
"name": "callback",
"params": [
"request",
"code",
"state"
],
"exported": true,
"lineCount": 50
},
{
"name": "logout",
"params": [],
"exported": true,
"lineCount": 5
},
{
"name": "current_user",
"params": [
"request"
],
"exported": true,
"lineCount": 7
}
],
"classes": [],
"imports": [
{
"source": "logging",
"specifiers": [
"logging"
]
},
{
"source": "secrets",
"specifiers": [
"secrets"
]
},
{
"source": "fastapi",
"specifiers": [
"APIRouter",
"Request",
"Query"
]
},
{
"source": "fastapi.responses",
"specifiers": [
"RedirectResponse",
"HTMLResponse"
]
},
{
"source": "app.auth.session",
"specifiers": [
"SessionManager"
]
},
{
"source": "app.auth.oauth",
"specifiers": [
"gitea_oauth"
]
},
{
"source": "app.config",
"specifiers": [
"settings"
]
}
],
"exports": [
"login",
"callback",
"logout",
"current_user"
],
"totalLines": 111,
"hasStructuralAnalysis": true
},
"app/routers/board.py": {
"filePath": "app/routers/board.py",
"contentHash": "5d076489d2b006a63393cc9e8e1e33c7400192ace26b039ad32e33f8fbafc67a",
"functions": [
{
"name": "_issue_column",
"params": [
"issue",
"columns",
"board_id"
],
"returnType": "str",
"exported": true,
"lineCount": 12
},
{
"name": "_map_issue_to_card",
"params": [
"issue",
"owner",
"repo"
],
"returnType": "dict",
"exported": true,
"lineCount": 75
},
{
"name": "_build_page_tree",
"params": [
"conn",
"parent_id",
"ws_key",
"depth",
"max_depth"
],
"returnType": "list[dict]",
"exported": true,
"lineCount": 23
},
{
"name": "_sidebar_data",
"params": [
"request",
"owner",
"repo"
],
"returnType": "dict",
"exported": true,
"lineCount": 34
},
{
"name": "_extract_ai_keywords",
"params": [
"owner",
"repo",
"labels",
"body"
],
"exported": true,
"lineCount": 32
},
{
"name": "_get_project_properties",
"params": [
"owner",
"repo"
],
"returnType": "list[dict]",
"exported": true,
"lineCount": 7
},
{
"name": "_get_dynamic_groups",
"params": [
"owner",
"repo"
],
"returnType": "list[str]",
"exported": true,
"lineCount": 9
},
{
"name": "asyncio_get_labels",
"params": [
"owner",
"repo"
],
"exported": true,
"lineCount": 2
},
{
"name": "_apply_filters",
"params": [
"cards",
"status_filter",
"filters"
],
"returnType": "list[dict]",
"exported": true,
"lineCount": 16
},
{
"name": "_apply_sorts",
"params": [
"cards",
"sorts"
],
"returnType": "list[dict]",
"exported": true,
"lineCount": 18
},
{
"name": "library_page",
"params": [
"request"
],
"exported": true,
"lineCount": 12
},
{
"name": "list_trash",
"params": [
"request"
],
"exported": true,
"lineCount": 4
},
{
"name": "restore_page",
"params": [
"request",
"page_id"
],
"exported": true,
"lineCount": 5
},
{
"name": "permanent_delete",
"params": [
"request",
"page_id"
],
"exported": true,
"lineCount": 6
},
{
"name": "trash_page",
"params": [
"request"
],
"exported": true,
"lineCount": 5
},
{
"name": "board",
"params": [
"request",
"owner",
"repo",
"view"
],
"exported": true,
"lineCount": 7
},
{
"name": "board_view",
"params": [
"request",
"owner",
"repo",
"view",
"status",
"filter",
"sort"
],
"exported": true,
"lineCount": 72
},
{
"name": "get_properties",
"params": [
"owner",
"repo"
],
"exported": true,
"lineCount": 2
},
{
"name": "create_property",
"params": [
"owner",
"repo",
"name",
"prop_type",
"options"
],
"exported": true,
"lineCount": 14
},
{
"name": "delete_property",
"params": [
"owner",
"repo",
"name"
],
"exported": true,
"lineCount": 8
},
{
"name": "set_property_value",
"params": [
"owner",
"repo",
"issue_id",
"name",
"value"
],
"exported": true,
"lineCount": 15
},
{
"name": "get_ai_keywords",
"params": [
"owner",
"repo"
],
"exported": true,
"lineCount": 7
},
{
"name": "extract_ai_keywords",
"params": [
"owner",
"repo"
],
"exported": true,
"lineCount": 10
},
{
"name": "create_page",
"params": [
"request",
"title",
"section",
"project",
"parent_id"
],
"exported": true,
"lineCount": 24
},
{
"name": "get_page",
"params": [
"page_id"
],
"exported": true,
"lineCount": 7
},
{
"name": "update_page",
"params": [
"request",
"page_id",
"title",
"content",
"content_format"
],
"exported": true,
"lineCount": 13
},
{
"name": "save_page_blocks",
"params": [
"request",
"page_id"
],
"exported": true,
"lineCount": 17
},
{
"name": "move_page",
"params": [
"request",
"page_id",
"new_parent_id",
"new_order"
],
"exported": true,
"lineCount": 36
},
{
"name": "delete_page",
"params": [
"request",
"page_id"
],
"exported": true,
"lineCount": 10
},
{
"name": "view_page",
"params": [
"request",
"page_id"
],
"exported": true,
"lineCount": 12
},
{
"name": "sync_project",
"params": [
"owner",
"repo"
],
"exported": true,
"lineCount": 25
}
],
"classes": [],
"imports": [
{
"source": "json",
"specifiers": [
"json"
]
},
{
"source": "logging",
"specifiers": [
"logging"
]
},
{
"source": "fastapi",
"specifiers": [
"APIRouter",
"Request",
"HTTPException",
"Query"
]
},
{
"source": "fastapi.responses",
"specifiers": [
"HTMLResponse"
]
},
{
"source": "app.db",
"specifiers": [
"get_conn"
]
},
{
"source": "app.services.gitea_client",
"specifiers": [
"gitea"
]
},
{
"source": "app.auth.session",
"specifiers": [
"SessionManager"
]
}
],
"exports": [
"_issue_column",
"_map_issue_to_card",
"_build_page_tree",
"_sidebar_data",
"_extract_ai_keywords",
"_get_project_properties",
"_get_dynamic_groups",
"asyncio_get_labels",
"_apply_filters",
"_apply_sorts",
"library_page",
"list_trash",
"restore_page",
"permanent_delete",
"trash_page",
"board",
"board_view",
"get_properties",
"create_property",
"delete_property",
"set_property_value",
"get_ai_keywords",
"extract_ai_keywords",
"create_page",
"get_page",
"update_page",
"save_page_blocks",
"move_page",
"delete_page",
"view_page",
"sync_project"
],
"totalLines": 659,
"hasStructuralAnalysis": true
},
"app/routers/collections.py": {
"filePath": "app/routers/collections.py",
"contentHash": "0f3a77021db14d77bb564b7d63d512f6ea543d9ece63ee5b3132b7b81c07ea80",
"functions": [
{
"name": "list_collections",
"params": [
"request"
],
"exported": true,
"lineCount": 13
},
{
"name": "list_collections_api",
"params": [
"request"
],
"exported": true,
"lineCount": 7
},
{
"name": "create_collection_api",
"params": [
"request"
],
"exported": true,
"lineCount": 40
},
{
"name": "update_collection_api",
"params": [
"request",
"collection_id"
],
"exported": true,
"lineCount": 32
},
{
"name": "delete_collection_api",
"params": [
"request",
"collection_id"
],
"exported": true,
"lineCount": 13
},
{
"name": "get_page_api",
"params": [
"request",
"page_id"
],
"exported": true,
"lineCount": 10
},
{
"name": "update_page_api",
"params": [
"request",
"page_id"
],
"exported": true,
"lineCount": 32
},
{
"name": "delete_page_api",
"params": [
"request",
"page_id"
],
"exported": true,
"lineCount": 13
},
{
"name": "list_boards_as_collections",
"params": [
"request"
],
"exported": true,
"lineCount": 5
},
{
"name": "get_board_as_collection",
"params": [
"request",
"owner",
"repo"
],
"exported": true,
"lineCount": 12
},
{
"name": "sync_board_to_collection",
"params": [
"request",
"owner",
"repo"
],
"exported": true,
"lineCount": 11
},
{
"name": "list_property_types_api",
"params": [
"request"
],
"exported": true,
"lineCount": 4
},
{
"name": "list_properties_api",
"params": [
"request",
"collection_id"
],
"exported": true,
"lineCount": 11
},
{
"name": "create_property_api",
"params": [
"request",
"collection_id"
],
"exported": true,
"lineCount": 40
},
{
"name": "update_property_api",
"params": [
"request",
"prop_id"
],
"exported": true,
"lineCount": 29
},
{
"name": "delete_property_api",
"params": [
"request",
"prop_id"
],
"exported": true,
"lineCount": 12
},
{
"name": "create_relation_property",
"params": [
"request",
"collection_id"
],
"exported": true,
"lineCount": 49
},
{
"name": "link_pages",
"params": [
"request",
"collection_id"
],
"exported": true,
"lineCount": 71
},
{
"name": "compute_rollup",
"params": [
"request"
],
"exported": true,
"lineCount": 23
},
{
"name": "evaluate_formula",
"params": [
"request"
],
"exported": true,
"lineCount": 18
},
{
"name": "get_view_api",
"params": [
"request",
"view_id"
],
"exported": true,
"lineCount": 7
},
{
"name": "update_view_config",
"params": [
"request",
"view_id"
],
"exported": true,
"lineCount": 25
},
{
"name": "save_view_as",
"params": [
"request",
"collection_id"
],
"exported": true,
"lineCount": 27
},
{
"name": "list_views_api",
"params": [
"request",
"collection_id"
],
"exported": true,
"lineCount": 8
},
{
"name": "list_sub_items",
"params": [
"request",
"collection_id",
"page_id"
],
"exported": true,
"lineCount": 8
},
{
"name": "create_sub_item",
"params": [
"request",
"collection_id",
"page_id"
],
"exported": true,
"lineCount": 28
},
{
"name": "aggregate_child_status",
"params": [
"request",
"collection_id",
"page_id"
],
"exported": true,
"lineCount": 21
},
{
"name": "set_dependencies",
"params": [
"request",
"collection_id",
"page_id"
],
"exported": true,
"lineCount": 24
},
{
"name": "check_dependencies",
"params": [
"request",
"collection_id",
"page_id"
],
"exported": true,
"lineCount": 42
},
{
"name": "view_collection",
"params": [
"request",
"collection_id",
"view_type"
],
"exported": true,
"lineCount": 24
},
{
"name": "_render_view",
"params": [
"view_type",
"collection",
"pages",
"config"
],
"returnType": "str",
"exported": true,
"lineCount": 11
},
{
"name": "_base_html",
"params": [
"title",
"icon",
"view_type",
"body"
],
"returnType": "str",
"exported": true,
"lineCount": 21
},
{
"name": "_render_calendar",
"params": [
"view_type",
"collection",
"pages",
"config"
],
"returnType": "str",
"exported": true,
"lineCount": 65
},
{
"name": "_render_gallery",
"params": [
"view_type",
"collection",
"pages",
"config"
],
"returnType": "str",
"exported": true,
"lineCount": 44
},
{
"name": "_render_list",
"params": [
"view_type",
"collection",
"pages",
"config"
],
"returnType": "str",
"exported": true,
"lineCount": 25
},
{
"name": "_render_timeline",
"params": [
"view_type",
"collection",
"pages",
"config"
],
"returnType": "str",
"exported": true,
"lineCount": 57
},
{
"name": "_render_table",
"params": [
"view_type",
"collection",
"pages",
"config"
],
"returnType": "str",
"exported": true,
"lineCount": 17
},
{
"name": "get_collection_api",
"params": [
"request",
"collection_id"
],
"exported": true,
"lineCount": 23
},
{
"name": "create_page_api",
"params": [
"request",
"collection_id"
],
"exported": true,
"lineCount": 36
}
],
"classes": [],
"imports": [
{
"source": "json",
"specifiers": [
"json"
]
},
{
"source": "logging",
"specifiers": [
"logging"
]
},
{
"source": "fastapi",
"specifiers": [
"APIRouter",
"Request",
"HTTPException",
"Query"
]
},
{
"source": "fastapi.responses",
"specifiers": [
"HTMLResponse"
]
},
{
"source": "app.db",
"specifiers": [
"get_conn"
]
},
{
"source": "app.auth.session",
"specifiers": [
"SessionManager"
]
}
],
"exports": [
"list_collections",
"list_collections_api",
"create_collection_api",
"update_collection_api",
"delete_collection_api",
"get_page_api",
"update_page_api",
"delete_page_api",
"list_boards_as_collections",
"get_board_as_collection",
"sync_board_to_collection",
"list_property_types_api",
"list_properties_api",
"create_property_api",
"update_property_api",
"delete_property_api",
"create_relation_property",
"link_pages",
"compute_rollup",
"evaluate_formula",
"get_view_api",
"update_view_config",
"save_view_as",
"list_views_api",
"list_sub_items",
"create_sub_item",
"aggregate_child_status",
"set_dependencies",
"check_dependencies",
"view_collection",
"_render_view",
"_base_html",
"_render_calendar",
"_render_gallery",
"_render_list",
"_render_timeline",
"_render_table",
"get_collection_api",
"create_page_api"
],
"totalLines": 1113,
"hasStructuralAnalysis": true
},
"app/routers/dashboard.py": {
"filePath": "app/routers/dashboard.py",
"contentHash": "74e1b45a18bef8d9fbf8ca738824c05db325a726ef5c3f4b46f7caa5922fe946",
"functions": [
{
"name": "_sidebar_data",
"params": [
"request",
"repos"
],
"returnType": "dict",
"exported": true,
"lineCount": 29
},
{
"name": "trash_page",
"params": [
"request"
],
"exported": true,
"lineCount": 7
},
{
"name": "library_page",
"params": [
"request"
],
"exported": true,
"lineCount": 10
},
{
"name": "view_page_root",
"params": [
"request",
"page_id"
],
"exported": true,
"lineCount": 23
},
{
"name": "accounts_page",
"params": [
"request"
],
"exported": true,
"lineCount": 11
},
{
"name": "dashboard",
"params": [
"request",
"search",
"show_archived"
],
"exported": true,
"lineCount": 24
}
],
"classes": [],
"imports": [
{
"source": "logging",
"specifiers": [
"logging"
]
},
{
"source": "fastapi",
"specifiers": [
"APIRouter",
"Request",
"Query"
]
},
{
"source": "fastapi.responses",
"specifiers": [
"HTMLResponse"
]
},
{
"source": "app.services.gitea_client",
"specifiers": [
"gitea"
]
},
{
"source": "app.auth.session",
"specifiers": [
"SessionManager"
]
},
{
"source": "app.db",
"specifiers": [
"get_conn"
]
}
],
"exports": [
"_sidebar_data",
"trash_page",
"library_page",
"view_page_root",
"accounts_page",
"dashboard"
],
"totalLines": 136,
"hasStructuralAnalysis": true
},
"app/routers/my_tasks.py": {
"filePath": "app/routers/my_tasks.py",
"contentHash": "204729bdd7ae5916255228c7a5b51a35176b673fb09dc95003a6c80b44feb04f",
"functions": [
{
"name": "_get_current_user",
"params": [
"request"
],
"returnType": "dict | None",
"exported": true,
"lineCount": 3
},
{
"name": "my_tasks_dashboard",
"params": [
"request",
"view",
"days"
],
"exported": true,
"lineCount": 126
},
{
"name": "my_tasks_api",
"params": [
"request",
"view",
"days"
],
"exported": true,
"lineCount": 27
}
],
"classes": [],
"imports": [
{
"source": "json",
"specifiers": [
"json"
]
},
{
"source": "logging",
"specifiers": [
"logging"
]
},
{
"source": "fastapi",
"specifiers": [
"APIRouter",
"Request",
"HTTPException",
"Query"
]
},
{
"source": "fastapi.responses",
"specifiers": [
"HTMLResponse"
]
},
{
"source": "app.db",
"specifiers": [
"get_conn"
]
},
{
"source": "app.auth.session",
"specifiers": [
"SessionManager"
]
}
],
"exports": [
"_get_current_user",
"my_tasks_dashboard",
"my_tasks_api"
],
"totalLines": 179,
"hasStructuralAnalysis": true
},
"app/routers/notes.py": {
"filePath": "app/routers/notes.py",
"contentHash": "a6bba0b09eb6957cbb4fc6b1e26b722414a9f3a91477fd917b896b6e2f715cd3",
"functions": [
{
"name": "get_notes",
"params": [
"request",
"owner",
"repo"
],
"exported": true,
"lineCount": 14
},
{
"name": "save_notes",
"params": [
"request",
"owner",
"repo"
],
"exported": true,
"lineCount": 20
}
],
"classes": [],
"imports": [
{
"source": "logging",
"specifiers": [
"logging"
]
},
{
"source": "fastapi",
"specifiers": [
"APIRouter",
"Request"
]
},
{
"source": "fastapi.responses",
"specifiers": [
"HTMLResponse"
]
},
{
"source": "app.db",
"specifiers": [
"get_conn"
]
}
],
"exports": [
"get_notes",
"save_notes"
],
"totalLines": 53,
"hasStructuralAnalysis": true
},
"app/routers/public_api.py": {
"filePath": "app/routers/public_api.py",
"contentHash": "5b1cccebb692285c4a8d2df1f18aa9bc5e8d3a2b07efa99f1609fc21ec4676e2",
"functions": [
{
"name": "verify_token",
"params": [
"authorization"
],
"exported": true,
"lineCount": 11
},
{
"name": "generate_token",
"params": [
"request"
],
"exported": true,
"lineCount": 10
},
{
"name": "public_list_collections",
"params": [
"request"
],
"exported": true,
"lineCount": 4
},
{
"name": "public_get_collection",
"params": [
"request",
"collection_id"
],
"exported": true,
"lineCount": 10
},
{
"name": "public_list_pages",
"params": [
"request",
"collection_id"
],
"exported": true,
"lineCount": 7
},
{
"name": "public_get_page",
"params": [
"request",
"page_id"
],
"exported": true,
"lineCount": 6
},
{
"name": "public_my_tasks",
"params": [
"request"
],
"exported": true,
"lineCount": 7
}
],
"classes": [],
"imports": [
{
"source": "json",
"specifiers": [
"json"
]
},
{
"source": "logging",
"specifiers": [
"logging"
]
},
{
"source": "secrets",
"specifiers": [
"token_urlsafe"
]
},
{
"source": "fastapi",
"specifiers": [
"APIRouter",
"Request",
"HTTPException",
"Header",
"Depends"
]
},
{
"source": "app.db",
"specifiers": [
"get_conn"
]
}
],
"exports": [
"verify_token",
"generate_token",
"public_list_collections",
"public_get_collection",
"public_list_pages",
"public_get_page",
"public_my_tasks"
],
"totalLines": 90,
"hasStructuralAnalysis": true
},
"app/routers/webhooks.py": {
"filePath": "app/routers/webhooks.py",
"contentHash": "276989c4b4dc1f90a654a2b5b35af5ec3db620c031121bc64554f9039c95faf3",
"functions": [
{
"name": "verify_signature",
"params": [
"request"
],
"returnType": "bool",
"exported": true,
"lineCount": 17
},
{
"name": "receive_webhook",
"params": [
"request"
],
"exported": true,
"lineCount": 18
},
{
"name": "_handle_issue_event",
"params": [
"payload"
],
"exported": true,
"lineCount": 64
},
{
"name": "_handle_pr_event",
"params": [
"payload"
],
"exported": true,
"lineCount": 9
},
{
"name": "_handle_repo_event",
"params": [
"payload"
],
"exported": true,
"lineCount": 5
},
{
"name": "register_webhook",
"params": [
"owner",
"repo",
"request"
],
"exported": true,
"lineCount": 22
},
{
"name": "webhook_status",
"params": [
"owner",
"repo"
],
"exported": true,
"lineCount": 13
}
],
"classes": [],
"imports": [
{
"source": "json",
"specifiers": [
"json"
]
},
{
"source": "hmac",
"specifiers": [
"hmac"
]
},
{
"source": "hashlib",
"specifiers": [
"hashlib"
]
},
{
"source": "logging",
"specifiers": [
"logging"
]
},
{
"source": "fastapi",
"specifiers": [
"APIRouter",
"Request",
"HTTPException"
]
},
{
"source": "app.config",
"specifiers": [
"settings"
]
},
{
"source": "app.db",
"specifiers": [
"get_conn"
]
},
{
"source": "app.routers.board",
"specifiers": [
"_issue_column"
]
}
],
"exports": [
"verify_signature",
"receive_webhook",
"_handle_issue_event",
"_handle_pr_event",
"_handle_repo_event",
"register_webhook",
"webhook_status"
],
"totalLines": 182,
"hasStructuralAnalysis": true
},
"app/routers/workspace.py": {
"filePath": "app/routers/workspace.py",
"contentHash": "7acfeec409fcaa2f1d4bf88c2133990a746b82afbe3ef215e279aed58bd70180",
"functions": [
{
"name": "_current_user",
"params": [
"request"
],
"returnType": "dict",
"exported": true,
"lineCount": 3
},
{
"name": "list_workspaces",
"params": [
"request"
],
"exported": true,
"lineCount": 4
},
{
"name": "create_workspace",
"params": [
"request"
],
"exported": true,
"lineCount": 17
},
{
"name": "list_members",
"params": [
"request",
"ws_id"
],
"exported": true,
"lineCount": 7
},
{
"name": "add_member",
"params": [
"request",
"ws_id"
],
"exported": true,
"lineCount": 13
},
{
"name": "update_member_role",
"params": [
"request",
"ws_id",
"user_id"
],
"exported": true,
"lineCount": 10
},
{
"name": "remove_member",
"params": [
"request",
"ws_id",
"user_id"
],
"exported": true,
"lineCount": 5
},
{
"name": "list_comments",
"params": [
"request",
"page_id"
],
"exported": true,
"lineCount": 7
},
{
"name": "add_comment",
"params": [
"request",
"page_id"
],
"exported": true,
"lineCount": 15
},
{
"name": "update_comment",
"params": [
"request",
"comment_id"
],
"exported": true,
"lineCount": 11
},
{
"name": "page_history",
"params": [
"request",
"page_id"
],
"exported": true,
"lineCount": 7
},
{
"name": "record_history",
"params": [
"request",
"page_id"
],
"exported": true,
"lineCount": 12
},
{
"name": "list_favorites",
"params": [
"request"
],
"exported": true,
"lineCount": 13
},
{
"name": "add_favorite",
"params": [
"request"
],
"exported": true,
"lineCount": 14
},
{
"name": "remove_favorite",
"params": [
"request",
"fav_id"
],
"exported": true,
"lineCount": 5
},
{
"name": "list_db_templates",
"params": [
"request"
],
"exported": true,
"lineCount": 4
},
{
"name": "create_db_template",
"params": [
"request"
],
"exported": true,
"lineCount": 10
},
{
"name": "apply_db_template",
"params": [
"request",
"tid"
],
"exported": true,
"lineCount": 17
},
{
"name": "list_page_templates",
"params": [
"request",
"collection_id"
],
"exported": true,
"lineCount": 6
},
{
"name": "create_page_template",
"params": [
"request",
"collection_id"
],
"exported": true,
"lineCount": 9
},
{
"name": "apply_page_template",
"params": [
"request",
"collection_id",
"tid"
],
"exported": true,
"lineCount": 15
},
{
"name": "import_csv",
"params": [
"request",
"collection_id"
],
"exported": true,
"lineCount": 23
},
{
"name": "export_csv",
"params": [
"request",
"collection_id"
],
"exported": true,
"lineCount": 25
},
{
"name": "list_webhooks",
"params": [
"request"
],
"exported": true,
"lineCount": 4
},
{
"name": "create_webhook",
"params": [
"request"
],
"exported": true,
"lineCount": 14
},
{
"name": "delete_webhook",
"params": [
"request",
"wh_id"
],
"exported": true,
"lineCount": 5
},
{
"name": "public_view",
"params": [
"request",
"collection_id"
],
"exported": true,
"lineCount": 20
}
],
"classes": [],
"imports": [
{
"source": "csv",
"specifiers": [
"csv"
]
},
{
"source": "io",
"specifiers": [
"io"
]
},
{
"source": "json",
"specifiers": [
"json"
]
},
{
"source": "logging",
"specifiers": [
"logging"
]
},
{
"source": "fastapi",
"specifiers": [
"APIRouter",
"Request",
"HTTPException"
]
},
{
"source": "fastapi.responses",
"specifiers": [
"HTMLResponse",
"StreamingResponse"
]
},
{
"source": "app.db",
"specifiers": [
"get_conn"
]
},
{
"source": "app.auth.session",
"specifiers": [
"SessionManager"
]
}
],
"exports": [
"_current_user",
"list_workspaces",
"create_workspace",
"list_members",
"add_member",
"update_member_role",
"remove_member",
"list_comments",
"add_comment",
"update_comment",
"page_history",
"record_history",
"list_favorites",
"add_favorite",
"remove_favorite",
"list_db_templates",
"create_db_template",
"apply_db_template",
"list_page_templates",
"create_page_template",
"apply_page_template",
"import_csv",
"export_csv",
"list_webhooks",
"create_webhook",
"delete_webhook",
"public_view"
],
"totalLines": 412,
"hasStructuralAnalysis": true
},
"app/schemas/__init__.py": {
"filePath": "app/schemas/__init__.py",
"contentHash": "94bd9c3218f7f374a4a003bf05bc5582f34e81828c2f574f24277ddd5814fc5b",
"functions": [],
"classes": [],
"imports": [],
"exports": [],
"totalLines": 2,
"hasStructuralAnalysis": true
},
"app/services/__init__.py": {
"filePath": "app/services/__init__.py",
"contentHash": "958ed8d2ca8109e250dd8e10ba66fa3dd2252f9e27466f5048fedb0a42e00123",
"functions": [],
"classes": [],
"imports": [],
"exports": [],
"totalLines": 2,
"hasStructuralAnalysis": true
},
"app/services/collection_adapter.py": {
"filePath": "app/services/collection_adapter.py",
"contentHash": "7486fccf6d4e144098e1368f2b607813c806c85232bce6fd796903302d9af99e",
"functions": [],
"classes": [
{
"name": "GiteaBoardCompat",
"methods": [
"from_board",
"from_card",
"list_boards_as_collections",
"get_board_as_collection",
"get_board_cards",
"sync_to_collection"
],
"properties": [],
"exported": true,
"lineCount": 209
}
],
"imports": [
{
"source": "json",
"specifiers": [
"json"
]
},
{
"source": "typing",
"specifiers": [
"Optional"
]
},
{
"source": "app.db",
"specifiers": [
"get_conn"
]
}
],
"exports": [
"GiteaBoardCompat"
],
"totalLines": 223,
"hasStructuralAnalysis": true
},
"app/services/formula_engine.py": {
"filePath": "app/services/formula_engine.py",
"contentHash": "8223b1b9ae21c1771df27ef5fe857321fdfd3b65925b1d76ff2615365a0ec810",
"functions": [],
"classes": [
{
"name": "FormulaEngine",
"methods": [
"__init__",
"evaluate",
"_eval_expr",
"_parse_args",
"_prop",
"_now",
"_today",
"_if",
"_concat",
"_round",
"_contains",
"_length",
"_to_number",
"_format_date",
"_date_add",
"_date_subtract",
"_replace",
"_replace_all",
"_join",
"_empty",
"_and",
"_or",
"_not",
"_start",
"_end"
],
"properties": [],
"exported": true,
"lineCount": 216
}
],
"imports": [
{
"source": "datetime",
"specifiers": [
"datetime",
"date",
"timedelta"
]
},
{
"source": "typing",
"specifiers": [
"Any",
"Callable",
"Optional"
]
}
],
"exports": [
"FormulaEngine"
],
"totalLines": 224,
"hasStructuralAnalysis": true
},
"app/services/gitea_client.py": {
"filePath": "app/services/gitea_client.py",
"contentHash": "e77ca458fbb565b6908302964df8d8ecde7d2d7f8b9d103b7a7b6e29814f6911",
"functions": [],
"classes": [
{
"name": "GiteaClient",
"methods": [
"__init__",
"_cached",
"_set_cache",
"get_user_repos",
"get_org_repos",
"get_user_orgs",
"get_issues",
"get_issue",
"create_issue",
"update_issue",
"update_issue_labels",
"close_issue",
"reopen_issue",
"get_issue_comments",
"_invalidate_issue_cache",
"get_labels",
"get_milestones",
"list_webhooks",
"create_webhook",
"delete_webhook",
"get_collaborators"
],
"properties": [],
"exported": true,
"lineCount": 281
}
],
"imports": [
{
"source": "logging",
"specifiers": [
"logging"
]
},
{
"source": "datetime",
"specifiers": [
"datetime",
"timedelta"
]
},
{
"source": "typing",
"specifiers": [
"Any"
]
},
{
"source": "httpx",
"specifiers": [
"httpx"
]
},
{
"source": "app.config",
"specifiers": [
"settings"
]
}
],
"exports": [
"GiteaClient"
],
"totalLines": 301,
"hasStructuralAnalysis": true
},
"app/services/property_types.py": {
"filePath": "app/services/property_types.py",
"contentHash": "d015fa13b16be6c32f9a421d41fee03b96db73ba2c35e6425522661b58ed9de8",
"functions": [
{
"name": "validate_property_value",
"params": [
"prop_type",
"value",
"options"
],
"returnType": "tuple[bool, str]",
"exported": true,
"lineCount": 41
},
{
"name": "get_auto_property_value",
"params": [
"prop_type",
"user"
],
"returnType": "Any",
"exported": true,
"lineCount": 9
},
{
"name": "get_next_unique_id",
"params": [
"collection_id",
"conn"
],
"returnType": "int",
"exported": true,
"lineCount": 8
},
{
"name": "format_number",
"params": [
"value",
"fmt"
],
"returnType": "str",
"exported": true,
"lineCount": 15
}
],
"classes": [],
"imports": [
{
"source": "json",
"specifiers": [
"json"
]
},
{
"source": "datetime",
"specifiers": [
"datetime",
"timezone"
]
},
{
"source": "typing",
"specifiers": [
"Any",
"Optional"
]
}
],
"exports": [
"validate_property_value",
"get_auto_property_value",
"get_next_unique_id",
"format_number"
],
"totalLines": 188,
"hasStructuralAnalysis": true
},
"app/services/rollup_engine.py": {
"filePath": "app/services/rollup_engine.py",
"contentHash": "e6dc8c61a58f4b5b1b3c7e2b20d94d1b1c18175620f55c6d070af63be69cffc3",
"functions": [
{
"name": "_safe_avg",
"params": [
"values"
],
"returnType": "Optional[float]",
"exported": true,
"lineCount": 3
},
{
"name": "_safe_stat",
"params": [
"values",
"fn"
],
"returnType": "Optional[float]",
"exported": true,
"lineCount": 3
},
{
"name": "_numeric",
"params": [
"gen"
],
"exported": true,
"lineCount": 6
},
{
"name": "_safe_range",
"params": [
"values"
],
"returnType": "Optional[float]",
"exported": true,
"lineCount": 3
},
{
"name": "_percent_checked",
"params": [
"values"
],
"returnType": "Optional[float]",
"exported": true,
"lineCount": 8
},
{
"name": "_percent_per_group",
"params": [
"values"
],
"returnType": "dict",
"exported": true,
"lineCount": 10
}
],
"classes": [
{
"name": "RollupEngine",
"methods": [
"compute"
],
"properties": [],
"exported": true,
"lineCount": 79
}
],
"imports": [
{
"source": "json",
"specifiers": [
"json"
]
},
{
"source": "statistics",
"specifiers": [
"statistics"
]
},
{
"source": "typing",
"specifiers": [
"Any",
"Optional"
]
},
{
"source": "app.db",
"specifiers": [
"get_conn"
]
}
],
"exports": [
"RollupEngine",
"_safe_avg",
"_safe_stat",
"_numeric",
"_safe_range",
"_percent_checked",
"_percent_per_group"
],
"totalLines": 151,
"hasStructuralAnalysis": true
},
"app/services/webhook_outbound.py": {
"filePath": "app/services/webhook_outbound.py",
"contentHash": "b9ccb68b7d18dd529d2509dca71bd0f0b66fb02c023aeb285659adaad82cd0d5",
"functions": [
{
"name": "fire_event",
"params": [
"event",
"payload"
],
"exported": true,
"lineCount": 16
},
{
"name": "init_webhook_tables",
"params": [],
"exported": true,
"lineCount": 14
}
],
"classes": [],
"imports": [
{
"source": "json",
"specifiers": [
"json"
]
},
{
"source": "logging",
"specifiers": [
"logging"
]
},
{
"source": "httpx",
"specifiers": [
"httpx"
]
},
{
"source": "app.db",
"specifiers": [
"get_conn"
]
}
],
"exports": [
"fire_event",
"init_webhook_tables"
],
"totalLines": 52,
"hasStructuralAnalysis": true
},
"app/templates/accounts.html": {
"filePath": "app/templates/accounts.html",
"contentHash": "104e075b4278a0fab324bf24d3da4c90bf2dba6f2bce262f2fb045c48bef502d",
"functions": [],
"classes": [],
"imports": [],
"exports": [],
"totalLines": 132,
"hasStructuralAnalysis": false
},
"app/templates/base.html": {
"filePath": "app/templates/base.html",
"contentHash": "9997b65a9bf013d2a07a201cfafa058b5ca9028fff18b9572595351a9f001a3a",
"functions": [],
"classes": [],
"imports": [],
"exports": [],
"totalLines": 599,
"hasStructuralAnalysis": false
},
"app/templates/board_fragment.html": {
"filePath": "app/templates/board_fragment.html",
"contentHash": "537ccb9630b60c599a4b421353dcadbf5d6f836012a0d43efb554a1f72881740",
"functions": [],
"classes": [],
"imports": [],
"exports": [],
"totalLines": 61,
"hasStructuralAnalysis": false
},
"app/templates/board.html": {
"filePath": "app/templates/board.html",
"contentHash": "cfee7222d3bbf81c8b9abcab4e7f48877931d1254ad84bf9dfd59fafdb744186",
"functions": [],
"classes": [],
"imports": [],
"exports": [],
"totalLines": 301,
"hasStructuralAnalysis": false
},
"app/templates/card_detail.html": {
"filePath": "app/templates/card_detail.html",
"contentHash": "806c6806b76343d7d6822aa16f4b63f81409dd2b957e700a0cbdd98c995a6f3a",
"functions": [],
"classes": [],
"imports": [],
"exports": [],
"totalLines": 149,
"hasStructuralAnalysis": false
},
"app/templates/card.html": {
"filePath": "app/templates/card.html",
"contentHash": "53030391c81d49b9586de0dd153695f71e1935d6611fcb8a3f266ac8b8e131d6",
"functions": [],
"classes": [],
"imports": [],
"exports": [],
"totalLines": 29,
"hasStructuralAnalysis": false
},
"app/templates/dashboard.html": {
"filePath": "app/templates/dashboard.html",
"contentHash": "ab756877ed0fd2788bc565e43421c16905488d0f5e2ce18a437b71cfad4e4ba1",
"functions": [],
"classes": [],
"imports": [],
"exports": [],
"totalLines": 82,
"hasStructuralAnalysis": false
},
"app/templates/detailed_board.html": {
"filePath": "app/templates/detailed_board.html",
"contentHash": "367eff474c8017f33f511d31ff306c90815d6bb27ef11bd740b463b1f93a88a7",
"functions": [],
"classes": [],
"imports": [],
"exports": [],
"totalLines": 70,
"hasStructuralAnalysis": false
},
"app/templates/library.html": {
"filePath": "app/templates/library.html",
"contentHash": "4d3de3fbb3ad1d9b289815550562cd544c16c0b33d2e2a2c35194c5eb4e990f6",
"functions": [],
"classes": [],
"imports": [],
"exports": [],
"totalLines": 122,
"hasStructuralAnalysis": false
},
"app/templates/notes.html": {
"filePath": "app/templates/notes.html",
"contentHash": "e530dfbc410cfd6e06f7404c36221a00bafff6e3ef5e423ac59a12013fd571e9",
"functions": [],
"classes": [],
"imports": [],
"exports": [],
"totalLines": 31,
"hasStructuralAnalysis": false
},
"app/templates/page_editor.html": {
"filePath": "app/templates/page_editor.html",
"contentHash": "2e7a87b2d1daa04fb283020139716d1300124f7e413e17976e9a2d4c7c656234",
"functions": [],
"classes": [],
"imports": [],
"exports": [],
"totalLines": 251,
"hasStructuralAnalysis": false
},
"app/templates/status_overview.html": {
"filePath": "app/templates/status_overview.html",
"contentHash": "1e3bb60dfb393714d0a2217268e11aec8bc51a48a8876d7a099a37d989da892c",
"functions": [],
"classes": [],
"imports": [],
"exports": [],
"totalLines": 44,
"hasStructuralAnalysis": false
},
"app/templates/table_view.html": {
"filePath": "app/templates/table_view.html",
"contentHash": "bc1f41147c5874951108686c489ba5355d7f98f48f4f45b6c795da2e93df2c8a",
"functions": [],
"classes": [],
"imports": [],
"exports": [],
"totalLines": 133,
"hasStructuralAnalysis": false
},
"app/templates/team_load.html": {
"filePath": "app/templates/team_load.html",
"contentHash": "580841d5677fb9c67ff6d0ec9cd4f3c0e5347d45da41348d3c3538c8d3c8482b",
"functions": [],
"classes": [],
"imports": [],
"exports": [],
"totalLines": 50,
"hasStructuralAnalysis": false
},
"app/templates/trash.html": {
"filePath": "app/templates/trash.html",
"contentHash": "b186beda0c363da4f55cbcf2519dd9e0636d69aeda20dfc2f2055bbb4b86f41f",
"functions": [],
"classes": [],
"imports": [],
"exports": [],
"totalLines": 96,
"hasStructuralAnalysis": false
},
"ARCHITECTURE.md": {
"filePath": "ARCHITECTURE.md",
"contentHash": "ffa59fc0643beefc9500fb1ed19847fdca84f998f6cbc44bab2e00b84f83a84e",
"functions": [],
"classes": [],
"imports": [],
"exports": [],
"totalLines": 1309,
"hasStructuralAnalysis": true
},
"CHANGELOG.md": {
"filePath": "CHANGELOG.md",
"contentHash": "b960c52dc284a5ee7e663b86551c78587348b677cfd41bf5cc0a379f3b4f380a",
"functions": [],
"classes": [],
"imports": [],
"exports": [],
"totalLines": 87,
"hasStructuralAnalysis": true
},
"CONTRIBUTING.md": {
"filePath": "CONTRIBUTING.md",
"contentHash": "79bc0fc36ef57d406ef15c86cc1f1a7bb7c56ea29e024779430a9d6627cb99b4",
"functions": [],
"classes": [],
"imports": [],
"exports": [],
"totalLines": 33,
"hasStructuralAnalysis": true
},
"docker-compose.yml": {
"filePath": "docker-compose.yml",
"contentHash": "d3ff0b583f596858669ffd241999845bc05abeab5a9e8f7999cd9ae6c53dc72d",
"functions": [],
"classes": [],
"imports": [],
"exports": [],
"totalLines": 15,
"hasStructuralAnalysis": true
},
"Dockerfile": {
"filePath": "Dockerfile",
"contentHash": "1cbd3170df2d644b369508d5ba9999d920cccc2827f8b7bcb5872df0884b7bdd",
"functions": [],
"classes": [],
"imports": [],
"exports": [],
"totalLines": 20,
"hasStructuralAnalysis": true
},
"docs/NOTION_DATABASE_TASKS_GUIDE.md": {
"filePath": "docs/NOTION_DATABASE_TASKS_GUIDE.md",
"contentHash": "303c8fcea02592d3087145a10e01b270e492df4f7b251fbc3065e6e712fb7a6e",
"functions": [],
"classes": [],
"imports": [],
"exports": [],
"totalLines": 823,
"hasStructuralAnalysis": true
},
"images/Guide-complet-de-d-veloppement-du-panneau-lat-ral-de-navigat.html": {
"filePath": "images/Guide-complet-de-d-veloppement-du-panneau-lat-ral-de-navigat.html",
"contentHash": "b34a7ad9815a180f171f8a1ce6f6d4bf9fa43c6ce2f6cac2d50f19fbcc74a398",
"functions": [],
"classes": [],
"imports": [],
"exports": [],
"totalLines": 1692,
"hasStructuralAnalysis": false
},
"images/Guide-pour-d-velopper-un-clone-de-Notion-Bases-de-donn-es-T-.html": {
"filePath": "images/Guide-pour-d-velopper-un-clone-de-Notion-Bases-de-donn-es-T-.html",
"contentHash": "a8b6cc2381825c9cd47526e56aa0fd53290ba7aab1f8eed837ae5fbc47a9b41a",
"functions": [],
"classes": [],
"imports": [],
"exports": [],
"totalLines": 1522,
"hasStructuralAnalysis": false
},
"images/Guide-Technique-Complet-pour-Recr-er-l-diteur-Notion.html": {
"filePath": "images/Guide-Technique-Complet-pour-Recr-er-l-diteur-Notion.html",
"contentHash": "3f0c2d4dafa25b71a7749df5ad5bd8a34fbfdd5933687ea9402939d6c5d5fc80",
"functions": [],
"classes": [],
"imports": [],
"exports": [],
"totalLines": 1498,
"hasStructuralAnalysis": false
},
"images/Kanban board - Kanban board.url": {
"filePath": "images/Kanban board - Kanban board.url",
"contentHash": "a6d96c62b7bfeb9703d030a22337b01c8b3cbf346cb4d6c0920a2c252fd9d004",
"functions": [],
"classes": [],
"imports": [],
"exports": [],
"totalLines": 3,
"hasStructuralAnalysis": false
},
"pyproject.toml": {
"filePath": "pyproject.toml",
"contentHash": "6d7cd4157ad488b231b3759cd94ef8af8fb2e3599e9e58f030d06e914f5e3b0c",
"functions": [],
"classes": [],
"imports": [],
"exports": [],
"totalLines": 4,
"hasStructuralAnalysis": true
},
"README.md": {
"filePath": "README.md",
"contentHash": "10093e4adb993a2245387c5ddd69326b2e1ea831f310185c65c3ad9872329f32",
"functions": [],
"classes": [],
"imports": [],
"exports": [],
"totalLines": 98,
"hasStructuralAnalysis": true
},
"requirements.txt": {
"filePath": "requirements.txt",
"contentHash": "2471698d95faccb5e5af96cf7fd605cb4e9abbd9d15f5fdfefbe60f323149d2b",
"functions": [],
"classes": [],
"imports": [],
"exports": [],
"totalLines": 14,
"hasStructuralAnalysis": false
},
"ROADMAP.md": {
"filePath": "ROADMAP.md",
"contentHash": "fdc287635aa60eb953cc2a14a2b644309574a9f310cb1102a52b413257b84635",
"functions": [],
"classes": [],
"imports": [],
"exports": [],
"totalLines": 204,
"hasStructuralAnalysis": true
},
"static/css/app.css": {
"filePath": "static/css/app.css",
"contentHash": "206cd001f892e7546f84fef178f4640bbd1a50e6474d548ae1d8e9f3d5909c0d",
"functions": [],
"classes": [],
"imports": [],
"exports": [],
"totalLines": 2162,
"hasStructuralAnalysis": false
},
"static/js/app.js": {
"filePath": "static/js/app.js",
"contentHash": "72a3657551ac88b12f3d1242cf85b3437f5b315d693ea7b3325754b931923998",
"functions": [],
"classes": [],
"imports": [],
"exports": [],
"totalLines": 124,
"hasStructuralAnalysis": true
},
"tests/test_app.py": {
"filePath": "tests/test_app.py",
"contentHash": "de11fa6b658f819e8224cbef753f23bf8a8701f4be4fd1c777612c149cc07855",
"functions": [
{
"name": "client",
"params": [],
"exported": true,
"lineCount": 17
},
{
"name": "test_health",
"params": [
"client"
],
"exported": true,
"lineCount": 7
},
{
"name": "test_dashboard",
"params": [
"client"
],
"exported": true,
"lineCount": 5
},
{
"name": "test_stats",
"params": [
"client"
],
"exported": true,
"lineCount": 6
},
{
"name": "test_projects",
"params": [
"client"
],
"exported": true,
"lineCount": 5
},
{
"name": "test_board_404",
"params": [
"client"
],
"exported": true,
"lineCount": 3
},
{
"name": "test_csrf_rejected",
"params": [
"client"
],
"exported": true,
"lineCount": 3
},
{
"name": "test_auth_user",
"params": [
"client"
],
"exported": true,
"lineCount": 4
},
{
"name": "test_board_page_renders",
"params": [
"client"
],
"exported": true,
"lineCount": 5
},
{
"name": "test_dashboard_notion_ui",
"params": [
"client"
],
"exported": true,
"lineCount": 5
},
{
"name": "test_kanban_view",
"params": [
"client"
],
"exported": true,
"lineCount": 4
},
{
"name": "test_detailed_view",
"params": [
"client"
],
"exported": true,
"lineCount": 3
},
{
"name": "test_card_detail_html",
"params": [
"client"
],
"exported": true,
"lineCount": 4
},
{
"name": "test_create_issue_api",
"params": [
"client"
],
"exported": true,
"lineCount": 4
},
{
"name": "test_table_view",
"params": [
"client"
],
"exported": true,
"lineCount": 5
},
{
"name": "test_table_view_with_sort",
"params": [
"client"
],
"exported": true,
"lineCount": 3
},
{
"name": "test_kanban_with_status_filter",
"params": [
"client"
],
"exported": true,
"lineCount": 3
},
{
"name": "test_kanban_with_assignee_filter",
"params": [
"client"
],
"exported": true,
"lineCount": 3
},
{
"name": "test_kanban_with_multiple_sorts",
"params": [
"client"
],
"exported": true,
"lineCount": 3
},
{
"name": "test_status_overview",
"params": [
"client"
],
"exported": true,
"lineCount": 5
},
{
"name": "test_team_load",
"params": [
"client"
],
"exported": true,
"lineCount": 3
},
{
"name": "test_get_properties",
"params": [
"client"
],
"exported": true,
"lineCount": 5
},
{
"name": "test_get_ai_keywords",
"params": [
"client"
],
"exported": true,
"lineCount": 5
},
{
"name": "test_csrf_protects_properties_post",
"params": [
"client"
],
"exported": true,
"lineCount": 3
},
{
"name": "test_csrf_protects_sync",
"params": [
"client"
],
"exported": true,
"lineCount": 3
},
{
"name": "test_version_in_health",
"params": [
"client"
],
"exported": true,
"lineCount": 3
},
{
"name": "test_db_tables_exist",
"params": [
"client"
],
"exported": true,
"lineCount": 15
},
{
"name": "test_cors_headers",
"params": [
"client"
],
"exported": true,
"lineCount": 6
},
{
"name": "test_all_view_endpoints_respond",
"params": [
"client"
],
"exported": true,
"lineCount": 5
},
{
"name": "test_collections_api_list_empty",
"params": [
"client"
],
"exported": true,
"lineCount": 7
},
{
"name": "test_collections_api_crud",
"params": [
"client"
],
"exported": true,
"lineCount": 48
},
{
"name": "test_collections_pages_crud",
"params": [
"client"
],
"exported": true,
"lineCount": 42
},
{
"name": "test_collections_api_validation",
"params": [
"client"
],
"exported": true,
"lineCount": 5
},
{
"name": "test_collections_db_page_renders",
"params": [
"client"
],
"exported": true,
"lineCount": 12
},
{
"name": "test_boards_as_collections",
"params": [
"client"
],
"exported": true,
"lineCount": 7
},
{
"name": "test_property_types_api",
"params": [
"client"
],
"exported": true,
"lineCount": 10
},
{
"name": "test_collection_properties_crud",
"params": [
"client"
],
"exported": true,
"lineCount": 71
},
{
"name": "test_collection_properties_duplicate",
"params": [
"client"
],
"exported": true,
"lineCount": 10
},
{
"name": "test_collection_properties_validation",
"params": [
"client"
],
"exported": true,
"lineCount": 9
},
{
"name": "test_create_relation_property",
"params": [
"client"
],
"exported": true,
"lineCount": 18
},
{
"name": "test_link_pages_via_relation",
"params": [
"client"
],
"exported": true,
"lineCount": 30
},
{
"name": "test_rollup_compute",
"params": [
"client"
],
"exported": true,
"lineCount": 42
},
{
"name": "test_formula_evaluate",
"params": [
"client"
],
"exported": true,
"lineCount": 32
},
{
"name": "test_formula_empty_expression",
"params": [
"client"
],
"exported": true,
"lineCount": 4
},
{
"name": "test_views_calendar",
"params": [
"client"
],
"exported": true,
"lineCount": 9
},
{
"name": "test_views_gallery",
"params": [
"client"
],
"exported": true,
"lineCount": 9
},
{
"name": "test_views_list",
"params": [
"client"
],
"exported": true,
"lineCount": 9
},
{
"name": "test_views_timeline",
"params": [
"client"
],
"exported": true,
"lineCount": 9
},
{
"name": "test_views_default_table",
"params": [
"client"
],
"exported": true,
"lineCount": 8
},
{
"name": "test_views_calendar_navigation",
"params": [
"client"
],
"exported": true,
"lineCount": 8
},
{
"name": "test_view_config_update",
"params": [
"client"
],
"exported": true,
"lineCount": 13
},
{
"name": "test_save_view_as",
"params": [
"client"
],
"exported": true,
"lineCount": 15
},
{
"name": "test_list_views",
"params": [
"client"
],
"exported": true,
"lineCount": 8
},
{
"name": "test_sub_items_crud",
"params": [
"client"
],
"exported": true,
"lineCount": 19
},
{
"name": "test_status_aggregate",
"params": [
"client"
],
"exported": true,
"lineCount": 17
},
{
"name": "test_dependencies_check",
"params": [
"client"
],
"exported": true,
"lineCount": 19
},
{
"name": "test_dependencies_blocked",
"params": [
"client"
],
"exported": true,
"lineCount": 16
},
{
"name": "test_my_tasks_page",
"params": [
"client"
],
"exported": true,
"lineCount": 5
},
{
"name": "test_my_tasks_api",
"params": [
"client"
],
"exported": true,
"lineCount": 13
},
{
"name": "test_my_tasks_view_today",
"params": [
"client"
],
"exported": true,
"lineCount": 3
},
{
"name": "test_my_tasks_view_overdue",
"params": [
"client"
],
"exported": true,
"lineCount": 3
},
{
"name": "test_workspace_crud",
"params": [
"client"
],
"exported": true,
"lineCount": 13
},
{
"name": "test_comments_crud",
"params": [
"client"
],
"exported": true,
"lineCount": 14
},
{
"name": "test_favorites_crud",
"params": [
"client"
],
"exported": true,
"lineCount": 14
},
{
"name": "test_csv_import_export",
"params": [
"client"
],
"exported": true,
"lineCount": 14
},
{
"name": "test_public_view",
"params": [
"client"
],
"exported": true,
"lineCount": 8
},
{
"name": "test_db_templates",
"params": [
"client"
],
"exported": true,
"lineCount": 13
},
{
"name": "test_page_history",
"params": [
"client"
],
"exported": true,
"lineCount": 12
},
{
"name": "test_public_api_token",
"params": [
"client"
],
"exported": true,
"lineCount": 6
},
{
"name": "test_public_api_with_default_key",
"params": [
"client"
],
"exported": true,
"lineCount": 8
},
{
"name": "test_public_api_unauthorized",
"params": [
"client"
],
"exported": true,
"lineCount": 4
},
{
"name": "test_public_api_pages",
"params": [
"client"
],
"exported": true,
"lineCount": 9
},
{
"name": "test_webhooks_crud",
"params": [
"client"
],
"exported": true,
"lineCount": 11
},
{
"name": "test_pwa_manifest",
"params": [
"client"
],
"exported": true,
"lineCount": 6
}
],
"classes": [],
"imports": [
{
"source": "json",
"specifiers": [
"json"
]
},
{
"source": "os",
"specifiers": [
"os"
]
},
{
"source": "tempfile",
"specifiers": [
"tempfile"
]
},
{
"source": "pytest",
"specifiers": [
"pytest"
]
},
{
"source": "fastapi.testclient",
"specifiers": [
"TestClient"
]
}
],
"exports": [
"client",
"test_health",
"test_dashboard",
"test_stats",
"test_projects",
"test_board_404",
"test_csrf_rejected",
"test_auth_user",
"test_board_page_renders",
"test_dashboard_notion_ui",
"test_kanban_view",
"test_detailed_view",
"test_card_detail_html",
"test_create_issue_api",
"test_table_view",
"test_table_view_with_sort",
"test_kanban_with_status_filter",
"test_kanban_with_assignee_filter",
"test_kanban_with_multiple_sorts",
"test_status_overview",
"test_team_load",
"test_get_properties",
"test_get_ai_keywords",
"test_csrf_protects_properties_post",
"test_csrf_protects_sync",
"test_version_in_health",
"test_db_tables_exist",
"test_cors_headers",
"test_all_view_endpoints_respond",
"test_collections_api_list_empty",
"test_collections_api_crud",
"test_collections_pages_crud",
"test_collections_api_validation",
"test_collections_db_page_renders",
"test_boards_as_collections",
"test_property_types_api",
"test_collection_properties_crud",
"test_collection_properties_duplicate",
"test_collection_properties_validation",
"test_create_relation_property",
"test_link_pages_via_relation",
"test_rollup_compute",
"test_formula_evaluate",
"test_formula_empty_expression",
"test_views_calendar",
"test_views_gallery",
"test_views_list",
"test_views_timeline",
"test_views_default_table",
"test_views_calendar_navigation",
"test_view_config_update",
"test_save_view_as",
"test_list_views",
"test_sub_items_crud",
"test_status_aggregate",
"test_dependencies_check",
"test_dependencies_blocked",
"test_my_tasks_page",
"test_my_tasks_api",
"test_my_tasks_view_today",
"test_my_tasks_view_overdue",
"test_workspace_crud",
"test_comments_crud",
"test_favorites_crud",
"test_csv_import_export",
"test_public_view",
"test_db_templates",
"test_page_history",
"test_public_api_token",
"test_public_api_with_default_key",
"test_public_api_unauthorized",
"test_public_api_pages",
"test_webhooks_crud",
"test_pwa_manifest"
],
"totalLines": 997,
"hasStructuralAnalysis": true
},
"WORKLOAD.md": {
"filePath": "WORKLOAD.md",
"contentHash": "fdc7f59e5ae150d94ea90bc3b1b9c159ab4ec443fd13947b7338f0d56173a86f",
"functions": [],
"classes": [],
"imports": [],
"exports": [],
"totalLines": 60,
"hasStructuralAnalysis": true
}
}
}