Backend: - cockpit_chat.dspy: real LLM calls via llm table config, Hermes-style context (system prompt + project/iteration + history), auto model selection (multimodal if files, text otherwise) - cockpit_model_options.dspy: returns active models with capabilities - llm table: added capabilities column (text/vision/multimodal) Frontend: - inputed script: no page reload, updates agent bubble with LLM reply - stats_row refreshed on success, error shown in bubble DB: - sd_agent_settings table for per-user agent preferences
134 lines
4.7 KiB
Python
134 lines
4.7 KiB
Python
#!/usr/bin/env python3
|
|
"""RBAC path registration for pipeline-sdlc module."""
|
|
import os, sys, subprocess
|
|
|
|
MOD = "pipeline-sdlc"
|
|
|
|
PATHS_ANY = [
|
|
f"/{MOD}/index.ui",
|
|
]
|
|
|
|
PATHS_LOGINED = [
|
|
f"/{MOD}",
|
|
# Dashboard
|
|
f"/{MOD}/sd_dashboard/index.ui",
|
|
f"/{MOD}/sd_dashboard/dashboard_data.dspy",
|
|
# Projects
|
|
f"/{MOD}/sd_projects/index.ui",
|
|
f"/{MOD}/sd_projects/get_sd_projects.dspy",
|
|
f"/{MOD}/sd_projects/add_sd_projects.dspy",
|
|
f"/{MOD}/sd_projects/update_sd_projects.dspy",
|
|
f"/{MOD}/sd_projects/delete_sd_projects.dspy",
|
|
f"/{MOD}/sd_project_list/index.ui",
|
|
# Iterations
|
|
f"/{MOD}/sd_iterations/index.ui",
|
|
f"/{MOD}/sd_iterations/get_sd_iterations.dspy",
|
|
f"/{MOD}/sd_iterations/add_sd_iterations.dspy",
|
|
f"/{MOD}/sd_iterations/update_sd_iterations.dspy",
|
|
f"/{MOD}/sd_iterations/delete_sd_iterations.dspy",
|
|
f"/{MOD}/sd_iteration_list/index.ui",
|
|
# Test Plans
|
|
f"/{MOD}/sd_test_plans/index.ui",
|
|
f"/{MOD}/sd_test_plans/get_sd_test_plans.dspy",
|
|
f"/{MOD}/sd_test_plans/add_sd_test_plans.dspy",
|
|
f"/{MOD}/sd_test_plans/update_sd_test_plans.dspy",
|
|
f"/{MOD}/sd_test_plans/delete_sd_test_plans.dspy",
|
|
f"/{MOD}/sd_test_plan_list/index.ui",
|
|
# Test Cases
|
|
f"/{MOD}/sd_test_cases/index.ui",
|
|
f"/{MOD}/sd_test_cases/get_sd_test_cases.dspy",
|
|
f"/{MOD}/sd_test_cases/add_sd_test_cases.dspy",
|
|
f"/{MOD}/sd_test_cases/update_sd_test_cases.dspy",
|
|
f"/{MOD}/sd_test_cases/delete_sd_test_cases.dspy",
|
|
f"/{MOD}/sd_test_case_list/index.ui",
|
|
# Bugs
|
|
f"/{MOD}/sd_bugs/index.ui",
|
|
f"/{MOD}/sd_bugs/get_sd_bugs.dspy",
|
|
f"/{MOD}/sd_bugs/add_sd_bugs.dspy",
|
|
f"/{MOD}/sd_bugs/update_sd_bugs.dspy",
|
|
f"/{MOD}/sd_bugs/delete_sd_bugs.dspy",
|
|
f"/{MOD}/sd_bug_list/index.ui",
|
|
# Deploy Envs
|
|
f"/{MOD}/sd_deploy_envs/index.ui",
|
|
f"/{MOD}/sd_deploy_envs/get_sd_deploy_envs.dspy",
|
|
f"/{MOD}/sd_deploy_envs/add_sd_deploy_envs.dspy",
|
|
f"/{MOD}/sd_deploy_envs/update_sd_deploy_envs.dspy",
|
|
f"/{MOD}/sd_deploy_envs/delete_sd_deploy_envs.dspy",
|
|
f"/{MOD}/sd_deploy_env_list/index.ui",
|
|
# Review
|
|
f"/{MOD}/sd_review/index.ui",
|
|
# API
|
|
f"/{MOD}/api/bug_close.dspy",
|
|
f"/{MOD}/api/bug_confirm.dspy",
|
|
f"/{MOD}/api/check_iteration_bugs.dspy",
|
|
f"/{MOD}/api/env_verify.dspy",
|
|
f"/{MOD}/api/get_iteration_options.dspy",
|
|
f"/{MOD}/api/get_project_options.dspy",
|
|
f"/{MOD}/api/get_test_plan_options.dspy",
|
|
f"/{MOD}/api/submit_bug.dspy",
|
|
f"/{MOD}/api/sd_bug_create.dspy",
|
|
f"/{MOD}/api/sd_bug_update.dspy",
|
|
f"/{MOD}/api/sd_bug_delete.dspy",
|
|
f"/{MOD}/api/sd_case_create.dspy",
|
|
f"/{MOD}/api/sd_case_update.dspy",
|
|
f"/{MOD}/api/sd_case_delete.dspy",
|
|
f"/{MOD}/api/sd_env_create.dspy",
|
|
f"/{MOD}/api/sd_env_update.dspy",
|
|
f"/{MOD}/api/sd_env_delete.dspy",
|
|
f"/{MOD}/api/sd_iter_create.dspy",
|
|
f"/{MOD}/api/sd_iter_update.dspy",
|
|
f"/{MOD}/api/sd_iter_delete.dspy",
|
|
f"/{MOD}/api/sd_plan_create.dspy",
|
|
f"/{MOD}/api/sd_plan_update.dspy",
|
|
f"/{MOD}/api/sd_plan_delete.dspy",
|
|
f"/{MOD}/api/sd_proj_create.dspy",
|
|
f"/{MOD}/api/sd_proj_update.dspy",
|
|
f"/{MOD}/api/sd_proj_delete.dspy",
|
|
# Search data sources
|
|
f"/{MOD}/api/get_search_bug_status.dspy",
|
|
f"/{MOD}/api/get_search_case_status.dspy",
|
|
f"/{MOD}/api/get_search_case_type.dspy",
|
|
f"/{MOD}/api/get_search_env_status.dspy",
|
|
f"/{MOD}/api/get_search_env_type.dspy",
|
|
f"/{MOD}/api/get_search_iteration_status.dspy",
|
|
f"/{MOD}/api/get_search_iteration_type.dspy",
|
|
f"/{MOD}/api/get_search_plan_status.dspy",
|
|
f"/{MOD}/api/get_search_plan_type.dspy",
|
|
f"/{MOD}/api/get_search_priority.dspy",
|
|
f"/{MOD}/api/get_search_project_type.dspy",
|
|
f"/{MOD}/api/get_search_reporter_type.dspy",
|
|
f"/{MOD}/api/get_search_severity.dspy",
|
|
f"/{MOD}/api/get_search_status.dspy",
|
|
]
|
|
|
|
|
|
def find_app_root():
|
|
for c in [os.path.dirname(os.path.dirname(os.path.abspath(__file__))),
|
|
os.path.expanduser("~/pipeline")]:
|
|
if os.path.isfile(os.path.join(c, "set_role_perm.py")):
|
|
return c
|
|
return None
|
|
|
|
|
|
def main():
|
|
root = find_app_root()
|
|
if not root:
|
|
print("ERROR: pipeline root not found")
|
|
sys.exit(1)
|
|
set_perm = os.path.join(root, "set_role_perm.py")
|
|
py = sys.executable
|
|
count = 0
|
|
for role, paths in [("any", PATHS_ANY), ("logined", PATHS_LOGINED)]:
|
|
for path in paths:
|
|
cmd = [py, set_perm, role, path]
|
|
r = subprocess.run(cmd, capture_output=True, text=True, cwd=root)
|
|
if r.returncode == 0:
|
|
count += 1
|
|
else:
|
|
print(f" WARN: {path} -> {r.stderr.strip()[-80:]}")
|
|
print(f"Registered {count}/{len(PATHS_ANY)+len(PATHS_LOGINED)} paths for {MOD}")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|