fix(security+agents): GAP-57 fail-loud PAPERCLIP_DB_URL + FU-13 analyst tool alignment
GAP-57 (אבטחה, CWE-798 / INV-ENV4): ה-default הקשיח postgresql://paperclip:paperclip@... הוסר מ-3 קבצי web/. נוסף resolver משותף require_paperclip_db_url() ב-paperclip_api.py שנכשל בקול אם PAPERCLIP_DB_URL לא מוגדר — במקום ליפול בשקט ל-creds ידועים. Coolify מגדיר את המשתנה (אומת), אז הייצור לא נפגע. (2 מופעים בסקריפטים מקומיים נותרו ל-FU-15 המלא.) FU-13 (INV-AG3, GAP-46): יישור הרשאות-סוכן. התברר שהפער שמופה ב-31.5 היה רחב מדי — יוחס לפי תיאור-תפקיד, לא ההוראות בפועל. הכרעת-יו"ר "היבריד": - legal-analyst: נוסף aggregate_claims_to_arguments (frontmatter + שלב 7) — הכלי שמקבץ את הטענות שהוא חילץ לטיעונים משפטיים. - extract_references/extract_internal_citations הם מטלת-researcher (שכבר מחזיק אותם), לא analyst — הוסרו מרשימת "החסרים". - legal-researcher: כבר היה תקין; ה-spec היה מיושן. עודכנו X4-agents.md (§2א, INV-AG3) ו-gap-audit.md (FU-13 ✅, FU-15 חלקי). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
11
web/app.py
11
web/app.py
@@ -45,7 +45,7 @@ from web.mcp_env_catalog import (
|
||||
normalize_for_compare,
|
||||
)
|
||||
from web.progress_store import ProgressStore
|
||||
from web.paperclip_api import emit_case_status_webhook, pc_request
|
||||
from web.paperclip_api import emit_case_status_webhook, pc_request, require_paperclip_db_url
|
||||
from web.paperclip_client import (
|
||||
COMPANIES as PAPERCLIP_COMPANIES,
|
||||
accept_interaction as pc_accept_interaction,
|
||||
@@ -3907,9 +3907,7 @@ async def api_mcp_blocks():
|
||||
@app.get("/api/settings/paperclip-companies")
|
||||
async def api_paperclip_companies():
|
||||
"""List all companies from Paperclip's DB."""
|
||||
pc_url = os.environ.get(
|
||||
"PAPERCLIP_DB_URL", "postgresql://paperclip:paperclip@127.0.0.1:54329/paperclip"
|
||||
)
|
||||
pc_url = require_paperclip_db_url() # INV-ENV4 / GAP-57: fail loud, no creds default
|
||||
try:
|
||||
conn = await asyncpg.connect(pc_url)
|
||||
try:
|
||||
@@ -4082,9 +4080,8 @@ async def api_reset_methodology(category: str, key: str):
|
||||
# ── Skill Management API ───────────────────────────────────────────
|
||||
|
||||
|
||||
PAPERCLIP_DB_URL = os.environ.get(
|
||||
"PAPERCLIP_DB_URL", "postgresql://paperclip:paperclip@127.0.0.1:54329/paperclip"
|
||||
)
|
||||
# INV-ENV4 / GAP-57: no hard-coded credential default — fail loud if unset.
|
||||
PAPERCLIP_DB_URL = require_paperclip_db_url()
|
||||
# Paperclip skills directory. In the Coolify container this is bind-mounted from
|
||||
# the host's ~/.paperclip/instances/default/skills (see PAPERCLIP_SKILLS_DIR env).
|
||||
# Fallback to the host path for local/dev use.
|
||||
|
||||
Reference in New Issue
Block a user