| event_payload |
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"66fad3c64105fd05dfde9686d0dd6c3dd02499b4","after":"0437d5a45b0f15152bdd0c11b4e941fe2f2e2e02","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub-eios/compare/66fad3c64105fd05dfde9686d0dd6c3dd02499b4...0437d5a45b0f15152bdd0c11b4e941fe2f2e2e02","commits":[{"id":"0437d5a45b0f15152bdd0c11b4e941fe2f2e2e02","message":"fix(agent): 工具按发起用户判权,堵跨租户查询和外呼白名单\n\n2026-11-04 七维度验收确认三项缺陷:模型的 where 可覆盖 tenant_id,\n工具不带用户身份,外呼白名单用未锚定的正则。\n\n- database_query:where/select/orderBy 按不可信输入校验,拒绝\n tenant_id、关联字段和白名单外字段,结果按 AI 上下文规则脱敏;\n 表与字段策略收到 agent-data-policy.ts,移出无模型的 tickets\n- 四个内置工具按发起用户当前权限判定(tool-access.ts),无用户时拒绝;\n 判定放在代理层,技能依赖工具也绕不过\n- 只有创建人能驱动会话,事件只有创建人、管理员和 ai-agent:manage\n 持有人能读;否则他人可借用创建人权限\n- http_request 改为 AGENT_HTTP_ALLOWED_HOSTS 主机白名单,默认禁用;\n 只允许 GET,不跟随重定向,拒绝 IP、端口和解析到内网的主机\n- create_task 入参不能改写 agentId/userId,请求头不能改写 X-Tenant-Id\n\n同步 sandbox-tools 盘点及生成脚本、openapi、.env.eios.example 和治理经验。\n遗留:工具结果的提示注入隔离、DNS 重绑定窗口;真实库与真实模型未验证。\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub-eios/commit/0437d5a45b0f15152bdd0c11b4e941fe2f2e2e02","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-11-04T18:12:02-08:00","added":["backend/src/modules/agent-sessions/agent-session.controller.test.ts","backend/src/modules/agent-sessions/agent-session.ownership.test.ts","backend/src/modules/agent-sessions/sandbox/agent-data-policy.test.ts","backend/src/modules/agent-sessions/sandbox/agent-data-policy.ts","backend/src/modules/agent-sessions/sandbox/credential-proxy.test.ts","backend/src/modules/agent-sessions/sandbox/tool-access.ts"],"removed":[],"modified":[".env.eios.example","backend/src/config/eios/ai.test.ts","backend/src/config/eios/ai.ts","backend/src/modules/agent-sessions/agent-session.controller.ts","backend/src/modules/agent-sessions/agent-session.docs.ts","backend/src/modules/agent-sessions/agent-session.service.ts","backend/src/modules/agent-sessions/harness.service.test.ts","backend/src/modules/agent-sessions/harness.service.ts","backend/src/modules/agent-sessions/sandbox/credential-proxy.ts","backend/src/modules/agent-sessions/sandbox/sandbox.interface.ts","backend/src/modules/agent-sessions/sandbox/tools/create-task.tool.ts","backend/src/modules/agent-sessions/sandbox/tools/database-query.tool.ts","backend/src/modules/agent-sessions/sandbox/tools/http-request.tool.ts","backend/src/modules/agent-sessions/sandbox/tools/knowledge-search.tool.ts","backend/src/modules/ai-assist/context-providers/redact.ts","backend/src/shared/middleware/auth.middleware.ts","docs/api/openapi.yaml","docs/eios-transformation/inventory/sandbox-tools.md","docs/eios-transformation/inventory/scripts/gen_ai.py","docs/eios-transformation/lanes/inventory.md","docs/governance/baseline-and-experience.md"]}],"total_commits":0,"head_commit":{"id":"0437d5a45b0f15152bdd0c11b4e941fe2f2e2e02","message":"fix(agent): 工具按发起用户判权,堵跨租户查询和外呼白名单\n\n2026-11-04 七维度验收确认三项缺陷:模型的 where 可覆盖 tenant_id,\n工具不带用户身份,外呼白名单用未锚定的正则。\n\n- database_query:where/select/orderBy 按不可信输入校验,拒绝\n tenant_id、关联字段和白名单外字段,结果按 AI 上下文规则脱敏;\n 表与字段策略收到 agent-data-policy.ts,移出无模型的 tickets\n- 四个内置工具按发起用户当前权限判定(tool-access.ts),无用户时拒绝;\n 判定放在代理层,技能依赖工具也绕不过\n- 只有创建人能驱动会话,事件只有创建人、管理员和 ai-agent:manage\n 持有人能读;否则他人可借用创建人权限\n- http_request 改为 AGENT_HTTP_ALLOWED_HOSTS 主机白名单,默认禁用;\n 只允许 GET,不跟随重定向,拒绝 IP、端口和解析到内网的主机\n- create_task 入参不能改写 agentId/userId,请求头不能改写 X-Tenant-Id\n\n同步 sandbox-tools 盘点及生成脚本、openapi、.env.eios.example 和治理经验。\n遗留:工具结果的提示注入隔离、DNS 重绑定窗口;真实库与真实模型未验证。\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub-eios/commit/0437d5a45b0f15152bdd0c11b4e941fe2f2e2e02","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-11-04T18:12:02-08:00","added":["backend/src/modules/agent-sessions/agent-session.controller.test.ts","backend/src/modules/agent-sessions/agent-session.ownership.test.ts","backend/src/modules/agent-sessions/sandbox/agent-data-policy.test.ts","backend/src/modules/agent-sessions/sandbox/agent-data-policy.ts","backend/src/modules/agent-sessions/sandbox/credential-proxy.test.ts","backend/src/modules/agent-sessions/sandbox/tool-access.ts"],"removed":[],"modified":[".env.eios.example","backend/src/config/eios/ai.test.ts","backend/src/config/eios/ai.ts","backend/src/modules/agent-sessions/agent-session.controller.ts","backend/src/modules/agent-sessions/agent-session.docs.ts","backend/src/modules/agent-sessions/agent-session.service.ts","backend/src/modules/agent-sessions/harness.service.test.ts","backend/src/modules/agent-sessions/harness.service.ts","backend/src/modules/agent-sessions/sandbox/credential-proxy.ts","backend/src/modules/agent-sessions/sandbox/sandbox.interface.ts","backend/src/modules/agent-sessions/sandbox/tools/create-task.tool.ts","backend/src/modules/agent-sessions/sandbox/tools/database-query.tool.ts","backend/src/modules/agent-sessions/sandbox/tools/http-request.tool.ts","backend/src/modules/agent-sessions/sandbox/tools/knowledge-search.tool.ts","backend/src/modules/ai-assist/context-providers/redact.ts","backend/src/shared/middleware/auth.middleware.ts","docs/api/openapi.yaml","docs/eios-transformation/inventory/sandbox-tools.md","docs/eios-transformation/inventory/scripts/gen_ai.py","docs/eios-transformation/lanes/inventory.md","docs/governance/baseline-and-experience.md"]},"repository":{"id":160,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhi-omni-knowledge-hub-eios","full_name":"luoanwu/juhi-omni-knowledge-hub-eios","description":"巨嗨全域智库 EIOS 化独立改造仓(由本地改造副本推送;原 luoanwu/juhi-omni-knowledge-hub 不动)","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":2117641,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub-eios/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub-eios","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub-eios","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub-eios.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub-eios.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-10-30T09:22:23+08:00","updated_at":"2026-11-02T19:03:52+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}... |