6.1 KiB
6.1 KiB
NODE1 File Tool Sync Runbook
Scope
This runbook documents:
- how NODE1 runtime drift was identified and synchronized,
- how universal
file_toolwas introduced into the actual NODE1 router stack, - how to deploy and rollback safely.
Canonical Runtime (NODE1)
- Host:
144.76.224.179 - Runtime repo:
/opt/microdao-daarion - Compose:
/opt/microdao-daarion/docker-compose.node1.yml - Router container:
dagi-router-node1 - Gateway container:
dagi-gateway-node1 - Router API contract:
POST /v1/agents/{agent_id}/infer(not/route)
Drift Findings (before sync)
The laptop had multiple repos; only this repo matches NODE1 architecture:
/Users/apple/github-projects/microdao-daarion
Critical files were drifted against NODE1 runtime (15 files):
docker-compose.node1.ymlgateway-bot/agent_registry.jsongateway-bot/http_api.pygateway-bot/router_client.pygateway-bot/senpai_prompt.txthttp_api.pyservices/router/agent_tools_config.pyservices/router/main.pyservices/router/memory_retrieval.pyservices/router/requirements.txtservices/router/router-config.ymlservices/router/tool_manager.pyservices/senpai-md-consumer/senpai/md_consumer/main.pyservices/senpai-md-consumer/senpai/md_consumer/publisher.pyservices/swapper-service/requirements.txt
Sync Procedure (NODE1 -> Laptop)
- Snapshot and compare hashes:
- compute SHA256 for the critical file list on laptop and NODE1.
- Backup local copies:
rollback_backups/node1_sync_<timestamp>/...
- Copy runtime files from NODE1 to laptop:
scp root@144.76.224.179:/opt/microdao-daarion/<file> ...
- Verify 1:1 hash match.
File Tool Implementation
Implemented in actual NODE1 stack (services/router/* + gateway):
Added actions
excel_createexcel_updatecsv_createcsv_updatejson_exportyaml_exportzip_bundledocx_createdocx_updatepptx_createpptx_updateods_createods_updateparquet_createparquet_updatepdf_mergepdf_splitpdf_fillpdf_updatedjvu_to_pdfdjvu_extract_texttext_createtext_updatemarkdown_createmarkdown_updatexml_exporthtml_exportimage_createimage_editimage_convertimage_bundlesvg_exportsvg_to_png
Standard output contract
For file-producing tool calls, router now propagates:
file_base64file_namefile_mimemessage(inside tool result payload)
Gateway behavior
gateway-bot/http_api.py now sends Telegram sendDocument when file fields are present.
Changed Files
services/router/requirements.txtservices/router/agent_tools_config.pyservices/router/tool_manager.pyservices/router/main.pyservices/router/Dockerfilegateway-bot/router_client.pygateway-bot/http_api.py
Deployment Steps (NODE1)
- Backup target files on NODE1 before each step.
- Sync updated files to
/opt/microdao-daarion. - Compile checks:
python3 -m py_compile services/router/tool_manager.py services/router/main.py services/router/agent_tools_config.py gateway-bot/router_client.py gateway-bot/http_api.py
- Rebuild/restart runtime services:
docker compose -f docker-compose.node1.yml up -d --build --no-deps router gateway
- Health checks:
curl http://127.0.0.1:9102/healthcurl http://127.0.0.1:9300/health
Smoke Tests
Run inside dagi-router-node1 to validate actions deterministically:
- Excel create/update
- Text/Markdown create/update
- XML/HTML export
- PPTX create/update
- ODS create/update
- Parquet create/update
- CSV create/update
- JSON/YAML export
- ZIP bundle
- DOCX create/update
- PDF merge/split/fill
- PDF update (rotate/reorder/remove/extract/metadata)
- DJVU to PDF conversion
- DJVU text extraction
- Image create/edit/convert
- Image bundle (zip)
- SVG export + SVG->PNG convert (rect/circle/ellipse/line/polyline/polygon/text)
Also verify infer endpoint still works:
POST http://127.0.0.1:9102/v1/agents/devtools/infer
Backups Created During This Work
rollback_backups/file_tool_step1_20260215_011637/...rollback_backups/file_tool_step2_tool_manager.py.bak_20260215_012029rollback_backups/file_tool_step3_tool_manager.py.bak_20260215_012200rollback_backups/file_tool_step4_tool_manager.py.bak_20260215_012309services/router/tool_manager.py.bak_20260215_020902services/router/tool_manager.py.bak_20260215_112313services/router/tool_manager.py.bak_20260215_112459services/router/requirements.txt.bak_20260215_112459services/router/tool_manager.py.bak_20260215_112652services/router/requirements.txt.bak_20260215_112652services/router/tool_manager.py.bak_20260215_112841services/router/tool_manager.py.bak_20260215_112912services/router/tool_manager.py.bak_20260215_113301services/router/tool_manager.py.bak_20260215_114512services/router/tool_manager.py.bak_20260215_114740services/router/tool_manager.py.bak_20260215_120912services/router/Dockerfile.bak_20260215_120912services/router/tool_manager.py.bak_20260215_121116
Rollback (NODE1)
cd /opt/microdao-daarion
cp rollback_backups/file_tool_step1_20260215_011637/services/router/requirements.txt services/router/requirements.txt
cp rollback_backups/file_tool_step1_20260215_011637/services/router/agent_tools_config.py services/router/agent_tools_config.py
cp rollback_backups/file_tool_step1_20260215_011637/services/router/tool_manager.py services/router/tool_manager.py
cp rollback_backups/file_tool_step1_20260215_011637/services/router/main.py services/router/main.py
cp rollback_backups/file_tool_step1_20260215_011637/gateway-bot/router_client.py gateway-bot/router_client.py
cp rollback_backups/file_tool_step1_20260215_011637/gateway-bot/http_api.py gateway-bot/http_api.py
docker compose -f docker-compose.node1.yml up -d --build --no-deps router gateway
Notes
docker-compose.node1.ymlmay warn about deprecatedversionkey; this is non-blocking.- Avoid
--remove-orphansunless explicitly intended. - Use
--no-depsfor targeted router/gateway rollout to avoid unrelated service churn.