Enforce session workspace boundaries

This commit is contained in:
武阳
2026-05-08 17:09:07 +08:00
parent 5b14f55736
commit 0bbba2b936
13 changed files with 509 additions and 52 deletions
+3 -3
View File
@@ -49,7 +49,7 @@ skills/data-factory-sql/
}
```
多行 SQL 或复杂 SQL 不要通过命令行字符串硬塞。优先把 SQL 写到当前会话 scratchpad 或用户指定的任务目录,再用 `-f` 执行:
多行 SQL 或复杂 SQL 不要通过命令行字符串硬塞。优先把 SQL 写到当前 session/scratchpad;只有用户明确指定外部目标文件时,才写到用户指定目录,再用 `-f` 执行:
```json
{
@@ -86,7 +86,7 @@ https://data.mioffice.cn/workspace/?wid=<YOUR_WORKSPACE_ID>#/workspace/<YOUR_WOR
| 集群 | `cnbj1` |
| Base URL | `http://proxy-service-http-cnbj1-dp.api.xiaomi.net` |
| 引擎 | `auto` |
| 输出 | `~/Downloads/data_factory_<时间戳>.csv` |
| 输出 | 当前 session/output/data_factory_<时间戳>.csv;如果没有 session 环境,则退回 `~/Downloads/data_factory_<时间戳>.csv` |
| 轮询间隔 | 2.0s |
| 查询超时 | 600s |
@@ -166,7 +166,7 @@ https://data.mioffice.cn/workspace/?wid=<YOUR_WORKSPACE_ID>#/workspace/<YOUR_WOR
### 指定输出路径
输出路径优先写到当前用户当前会话 output 目录,或用户明确指定的任务目录。不要写项目根目录。
输出路径优先写到当前 session/output,或用户明确指定的任务目录。不要写项目根目录、源码目录或其他非 session 临时位置
```json
{
+11 -2
View File
@@ -76,8 +76,13 @@ def read_sql(args: argparse.Namespace) -> str:
def default_output_path(query_id: str) -> Path:
"""Default: ~/Downloads/data_factory_<timestamp>.csv"""
"""Default to current session output when python_exec exposes it."""
ts = time.strftime("%Y%m%d_%H%M%S")
scratchpad = os.environ.get("PYTHON_EXEC_SCRATCHPAD")
if scratchpad:
output_dir = Path(scratchpad).resolve().parent / "output"
output_dir.mkdir(parents=True, exist_ok=True)
return output_dir / f"data_factory_{ts}.csv"
downloads = Path.home() / "Downloads"
downloads.mkdir(parents=True, exist_ok=True)
return downloads / f"data_factory_{ts}.csv"
@@ -136,7 +141,11 @@ def build_parser() -> argparse.ArgumentParser:
p.add_argument("--catalog", help="default catalog")
p.add_argument("--schema", help="default schema")
p.add_argument(
"--output", help="output CSV path (default: ~/Downloads/data_factory_<ts>.csv)"
"--output",
help=(
"output CSV path (default: session output when PYTHON_EXEC_SCRATCHPAD "
"is set, otherwise ~/Downloads/data_factory_<ts>.csv)"
),
)
p.add_argument(
"--no-save", action="store_true", help="don't save CSV, only print to stdout"
+8 -5
View File
@@ -57,15 +57,18 @@ allowed_tools: read_file, write_file, edit_file, grep_search, glob_search, ask_u
## 推荐产物
```text
tasks/{task_id}/context/eval_errors.*
tasks/{task_id}/artifacts/error_analysis.md
tasks/{task_id}/artifacts/generation_plan.md
tasks/{task_id}/artifacts/generated_candidates.jsonl
tasks/{task_id}/memory/open_questions.md
output/eval_errors_context.md
output/error_analysis.md
output/generation_plan.md
output/generated_candidates.jsonl
output/open_questions.md
```
上面的 `output/...` 是逻辑文件名,实际路径必须位于当前 session/output。临时脚本、抽样缓存和中间文件必须位于当前 session/scratchpad。
## 约束
- 在 canonical records 达成一致并通过校验前,不要直接导出最终训练/评测格式。
- 不要把自动聚类当成最终事实,聚类和类别命名必须可 review。
- 面向人的总结要简洁,并尽量用样例支撑。
- 不要在项目根目录、源码目录或其他非 session 目录创建本任务产物;用户明确指定外部目标文件时除外。