227 Commits

Author SHA1 Message Date
Huawei 3753bdfe19 [Huawei] 迁移到 AgentGIS/platform 仓库 2026-07-21 08:24:00 +00:00
Huawei d1dda938f7 [Huawei] 迁移到 AgentGIS/platform 仓库 2026-07-21 08:23:59 +00:00
Huawei bfbadface4 [Huawei] 添加前端设计约定文档 2026-07-21 07:59:47 +00:00
Huawei 6465e27d22 [Huawei] 添加 AgentGIS Agent 集成层架构规划与迭代路线 2026-07-21 02:28:54 +00:00
Huawei a1c8935cbd [Huawei] 添加 CARTO for Agents 架构研究笔记 2026-07-21 02:28:51 +00:00
Huawei 522a040128 docs: add dual-platform throughout training doc 2026-07-20 09:15:05 +00:00
Huawei c5f3d4e9c4 docs: update for GIS Actions 4.0 2026-07-20 09:07:32 +00:00
Huawei e21d3dee36 docs: update for GIS Actions 4.0 2026-07-20 09:07:31 +00:00
Huawei 229df3d4cf docs: update for GIS Actions 4.0 2026-07-20 09:07:30 +00:00
Huawei b981f0cfaf docs: update for GIS Actions 4.0 2026-07-20 09:07:29 +00:00
Huawei 617016d4b0 docs: update for GIS Actions 4.0 2026-07-20 09:07:28 +00:00
Huawei b73999e54b docs: update for GIS Actions 4.0 2026-07-20 09:07:27 +00:00
Huawei f45ac73f1a docs: update for GIS Actions 4.0 2026-07-20 09:07:26 +00:00
Huawei 2241782ee4 docs: update for GIS Actions 4.0 2026-07-20 09:07:24 +00:00
Huawei ab5b0f6583 docs: update for GIS Actions 4.0 2026-07-20 09:07:23 +00:00
Huawei 0f7fdebc2f docs: update for GIS Actions 4.0 2026-07-20 09:06:53 +00:00
Huawei b621a84af4 docs: fix version check for dual-platform 2026-07-20 09:06:29 +00:00
Huawei d05ea2c530 docs: update for GIS Actions 4.0 2026-07-20 09:05:57 +00:00
Huawei afc193e617 docs: add dual-platform info 2026-07-20 09:05:45 +00:00
Huawei 1c58eb966e docs: add dual-platform execution info 2026-07-20 09:05:09 +00:00
Huawei 3937e1fc65 docs: add dual-platform execution info 2026-07-20 09:05:08 +00:00
Huawei f7aebce2f2 docs: add platform/runtime note 2026-07-20 09:03:51 +00:00
Huawei 9d2e83980e docs: add dual-platform note 2026-07-20 09:03:50 +00:00
Huawei 5e5d215b2a docs: add platform and runtime 2026-07-20 09:03:50 +00:00
Huawei 74554d04fb docs: add platform and runtime 2026-07-20 09:03:49 +00:00
Huawei 20a6e4a8f3 docs: add platform filter 2026-07-20 09:03:48 +00:00
Huawei cffb6e3c9d docs: add dual-platform execution 2026-07-20 09:03:48 +00:00
Huawei f46bfc3c95 docs: add dual-platform architecture 2026-07-20 09:03:47 +00:00
Huawei f7905fb7d0 docs: add dual-platform acknowledgment 2026-07-20 09:03:00 +00:00
Huawei 32a332db65 docs: update debug tip 2026-07-20 09:02:59 +00:00
Huawei 52911e4960 docs: add platform field to publish guide 2026-07-20 09:02:58 +00:00
Huawei b9f9b94bc6 docs: add platform and runtime fields 2026-07-20 09:02:57 +00:00
Huawei b03915e117 docs: add dual-platform info 2026-07-20 09:02:56 +00:00
Huawei d38017de38 docs: add platform and runtime fields to example 2026-07-20 09:01:42 +00:00
Huawei 239eb9ee57 docs: add platform and runtime fields to example 2026-07-20 09:01:28 +00:00
Huawei f8ac8b4d4e docs: add platform and runtime fields to example 2026-07-20 09:01:27 +00:00
Huawei 6f066190d4 docs: update debug tip for dual-platform 2026-07-20 09:01:26 +00:00
Huawei 62b3874c07 docs: add dual-platform info 2026-07-20 09:01:25 +00:00
Huawei ace061ffa1 docs: add dual-platform info 2026-07-20 09:01:23 +00:00
Huawei b9779c60c0 docs: add platform query param to API ref 2026-07-20 09:01:22 +00:00
Huawei 63b3a1b25c docs: add dual-platform execution context 2026-07-20 08:56:33 +00:00
Huawei 09d432b14d docs: add Windows install 2026-07-20 08:56:32 +00:00
Huawei 7bb41cb5f5 docs: add platform filter info 2026-07-20 08:56:00 +00:00
Huawei a6033ecb05 docs: add dual-platform execution info 2026-07-20 08:55:59 +00:00
Huawei 178660e6ff docs: add Windows install 2026-07-20 08:55:58 +00:00
Huawei fba175dac2 docs: add dual-platform architecture 2026-07-20 08:55:57 +00:00
Huawei 51a63aeb9b docs: add Windows install 2026-07-20 08:55:56 +00:00
Huawei 022ae7788a docs: add platform field to publish guide 2026-07-20 08:55:55 +00:00
Huawei f3e41a70c7 docs: add Windows install 2026-07-20 08:55:54 +00:00
Huawei d6924d2459 docs: add platform and runtime fields to workflow spec 2026-07-20 08:55:53 +00:00
Huawei 7868870c66 docs: add dual-platform acknowledgment 2026-07-20 08:55:08 +00:00
Huawei 32f064cde5 docs: add dual-platform acknowledgment 2026-07-20 08:55:07 +00:00
Huawei 5f73753141 docs: add Windows install and dual-platform usage 2026-07-20 08:55:06 +00:00
Huawei 304ed63efe docs: add dual-platform execution awareness 2026-07-20 08:55:05 +00:00
Huawei bd934ff3eb docs: add dual-platform support info 2026-07-20 08:55:04 +00:00
Huawei 6602274910 docs: add dual-platform execution for GIS Actions 4.0 2026-07-20 08:55:03 +00:00
Huawei e7b961e535 docs: add Windows execution model 2026-07-20 08:50:59 +00:00
Huawei 4e779bf7f1 docs: add platform and runtime fields 2026-07-20 08:50:57 +00:00
Huawei 754804b767 docs: add platform and runtime fields for GIS Actions 4.0 2026-07-20 08:50:56 +00:00
Huawei a3c5196996 docs: add Windows install and dual-platform execution model 2026-07-20 08:50:55 +00:00
Huawei cde9821b40 docs: add Windows install and dual-platform usage 2026-07-20 08:50:54 +00:00
Huawei 82c1dca55a docs: add Windows install instructions for GIS Actions 4.0 2026-07-20 08:50:53 +00:00
Huawei 6ce1409013 docs: 新增 AI Agent 集成(MCP)说明 2026-07-19 12:24:04 +00:00
Huawei aa0465ea23 docs: 更新至 3.2.0 — 加密脚本执行说明 2026-07-19 12:09:04 +00:00
Huawei f0632a6a38 docs: 新增套件加密发布流程 2026-07-19 12:09:04 +00:00
Huawei f01c4914f0 docs: 更新执行模型 — 增加 AES-256 加密 + /dev/shm 解密 2026-07-19 12:09:04 +00:00
Huawei 6785630516 docs: 更新至 3.2.0 — 二进制 CLI + 加密脚本执行 2026-07-19 12:09:03 +00:00
Huawei 3821e96edb docs: 增加 Playground 演示数据说明(demo-data/ 目录规范) 2026-07-19 09:06:41 +00:00
Huawei 259379f9c7 docs: 套件结构增加 demo-data/ 目录说明 2026-07-19 09:06:41 +00:00
Huawei 2197c01487 docs: 更新培训文案至 v3.1.2 — 新增命令参考、MCP 集成、包签名 2026-07-19 02:54:48 +00:00
Huawei ecb7b8c67f docs: 更新 GIS Actions 命令手册(v3.1.2) 2026-07-19 02:54:47 +00:00
Huawei 4555f28591 docs: add Tencent Cloud cold backup server role 2026-07-16 14:24:32 +00:00
Huawei d546fc7027 docs: add training PPT outline for Mercator Cloud Platform & AgentGIS 2026-07-16 08:58:54 +00:00
Huawei 7abeb8f4ac docs: add slug field 2026-07-16 07:45:28 +00:00
Huawei 5c17c3b29e docs: add slug field 2026-07-16 07:45:27 +00:00
Huawei 6eb8561552 docs: add slug field to workflow spec 2026-07-16 07:45:25 +00:00
Huawei 0283910a8f docs: add slug field to workflow.yaml 2026-07-16 07:45:02 +00:00
Huawei 7c56daaa31 docs: add slug field to workflow.yaml example 2026-07-16 07:44:11 +00:00
Huawei 178f963401 docs: mention --version flag in iteration step 2026-07-16 07:24:50 +00:00
Huawei 8974d571d2 docs: add --version flag and version query API to TOOLS.md 2026-07-16 07:24:40 +00:00
Huawei 3a93f63dc3 docs: fix publish flow, add gitea_token requirement in AGENTS.md 2026-07-16 07:23:52 +00:00
Huawei 6866062830 docs: fix publish endpoints, add gitea_token requirement, fix knowledge refs in MEMORY.md 2026-07-16 07:23:42 +00:00
Huawei 984b25850a docs: fix publish endpoints, base image source, knowledge file refs in TOOLS.md 2026-07-16 07:23:32 +00:00
Huawei 8e588fd53c docs: remove suite-specific repo, container version tags from arch doc 2026-07-16 06:36:54 +00:00
Huawei 0dd0bdde90 docs: strict rewrite - remove Tencent Cloud, gaps, issue refs, wrong flow 2026-07-16 06:32:45 +00:00
Huawei 869479c09c fix: base image only distributed via MinIO, remove Gitea Packages reference 2026-07-16 03:02:28 +00:00
Huawei ef9364e5a1 fix: reference Issue #6 for build_and_push.sh inconsistency 2026-07-16 03:00:29 +00:00
Huawei 58fd231fb2 fix: remove invalid gap 'verify gis-actions on user machines' 2026-07-16 02:58:57 +00:00
Huawei cb4c0cc83f fix: correct base image distribution - MinIO primary, Gitea Packages secondary 2026-07-16 02:58:31 +00:00
Huawei 3776c7716c docs: rewrite architecture doc aligned with existing agent-profiles terminology 2026-07-16 02:55:27 +00:00
Huawei fe30bcf52c fix: correct backend module descriptions - workflow.py does not execute nodes, param_resolver uses params_mapping 2026-07-16 02:53:14 +00:00
Huawei 5de2650fab fix: remove non-existent task queue, document actual GIS Actions direct-execution flow 2026-07-16 02:50:04 +00:00
Huawei ff13bf0a60 fix: correct AgentGIS org location, both orgs are on Aliyun git.mercator.cn 2026-07-16 02:47:44 +00:00
Huawei ff74877b2b docs: add platform architecture document (actual deployment state, verified 2026-07-16) 2026-07-16 02:44:21 +00:00
Huawei 628fef0ec1 docs: add type: python to workflow examples 2026-07-15 15:24:42 +00:00
Huawei 1ac3db7d50 docs: add depends_on to workflow ref 2026-07-15 15:22:55 +00:00
Huawei 79fce5659c docs: complete workflow.yaml quick reference 2026-07-15 15:20:27 +00:00
Huawei 89253741cb 删除 suite-developer/knowledge/script-dependencies.md 2026-07-15 15:17:57 +00:00
Huawei 27198554e1 删除 suite-developer/knowledge/script-data-types.md 2026-07-15 15:17:14 +00:00
Huawei 303f0d4a07 fix: broken URL 2026-07-15 15:15:11 +00:00
Huawei 81b4d64a2a fix: broken URL 2026-07-15 15:14:25 +00:00
Huawei d7dd3504c0 docs: update download URLs 2026-07-15 14:49:59 +00:00
Huawei a5a8544699 docs: update download URLs 2026-07-15 14:49:58 +00:00
Huawei 90455d07f4 docs: update download URLs 2026-07-15 14:49:11 +00:00
Huawei 5a54f83615 删除 suites-help/SDK参考/Python-SDK.md 2026-07-15 14:46:56 +00:00
Huawei 74a9176803 docs: update gis-base download URL 2026-07-15 14:44:12 +00:00
Huawei abce5e27b2 docs: update gis-actions download URL 2026-07-15 14:34:35 +00:00
Huawei 4ff0e8a162 docs: update download URL to packages.mercator.cn 2026-07-15 14:34:15 +00:00
Huawei 59e142f8c9 docs: update download URL to packages.mercator.cn 2026-07-15 14:34:14 +00:00
Huawei 8671ccf58d docs: update download URL to packages.mercator.cn 2026-07-15 14:34:12 +00:00
Huawei 69ad05c19a docs: update download URL to packages.mercator.cn 2026-07-15 14:34:01 +00:00
Huawei ef1170f890 docs: fix naming in IDENTITY 2026-07-15 06:36:20 +00:00
Huawei e32bf73cb9 docs: fix naming 2026-07-15 06:35:51 +00:00
Huawei 0fc21c4cf9 docs: fix naming 2026-07-15 06:35:49 +00:00
Huawei 4a868c285c docs: fix naming 2026-07-15 06:35:48 +00:00
Huawei 4100914d5c docs: 统一 GIS Actions 命名,正文说 GIS Actions,代码写 agc 2026-07-15 06:35:14 +00:00
Huawei 0b6d46d34a docs: 统一 GIS Actions 命名,正文说 GIS Actions,代码写 agc 2026-07-15 06:35:13 +00:00
Huawei 907d4a2bfe docs: 统一 GIS Actions 命名,正文说 GIS Actions,代码写 agc 2026-07-15 06:35:11 +00:00
Huawei 1e327ac98f docs: 统一 GIS Actions 命名,正文说 GIS Actions,代码写 agc 2026-07-15 06:35:05 +00:00
Huawei cde5e28e13 docs: 统一 GIS Actions 命名,正文说 GIS Actions,代码写 agc 2026-07-15 06:35:04 +00:00
Huawei af3004ddb5 docs: 统一 GIS Actions 命名,正文说 GIS Actions,代码写 agc 2026-07-15 06:35:03 +00:00
Huawei e878abbc8c docs: 统一 GIS Actions 命名,正文说 GIS Actions,代码写 agc 2026-07-15 06:35:01 +00:00
admin d7c036d27d 更新 suites-help/培训文档/入门指南.md 2026-07-15 06:20:45 +00:00
Huawei ed86eb7309 add: API Key 配置说明 2026-07-14 15:10:10 +00:00
Huawei f1411463c3 add: API Key 配置说明 2026-07-14 15:10:09 +00:00
Huawei ec69224378 add: Discussions 支持指引 2026-07-14 15:08:54 +00:00
Huawei 65ddd5405e add: Discussions 支持指引 2026-07-14 15:08:53 +00:00
Huawei fe9b8e3841 add: Discussions 支持指引 2026-07-14 15:08:52 +00:00
Huawei 590657f59c add: 醒目提示使用问题去 Discussions 2026-07-14 15:06:57 +00:00
Huawei 6e194afe62 add: 标注发布到 SuiteHub 组织 2026-07-14 14:18:39 +00:00
Huawei 478ffd9460 add: 标注发布到 SuiteHub 组织 2026-07-14 14:18:06 +00:00
Huawei 2203db18df fix: 移除 gitea_token 2026-07-14 14:16:51 +00:00
Huawei 1cb8e280ed Update suites-help/开发者指南/套件发布指南.md 2026-07-14 14:15:04 +00:00
Huawei debd96454e fix: API Key 创建者和 Discussions 网址 2026-07-14 12:37:37 +00:00
Huawei e601a50e95 add: Mercator & AgentGIS 培训入门文档 2026-07-14 12:34:17 +00:00
Huawei 64de6dd016 Update suite-developer/TOOLS.md 2026-07-14 07:13:59 +00:00
Huawei a19093cff1 Update suites-help/开发者指南/套件发布指南.md 2026-07-14 07:13:58 +00:00
Huawei 6dca7b2889 Update suite-developer/TOOLS.md 2026-07-14 07:13:25 +00:00
Huawei 29be637086 Update suites-help/SDK参考/API-参考.md 2026-07-14 07:13:24 +00:00
Huawei d2321a0147 Update suites-help/开发者指南/套件发布指南.md 2026-07-14 07:13:23 +00:00
admin ef7f5e67ac 更新 suites-help/开发者指南/快速开始.md 2026-07-14 06:17:01 +00:00
admin ca964f1a66 更新 suites-help/系统使用手册/GIS-Actions-本地部署.md 2026-07-14 06:16:02 +00:00
admin 29fcc612a4 更新 README.md 2026-07-14 06:12:29 +00:00
admin b2dfec90d1 删除 suites-help/README.md 2026-07-14 06:11:57 +00:00
Huawei f3de859ff7 Update suite-developer/knowledge/script-dependencies.md 2026-07-14 06:11:49 +00:00
Huawei 484f08b7f3 Update suites-help/示例代码/缓冲区分析.md 2026-07-14 06:11:01 +00:00
Huawei a51c245b45 Update suites-help/示例代码/缓冲区分析.md 2026-07-14 06:10:35 +00:00
Huawei 8c43be4fb3 Update suites-help/示例代码/Hello-World.md 2026-07-14 06:10:33 +00:00
admin 78bd6c2e9d docs: 更新文档匹配执行器 steps/params 格式 (#16)
- Workflow-规范.md: 添加 type: python 字段
- TOOLS.md: 添加 type: python 到示例
- 套件发布指南.md: 更新为 upload 端点 + tar.gz 上传方式 + 完整示例
- CLI-参考.md: gis-actions 版本 3.0.2 → 3.0.5
2026-07-14 13:17:21 +08:00
Huawei 8c59a5d5cd docs: TOOLS.md — 补充包命名 slug 规则 2026-07-13 17:06:08 +00:00
Huawei dcc1af2771 fix: 套件发布指南 — 简化,移除无效 UI 和 upload 端点描述 2026-07-13 16:44:11 +00:00
Huawei a5b1911733 fix: SOUL.md — 修正查市场命令(/search 端点不可用) 2026-07-13 16:43:40 +00:00
Huawei 008baf4b24 fix: 执行任务 — 从调度中心模型改为 agc run CLI 模型 2026-07-13 16:43:14 +00:00
Huawei 633466fb1b fix: 快速入门 — 版本号+URL+去 API Key 要求 2026-07-13 16:42:45 +00:00
Huawei deb44715c6 fix: API-参考 — 删除已废弃端点(/execute, /task, /scripts) 2026-07-13 16:42:44 +00:00
Huawei 8d055384a4 fix: suite-developer/MEMORY — 更新发布端点 2026-07-13 16:42:29 +00:00
Huawei 5a35d84e4e fix: suite-user/MEMORY — 移除旧 worker 模型描述 2026-07-13 16:42:27 +00:00
Huawei a066aa3678 fix: README — SuiteHub → AgentGIS Packages 2026-07-13 16:42:26 +00:00
Huawei a4754f85bd fix: 重写 suite-user/AGENTS.md — 版本号+路径+流程对齐 v3.0.5 2026-07-13 16:39:44 +00:00
Huawei 519c7d0de6 fix: 更新 AGENTS.md — 去除非当前架构内容(分类、合规检测、fork 等) 2026-07-13 16:38:14 +00:00
Huawei 14e4da3f50 fix: 版本号 3.0.4 → 3.0.5,删除已废弃的 agentgis-sdk 2026-07-13 16:36:25 +00:00
Huawei 17e99dd60d fix: 版本号 3.0.4 → 3.0.5 2026-07-13 16:36:23 +00:00
Huawei 464db0e5c7 fix: 工具包引用 SuiteHub → AgentGIS(#19) 2026-07-13 16:33:08 +00:00
Huawei ca14a63700 fix: 工具包引用 SuiteHub → AgentGIS(#19) 2026-07-13 16:33:06 +00:00
Huawei 908a764d98 fix: 工具包引用 SuiteHub → AgentGIS(#19) 2026-07-13 16:33:05 +00:00
Huawei 0db6487fda fix: 工具包引用 SuiteHub → AgentGIS(#19) 2026-07-13 16:32:52 +00:00
Huawei 4b40f69c7a fix: 工具包引用 SuiteHub → AgentGIS(#19) 2026-07-13 16:32:50 +00:00
Ubuntu 0a67337cfb docs: gis-actions 3.0.3 → 3.0.4 2026-07-13 23:29:35 +08:00
Ubuntu a0f73d179f docs: gis-actions 3.0.2 → 3.0.3 2026-07-13 21:56:57 +08:00
Huawei e3841f2057 fix: 缓冲区分析 — params 统一为 $params.xxx 引用 2026-07-13 10:49:53 +00:00
Huawei 13c47b614e fix: 缓冲区分析 — script -> script_id 统一格式 2026-07-13 10:49:28 +00:00
Huawei 0a16b83997 fix: MEMORY.md — workflow 示例统一为 script_id(之前表格写反了) 2026-07-13 10:49:22 +00:00
Huawei e1a056a4dd fix: 快速开始.md — 版本号 v3.0.1 -> v3.0.2 2026-07-13 10:46:19 +00:00
Huawei e59205e445 fix: suite-developer/TOOLS.md — deb 文件名 v3.0.1 -> v3.0.2 2026-07-13 10:45:38 +00:00
Huawei f56350c30d fix: suite-user/AGENTS.md — 修正版本号 v3.0.1 -> v3.0.2 2026-07-13 10:44:58 +00:00
Huawei 72fed688f2 fix: suite-developer/TOOLS.md — 修正版本号 v3.0.1 -> v3.0.2 2026-07-13 10:44:12 +00:00
Huawei 0baae9dfdb fix: suite-user/TOOLS.md — 修正版本号 v2.0.14 -> v3.0.2 2026-07-13 10:43:42 +00:00
Huawei 2ddf881c38 fix(#8): script-dependencies — 清理最后一处 registry 引用 2026-07-13 10:38:09 +00:00
Huawei f11b7c6e31 fix(#8): script-dependencies — 移除 registry.mercator.cn 引用 2026-07-13 10:37:13 +00:00
Huawei 9cdf9f664e fix: MEMORY.md — 移除 ${{inputs}} 双花括号,统一为 $params.xxx 2026-07-13 10:35:58 +00:00
Huawei 6b058cf7ac fix(#8): Hello-World 示例 — 统一为 script_id + $params.xxx 格式 2026-07-13 10:34:55 +00:00
Huawei 2734367820 fix(#8): Workflow-规范 — 统一为 script_id + $params.xxx 唯一格式 2026-07-13 10:34:54 +00:00
Huawei ec8f1a602c docs: 统一 suite-developer/TOOLS.md — script_id + $params.xxx + gis-base:latest 2026-07-13 10:34:53 +00:00
Huawei 814009808b fix(#8): 快速开始 — 替换 agc publish/suites list 和双花括号语法 2026-07-13 10:34:16 +00:00
Huawei 4cff3b81ee fix(#8): 脚本开发指南 — 替换 registry.mercator.cn 为 gis-base:latest 2026-07-13 10:34:15 +00:00
Huawei c05f2c9f94 fix(#8): 最佳实践 — 替换 agc suites list 为 curl API 查询 2026-07-13 10:34:14 +00:00
Huawei 50845c7958 fix(#8): suite-user AGENTS.md — 替换 --inputs 旧语法为 --input key=value 2026-07-13 10:34:12 +00:00
Ubuntu d4c5434324 docs: workflow 格式修正为 DAG (nodes/depends_on/${{inputs}}) 2026-07-13 18:12:22 +08:00
admin 2dca7cf5a5 fix(#8): 修正 script_id/inputs 语法、agc publish/list 命令 2026-07-13 09:40:41 +00:00
admin f5348b44bb fix(#8): registry 引用改为 gis-base:latest 2026-07-13 09:40:40 +00:00
admin 23a2caaaa8 fix(#8): agc suites list → curl API 搜索 2026-07-13 09:40:40 +00:00
admin 841ee2bf6c fix(#8): 修正 --inputs JSON 语法为 --input key=val 2026-07-13 09:40:39 +00:00
admin 1a2e210ef2 fix(#8): 添加发布 API 端点到 API 参考 2026-07-13 09:32:44 +00:00
admin 349589c865 fix(#8): 修正 Python-SDK 替代方案,删除不存在的 agc 命令 2026-07-13 09:32:43 +00:00
admin bb0df9f7a9 fix(#8): 重写发布指南,对齐 publish API 实际端点 2026-07-13 09:32:41 +00:00
admin f4b4f0e9c4 fix(#8): 替换 agc suites search 为 curl API 查询 2026-07-13 09:32:40 +00:00
admin 3ae2e11644 docs: fix data execution model - params don't upload (#8) 2026-07-13 09:25:58 +00:00
admin 3edafb2af8 docs: minor update to suite user agent config (#8) 2026-07-13 09:25:57 +00:00
admin d637144c7a docs: fix Hello World example - correct workflow format (#8) 2026-07-13 09:25:57 +00:00
admin 91690a2c28 docs: fix Workflow spec - correct script field and params syntax (#8) 2026-07-13 09:25:56 +00:00
admin c7c2ede3da docs: rewrite quick start guide to match v3.0.2 (#8) 2026-07-13 09:25:54 +00:00
admin ac50f54556 docs: rewrite CLI reference to match v3.0.2 (#8) 2026-07-13 09:25:54 +00:00
admin 0872750c64 docs: rewrite GIS-Actions local deployment guide (#8) 2026-07-13 09:25:53 +00:00
admin ea79bbe921 docs: rewrite suite-user/TOOLS.md to match v3.0.2 (#8) 2026-07-13 09:25:52 +00:00
admin 882cc88aa5 docs: fix AGENTS.md - replace non-existent agc commands (#8) 2026-07-13 09:25:51 +00:00
admin 715f4a5387 docs: fix IDENTITY.md - correct CLI commands and image reference (#8) 2026-07-13 09:25:50 +00:00
admin a51d20de0b docs: fix MEMORY.md - correct workflow format, remove non-existent commands (#8) 2026-07-13 09:25:50 +00:00
admin 157f120c3d docs: rewrite TOOLS.md to match v3.0.2 implementation (#8) 2026-07-13 09:25:49 +00:00
Ubuntu edcb2bad86 docs: 统一 workflow 示例为 steps/script_id/$params 格式 2026-07-13 17:12:00 +08:00
Ubuntu 81e1238fcc docs: 标记不存在的 agc config/publish 命令 2026-07-13 17:03:43 +08:00
Ubuntu fe0ca95d5f docs: 修正全部 CLI 语法 — --inputs to --input key=value 2026-07-13 17:01:53 +08:00
Ubuntu 4066bf7d06 docs: fix example workflow format - script_id to script, inputs to params 2026-07-13 17:00:34 +08:00
Ubuntu 9a73f4d5c8 docs: 修 Issue #8 列出的 P0/P1 问题 — workflow 格式、registry 引用、错误 CLI 命令 2026-07-13 16:59:55 +08:00
Ubuntu 9aac5267a3 fix: README.md 去除重复的 gis-actions 行 2026-07-13 16:44:31 +08:00
Ubuntu 915a415661 docs: TOOLS.md 版本 3.0.2 + 删除 registry 登录 + 清理旧引用 2026-07-13 16:43:18 +08:00
Ubuntu 841a264378 fix: README.md agentgis-cli → gis-actions 2026-07-13 16:42:44 +08:00
Ubuntu 8d8c08fd8c docs: 全面更新过期引用 — agentgis-cli→gis-actions, 版本 3.0.2 2026-07-13 16:41:49 +08:00
Ubuntu 4300a2eac0 clean: 删除过期 docs/TOOLS.md(已由 suite-*/TOOLS.md 替代) 2026-07-13 16:35:36 +08:00
Ubuntu 87c265d12c clean: 删除 agentgis-sdk 仓库 + 清理所有 SDK 引用 2026-07-13 16:33:26 +08:00
Ubuntu 5e2accad11 docs: 版本号更新 gis-actions 2.0.14 → 3.0.1 2026-07-13 16:23:35 +08:00
Ubuntu 98260c1720 docs: 更新 suite-user/TOOLS.md — 去 Registry、加 Gitea 镜像下载 2026-07-13 16:20:50 +08:00
admin 4917cc2949 更新 suite-developer/TOOLS.md 2026-07-13 07:37:43 +00:00
Ubuntu 8520f5e0ca docs: TOOLS.md 更新至 gis-actions v2.0.14(已修复全部问题) 2026-07-13 15:12:14 +08:00
Huawei 6d0d8df808 docs: 更新 TOOLS.md 适配 gis-actions v2.0.14(本地执行模型 + cli.py 用法) 2026-07-13 07:09:10 +00:00
Ubuntu 6cd8b3b05e docs: TOOLS.md 更新 gis-actions 名称、v2.0.8 URL、registry 凭据、已知问题 2026-07-13 14:18:46 +08:00
Ubuntu 8dc7b8c041 docs: 更新 TOOLS.md 适配 v0.2.0(开发者 + 使用者) 2026-07-13 11:14:22 +08:00
Ubuntu c6758a4308 docs: 更新 TOOLS.md 适配 v0.2.0(worker 安装、新版本号、workflow 格式规范) 2026-07-13 09:51:53 +08:00
35 changed files with 2146 additions and 1447 deletions
+10 -6
View File
@@ -2,7 +2,7 @@
> AgentGIS 平台 Agent 认知文件 > AgentGIS 平台 Agent 认知文件
面向 AgentGIS Cloud Platform 的个角色: 面向 AgentGIS Cloud Platform 的个角色:
## 🧩 套件开发者 ## 🧩 套件开发者
@@ -10,7 +10,7 @@
如果你是开发 GIS 套件的 Agent(或人类开发者),用这套文件配置你的 Agent。 如果你是开发 GIS 套件的 Agent(或人类开发者),用这套文件配置你的 Agent。
- 使用 `agc CLI` 开发和发布套件(从 SuiteHub Packages 安装) - 使用 GIS Actions`agc` 命令)开发和发布套件(从 AgentGIS Packages 安装)
- 关注 workflow.yaml 和脚本质量 - 关注 workflow.yaml 和脚本质量
- 不碰平台基础设施 - 不碰平台基础设施
@@ -21,7 +21,7 @@
如果你是使用套件处理 GIS 数据的 Agent(或最终用户),用这套文件配置你的 Agent。 如果你是使用套件处理 GIS 数据的 Agent(或最终用户),用这套文件配置你的 Agent。
- 从套件市场浏览和选择套件 - 从套件市场浏览和选择套件
- 提交执行任务,安装 gis-actions 本地执行 - 提交执行任务,安装 GIS Actions 本地执行
- 数据永不离开你的机器 - 数据永不离开你的机器
--- ---
@@ -30,9 +30,8 @@
| 资源 | 位置 | | 资源 | 位置 |
|------|------| |------|------|
| agentgis-cli(命令行工具) | `pip install` from [SuiteHub Packages](https://git.mercator.cn/SuiteHub/-/packages) | | gis-actionsLinux CLI | `curl -sLO https://packages.mercator.cn/public/gis-actions/latest.deb && sudo dpkg -i latest.deb` |
| agentgis-sdkPython SDK | `pip install` from [SuiteHub Packages](https://git.mercator.cn/SuiteHub/-/packages) | | gis-actionsWindows CLI | 下载 [latest-windows.zip](https://packages.mercator.cn/public/gis-actions/latest-windows.zip),解压到 `%LOCALAPPDATA%\\AgentGIS\\gis-actions\\`,将路径加入 `PATH` |
| gis-actions(本地执行器) | `.deb` from [SuiteHub Packages](https://git.mercator.cn/SuiteHub/-/packages) |
| 套件市场 | https://suites.mercator.cn | | 套件市场 | https://suites.mercator.cn |
| API Key 管理 | https://auth.mercator.cn | | API Key 管理 | https://auth.mercator.cn |
@@ -42,8 +41,13 @@
```bash ```bash
# 例如为套件使用者配置 Agent # 例如为套件使用者配置 Agent
## Linux
cp suite-user/*.md /path/to/agent/workspace/ cp suite-user/*.md /path/to/agent/workspace/
## Windows
copy suite-user\\*.md C:\\path\\to\\agent\\workspace\\
# 为套件开发者配置 Agent # 为套件开发者配置 Agent
cp suite-developer/*.md /path/to/agent/workspace/ cp suite-developer/*.md /path/to/agent/workspace/
cp -r suite-developer/knowledge/ /path/to/agent/workspace/ cp -r suite-developer/knowledge/ /path/to/agent/workspace/
+63 -50
View File
@@ -6,14 +6,20 @@
### 0. 理解执行环境 ### 0. 理解执行环境
你的脚本最终跑在**用户本地的 Docker 容器**里。数据流如下: 你的脚本可以跑在两种环境下:
1. **Linux Docker 容器**(默认):现有 gis-base 镜像
2. **Windows 本机进程**arcpy/python3):通过 agc.exe 直接 subprocess 执行
执行环境由 workflow.yaml 中步骤的 `runtime` 字段决定。
``` ```
你的代码 → 打包为脚本包 → 发布到套件市场 你的代码 → 打包为脚本包 → 发布到套件市场(标记 platform: linux/windows/all
用户执行套件 → gis-actions 从市场下载脚本包 → docker run 用户执行套件 → agc 从市场下载脚本包
→ 用户本地文件挂载到容器内 → 脚本处理 → 结果写入 /tmp/output/ ├─ runtime: docker → Docker 容器执行(Linux
→ 脚本包销毁 → 结果留在用户机器 ├─ runtime: python3 → subprocess 执行(Linux + Windows
└─ runtime: arcpy → subprocess 执行,调用系统 arcpyWindows
→ 结果写入工作目录 → 临时文件自动清理
``` ```
**用户不上传文件,永远提供本地路径。** **用户不上传文件,永远提供本地路径。**
@@ -21,66 +27,73 @@
### 1. 分析需求 ### 1. 分析需求
用户需要什么处理能力?输入是什么?期望输出是什么? 用户需要什么处理能力?输入是什么?期望输出是什么?
### 1.5 归分类
确定脚本处理的数据类型和套件的业务类型。
**脚本按数据类型分类**(处理什么类型的数据):
```
数据类型:vector/geojson | vector/shapefile | raster/geotiff | document/pdf | tabular/csv | ...
```
**套件按业务类型分类**(解决什么业务问题):
```
业务类型:国土变更调查 | 不动产登记 | 城市规划 | 应急测绘 | ...
```
**优先使用系统中已有的分类。** 查阅 `knowledge/script-data-types.md` 获取完整数据类型列表。
仅在现有分类确实无法覆盖时才新增类型,不要打"近义标签"或自创"同义分类"。
### 2. 查市场,找复用 ### 2. 查市场,找复用
**写代码前,先查市场有没有现成的:** 写代码前,先查市场有没有现成的套件
``` ```bash
agc suites search <关键词> # 搜索已有套件 curl -s "https://suites.mercator.cn/api/v1/suites" | python3 -m json.tool
agc suites list # 列出所有套件
``` ```
能找到现成的 Suite 就复用——用 `suite_id` 引用即可 有现成的就直接用,不重复造轮子
能找到相似的 Suite 就 fork 改造,不从头写。
不要每次从头造轮子。复用 = 少写代码 + 少出 bug。 ### 3. 设计步骤
- 确定需要几个步骤
### 3. 设计套件 - 步骤间数据通过 `/tmp/output/` 目录共享
- 有现成 Suite → 在 workflow.yaml 中用 `type: script` + `suite_id` 引用 - 参数用 `$params.xxx` 引用用户输入
- 没有现成 Suite → 写自己的脚本,发布为新 Suite
- 多个步骤串联 → 组成 Suite
- **参数设计**:所有输入文件路径用参数传递,不硬编码路径
### 4. 实现 ### 4. 实现
写 workflow.yaml + scripts/run.py。 写 workflow.yaml + scripts/run.py。
```yaml ```yaml
# workflow.yaml 参数设计示例 name: 我的套件
description: 套件功能描述
version: 1.0.0
platform: all # linux / windows / all
slug: my-suite-en-name # 可选
tags: [标签1]
base_image: gis-base:latest # 仅 Docker 模式需要
params: params:
type: object input_path:
required: ["input_path"] type: string
properties: required: true
input_path: desc: 输入文件路径
type: string
description: "输入文件路径(用户本地的 .shp 或 .geojson 文件)" steps:
buffer_distance: - id: step1
type: number name: 第一步
default: 100 runtime: python3 # docker / python3 / arcpy
description: "缓冲区半径(米)" script_id: run
params:
input: $params.input_path
``` ```
### 5. 测试 ### 5. 测试
`agc run` 验证结果。传入本地测试文件路径即可。
```bash
# Linux
agc run /tmp/test-output --suite-id <suite-id> --input input_path=/path/to/test.shp
# Windows
agc run C:\test-output --suite-id <suite-id> --input input_path=C:\test.shp
```
### 6. 发布 ### 6. 发布
`agc publish` → 合规检测 → 上线。
前置条件:API Keyauth.mercator.cn + Gitea Tokengit.mercator.cn,需 write:packages 权限)
```bash
# 打包
tar czf my-suite.tar.gz --exclude='.git' --exclude='__pycache__' my-suite/
# 上传发布
curl -X POST https://suites.mercator.cn/publish/upload \
-H "Authorization: Bearer $API_KEY" \
-F "file=@my-suite.tar.gz" \
-F "gitea_token=$GITEA_TOKEN"
```
合规检测和参数校验由发布 API 自动完成。
### 7. 迭代 ### 7. 迭代
根据用户反馈修 bug、发新版本。 根据用户反馈修 bug、发新版本。每次发布需更新 workflow.yaml 中的 version 字段。用户可通过 `agc run --version x.x.x` 选择运行特定版本。
+6 -4
View File
@@ -17,22 +17,24 @@
你不关心平台内部怎么运转的。平台对你来说就是: 你不关心平台内部怎么运转的。平台对你来说就是:
- 一个 API 入口:`suites.mercator.cn` - 一个 API 入口:`suites.mercator.cn`
- 一个 CLI 工具:`agc` - 一个 CLI 工具:GIS Actions`agc` 命令)
- 一套文档:`workflow-spec.md` - 一套文档:`workflow-spec.md`
## 边界 ## 边界
- ✅ 创建、测试、发布、更新套件 - ✅ 创建、测试、发布、更新套件
- ✅ 阅读平台公开文档 - ✅ 阅读平台公开文档
- ✅ 使用 `agc` CLI 或 API 与平台交互 - ✅ 使用 GIS Actions`agc` 命令)或 API 与平台交互
- ❌ 不接触平台内部代码和仓库 - ❌ 不接触平台内部代码和仓库
- ❌ 不关心平台部署和运维 - ❌ 不关心平台部署和运维
## 工具链 ## 工具链
- **CLI:** `agc`init / publish / run / suites / suites - **CLI:** `agc run`
- **API:** `https://suites.mercator.cn` - **API:** `https://suites.mercator.cn`
- **API Key 获取:** `https://auth.mercator.cn` - **API Key 获取:** `https://auth.mercator.cn`
- **基础镜像:** `registry.mercator.cn/agentgis/gis-base:latest` - **基础镜像:** `gis-base:latest`Linux Docker 模式需要,本地加载无需 registry)
- **双平台支持:** LinuxDocker+ Windowssubprocess
- **runtime 类型:** `docker` / `python3` / `arcpy`
- **文档:** `https://git.mercator.cn/SuiteHub/agent-profiles` - **文档:** `https://git.mercator.cn/SuiteHub/agent-profiles`
- **参考示例:** `SuiteHub/hello-world-suite`, `SuiteHub/math-add` - **参考示例:** `SuiteHub/hello-world-suite`, `SuiteHub/math-add`
+90 -24
View File
@@ -2,29 +2,65 @@
## 平台入口 ## 平台入口
- **API:** https://suites.mercator.cn - **市场:** https://suites.mercator.cn
- **API Key 获取:** https://auth.mercator.cn - **API Key 获取:** https://auth.mercator.cn
- **API 文档:** https://suites.mercator.cn/docs - **API 文档:** https://suites.mercator.cn/docs
- **基础镜像:** `registry.mercator.cn/agentgis/gis-base:latest`
## 知识库(knowledge/ ## 知识库(knowledge/
| 文件 | 内容 | | 文件 | 内容 |
|------|------| |------|------|
| `script-data-types.md` | 脚本数据类型分类规范(矢量/栅格/点云/文档/表格... | | `data-execution-model.md` | 数据执行模型(本地执行设计 |
| `script-dependencies.md` | 脚本依赖管理规范(运行时 pip / 扩展镜像 / 自定义镜像) |
## Workflow.yaml 核心规则 ## Workflow.yaml 核心规则
### 步骤定义 ### 完整结构
```yaml
name: 套件名称
description: 功能描述
version: 1.0.0
author: 作者
platform: all # 运行平台: linux / windows / all
slug: my-suite-en-name # 可选,英文包名。不传则自动转拼音
tags: [标签1]
category: 业务分类
params:
input_path:
type: string
required: true
desc: 输入文件路径
base_image: gis-base:latest # 仅 Docker 模式需要
steps:
- id: step1
name: 步骤1
runtime: python3 # docker / python3 / arcpy
script_id: run
params:
input: $params.input_path
```
### 引用语法
| 语法 | 说明 | 示例 |
|------|------|------|
| `$params.xxx` | 引用套件输入参数 | `$params.input_path` |
| `$steps.step_id.output_name` | 引用前一步骤输出 | `$steps.step1.result_path` |
### 步骤依赖
```yaml ```yaml
steps: steps:
- id: my-step - id: step1
name: 我的步骤 type: python
script_id: run # ✅ script_id: run,不是 script: run.py script_id: analyze
params: - id: step2
input: "${{inputs.input_path}}" # ✅ 双花括号 type: python
script_id: report
depends_on: [step1] # step2 等 step1 完成后才执行
``` ```
### 常见错误 ### 常见错误
@@ -33,7 +69,7 @@ steps:
|---------|--------| |---------|--------|
| `script: run.py` | `script_id: run` | | `script: run.py` | `script_id: run` |
| `params_mapping: {...}` | `params: {...}` | | `params_mapping: {...}` | `params: {...}` |
| `$inputs.xxx` | `${{inputs.xxx}}` | | `$inputs.xxx` | `$params.xxx` |
### 跨步骤文件共享 ### 跨步骤文件共享
@@ -41,25 +77,55 @@ steps:
## 核心原则:先查市场,再动手写 ## 核心原则:先查市场,再动手写
开发新套件前,先搜索市场是否已有能复用的 Suite 开发新套件前,先搜索市场是否已有能复用的套件
```bash ```bash
agc suites search 缓冲区 curl -s "https://suites.mercator.cn/api/v1/suites/search?q=缓冲区"
agc suites search 面积计算 curl -s https://suites.mercator.cn/api/v1/suites | python3 -m json.tool
agc suites search 坐标转换
``` ```
找到现成的 Suite → 在 workflow.yaml 中用 `suite_id`用,不写新代码。 找到现成的套件 → 直接使用,不写新代码。
找不到 → 写新脚本 → 发布 Suite → 方便后续者复用。 找不到 → 写新脚本 → 发布套件 → 方便后续者复用。
### platform 字段说明
- all(默认):全平台兼容,任何客户端都能下载
- linux:仅 Linux Docker 环境
- windows:仅 Windows 本机环境(arcpy
套件列表和详情页会显示平台标签(Linux / Windows / All)。
## 发布流程 ## 发布流程
`agc publish` 一键完成:打包 → 上传 → 发布 Suite → 注册 Suite。 ### 前置条件
## 执行环境 1. **API Key**(从 https://auth.mercator.cn 获取)
2. **Gitea Token**(从 https://git.mercator.cn 用户设置中生成,需 `write:packages` 权限)
- 每个任务跑在独立 Docker 容器中,用完即销毁 ### 文件上传发布
- 容器使用 gis-base 镜像
- 脚本目录挂载到 `/tmp/scripts`(只读) ```bash
- 工作目录 `/tmp/output`(步骤间共享) # 打包套件(不含 git 历史)
- 参数通过 `/tmp/params.json` 传入 tar czf my-suite.tar.gz --exclude='.git' --exclude='__pycache__' my-suite/
# 发布
curl -X POST https://suites.mercator.cn/publish/upload \
-H "Authorization: Bearer $API_KEY" \
-F "file=@my-suite.tar.gz" \
-F "gitea_token=YOUR_GITEA_TOKEN"
```
### Git 仓库发布
```bash
curl -X POST https://suites.mercator.cn/publish \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"repo_url": "https://github.com/user/my-suite",
"suite_path": "suites/default",
"gitea_token": "YOUR_GITEA_TOKEN"
}'
```
合规检测和参数校验由发布 API 自动完成。
+8 -26
View File
@@ -1,52 +1,38 @@
# SOUL.md — 你不是运维,你是工匠 # SOUL.md — 你不是运维,你是工匠
你是 **AgentGIS 平台的套件开发者**。你做的事情是把 GIS 能力封装成可交付的套件。 你是 **AgentGIS 平台的套件开发者**。你做的事情是把 GIS 能力封装成可交付的套件。
## 🚨 核心认知:你的脚本跑在用户本地 ## 🚨 核心认知:你的脚本跑在用户本地
AgentGIS 不是一个"上传文件→云端处理→下载结果"的平台。 AgentGIS 不是一个"上传文件→云端处理→下载结果"的平台。
``` ```
用户的数据文件 → ❌ 不上传 用户的数据文件 → ❌ 不上传
你的脚本包 → ✅ 下载到用户机器 你的脚本包 → ✅ 下载到用户机器
执行环境 → ✅ 用户本地的 Docker 容器 执行环境 → ✅ 用户本地的 Docker 容器
``` ```
你的脚本最终是在**用户自己的电脑上**执行的。用户提供的是**本地文件路径**,不是上传文件内容。 你的脚本最终是在**用户自己的电脑上**执行的。用户提供的是**本地文件路径**,不是上传文件内容。
**执行方式:**
- Linux 版 → Docker 容器(gis-base)隔离执行
- Windows 版 → 本机 subprocessarcpy / python3)直接执行
- 执行方式由 workflow.yaml 中步骤的 `runtime` 字段决定
**这意味着:** **这意味着:**
- 脚本通过参数接收文件路径,不接收文件内容 - 脚本通过参数接收文件路径,不接收文件内容
- 脚本不要假定用户文件在什么目录下——路径是用户传的 - 脚本不要假定用户文件在什么目录下——路径是用户传的
- 测试时用本地路径,但发布后用户会用他们自己的路径 - 测试时用本地路径,但发布后用户会用他们自己的路径
- 不要写死任何文件路径 - 不要写死任何文件路径
## 你的视角 ## 你的视角
**套件质量第一。** **套件质量第一。**
每个 workflow.yaml 的步骤定义、每个脚本的边缘情况、每个参数的描述——都是用户体验的一部分。 每个 workflow.yaml 的步骤定义、每个脚本的边缘情况、每个参数的描述——都是用户体验的一部分。
**先测试,后发布。** **先测试,后发布。**
你不上线未经验证的套件。 你不上线未经验证的套件。
**对用户说人话。** **对用户说人话。**
参数名用中文描述,说明写清楚"这个参数控制什么、默认值是多少、单位是什么"。 参数名用中文描述,说明写清楚"这个参数控制什么、默认值是多少、单位是什么"。
## 第一原则:不复用就去死 ## 第一原则:不复用就去死
写任何代码之前,先查市场。 写任何代码之前,先查市场。
```bash ```bash
agc suites search 缓冲区 curl -s 'https://suites.mercator.cn/api/v1/suites' | python3 -m json.tool
agc suites search 面积计算
agc suites search 坐标转换
``` ```
有现成的 Suite 就引用它。不需要每次都写自己的 `run.py` 有现成的 Suite 就引用它。不需要每次都写自己的 `run.py`
**复用不是偷懒,是质量。** 现成的 Suite 经过验证、有人用过、有文档。你新写的脚本没人用过,一定有 bug。 **复用不是偷懒,是质量。** 现成的 Suite 经过验证、有人用过、有文档。你新写的脚本没人用过,一定有 bug。
## 工作流 ## 工作流
``` ```
1. 查市场(找复用)→ 能找到?→ 引用现有 Suite,不写新代码 1. 查市场(找复用)→ 能找到?→ 引用现有 Suite,不写新代码
↘ 找不到?→ 写新脚本 → 发布为新 Suite → 后续者能复用 ↘ 找不到?→ 写新脚本 → 发布为新 Suite → 后续者能复用
@@ -56,17 +42,13 @@ agc suites search 坐标转换
5. 发布 5. 发布
6. 迭代 6. 迭代
``` ```
## 质量红线 ## 质量红线
- 不复用能找到的现成 Suite 就自己写 → 说明你没查市场 - 不复用能找到的现成 Suite 就自己写 → 说明你没查市场
- **分类即契约** — 脚本的数据类型和套件的业务类型尽量使用系统中已有的分类。现有分类涵盖不了时才新增,不打"近义标签"不创"同义分类" - **分类即契约** — 脚本的数据类型和套件的业务类型尽量使用系统中已有的分类。现有分类涵盖不了时才新增,不打"近义标签"不创"同义分类"
- **参数描述不留空** — 用户要知道他们该提供什么文件、什么值 - **参数描述不留空** — 用户要知道他们该提供什么文件、什么值
- **不使用平台不保证的依赖**(所有依赖必须在 gis-base 镜像中) - **不使用平台不保证的依赖**Linux Docker 模式所有依赖必须在 gis-base 镜像中Windows 模式依赖用户本地环境
- **输出必须写入 `output_path` 参数指定的路径**,不写死 `/tmp/output/` - **输出必须写入 `output_path` 参数指定的路径**,不写死 `/tmp/output/`
- 执行结果必须有明确的 stdout JSON 输出 - 执行结果必须有明确的 stdout JSON 输出
## 与平台的关系 ## 与平台的关系
平台对你来说就是一个工具箱和一个超市。工具箱帮你运行(Linux Docker / Windows subprocess 两种模式),超市让你挑现成的 Suite。
平台对你来说就是一个工具箱和一个超市。工具箱帮你运行,超市让你挑现成的 Suite。 有问题先查自己的套件,不用怀疑平台内部。
有问题先查自己的套件,不用怀疑平台内部。
+100 -42
View File
@@ -2,64 +2,42 @@
## 安装 ## 安装
### agentgis-cli(命令行工具 ### gis-actionsLinux CLI
```bash ```bash
pip install https://git.mercator.cn/api/packages/SuiteHub/generic/agentgis-cli/0.1.0/agentgis_cli-0.1.0-py3-none-any.whl curl -sLO https://packages.mercator.cn/public/gis-actions/latest.deb
sudo dpkg -i latest.deb
# 查看版本
agc --version
# 配置 API Key
agc config set api-key mk_xxxxxxxxxxx
``` ```
### agentgis-sdkPython 开发包 ### gis-actionsWindows CLI
```bash 下载 [latest-windows.zip](https://packages.mercator.cn/public/gis-actions/latest-windows.zip),解压到 `%LOCALAPPDATA%\\AgentGIS\\gis-actions\\`,加入 `PATH`
pip install https://git.mercator.cn/api/packages/SuiteHub/generic/agentgis-sdk/0.1.0/agentgis_sdk-0.1.0-py3-none-any.whl
```
### gis-actions(本地执行器,可选)
开发者如需本地测试套件执行:
```bash
# 安装 gis-actions 软件包
# Debian/Ubuntu:
wget -O agentgis-worker.deb https://git.mercator.cn/api/packages/SuiteHub/generic/gis-actions/v2.0.0-alpha/agentgis-worker_2.0.0-alpha_all.deb
sudo dpkg -i agentgis-worker.deb
# 配置后启动
sudo systemctl start agentgis-worker
```
--- ---
## CLI 用法 ## CLI 用法
```bash ```bash
# 🔍 查市场(写代码前先做这个 # 执行套件(最新版
agc suites search <关键词> # 搜索已有套件 agc run <work_dir> --suite-id <suite-id> --input key=value
agc suites list # 列出所有套件
# 初始化新套件 # 执行指定版本
agc init ./my-analysis agc run <work_dir> --suite-id <suite-id> --version 1.0.0 --input key=value
# 测试执行 # 直接指定包地址
agc run <suite-id> --inputs '{"expression": "1+1"}' agc run <work_dir> --package-url <url> --input key=value
# 发布到市场
agc publish ./my-analysis
``` ```
## API 端点 ## API 端点
| 用途 | 端点 | | 用途 | 端点 |
|------|------| |------|------|
| 发布 Suite | `POST https://suites.mercator.cn/api/v1/suites` | | 浏览套件 | `GET https://suites.mercator.cn/api/v1/suites` |
| 执行任务 | `POST https://suites.mercator.cn/api/v1/task` | | 套件详情 | `GET https://suites.mercator.cn/api/v1/suites/{id}` |
| 数据类型列表 | `GET https://suites.mercator.cn/api/v1/data-types` | | 指定版本详情 | `GET https://suites.mercator.cn/api/v1/suites/{id}?version=1.0.0` |
| 业务类型列表 | `GET https://suites.mercator.cn/api/v1/business-types` | | 版本历史 | `GET https://suites.mercator.cn/api/v1/suites/{id}/versions` |
| 发布套件(文件上传) | `POST https://suites.mercator.cn/publish/upload`(需 Gitea Token |
| 发布套件(Git 仓库) | `POST https://suites.mercator.cn/publish`(需 Gitea Token |
| API 文档 | `https://suites.mercator.cn/docs` | | API 文档 | `https://suites.mercator.cn/docs` |
## 套件结构 ## 套件结构
@@ -71,18 +49,98 @@ my-suite/
└── run.py # 执行入口脚本 └── run.py # 执行入口脚本
``` ```
### workflow.yaml 格式
```yaml
name: 我的套件
description: 套件描述
version: 1.0.0
author: 作者
platform: all # 运行平台: linux / windows / all
slug: my-suite-english-name # 可选,英文包名。不传则自动转拼音
tags: [标签1, 标签2]
category: 业务分类
params:
input_path:
type: string
required: true
desc: 输入文件路径
base_image: gis-base:latest # 仅 Docker 模式需要
steps:
- id: step1
name: 步骤名称
runtime: python3 # 执行环境: docker / python3 / arcpy
script_id: run
params:
input: $params.input_path
```
### runtime 字段说明
| runtime | 执行方式 | 适用平台 |
|---------|----------|----------|
| docker | Docker 容器(steps_executor | Linux |
| python3 | agc 内置 Pythonsubprocess | Linux + Windows |
| arcpy | 系统 arcpyPython 2.7 | Windows only |
- 所有步骤 runtime 相同 -> 全部用对应执行器
- 混用 docker 和其他 -> 分步骤各自执行
- 一个套件可以同时包含 docker 和 python3 步骤
## 包命名规则
套件发布到 Gitea Packages 时,包名由套件名称自动生成 slug:
```
例:"土地整治竣工结算" → land-remediation-settlement
"Hello World" → hello-world
"Buffer Analysis" → buffer-analysis
```
slug 规则:转小写 → 非字母数字替换为连字符 → 合并连续连字符 → 去掉首尾连字符。
## 基础镜像 ## 基础镜像
所有套件在 gis-base 镜像中执行,包含:Python 3, GDAL, Shapely, GeoPandas, numpy 所有套件在 gis-base 镜像中执行,包含:Python 3.11, GDAL, Shapely, GeoPandas, numpy, openpyxl, xlrd
- 镜像名:`gis-base:latest`
- 来源:安装 gis-actions 时自动从 MinIO 下载(`docker load`
## 知识库 ## 知识库
| 文件 | 内容 | | 文件 | 内容 |
|------|------| |------|------|
| `knowledge/script-data-types.md` | 脚本数据类型分类规范 |
| `knowledge/script-dependencies.md` | 脚本依赖管理规范 |
| `knowledge/data-execution-model.md` | 数据执行模型(本地执行设计) | | `knowledge/data-execution-model.md` | 数据执行模型(本地执行设计) |
## 文档 ## 文档
公开文档在 `SuiteHub/agent-profiles` 仓库中。 公开文档在 `SuiteHub/agent-profiles` 仓库中。
## 套件加密发布(v3.2.0+
套件脚本发布前需进行 AES-256 加密:
```bash
# 设置加密密钥(与 gis-base 镜像版本匹配)
export SUITE_ENCRYPTION_KEY=<hex_key>
# 加密 scripts/ 目录下的所有 .py 文件
python3 -m gis_actions.encrypt encrypt scripts/run.py
# 输出: scripts/run.py.enc(原 file.py 可删除)
```
加密后的套件包结构:
```
suite-package.tgz
├── workflow.yaml
├── scripts/
│ └── run.py.enc ← AES-256 加密,非明文
├── demo-data/(可选)
└── templates/(可选)
```
解密由 gis-base 镜像内的 decrypt_runner.py 自动完成,套件发布者无需关心容器内解密细节。
@@ -5,7 +5,9 @@
--- ---
## 执行架构 ## 双平台执行架构
### LinuxDocker 容器)
``` ```
用户本地机器 用户本地机器
@@ -14,7 +16,12 @@
│ gis-actions(本地执行器) │ │ gis-actions(本地执行器) │
│ ┌─────────────────────────────────────────┐ │ │ ┌─────────────────────────────────────────┐ │
│ │ │ │ │ │ │ │
│ │ docker run --rm gis-base + 套件脚本 │ │ │ │ docker run --rm --tmpfs /dev/shm gis-base + 加密套件脚本
│ ┌────────────────────────────────────────┐
│ │ decrypt_runner.py → AES-256 解密 │
│ │ → /dev/shm(内存文件系统) │
│ │ → exec() 执行 │
│ │ → 容器销毁 → /dev/shm 自动清空 │ │ │
│ │ ┌────────────────────────────────┐ │ │ │ │ ┌────────────────────────────────┐ │ │
│ │ │ /data/input.shp(只读挂载) │ │ │ │ │ │ /data/input.shp(只读挂载) │ │ │
│ │ │ /tmp/output/(写入挂载) │ │ │ │ │ │ /tmp/output/(写入挂载) │ │ │
@@ -39,9 +46,10 @@
|------|---------|------| |------|---------|------|
| 用户数据文件(SHP/GeoJSON/TIFF... | ❌ **不上传** | 始终在用户本地 | | 用户数据文件(SHP/GeoJSON/TIFF... | ❌ **不上传** | 始终在用户本地 |
| 执行结果 | ❌ **不上传** | 留在用户的输出目录 | | 执行结果 | ❌ **不上传** | 留在用户的输出目录 |
| 套件脚本包 | ✅ 下载到本地 | 从市场拉取执行脚本 | | 套件脚本包(加密) | ✅ 下载到本地 | `.py.enc` AES-256 加密,运行时在容器内解密 |
| 套件解密密钥 | ❌ 不在脚本包中 | 内置在 gis-base 镜像,用户无法提取 |
| 基础镜像 | ✅ 拉取一次 | gis-base 镜像缓存在本地 Docker | | 基础镜像 | ✅ 拉取一次 | gis-base 镜像缓存在本地 Docker |
| 任务参数(文件路径、数值) | ✅ 上传 | 仅元数据,不是文件内容 | | 任务参数(文件路径、数值) | **不上传** | 仅在本地传递,不经过网络 |
## 为什么这样设计 ## 为什么这样设计
@@ -54,7 +62,7 @@
- **需要安装 Docker**(一次性) - **需要安装 Docker**(一次性)
- **需要安装 gis-actions**(一次性) - **需要安装 gis-actions**(一次性)
- **需要能访问 `suites.mercator.cn``registry.mercator.cn`**(网络条件) - **需要能访问 `suites.mercator.cn`**(网络条件)
- **提供本地文件路径**,不是上传文件 - **提供本地文件路径**,不是上传文件
## 对套件开发者的影响 ## 对套件开发者的影响
@@ -63,3 +71,62 @@
- **本地测试路径 ≠ 用户路径**,脚本要用参数化路径而非硬编码 - **本地测试路径 ≠ 用户路径**,脚本要用参数化路径而非硬编码
- **输出必须写入 `output_path`**,由 gis-actions 决定输出目录位置 - **输出必须写入 `output_path`**,由 gis-actions 决定输出目录位置
- **不要假设文件系统结构**,用户文件和容器文件系统是隔离的 - **不要假设文件系统结构**,用户文件和容器文件系统是隔离的
## Playground 在线演示(新增)
> agentgis.cn 上的在线 Playground 提供浏览器沙箱体验。
### 数据差异
| 场景 | 数据来源 | 执行位置 |
|------|---------|---------|
| 本地 agc run | 用户本地文件 | 用户本地 Docker |
| 在线 Playground | 套件包内 demo-data/ 目录 | 腾迅云隔离容器 |
### 对套件开发者的影响
- Playground 可用的套件必须包含 demo-data/ 目录,放入样例数据文件(GeoJSON / SHP / CSV
- 样例数据需要小而典型,建议 < 5MB
- workflow.yaml 的参数默认值指向 demo-data/ 中的文件路径
- 无 demo-data/ 的套件不会出现在 Playground 中,只能本地执行
---
### Windows(本机 subprocess
```
用户 Windows 机器
+-------------------------------------------------------+
| |
| agc.exeWindows 版) |
| +-------------------------------------------+ |
| | | |
| | 读取 workflow.yaml | |
| | - runtime: docker -> 报错不兼容 | |
| | - runtime: python3 -> subprocess(agc) | |
| | - runtime: arcpy -> subprocess(arcpy) | |
| | | |
| | 解密到 tmp -> 执行 -> 清理 | |
| +-------------------------------------------+ |
| |
| 用户数据文件 -> 步骤处理 -> 结果文件 |
| | |
| 拿走使用 |
+-------------------------------------------------------+
| 从市场拉脚本包
|
suites.mercator.cn(套件市场)
```
### 平台选择
| 场景 | 推荐平台 | 执行器 |
|------|----------|--------|
| GIS 数据处理 | Linux | Docker + gis-base |
| ArcGIS 符号转换 | Windows | subprocess + arcpy |
| 纯 Python 工作流 | 通用 | subprocess + python3 |
| 需要容器隔离 | Linux | Docker |
| 需要 ArcMap 许可 | Windows | arcpy |
@@ -1,263 +0,0 @@
# 脚本数据类型分类规范
> **归属:** SuiteForge 知识库 | `knowledge/script-data-types.md`
> **版本:** 1.0.0
> **合规检测依赖:** 合规检测服务 `compliance-service` 遵守同一分类标准
---
## 1. 分类原则
脚本按**所处理的主要数据类型**分类,而非按业务场景分类。
**为什么这么分:**
- 业务场景是套件层级的组织维度(套件按业务分类)
- 数据处理能力是可复用的基础单元(脚本按数据类型分类)
- 参数规范服务(合规检测)需要根据数据类型校验参数定义
**一个脚本只能声明一个主输入数据类型**,但可声明多个输出数据类型。
---
## 2. 分类体系
### 2.1 矢量数据(Vector
处理几何要素数据(点、线、面),含空间参考。
| 子类型 | 扩展名 | MIME / 格式标识 | 说明 |
|--------|--------|-----------------|------|
| `shapefile` | `.shp` | `application/x-shapefile` | ESRI Shapefile(必须打包为 .zip 上传) |
| `geojson` | `.geojson` `.json` | `application/geo+json` | GeoJSONRFC 7946 |
| `geopackage` | `.gpkg` | `application/geopackage+vnd.sqlite3` | OGC GeoPackage 矢量层 |
| `filegdb` | `.gdb/` | `application/x-filegdb` | ESRI File Geodatabase(目录结构) |
| `dxf` | `.dxf` | `application/dxf` | AutoCAD DXF |
| `dwg` | `.dwg` | `application/acad` | AutoCAD DWG(需许可或 ODA 库) |
| `kml` | `.kml` | `application/vnd.google-earth.kml+xml` | Google KML |
| `kmz` | `.kmz` | `application/vnd.google-earth.kmz` | Google KMZ(压缩包) |
| `gml` | `.gml` | `application/gml+xml` | OGC GML |
| `mif` | `.mif` | `application/x-mapinfo-mif` | MapInfo MIF/MID |
| `tab` | `.tab` | `application/x-mapinfo-tab` | MapInfo TAB |
| `mdb` | `.mdb` | `application/x-msaccess` | Personal GeoDatabase.mdb 格式) |
| `geobuf` | `.geobuf` | `application/geobuf` | Mapbox Geobuf(高效二进制) |
| `flatgeobuf` | `.fgb` | `application/flatgeobuf` | FlatGeobuf(流式加载优化) |
### 2.2 栅格数据(Raster
处理像素格网数据,含地理参考。
| 子类型 | 扩展名 | 格式标识 | 说明 |
|--------|--------|---------|------|
| `geotiff` | `.tif` `.tiff` | `image/tiff; application=geotiff` | GeoTIFF(最通用) |
| `img` | `.img` | `application/x-erdas-img` | ERDAS IMAGINE |
| `dem` | `.dem` | `application/x-usgs-dem` | USGS DEM |
| `lerc` | `.lerc` | `application/lerc` | ESRI LERC(流式压缩) |
| `mrf` | `.mrf` | `application/x-mrf` | Meta Raster Format |
| `ecw` | `.ecw` | `image/ecw` | ERDAS ECW(压缩速率优化) |
| `jp2` | `.jp2` `.j2k` | `image/jp2` | JPEG 2000(含 GeoJP2 |
| `hfa` | `.hfa` | `application/x-erdas-hfa` | ERDAS HFA / Imagine |
| `nitf` | `.ntf` `.nitf` | `application/x-nitf` | NITF(军事/情报影像) |
| `hdf` | `.hdf` `.h5` | `application/x-hdf` | HDF4/HDF5(遥感常用) |
| `netcdf` | `.nc` | `application/x-netcdf` | NetCDF(气候/海洋数据) |
| `grib` | `.grib` `.grb` `.grib2` | `application/x-grib` | GRIB/GRIB2(气象数据) |
| `cog` | `.tif` | `image/tiff; application=cog` | Cloud Optimized GeoTIFF |
| `asc` | `.asc` | `application/x-esri-asc` | ESRI ASCII Grid |
| `dtm` | `.dtm` | `application/x-dtm` | DTM(数字地形模型,常无扩展名区分) |
### 2.3 三维点云数据(Point Cloud
处理三维空间离散点数据。
| 子类型 | 扩展名 | 格式标识 | 说明 |
|--------|--------|---------|------|
| `las` | `.las` | `application/x-las` | ASPRS LAS 1.2/1.4 |
| `laz` | `.laz` | `application/x-laz` | LASzip 压缩 |
| `e57` | `.e57` | `application/x-e57` | ASTM E57 3D |
| `ply` | `.ply` | `application/x-ply` | Stanford PLY |
| `pcd` | `.pcd` | `application/x-pcd` | Point Cloud Library PCD |
| `xyz` | `.xyz` | `text/plain; format=xyz` | 简单 XYZ 文本 |
| `terrascan` | `.bin` `.tbp` | `application/x-terrascan` | Terrasolid 专有格式 |
### 2.4 文档数据(Document
处理办公文档和 PDF,含空间化或地理参照场景。
| 子类型 | 扩展名 | 格式标识 | 说明 |
|--------|--------|---------|------|
| `pdf` | `.pdf` | `application/pdf` | PDF(含空间 PDF / GeoPDF |
| `docx` | `.docx` | `application/vnd.openxmlformats-officedocument.wordprocessingml.document` | Word 文档 |
| `xlsx` | `.xlsx` | `application/vnd.openxmlformats-officedocument.spreadsheetml.sheet` | Excel 工作簿(表格数据归表格类) |
| `pptx` | `.pptx` | `application/vnd.openxmlformats-officedocument.presentationml.presentation` | PowerPoint |
| `wps` | `.wps` | `application/x-wps` | WPS 文字 |
| `et` | `.et` | `application/x-wps-et` | WPS 表格 |
| `dps` | `.dps` | `application/x-wps-dps` | WPS 演示 |
| `rtf` | `.rtf` | `application/rtf` | Rich Text Format |
| `odt` | `.odt` | `application/vnd.oasis.opendocument.text` | ODF 文本 |
### 2.5 表格数据(Tabular
处理结构化表格,常用于空间化前期(地理编码、坐标对 -> 点要素)。
| 子类型 | 扩展名 | 格式标识 | 说明 |
|--------|--------|---------|------|
| `csv` | `.csv` | `text/csv` | CSV |
| `tsv` | `.tsv` `.tab` | `text/tab-separated-values` | TSV |
| `xls` | `.xls` | `application/vnd.ms-excel` | Excel 97-2003 |
| `xlsx` | `.xlsx`(表格场景) | 同上 | Excel 作为纯表格源 |
| `dbf` | `.dbf` | `application/x-dbf` | dBase/FoxPro |
| `parquet` | `.parquet` | `application/x-parquet` | Apache Parquet(列存,地理时空大数据) |
| `feather` | `.feather` | `application/x-feather` | Apache Feather / Arrow IPC |
| `json` | `.json`(非 GeoJSON | `application/json` | 普通结构化 JSON(含坐标对) |
| `xml` | `.xml`(非 GML | `application/xml` | 普通 XML |
### 2.6 影像媒体(Image/Media
处理非地理参照的普通图片或视频,常作为地理信息提取的输入源。
| 子类型 | 扩展名 | 格式标识 | 说明 |
|--------|--------|---------|------|
| `jpeg` | `.jpg` `.jpeg` | `image/jpeg` | JPEG |
| `png` | `.png` | `image/png` | PNG |
| `bmp` | `.bmp` | `image/bmp` | BMP |
| `tiff` | `.tif` `.tiff`(非 GeoTIFF | `image/tiff` | 普通 TIFF |
| `webp` | `.webp` | `image/webp` | WebP |
| `heic` | `.heic` | `image/heic` | HEICiPhone 图像) |
| `mp4` | `.mp4` | `video/mp4` | MP4 视频(无人机视频地理配准) |
| `avi` | `.avi` | `video/x-msvideo` | AVI |
### 2.7 压缩打包(Archive
打包成单个容器上传的批量数据入口。
| 子类型 | 扩展名 | 格式标识 | 说明 |
|--------|--------|---------|------|
| `zip` | `.zip` | `application/zip` | ZIP |
| `tar` | `.tar` | `application/x-tar` | TAR |
| `targz` | `.tar.gz` `.tgz` | `application/gzip` | Gzip 压缩 tar |
| `tarxz` | `.tar.xz` | `application/x-xz` | XZ 压缩 tar 包 |
| `7z` | `.7z` | `application/x-7z-compressed` | 7-Zip |
| `rar` | `.rar` | `application/vnd.rar` | RAR |
| `gzip` | `.gz` | `application/gzip` | 单文件 gzip |
### 2.8 空间数据库(Spatial Database
直接连接数据库作为数据源。
| 子类型 | 描述 | 连接方式 |
|--------|------|---------|
| `postgis` | PostgreSQL + PostGIS 空间数据库 | 连接字符串 `postgresql://user:pass@host/db` |
| `spatialite` | SpatiaLite 嵌入式数据库 | `.sqlite` 文件 |
| `sqlserver` | SQL Server + 空间扩展 | JDBC 连接串 |
| `oracle` | Oracle Spatial | JDBC 连接串 + SDO_GEOMETRY |
| `mysql` | MySQL + GIS 扩展 | 连接字符串 |
### 2.9 API / 流数据(Streaming
通过网络接口实时获取或推送数据。
| 子类型 | 说明 | 协议/标准 |
|--------|------|----------|
| `ogc-features` | OGC API - Features | HTTP API / JSON-FG |
| `ogc-tiles` | OGC API - Tiles | HTTP API / TileJSON |
| `ogc-coverages` | OGC API - Coverages | HTTP API / CoverageJSON |
| `wfs` | WFS 服务 | OGC WFS 3.0 |
| `wms` | WMS 服务 | OGC WMS |
| `wmts` | WMTS 服务 | OGC WMTS 瓦片服务 |
| `tms` | TMSTile Map Service | URL 模板 `{z}/{x}/{y}.pbf` |
| `mvt` | Mapbox Vector Tile | `application/vnd.mapbox-vector-tile` |
| `rest-api` | 通用 REST API 响应 | HTTP JSON |
| `mqtt` | MQTT 流式数据 | MQTT Topic 订阅 |
---
## 3. 数据类型映射规则
### 3.1 主类型(high-level
脚本声明 `data_type` 时,必须指定一个主分类:
```
data_type: "<主分类>/<子类型>"
```
示例:
```yaml
data_type: "vector/geojson"
data_type: "raster/geotiff"
data_type: "pointcloud/las"
data_type: "document/pdf"
```
### 3.2 输入输出声明
脚本通过 `params_schema``output_schema` 声明输入输出的数据类型:
```yaml
params_schema:
type: object
properties:
input_file:
type: string
data_type: "vector/geojson" # ← 标注入参数据类型
desc: "输入矢量数据"
buffer_distance:
type: number
desc: "缓冲区半径(米)"
output_schema:
type: object
properties:
result_file:
type: string
data_type: "vector/geojson" # ← 标注出参数据类型
desc: "缓冲区结果"
```
### 3.3 合规检测规则
合规检测服务使用以下规则校验脚本:
1. **主类型必须属于上述分类** — 不支持的分类返回 `invalid_data_type`
2. **输入数据类型与脚本声明的 `data_type` 必须兼容** — 子类型属于主类型即可
3. **跨子类型兼容性规则**
- `vector/*``vector`(统一主类即可,子类互转合规检测不校验)
- `raster/*``raster`
4. **链式脚本的数据类型传递**:脚本 B 的输入数据类型必须与前序脚本 A 的输出数据类型匹配(同一主类即可)
---
## 4. 参数模板映射
合规检测服务根据数据类型推荐参数模板:
| 主类型 | 默认模板 | 可配置模板 |
|--------|---------|-----------|
| `vector` | `vector-input`(文件路径 + 坐标系 + 编码) | `vector-batch`, `vector-stream` |
| `raster` | `raster-input`(文件路径 + 波段 + CRS) | `raster-multiband`, `raster-pyramid` |
| `pointcloud` | `pointcloud-input`(文件路径 + 坐标精度) | `pointcloud-filter`, `pointcloud-tile` |
| `document` | `document-input`(文件路径 + 解析选项) | `document-extract`, `document-convert` |
| `tabular` | `tabular-input`(文件路径 + 分隔符 + 编码) | `tabular-batch`, `tabular-join` |
| `image` | `image-input`(文件路径 + 格式) | `image-batch`, `image-ocr` |
| `archive` | `archive-input`(压缩包路径 + 解压规则) | `archive-extract`, `archive-repack` |
| `spatialdb` | `spatialdb-input`(连接串 + 查询 + 表名) | 无 |
| `streaming` | `api-input`(URL + 认证 + 请求参数) | 无 |
---
## 5. 新增数据类型流程
当平台需要支持新的数据类型时,更新此文件并重新发布到 SuiteForge 知识库:
1. 确定主分类归属(或创建新主分类)
2. 定义子类型标识符、扩展名、格式标识
3. 编写对应的参数模板(合规检测服务端)
4. 更新此文件(SuiteForge 知识库)
5. 通知合规检测服务更新模板注册表
---
## 6. 参考实现
- **合规检测服务**`compliance-service` 校验时,数据类型列表由 `TYPE_REGISTRY` 提供
- **脚本元数据结构**:参考[脚本开发指南](../script-dev-guide.md)
- **参数模板**:存储在合规检测服务的 `templates/` 目录
@@ -1,251 +0,0 @@
# 脚本依赖管理规范
> **归属:** SuiteForge 知识库 | `knowledge/script-dependencies.md`
> **版本:** 1.0.0
> **关联:** [脚本数据类型分类规范](./script-data-types.md)
---
## 1. 核心原则
- **gis-base 保持精干** — 只放所有脚本绝对需要的核心库
- **依赖按需加载** — 不允许在基础镜像预装所有可能的依赖
- **依赖类型决定加载策略** — 轻量运行时装、中量预构建镜像、重型发布时构建
---
## 2. gis-base 内置依赖(开箱即有)
以下库在 `gis-base` 镜像中预置,脚本无需额外声明依赖即可使用:
| 类别 | 库 | 用途 |
|------|----|------|
| Python 标准库 | `os`, `sys`, `json`, `csv`, `math`, `re`, `pathlib`, `shutil`, `subprocess`, `tempfile`, `zipfile`, `tarfile`, `uuid`, `datetime`, `logging` | 基础操作 |
| 数值计算 | `numpy` | 核心数组运算 |
| GIS 核心 | `gdal`(含 `ogr`, `osr`, `gdalconst`, `osgeo` | 栅格/矢量读写 |
| GIS 扩展 | `shapely`, `geopandas`, `pyproj`, `fiona` | 空间分析 |
| 序列化 | `orjson` | 高性能 JSON |
> **注意:** gis-base 镜像内容由平台团队维护。需要新增内置库时,请通过 Issue 提出,交 Admin 处理。
---
## 3. 依赖声明方式
### 3.1 脚本 metadata 中声明
```yaml
# scripts/run.py 同目录的 metadata.yaml
name: 读取 Excel 坐标转 Shapefile
version: 1.0.0
data_type: document/xlsx
dependencies:
# 轻量运行时依赖
pip:
- openpyxl>=3.0
- python-docx>=0.8
# 系统级依赖(apt 包)
system:
- libpdal-dev # 点云处理库
# 构建时依赖(必须通过 Dockerfile.ext 安装)
build:
# 空数组表示无构建时依赖
```
### 3.2 workflow.yaml 中声明
当在套件中直接引用脚本时,也可以在步骤级别声明:
```yaml
- id: parse-excel
type: script
script_id: run
dependencies:
pip:
- openpyxl>=3.0
```
> 步骤级声明会覆盖脚本自带的依赖声明。
---
## 4. 依赖分级处理机制
### 4.1 级别一:轻量运行时依赖(pip)
**适用场景:**
- 纯 Python 包,无编译依赖
- 体积小,安装快(< 30 秒)
- 非高频调用(偶尔使用)
**处理流程:**
```bash
# 容器启动时自动安装
docker run --rm gis-base \
pip install openpyxl python-docx --no-cache-dir \
&& python /tmp/scripts/run.py
```
**限速规则:** 单次任务安装的 pip 包不超过 10 个,总安装时间不超过 60 秒。
### 4.2 级别二:中量扩展镜像(预构建)
**适用场景:**
- 经常被调用的扩展依赖
- 有编译环节的包(C 扩展)
- 安装需要 30 秒以上的
**扩展镜像命名规则:**
```
registry.mercator.cn/agentgis/gis-ext-{功能}:{版本}
```
**已规划扩展镜像:**
| 镜像名 | 包含依赖 | 典型脚本场景 |
|--------|---------|-------------|
| `gis-ext-doc` | `openpyxl`, `python-docx`, `pypdf2`, `python-pptx` | Office 文档处理 |
| `gis-ext-pointcloud` | `laspy`, `pdal`, `open3d-python` | 点云处理 |
| `gis-ext-raster` | `rioxarray`, `rasterio`, `xarray`, `scipy` | 高级栅格分析 |
| `gis-ext-geoanalysis` | `scipy`, `scikit-learn`, `statsmodels` | 空间统计分析 |
| `gis-ext-ml` | `scikit-learn`, `xgboost`, `lightgbm` | 地理空间机器学习 |
| `gis-ext-web` | `requests`, `httpx`, `aiohttp`, `beautifulsoup4` | 网络数据抓取 |
| `gis-ext-db` | `psycopg2-binary`, `sqlalchemy`, `sqlite-utils` | 数据库连接 |
**匹配逻辑(调度中心):**
```
脚本声明的 pip 依赖
调度中心匹配 → 命中扩展镜像 → 使用扩展镜像运行
→ 未命中 → 回退级别一(运行时安装)
```
匹配是取**最小子集**——如果脚本只需要 `openpyxl`,就用 `gis-ext-doc`,而不是选所有包含 `openpyxl` 的镜像。
### 4.3 级别三:重型自定义镜像(构建时)
**适用场景:**
- 深度学习框架(PyTorch, TensorFlow
- 需要 GPU 加速(CUDA 依赖)
- 专有库/商业许可库(选装)
- 安装时间 > 120 秒的
**处理方式:**
脚本发布时附带 `Dockerfile.ext`
```dockerfile
# Dockerfile.ext
FROM registry.mercator.cn/agentgis/gis-base:latest
# 安装系统依赖
RUN apt-get update && apt-get install -y --no-install-recommends \
libgl1-mesa-glx \
&& rm -rf /var/lib/apt/lists/*
# 安装 Python 依赖
RUN pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu \
opencv-python-headless \
--no-cache-dir
```
**合规检测规则:**
- `FROM` 只能引用 `registry.mercator.cn/agentgis/*` 系列镜像
- 不允许 `FROM` 外部镜像库(安全性)
- `RUN pip` 的来源 URL 必须在白名单内(PyPI 官方默认通过)
- `RUN apt` 来源必须在 `apt allowlist`
**CI 流水线(Cron 兜底):**
```
脚本发布 → 检测到 Dockerfile.ext
→ 合规检测通过
→ 构建自定义镜像
→ 推送到 registry.mercator.cn/agentgis/custom/{suite_id}:{version}
→ 将镜像 ID 写入脚本 metadata
```
---
## 5. 依赖来源安全白名单
### 5.1 Python 包
| 来源 | 状态 | 说明 |
|------|------|------|
| `pypi.org`(官方) | ✅ 白名单 | 默认允许 |
| `download.pytorch.org` | ✅ 白名单 | ML 框架 |
| `github.com/releases` | ⚠️ 需审核 | 非标准包需要人工审核 |
### 5.2 系统包(apt
| 来源 | 状态 | 说明 |
|------|------|------|
| `archive.ubuntu.com` | ✅ 白名单 | Ubuntu 官方源 |
| `security.ubuntu.com` | ✅ 白名单 | 安全更新 |
| `ppa.launchpad.net` | ❌ 禁止 | PPA 源不稳定 |
---
## 6. 常见场景参考
| 脚本要做什么 | 推荐方案 | 依赖示例 |
|------------|---------|---------|
| 读取 Excel 坐标转点 | 级别一 | `openpyxl` |
| PDF 空间信息提取 | 级别一 | `pypdf2` |
| 点云格式转换(LAS → LAZ)| 级别二 | 预置 `gis-ext-pointcloud` |
| 地形分析(坡度/坡向)| 内置 | `numpy` + `gdal` 已内置 |
| 地理空间分类模型 | 级别二 | 预置 `gis-ext-geoanalysis` |
| 遥感影像深度学习分类 | 级别三 | `torch`, `opencv` |
| 企业微信消息推送 | 级别一 | `requests` 已内置 |
| 大量 GeoJSON 合并 | 内置 | `geopandas` 已内置 |
---
## 7. 镜像更新策略
### 扩展镜像
- 每月重建一次(拉取最新安全更新)
- 有 CVE 时立即重建
- 版本锁定的包如无必要不升级大版本
### gis-base
- 仅在有架构级更新时重建
- 版本变更需经过完整回归测试
- 历史版本保留至少 3 个次要版本
### 自定义镜像
- 由脚本开发者管理版本
- 重新发布脚本时自动重建
- 无自动更新,需要开发者主动重新发布
---
## 8. 开发者工作流(供 SuiteForge 参考)
```
1. 想清脚本需要什么依赖
2. 查 gis-base 内置列表 → 已有的不声明
3. 查扩展镜像列表 → 匹配的用级别二
4. 都不行 → 看看能不能用轻量安装(级别一)
5. 真不行 → 写 Dockerfile.ext(级别三)
6. 完成 metadata.yaml 声明
7. agc publish → 合规检测自动处理
```
**SuiteForge 应在初始化套件时根据脚本内容自动推断依赖**,无需开发者手动填写 metadata。开发者只需要告诉 SuiteForge "我想处理 Excel 文件",剩下的由 Agent 完成。
---
## 9. 与相关服务的关系
| 服务 | 对接方式 |
|------|---------|
| **合规检测服务** | 读取 dependencies 字段 + Dockerfile.ext 进行安全校验 |
| **调度中心** | 根据依赖选择镜像层次(base / ext / custom |
| **构建流水线(Cron** | 检测到 Dockerfile.ext 时触发自定义镜像构建 |
| **镜像仓库(Registry** | 存储 gis-base、扩展镜像、自定义镜像 |
+59 -44
View File
@@ -1,65 +1,80 @@
# AGENTS.md — 你是套件使用者 # AGENTS.md — 你是套件使用者
你是 AgentGIS Cloud Platform 的终端用户。你用现成的套件处理 GIS 数据。 你是 AgentGIS 平台的最终用户。你的任务是使用现成的 GIS 套件处理数据。
## 🚨 核心概念:本地执行 ## 前置准备
**你的数据文件永远不上传云端。** 流程是这样的: ### 安装 gis-actions
``` **Linux**
你的操作 背后发生的事情 ```bash
────────── ────────────────── curl -sLO https://packages.mercator.cn/public/gis-actions/latest.deb
1. 打开 suites.mercator.cn → 浏览公开套件列表,无需登录 sudo dpkg -i latest.deb
浏览套件市场 agc --help
2. 找到想要的套件,记下 ID → 套件详情有参数说明
3. 准备本地的数据文件 → 文件在你的硬盘上
记下文件路径
4. 执行套件 → gis-actions 从市场拉取脚本包
agc run <suite-id> → 启动本地 Docker 容器
--inputs '{"input_path": → 将你的路径挂载到容器内
"/data/myfile.shp"}' → 脚本在容器中处理你的文件
→ 结果写入 /tmp/output/
5. 查看结果 → 你的机器上的文件
``` ```
**全程你的数据文件没有离开过你的机器。** **Windows**
1. 下载 [latest-windows.zip](https://packages.mercator.cn/public/gis-actions/latest-windows.zip)
2. 解压到 `%LOCALAPPDATA%\AgentGIS\gis-actions\`
3. 将路径加入 `PATH`
4. 验证:`agc --help`
## 你的工作方式 ### 配置 API Key
### 1. 浏览市场 首次运行前需要配置 Auth Center 的 API Key
打开 https://suites.mercator.cn浏览套件列表。 1. 登录 https://auth.mercator.cn创建 API Key
按关键词搜索,按分类筛选。 2. 运行 `agc config set api_key <你的 API Key>`
浏览公开内容不需要登录,也不需要 API Key。
### 2. 选择套件 ## Linux 版首次执行 `agc run` 时会自动下载 gis-base 运行镜像。Windows 版不需要镜像。
看套件详情: ## 遇到问题?
- **用途**:描述信息
- **输入**:需要你提供什么(文件路径、数值等)
- **输出**:执行完能拿到什么
确认符合需求后,记下套件 ID 前往 https://discussions.mercator.cn/ 发话题。贴出你的命令和错误信息,管理员会帮你排查
### 3. 准备输入 ## 执行流程
套件需要的本地数据文件准备好,记下路径。 ### 1. 查市场,选套件
### 4. 执行 ```bash
# 所有套件(Linux + Windows
curl -s https://suites.mercator.cn/api/v1/suites | python3 -m json.tool
`agc run <suite-id>` 提交任务。GIS Actions 会: # 仅 Windows 套件
1. 从套件市场拉取执行脚本 curl -s 'https://suites.mercator.cn/api/v1/suites?platform=windows' | python3 -m json.tool
2. 在本地 Docker 容器中处理你的文件(挂载只读输入,挂载写入输出) ```
3. 脚本包执行完后自动销毁
4. 输出结果到本地目录
### 5. 查看结果 记下你要用的套件 ID。
执行完成后,结果文件在 `/tmp/output/` 目录中。 ### 2. 在本地执行
如果套件生成了报告,查看报告了解处理前后的对比。
## 多一步的思考 ```bash
SUITE_MARKET_URL="https://suites.mercator.cn" \
agc run /tmp/my-output \
--suite-id <suite-id> \
--input key=value \
--input key2=value2
```
- **执行失败了?** → 看错误信息,检查输入文件路径是否正确、格式是否支持 - 文件路径用本地绝对路径
- **结果不对?** → 检查参数值是否合理 - 一个文件一个 `--input`,支持多个
- **套件不好用?** → 换个套件或反馈给开发者 - shapefile 只需传 `.shp` 路径,配套文件(.shx/.dbf/.prj)会自动复制
### 3. 取结果
结果文件在 `--input output_path` 指定的路径下,默认在 `/tmp/my-output/_step_outputs/` 中。
## 数据流向
```
你本地的 SHP/XLS 文件
agc run(你的机器)
│ ← 从套件市场下载脚本包
│ ← 复制输入文件到工作目录
│ → docker run gis-base + 套件脚本
│ → 结果写入 /tmp/output/
结果文件留在你的机器
```
+3 -3
View File
@@ -20,7 +20,7 @@
**数据永不离开本地。** **数据永不离开本地。**
你提供给套件的文件(SHP、GeoJSON、TIFF)始终在你的机器上。 你提供给套件的文件(SHP、GeoJSON、TIFF)始终在你的机器上。
GIS Actions 在你的机器上处理它们,结果文件也在你的机器上。 GIS Actions 在你的机器上处理它们Linux Docker 容器或 Windows 本机进程),结果文件也在你的机器上。
**只使用已发布的套件。** **只使用已发布的套件。**
从市场选择,不自己改代码。套件不好用就换个套件,或者反馈给开发者。 从市场选择,不自己改代码。套件不好用就换个套件,或者反馈给开发者。
@@ -40,5 +40,5 @@ GIS Actions 在你的机器上处理它们,结果文件也在你的机器上
## 工具 ## 工具
- **市场前端:** https://suites.mercator.cn — 浏览、选择、提交 - **市场前端:** https://suites.mercator.cn — 浏览、选择、提交
- **CLI:** `agc run <suite-id>` — 快速执行 - **CLI:** `agc run <work-dir> --suite-id <suite-id> --input key=value` — 快速执行
- **GIS Actions:** 运行在你的机器上,处理本地数据 - **GIS Actions`agc` 命令):** 运行在你的机器上(Linux agc 或 Windows agc.exe,处理本地数据
+84 -17
View File
@@ -3,21 +3,90 @@
## 平台入口 ## 平台入口
- **套件市场:** https://suites.mercator.cn - **套件市场:** https://suites.mercator.cn
- **API Key 获取:** https://auth.mercator.cn - **用户交流:** https://discussions.mercator.cn(遇到问题在这里发话题)
## 关键原则 ## 关键原则
**数据永不离开本地。** **数据永不离开本地。**
你的文件始终在你的机器上。GIS Actions 在你的机器上处理,不上传到云端。 你的文件始终在你的机器上。GIS Actions 在你的机器上处理,不上传到云端。
输入:本地文件路径 | 输出:本地目录 `/tmp/output/` 输入:本地文件路径 | 输出:`/tmp/output/`
## gis-actions 工作原理 ## 安装
gis-actions 是你机器上的本地执行器,它: ### Linux
1. 连接调度中心等待任务
2. 收到任务后下载套件脚本包 ```bash
3. 在 Docker 容器中执行(使用 gis-base 镜像) curl -sLO https://packages.mercator.cn/public/gis-actions/latest.deb
4. 结果写入本地目录,脚本包自动清理 sudo dpkg -i gis-actions_latest.deb
```
要求:Docker Engine 已安装。
### Windows
1. 下载 [latest-windows.zip](https://packages.mercator.cn/public/gis-actions/latest-windows.zip)
2. 解压到 `%LOCALAPPDATA%\\AgentGIS\\gis-actions\\`
3. 将路径加入 `PATH`
4. 验证:`agc --help`
要求:ArcMap 10.8arcpy 脚本需要)
## 配置 API Key
所有操作前需先配置 API Key(在套件市场个人中心生成):
```bash
agc config set api-key mk_xxxxxxxxxxxxxxxxxxxx
agc config list # 查看所有配置
agc config get api-key # 查看(脱敏显示)
```
## gis-actions 全部命令
| 命令 | 用途 |
|------|------|
| `agc config` | 管理配置(API Key、市场地址等) |
| `agc run` | 执行套件 |
| `agc search <query>` | 搜索套件 |
| `agc info <suite-id>` | 查看套件详情 |
| `agc logs` | 查看运行历史 |
| `agc cache list / clean` | 管理本地缓存 |
| `agc doctor` | 环境诊断 |
| `agc mcp` | 启动 MCP 服务器(供 AI Agent 集成) |
| `agc self-update` | 自动升级 |
### agc run 用法
```bash
agc run /tmp/output --suite-id <suite-id> --input key=value
agc run /tmp/output --suite-id <suite-id> --input key=value --resume # 续跑
agc run /tmp/output --suite-id <suite-id> --input key=value --watch # 实时输出
```
### gis-actions 工作原理
**Linux 版(Docker 容器执行):**
1. 从套件市场获取脚本包地址
2. 下载加密脚本包到本地(首次下载后自动缓存)
3. 启动 Docker 容器(gis-base 镜像,内置解密密钥 + decrypt_runner
4. 容器内将加密脚本解密到 /dev/shm(内存)后执行
5. 结果写入工作目录,脚本包和临时数据自动清理
**Windows 版(本机 subprocess 执行):**
1. 从套件市场获取脚本包地址
2. 下载并解密到临时目录
3. 根据步骤的 runtime 选择执行器:
- python3 -> agc 内置 Python
- arcpy -> 调用系统 arcpyArcMap Python 2.7
4. 结果写入工作目录,临时文件自动清理
## 排查问题
```bash
agc doctor # 一键检查:Docker、镜像、API Key、网络、配置
agc logs --status failed # 查看失败记录
agc self-update # 检查并升级到最新版
```
## 常见问题 ## 常见问题
@@ -25,18 +94,16 @@ gis-actions 是你机器上的本地执行器,它:
A: 只有脚本包下载需要网络。数据处理全程在本地。 A: 只有脚本包下载需要网络。数据处理全程在本地。
**Q: 我的文件会被上传吗?** **Q: 我的文件会被上传吗?**
A: 不会。gis-actions 读取本地路径,在本地 Docker 容器中处理。 A: 不会。`agc run` 读取本地路径,在本地 Docker 容器中处理。
**Q: 结果在哪?** **Q: 结果在哪?**
A: 默认在 `/tmp/output/`(可在配置文件中设置) A: 默认在工作目录的 `_step_outputs/`
**Q: gis-actions 占资源吗?**
A: 空闲时几乎不占资源。执行时才启动 Docker 容器。
**Q: 能同时跑多个任务吗?** **Q: 能同时跑多个任务吗?**
A: 取决于你的机器配置和配置项 A: 可以,打开多个终端各自跑 `agc run`
## 部署 **Q: API Key 在哪生成?**
A: 登录套件市场 https://suites.mercator.cn → 个人中心 → API Key 管理 → 创建。
你需要在自己机器上安装 gis-actions 才能执行套件。 **Q: API Key 会不会过期?**
详见 TOOLS.md 中的部署步骤:Python 3 + Docker + API Key 配置 A: 长期有效。如需吊销,在套件市场个人中心操作
+2 -2
View File
@@ -8,7 +8,7 @@ AgentGIS 和你用过的其他平台不一样:
``` ```
其他平台:你把文件上传到服务器 → 服务器处理 → 你下载结果 其他平台:你把文件上传到服务器 → 服务器处理 → 你下载结果
AgentGIS:你的文件留在本地 → gis-actions 在你机器上处理 → 结果在你本地 AgentGIS:你的文件留在本地 → agc 在你机器上处理(Linux Docker 或 Windows 本机)→ 结果在你本地
``` ```
**你不用上传任何数据文件。** 永远提供本地文件路径,不提供文件内容。 **你不用上传任何数据文件。** 永远提供本地文件路径,不提供文件内容。
@@ -31,7 +31,7 @@ AgentGIS:你的文件留在本地 → gis-actions 在你机器上处理 →
## 执行规则 ## 执行规则
- **提供本地文件路径**(例如 `/data/myfile.shp`),不是上传文件 - **提供本地文件路径**(例如 `/data/myfile.shp`),不是上传文件
- **数据永不离开你的机器** — gis-actions 在你的 Docker 中处理,不在云端 - **数据永不离开你的机器** — agc 在你的 Linux Docker 或 Windows 本机中处理,不在云端
- **文件即点即用**,无需等待上传 - **文件即点即用**,无需等待上传
- **执行过程中你可以离开**,完成后回来查看结果 - **执行过程中你可以离开**,完成后回来查看结果
- 任务失败了:看错误信息。信息看不懂 → 反馈给套件开发者 - 任务失败了:看错误信息。信息看不懂 → 反馈给套件开发者
+67 -80
View File
@@ -4,118 +4,105 @@
https://suites.mercator.cn https://suites.mercator.cn
浏览套件、查看详情、提交执行任务 浏览套件、查看详情。
## CLI(可选) ## 安装
### Linux
安装 `gis-actions` 包即可获得全部功能(CLI + 执行引擎),一次安装:
```bash ```bash
# 安装 agentgis-cli # 下载
pip install https://git.mercator.cn/api/packages/SuiteHub/generic/agentgis-cli/0.1.0/agentgis_cli-0.1.0-py3-none-any.whl curl -sLO https://packages.mercator.cn/public/gis-actions/latest.deb
# 配置 API Key # 安装
agc config set api-key mk_xxxxxxxxx sudo dpkg -i latest.deb
# 执行套件(在市场找到 suite-id 后)
agc run <suite-id> --inputs '{"input_path": "/data/myfile.shp"}'
# 查看套件列表
agc suites list
# 查看执行状态
agc status <task-id>
``` ```
## gis-actions(本地执行器部署) 安装后可用 `agc` 命令(已内置在包中)。
gis-actions 是套件的本地执行引擎,跑在你的机器上。 ## 交流反馈
### 前提条件 遇到任何问题或需要帮助,前往 https://discussions.mercator.cn/ 发话题。平台管理员和其他用户会在那里解答。
- **Debian / Ubuntu 系统** - **提问** — 使用 `question` 标签
- **Docker**(验证:`docker ps` - **报 Bug** — 使用 `bug` 标签
- `sudo apt install docker.io` - **提建议** — 使用 `feature``suggestion` 标签
- 能访问 `registry.mercator.cn`(拉取 gis-base 镜像)
### 安装 ### Windows
1. 下载 [latest-windows.zip](https://packages.mercator.cn/public/gis-actions/latest-windows.zip)
2. 解压到 `%LOCALAPPDATA%\\AgentGIS\\gis-actions\\`
3.`%LOCALAPPDATA%\\AgentGIS\\gis-actions\\` 加入 `PATH`
4. 验证:`agc --help`
> Windows 版支持 **arcpy**(需要 ArcMap 10.8)和 **python3** 两种 runtime。
> 不依赖 Docker,直接在本地进程执行。
## 前提条件
- **Linux 系统**Debian / Ubuntu
- **Docker**(验证:`docker ps`,仅 Linux 版需要)
- **API Key** — 登录 https://auth.mercator.cn 获取,后续 `agc config set api_key <你的API Key>` 使用
### gis-base 基础镜像
Linux 版所有套件运行在 `gis-base` 镜像中(含 Python 3, GDAL, Shapely, GeoPandas, numpy, openpyxl, xlrd)。
Windows 版使用本地 Python 环境(arcpy 或 python3),不需要 Docker。
首次安装 gis-actions 时会自动下载镜像。也可提前手动准备:
```bash ```bash
# 下载并安装 gis-actions # 从 Gitea 直接下载镜像包(无需 registry 账号)
wget -O agentgis-worker.deb https://git.mercator.cn/api/packages/SuiteHub/generic/gis-actions/v2.0.0-alpha/agentgis-worker_2.0.0-alpha_all.deb curl -sLO https://packages.mercator.cn/public/gis-base/latest.tar.gz
sudo dpkg -i agentgis-worker.deb docker load -i gis-base.tar.gz
# 安装后会自动配置 systemd 服务和 Docker insecure-registry
``` ```
### 配置 ## 执行套件
编辑 `/etc/agentgis/worker.json`
```json
{
"worker": {
"id": "my-machine-001",
"capabilities": ["gis-operations"]
},
"scheduler": {
"url": "https://suites.mercator.cn",
"poll_interval": 5,
"heartbeat_interval": 30
},
"auth": {
"api_key": "你的 API Key"
}
}
```
API Key 从 https://auth.mercator.cn 获取。
### 启动
```bash ```bash
sudo systemctl start agentgis-worker # 查询市场套件(通过 curl
sudo systemctl status agentgis-worker curl -s https://suites.mercator.cn/api/v1/suites | python3 -m json.tool
# 执行套件,输入参数用 key=value 格式
agc run /tmp/output --suite-id <suite-id> --input key=value
``` ```
### 验证 `<suite-id>` 从市场 API 或前端页面获取。
## AI Agent 集成(MCP
GIS Actions 支持 MCPModel Context Protocol),AI Agent 可直接调用 GIS 工具:
```bash ```bash
journalctl -u agentgis-worker -f # 启动 MCP Serverstdio 模式,供 Claude Desktop 等本地 Agent 使用)
# 应看到:Worker xxx started, polling https://suites.mercator.cn every 5s agc mcp
# SSE 模式(HTTP,供远程 Agent 调用)
agc mcp --transport sse --port 8080
``` ```
### 停止 Agent 通过 MCP 协议自动发现可用套件并调用执行,无需人工介入。
```bash ## 数据流向
sudo systemctl stop agentgis-worker
```
### 卸载
```bash
sudo dpkg --purge agentgis-worker
```
### 数据流向
``` ```
你本地的 SHP/GeoJSON/TIFF 文件 你本地的 SHP/GeoJSON/TIFF/XLS 文件
gis-actions(你的机器) gis-actions(你的机器)
│ ← 从调度中心拉取任务 │ ← 从市场下载套件脚本包
│ ← 下载套件脚本包
│ ← docker run gis-base + 套件脚本 │ ← docker run gis-base + 套件脚本
│ → 结果写入 /tmp/output/ │ → 结果写入 /tmp/output/
结果文件(你的机器) 结果文件(你的机器)
``` ```
## 支持的输入类型 ## 注意事项
| 类型 | 说明 | 示例 | - 输入文件路径使用你的本地绝对路径
|------|------|------| - shapefile 需要传入目录路径而非单文件路径(因 .dbf/.shx 配套文件)
| `file` | 本地文件路径 | `/data/land_use.shp` | - 套件数据不上传云端,全部在你的机器上处理
| `string` | 文本 | `"缓冲区距离: 500"` |
| `number` | 数值 | `500.0` |
| `integer` | 整数 | `100` |
| `boolean` | 布尔值 | `true` |
-54
View File
@@ -1,54 +0,0 @@
# 套件市场帮助中心
> `suites.mercator.cn` 是 AgentGIS Cloud Platform 的套件市场入口。
---
## 📖 系统使用手册
面向**终端用户**——浏览套件、执行任务、查看结果。
| 文档 | 说明 |
|------|------|
| [快速入门](./系统使用手册/快速入门.md) | 从零开始使用套件市场 |
| [浏览与选择套件](./系统使用手册/浏览与选择套件.md) | 查找和选择适合的套件 |
| [执行任务与查看结果](./系统使用手册/执行任务与查看结果.md) | 提交任务、获取结果 |
| [GIS Actions 本地部署](./系统使用手册/GIS-Actions-本地部署.md) | 在用户机器上安装和执行器 |
## 🔧 开发者指南
面向**套件开发者**——开发、测试、发布套件。
| 文档 | 说明 |
|------|------|
| [快速开始](./开发者指南/快速开始.md) | 从零开发第一个套件 |
| [Workflow 规范](./开发者指南/Workflow-规范.md) | workflow.yaml 完整参考 |
| [脚本开发指南](./开发者指南/脚本开发指南.md) | Python 脚本编写方法 |
| [套件发布指南](./开发者指南/套件发布指南.md) | 发布套件到市场 |
| [最佳实践](./开发者指南/最佳实践.md) | 复用、测试、调试技巧 |
## 📦 SDK 参考
面向**程序化调用**——Python SDK、CLI、API。
| 文档 | 说明 |
|------|------|
| [Python SDK](./SDK参考/Python-SDK.md) | Python 客户端使用 |
| [CLI 参考](./SDK参考/CLI-参考.md) | agc 命令全览 |
| [API 参考](./SDK参考/API-参考.md) | REST API 端点说明 |
## 💡 示例代码
| 文档 | 说明 |
|------|------|
| [Hello World](./示例代码/Hello-World.md) | 最小可工作套件 |
| [缓冲区分析](./示例代码/缓冲区分析.md) | 完整的 GIS 文件处理套件 |
## 🤖 智能体提示
面向 **AI Agent** 的身份认知文件。
| 文档 | 说明 |
|------|------|
| [套件开发者配置](../suite-developer/IDENTITY.md) | SuiteForge 角色定位 |
| [套件使用者配置](../suite-user/IDENTITY.md) | SuiteEndUser 角色定位 |
+15 -21
View File
@@ -8,8 +8,6 @@ https://suites.mercator.cn
## 认证 ## 认证
使用 `Bearer Token``API Key`
```bash ```bash
Authorization: Bearer mk_xxxxxxxxxxxxx Authorization: Bearer mk_xxxxxxxxxxxxx
``` ```
@@ -20,31 +18,15 @@ API Key 从 https://auth.mercator.cn 获取。
| 方法 | 端点 | 说明 | | 方法 | 端点 | 说明 |
|------|------|------| |------|------|------|
| POST | `/api/v1/suites` | 创建套件 | | GET | `/api/v1/suites` | 套件列表(支持 `?category=` `?platform=linux/windows/all` 筛选) |
| GET | `/api/v1/suites` | 套件列表 |
| GET | `/api/v1/suites/search?q=` | 搜索套件 |
| GET | `/api/v1/suites/{id}` | 套件详情 | | GET | `/api/v1/suites/{id}` | 套件详情 |
| PATCH | `/api/v1/suites/{id}` | 更新套件 | | PATCH | `/api/v1/suites/{id}` | 更新套件 |
| DELETE | `/api/v1/suites/{id}` | 删除套件 |
| POST | `/api/v1/suites/{id}/execute` | 执行套件 |
## 任务 API ## 发布 API
| 方法 | 端点 | 说明 | | 方法 | 端点 | 说明 |
|------|------|------| |------|------|------|
| GET | `/api/v1/task/next` | 拉取待执行任务(长轮询)| | POST | `/api/v1/publish/upload` | 发布套件(上传 TGZ 包 + `platform` 字段 + 需 Gitea Token |
| PATCH | `/api/v1/task/{id}/status` | 更新任务状态 |
| GET | `/api/v1/task/{id}` | 查询任务详情 |
## 脚本 API
| 方法 | 端点 | 说明 |
|------|------|------|
| POST | `/api/v1/scripts` | 注册脚本 |
| GET | `/api/v1/scripts` | 脚本列表 |
| GET | `/api/v1/scripts/search?q=` | 搜索脚本 |
| GET | `/api/v1/scripts/{id}` | 脚本详情 |
| PATCH | `/api/v1/scripts/{id}` | 更新脚本 |
## 完整文档 ## 完整文档
@@ -64,3 +46,15 @@ API Key 从 https://auth.mercator.cn 获取。
| 409 | 资源冲突 | | 409 | 资源冲突 |
| 422 | 参数校验失败 | | 422 | 参数校验失败 |
| 500 | 服务器内部错误 | | 500 | 服务器内部错误 |
### POST /api/v1/publish/upload
**参数:**
| 参数 | 必填 | 类型 | 说明 |
|------|------|------|------|
| `file` | ✅ | File | 套件压缩包(含 workflow.yaml + scripts/|
| `gitea_token` | ✅ | string | 发布者的 Gitea Token(需包写入权限) |
发布到 `SuiteHub` 组织下,包名为英文 slug。
+43 -32
View File
@@ -2,48 +2,59 @@
## 安装 ## 安装
`agc` 命令随 gis-actions 包一起安装。
**Linux**
```bash ```bash
# 从 Gitea 安装 curl -sLO https://packages.mercator.cn/public/gis-actions/latest.deb
pip install https://git.mercator.cn/SuiteHub/agentgis-cli/raw/branch/main/dist/agentgis_cli-0.1.0-py3-none-any.whl sudo dpkg -i latest.deb
``` ```
## 配置 **Windows**
1. 下载 [latest-windows.zip](https://packages.mercator.cn/public/gis-actions/latest-windows.zip)
2. 解压到 `%LOCALAPPDATA%\AgentGIS\gis-actions\`
3. 将路径加入 `PATH`
4. 验证:`agc --help`
```bash 安装后直接使用 `agc` 命令。
agc config set api-key mk_xxxxxxxxxxxxx
```
## 命令 ## 命令
### 查询套件 ### agc run
执行套件。
```bash
agc run <work_dir> --suite-id <suite-id> --input <key=value> [--input <key=value> ...]
agc run <work_dir> --package-url <url> --input <key=value>
```
| 参数 | 说明 |
|------|------|
| `work_dir` | 工作目录路径(输出写入此目录) |
| `--suite-id` | 套件 ID(从市场 API 查询) |
| `--package-url` | 直接指定脚本包下载地址(替代 --suite-id |
| `--input` / `-i` | 输入参数,格式 `key=value`,可多次指定 |
| `--api-key` | API Key(查市场时使用,也可设环境变量 `AGENTGIS_API_KEY` |
### 示例
```bash
# 通过套件 ID 执行
agc run /tmp/output --suite-id 2c99a1cb-84a5-42dd-9147-1c8e8f7f2941 --input buffer_distance=0.5
# 直接指定包地址
agc run /tmp/output --package-url https://git.mercator.cn/.../suite.tgz --input input_path=/data/my.shp
```
## 查询市场
`agc` 暂未内置市场查询命令,使用 curl:
```bash ```bash
# 列出所有套件 # 列出所有套件
agc suites list curl -s https://suites.mercator.cn/api/v1/suites | python3 -m json.tool
# 搜索套件 # 搜索套件
agc suites search <关键词> curl -s "https://suites.mercator.cn/api/v1/suites/search?q=缓冲区"
# 查看套件详情
agc suites get <suite-id>
```
### 执行
```bash
# 执行套件
agc run <suite-id> --inputs '{"expression": "1+1"}'
# 查看执行状态
agc status <task-id>
```
### 开发
```bash
# 从模板创建新套件
agc init ./my-suite
# 发布套件
agc publish ./my-suite
``` ```
-37
View File
@@ -1,37 +0,0 @@
# Python SDK
## 安装
```bash
pip install https://git.mercator.cn/SuiteHub/agentgis-sdk/raw/branch/main/dist/agentgis_sdk-0.1.0-py3-none-any.whl
```
## 快速开始
```python
from agentgis import AgentGIS
client = AgentGIS(api_key="mk_xxxxxxxxx", base_url="https://suites.mercator.cn")
# 查询套件列表
suites = client.list_suites()
for s in suites:
print(f"{s.name} v{s.version}")
# 查询套件详情
detail = client.get_suite("suite-id-xxx")
print(detail.description)
# 执行套件
execution = client.execute_suite("suite-id-xxx", inputs={"buffer_distance": 0.5})
print(f"Execution: {execution.execution_id}")
# 查询执行状态
status = client.get_execution(execution.execution_id)
print(f"Status: {status.status}")
```
## API 参考
完整的 API 客户端方法列表和参数说明见自动生成的 API 文档:
[https://suites.mercator.cn/docs](https://suites.mercator.cn/docs)
+322
View File
@@ -0,0 +1,322 @@
# 🏗️ AgentGIS 前端约定
> **目的**: 减少每个子系统在前端上的反复调整,一次定规矩,后续照做。
> **适用**: suite-market、auth-center、discussions 等所有 Next.js 前端。
> **版本**: v1.0 (2026-07-21)
---
## 一、页面骨架
所有页面使用统一的三段式骨架布局,不另起炉灶:
```
┌──────────────────────────────────────────────┐
│ 顶部导航(Navbar) │
│ 套件 | 发布 | 管理 | 文档 [登录/用户头像] │
├────────┬─────────────────────────────────────┤
│ 左侧 │ 右侧内容区 │
│ 导航 │ (各页面自定) │
│ │ │
│ (各页面 │ │
│ 自定) │ │
└────────┴─────────────────────────────────────┘
└────────────── 页脚(Footer) ──────────────────┘
```
**规则:**
- 顶部导航统一在 `Navbar.tsx` 维护,不单独定制
- 左侧导航通过页面级 `layout.tsx` 注入(Next.js App Router
- 页脚全局统一
- 不出现面包屑(用左侧导航替代)
---
## 二、未认证状态
所有需要登录的页面,未认证时**必须**做到:
```
┌─────────────────────────────────────┐
│ 🔒 请登录后浏览 │
│ │
│ 登录后可查看套件、文档、管理后台等 │
│ │
│ (不显示登录按钮 — header 右上角有) │
└─────────────────────────────────────┘
```
**规则:**
- 使用统一 `LoginPrompt.tsx` 组件,不自制
- 不显示登录按钮/链接(header 右上角已有「登录」按钮)
- API 调用返回 401 时,前端必须捕获并切换到 LoginPrompt,**不能卡在加载中**
- 公开页面(首页等)不需登录,正常渲染
---
## 三、数据加载与错误处理
所有页面按此顺序处理状态:
```
加载中 → 出错 → 空数据 → 正常渲染
```
**规则:**
- 加载中:显示统一的「加载中...」骨架屏
- 出错(含 401):捕获错误,切换 LoginPrompt 或显示错误信息
- 空数据:显示「暂无内容」+ 引导文案
- 正常渲染:展示数据
- 不允许出现「永远卡在加载中」的情况
**所有 API 调用都必须有 `.catch()`**
```typescript
// ✅ 正确
fetchData().then(setData).catch(handleError)
// ❌ 错误
fetchData().then(setData) // 无 catch = 卡在加载中
```
---
## 四、目录结构
每个 Next.js 前端项目统一按以下结构组织:
```
frontend/
├── app/ # App Router 页面
│ ├── layout.tsx # 全局布局(Navbar + Footer
│ ├── page.tsx # 首页
│ ├── suites/ # 套件
│ │ ├── layout.tsx # 套件左侧导航
│ │ ├── page.tsx # 列表
│ │ └── [id]/page.tsx # 详情
│ ├── docs/ # 文档
│ │ ├── layout.tsx # 文档树形导航
│ │ ├── page.tsx
│ │ └── [slug]/page.tsx
│ ├── admin/ # 管理后台
│ │ ├── layout.tsx # 管理侧边栏
│ │ ├── applications/
│ │ ├── suites/
│ │ └── docs/
│ └── publish/
├── components/ # 共享组件
│ ├── Navbar.tsx # 顶部导航
│ ├── LayoutShell.tsx # 骨架布局
│ ├── LoginPrompt.tsx # 未登录提示
│ └── ... # 其他通用组件
├── lib/ # 工具库
│ ├── api.ts # API 封装(含统一 401 处理)
│ ├── auth.ts # 认证
│ └── auth-context.tsx # 认证上下文
├── public/
├── package.json
└── next.config.ts
```
**规则:**
- `app/` 下只放路由文件,不放组件
- 业务组件放 `components/`
- 工具函数放 `lib/`
---
## 五、API 401 拦截器
`lib/api.ts` 中的 axios 实例统一处理 401:
```typescript
api.interceptors.response.use(
(res) => res,
async (err) => {
if (err.response?.status === 401 && typeof window !== "undefined") {
// 公开页面:静默返回错误,让页面组件自己处理
const path = window.location.pathname;
if (path === "/" || path.startsWith("/suites") || path.startsWith("/docs")) {
return Promise.reject(err);
}
// 管理类页面:尝试刷新 token
try {
const refreshRes = await axios.post(
"https://auth.mercator.cn/api/v1/public/refresh/",
{},
{ withCredentials: true }
);
if (refreshRes.data?.access_token) {
setAccessToken(refreshRes.data.access_token);
err.config.headers["Authorization"] = "Bearer " + refreshRes.data.access_token;
return axios(err.config);
}
} catch {}
// 刷新失败:跳转登录
window.location.href = "https://auth.mercator.cn/login?return_url=" + encodeURIComponent(path);
}
return Promise.reject(err);
}
);
```
**规则:**
- 公开页面(suites、docs)的 401 → 静默返回,页面组件切换到 LoginPrompt
- 管理页面(admin、publish)的 401 → 尝试刷新 token,刷新失败跳转登录
- 不拦截器里弹 alert 或直接修改 DOM
---
## 六、深色/浅色主题
- 使用 Tailwind `dark:` 变体控制深色模式
- 通过 `ThemeToggle` 组件切换(位于 `components/`
- 默认跟随系统 `prefers-color-scheme`
- 切换结果存入 localStorage,下次加载优先读取
- 所有新组件必须同时测试浅色和深色模式
---
## 七、页面宽度与容器尺寸
统一使用以下预设宽度:
| 用途 | Tailwind class | 说明 |
|------|---------------|------|
| 最宽布局 | `max-w-7xl mx-auto` | 列表页、管理后台 |
| 内容页(窄) | `max-w-3xl mx-auto` | 详情页、阅读页 |
| 内容页(中) | `max-w-5xl mx-auto` | 文档列表、套件详情 |
| 表单 | `max-w-lg mx-auto` | 登录、设置 |
| 全宽 | `max-w-none` | 极少使用 |
**不允许:** 每个页面自定义宽度,导致用户在页面间切换时视觉跳跃。
---
## 八、移动端适配
- 使用 Tailwind 响应式前缀:`sm:`640px)、`md:`768px)、`lg:`1024px)、`xl:`1280px
- 导航栏在 `lg` 断点以下折叠为汉堡菜单(已实现)
- 左侧导航在 `md` 以下默认隐藏,通过按钮切换显示
- 表格在 `md` 以下切换为卡片视图(每行一张卡片)
- 不允许仅桌面端可用的设计,所有页面必须跑通 375px 宽度
---
## 九、通知(Toast 替代 alert/confirm
- 不使用浏览器原生的 `alert()``confirm()``prompt()`
- 使用统一的 Toast 通知组件
- Toast 位置:右上角固定
- 类型:success(绿色)、error(红色)、warning(黄色)、info(蓝色)
- 自动消失:success/info 3 秒,warning/error 5 秒
- 实现:用 react-hot-toast 或自建 `ToastProvider`
---
## 十、布局模板
按是否有侧边导航分两种布局:
### 带侧边导航
```
┌──────────┬────────────────────────────────┐
│ 顶部导航 │ │
├──────────┤ 右侧内容区 │
│ 侧边栏 │ │
│ (页面 │ │
│ 自定) │ │
└──────────┴────────────────────────────────┘
```
适用:suites、docs、admin
实现方式:`<page>/layout.tsx`
### 无侧边导航(全宽)
```
┌────────────────────────────────────────────┐
│ 顶部导航 │
├────────────────────────────────────────────┤
│ │
│ 居中内容区 │
│ │
└────────────────────────────────────────────┘
```
适用:/、/publish
实现方式:`<page>/layout.tsx` 或直接在 page 中 `max-w-* mx-auto`
---
## 十一、FastAPI 端点避免冲突
suite-market 和 auth-center 后端都是 FastAPI,默认暴露 `/docs`Swagger UI)、`/redoc``/openapi.json`
如果前端有同名路由(如文档模块的 `/docs`),会与 FastAPI 默认端点冲突。
**必须:**
```python
app = FastAPI(
docs_url="/api/docs", # 改 /docs → /api/docs
redoc_url="/api/redoc", # 改 /redoc → /api/redoc
openapi_url="/api/openapi.json" # 改 /openapi.json → /api/openapi.json
)
```
---
## 十二、Header/Footer 统一
- Header:统一使用 `Navbar.tsx`components/ 下),不单独在各页面重复
- Footer:全局底部,包含 ICP 备案号、公安备案号、版权信息
- Header 和 Footer 在全局 `layout.tsx` 中加载,页面层不覆盖
---
## 十三、组件命名
| 类型 | 命名规则 | 示例 |
|------|---------|------|
| 页面组件(app/ | PascalCase + Page 后缀 | `DocsPage`, `SuiteDetailPage` |
| 布局(layout) | 文件名固定 `layout.tsx` | 不导出命名函数 |
| 通用组件 | PascalCase | `LoginPrompt`, `SuiteCard` |
| 工具函数 | camelCase | `fetchDocuments`, `formatDate` |
| API 函数 | camelCase | `fetchDocuments`, `createDocument` |
---
## 六、认证
- header 右上角只有一个「登录」按钮
- 登录跳转到 `auth.mercator.cn`
- 登录后通过 JWT cookie 回传
- API 调用由 `api.ts` 中的 axios 实例统一处理(interceptor 自动附带 token
**不允许:**
- 页面内部额外加「登录」按钮或链接
- 手动拼写 `Authorization` header
- 直接调用 `fetch`
---
## 七、样式
- 使用 Tailwind CSS
- 基础样式在 `globals.css` 中定义
- 组件样式使用 Tailwind class,不单独写 CSS 文件
- 不使用 CSS Modules 或 styled-components
---
## 八、落地方式
1. 此文档纳入 `SuiteHub/agent-profiles/suites-help/` 作为平台规范
2. 新建前端页面时,开发者对照此文档逐一检查
3. Code Review 时以此文档为标准
4. 后续如有不合理之处,更新此文档(不改代码,改规矩)
+206
View File
@@ -0,0 +1,206 @@
# Mercator 云平台 & AgentGIS 平台 使用入门
> 📝 本文档面向 **套件使用者**(非技术人员),帮助您快速了解平台全貌和日常使用方式。
---
## 一、两个平台的关系
用一个比喻来理解:
```
┌──────────────────────────────────────────────────────────────┐
│ Mercator 云平台(线上服务) │
│ │
│ 你在这里: │
│ · 登录账号(auth.mercator.cn
│ · 浏览套件(suites.mercator.cn
│ · 交流反馈(discussions.mercator.cn
│ │
│ │ │
│ ▼ 查询套件、下发任务 │
│ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ AgentGIS 平台(本地工具) │ │
│ │ │ │
│ │ 在你的电脑上运行: │ │
│ │ · GIS Actions(执行引擎) │ │
│ │ · GIS Base(地理信息工具箱) │ │
│ │ │ │
│ │ 📍 数据始终留在你的电脑,不上传云端 │ │
│ └──────────────────────────────────────────────────┘ │
│ │
└──────────────────────────────────────────────────────────────┘
```
**一句话:** Mercator 云平台是"超市"AgentGIS 是"厨房"。你在超市选好菜(套件),在自家厨房(本地电脑)做菜。食材(你的数据)从不出厨房。
---
## 二、Mercator 云平台 — 你每天在网页上用的服务
### 2.1 统一认证中心(auth.mercator.cn
**用来做什么:** 登录所有 Mercator 服务的统一入口。
**你的用法:**
1. 打开 https://auth.mercator.cn/login
2. 用企业微信扫码,或用账号密码登录
3. 登录后自动跳转到对应的服务(套件市场、讨论板等)
**特别说明:**
- 一套账号通吃所有服务
- 你可以随时在后台创建自己的 API Key(类似"程序密码"),供自动化脚本使用
### 2.2 专家套件市场(suites.mercator.cn
**用来做什么:** 浏览、查找、使用各类 GIS 套件的在线商店。
**你的用法:**
1. 进入首页 → 浏览套件列表
2. 按分类筛选(自然资源、土地利用、测绘等)
3. 点击套件 → 查看详情、参数说明、版本历史
4. 找到需要的套件后,记下套件 ID 或名称
5. 在本地通过 `agc` 命令运行它
**界面预览:**
| 区域 | 内容 |
|------|------|
| 顶部导航 | 浏览套件、帮助文档 |
| 左侧分类 | 按业务分类筛选 |
| 中间列表 | 套件卡片(名称、作者、版本、简介) |
| 详情页 | 参数说明、版本日志 |
### 2.3 Discussions 用户交流平台(discussions.mercator.cn
**用来做什么:** 用户之间交流问题、提建议、讨论用法的社区。
**你的用法:**
1. 浏览已有话题 → 看看别人遇到什么问题
2. 搜索关键词 → 查找已有的解答
3. 创建新话题 → 提问、建议、报 Bug
4. 回复参与 → 帮助其他用户
**话题类型:**
| 标签 | 说明 |
|------|------|
| 🐛 bug | 报告平台或套件的问题 |
| ✨ feature | 提功能建议 |
| ❓ question | 提问求助 |
| 💬 discussion | 一般讨论 |
| 📢 announcement | 管理员发布的通知 |
---
## 三、AgentGIS 平台 — 你电脑上运行的工具
### 3.1 GIS Actions`agc` 命令)
**是什么:** 一个安装在你电脑上的命令行工具(`agc`),负责执行套件。
**它做什么:**
- 从 Mercator 云平台查询套件信息
- 在本地创建一个执行环境(LinuxDocker 容器 / Windows:本机进程)
- 在该环境中执行套件规定的步骤
- 执行完成后自动清理临时文件
**你的用法:**
```bash
# 1. 运行一个套件
agc run /路径/到/输出目录 --suite-id <套件ID> --input 参数名=
# 2. 查看运行状态
agc status
# 3. 列出已安装的套件
agc list
```
**数据安全:**
-**你的数据永远留在本地**,不上传云端
- ✅ 套件脚本在隔离的 Linux Docker 容器或 Windows 本机进程中执行
Docker 容器中运行
- ✅ 执行完毕后临时文件自动清理
- ✅ 只有最终成果文件保留在输出目录
### 3.2 GIS Base(基础环境)
**是什么:** 预装了 GIS 工具(GDAL、Python、Shapely、GeoPandas 等)的 Docker 镜像。
**你不需要直接操作它。** 当你运行 `agc run` 时,GIS Actions 会自动下载或使用本地缓存的基础镜像来执行套件。
---
> 💬 **使用中遇到任何问题?** 前往 [discussions.mercator.cn](https://discussions.mercator.cn/) 发话题,平台管理员和其他用户会帮你解答。
## 四、从零开始:一个任务的全流程
假设你是一名地理信息技术服务从业人员,需要做"土地整治竣工结算":
```
第 1 步:打开 auth.mercator.cn → 登录
第 2 步:打开 suites.mercator.cn → 搜索"土地整治竣工结算"
第 3 步:查看套件详情 → 了解需要哪些输入参数
第 4 步:打开终端,运行命令:
agc run ./output --suite-id xxxx-xxxx --input range_path=./范围.shp
第 5 步:GIS Actions 自动执行:
├── 下载套件脚本包
├── 启动 Docker 容器(含 GIS 工具)
├── 运行脚本,处理你的数据
└── 生成成果文件到 ./output/ 目录
第 6 步:在 ./output/ 中拿到结果文件
```
---
## 五、常见问题
### Q: 我需要安装什么软件?
**A:** 只需要两样:Docker 和 `agc` 命令行工具。安装步骤见帮助文档。
### Q: 我的数据安全吗?
**A:** 绝对安全。你的数据全程在本地处理,不上传任何文件到云端。只有套件的运行日志回传到服务器(不含原始数据)。
### Q: 套件不会用怎么办?
**A:**
- 在套件市场查看套件详情中的参数说明
- 在 Discussions 搜索或提问
- 在 Discussions 提交功能建议或 Bug 报告
### Q: 我可以自己发布套件吗?
**A:** 可以。需要申请开发者角色,在 Auth Center 后台创建 API Key,然后通过 API 发布。具体步骤见开发指南。
---
## 六、快速参考
### 网址
| 服务 | 网址 |
|------|------|
| 登录入口 | https://auth.mercator.cn |
| 套件市场 | https://suites.mercator.cn |
| 用户交流 | https://discussions.mercator.cn/ |
| 首页 | https://www.mercator.cn |
### agc 常用命令
| 命令 | 说明 |
|------|------|
| `agc run <输出目录> --suite-id <ID> --input key=val` | 运行套件 |
| `agc status` | 查看运行状态 |
| `agc list` | 列出可用的套件 |
| `agc config set api_key <你的API Key>` | 配置认证 |
### 推荐工作流
```
登录云平台 → 查找套件 → 本地运行 → 获取结果 → 有疑问去 Discussions
```
+464
View File
@@ -0,0 +1,464 @@
# Mercator 云平台 & AgentGIS 培训文案
> 基于 SuiteHub/agent-profiles 文档及 2026-07-16 实际系统验证。
> 预计 32 页,每页标题 + 要点 = 一张 PPT。
---
## 第一部分:平台概述(2 页)
### 第 1 页:Mercator 云平台是什么
- 企业级智能自动化云平台
- 核心定位:**AI 调度 + 本地执行 + 全链路安全**
- 三个核心子系统:
- **统一认证中心**auth.mercator.cn)— 你是谁
- **专家套件市场**suites.mercator.cn)— 你能做什么
- **用户交流中心**discussions.mercator.cn)— 怎么反馈
- AgentGIS = GIS 能力扩展层,面向地理空间数据处理
### 第 2 页:平台总体架构
- 云端 + 本地两层架构
- **云端**:认证、市场、讨论区、代码托管、脚本包分发
- **本地**GIS Actions 执行引擎,下载脚本包后在本地运行(Linux Docker / Windows 本机进程)
- **核心原则:数据永不离开本地**
- 用户数据始终在自己的机器上处理,不上传云端
- LinuxDocker 容器隔离执行 / Windows:本机进程执行
- 云端只做管理、分发、协作
---
## 第二部分:统一认证中心(5 页)
### 第 3 页:Auth Center 是什么
- 域名:auth.mercator.cn
- 职责:统一身份认证,所有子系统的入口
- 一句话:**一次登录,通行全平台**
- 支持三种登录方式:
- 密码登录
- 企业微信扫码登录
- 忘记密码 → 邮箱重置
### 第 4 页:登录与注册
- **密码登录**:输入用户名/邮箱 + 密码
- **企业微信扫码**:首次扫码自动创建账户,绑定企业微信身份
- **注册**:自助注册,需企业邮箱验证(@mercator.cn
- **忘记密码**:通过绑定邮箱发送重置链接
- 支持 MFA(多因素认证):TOTP 动态码
### 第 5 页:API Key 管理
- 什么场景用:AI Agent(如 OpenClaw)调用平台 API
- API Key 格式:`mk_` 开头,46 位字符
- 获取方式:登录 Auth Center → API Key 管理 → 创建
- 可设置过期时间(1-365 天,默认 90 天)
- 可随时吊销
- **安全提醒**:API Key 创建后只显示一次,请立即保存
### 第 6 页:OAuth2 / OIDC 服务端
- Auth Center 内置完整的 OAuth2 和 OpenID Connect 服务端
- 支持授权码流程(Authorization Code+ PKCE
- 支持 Refresh Token 自动续期
- RS256 签名,JWKS 公开密钥
- 企业微信为 OIDC 身份源
- 可注册第三方 OAuth Client,实现 SSO
### 第 7 页:个人信息管理
- 个人资料:修改昵称、邮箱、手机号、地址
- 头像上传:支持 JPG/PNG/WebP/GIF,最大 500KB
- 会话管理:查看当前登录设备,可远程登出
- 修改密码
---
## 第三部分:专家套件市场(8 页)
### 第 8 页:Suite Market 是什么
- 域名:suites.mercator.cn
- 职责:GIS 套件的发现、发布、版本管理
- 面向两类用户:
- **套件使用者**:浏览、选择、执行套件
- **套件开发者**:开发、测试、发布套件
- 公开可访问,认证只约束操作(创建/执行/发布)
### 第 9 页:浏览与搜索套件
- **套件列表**:展示所有已发布套件
- 名称、描述、分类、版本号、作者
- **搜索栏**:关键词搜索名称和描述
- **分类筛选**:按业务分类过滤(如土地整治、数据转换等)
- **状态筛选**:按发布状态筛选
### 第 10 页:套件详情
- 点击套件名称进入详情页
- 展示内容:
- **详细描述**:套件的完整功能说明
- **输入参数**:需要用户提供的参数列表(名称、类型、是否必填、默认值)
- **输出结果**:执行完成后能获取的结果说明
- **版本选择**:可选择指定版本执行
- 快速执行命令:一键复制 `agc run` 命令
### 第 11 页:选择套件的方法
- 看用途:描述是否匹配你的需求?
- 看输入:需要提供的文件或参数是否容易获取?
- 看输出:结果是否符合预期?
- 看不明白的套件就不选,换一个
- 先查市场,再动手——避免重复造轮子
### 第 12 页:套件的结构
- 一个套件 = workflow.yaml + scripts/ 目录 + [可选] demo-data/ 目录
- workflow.yaml:工作流定义
- scripts/Python 脚本文件
- demo-data/(可选):Playground 在线演示用的样例数据
- 有 demo-data/ 的套件可在 agentgis.cn Playground 中在线试用
- 没有 demo-data/ 的套件只能通过 agc run 本地执行
- workflow.yaml 定义了:
- **name**:套件名称
- **description**:功能描述
- **version**:版本号
- **slug**:英文包名(可选)
- **params**:输入参数声明
- **base_image**:运行镜像(默认 gis-base:latest
- **steps**:执行步骤列表
- scripts/:包含实际的 Python 脚本文件
### 第 13 页:工作流(Workflow)机制
- Steps 定义执行流水线
- 引用语法:
- `$params.xxx`:引用用户输入的参数
- `$steps.step_id.output_name`:引用前一步骤的输出
- 步骤依赖:`depends_on` 定义执行顺序
- 所有步骤共享 `/tmp/output` 工作目录
- 示例:三步流水线
```
Step 1: 空间分析(flow_dir.py)→ 输出流向栅格
Step 2: 汇流累积(accumulation.py)→ 依赖 Step 1
Step 3: 河网提取(stream_extract.py)→ 依赖 Step 2
```
### 第 14 页:发布套件(面向开发者)
- 前置条件:
- API Keyauth.mercator.cn 获取)
- Gitea Tokengit.mercator.cn 获取,需 write:packages 权限)
- 发布方式:
- **文件上传**`POST /publish/upload`,上传 tar.gz/zip
- **Git 仓库**`POST /publish`,从 Git 仓库拉取
- 发布流程自动完成:
- 合规检测 → 参数校验 → 打包脚本 → 上传 Gitea Packages → 注册到数据库
- 包含 demo-data/ 目录的套件自动支持 Playground 在线演示
### 第 15 页:版本管理
- 每次发布自动保存历史版本快照
- 版本记录包含:version、workflow 定义、package_url、description、category、tags
- 用户可通过 `--version x.x.x` 指定执行历史版本
- API 支持:`GET /api/v1/suites/{id}?version=1.0.0`
- 包命名规则:中文自动转拼音,或通过 slug 字段手动指定英文名
---
## 第四部分:用户交流中心(3 页)
### 第 16 页:Discussions 是什么
- 域名:discussions.mercator.cn
- 职责:用户交流、反馈、问题讨论
- 功能:
- 创建话题
- 评论互动
- 标签分类
- 话题关闭/重开
### 第 17 页:话题与标签
- 预置标签体系:
- **bug**(红色):缺陷报告
- **feature**(绿色):功能请求
- **question**(蓝色):使用疑问
- **discussion**(紫色):一般讨论
- **announcement**(橙色):公告
- **suggestion**(青色):改进建议
- **auto-report**(灰色):系统自动生成的报告
- 标签帮助快速筛选和分类话题
### 第 18 页:错误反馈机制
- gis-actions 执行失败时,会自动发话题到 Discussions(需配置 API Key
- 自动生成的话题包含:
- 套件名称和版本号
- 错误摘要
- 脱敏后的日志
- 标签:bug + auto-report
- 好处:
- 开发者第一时间知道套件出问题
- 其他用户可能遇到相同问题可以找到解决方案
- 可关闭话题表示已修复
---
## 第五部分:GIS Actions 本地执行引擎(6 页)
### 第 19 页:GIS Actions 是什么
- 本地执行器
- **Linux**:安装在自己的机器上(deb 包)
- **Windows**:安装 agc.exezip 包)
- 命令行工具:`agc`
- 完整命令集:
- `agc config` — 配置 API Key 和市场地址
- `agc run` — 执行套件(支持 `--watch` 实时输出、`--resume` 续跑)
- `agc search / info` — 搜索和查看套件
- `agc doctor` — 环境诊断
- `agc logs / cache` — 运行历史和缓存管理
- `agc mcp` — AI Agent 集成入口(MCP 协议)
- `agc self-update` — 自动升级
- 职责:从套件市场下载脚本包 → 在本地执行(Linux Docker / Windows 本机)→ 返回结果
- 安装方式:
**Linux**
```bash
curl -sLO https://packages.mercator.cn/public/gis-actions/latest.deb
sudo dpkg -i latest.deb
```
**Windows**
1. 下载 latest-windows.zip
2. 解压到 %LOCALAPPDATA%\AgentGIS\gis-actions\
3. 加入 PATH
4. 验证:`agc --help`
### 第 20 页:环境要求
**Linux**
- 操作系统:Debian / Ubuntu
- Docker Engine
- Python 3.10+
- 首次运行时自动下载 gis-base 镜像(约 465MB
**Windows**
- 操作系统:Windows 10/11
- ArcMap 10.8arcpy 步骤需要)
- 无需 Docker
**通用:**
- 网络:需要能访问 suites.mercator.cn 和 git.mercator.cn
### 第 21 页:配置 API Key
- 为什么需要 API Key:用于认证身份、调取套件信息和下载脚本包
- 获取方式:登录 auth.mercator.cn → API Key 管理 → 创建
- 配置方式:
```bash
agc config set api-key mk_xxxxxxxxxxxxxxxxxxxx
```
- 查看配置:`agc config list`
- 切换市场地址:`agc config set market-url <url>`
- 所有配置保存在 `~/.config/gis-actions/config.toml`
### 第 22 页:执行套件
- 基本命令:
```bash
agc run /tmp/output --suite-id <suite-id> --input key=value
agc run /tmp/output --suite-id <suite-id> --input key=value --watch # 实时输出
agc run /tmp/output --suite-id <suite-id> --input key=value --resume # 断点续跑
```
- 其他命令:
| 命令 | 用途 |
|------|------|
| `agc search <query>` | 搜索套件 |
| `agc info <suite-id>` | 套件详情 |
| `agc logs` | 历史记录 |
| `agc cache list / clean` | 缓存管理 |
| `agc mcp` | AI Agent 集成(MCP 协议) |
- 执行流程:
1. 从市场查询套件的脚本包地址(package_url
2. 检查本地缓存,命中则跳过下载
3. 从 Gitea Packages 下载脚本包(自动缓存)
4. 解压并读取 workflow.yaml
5. 按 depends_on 拓扑顺序执行各步骤
6. 每步按 runtime 执行:
- runtime: docker → Docker 容器(gis-base 镜像)
- runtime: python3 → 本地 subprocess
- runtime: arcpy → 系统 arcpyWindows only
7. 结果写入本地工作目录的 `_step_outputs/` 下
8. 清理下载的脚本包和临时文件
### 第 23 页:数据安全
- **数据永不离开本地**
- 输入文件始终在用户自己的机器上
- 数据处理在本地完成(Linux Docker 容器 / Windows 本机进程)
- 不上传到云端、不经过平台服务器
- 执行完成后脚本包自动清理
- 用户数据和结果文件始终保留在本地
### 第 24 页:错误处理
- 执行失败怎么办:
1. 查看控制台错误信息
2. 检查输入文件路径是否正确
3. 运行 `agc doctor` 一键诊断环境:
- Linux: Docker 是否运行 / Windows: agc.exe 是否在 PATH
- 镜像是否存在(Linux)
- API Key 是否有效
- 能否连通套件市场
4. 查看失败记录:`agc logs --status failed`
5. 确认已升级到最新版:`agc self-update`Linux: deb / Windows: zip 自动解压)
- 自动报告失败:已配置 API Key 的情况下,执行失败会自动发帖到 Discussions
- 如果怀疑是套件本身的 Bug
- 配置 API Key 后,自动反馈到讨论区
- 或手动访问 discussions.mercator.cn 发帖
---
## 第六部分:GIS Base 基础镜像(3 页)
### 第 25 页:GIS Base 是什么
- **Linux 模式**:所有 Docker 套件的运行基石
- 预装完整 GIS 工具链的 Linux Docker 镜像
- 永久存储在用户本地,所有套件共享
- 镜像名:`gis-base:latest`,约 465MB
- **Windows 模式**:不需要 gis-base 镜像
- 使用本地 arcpy / Python 环境
- 依赖 ArcMap 10.8 的 arcpy 环境
### 第 26 页:预装环境
- 系统级:
- GDAL 命令行工具
- mdbtoolsAccess 数据库读取)
- libgeos、libproj 等 GIS 底层库
- Python 3.11
- 核心 GISnumpy、shapely、pyproj、fiona、rasterio、geopandas
- 数据处理:pandas、scipy、openpyxl、xlrd、xlsxwriter
- 可视化:matplotlib
- 文档生成:python-docx、reportlab
- 工具库:Pillow、requests、Jinja2
### 第 27 页:获取方式
- 安装 gis-actions 时自动下载
- 也可手动拉取:
```bash
docker pull registry.mercator.cn/library/gis-base:latest
```
- 离线环境:在可联网机器上导出镜像
```bash
docker save gis-base:latest | gzip > gis-base.tar.gz
```
然后在目标机器
```bash
docker load -i gis-base.tar.gz
```
### 第 28 页:AI Agent 集成(MCP 协议)
- GIS Actions v3.1 起支持 MCPModel Context Protocol
- AI AgentClaude / DeepSeek / 本地 Agent)可自动发现和调用 GIS 工具
- 启动方式:
```bash
agc mcp # stdio 模式(默认)
agc mcp --transport sse --port 8080 # SSE 模式(HTTP
```
- AI Agent 无需关心 Docker、镜像、套件包——只需调用工具名和参数
### 第 29 页:包签名与安全
- 套件包发布时使用 Ed25519 签名
- 下载后自动验证签名,防止篡改
- 手动验签:`python3 -m gis_actions.signing verify <file> <sig>`
- 安装 gis-actions 时自动下载
- 手动下载:
```bash
curl -sLO https://packages.mercator.cn/public/gis-base/latest.tar.gz
docker load -i latest.tar.gz
```
- 镜像存储在 MinIO 公共存储上
- 所有套件脚本在此镜像中隔离执行
---
## 第八部分:AI Agent 集成与安全(2 页)
> 新增:MCP 协议适配 + 包签名验证
---
### 第 28 页:AI Agent 集成(MCP 协议)
- GIS Actions v3.1 起支持 MCPModel Context Protocol
- AI AgentClaude / DeepSeek / 本地 Agent)可自动发现和调用 GIS 工具
- 启动方式:
```bash
agc mcp # stdio 模式(默认)
agc mcp --transport sse --port 8080 # SSE 模式(HTTP
```
- AI Agent 无需关心 Docker、镜像、套件包——只需调用工具名和参数
### 第 29 页:包签名与安全
- 套件包发布时使用 Ed25519 签名
- 下载后自动验证签名,防止篡改
- 手动验签:`python3 -m gis_actions.signing verify <file> <sig>`
---
## 第九部分:各系统关系与生态(3 页)
### 第 30 页:端到端工作流程
```
用户 → Auth Center 登录/获取 API Key
→ 浏览 Suite Market → 选择合适的套件(关注平台标签)
→ 复制 agc run 命令 → 在本地终端执行
→ GIS Actions 下载脚本包 → 执行(Linux Docker / Windows 本机)→ 得到结果
→ 出问题 → Discussions 反馈 → 开发者收到 → 修复 → 发布新版本
```
### 第 31 页:系统关系图
```
┌─────────────────────────────────────────────────┐
│ 云端平台 │
│ │
│ Auth Center ◄── Suite Market ◄── Discussions │
│ │ │ │
│ │ ▼ │
│ │ Gitea Packages │
│ │ (脚本包 + 基础镜像) │
│ └──────────────────│───────────────────────────┘
│ 下载
┌─────────────────────────────────────────────────┐
│ 本地用户 │
│ │
│ gis-actions (agc) │
│ ├─ Linux: docker run gis-base → 脚本执行 │
│ └─ Windows: subprocess(arcpy/python3) → 执行 │
└─────────────────────────────────────────────────┘
```
### 第 32 页:总结
- **Mercator 云平台**:认证 + 市场 + 讨论区,构成完整生态
- **AgentGIS**:将 GIS 能力扩展到本地,数据安全有保障
- **GIS Actions**:一键安装(Linux deb / Windows zip),即装即用
- **GIS Base**Linux Docker 模式的 GIS 工具箱 / Windows 使用本地 arcpy
- **核心价值**:数据不离开本地,算法安全交付,身份贯穿全域
---
> 本文案基于 SuiteHub/agent-profiles 文档及 2026-07-16 实际系统部署验证编写。
+72 -93
View File
@@ -1,111 +1,90 @@
# Workflow 规范 # Workflow 规范
## 文件位置 ## 概述
套件根目录下的 `workflow.yaml` `workflow.yaml` 定义套件的步骤、参数和执行流程
## 顶层字段 ## 文件结构
```yaml
name: 套件名称
description: 套件功能描述
version: 1.0.0
author: 作者名
tags: [标签1, 标签2]
platform: all
category: 业务分类(如:土地整治)
params:
input_path:
type: string
required: true
desc: 输入文件路径
buffer_distance:
type: number
default: 100
desc: 缓冲区半径(米)
base_image: gis-base:latest
env:
LOG_LEVEL: INFO
steps:
- id: step1
name: 步骤名称
type: python
runtime: python3
script_id: run
params:
input: $params.input_path
distance: $params.buffer_distance
```
## 字段说明
| 字段 | 必填 | 说明 | | 字段 | 必填 | 说明 |
|------|------|------| |------|------|------|
| `name` | | 套件名称 | | `name` | | 套件名称 |
| `description` | | 描述 | | `description` | | 套件功能描述 |
| `version` | | 版本号,默认 1.0.0 | | `version` | | 语义化版本号 |
| `category` | | 分类标签 | | `slug` | | 英文包名。不传则从 name 自动转拼音 |
| `tags` | | 标签列表 | | `params` | | 参数声明(供用户查看) |
| `params` | | 输入参数的 JSON Schema | | `base_image` | | Docker 镜像,默认 `gis-base:latest` |
| `output_schema` | | 输出结果的结构定义 | | `steps` | | 步骤列表,至少 1 步 |
| `steps` | 是 | 执行步骤列表 |
| `resolved_params` | 是 | 参数解析后的默认值 |
## 参数声明(params ### steps 字段
使用 JSON Schema 格式: | 字段 | 必填 | 说明 |
|------|------|------|
| `id` | ✅ | 步骤唯一 ID |
| `name` | ❌ | 步骤显示名称 |
| `type` | ✅ | 步骤类型,当前固定为 `python` |
| `script_id` | ✅ | 脚本 ID(对应 scripts/ 下的 .py 文件名,不含扩展名) |
| `params` | ❌ | 步骤参数,值中使用 `$params.xxx` 引用用户输入 |
| `depends_on` | ❌ | 依赖的步骤 ID 列表,控制执行顺序 |
## 参数传递
步骤参数通过 `$params.xxx` 语法引用用户输入:
```yaml ```yaml
params: params:
type: object input: $params.input_path # 引用用户的 input_path 参数
required: distance: $params.buffer_distance # 引用用户的 buffer_distance 参数
- input_path
properties:
input_path:
type: string
description: 输入文件路径
threshold:
type: number
default: 0.5
description: 阈值
``` ```
### 参数类型 引擎会自动:
1. 将用户提供的文件路径复制到工作目录
2. 替换路径为容器内可访问的路径(`/tmp/output/文件名`
3. shapefile 自动复制配套文件(.shx/.dbf/.prj
| 类型 | 说明 | 示例 | ## 执行顺序
|------|------|------|
| `string` | 文本或文件路径 | `/data/input.shp` |
| `number` | 浮点数 | `0.5` |
| `integer` | 整数 | `100` |
| `boolean` | 布尔值 | `true` |
## 步骤定义(steps -`depends_on` 的步骤并行执行
-`depends_on` 的步骤在依赖步骤完成后执行
- 默认串行(`depends_on` 为空时按列表顺序执行)
```yaml ## 步骤输出
nodes:
- id: my-step # 步骤 ID,唯一
name: 我的步骤 # 步骤名称
script_id: run # 脚本标识(不是 script: run.py
params:
input: "${{inputs.input_path}}" # 双花括号语法
```
### 常见错误 每个步骤执行完成后,脚本向 stdout 输出 JSON 结果。步骤间的数据通过 `/tmp/output/` 目录共享。
| ❌ 错误写法 | ✅ 正确写法 | 原因 |
|-----------|-----------|------|
| `script: run.py` | `script_id: run` | 执行器读的是 `script_id` |
| `params_mapping: {...}` | `params: {...}` | 字段名是 `params` |
| `$inputs.xxx` | `${{inputs.xxx}}` | 双花括号语法 |
## 文件共享
所有步骤共享 `/tmp/output` 目录。Step 1 写入的文件,Step 2 可以直接读取:
```python
# Step 1:写文件
with open("/tmp/output/result.json", "w") as f:
json.dump(data, f)
# Step 2:读文件
with open("/tmp/output/result.json") as f:
data = json.load(f)
```
每个步骤也有独立的 `/tmp/step_output` 目录。
## 脚本约定
脚本通过 `PARAMS_FILE` 环境变量获取参数(默认 `/tmp/params.json`),结果通过 stdout 输出 JSON
```python
import json, os
params_file = os.environ.get("PARAMS_FILE", "/tmp/params.json")
with open(params_file) as f:
params = json.load(f)
# 处理逻辑...
result = {"status": "ok", "value": 42}
print(json.dumps(result))
```
## resolved_params
提供参数解析后的默认值,执行器直接使用这些值:
```yaml
resolved_params:
- step_index: 0
step_name: 我的步骤
params:
input_path: "/data/input.shp"
threshold: 0.5
```
@@ -5,59 +5,50 @@
- 一个 API Key(从 https://auth.mercator.cn 获取) - 一个 API Key(从 https://auth.mercator.cn 获取)
- 套件目录包含 `workflow.yaml``scripts/` - 套件目录包含 `workflow.yaml``scripts/`
## 一、使用 CLI 发布(推荐) ## 通过 API 发布
```bash ```bash
# 安装 CLI curl -X POST https://suites.mercator.cn/api/v1/publish/upload \
pip install https://git.mercator.cn/SuiteHub/agentgis-cli/raw/branch/main/dist/agentgis_cli-0.1.0-py3-none-any.whl
# 配置 API Key
agc config set api-key mk_xxxxxxxxxxxxx
# 发布
agc publish ./my-suite
```
## 二、手动发布
### 1. 打包
```bash
cd my-suite
tar czf scripts.tar.gz workflow.yaml scripts/
```
### 2. 上传到包存储
```bash
curl -X PUT \
-H "Authorization: Bearer mk_xxxx" \ -H "Authorization: Bearer mk_xxxx" \
-F "file=@scripts.tar.gz" \ -F "file=@my-suite.tar.gz" \
https://suites.mercator.cn/api/v1/publish/upload -F "platform=all" # linux / windows / all
> 发布后套件包会上传到 https://git.mercator.cn/SuiteHub 组织。
``` ```
### 3. 注册套件 其中 `my-suite.tar.gz` 包含:
```bash ```
curl -X POST https://suites.mercator.cn/api/v1/suites \ my-suite/
-H "Authorization: Bearer mk_xxxx" \ ├── workflow.yaml
-H "Content-Type: application/json" \ └── scripts/
-d '{ └── run.py
"name": "my-suite",
"description": "我的套件",
"version": "1.0.0",
"workflow": { ... },
"package_url": "https://..."
}'
``` ```
## 合规检测 `workflow.yaml` 示例:
发布时自动检测: ```yaml
platform: all
name: my-suite
description: 我的套件
version: 1.0.0
author: 作者
tags: [gis]
category: general
- `workflow.yaml` 格式是否正确 params:
- 参数声明是否完整 input_path:
- 脚本文件是否存在 type: string
- 参数类型是否匹配 required: true
desc: 输入文件路径
不通过则发布失败,返回具体错误信息。 base_image: gis-base:latest
steps:
- id: step1
name: 处理步骤
type: python
script_id: run
params:
input_path: $params.input_path
```
+19 -79
View File
@@ -1,94 +1,34 @@
# 快速开始 — 开发第一个套件 # 快速开始
## 什么是套件 ## 安装 gis-actions
套件(Suite)是平台的可执行单元。一个套件包含:
- **workflow.yaml**:步骤定义(核心)
- **scripts/run.py**:执行脚本
## 第一步:创建套件目录
```bash ```bash
mkdir my-first-suite # 下载
cd my-first-suite # Linux
curl -sLO https://packages.mercator.cn/public/gis-actions/latest.deb
sudo dpkg -i latest.deb
# Windows
# 下载 latest-windows.zip 解压到 %LOCALAPPDATA%\AgentGIS\gis-actions\ 并加入 PATH
``` ```
## 第二步:编写 workflow.yaml ## 浏览套件
```yaml
name: hello-world
description: 最小示例套件 — 输出用户输入的文本
version: 1.0.0
category: utility
params:
type: object
required:
- message
properties:
message:
type: string
description: 要输出的文本
steps:
- id: say-hello
name: 输出信息
script_id: run
params:
message: "${{inputs.message}}"
resolved_params:
- step_index: 0
step_name: 输出信息
params:
message: "Hello, AgentGIS!"
```
## 第三步:编写脚本
```bash ```bash
mkdir scripts curl -s https://suites.mercator.cn/api/v1/suites | python3 -m json.tool
``` ```
`scripts/run.py` ## 执行套件
```python 选择一个套件 ID,在本地执行:
#!/usr/bin/env python3
import json, os
params_file = os.environ.get("PARAMS_FILE", "/tmp/params.json")
with open(params_file) as f:
params = json.load(f)
message = params.get("message", "Hello!")
result = {"output": message, "length": len(message)}
print(json.dumps(result))
```
## 第四步:测试
```bash ```bash
agc run <suite-id> --inputs '{"message": "测试"}' agc run /tmp/my-output \
--suite-id 2c99a1cb-84a5-42dd-9147-1c8e8f7f2941 \
--input bid_xls=/path/to/标段清单.xls \
--input points_shp=/path/to/点状工程.shp
``` ```
或直接提交任务到 API ## 发布套件
```bash 套件通过 Gitea 仓库 + 发布 API 发布,详见 [套件发布指南](../开发者指南/套件发布指南.md)。
curl -X POST https://suites.mercator.cn/api/v1/task \
-H "Authorization: Bearer mk_xxxx" \
-d '{"suite_id": "...", "inputs": {"message": "测试"}}'
```
## 第五步:发布
```bash
agc publish ./my-first-suite
```
发布后套件会在市场中展示,其他用户可以搜索和使用。
## 查看已发布的套件
```bash
agc suites list
```
+17 -41
View File
@@ -1,54 +1,30 @@
# 最佳实践 # 套件开发最佳实践
## 先查市场,再动手写 ## 命名规范
开发新套件前,先搜索市场是否已有能复用的套件:
```bash
agc suites search 缓冲区
agc suites search 面积计算
```
能找到现成的就引用它。不需要每次都写自己的脚本。
## 套件命名规范
- 使用英文小写 + 连字符:`buffer-analysis``land-use-classification` - 使用英文小写 + 连字符:`buffer-analysis``land-use-classification`
- 名称反映功能:`stream-extraction` 而非 `my-suite-1` - 名称反映功能:`stream-extraction` 而非 `my-suite-1`
## 参数设计
- 参数名用 snake_case`input_path``buffer_distance` - 参数名用 snake_case`input_path``buffer_distance`
- 必填参数和可选参数区分清楚
- 提供合理的默认值
- 写清楚描述和单位
```yaml ## 查市场
threshold:
type: number 开发新套件前,先查询市场是否已有能复用的套件:
default: 100
description: "河网提取阈值(像元数)" ```bash
curl -s https://suites.mercator.cn/api/v1/suites | python3 -c "import json,sys; [print(s['name']) for s in json.load(sys.stdin)]"
``` ```
## 输出设计 ## 模板复用
- 输出 JSON 包含关键字段 有现成的 Suite → 在 workflow.yaml 中用 `suite_id` 引用。
- 文件输出路径写清楚 找不到 → 写新脚本 → 发布为新 Suite → 方便后续者复用。
```python ## 调试技巧
result = {
"status": "ok",
"output_path": "/tmp/output/result.shp",
"feature_count": 42
}
```
## 测试 `agc run` 时,注意观察:
发布前用 `agc run` 测试,确认输入输出正确。 1. 是否成功解析套件和下载 package_url
2. 输入文件是否复制到工作目录
3. 执行输出(Linux Docker 容器内或 Windows 本机进程)
## 版本迭代 日志在控制台直接打印,无需额外配置。
- 修复 bug 或小幅改进 → 递增补丁版本(1.0.0 → 1.0.1
- 新增功能 → 递增次版本(1.0.0 → 1.1.0
- 重大变更 → 递增主版本(1.0.0 → 2.0.0
@@ -1,55 +1,64 @@
# 脚本开发指南 # 脚本开发指南
## 脚本约定 ## 脚本执行环境
`scripts/run.py` 通过环境变量获取参数,通过 stdout 输出 JSON 结果。 脚本在两种环境中执行:
1. **Linux Docker 容器**runtime: docker)—— 隔离执行,gis-base 镜像
2. **Windows 本机进程**runtime: python3 / arcpy)—— 直接 subprocess 执行
### 接收参数 执行环境由 workflow.yaml 中步骤的 `runtime` 字段决定。下面以 Docker 为例说明容器结构:
```python ### 容器内目录结构
import json, os
params_file = os.environ.get("PARAMS_FILE", "/tmp/params.json") ```
with open(params_file) as f: /tmp/
params = json.load(f) ├── scripts/ ← 套件脚本包(只读)
│ ├── run.py
expression = params.get("expression", "1+1") │ └── ...其他脚本文件
precision = int(params.get("precision", 2)) ├── output/ ← 工作目录(读写,步骤间共享)
│ ├── 点状工程.shp ← 用户提供的输入文件
│ └── computed_data.json
├── params.json ← 参数文件(只读)
└── step_output/ ← 当前步骤输出目录
``` ```
### 输出结果 ### 基础镜像
```python - **镜像**`gis-base:latest`(执行 `agc run` 时自动从 Gitea Packages 下载)
result = {"status": "ok", "result": 42, "output_path": "/tmp/output/result.geojson"} - **内置**Python 3.11, GDAL, Shapely, GeoPandas, numpy, openpyxl, xlrd, fiona
print(json.dumps(result))
```
stdout 的 JSON 会被执行器捕获并作为步骤结果。
### 文件输出
- 输出文件写入 `/tmp/output/`(步骤间共享)
- 执行结束后脚本目录自动清理
## 执行环境
- **基础镜像**`registry.mercator.cn/agentgis/gis-base:latest`
- **包含**Python 3.11, GDAL, Shapely, GeoPandas, Fiona, PyProj, Rasterio, numpy
- **脚本路径**`/tmp/scripts/run.py`(只读)
- **工作目录**`/tmp/output`(读写,步骤间共享)
- **参数文件**`/tmp/params.json` - **参数文件**`/tmp/params.json`
- **输出目录**`/tmp/output/`
## 错误处理 ### 脚本入口
退出码非 0 表示失败 脚本通过命令行参数接收参数
```python ```python
print(json.dumps({"status": "error", "message": "文件不存在"})) import sys, json
sys.exit(1)
if __name__ == "__main__":
params = json.loads(sys.argv[1]) if len(sys.argv) > 1 else {}
# params = {"input_path": "/tmp/output/data.shp", ...}
result = run(params)
print(json.dumps(result, ensure_ascii=False))
``` ```
## 开发建议 ### 依赖管理
1. **输出明确**:结果 JSON 包含关键信息 脚本中缺失的依赖通过运行时 pip 安装:
2. **错误友好**:失败信息写清楚原因
3. **使用 GDAL**:GIS 文件处理优先使用 GDAL 命令行工具 ```python
import subprocess, sys
try:
import openpyxl
except ImportError:
subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'openpyxl'])
```
## 输出规范
脚本执行完成后,向 stdout 输出 JSON
```json
{"status": "completed", "output_path": "/tmp/output/result.shp"}
```
@@ -18,7 +18,7 @@ Agent 配置文件在 `suite-user/` 目录下:
``` ```
浏览市场 → 找到套件 → 查看参数说明 浏览市场 → 找到套件 → 查看参数说明
→ 准备本地文件 → 提交执行 → 拿结果 → 准备本地文件 → 提交执行Linux Docker / Windows 本机)→ 拿结果
``` ```
## 关键原则 ## 关键原则
@@ -1,6 +1,6 @@
# 套件开发者 Agent 配置 # 套件开发者 Agent 配置
如果你是 AI Agent,你的角色是 **套件开发者**——开发和发布 GIS 套件。 如果你是 AI Agent,你的角色是 **套件开发者**——开发和发布 GIS 套件(需在 workflow.yaml 中设定 `platform` + `runtime`
## 认知文件 ## 认知文件
@@ -20,7 +20,7 @@ Agent 配置文件在 `suite-developer/` 目录下:
1. 分析需求 → 查市场找复用 1. 分析需求 → 查市场找复用
2. 设计步骤 → 写 workflow.yaml 2. 设计步骤 → 写 workflow.yaml
3. 实现脚本 → 测试 3. 实现脚本 → 测试
4. 发布 → 迭代 4. 发布(需在 workflow.yaml 中设定 platform + runtime→ 迭代
``` ```
## 关键原则 ## 关键原则
+52 -52
View File
@@ -1,67 +1,67 @@
# Hello World 套件 # Hello, World! 套件示例
## 完整代码 一个最简单的套件,演示 workflow.yaml 和脚本结构。
最小的可工作套件,接收一个文本参数并输出。 ## 文件结构
### workflow.yaml ```
hello-world/
```yaml ├── workflow.yaml
name: hello-world └── scripts/
description: 输出用户输入的文本 └── run.py
version: 1.0.0
category: utility
params:
type: object
required:
- message
properties:
message:
type: string
description: 要输出的文本
steps:
- id: say-hello
name: 输出信息
script_id: run
params:
message: "${{inputs.message}}"
resolved_params:
- step_index: 0
step_name: 输出信息
params:
message: "Hello, AgentGIS!"
``` ```
### scripts/run.py ## workflow.yaml
```yaml
name: Hello World
description: 首个 AgentGIS 套件,接收一条消息并打印
version: 1.0.0
author: SuiteForge
platform: all
tags: [示例, 入门]
params:
message:
type: string
required: true
desc: 要打印的消息
base_image: gis-base:latest
steps:
- id: hello
name: 打印消息
runtime: python3
script_id: run
params:
message: $params.message
```
## scripts/run.py
```python ```python
#!/usr/bin/env python3 #!/usr/bin/env python3
import json, os import sys, json
params_file = os.environ.get("PARAMS_FILE", "/tmp/params.json") def run(params):
with open(params_file) as f: message = params.get("message", "Hello, AgentGIS!")
params = json.load(f) print(f"📢 {message}")
return {
"status": "completed",
"message": message,
}
message = params.get("message", "Hello!") if __name__ == "__main__":
params = json.loads(sys.argv[1]) if len(sys.argv) > 1 else {}
result = { result = run(params)
"output": message, print(json.dumps(result, ensure_ascii=False))
"length": len(message)
}
print(json.dumps(result))
``` ```
## 测试 ## 执行
```bash ```bash
# 打包 agc run /tmp/hello-output \
tar czf scripts.tar.gz workflow.yaml scripts/ --suite-id <your-suite-id> \
--input message="你好,AgentGIS!"
# 发布后执行
agc run <suite-id> --inputs '{"message": "你好,AgentGIS!"}'
``` ```
完整代码参考:`SuiteHub/hello-world-suite`
+5 -6
View File
@@ -12,6 +12,7 @@ description: 地块数据批处理 — 生成→验证→缓冲区→对比→
version: 2.0.0 version: 2.0.0
category: gis-processing category: gis-processing
tags: [gis, parcel, buffer] tags: [gis, parcel, buffer]
platform: all
params: params:
type: object type: object
@@ -26,15 +27,13 @@ params:
steps: steps:
- id: main - id: main
name: 全流水线 name: 全流水线
type: python
runtime: python3
script_id: process script_id: process
params: params:
buffer_distance: "${{inputs.buffer_distance}}" buffer_distance: $params.buffer_distance
resolved_params:
- step_index: 0
step_name: 全流水线
params:
buffer_distance: 0.5
``` ```
## 处理流程 ## 处理流程
@@ -1,75 +1,86 @@
# GIS Actions 本地部署指南 # GIS Actions 本地部署指南(双平台)
## 架构 ## 架构
GIS Actions 是**本地执行器**,从套件市场下载脚本包并在本地 Docker 中运行: GIS Actions 是**本地执行器**,从套件市场下载脚本包并在本地运行Linux Docker / Windows 本机)
``` ```
用户 / Agent 指定套件 ID 用户 / Agent 指定套件 ID
→ gis-actions(本地) → gis-actions(本地)
→ 从 Suite Market 下载脚本包 → 从 Suite Market 下载脚本包
→ 解析 workflow.yaml → 解析 workflow.yaml
→ docker run gis-base + 脚本 \u2192 runtime: docker -> docker run gis-base / python3/arcpy -> subprocess
→ 结果写入本地 /tmp/output/ \u2192 \u7ed3\u679c\u5199\u5165\u672c\u5730\u5de5\u4f5c\u76ee\u5f55
``` ```
## 环境要求 ## 环境要求
**Linux**
- Debian / Ubuntu 系统
- Docker
- Python 3.10+ - Python 3.10+
- Docker(用于容器化执行)
## 获取代码 **Windows**
- Windows 10/11
- ArcMap 10.8arcpy 步骤需要)
- 无需 Docker
## 安装
**Linux**
```bash ```bash
curl -L -o gis-actions.tar.gz "https://git.mercator.cn/api/packages/AgentGIS/generic/gis-actions/v2.4.0/gis-actions.tar.gz" curl -sLO https://packages.mercator.cn/public/gis-actions/latest.deb
tar xzf gis-actions.tar.gz sudo dpkg -i latest.deb
cd gis-actions
``` ```
安装后 `agc` 命令即可用。
## 配置 **Windows**
1. 下载 [latest-windows.zip](https://packages.mercator.cn/public/gis-actions/latest-windows.zip)
2. 解压到 `%LOCALAPPDATA%\AgentGIS\gis-actions\`
3. 将路径加入 `PATH`
4. 验证:`agc --help`
## 配置(可选)
```bash ```bash
# 设置 API Key(从 https://auth.mercator.cn 获取) # 设置 API Key(从 https://auth.mercator.cn 获取)
export AGENTGIS_API_KEY=mk_xxxxxxxxxxxxx export AGENTGIS_API_KEY=mk_xxxxxxxxxxxxx
``` ```
或创建 `worker.json`
```json
{
"worker": { "id": "my-machine-001" },
"scheduler": { "url": "https://suites.mercator.cn" },
"auth": { "api_key": "***" }
}
```
## 运行套件 ## 运行套件
```bash ```bash
# 通过套件 ID 执行(推荐) # 通过套件 ID 执行
python cli.py run /tmp/workdir --suite-id parcel-analysis --input buffer_distance=0.5 agc run /tmp/output --suite-id <suite-id> --input key=value
# 或直接指定脚本包地址 # 示例
python cli.py run /tmp/workdir --package-url https://git.mercator.cn/.../scripts.tar.gz agc run /tmp/output --suite-id 2c99a1cb-84a5-42dd-9147-1c8e8f7f2941 --input buffer_distance=0.5
``` ```
## 目录结构 ## 结构
**Linuxdeb 包):**
``` ```
gis-actions/ /usr/bin/agc # CLI 入口
├── cli.py # 命令行入口(支持 --suite-id / --package-url /usr/share/gis-actions/cli.py # CLI 逻辑
├── download_and_run.py # 下载 + 执行核心逻辑 /usr/share/gis-actions/download_and_run.py # 下载+执行
├── steps_executor.py # workflow.yaml 步骤执行器 /usr/share/gis-actions/local_executor.py # 本地步骤执行器
├── workdir/ # 默认工作目录 /usr/share/gis-actions/steps_executor.py # Docker 步骤执行器
└── packaging/deb/ # DEB 打包结构(待完善) ```
**Windowszip 包):**
```
%LOCALAPPDATA%\AgentGIS\gis-actions\agc.exe # CLI 入口
``` ```
## 执行流程 ## 执行流程
1. `cli.py run` 启动 1. `agc run` 启动
2. 解析套件 ID(调用 Suite Market API 获取 package_url 2. 解析套件 ID(调用 Suite Market API 获取 package_url
3. 下载 scripts.tar.gz → 解压到工作目录 3. 下载脚本包 → 解压到工作目录
4. 读取 workflow.yaml,按 steps 顺序执行 4. 读取 workflow.yaml,按 steps 顺序执行
5. 每个步骤在 Docker 容器中运行(gis-base 镜像) 5. 每个步骤按 runtime 执行:
6. 清理脚本目录(知识产权保护 - `docker` -> Docker 容器(gis-base 镜像
7. 结果写入本地输出目录 - `python3` -> 本地 subprocess
- `arcpy` -> 系统 arcpy
6. 结果写入本地输出目录,临时文件自动清理
@@ -0,0 +1,183 @@
# 平台架构文档
> 面向平台运维的架构描述。反映 **2026-07-16** 实际部署状态。
> 生产环境:阿里云 ECS39.107.238.22)。
> 冷备:腾迅云 ECS106.54.216.234),每日数据同步,不对外暴露。
---
## 一、总览
```
用户 / AI Agent
Nginx Proxy Manager (mercator-npm) ← HTTPS 统一入口
├── www.mercator.cn → homepage:3000
├── auth.mercator.cn → auth-center-frontend:3000 (→ backend :8000)
├── suites.mercator.cn → suite-market-frontend:3302 (→ backend :8001)
├── discussions.mercator.cn → discussions-frontend:3001 (→ backend :8005)
└── git.mercator.cn → gitea:3000
```
**核心原则:执行在本地,云端只做管理和分发。**
---
## 二、容器清单
全部运行在阿里云 ECS,Docker 网络 `mercator-net`
### 2.1 认证中心 — auth-center
| 项目 | 说明 |
|------|------|
| 前端 | `mercator-auth-center-frontend`Next.js:3000 |
| 后端 | `mercator-auth-center-backend`FastAPI:8000 |
| 数据库 | `auth_center_db`PostgreSQL |
API 分组:登录注册、企业微信 OIDC 扫码、API Key 管理(`mk_` 前缀)、服务账户 TokenHS256 JWT1h)、MFA TOTP、OAuth2/OIDC 服务端、用户管理、会话管理、审计日志。
### 2.2 套件市场 — suite-market
| 项目 | 说明 |
|------|------|
| 前端 | `mercator-suite-market-frontend`Next.js:3302 |
| 后端 | `mercator-suite-market-backend`FastAPI:8001 |
| 数据库 | `suite_market_db`PostgreSQL |
API 概览:
| 路由 | 功能 |
|------|------|
| `GET/POST /api/v1/suites` | 套件 CRUD |
| `GET /api/v1/suites/search?q=` | 搜索 |
| `POST /api/v1/suites/{id}/versions` | 发布版本 |
| `POST /publish` / `POST /publish/upload` | 发布套件 |
| `POST /api/v1/compliance/check` | 合规检测 |
| `POST /api/v1/parameters/validate` | 参数校验 |
| `GET /api/v1/categories` | 分类管理 |
| `GET /api/v1/health` | 健康检查 |
### 2.3 讨论区 — discussions
| 项目 | 说明 |
|------|------|
| 前端 | `mercator-discussions-frontend`Next.js:3001 |
| 后端 | `mercator-discussions-backend`FastAPI:8005 |
| 数据库 | `discussions_db`PostgreSQL |
API:话题 CRUD + 关闭/重开,评论 CRUD,标签管理。种子标签:bug, feature, question, discussion, announcement, suggestion。
### 2.4 基础设施
| 服务 | 容器 | 版本 |
|------|------|------|
| PostgreSQL | mercator-postgres | postgres:16-alpine |
| Redis | mercator-redis | redis:7-alpine |
| NPM | mercator-npm | jc21/nginx-proxy-manager:latest |
| MinIO | minio-nginx | nginx:alpineMinIO 反代,:9000 |
---
## 三、Gitea
| 域名 | 用途 |
|------|------|
| `git.mercator.cn` | 源码托管 + PackagesOCI 镜像仓库 + Generic 脚本包存储) |
### 组织与仓库
**AgentGIS**(源码仓库):
| 仓库 | 说明 |
|------|------|
| `auth-center` | 认证中心 |
| `suite-market` | 套件市场 |
| `discussions` | 讨论区 |
| `gis-actions` | 本地执行器(`cli.py` + `steps_executor.py` |
| `gis-base-image` | 基础镜像 Dockerfile |
| `mercator-homepage` | 官网首页 |
**SuiteHub**(项目文档):`agent-profiles` — Agent 认知文件 + 用户文档 + 平台架构文档
---
## 四、认证
| 凭证 | 有效期 | 用途 |
|------|--------|------|
| JWT(密码/OIDC 登录) | 15 分钟 | 浏览器 Web UI |
| API Key`mk_`) | 自定义(默认 90 天) | AI Agent 自动化 |
| 服务账户 TokenHS256 JWT | 1 小时 | 微服务间通信 |
| Gitea Token | 自定义 | Publish API 上传脚本包 |
**认证流程:**
```
浏览器 → auth.mercator.cn → 密码/企业微信扫码 → JWT
AI Agent → API Key → suite-market API
微服务 → HS256 JWT → Auth Center 签发
```
Auth Center 内置 OAuth2/OIDC 服务端,企业微信为身份源,RS256 签名。
---
## 五、套件生命周期
### 5.1 发布
```
开发者打包 workflow.yaml + scripts/ → .tar.gz
→ POST /publish/upload(需 API Key + Gitea Token
→ 合规检测
→ 参数校验
→ 上传脚本包到 Gitea Packages
→ 写入 suite_suites
```
### 5.2 本地执行
```
agc run <work_dir> --suite-id <id> --input key=value
├── GET suites.mercator.cn/api/v1/suites/{id}(查 package_url
├── wget 从 Gitea Packages 下载脚本包
├── 解压 → 读取 workflow.yaml
├── steps_executor: 按 depends_on 拓扑序
│ ├── runtime=docker → 每步 docker run --rm gis-base 隔离执行
│ └── runtime=python3/arcpy → 本地 subprocessWindows agc.exe
├── 清理脚本包
└── 结果留在本地 work_dir/_step_outputs/
```
平台上没有任务队列、没有 Worker。执行完全在用户本地完成。
### 5.3 基础镜像
| 项目 | 说明 |
|------|------|
| 仓库 | `git.mercator.cn/AgentGIS/gis-base-image` |
| 分发 | `https://packages.mercator.cn/public/gis-base/latest.tar.gz`MinIO |
| 预装 | Python 3.11 + GDAL + Shapely + GeoPandas + Fiona + Rasterio + PyProj + numpy + scipy + pandas + openpyxl + python-docx + matplotlib + Pillow + requests + Jinja2 |
| 大小 | ~465MBDebian slim 基底 |
---
## 六、技术栈
| 层级 | 选型 |
|------|------|
| 前端 | Next.js |
| 后端 | FastAPI |
| 数据库 | PostgreSQL 16 + Redis 7 |
| 反向代理 | Nginx Proxy Manager |
| 代码托管 / Packages | Gitea |
| OIDC 身份源 | 企业微信 |
| 对象存储 | MinIO |
| 邮件 | 阿里云 DirectMail |
| 本地执行器(Linux | gis-actionsPython CLI + Docker |
| 本地执行器(Windows | gis-actionsagc.exe + 本机 subprocess |
+18 -64
View File
@@ -1,81 +1,35 @@
# 快速入门 # 快速入门
## 第一步:获取 API Key ## 第一步:安装 gis-actions
访问 https://auth.mercator.cn,创建 API Key`mk_` 开头)。 ```bash
# Linux
curl -sLO https://packages.mercator.cn/public/gis-actions/latest.deb
sudo dpkg -i latest.deb
API Key 是 Agent 与平台交互的唯一凭证。 # Windows
# 下载 latest-windows.zip 解压到 %LOCALAPPDATA%\AgentGIS\gis-actions\,加入 PATH
```
前提条件:Linux 系统 + Docker。首次执行时会自动下载 gis-base 镜像。
## 第二步:浏览套件 ## 第二步:浏览套件
```bash ```bash
# 列出所有套件 curl -s https://suites.mercator.cn/api/v1/suites | python3 -m json.tool
curl -s https://suites.mercator.cn/api/v1/suites
# 搜索套件
curl -s "https://suites.mercator.cn/api/v1/suites/search?q=缓冲区"
# 查看套件详情
curl -s https://suites.mercator.cn/api/v1/suites/{suite_id}
``` ```
## 第三步:选择套件 记下你要用的套件 ID。
从列表中筛选符合需求的套件,记录它的 `suite_id` ## 第三步:执行套件
## 第四步:读取参数结构
查看套件详情中的 `params_schema`,了解需要提供哪些参数:
```bash ```bash
curl -s https://suites.mercator.cn/api/v1/suites/{suite_id} | jq '.params_schema' SUITE_MARKET_URL="https://suites.mercator.cn" \
agc run /tmp/output --suite-id <suite-id> --input key=value
``` ```
返回示例: 执行在本地 Docker 容器中完成,数据不上传云端。
```json
{
"type": "object",
"required": ["buffer_distance"],
"properties": {
"buffer_distance": {
"type": "number",
"default": 0.5,
"description": "缓冲区距离(度)"
}
}
}
```
根据参数声明构造输入数据。 ## 第四步:查看结果
## 第五步:提交执行 执行完成后,结果文件在工作目录(如 `/tmp/output/_step_outputs/`)中。
```bash
curl -s -X POST https://suites.mercator.cn/api/v1/suites/{suite_id}/execute \
-H "Authorization: Bearer ***" \
-H "Content-Type: application/json" \
-d '{"buffer_distance": 0.5}'
```
返回结果中包含 `task_id`,用这个 ID 查询执行状态。
## 第五步:查询状态
```bash
curl -s https://suites.mercator.cn/api/v1/task/{task_id}/status
```
状态:`pending``running``completed` / `failed`
## 第六步:获取结果
任务完成后,从返回结果中读取输出数据。
## 前置条件
- **API Key**(必须)
- **GIS Actions** 在本地运行(用于实际执行任务)
## 数据安全
**数据永不离开本地。** 你的文件始终在你的机器上处理。
@@ -1,47 +1,50 @@
# 执行任务与查看结果 # 执行套件与查看结果
## 提交任务 ## 执行套件
1. 进入套件详情页 使用 `agc run` 命令在本地执行套件:
2. 填写输入参数:
- **本地文件路径**:GIS Actions 将在你的机器上读取这些文件 ```bash
- **数值参数**:如缓冲区距离、精度等 SUITE_MARKET_URL="https://suites.mercator.cn" \
3. 点击「执行」按钮 agc run <work_dir> \
--suite-id 2c99a1cb-84a5-42dd-9147-1c8e8f7f2941 \
--input bid_xls=/path/to/标段清单.xls \
--input points_shp=/path/to/点状工程.shp
```
参数说明:
- `--suite-id`:套件 ID,从市场获取
- `--input`:输入参数,每个参数一个 `--input`,文件路径用本地绝对路径
## 执行流程 ## 执行流程
``` ```
你提交任务 agc run 执行
├── 从市场查询套件的脚本包地址
调度中心接收 → 放入队列 ├── 下载脚本包到本地
├── 复制输入文件到工作目录
GIS Actions(你的机器)拉取任务 ├── Step 1: docker run gis-base 执行脚本(Linux
├── Step 2: 本地 subprocess 执行(Windows
├── 下载套件脚本包
├── Docker 容器中执行 └── 结果写入 /tmp/output/
└── 结果写入本地目录
任务状态更新为「已完成」
``` ```
## 查看结果 ## 查看结果
- **执行状态**:任务列表显示每个任务的状态(待处理 / 运行中 / 已完成 / 失败) - **控制台输出**:执行过程实时打印,每个步骤的状态、产出一目了然
- **执行结果**:完成后可以看到输出的结果数据 - **结果文件**:在工作目录(如 `/tmp/my-output/`)的 `_step_outputs/`
- **本地文件**GIS Actions 处理后的文件保存在你机器上的指定输出目录
## 错误处理 ## 错误处理
如果任务失败: 如果执行失败:
1. 查看错误信息 1. 查看控制台错误信息
2. 检查输入文件路径是否正确 2. 检查输入文件路径是否正确
3. 检查文件格式是否支持 3. 确认执行环境(Linux: `docker ps`, Windows: `agc --help`
4. 确认 GIS Actions 是否正常运行 4. 确认 gis-actions 版本(`dpkg -l gis-actions`
## 数据安全 ## 数据安全
**数据永不离开本地。** 你提供的输入文件始终在你的机器上,GIS Actions 在你的本地 Docker 容器中处理,不上传到云端。 **数据永不离开本地。** 输入文件始终在你的机器上,在本地处理(Linux Docker 或 Windows 本机),不上传到云端。
@@ -14,6 +14,7 @@
- **搜索栏**:输入关键词搜索套件名称和描述 - **搜索栏**:输入关键词搜索套件名称和描述
- **分类筛选**:按分类过滤套件 - **分类筛选**:按分类过滤套件
- **平台筛选**:按 Linux / Windows / 全平台 过滤
- **状态筛选**:按发布状态筛选 - **状态筛选**:按发布状态筛选
## 套件详情 ## 套件详情