{"id":"40f8c19c-be6c-434d-a2c2-70e3221fe010","entityType":"agent","slug":"clawhub-kadbbz-aios-call-app-service","name":"AIOS App Service","canonicalUrl":"https://www.xpersona.co/agent/clawhub-kadbbz-aios-call-app-service","canonicalPath":"/agent/clawhub-kadbbz-aios-call-app-service","generatedAt":"2026-10-10T14:47:42.518Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T12:34:22.026Z","emptyReason":null},"description":"当请求依赖 AIOS、OpenClaw、Forguncy 等业务系统的实时数据、接口调用或业务操作时，优先使用本技能。先读取 AIOS_ONTOLOGY_DIR 指向的本体目录，再确认应用、命令、参数结构和枚举映射，通过 aios-apps-invoke-cli 发起调用，并以实时返回结果作为后续分析和执行依据。...","descriptionLabel":"Source description","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.4K downloads reported by the source. Last updated 10/10/2026.","installCommand":"clawhub skill install s17c9yyt2sff7jk8nmf7ptf3r183g8kf:aios-call-app-service","sourceUrl":"https://clawhub.ai/kadbbz/aios-call-app-service","homepage":"https://clawhub.ai/kadbbz/skills/aios-call-app-service","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/kadbbz/aios-call-app-service","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/kadbbz/skills/aios-call-app-service","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":63,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"AIOS App Service technical dossier on Xpersona with agent coverage, OPENCLEW support, and live trust metadata."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-10T12:34:22.026Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T12:34:22.026Z","emptyReason":null},"stars":null,"forks":null,"downloads":1431,"packageName":null,"latestVersion":"1.0.3","tractionLabel":"1.4K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T12:34:21.959Z","emptyReason":null},"lastUpdatedAt":"2026-10-10T12:34:22.026Z","lastCrawledAt":"2026-10-10T12:34:21.959Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-11T12:34:21.959Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.3","createdAt":"2026-07-06T08:41:57.722Z","changelog":"- Add explicit separation of `topic_id` (for CLI) and `senderId` (for workspace file isolation) throughout usage instructions. - Require all generated, downloaded, or intermediate files to be stored in the workspace under `<senderId>/generated` or `<senderId>/download`. - Clarify that `senderId` must never be used for CLI `-s` and cannot be reused, queried, or exposed across users. - Update required execution steps and constraints to enforce `senderId` presence when file operations are necessary; halt with explanation if missing. - Expand documentation on session handling and workspace isolation for improved data security and multi-user compatibility.","fileCount":7,"zipByteSize":11028},{"version":"1.0.2","createdAt":"2026-07-06T06:03:18.984Z","changelog":"aios-call-app-service v1.0.2 - 更新会话ID规则描述，将 SessionId 明确为 topic_id，修正相关表述。 - 优化 CLI 调用约束，移除 provider 参数相关内容，明确业务调用链路固定为 HZG。 - 增加关于 jsonBody 保存格式与 CLI body/query 文件参数的详细指引。 - 补充 POST/binding 调用时优先使用 --body-file、GET servercommand 时使用 --query-file 的要求。 - 精简并修正多个流程与约束描述，提升一致性。","fileCount":7,"zipByteSize":10546},{"version":"1.0.1","createdAt":"2026-07-02T10:08:12.164Z","changelog":"- Removed the sample file: skill-card.md. - Updated references/invoke-rules.md (details not specified). - SKILL.md unchanged in content; no functional or usage behavior affected.","fileCount":7,"zipByteSize":10565},{"version":"1.0.0","createdAt":"2026-06-26T03:41:12.748Z","changelog":"aios-call-app-service 1.0.0 - 增加对 CLI 调用通过本地 app invoke socket service 的说明和约束。 - 强化查询与写操作（如创建、修改等）流程分隔，写操作前需生成参数表格并要求用户确认。 - 明确 topic_id 作为唯一合法 SessionId，完善其校验规则。 - 补充禁止手动存储、缓存调用结果及不得在后续复用。 - 细化调用约束、禁止绕过 CLI 或手动启动 serve 服务的行为。 - 移除 skill-card.md 文件，优化文档结构和表述。","fileCount":7,"zipByteSize":10480},{"version":"0.1.3","createdAt":"2026-06-18T11:20:21.973Z","changelog":"aios-call-app-service 0.1.3 - Updated references/invoke-rules.md for additional clarity or rules. - No logic or workflow changes in SKILL.md; only documentation was updated.","fileCount":7,"zipByteSize":10057},{"version":"0.1.2","createdAt":"2026-06-18T11:11:13.333Z","changelog":"- Documentation updated in SKILL.md: no functional or logic changes. - Content remains unchanged except for minor edit or rewrite.","fileCount":7,"zipByteSize":9749},{"version":"0.1.1","createdAt":"2026-06-18T10:28:50.113Z","changelog":"aios-call-app-service v0.1.1 - 补充 SessionId 规则，要求以 s- 开头且后接 30 位数字，不可忽略前缀 - 强化 sessionId 读取路径和校验要求，明确只允许从 topic_id 获取 - 移除 skill-card.md，清理冗余文档 - 优化文档，增强流程规范和约束说明 - 细化“缺参”判断及提示要求","fileCount":7,"zipByteSize":9265},{"version":"0.1.0","createdAt":"2026-06-10T14:03:51.136Z","changelog":"- Updated session ID usage instructions for clarity, specifying that SessionId must be read from context field topic_id. - Improved execution checklist and process description for more precise step-by-step operation. - Clarified reading requirements for ontology and rule files. - Removed redundant or ambiguous content for a more concise skill introduction. - Deleted skill-card.md file.","fileCount":7,"zipByteSize":9118}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17c9yyt2sff7jk8nmf7ptf3r183g8kf:aios-call-app-service","setupComplexity":"low","setupSteps":["Install using `clawhub skill install s17c9yyt2sff7jk8nmf7ptf3r183g8kf:aios-call-app-service` in an isolated environment before connecting it to live workloads.","No published capability contract is available yet, so validate auth and request/response behavior manually.","Review the upstream CLAWHUB listing at https://clawhub.ai/kadbbz/aios-call-app-service before using production credentials."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-kadbbz-aios-call-app-service/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-kadbbz-aios-call-app-service/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-kadbbz-aios-call-app-service/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-kadbbz-aios-call-app-service/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-kadbbz-aios-call-app-service/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-kadbbz-aios-call-app-service/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T14:47:42.510Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-kadbbz-aios-call-app-service/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-kadbbz-aios-call-app-service/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-kadbbz-aios-call-app-service/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-kadbbz-aios-call-app-service/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T12:34:22.026Z","emptyReason":null},"readme":"Skill: AIOS App Service\n\nOwner: kadbbz\n\nSummary: 当请求依赖 AIOS、OpenClaw、Forguncy 等业务系统的实时数据、接口调用或业务操作时，优先使用本技能。先读取 AIOS_ONTOLOGY_DIR 指向的本体目录，再确认应用、命令、参数结构和枚举映射，通过 aios-apps-invoke-cli 发起调用，并以实时返回结果作为后续分析和执行依据。...\n\nTags: latest:1.0.3\n\nVersion history:\n\nv1.0.3 | 2026-07-06T08:41:57.722Z | auto\n\n- Add explicit separation of `topic_id` (for CLI) and `senderId` (for workspace file isolation) throughout usage instructions.\n- Require all generated, downloaded, or intermediate files to be stored in the workspace under `<senderId>/generated` or `<senderId>/download`.\n- Clarify that `senderId` must never be used for CLI `-s` and cannot be reused, queried, or exposed across users.\n- Update required execution steps and constraints to enforce `senderId` presence when file operations are necessary; halt with explanation if missing.\n- Expand documentation on session handling and workspace isolation for improved data security and multi-user compatibility.\n\nv1.0.2 | 2026-07-06T06:03:18.984Z | auto\n\naios-call-app-service v1.0.2\n\n- 更新会话ID规则描述，将 SessionId 明确为 topic_id，修正相关表述。\n- 优化 CLI 调用约束，移除 provider 参数相关内容，明确业务调用链路固定为 HZG。\n- 增加关于 jsonBody 保存格式与 CLI body/query 文件参数的详细指引。\n- 补充 POST/binding 调用时优先使用 --body-file、GET servercommand 时使用 --query-file 的要求。\n- 精简并修正多个流程与约束描述，提升一致性。\n\nv1.0.1 | 2026-07-02T10:08:12.164Z | auto\n\n- Removed the sample file: skill-card.md.\n- Updated references/invoke-rules.md (details not specified).\n- SKILL.md unchanged in content; no functional or usage behavior affected.\n\nv1.0.0 | 2026-06-26T03:41:12.748Z | auto\n\naios-call-app-service 1.0.0\n\n- 增加对 CLI 调用通过本地 app invoke socket service 的说明和约束。\n- 强化查询与写操作（如创建、修改等）流程分隔，写操作前需生成参数表格并要求用户确认。\n- 明确 topic_id 作为唯一合法 SessionId，完善其校验规则。\n- 补充禁止手动存储、缓存调用结果及不得在后续复用。\n- 细化调用约束、禁止绕过 CLI 或手动启动 serve 服务的行为。\n- 移除 skill-card.md 文件，优化文档结构和表述。\n\nv0.1.3 | 2026-06-18T11:20:21.973Z | auto\n\naios-call-app-service 0.1.3\n\n- Updated references/invoke-rules.md for additional clarity or rules.\n- No logic or workflow changes in SKILL.md; only documentation was updated.\n\nv0.1.2 | 2026-06-18T11:11:13.333Z | auto\n\n- Documentation updated in SKILL.md: no functional or logic changes.\n- Content remains unchanged except for minor edit or rewrite.\n\nv0.1.1 | 2026-06-18T10:28:50.113Z | auto\n\naios-call-app-service v0.1.1\n\n- 补充 SessionId 规则，要求以 s- 开头且后接 30 位数字，不可忽略前缀\n- 强化 sessionId 读取路径和校验要求，明确只允许从 topic_id 获取\n- 移除 skill-card.md，清理冗余文档\n- 优化文档，增强流程规范和约束说明\n- 细化“缺参”判断及提示要求\n\nv0.1.0 | 2026-06-10T14:03:51.136Z | auto\n\n- Updated session ID usage instructions for clarity, specifying that SessionId must be read from context field topic_id.\n- Improved execution checklist and process description for more precise step-by-step operation.\n- Clarified reading requirements for ontology and rule files.\n- Removed redundant or ambiguous content for a more concise skill introduction.\n- Deleted skill-card.md file.\n\nv0.0.8 | 2026-06-09T09:49:00.682Z | auto\n\naios-call-app-service v0.0.8\n\n- 增补降歧义规则，`binding` 命令名增加 `CalcBindingDataSource` 为标准选项\n- 技能文档部分优化表述，细化对 SessionId 读取方式的约束\n- 删除多余的 skill-card.md 文件\n- 相关文档细节调整和补充，提高调用一致性\n\nv0.0.7 | 2026-05-29T09:29:19.643Z | auto\n\n- Clarified会话标识读取规则：`SessionId` 需从当前上下文中的 `topic_id` 获取（之前为 `sessionId`），并更新相关描述。\n- 增加强调：禁止从提示词、`chat_id`、`message_id` 或其他字段获取 `SessionId`，只能用 `topic_id`。\n- 移除对 `sessionId` 的所有说明和指引。\n- 删除冗余或不一致的说明，文档更加统一和准确。\n- 移除 skill-card.md 文件。\n\nv0.0.6 | 2026-05-27T08:12:23.051Z | auto\n\n- 禁止缓存或复用本体内容，每次调用前须重新读取 AIOS_ONTOLOGY_DIR 指向的本体目录，确保总是获取最新本体信息。\n- 明确新增流程要求：本体必须作为唯一事实来源，每次调用都要重新加载。\n- 其他执行清单、参数约束和操作流程未有本质变化。\n\nv0.0.5 | 2026-05-27T06:57:41.592Z | auto\n\naios-call-app-service v0.0.5\n\n- CLI 工具名称从 aios-app-invoke-cli 更新为 aios-apps-invoke-cli。\n- 会话 sessionId 读取方式由 untrusted metadata 的 topic_id 改为直接使用会话上下文中的 sessionId。\n- 明确禁止用 topic_id、chat_id、message_id 作为 SessionId 来源。\n- 文档细化对本体文件和 SessionId 使用的要求，强调标准化流程和错误阻断说明。\n- 说明、约束、操作流程等内容均做了用词及细节补充，提升规范性与准确度。\n\nv0.0.4 | 2026-05-27T06:31:54.318Z | auto\n\n**Session ID 兼容 aios-mqtt-channel 方案，增强会话标识准确性：**\n\n- 引入适用于 aios-mqtt-channel 的会话标识规则，CLI 调用时需通过 `untrusted metadata.topic_id` 读取当前会话的 SessionId。\n- 技能文档所有 MessageThreadId 相关内容已替换为 SessionId，并严格限制 SessionId 获取方式，不允许推测或复用其他字段。\n- 明确 CLI `-s` 参数值来源并强化缺参场景下的阻断说明，提升调用链路的确定性和安全性。\n- 细化运行时约束，强调不允许使用 chat_id、message_id 等替代字段，进一步堵死误用路径。\n- 附带同步更新 readme.md 与 references/invoke-rules.md 相关说明。\n\nv0.0.3 | 2026-05-27T03:12:07.260Z | auto\n\n**Summary:** Improved safety checks, clarified执行流程, and tightened constraints for system invocation.\n\n- 引入“最小执行清单”，明确每步前置条件，任何缺口需中止并声明  \n- 明确仅支持 provider=hzg，遇到其他 provider 直接标明不支持  \n- 强化 MessageThreadId 获取约束，禁止臆造或复用  \n- 进一步细化 servercommand/binding 的 body 生成规则，严格按本体和规则文档  \n- 删除和简化部分环境变量、流程描述，使流程更清晰  \n- 新增“降歧义规则”，防止误选本体或误用命令\n\nv0.0.2 | 2026-05-21T01:53:45.894Z | auto\n\naios-call-app-service v0.0.2\n\n- 精简并优化了技能说明文档，明确只允许本体与 CLI 的调用约束。\n- 强化了关于环境变量、请求体字段以及参数名的规范要求。\n- 明确 `CurrentUser`、`MessageThreadId`、`AgentName` 的来源和使用限制，防止臆造值。\n- 输出指引更加细化，要求明确说明本体依赖和调用类型。\n- 参考文档引用逻辑调整，区分基础调用规则和数据处理说明的阅读时机。\n\nv0.0.1 | 2026-05-15T07:35:35.802Z | auto\n\naios-call-app-service v0.0.1\n\n- Initial release of the skill.\n- Provides a standardized method for invoking business system APIs and operations via aios-app-invoke-cli.\n- Prioritizes using real-time business data and actions based on ontology directory (`AIOS_ONTOLOGY_DIR`).\n- Clearly specifies required environment variables for correct operation.\n- Details strict process requirements to ensure accurate, fact-based system calls.\n- Includes usage scenarios, examples, and strict output/constraint guidelines.\n\nArchive index:\n\nArchive v1.0.3: 7 files, 11028 bytes\n\nFiles: agents/openai.yaml (372b), readme.md (1419b), references/data-processing.md (875b), references/invoke-rules.md (12200b), skill-card.md (2260b), SKILL.md (5882b), _meta.json (140b)\n\nFile v1.0.3:SKILL.md\n\n---\r\nname: aios-call-app-service\ndescription: 当请求依赖 AIOS、OpenClaw、Forguncy 等业务系统的实时数据、接口调用或业务操作时，优先使用本技能。先读取 AIOS_ONTOLOGY_DIR 指向的本体目录，再确认应用、命令、参数结构和枚举映射，通过 aios-apps-invoke-cli 发起调用，并以实时返回结果作为后续分析和执行依据。遇到 aios-mqtt-channel 会话时，把当前会话的 SessionId 视为唯一合法会话标识；它来自当前会话上下文中的 `topic_id`。如果调用过程需要在 workspace 保存请求体、下载结果或生成文件，文件隔离标识必须使用当前通道的 `senderId`。\n---\r\n\r\n# 系统调用技能\r\n\r\n当用户的问题不能只靠通用知识回答，而是必须查询、调用或操作业务系统时，应优先使用本技能。\r\n\r\n## 优先触发场景\r\n\r\n- 查询业务系统中的实时数据\r\n- 调用系统接口\r\n- 在系统内执行新增、修改、提交、审核、删除等动作\r\n- 需要基于真实系统返回结果继续分析或决策\r\n\r\n## 必须遵循的流程\r\n\r\n1. 在发起调用前，先读取环境变量 `AIOS_ONTOLOGY_DIR` 指向的本体目录。\r\n  - 禁止缓存、记忆或复用之前读取的本体内容。\r\n  - 每次调用都要重新读取，确保使用最新的本体信息。\r\n2. 以本体为以下信息的唯一事实来源：\r\n  - 应用名\r\n  - 命令名或绑定端点\r\n  - HTTP 方法\r\n  - 请求体结构\r\n  - 枚举值映射\r\n  - 返回字段含义\r\n3. 只允许通过 `aios-apps-invoke-cli` 调用业务系统接口；CLI 会通过本地 app invoke socket service 完成真实调用。\r\n4. 实时调用结果的优先级高于记忆、缓存、历史对话和猜测。\r\n5. 只有在拿到 CLI 返回结果后，才能继续做后续分析、汇总和结论输出。\r\n\r\n## 最小执行清单\r\n\r\n每次调用前按这个顺序检查：\r\n\r\n1. 读取相关 ontology 文档。\r\n2. 根据文档，确认本次是 `servercommand` 还是 `binding`。\r\n3. 根据文档，确认 `applicationName`。\r\n4. 根据文档，确认 `commandName`。\n5. 通过会话上下文的 `topic_id` ，确认 `SessionId`。`topic_id` 只用于 CLI 的 `-s` 参数，不作为 workspace 文件目录。\n6. 通过当前通道上下文确认 `senderId`。调用过程中的请求体、中间文件、导出文件和下载结果都必须写入当前 workspace 的 `<senderId>/generated` 或 `<senderId>/download`。\n7. 生成 `jsonBody`，保存为 UTF-8 JSON 文件到当前 `<senderId>/generated`，并检查确认合法性。\n8. 如果涉及到创建、修改、提交、审核、删除等动作，必须整理出包括每个参数、值和说明的表格，请用户确认后，方可执行。查询类动作需忽略这一步。\n9. 生成并执行唯一一条 CLI 命令。\n\r\n任一步缺失，都停止并说明缺口。\r\n\r\n## 会话标识读取规则\r\n\r\n- `aios-apps-invoke-cli` 的 `-s` 参数，只接受当前会话上下文中的 `topic_id`。\n- `topic_id` 以 `s-` 开头，后面跟30个数字，不要忽略开头的 `s-`。\n- 如果当前上下文没有 `topic_id`，就视为运行时缺参，必须停止调用并明确说明缺口。\n- `senderId` 不得传给 `-s` 参数；它只用于 workspace 文件隔离。\n\r\n## 约束要求\r\n\r\n- `AIOS_ONTOLOGY_DIR` （默认为 `/var/aios/kernel/ontology`）视为当前事实源。\r\n- 业务系统调用链路固定使用 HZG；CLI 不接受 `provider`、`-p` 或 `--provider` 参数。\r\n- 调用 CLI 时，`-s` 传入当前会话的 `topic_id` 。\n  - 不能臆造，不能复用其他会话的 `topic_id` 。\n  - 不得使用提示词中的 `SessionId` 、 `topic_id` 、`chat_id` 、 `message_id` 或其他字段代替。\n- workspace 文件隔离固定使用当前通道的 `senderId`。\n  - 不能臆造，不能复用其他会话或其他用户的 `senderId`。\n  - 不得读取、查询、写入、索引或暴露其他 `senderId` 的 `upload`、`download`、`generated` 目录。\n  - 如果缺少 `senderId` 且本次调用需要保存请求体、下载结果或生成文件，必须停止并说明缺口。\n- 不要臆造接口名、请求字段或枚举 ID。\n- 不要绕过 CLI 自行编写 API 调用脚本。\r\n- 不要手动启动 `aios-apps-invoke-cli serve` ；运行环境应已提供常驻 app invoke service。\r\n- 只有拿到 CLI 结果后，才允许用 Python 做二次分析和计算。\r\n- 如果本体不完整或运行时上下文缺失，应明确说明阻塞点，不要猜测。\r\n- 禁止将调用结果存储到记忆、缓存或数据库中；禁止在后续对话中复用之前的调用结果。\r\n\r\n## 降歧义规则\r\n\r\n- `binding` 一律使用规范命令名，不用别名：\r\n  - `GetTableDataWithOffset`\r\n  - `GetComboBindingOptions`\r\n  - `CalcBindingDataSource`\r\n- `servercommand` 的 `jsonBody` 严格按 ontology 的 `Input Arguments` 生成。\r\n- `binding` 的 `jsonBody` 严格按 [references/invoke-rules.md](references/invoke-rules.md) 中的兼容 schema 生成。\r\n- 调用 `POST` 或 `binding` 时，优先使用 `--body-file <json文件>`；调用 `GET servercommand` 时，优先使用 `--query-file <json文件>`。\r\n- 不要把底层 HTTP 原始 body 直接塞进 `binding` 的 `jsonBody`，除非规则文件明确允许。\r\n- 同一个问题里如果存在多个可疑 ontology 条目，先说明候选项并停止，不要自选一个继续调用。\r\n\r\n## 开始前必须阅读\r\n\r\n- 调用前需要阅读：[references/invoke-rules.md](references/invoke-rules.md)\r\n- 调用后，需要做筛选、聚合、比较、排序或时间分析时，再阅读： [references/data-processing.md](references/data-processing.md)\r\n\r\n## 输出要求\r\n\r\n- 说明本次调用依据了哪些本体文件或条目。\r\n- 说明使用的是 `servercommand` 还是 `binding`。\r\n- 说明任何假设、缺失字段、跳过的数据或不确定性。\n\nFile v1.0.3:readme.md\n\n# aios-call-app-service\r\n\r\n这是一个面向 AIOS / OpenClaw / Forguncy 场景的业务调用技能，用于处理依赖实时业务数据、系统接口、绑定配置或业务动作的请求。\r\n\r\n## 适用场景\r\n\r\n- 查询实时业务数据\r\n- 调用本体中定义的业务命令\r\n- 使用绑定接口读取系统数据\r\n- 需要基于真实系统返回结果继续分析\r\n- 用户要求直接在系统中执行操作\r\n\r\n## 调用原则\r\n\r\n- 先读取 `AIOS_ONTOLOGY_DIR`\n- 再确认应用、命令、参数结构和枚举映射\n- 统一通过 `aios-apps-invoke-cli` 发起调用；CLI 会把请求交给本地 app invoke socket service\n- 业务系统调用链路固定使用 HZG；CLI 不接受 provider 参数\n- 当前会话标识使用 `SessionId`\n- 调用 `aios-apps-invoke-cli` 时：\n  - `-s` 对应 `SessionId`\n  - `POST` 和 `binding` 优先使用 `--body-file`\n  - `GET servercommand` 优先使用 `--query-file`\n- 不要绕过 CLI 直接访问业务系统 HTTP 接口；局域网业务系统访问由 `aios-apps-invoke-cli serve` 进程完成\n- `binding` 参数优先从 `binding-*.md` 的 `CandidatesBindings`、`TableBindings`、`DataSourceBindings` 文档生成兼容 schema\n- `servercommand` 参数严格按 ontology 的 `Input Arguments` 生成\n\r\n## 相关文档\r\n\r\n- 主说明见 `SKILL.md`\r\n- 调用细则见 `references/invoke-rules.md`\r\n- 数据处理规则见 `references/data-processing.md`\n\nFile v1.0.3:_meta.json\n\n{\n  \"ownerId\": \"kn74st1pqb0wkrbhpw4yh0kb2982c201\",\n  \"slug\": \"aios-call-app-service\",\n  \"version\": \"1.0.3\",\n  \"publishedAt\": 1783327317722\n}\n\nFile v1.0.3:references/data-processing.md\n\n# AIOS 数据处理规则\n\n只用于 `aios-apps-invoke-cli` 的真实返回结果。\n\n## 何时用 Python\n\n出现以下任一需求就用 Python：\n\n- 统计、求和、计数、平均、中位数\n- 分组、聚合、排序、排名、去重\n- 跨多条记录筛选\n- 比率、百分比、环比、同比\n- 时间窗口分析\n- 任意派生计算\n\n仅在“读取单条记录的单个简单字段且不做计算/比较”时可直接读值。\n\n## 最低流程\n\n1. 读取 JSON。\n2. 校验结构和必需字段。\n3. 处理 `null`、空字符串、缺失值、异常值。\n4. 数值先校验类型再计算。\n5. 日期数值按 OADate 转换后再分析。\n\nOADate：\n\n- `datetime = 1899-12-30 + OADate`\n\n## 输出必须说明\n\n- 用了哪些字段\n- 做了哪些过滤、分组或计算\n- 实际处理了多少条记录\n- 是否跳过无效数据\n- 是否存在不确定性\n\nFile v1.0.3:references/invoke-rules.md\n\n# AIOS 应用调用细则\r\n\r\n## 命令\r\n\r\n```bash\naios-apps-invoke-cli servercommand <applicationName> <commandName> POST --body-file <jsonFile> -s <SessionId>\naios-apps-invoke-cli servercommand <applicationName> <commandName> GET --query-file <jsonFile> -s <SessionId>\naios-apps-invoke-cli binding <applicationName> <commandName> <method> --body-file <jsonFile> -s <SessionId>\naios-apps-invoke-cli service-status\naios-apps-invoke-cli status\n```\n\r\n全局命令不可用时，可使用 `npx aios-apps-invoke-cli ...`。\r\n\r\n## 必守规则\n\n- `-s` 来自当前 `SessionId` （上下文中的 `topic_id` ），仅用于业务系统会话调用，不参与 workspace 文件隔离\n- 业务系统调用链路固定使用 HZG；CLI 不接受 `provider`、`-p` 或 `--provider` 参数\n- `servercommand` 和 `binding` 是 CLI client 命令，会通过本地 app invoke socket service 执行真实业务系统调用\n- 不要手动启动 `serve` 或 `serve-mqtt`，也不要绕过 CLI 直接拼业务系统 HTTP 请求\n- `service-status` 用于检查 socket service 配置；`status` 会读取完整配置视图，可能要求兼容 MQTT 环境变量存在\r\n- 缺任意运行时参数都不要猜，直接停止并说明缺口\r\n- `applicationName` 取自当前使用的 ontology 所在应用目录名；如果存在多个候选应用目录，直接停止并说明冲突\r\n- 业务命令用 `servercommand`\r\n- 内置数据服务用 `binding`\r\n- 本体给了绑定端点时，优先按本体调用：\r\n- `GetTableDataWithOffset -> TableBinding`\r\n- `GetComboBindingOptions -> CandidatesBinding`\r\n- `CalcBindingDataSource -> DataSourceBindings`\r\n- `binding` 一律使用规范命令名，不使用 `TableBinding`、`CandidatesBinding` 等别名作为 CLI 入参\r\n- 带 `[HOB_EXCLUDE]` 的命令一律不调用\r\n\r\n## 请求体规则\r\n\r\n- `servercommand`：`commandName` 用本体命令名，`method` 用本体 `verb`，`jsonBody` 严格按 `ServerCommand 兼容 schema` 章节处理\n- `servercommand` 不新增字段，不遗漏字段，不修改字段类型\n- CLI 请求体只发送当前链路实际需要的 OpenClaw 会话字段：`SessionId`\n- `POST servercommand` 和 `binding` 优先把 `jsonBody` 写入 UTF-8 JSON 文件，并用 `--body-file <jsonFile>` 传入\n- `GET servercommand` 优先把查询参数 JSON 写入 UTF-8 JSON 文件，并用 `--query-file <jsonFile>` 传入；该 JSON 必须是字符串值对象\n- `binding`：优先根据 ontology 中的 `*-bindings.md` 文档生成兼容 schema，不要手写或反推底层 HTTP 原始 body\n- `DataSourceBindings` 一律用 `binding` 命令，`commandName` 固定为 `CalcBindingDataSource`\r\n- 如果 `binding` 和 `servercommand` 都能勉强解释当前需求，优先按 ontology 明确标注的端点类型执行；ontology 没标明时停止，不要猜\r\n\r\n### Binding 文档取数规则\r\n\r\n- `TableBinding` 优先读取形如 `xxx-bindings.md` 的 `TableBindings` 段落\r\n- `CandidatesBinding` 优先读取形如 `xxx-bindings.md` 的 `CandidatesBindings` 段落\r\n- `TableBinding` 从文档中提取：\r\n  - `page-name`\r\n  - `view-name`\r\n  - `list-view-location`\r\n  - `table-name`\r\n  - 列表格中的每一行 `column-name + guid`\r\n- 如果 `TableBindings` 文档缺少上述任一必需字段，不要猜，直接停止并说明缺口\r\n- `CandidatesBinding` 从文档中提取：\r\n  - `page-name`\r\n  - `TableName`\r\n  - `column-type=ID` 对应的 `ColumnName`\r\n  - `column-type=ID` 对应的 `GUID`\r\n  - `column-type=text` 对应的 `ColumnName`\r\n  - `column-type=text` 对应的 `GUID`\r\n- 如果 `CandidatesBindings` 文档缺少 `ID` 列或 `text` 列，不要猜，直接停止并说明缺口\r\n- `TableBinding` 和 `CandidatesBinding` 各自只读取自己所属段落，不要跨段落拼字段\r\n- `DataSourceBindings` 优先读取形如 `binding-xxx.md` 的 `DataSourceBindings` 段落\r\n- `DataSourceBindings` 从文档中提取：\r\n  - `page-name`\r\n  - `cell-location`\r\n  - `table-name`\r\n  - `Columns` 表中的每一行 `display-name + table-name + column-name`\r\n  - `Query Params` 表中的每一行 `table-name + column-name`\r\n- 如果 `DataSourceBindings` 存在多组候选，且当前上下文无法唯一定位具体数据源，直接停止并说明冲突\r\n\r\n### ServerCommand 兼容 schema\r\n\r\n根据 `argument-type` 不同，参数的组织方法也不同。\r\n\r\n- `basic` ：基础类型，包含布尔值、字符串、时间日期、整数、小数等\r\n  - 布尔值： `true`、1 均被视为 true；`false`、0 则被视为 false\r\n  - 时间日期：OADate类型，计算方法： `datetime = 1899-12-30 + OADate`\r\n- `object` ：对象类型，需要根据 `argument-sharp` 逐层完成该参数对象的组装工作\r\n- `array` ：数组类型，直接组装数组，数组中的元素需要根据 `argument-sharp` 逐层完成该参数数组的组装工作\r\n- `changeset` ：变更集类型，需要组装一个包含有三个属性（`AddRows`、`EditRows` 和`DeleteRows`）的变更集对象。这种做法通常用于包含有从表的业务实体更新或创建操作中，如`包含有订单明细行的订单修改`操作。\r\n  - `AddRows` 属性：需要被添加的子表实体数组，需要根据 `argument-sharp` 逐层完成该属性数组的组装工作\r\n  - `EditRows` 属性：需要被修改的子表实体数组，需要根据 `argument-sharp` 逐层完成该属性数组的组装工作\r\n  - `DeleteRows` 属性：需要被删除的子表实体数组，需要根据 `argument-sharp` 逐层完成该属性数组的组装工作\r\n\r\n如某 ServerCommand 的参数中 `Details` 的 `argument-type` 是 `changeset` 。当需要为 `Details` 添加一个从表实体，该实体的 `SKU` 属性值为 `bn`、`Amount` 属性值为 10 时，就该如此组织请求参数：`{\"OrderName\":\"New-Name\",\"Details\":{\"AddRows\":[{\"SKU\":\"bn\",\"Amount\":10}],\"EditRows\":[],\"DeleteRows\":[]}}` 。\r\n\r\n> 兼容性：如果按 `object` 类型处理出错，可以换用 `array` 类型或 `changeset` 类型重试。\r\n\r\n### TableBinding 兼容 schema\r\n\r\n- `GetTableDataWithOffset` 的 `jsonBody` 优先生成如下兼容结构：\r\n\r\n```json\r\n{\r\n  \"columns\": [\r\n    {\r\n      \"column-name\": \"编号\",\r\n      \"guid\": \"3261feec-650a-421c-b05f-7ea8b1bed3e5\"\r\n    }\r\n  ],\r\n  \"table-name\": \"物品表\",\r\n  \"view-name\": \"物品_库存物品信息表格\",\r\n  \"list-view-location\": \"物品_库存|物品信息表格\",\r\n  \"page-name\": \"物品_库存\",\r\n  \"target-page\": 1,\r\n  \"page-limit-row-count\": 0\r\n}\r\n```\r\n\r\n- 生成规则：\r\n  - `columns <- bindings 文档表格中的 column-name + guid`\r\n  - `table-name <- table-name`\r\n  - `view-name <- view-name`\r\n  - `list-view-location <- list-view-location`\r\n  - `page-name <- page-name`\r\n  - `target-page <- 1`\r\n  - `page-limit-row-count <- 0`\r\n- 如果已经拿到真实分页参数，可覆盖：\r\n  - `target-page`\r\n  - `page-limit-row-count`\r\n- `columns` 保持 ontology 文档中的原顺序，不要重排\r\n\r\n### TableBinding 到底层 HTTP body 的映射说明\r\n\r\n- 兼容 schema 会由下游 SDK / 代理转换为底层请求体\r\n- 等价映射关系如下：\r\n  - `bindingInfos <- columns[].guid`\r\n  - `currentRowInfo.currentTable <- table-name`\r\n  - `currentRowInfo.viewname <- view-name`\r\n  - `currentRowInfo.listviewLocation <- list-view-location`\r\n  - `offsetConditionInfo.targetPage <- target-page`\r\n  - `offsetConditionInfo.pageLimitRowCount <- page-limit-row-count`\r\n  - `pageName <- page-name`\r\n- 以下字段由下游固定补齐，不需要在 ontology 文档中查找，也不要手工追加到兼容 schema：\r\n  - `demandRowCount=0`\r\n  - `currentDataLength=0`\r\n  - `needRowVersion=true`\r\n  - `editorDataInfos=null`\r\n  - `sortCommandID=null`\r\n  - `orderByInfo=null`\r\n  - `columnFilterQueries=null`\r\n  - `totalRowBindingInfos=[]`\r\n\r\n### CandidatesBinding 兼容 schema\r\n\r\n- `GetComboBindingOptions` 的 `jsonBody` 优先生成如下兼容结构：\r\n\r\n```json\r\n{\r\n  \"id-column\": {\r\n    \"column-name\": \"ID\",\r\n    \"guid\": \"9c641cb4-c3a3-44ea-ad5e-495c9a5d3544\"\r\n  },\r\n  \"text-column\": {\r\n    \"column-name\": \"编号\",\r\n    \"guid\": \"41baffe3-3982-4237-bf62-b8d95ba76218\"\r\n  },\r\n  \"table-name\": \"物品表\",\r\n  \"page-name\": \"采购单填写\"\r\n}\r\n```\r\n\r\n- 生成规则：\r\n  - `id-column.column-name <- column-type=ID` 对应的 `ColumnName`\r\n  - `id-column.guid <- column-type=ID` 对应的 `GUID`\r\n  - `text-column.column-name <- column-type=text` 对应的 `ColumnName`\r\n  - `text-column.guid <- column-type=text` 对应的 `GUID`\r\n  - `table-name <- TableName`\r\n  - `page-name <- page-name`\r\n- 如果 `CandidatesBindings` 里存在多组候选绑定，且当前上下文无法唯一定位具体组件，直接停止并说明冲突\r\n\r\n### CandidatesBinding 到底层 HTTP body 的映射说明\r\n\r\n- 兼容 schema 会由下游 SDK / 代理转换为底层请求体\r\n- 等价映射关系如下：\r\n  - `tableName <- table-name`\r\n  - `valueColumnBindingInfo <- id-column.guid`\r\n  - `displayColumnBindingInfo <- text-column.guid`\r\n  - `pageName <- page-name`\r\n- 以下字段由下游固定补齐，不需要在 ontology 文档中查找，也不要手工追加到兼容 schema：\r\n  - `itemQuery=null`\r\n  - `offset=null`\r\n  - `cacheSettingID=null`\r\n\r\n### DataSourceBinding 兼容 schema\r\n\r\n- `CalcBindingDataSource` 的 `jsonBody` 优先生成如下兼容结构：\r\n\r\n```json\r\n{\r\n  \"page-name\": \"出入库单填写\",\r\n  \"cell-location\": \"1,0\",\r\n  \"table-name\": \"出入库类型表\",\r\n  \"columns\": [\r\n    {\r\n      \"response-name\": \"value\",\r\n      \"table-name\": \"出入库类型表\",\r\n      \"column-name\": \"ID\"\r\n    },\r\n    {\r\n      \"response-name\": \"label\",\r\n      \"table-name\": \"出入库类型表\",\r\n      \"column-name\": \"名称\"\r\n    }\r\n  ],\r\n  \"query-params\": [\r\n    {\r\n      \"table-name\": \"出入库类型表\",\r\n      \"column-name\": \"出入库标记\"\r\n    }\r\n  ],\r\n  \"params\": {\r\n    \"出入库类型表.出入库标记\": \"入库\"\r\n  }\r\n}\r\n```\r\n\r\n- 生成规则：\r\n  - `page-name <- binding 文档 Information.page-name`\r\n  - `cell-location <- DataSourceBindings 段落中的 cell-location`\r\n  - `table-name <- DataSourceBindings 段落中的 table-name`\r\n  - `columns[].response-name <- Columns 表中的 display-name`\r\n  - `columns[].table-name <- Columns 表中的 table-name`\r\n  - `columns[].column-name <- Columns 表中的 column-name`\r\n  - `query-params[].table-name <- Query Params 表中的 table-name`\r\n  - `query-params[].column-name <- Query Params 表中的 column-name`\r\n  - `params` 只有在已知真实筛选值时生成，key 固定为 `query-params` 的 `table-name.column-name`\r\n- 如果 `Query Params` 非空但当前问题没有提供或无法推导真实参数值，不要调用，直接说明缺少哪个 `table-name.column-name`\r\n- 如果 `Query Params` 为“无”，不要生成 `params`\r\n\r\n### DataSourceBinding 到底层 HTTP body 的映射说明\r\n\r\n- 兼容 schema 会由下游 SDK / 代理转换为底层请求体\r\n- 下游会先通过 `GetMetadata2` 使用 `page-name + cell-location` 定位运行态数据源 GUID，再调用 `CalcBindingDataSource`\r\n- 等价映射关系如下：\r\n  - `CommandId <- GetMetadata2 运行态数据源 GUID`\r\n  - `Params <- query-params 顺序匹配运行态 Params，取值来自 jsonBody.params`\r\n  - 返回行中的 `response-name` 会被映射为对应 `column-name`\r\n- 不要直接调用 `GetMetadata2` 或手工拼接底层 `CommandId`\r\n\r\n## 额外规则\r\n\r\n- 如果 bindings 文档已经给出真实 `column-name`，必须保留真实列名，不要用 `guid` 顶替\r\n- 只有在文档没有列名、但调试链路必须先跑通时，才允许临时用 `guid` 兼作 `column-name`，并且必须明确说明这是降级方案\r\n- 生成 CLI 命令前，先在答案里或推理里完成这 4 个定值：`applicationName`、`commandName`、`SessionId`、`jsonFile`\n- 任一值不能唯一确定时，不要继续拼命令\r\n- 需要底层 ID 时，先用本体定义的查询或绑定把展示文本解析成真实 ID，再发正式请求\r\n- JSON 字符串统一双引号；shell 转义按当前 shell 处理\r\n- 遇到 `invalid JSON param for body` 时，先检查 JSON 和引号\r\n- `ID` 类字段（如 `ID`、`订单ID`、`ContactId` 等），默认按 `int` 类型处理\r\n- 不要只看字段名猜含义\n\nFile v1.0.3:skill-card.md\n\n## Description:\n\nAIOS App Service helps agents read AIOS ontology, invoke AIOS, OpenClaw, and Forguncy business interfaces through a controlled CLI workflow, and continue analysis from live system results.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[kadbbz](https://clawhub.ai/user/kadbbz)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and business-system agents use this skill when a request requires live AIOS, OpenClaw, or Forguncy data, business interface calls, binding reads, or user-confirmed system actions.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill can be invoked implicitly to read live business-system data.\n\nMitigation: Install only where implicit live business-system reads are acceptable and review deployment permissions before release.\n\nRisk: The skill can support mutating business actions such as creating, editing, submitting, approving, or deleting records.\n\nMitigation: Require independent user confirmation and backend authorization controls before any mutating action is executed.\n\nRisk: The artifact includes an unpinned npx fallback for a CLI used in real business operations.\n\nMitigation: Provide a pinned, trusted aios-apps-invoke-cli installation instead of downloading an unversioned package at runtime.\n\n## Reference(s):\n\n- [AIOS App Service on ClawHub](https://clawhub.ai/kadbbz/skills/aios-call-app-service)\n- [AIOS application invocation rules](references/invoke-rules.md)\n- [AIOS data processing rules](references/data-processing.md)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Shell commands, Configuration, Guidance]\n\n**Output Format:** [Markdown with inline shell commands and structured explanations]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May include ontology references, command type, assumptions, missing fields, skipped data, and uncertainty notes.]\n\n## Skill Version(s):\n\n1.0.3 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v1.0.3:agents/openai.yaml\n\ninterface:\n  display_name: \"AIOS App Service\"\n  short_description: \"Read ontology first, then invoke AIOS app services\"\n  default_prompt: \"Use $aios-call-app-service to read /var/aios/data/ontology, invoke AIOS application interfaces, continue from live results, and keep any workspace files inside the current senderId folder.\"\n\npolicy:\n  allow_implicit_invocation: true\n\nArchive v1.0.2: 7 files, 10546 bytes\n\nFiles: agents/openai.yaml (311b), readme.md (1419b), references/data-processing.md (875b), references/invoke-rules.md (12129b), skill-card.md (2109b), SKILL.md (4962b), _meta.json (140b)\n\nFile v1.0.2:SKILL.md\n\n---\r\nname: aios-call-app-service\r\ndescription: 当请求依赖 AIOS、OpenClaw、Forguncy 等业务系统的实时数据、接口调用或业务操作时，优先使用本技能。先读取 AIOS_ONTOLOGY_DIR 指向的本体目录，再确认应用、命令、参数结构和枚举映射，通过 aios-apps-invoke-cli 发起调用，并以实时返回结果作为后续分析和执行依据。遇到 aios-mqtt-channel 会话时，把当前会话的 SessionId 视为唯一合法会话标识；它来自当前会话上下文中的 `topic_id`。\r\n---\r\n\r\n# 系统调用技能\r\n\r\n当用户的问题不能只靠通用知识回答，而是必须查询、调用或操作业务系统时，应优先使用本技能。\r\n\r\n## 优先触发场景\r\n\r\n- 查询业务系统中的实时数据\r\n- 调用系统接口\r\n- 在系统内执行新增、修改、提交、审核、删除等动作\r\n- 需要基于真实系统返回结果继续分析或决策\r\n\r\n## 必须遵循的流程\r\n\r\n1. 在发起调用前，先读取环境变量 `AIOS_ONTOLOGY_DIR` 指向的本体目录。\r\n  - 禁止缓存、记忆或复用之前读取的本体内容。\r\n  - 每次调用都要重新读取，确保使用最新的本体信息。\r\n2. 以本体为以下信息的唯一事实来源：\r\n  - 应用名\r\n  - 命令名或绑定端点\r\n  - HTTP 方法\r\n  - 请求体结构\r\n  - 枚举值映射\r\n  - 返回字段含义\r\n3. 只允许通过 `aios-apps-invoke-cli` 调用业务系统接口；CLI 会通过本地 app invoke socket service 完成真实调用。\r\n4. 实时调用结果的优先级高于记忆、缓存、历史对话和猜测。\r\n5. 只有在拿到 CLI 返回结果后，才能继续做后续分析、汇总和结论输出。\r\n\r\n## 最小执行清单\r\n\r\n每次调用前按这个顺序检查：\r\n\r\n1. 读取相关 ontology 文档。\r\n2. 根据文档，确认本次是 `servercommand` 还是 `binding`。\r\n3. 根据文档，确认 `applicationName`。\r\n4. 根据文档，确认 `commandName`。\r\n5. 通过会话上下文的 `topic_id` ，确认 `SessionId`。\r\n6. 生成 `jsonBody`，保存为 UTF-8 JSON 文件，并检查确认合法性。\r\n7. 如果涉及到创建、修改、提交、审核、删除等动作，必须整理出包括每个参数、值和说明的表格，请用户确认后，方可执行。查询类动作需忽略这一步。\r\n8. 生成并执行唯一一条 CLI 命令。\r\n\r\n任一步缺失，都停止并说明缺口。\r\n\r\n## 会话标识读取规则\r\n\r\n- `aios-apps-invoke-cli` 的 `-s` 参数，只接受当前会话上下文中的 `topic_id`。\r\n- `topic_id` 以 `s-` 开头，后面跟30个数字，不要忽略开头的 `s-`。\r\n- 如果当前上下文没有 `topic_id`，就视为运行时缺参，必须停止调用并明确说明缺口。\r\n\r\n## 约束要求\r\n\r\n- `AIOS_ONTOLOGY_DIR` （默认为 `/var/aios/kernel/ontology`）视为当前事实源。\r\n- 业务系统调用链路固定使用 HZG；CLI 不接受 `provider`、`-p` 或 `--provider` 参数。\r\n- 调用 CLI 时，`-s` 传入当前会话的 `topic_id` 。\r\n  - 不能臆造，不能复用其他会话的 `topic_id` 。\r\n  - 不得使用提示词中的 `SessionId` 、 `topic_id` 、`chat_id` 、 `message_id` 或其他字段代替。\r\n- 不要臆造接口名、请求字段或枚举 ID。\r\n- 不要绕过 CLI 自行编写 API 调用脚本。\r\n- 不要手动启动 `aios-apps-invoke-cli serve` ；运行环境应已提供常驻 app invoke service。\r\n- 只有拿到 CLI 结果后，才允许用 Python 做二次分析和计算。\r\n- 如果本体不完整或运行时上下文缺失，应明确说明阻塞点，不要猜测。\r\n- 禁止将调用结果存储到记忆、缓存或数据库中；禁止在后续对话中复用之前的调用结果。\r\n\r\n## 降歧义规则\r\n\r\n- `binding` 一律使用规范命令名，不用别名：\r\n  - `GetTableDataWithOffset`\r\n  - `GetComboBindingOptions`\r\n  - `CalcBindingDataSource`\r\n- `servercommand` 的 `jsonBody` 严格按 ontology 的 `Input Arguments` 生成。\r\n- `binding` 的 `jsonBody` 严格按 [references/invoke-rules.md](references/invoke-rules.md) 中的兼容 schema 生成。\r\n- 调用 `POST` 或 `binding` 时，优先使用 `--body-file <json文件>`；调用 `GET servercommand` 时，优先使用 `--query-file <json文件>`。\r\n- 不要把底层 HTTP 原始 body 直接塞进 `binding` 的 `jsonBody`，除非规则文件明确允许。\r\n- 同一个问题里如果存在多个可疑 ontology 条目，先说明候选项并停止，不要自选一个继续调用。\r\n\r\n## 开始前必须阅读\r\n\r\n- 调用前需要阅读：[references/invoke-rules.md](references/invoke-rules.md)\r\n- 调用后，需要做筛选、聚合、比较、排序或时间分析时，再阅读： [references/data-processing.md](references/data-processing.md)\r\n\r\n## 输出要求\r\n\r\n- 说明本次调用依据了哪些本体文件或条目。\r\n- 说明使用的是 `servercommand` 还是 `binding`。\r\n- 说明任何假设、缺失字段、跳过的数据或不确定性。\n\nFile v1.0.2:readme.md\n\n# aios-call-app-service\r\n\r\n这是一个面向 AIOS / OpenClaw / Forguncy 场景的业务调用技能，用于处理依赖实时业务数据、系统接口、绑定配置或业务动作的请求。\r\n\r\n## 适用场景\r\n\r\n- 查询实时业务数据\r\n- 调用本体中定义的业务命令\r\n- 使用绑定接口读取系统数据\r\n- 需要基于真实系统返回结果继续分析\r\n- 用户要求直接在系统中执行操作\r\n\r\n## 调用原则\r\n\r\n- 先读取 `AIOS_ONTOLOGY_DIR`\n- 再确认应用、命令、参数结构和枚举映射\n- 统一通过 `aios-apps-invoke-cli` 发起调用；CLI 会把请求交给本地 app invoke socket service\n- 业务系统调用链路固定使用 HZG；CLI 不接受 provider 参数\n- 当前会话标识使用 `SessionId`\n- 调用 `aios-apps-invoke-cli` 时：\n  - `-s` 对应 `SessionId`\n  - `POST` 和 `binding` 优先使用 `--body-file`\n  - `GET servercommand` 优先使用 `--query-file`\n- 不要绕过 CLI 直接访问业务系统 HTTP 接口；局域网业务系统访问由 `aios-apps-invoke-cli serve` 进程完成\n- `binding` 参数优先从 `binding-*.md` 的 `CandidatesBindings`、`TableBindings`、`DataSourceBindings` 文档生成兼容 schema\n- `servercommand` 参数严格按 ontology 的 `Input Arguments` 生成\n\r\n## 相关文档\r\n\r\n- 主说明见 `SKILL.md`\r\n- 调用细则见 `references/invoke-rules.md`\r\n- 数据处理规则见 `references/data-processing.md`\n\nFile v1.0.2:_meta.json\n\n{\n  \"ownerId\": \"kn74st1pqb0wkrbhpw4yh0kb2982c201\",\n  \"slug\": \"aios-call-app-service\",\n  \"version\": \"1.0.2\",\n  \"publishedAt\": 1783317798984\n}\n\nFile v1.0.2:references/data-processing.md\n\n# AIOS 数据处理规则\n\n只用于 `aios-apps-invoke-cli` 的真实返回结果。\n\n## 何时用 Python\n\n出现以下任一需求就用 Python：\n\n- 统计、求和、计数、平均、中位数\n- 分组、聚合、排序、排名、去重\n- 跨多条记录筛选\n- 比率、百分比、环比、同比\n- 时间窗口分析\n- 任意派生计算\n\n仅在“读取单条记录的单个简单字段且不做计算/比较”时可直接读值。\n\n## 最低流程\n\n1. 读取 JSON。\n2. 校验结构和必需字段。\n3. 处理 `null`、空字符串、缺失值、异常值。\n4. 数值先校验类型再计算。\n5. 日期数值按 OADate 转换后再分析。\n\nOADate：\n\n- `datetime = 1899-12-30 + OADate`\n\n## 输出必须说明\n\n- 用了哪些字段\n- 做了哪些过滤、分组或计算\n- 实际处理了多少条记录\n- 是否跳过无效数据\n- 是否存在不确定性\n\nFile v1.0.2:references/invoke-rules.md\n\n# AIOS 应用调用细则\r\n\r\n## 命令\r\n\r\n```bash\naios-apps-invoke-cli servercommand <applicationName> <commandName> POST --body-file <jsonFile> -s <SessionId>\naios-apps-invoke-cli servercommand <applicationName> <commandName> GET --query-file <jsonFile> -s <SessionId>\naios-apps-invoke-cli binding <applicationName> <commandName> <method> --body-file <jsonFile> -s <SessionId>\naios-apps-invoke-cli service-status\naios-apps-invoke-cli status\n```\n\r\n全局命令不可用时，可使用 `npx aios-apps-invoke-cli ...`。\r\n\r\n## 必守规则\n\n- `-s` 来自当前 `SessionId` （上下文中的 `topic_id` ）\n- 业务系统调用链路固定使用 HZG；CLI 不接受 `provider`、`-p` 或 `--provider` 参数\n- `servercommand` 和 `binding` 是 CLI client 命令，会通过本地 app invoke socket service 执行真实业务系统调用\n- 不要手动启动 `serve` 或 `serve-mqtt`，也不要绕过 CLI 直接拼业务系统 HTTP 请求\n- `service-status` 用于检查 socket service 配置；`status` 会读取完整配置视图，可能要求兼容 MQTT 环境变量存在\r\n- 缺任意运行时参数都不要猜，直接停止并说明缺口\r\n- `applicationName` 取自当前使用的 ontology 所在应用目录名；如果存在多个候选应用目录，直接停止并说明冲突\r\n- 业务命令用 `servercommand`\r\n- 内置数据服务用 `binding`\r\n- 本体给了绑定端点时，优先按本体调用：\r\n- `GetTableDataWithOffset -> TableBinding`\r\n- `GetComboBindingOptions -> CandidatesBinding`\r\n- `CalcBindingDataSource -> DataSourceBindings`\r\n- `binding` 一律使用规范命令名，不使用 `TableBinding`、`CandidatesBinding` 等别名作为 CLI 入参\r\n- 带 `[HOB_EXCLUDE]` 的命令一律不调用\r\n\r\n## 请求体规则\r\n\r\n- `servercommand`：`commandName` 用本体命令名，`method` 用本体 `verb`，`jsonBody` 严格按 `ServerCommand 兼容 schema` 章节处理\n- `servercommand` 不新增字段，不遗漏字段，不修改字段类型\n- CLI 请求体只发送当前链路实际需要的 OpenClaw 会话字段：`SessionId`\n- `POST servercommand` 和 `binding` 优先把 `jsonBody` 写入 UTF-8 JSON 文件，并用 `--body-file <jsonFile>` 传入\n- `GET servercommand` 优先把查询参数 JSON 写入 UTF-8 JSON 文件，并用 `--query-file <jsonFile>` 传入；该 JSON 必须是字符串值对象\n- `binding`：优先根据 ontology 中的 `*-bindings.md` 文档生成兼容 schema，不要手写或反推底层 HTTP 原始 body\n- `DataSourceBindings` 一律用 `binding` 命令，`commandName` 固定为 `CalcBindingDataSource`\r\n- 如果 `binding` 和 `servercommand` 都能勉强解释当前需求，优先按 ontology 明确标注的端点类型执行；ontology 没标明时停止，不要猜\r\n\r\n### Binding 文档取数规则\r\n\r\n- `TableBinding` 优先读取形如 `xxx-bindings.md` 的 `TableBindings` 段落\r\n- `CandidatesBinding` 优先读取形如 `xxx-bindings.md` 的 `CandidatesBindings` 段落\r\n- `TableBinding` 从文档中提取：\r\n  - `page-name`\r\n  - `view-name`\r\n  - `list-view-location`\r\n  - `table-name`\r\n  - 列表格中的每一行 `column-name + guid`\r\n- 如果 `TableBindings` 文档缺少上述任一必需字段，不要猜，直接停止并说明缺口\r\n- `CandidatesBinding` 从文档中提取：\r\n  - `page-name`\r\n  - `TableName`\r\n  - `column-type=ID` 对应的 `ColumnName`\r\n  - `column-type=ID` 对应的 `GUID`\r\n  - `column-type=text` 对应的 `ColumnName`\r\n  - `column-type=text` 对应的 `GUID`\r\n- 如果 `CandidatesBindings` 文档缺少 `ID` 列或 `text` 列，不要猜，直接停止并说明缺口\r\n- `TableBinding` 和 `CandidatesBinding` 各自只读取自己所属段落，不要跨段落拼字段\r\n- `DataSourceBindings` 优先读取形如 `binding-xxx.md` 的 `DataSourceBindings` 段落\r\n- `DataSourceBindings` 从文档中提取：\r\n  - `page-name`\r\n  - `cell-location`\r\n  - `table-name`\r\n  - `Columns` 表中的每一行 `display-name + table-name + column-name`\r\n  - `Query Params` 表中的每一行 `table-name + column-name`\r\n- 如果 `DataSourceBindings` 存在多组候选，且当前上下文无法唯一定位具体数据源，直接停止并说明冲突\r\n\r\n### ServerCommand 兼容 schema\r\n\r\n根据 `argument-type` 不同，参数的组织方法也不同。\r\n\r\n- `basic` ：基础类型，包含布尔值、字符串、时间日期、整数、小数等\r\n  - 布尔值： `true`、1 均被视为 true；`false`、0 则被视为 false\r\n  - 时间日期：OADate类型，计算方法： `datetime = 1899-12-30 + OADate`\r\n- `object` ：对象类型，需要根据 `argument-sharp` 逐层完成该参数对象的组装工作\r\n- `array` ：数组类型，直接组装数组，数组中的元素需要根据 `argument-sharp` 逐层完成该参数数组的组装工作\r\n- `changeset` ：变更集类型，需要组装一个包含有三个属性（`AddRows`、`EditRows` 和`DeleteRows`）的变更集对象。这种做法通常用于包含有从表的业务实体更新或创建操作中，如`包含有订单明细行的订单修改`操作。\r\n  - `AddRows` 属性：需要被添加的子表实体数组，需要根据 `argument-sharp` 逐层完成该属性数组的组装工作\r\n  - `EditRows` 属性：需要被修改的子表实体数组，需要根据 `argument-sharp` 逐层完成该属性数组的组装工作\r\n  - `DeleteRows` 属性：需要被删除的子表实体数组，需要根据 `argument-sharp` 逐层完成该属性数组的组装工作\r\n\r\n如某 ServerCommand 的参数中 `Details` 的 `argument-type` 是 `changeset` 。当需要为 `Details` 添加一个从表实体，该实体的 `SKU` 属性值为 `bn`、`Amount` 属性值为 10 时，就该如此组织请求参数：`{\"OrderName\":\"New-Name\",\"Details\":{\"AddRows\":[{\"SKU\":\"bn\",\"Amount\":10}],\"EditRows\":[],\"DeleteRows\":[]}}` 。\r\n\r\n> 兼容性：如果按 `object` 类型处理出错，可以换用 `array` 类型或 `changeset` 类型重试。\r\n\r\n### TableBinding 兼容 schema\r\n\r\n- `GetTableDataWithOffset` 的 `jsonBody` 优先生成如下兼容结构：\r\n\r\n```json\r\n{\r\n  \"columns\": [\r\n    {\r\n      \"column-name\": \"编号\",\r\n      \"guid\": \"3261feec-650a-421c-b05f-7ea8b1bed3e5\"\r\n    }\r\n  ],\r\n  \"table-name\": \"物品表\",\r\n  \"view-name\": \"物品_库存物品信息表格\",\r\n  \"list-view-location\": \"物品_库存|物品信息表格\",\r\n  \"page-name\": \"物品_库存\",\r\n  \"target-page\": 1,\r\n  \"page-limit-row-count\": 0\r\n}\r\n```\r\n\r\n- 生成规则：\r\n  - `columns <- bindings 文档表格中的 column-name + guid`\r\n  - `table-name <- table-name`\r\n  - `view-name <- view-name`\r\n  - `list-view-location <- list-view-location`\r\n  - `page-name <- page-name`\r\n  - `target-page <- 1`\r\n  - `page-limit-row-count <- 0`\r\n- 如果已经拿到真实分页参数，可覆盖：\r\n  - `target-page`\r\n  - `page-limit-row-count`\r\n- `columns` 保持 ontology 文档中的原顺序，不要重排\r\n\r\n### TableBinding 到底层 HTTP body 的映射说明\r\n\r\n- 兼容 schema 会由下游 SDK / 代理转换为底层请求体\r\n- 等价映射关系如下：\r\n  - `bindingInfos <- columns[].guid`\r\n  - `currentRowInfo.currentTable <- table-name`\r\n  - `currentRowInfo.viewname <- view-name`\r\n  - `currentRowInfo.listviewLocation <- list-view-location`\r\n  - `offsetConditionInfo.targetPage <- target-page`\r\n  - `offsetConditionInfo.pageLimitRowCount <- page-limit-row-count`\r\n  - `pageName <- page-name`\r\n- 以下字段由下游固定补齐，不需要在 ontology 文档中查找，也不要手工追加到兼容 schema：\r\n  - `demandRowCount=0`\r\n  - `currentDataLength=0`\r\n  - `needRowVersion=true`\r\n  - `editorDataInfos=null`\r\n  - `sortCommandID=null`\r\n  - `orderByInfo=null`\r\n  - `columnFilterQueries=null`\r\n  - `totalRowBindingInfos=[]`\r\n\r\n### CandidatesBinding 兼容 schema\r\n\r\n- `GetComboBindingOptions` 的 `jsonBody` 优先生成如下兼容结构：\r\n\r\n```json\r\n{\r\n  \"id-column\": {\r\n    \"column-name\": \"ID\",\r\n    \"guid\": \"9c641cb4-c3a3-44ea-ad5e-495c9a5d3544\"\r\n  },\r\n  \"text-column\": {\r\n    \"column-name\": \"编号\",\r\n    \"guid\": \"41baffe3-3982-4237-bf62-b8d95ba76218\"\r\n  },\r\n  \"table-name\": \"物品表\",\r\n  \"page-name\": \"采购单填写\"\r\n}\r\n```\r\n\r\n- 生成规则：\r\n  - `id-column.column-name <- column-type=ID` 对应的 `ColumnName`\r\n  - `id-column.guid <- column-type=ID` 对应的 `GUID`\r\n  - `text-column.column-name <- column-type=text` 对应的 `ColumnName`\r\n  - `text-column.guid <- column-type=text` 对应的 `GUID`\r\n  - `table-name <- TableName`\r\n  - `page-name <- page-name`\r\n- 如果 `CandidatesBindings` 里存在多组候选绑定，且当前上下文无法唯一定位具体组件，直接停止并说明冲突\r\n\r\n### CandidatesBinding 到底层 HTTP body 的映射说明\r\n\r\n- 兼容 schema 会由下游 SDK / 代理转换为底层请求体\r\n- 等价映射关系如下：\r\n  - `tableName <- table-name`\r\n  - `valueColumnBindingInfo <- id-column.guid`\r\n  - `displayColumnBindingInfo <- text-column.guid`\r\n  - `pageName <- page-name`\r\n- 以下字段由下游固定补齐，不需要在 ontology 文档中查找，也不要手工追加到兼容 schema：\r\n  - `itemQuery=null`\r\n  - `offset=null`\r\n  - `cacheSettingID=null`\r\n\r\n### DataSourceBinding 兼容 schema\r\n\r\n- `CalcBindingDataSource` 的 `jsonBody` 优先生成如下兼容结构：\r\n\r\n```json\r\n{\r\n  \"page-name\": \"出入库单填写\",\r\n  \"cell-location\": \"1,0\",\r\n  \"table-name\": \"出入库类型表\",\r\n  \"columns\": [\r\n    {\r\n      \"response-name\": \"value\",\r\n      \"table-name\": \"出入库类型表\",\r\n      \"column-name\": \"ID\"\r\n    },\r\n    {\r\n      \"response-name\": \"label\",\r\n      \"table-name\": \"出入库类型表\",\r\n      \"column-name\": \"名称\"\r\n    }\r\n  ],\r\n  \"query-params\": [\r\n    {\r\n      \"table-name\": \"出入库类型表\",\r\n      \"column-name\": \"出入库标记\"\r\n    }\r\n  ],\r\n  \"params\": {\r\n    \"出入库类型表.出入库标记\": \"入库\"\r\n  }\r\n}\r\n```\r\n\r\n- 生成规则：\r\n  - `page-name <- binding 文档 Information.page-name`\r\n  - `cell-location <- DataSourceBindings 段落中的 cell-location`\r\n  - `table-name <- DataSourceBindings 段落中的 table-name`\r\n  - `columns[].response-name <- Columns 表中的 display-name`\r\n  - `columns[].table-name <- Columns 表中的 table-name`\r\n  - `columns[].column-name <- Columns 表中的 column-name`\r\n  - `query-params[].table-name <- Query Params 表中的 table-name`\r\n  - `query-params[].column-name <- Query Params 表中的 column-name`\r\n  - `params` 只有在已知真实筛选值时生成，key 固定为 `query-params` 的 `table-name.column-name`\r\n- 如果 `Query Params` 非空但当前问题没有提供或无法推导真实参数值，不要调用，直接说明缺少哪个 `table-name.column-name`\r\n- 如果 `Query Params` 为“无”，不要生成 `params`\r\n\r\n### DataSourceBinding 到底层 HTTP body 的映射说明\r\n\r\n- 兼容 schema 会由下游 SDK / 代理转换为底层请求体\r\n- 下游会先通过 `GetMetadata2` 使用 `page-name + cell-location` 定位运行态数据源 GUID，再调用 `CalcBindingDataSource`\r\n- 等价映射关系如下：\r\n  - `CommandId <- GetMetadata2 运行态数据源 GUID`\r\n  - `Params <- query-params 顺序匹配运行态 Params，取值来自 jsonBody.params`\r\n  - 返回行中的 `response-name` 会被映射为对应 `column-name`\r\n- 不要直接调用 `GetMetadata2` 或手工拼接底层 `CommandId`\r\n\r\n## 额外规则\r\n\r\n- 如果 bindings 文档已经给出真实 `column-name`，必须保留真实列名，不要用 `guid` 顶替\r\n- 只有在文档没有列名、但调试链路必须先跑通时，才允许临时用 `guid` 兼作 `column-name`，并且必须明确说明这是降级方案\r\n- 生成 CLI 命令前，先在答案里或推理里完成这 4 个定值：`applicationName`、`commandName`、`SessionId`、`jsonFile`\n- 任一值不能唯一确定时，不要继续拼命令\r\n- 需要底层 ID 时，先用本体定义的查询或绑定把展示文本解析成真实 ID，再发正式请求\r\n- JSON 字符串统一双引号；shell 转义按当前 shell 处理\r\n- 遇到 `invalid JSON param for body` 时，先检查 JSON 和引号\r\n- `ID` 类字段（如 `ID`、`订单ID`、`ContactId` 等），默认按 `int` 类型处理\r\n- 不要只看字段名猜含义\n\nFile v1.0.2:skill-card.md\n\n## Description: <br>\nHelps an agent handle requests that depend on live AIOS, OpenClaw, or Forguncy business data by reading the ontology, preparing validated CLI calls, and continuing from real system responses. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[kadbbz](https://clawhub.ai/user/kadbbz) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and business operations agents use this skill to query live AIOS, OpenClaw, or Forguncy data, invoke ontology-defined commands or bindings, and perform business actions through the approved local CLI workflow. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill can make live AIOS, OpenClaw, or Forguncy business-system calls, so returned data may be sensitive. <br>\nMitigation: Install only where agents are authorized to use the local CLI for those systems, and treat query results as sensitive. <br>\nRisk: Create, modify, submit, audit, or delete operations can change business-system state. <br>\nMitigation: Review the confirmation table and approve the exact parameters before any state-changing call is executed. <br>\n\n\n## Reference(s): <br>\n- [AIOS application invocation rules](references/invoke-rules.md) <br>\n- [AIOS data processing rules](references/data-processing.md) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance] <br>\n**Output Format:** [Markdown with CLI commands, parameter summaries, assumptions, and analysis notes] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May include JSON body or query file guidance for AIOS CLI calls and post-call data analysis summaries.] <br>\n\n## Skill Version(s): <br>\n1.0.2 (source: server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v1.0.2:agents/openai.yaml\n\ninterface:\n  display_name: \"AIOS App Service\"\n  short_description: \"Read ontology first, then invoke AIOS app services\"\n  default_prompt: \"Use $aios-call-app-service to read /var/aios/data/ontology, invoke AIOS application interfaces, and continue from live results.\"\n\npolicy:\n  allow_implicit_invocation: true\n\nArchive v1.0.1: 7 files, 10565 bytes\n\nFiles: agents/openai.yaml (311b), readme.md (1305b), references/data-processing.md (875b), references/invoke-rules.md (11837b), skill-card.md (2557b), SKILL.md (4888b), _meta.json (140b)\n\nFile v1.0.1:SKILL.md\n\n---\r\nname: aios-call-app-service\r\ndescription: 当请求依赖 AIOS、OpenClaw、Forguncy 等业务系统的实时数据、接口调用或业务操作时，优先使用本技能。先读取 AIOS_ONTOLOGY_DIR 指向的本体目录，再确认应用、命令、参数结构和枚举映射，通过 aios-apps-invoke-cli 发起调用，并以实时返回结果作为后续分析和执行依据。遇到 aios-mqtt-channel 会话时，把当前会话的 SessionId 视为唯一合法会话标识；它来自当前会话上下文中的 `sessionId`。\r\n---\r\n\r\n# 系统调用技能\r\n\r\n当用户的问题不能只靠通用知识回答，而是必须查询、调用或操作业务系统时，应优先使用本技能。\r\n\r\n## 优先触发场景\r\n\r\n- 查询业务系统中的实时数据\r\n- 调用系统接口\r\n- 在系统内执行新增、修改、提交、审核、删除等动作\r\n- 需要基于真实系统返回结果继续分析或决策\r\n\r\n## 必须遵循的流程\r\n\r\n1. 在发起调用前，先读取环境变量 `AIOS_ONTOLOGY_DIR` 指向的本体目录。\r\n  - 禁止缓存、记忆或复用之前读取的本体内容。\r\n  - 每次调用都要重新读取，确保使用最新的本体信息。\r\n2. 以本体为以下信息的唯一事实来源：\r\n  - 应用名\r\n  - 命令名或绑定端点\r\n  - HTTP 方法\r\n  - 请求体结构\r\n  - 枚举值映射\r\n  - 返回字段含义\r\n3. 只允许通过 `aios-apps-invoke-cli` 调用业务系统接口；CLI 会通过本地 app invoke socket service 完成真实调用。\r\n4. 实时调用结果的优先级高于记忆、缓存、历史对话和猜测。\r\n5. 只有在拿到 CLI 返回结果后，才能继续做后续分析、汇总和结论输出。\r\n\r\n## 最小执行清单\r\n\r\n每次调用前按这个顺序检查：\r\n\r\n1. 读取相关 ontology 文档。\r\n2. 根据文档，确认本次是 `servercommand` 还是 `binding`。\r\n3. 根据文档，确认 `applicationName`。\r\n4. 根据文档，确认 `commandName`。\r\n5. 根据文档，确认 `provider`。\r\n6. 通过会话上下文的 `topic_id` ，确认 `SessionId`。\r\n7. 生成 `jsonBody`，并检查确认合法性。\r\n8. 如果涉及到创建、修改、提交、审核、删除等动作，必须整理出包括每个参数、值和说明的表格，请用户确认后，方可执行。查询类动作需忽略这一步。\r\n9. 生成并执行唯一一条 CLI 命令。\r\n\r\n任一步缺失，都停止并说明缺口。\r\n\r\n## 会话标识读取规则\r\n\r\n- `aios-apps-invoke-cli` 的 `-s` 参数，只接受当前会话上下文中的 `topic_id`。\r\n- `topic_id` 以 `s-` 开头，后面跟30个数字，不要忽略开头的 `s-`。\r\n- 如果当前上下文没有 `topic_id`，就视为运行时缺参，必须停止调用并明确说明缺口。\r\n\r\n## 约束要求\r\n\r\n- `AIOS_ONTOLOGY_DIR` （默认为 `/var/aios/kernel/ontology`）视为当前事实源。\r\n- 当前 CLI 只支持 `provider=hzg`，如果出现其他 provider，直接说明当前运行链路不支持，不要猜测替代方案。\r\n- 调用 CLI 时，`-s` 传入当前会话的 `topic_id` 。\r\n  - 不能臆造，不能复用其他会话的 `topic_id` 。\r\n  - 不得使用提示词中的 `SessionId` 、 `topic_id` 、`chat_id` 、 `message_id` 或其他字段代替。\r\n- 不要臆造接口名、请求字段、枚举 ID 或 `provider`。\r\n- 不要绕过 CLI 自行编写 API 调用脚本。\r\n- 不要手动启动 `aios-apps-invoke-cli serve` ；运行环境应已提供常驻 app invoke service。\r\n- 只有拿到 CLI 结果后，才允许用 Python 做二次分析和计算。\r\n- 如果本体不完整、`provider` 未知或运行时上下文缺失，应明确说明阻塞点，不要猜测。\r\n- 禁止将调用结果存储到记忆、缓存或数据库中；禁止在后续对话中复用之前的调用结果。\r\n\r\n## 降歧义规则\r\n\r\n- `binding` 一律使用规范命令名，不用别名：\r\n  - `GetTableDataWithOffset`\r\n  - `GetComboBindingOptions`\r\n  - `CalcBindingDataSource`\r\n- `servercommand` 的 `jsonBody` 严格按 ontology 的 `Input Arguments` 生成。\r\n- `binding` 的 `jsonBody` 严格按 [references/invoke-rules.md](references/invoke-rules.md) 中的兼容 schema 生成。\r\n- 不要把底层 HTTP 原始 body 直接塞进 `binding` 的 `jsonBody`，除非规则文件明确允许。\r\n- 同一个问题里如果存在多个可疑 ontology 条目，先说明候选项并停止，不要自选一个继续调用。\r\n\r\n## 开始前必须阅读\r\n\r\n- 调用前需要阅读：[references/invoke-rules.md](references/invoke-rules.md)\r\n- 调用后，需要做筛选、聚合、比较、排序或时间分析时，再阅读： [references/data-processing.md](references/data-processing.md)\r\n\r\n## 输出要求\r\n\r\n- 说明本次调用依据了哪些本体文件或条目。\r\n- 说明使用的是 `servercommand` 还是 `binding`。\r\n- 说明任何假设、缺失字段、跳过的数据或不确定性。\n\nFile v1.0.1:readme.md\n\n# aios-call-app-service\r\n\r\n这是一个面向 AIOS / OpenClaw / Forguncy 场景的业务调用技能，用于处理依赖实时业务数据、系统接口、绑定配置或业务动作的请求。\r\n\r\n## 适用场景\r\n\r\n- 查询实时业务数据\r\n- 调用本体中定义的业务命令\r\n- 使用绑定接口读取系统数据\r\n- 需要基于真实系统返回结果继续分析\r\n- 用户要求直接在系统中执行操作\r\n\r\n## 调用原则\r\n\r\n- 先读取 `AIOS_ONTOLOGY_DIR`\n- 再确认应用、命令、参数结构和枚举映射\n- 统一通过 `aios-apps-invoke-cli` 发起调用；CLI 会把请求交给本地 app invoke socket service\n- 当前 CLI 只支持 `provider=hzg`\n- 当前会话标识使用 `SessionId`\n- 调用 `aios-apps-invoke-cli` 时：\n  - `-p` 对应 `provider`\n  - `-s` 对应 `SessionId`\n- 不要绕过 CLI 直接访问业务系统 HTTP 接口；局域网业务系统访问由 `aios-apps-invoke-cli serve` 进程完成\n- `binding` 参数优先从 `binding-*.md` 的 `CandidatesBindings`、`TableBindings`、`DataSourceBindings` 文档生成兼容 schema\n- `servercommand` 参数严格按 ontology 的 `Input Arguments` 生成\n\r\n## 相关文档\r\n\r\n- 主说明见 `SKILL.md`\r\n- 调用细则见 `references/invoke-rules.md`\r\n- 数据处理规则见 `references/data-processing.md`\n\nFile v1.0.1:_meta.json\n\n{\n  \"ownerId\": \"kn74st1pqb0wkrbhpw4yh0kb2982c201\",\n  \"slug\": \"aios-call-app-service\",\n  \"version\": \"1.0.1\",\n  \"publishedAt\": 1782986892164\n}\n\nFile v1.0.1:references/data-processing.md\n\n# AIOS 数据处理规则\n\n只用于 `aios-apps-invoke-cli` 的真实返回结果。\n\n## 何时用 Python\n\n出现以下任一需求就用 Python：\n\n- 统计、求和、计数、平均、中位数\n- 分组、聚合、排序、排名、去重\n- 跨多条记录筛选\n- 比率、百分比、环比、同比\n- 时间窗口分析\n- 任意派生计算\n\n仅在“读取单条记录的单个简单字段且不做计算/比较”时可直接读值。\n\n## 最低流程\n\n1. 读取 JSON。\n2. 校验结构和必需字段。\n3. 处理 `null`、空字符串、缺失值、异常值。\n4. 数值先校验类型再计算。\n5. 日期数值按 OADate 转换后再分析。\n\nOADate：\n\n- `datetime = 1899-12-30 + OADate`\n\n## 输出必须说明\n\n- 用了哪些字段\n- 做了哪些过滤、分组或计算\n- 实际处理了多少条记录\n- 是否跳过无效数据\n- 是否存在不确定性\n\nFile v1.0.1:references/invoke-rules.md\n\n# AIOS 应用调用细则\r\n\r\n## 命令\r\n\r\n```bash\r\naios-apps-invoke-cli servercommand <applicationName> <commandName> <method> [jsonBody] -p <provider> -s <SessionId>\r\naios-apps-invoke-cli binding <applicationName> <commandName> <method> <jsonBody> -p <provider> -s <SessionId>\r\naios-apps-invoke-cli service-status\r\naios-apps-invoke-cli status\r\n```\r\n\r\n全局命令不可用时，可使用 `npx aios-apps-invoke-cli ...`。\r\n\r\n## 必守规则\r\n\r\n- `-p/-s` 分别来自 `provider`、当前 `SessionId` （上下文中的 `topic_id` ）\r\n- 当前 CLI 只支持 `provider=hzg`\r\n- 如果 ontology、用户或上下文指向其他 provider，直接停止并说明当前运行链路不支持\r\n- `servercommand` 和 `binding` 是 CLI client 命令，会通过本地 app invoke socket service 执行真实业务系统调用\r\n- 不要手动启动 `serve` 或 `serve-mqtt`，也不要绕过 CLI 直接拼业务系统 HTTP 请求\r\n- `service-status` 用于检查 socket service 配置；`status` 会读取完整配置视图，可能要求兼容 MQTT 环境变量存在\r\n- 缺任意运行时参数都不要猜，直接停止并说明缺口\r\n- `applicationName` 取自当前使用的 ontology 所在应用目录名；如果存在多个候选应用目录，直接停止并说明冲突\r\n- 业务命令用 `servercommand`\r\n- 内置数据服务用 `binding`\r\n- 本体给了绑定端点时，优先按本体调用：\r\n- `GetTableDataWithOffset -> TableBinding`\r\n- `GetComboBindingOptions -> CandidatesBinding`\r\n- `CalcBindingDataSource -> DataSourceBindings`\r\n- `binding` 一律使用规范命令名，不使用 `TableBinding`、`CandidatesBinding` 等别名作为 CLI 入参\r\n- 带 `[HOB_EXCLUDE]` 的命令一律不调用\r\n\r\n## 请求体规则\r\n\r\n- `servercommand`：`commandName` 用本体命令名，`method` 用本体 `verb`，`jsonBody` 严格按 `ServerCommand 兼容 schema` 章节处理\r\n- `servercommand` 不新增字段，不遗漏字段，不修改字段类型\r\n- CLI 请求体只发送当前链路实际需要的 OpenClaw 会话字段：`SessionId`\r\n- `binding`：优先根据 ontology 中的 `*-bindings.md` 文档生成兼容 schema，不要手写或反推底层 HTTP 原始 body\r\n- `DataSourceBindings` 一律用 `binding` 命令，`commandName` 固定为 `CalcBindingDataSource`\r\n- 如果 `binding` 和 `servercommand` 都能勉强解释当前需求，优先按 ontology 明确标注的端点类型执行；ontology 没标明时停止，不要猜\r\n\r\n### Binding 文档取数规则\r\n\r\n- `TableBinding` 优先读取形如 `xxx-bindings.md` 的 `TableBindings` 段落\r\n- `CandidatesBinding` 优先读取形如 `xxx-bindings.md` 的 `CandidatesBindings` 段落\r\n- `TableBinding` 从文档中提取：\r\n  - `page-name`\r\n  - `view-name`\r\n  - `list-view-location`\r\n  - `table-name`\r\n  - 列表格中的每一行 `column-name + guid`\r\n- 如果 `TableBindings` 文档缺少上述任一必需字段，不要猜，直接停止并说明缺口\r\n- `CandidatesBinding` 从文档中提取：\r\n  - `page-name`\r\n  - `TableName`\r\n  - `column-type=ID` 对应的 `ColumnName`\r\n  - `column-type=ID` 对应的 `GUID`\r\n  - `column-type=text` 对应的 `ColumnName`\r\n  - `column-type=text` 对应的 `GUID`\r\n- 如果 `CandidatesBindings` 文档缺少 `ID` 列或 `text` 列，不要猜，直接停止并说明缺口\r\n- `TableBinding` 和 `CandidatesBinding` 各自只读取自己所属段落，不要跨段落拼字段\r\n- `DataSourceBindings` 优先读取形如 `binding-xxx.md` 的 `DataSourceBindings` 段落\r\n- `DataSourceBindings` 从文档中提取：\r\n  - `page-name`\r\n  - `cell-location`\r\n  - `table-name`\r\n  - `Columns` 表中的每一行 `display-name + table-name + column-name`\r\n  - `Query Params` 表中的每一行 `table-name + column-name`\r\n- 如果 `DataSourceBindings` 存在多组候选，且当前上下文无法唯一定位具体数据源，直接停止并说明冲突\r\n\r\n### ServerCommand 兼容 schema\r\n\r\n根据 `argument-type` 不同，参数的组织方法也不同。\r\n\r\n- `basic` ：基础类型，包含布尔值、字符串、时间日期、整数、小数等\r\n  - 布尔值： `true`、1 均被视为 true；`false`、0 则被视为 false\r\n  - 时间日期：OADate类型，计算方法： `datetime = 1899-12-30 + OADate`\r\n- `object` ：对象类型，需要根据 `argument-sharp` 逐层完成该参数对象的组装工作\r\n- `array` ：数组类型，直接组装数组，数组中的元素需要根据 `argument-sharp` 逐层完成该参数数组的组装工作\r\n- `changeset` ：变更集类型，需要组装一个包含有三个属性（`AddRows`、`EditRows` 和`DeleteRows`）的变更集对象。这种做法通常用于包含有从表的业务实体更新或创建操作中，如`包含有订单明细行的订单修改`操作。\r\n  - `AddRows` 属性：需要被添加的子表实体数组，需要根据 `argument-sharp` 逐层完成该属性数组的组装工作\r\n  - `EditRows` 属性：需要被修改的子表实体数组，需要根据 `argument-sharp` 逐层完成该属性数组的组装工作\r\n  - `DeleteRows` 属性：需要被删除的子表实体数组，需要根据 `argument-sharp` 逐层完成该属性数组的组装工作\r\n\r\n如某 ServerCommand 的参数中 `Details` 的 `argument-type` 是 `changeset` 。当需要为 `Details` 添加一个从表实体，该实体的 `SKU` 属性值为 `bn`、`Amount` 属性值为 10 时，就该如此组织请求参数：`{\"OrderName\":\"New-Name\",\"Details\":{\"AddRows\":[{\"SKU\":\"bn\",\"Amount\":10}],\"EditRows\":[],\"DeleteRows\":[]}}` 。\r\n\r\n> 兼容性：如果按 `object` 类型处理出错，可以换用 `array` 类型或 `changeset` 类型重试。\r\n\r\n### TableBinding 兼容 schema\r\n\r\n- `GetTableDataWithOffset` 的 `jsonBody` 优先生成如下兼容结构：\r\n\r\n```json\r\n{\r\n  \"columns\": [\r\n    {\r\n      \"column-name\": \"编号\",\r\n      \"guid\": \"3261feec-650a-421c-b05f-7ea8b1bed3e5\"\r\n    }\r\n  ],\r\n  \"table-name\": \"物品表\",\r\n  \"view-name\": \"物品_库存物品信息表格\",\r\n  \"list-view-location\": \"物品_库存|物品信息表格\",\r\n  \"page-name\": \"物品_库存\",\r\n  \"target-page\": 1,\r\n  \"page-limit-row-count\": 0\r\n}\r\n```\r\n\r\n- 生成规则：\r\n  - `columns <- bindings 文档表格中的 column-name + guid`\r\n  - `table-name <- table-name`\r\n  - `view-name <- view-name`\r\n  - `list-view-location <- list-view-location`\r\n  - `page-name <- page-name`\r\n  - `target-page <- 1`\r\n  - `page-limit-row-count <- 0`\r\n- 如果已经拿到真实分页参数，可覆盖：\r\n  - `target-page`\r\n  - `page-limit-row-count`\r\n- `columns` 保持 ontology 文档中的原顺序，不要重排\r\n\r\n### TableBinding 到底层 HTTP body 的映射说明\r\n\r\n- 兼容 schema 会由下游 SDK / 代理转换为底层请求体\r\n- 等价映射关系如下：\r\n  - `bindingInfos <- columns[].guid`\r\n  - `currentRowInfo.currentTable <- table-name`\r\n  - `currentRowInfo.viewname <- view-name`\r\n  - `currentRowInfo.listviewLocation <- list-view-location`\r\n  - `offsetConditionInfo.targetPage <- target-page`\r\n  - `offsetConditionInfo.pageLimitRowCount <- page-limit-row-count`\r\n  - `pageName <- page-name`\r\n- 以下字段由下游固定补齐，不需要在 ontology 文档中查找，也不要手工追加到兼容 schema：\r\n  - `demandRowCount=0`\r\n  - `currentDataLength=0`\r\n  - `needRowVersion=true`\r\n  - `editorDataInfos=null`\r\n  - `sortCommandID=null`\r\n  - `orderByInfo=null`\r\n  - `columnFilterQueries=null`\r\n  - `totalRowBindingInfos=[]`\r\n\r\n### CandidatesBinding 兼容 schema\r\n\r\n- `GetComboBindingOptions` 的 `jsonBody` 优先生成如下兼容结构：\r\n\r\n```json\r\n{\r\n  \"id-column\": {\r\n    \"column-name\": \"ID\",\r\n    \"guid\": \"9c641cb4-c3a3-44ea-ad5e-495c9a5d3544\"\r\n  },\r\n  \"text-column\": {\r\n    \"column-name\": \"编号\",\r\n    \"guid\": \"41baffe3-3982-4237-bf62-b8d95ba76218\"\r\n  },\r\n  \"table-name\": \"物品表\",\r\n  \"page-name\": \"采购单填写\"\r\n}\r\n```\r\n\r\n- 生成规则：\r\n  - `id-column.column-name <- column-type=ID` 对应的 `ColumnName`\r\n  - `id-column.guid <- column-type=ID` 对应的 `GUID`\r\n  - `text-column.column-name <- column-type=text` 对应的 `ColumnName`\r\n  - `text-column.guid <- column-type=text` 对应的 `GUID`\r\n  - `table-name <- TableName`\r\n  - `page-name <- page-name`\r\n- 如果 `CandidatesBindings` 里存在多组候选绑定，且当前上下文无法唯一定位具体组件，直接停止并说明冲突\r\n\r\n### CandidatesBinding 到底层 HTTP body 的映射说明\r\n\r\n- 兼容 schema 会由下游 SDK / 代理转换为底层请求体\r\n- 等价映射关系如下：\r\n  - `tableName <- table-name`\r\n  - `valueColumnBindingInfo <- id-column.guid`\r\n  - `displayColumnBindingInfo <- text-column.guid`\r\n  - `pageName <- page-name`\r\n- 以下字段由下游固定补齐，不需要在 ontology 文档中查找，也不要手工追加到兼容 schema：\r\n  - `itemQuery=null`\r\n  - `offset=null`\r\n  - `cacheSettingID=null`\r\n\r\n### DataSourceBinding 兼容 schema\r\n\r\n- `CalcBindingDataSource` 的 `jsonBody` 优先生成如下兼容结构：\r\n\r\n```json\r\n{\r\n  \"page-name\": \"出入库单填写\",\r\n  \"cell-location\": \"1,0\",\r\n  \"table-name\": \"出入库类型表\",\r\n  \"columns\": [\r\n    {\r\n      \"response-name\": \"value\",\r\n      \"table-name\": \"出入库类型表\",\r\n      \"column-name\": \"ID\"\r\n    },\r\n    {\r\n      \"response-name\": \"label\",\r\n      \"table-name\": \"出入库类型表\",\r\n      \"column-name\": \"名称\"\r\n    }\r\n  ],\r\n  \"query-params\": [\r\n    {\r\n      \"table-name\": \"出入库类型表\",\r\n      \"column-name\": \"出入库标记\"\r\n    }\r\n  ],\r\n  \"params\": {\r\n    \"出入库类型表.出入库标记\": \"入库\"\r\n  }\r\n}\r\n```\r\n\r\n- 生成规则：\r\n  - `page-name <- binding 文档 Information.page-name`\r\n  - `cell-location <- DataSourceBindings 段落中的 cell-location`\r\n  - `table-name <- DataSourceBindings 段落中的 table-name`\r\n  - `columns[].response-name <- Columns 表中的 display-name`\r\n  - `columns[].table-name <- Columns 表中的 table-name`\r\n  - `columns[].column-name <- Columns 表中的 column-name`\r\n  - `query-params[].table-name <- Query Params 表中的 table-name`\r\n  - `query-params[].column-name <- Query Params 表中的 column-name`\r\n  - `params` 只有在已知真实筛选值时生成，key 固定为 `query-params` 的 `table-name.column-name`\r\n- 如果 `Query Params` 非空但当前问题没有提供或无法推导真实参数值，不要调用，直接说明缺少哪个 `table-name.column-name`\r\n- 如果 `Query Params` 为“无”，不要生成 `params`\r\n\r\n### DataSourceBinding 到底层 HTTP body 的映射说明\r\n\r\n- 兼容 schema 会由下游 SDK / 代理转换为底层请求体\r\n- 下游会先通过 `GetMetadata2` 使用 `page-name + cell-location` 定位运行态数据源 GUID，再调用 `CalcBindingDataSource`\r\n- 等价映射关系如下：\r\n  - `CommandId <- GetMetadata2 运行态数据源 GUID`\r\n  - `Params <- query-params 顺序匹配运行态 Params，取值来自 jsonBody.params`\r\n  - 返回行中的 `response-name` 会被映射为对应 `column-name`\r\n- 不要直接调用 `GetMetadata2` 或手工拼接底层 `CommandId`\r\n\r\n## 额外规则\r\n\r\n- 如果 bindings 文档已经给出真实 `column-name`，必须保留真实列名，不要用 `guid` 顶替\r\n- 只有在文档没有列名、但调试链路必须先跑通时，才允许临时用 `guid` 兼作 `column-name`，并且必须明确说明这是降级方案\r\n- 生成 CLI 命令前，先在答案里或推理里完成这 4 个定值：`applicationName`、`commandName`、`provider`、`SessionId`\r\n- 任一值不能唯一确定时，不要继续拼命令\r\n- 需要底层 ID 时，先用本体定义的查询或绑定把展示文本解析成真实 ID，再发正式请求\r\n- JSON 字符串统一双引号；shell 转义按当前 shell 处理\r\n- 遇到 `invalid JSON param for body` 时，先检查 JSON 和引号\r\n- `ID` 类字段（如 `ID`、`订单ID`、`ContactId` 等），默认按 `int` 类型处理\r\n- 不要只看字段名猜含义\n\nFile v1.0.1:skill-card.md\n\n## Description: <br>\nInvokes AIOS, OpenClaw, and Forguncy business-system services after reading ontology definitions and validating command parameters. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[kadbbz](https://clawhub.ai/user/kadbbz) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and operators use this skill to query live business data, invoke ontology-defined commands or bindings, and continue analysis from real system results. It is intended for environments with authorized AIOS, OpenClaw, or Forguncy access. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill is designed for live business-system calls, including operations that can change production data. <br>\nMitigation: Install only where AIOS, OpenClaw, or Forguncy access is appropriate, ensure the local CLI enforces authorization, and require explicit confirmation before any production-changing operation. <br>\nRisk: Session-identifier ambiguity could prevent correct execution or route a request through the wrong session context. <br>\nMitigation: Before use, resolve whether sessionId or topic_id is the canonical session field and stop when the required session value is missing or mismatched. <br>\nRisk: Broad implicit activation can increase the chance of unintended live system invocation. <br>\nMitigation: Consider disabling implicit invocation or requiring explicit user confirmation before running the invocation CLI. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/kadbbz/skills/aios-call-app-service) <br>\n- [AIOS application invocation rules](artifact/references/invoke-rules.md) <br>\n- [AIOS data processing rules](artifact/references/data-processing.md) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Text, Markdown, Shell commands, Guidance] <br>\n**Output Format:** [Markdown with inline shell commands and concise result summaries] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May include confirmation tables for write operations and notes on ontology sources, assumptions, missing fields, and processed records.] <br>\n\n## Skill Version(s): <br>\n1.0.1 (source: server evidence release.version) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v1.0.1:agents/openai.yaml\n\ninterface:\n  display_name: \"AIOS App Service\"\n  short_description: \"Read ontology first, then invoke AIOS app services\"\n  default_prompt: \"Use $aios-call-app-service to read /var/aios/data/ontology, invoke AIOS application interfaces, and continue from live results.\"\n\npolicy:\n  allow_implicit_invocation: true\n\nArchive v1.0.0: 7 files, 10480 bytes\n\nFiles: agents/openai.yaml (311b), readme.md (1305b), references/data-processing.md (875b), references/invoke-rules.md (11784b), skill-card.md (2381b), SKILL.md (4888b), _meta.json (140b)\n\nFile v1.0.0:SKILL.md\n\n---\r\nname: aios-call-app-service\r\ndescription: 当请求依赖 AIOS、OpenClaw、Forguncy 等业务系统的实时数据、接口调用或业务操作时，优先使用本技能。先读取 AIOS_ONTOLOGY_DIR 指向的本体目录，再确认应用、命令、参数结构和枚举映射，通过 aios-apps-invoke-cli 发起调用，并以实时返回结果作为后续分析和执行依据。遇到 aios-mqtt-channel 会话时，把当前会话的 SessionId 视为唯一合法会话标识；它来自当前会话上下文中的 `sessionId`。\r\n---\r\n\r\n# 系统调用技能\r\n\r\n当用户的问题不能只靠通用知识回答，而是必须查询、调用或操作业务系统时，应优先使用本技能。\r\n\r\n## 优先触发场景\r\n\r\n- 查询业务系统中的实时数据\r\n- 调用系统接口\r\n- 在系统内执行新增、修改、提交、审核、删除等动作\r\n- 需要基于真实系统返回结果继续分析或决策\r\n\r\n## 必须遵循的流程\r\n\r\n1. 在发起调用前，先读取环境变量 `AIOS_ONTOLOGY_DIR` 指向的本体目录。\r\n  - 禁止缓存、记忆或复用之前读取的本体内容。\r\n  - 每次调用都要重新读取，确保使用最新的本体信息。\r\n2. 以本体为以下信息的唯一事实来源：\r\n  - 应用名\r\n  - 命令名或绑定端点\r\n  - HTTP 方法\r\n  - 请求体结构\r\n  - 枚举值映射\r\n  - 返回字段含义\r\n3. 只允许通过 `aios-apps-invoke-cli` 调用业务系统接口；CLI 会通过本地 app invoke socket service 完成真实调用。\r\n4. 实时调用结果的优先级高于记忆、缓存、历史对话和猜测。\r\n5. 只有在拿到 CLI 返回结果后，才能继续做后续分析、汇总和结论输出。\r\n\r\n## 最小执行清单\r\n\r\n每次调用前按这个顺序检查：\r\n\r\n1. 读取相关 ontology 文档。\r\n2. 根据文档，确认本次是 `servercommand` 还是 `binding`。\r\n3. 根据文档，确认 `applicationName`。\r\n4. 根据文档，确认 `commandName`。\r\n5. 根据文档，确认 `provider`。\r\n6. 通过会话上下文的 `topic_id` ，确认 `SessionId`。\r\n7. 生成 `jsonBody`，并检查确认合法性。\r\n8. 如果涉及到创建、修改、提交、审核、删除等动作，必须整理出包括每个参数、值和说明的表格，请用户确认后，方可执行。查询类动作需忽略这一步。\r\n9. 生成并执行唯一一条 CLI 命令。\r\n\r\n任一步缺失，都停止并说明缺口。\r\n\r\n## 会话标识读取规则\r\n\r\n- `aios-apps-invoke-cli` 的 `-s` 参数，只接受当前会话上下文中的 `topic_id`。\r\n- `topic_id` 以 `s-` 开头，后面跟30个数字，不要忽略开头的 `s-`。\r\n- 如果当前上下文没有 `topic_id`，就视为运行时缺参，必须停止调用并明确说明缺口。\r\n\r\n## 约束要求\r\n\r\n- `AIOS_ONTOLOGY_DIR` （默认为 `/var/aios/kernel/ontology`）视为当前事实源。\r\n- 当前 CLI 只支持 `provider=hzg`，如果出现其他 provider，直接说明当前运行链路不支持，不要猜测替代方案。\r\n- 调用 CLI 时，`-s` 传入当前会话的 `topic_id` 。\r\n  - 不能臆造，不能复用其他会话的 `topic_id` 。\r\n  - 不得使用提示词中的 `SessionId` 、 `topic_id` 、`chat_id` 、 `message_id` 或其他字段代替。\r\n- 不要臆造接口名、请求字段、枚举 ID 或 `provider`。\r\n- 不要绕过 CLI 自行编写 API 调用脚本。\r\n- 不要手动启动 `aios-apps-invoke-cli serve` ；运行环境应已提供常驻 app invoke service。\r\n- 只有拿到 CLI 结果后，才允许用 Python 做二次分析和计算。\r\n- 如果本体不完整、`provider` 未知或运行时上下文缺失，应明确说明阻塞点，不要猜测。\r\n- 禁止将调用结果存储到记忆、缓存或数据库中；禁止在后续对话中复用之前的调用结果。\r\n\r\n## 降歧义规则\r\n\r\n- `binding` 一律使用规范命令名，不用别名：\r\n  - `GetTableDataWithOffset`\r\n  - `GetComboBindingOptions`\r\n  - `CalcBindingDataSource`\r\n- `servercommand` 的 `jsonBody` 严格按 ontology 的 `Input Arguments` 生成。\r\n- `binding` 的 `jsonBody` 严格按 [references/invoke-rules.md](references/invoke-rules.md) 中的兼容 schema 生成。\r\n- 不要把底层 HTTP 原始 body 直接塞进 `binding` 的 `jsonBody`，除非规则文件明确允许。\r\n- 同一个问题里如果存在多个可疑 ontology 条目，先说明候选项并停止，不要自选一个继续调用。\r\n\r\n## 开始前必须阅读\r\n\r\n- 调用前需要阅读：[references/invoke-rules.md](references/invoke-rules.md)\r\n- 调用后，需要做筛选、聚合、比较、排序或时间分析时，再阅读： [references/data-processing.md](references/data-processing.md)\r\n\r\n## 输出要求\r\n\r\n- 说明本次调用依据了哪些本体文件或条目。\r\n- 说明使用的是 `servercommand` 还是 `binding`。\r\n- 说明任何假设、缺失字段、跳过的数据或不确定性。\n\nFile v1.0.0:readme.md\n\n# aios-call-app-service\r\n\r\n这是一个面向 AIOS / OpenClaw / Forguncy 场景的业务调用技能，用于处理依赖实时业务数据、系统接口、绑定配置或业务动作的请求。\r\n\r\n## 适用场景\r\n\r\n- 查询实时业务数据\r\n- 调用本体中定义的业务命令\r\n- 使用绑定接口读取系统数据\r\n- 需要基于真实系统返回结果继续分析\r\n- 用户要求直接在系统中执行操作\r\n\r\n## 调用原则\r\n\r\n- 先读取 `AIOS_ONTOLOGY_DIR`\n- 再确认应用、命令、参数结构和枚举映射\n- 统一通过 `aios-apps-invoke-cli` 发起调用；CLI 会把请求交给本地 app invoke socket service\n- 当前 CLI 只支持 `provider=hzg`\n- 当前会话标识使用 `SessionId`\n- 调用 `aios-apps-invoke-cli` 时：\n  - `-p` 对应 `provider`\n  - `-s` 对应 `SessionId`\n- 不要绕过 CLI 直接访问业务系统 HTTP 接口；局域网业务系统访问由 `aios-apps-invoke-cli serve` 进程完成\n- `binding` 参数优先从 `binding-*.md` 的 `CandidatesBindings`、`TableBindings`、`DataSourceBindings` 文档生成兼容 schema\n- `servercommand` 参数严格按 ontology 的 `Input Arguments` 生成\n\r\n## 相关文档\r\n\r\n- 主说明见 `SKILL.md`\r\n- 调用细则见 `references/invoke-rules.md`\r\n- 数据处理规则见 `references/data-processing.md`\n\nFile v1.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn74st1pqb0wkrbhpw4yh0kb2982c201\",\n  \"slug\": \"aios-call-app-service\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1782445272748\n}\n\nFile v1.0.0:references/data-processing.md\n\n# AIOS 数据处理规则\n\n只用于 `aios-apps-invoke-cli` 的真实返回结果。\n\n## 何时用 Python\n\n出现以下任一需求就用 Python：\n\n- 统计、求和、计数、平均、中位数\n- 分组、聚合、排序、排名、去重\n- 跨多条记录筛选\n- 比率、百分比、环比、同比\n- 时间窗口分析\n- 任意派生计算\n\n仅在“读取单条记录的单个简单字段且不做计算/比较”时可直接读值。\n\n## 最低流程\n\n1. 读取 JSON。\n2. 校验结构和必需字段。\n3. 处理 `null`、空字符串、缺失值、异常值。\n4. 数值先校验类型再计算。\n5. 日期数值按 OADate 转换后再分析。\n\nOADate：\n\n- `datetime = 1899-12-30 + OADate`\n\n## 输出必须说明\n\n- 用了哪些字段\n- 做了哪些过滤、分组或计算\n- 实际处理了多少条记录\n- 是否跳过无效数据\n- 是否存在不确定性\n\nFile v1.0.0:references/invoke-rules.md\n\n# AIOS 应用调用细则\r\n\r\n## 命令\r\n\r\n```bash\r\naios-apps-invoke-cli servercommand <applicationName> <commandName> <method> [jsonBody] -p <provider> -s <SessionId>\naios-apps-invoke-cli binding <applicationName> <commandName> <method> <jsonBody> -p <provider> -s <SessionId>\naios-apps-invoke-cli service-status\naios-apps-invoke-cli status\n```\n\n全局命令不可用时，可使用 `npx aios-apps-invoke-cli ...`。\n\r\n## 必守规则\r\n\r\n- `-p/-s` 分别来自 `provider`、当前 `SessionId` （上下文中的 `topic_id` ）\r\n- 当前 CLI 只支持 `provider=hzg`\n- 如果 ontology、用户或上下文指向其他 provider，直接停止并说明当前运行链路不支持\n- `servercommand` 和 `binding` 是 CLI client 命令，会通过本地 app invoke socket service 执行真实业务系统调用\n- 不要手动启动 `serve` 或 `serve-mqtt`，也不要绕过 CLI 直接拼业务系统 HTTP 请求\n- `service-status` 用于检查 socket service 配置；`status` 会读取完整配置视图，可能要求兼容 MQTT 环境变量存在\n- 缺任意运行时参数都不要猜，直接停止并说明缺口\n- `applicationName` 取自当前使用的 ontology 所在应用目录名；如果存在多个候选应用目录，直接停止并说明冲突\r\n- 业务命令用 `servercommand`\r\n- 内置数据服务用 `binding`\r\n- 本体给了绑定端点时，优先按本体调用：\r\n- `GetTableDataWithOffset -> TableBinding`\r\n- `GetComboBindingOptions -> CandidatesBinding`\r\n- `CalcBindingDataSource -> DataSourceBindings`\r\n- `binding` 一律使用规范命令名，不使用 `TableBinding`、`CandidatesBinding` 等别名作为 CLI 入参\r\n- 带 `[HOB_EXCLUDE]` 的命令一律不调用\r\n\r\n## 请求体规则\r\n\r\n- `servercommand`：`commandName` 用本体命令名，`method` 用本体 `verb`，`jsonBody` 严格按 `ServerCommand 兼容 schema` 章节处理\r\n- `servercommand` 不新增字段，不遗漏字段，不修改字段类型\r\n- CLI 请求体只发送当前链路实际需要的 OpenClaw 会话字段：`SessionId`\r\n- `binding`：优先根据 ontology 中的 `*-bindings.md` 文档生成兼容 schema，不要手写或反推底层 HTTP 原始 body\r\n- `DataSourceBindings` 一律用 `binding` 命令，`commandName` 固定为 `CalcBindingDataSource`\r\n- 如果 `binding` 和 `servercommand` 都能勉强解释当前需求，优先按 ontology 明确标注的端点类型执行；ontology 没标明时停止，不要猜\r\n\r\n### Binding 文档取数规则\r\n\r\n- `TableBinding` 优先读取形如 `xxx-bindings.md` 的 `TableBindings` 段落\r\n- `CandidatesBinding` 优先读取形如 `xxx-bindings.md` 的 `CandidatesBindings` 段落\r\n- `TableBinding` 从文档中提取：\r\n  - `page-name`\r\n  - `view-name`\r\n  - `list-view-location`\r\n  - `table-name`\r\n  - 列表格中的每一行 `column-name + guid`\r\n- 如果 `TableBindings` 文档缺少上述任一必需字段，不要猜，直接停止并说明缺口\r\n- `CandidatesBinding` 从文档中提取：\r\n  - `page-name`\r\n  - `TableName`\r\n  - `column-type=ID` 对应的 `ColumnName`\r\n  - `column-type=ID` 对应的 `GUID`\r\n  - `column-type=text` 对应的 `ColumnName`\r\n  - `column-type=text` 对应的 `GUID`\r\n- 如果 `CandidatesBindings` 文档缺少 `ID` 列或 `text` 列，不要猜，直接停止并说明缺口\r\n- `TableBinding` 和 `CandidatesBinding` 各自只读取自己所属段落，不要跨段落拼字段\r\n- `DataSourceBindings` 优先读取形如 `binding-xxx.md` 的 `DataSourceBindings` 段落\r\n- `DataSourceBindings` 从文档中提取：\r\n  - `page-name`\r\n  - `cell-location`\r\n  - `table-name`\r\n  - `Columns` 表中的每一行 `display-name + table-name + column-name`\r\n  - `Query Params` 表中的每一行 `table-name + column-name`\r\n- 如果 `DataSourceBindings` 存在多组候选，且当前上下文无法唯一定位具体数据源，直接停止并说明冲突\r\n\r\n### ServerCommand 兼容 schema\r\n\r\n根据 `argument-type` 不同，参数的组织方法也不同。\r\n\r\n- `basic` ：基础类型，包含布尔值、字符串、时间日期、整数、小数等\r\n  - 布尔值： `true`、1 均被视为 true；`false`、0 则被视为 false\r\n  - 时间日期：OADate类型，计算方法： `datetime = 1899-12-30 + OADate`\r\n- `object` ：对象类型，需要根据 `argument-sharp` 逐层完成该参数对象的组装工作\r\n- `array` ：数组类型，直接组装数组，数组中的元素需要根据 `argument-sharp` 逐层完成该参数数组的组装工作\r\n- `changeset` ：变更集类型，需要组装一个包含有三个属性（`AddRows`、`EditRows` 和`DeleteRows`）的变更集对象。这种做法通常用于包含有从表的业务实体更新或创建操作中，如`包含有订单明细行的订单修改`操作。\r\n  - `AddRows` 属性：需要被添加的子表实体数组，需要根据 `argument-sharp` 逐层完成该属性数组的组装工作\r\n  - `EditRows` 属性：需要被修改的子表实体数组，需要根据 `argument-sharp` 逐层完成该属性数组的组装工作\r\n  - `DeleteRows` 属性：需要被删除的子表实体数组，需要根据 `argument-sharp` 逐层完成该属性数组的组装工作\r\n\r\n如某 ServerCommand 的参数中 `Details` 的 `argument-type` 是 `changeset` 。当需要为 `Details` 添加一个从表实体，该实体的 `SKU` 属性值为 `bn`、`Amount` 属性值为 10 时，就该如此组织请求参数：`{\"OrderName\":\"New-Name\",\"Details\":{\"AddRows\":[{\"SKU\":\"bn\",\"Amount\":10}],\"EditRows\":[],\"DeleteRows\":[]}}` 。\r\n\r\n> 兼容性：如果按 `object` 类型处理出错，可以换用 `array` 类型或 `changeset` 类型重试。\r\n\r\n### TableBinding 兼容 schema\r\n\r\n- `GetTableDataWithOffset` 的 `jsonBody` 优先生成如下兼容结构：\r\n\r\n```json\r\n{\r\n  \"columns\": [\r\n    {\r\n      \"column-name\": \"编号\",\r\n      \"guid\": \"3261feec-650a-421c-b05f-7ea8b1bed3e5\"\r\n    }\r\n  ],\r\n  \"table-name\": \"物品表\",\r\n  \"view-name\": \"物品_库存物品信息表格\",\r\n  \"list-view-location\": \"物品_库存|物品信息表格\",\r\n  \"page-name\": \"物品_库存\",\r\n  \"target-page\": 1,\r\n  \"page-limit-row-count\": 0\r\n}\r\n```\r\n\r\n- 生成规则：\r\n  - `columns <- bindings 文档表格中的 column-name + guid`\r\n  - `table-name <- table-name`\r\n  - `view-name <- view-name`\r\n  - `list-view-location <- list-view-location`\r\n  - `page-name <- page-name`\r\n  - `target-page <- 1`\r\n  - `page-limit-row-count <- 0`\r\n- 如果已经拿到真实分页参数，可覆盖：\r\n  - `target-page`\r\n  - `page-limit-row-count`\r\n- `columns` 保持 ontology 文档中的原顺序，不要重排\r\n\r\n### TableBinding 到底层 HTTP body 的映射说明\r\n\r\n- 兼容 schema 会由下游 SDK / 代理转换为底层请求体\r\n- 等价映射关系如下：\r\n  - `bindingInfos <- columns[].guid`\r\n  - `currentRowInfo.currentTable <- table-name`\r\n  - `currentRowInfo.viewname <- view-name`\r\n  - `currentRowInfo.listviewLocation <- list-view-location`\r\n  - `offsetConditionInfo.targetPage <- target-page`\r\n  - `offsetConditionInfo.pageLimitRowCount <- page-limit-row-count`\r\n  - `pageName <- page-name`\r\n- 以下字段由下游固定补齐，不需要在 ontology 文档中查找，也不要手工追加到兼容 schema：\r\n  - `demandRowCount=0`\r\n  - `currentDataLength=0`\r\n  - `needRowVersion=true`\r\n  - `editorDataInfos=null`\r\n  - `sortCommandID=null`\r\n  - `orderByInfo=null`\r\n  - `columnFilterQueries=null`\r\n  - `totalRowBindingInfos=[]`\r\n\r\n### CandidatesBinding 兼容 schema\r\n\r\n- `GetComboBindingOptions` 的 `jsonBody` 优先生成如下兼容结构：\r\n\r\n```json\r\n{\r\n  \"id-column\": {\r\n    \"column-name\": \"ID\",\r\n    \"guid\": \"9c641cb4-c3a3-44ea-ad5e-495c9a5d3544\"\r\n  },\r\n  \"text-column\": {\r\n    \"column-name\": \"编号\",\r\n    \"guid\": \"41baffe3-3982-4237-bf62-b8d95ba76218\"\r\n  },\r\n  \"table-name\": \"物品表\",\r\n  \"page-name\": \"采购单填写\"\r\n}\r\n```\r\n\r\n- 生成规则：\r\n  - `id-column.column-name <- column-type=ID` 对应的 `ColumnName`\r\n  - `id-column.guid <- column-type=ID` 对应的 `GUID`\r\n  - `text-column.column-name <- column-type=text` 对应的 `ColumnName`\r\n  - `text-column.guid <- column-type=text` 对应的 `GUID`\r\n  - `table-name <- TableName`\r\n  - `page-name <- page-name`\r\n- 如果 `CandidatesBindings` 里存在多组候选绑定，且当前上下文无法唯一定位具体组件，直接停止并说明冲突\r\n\r\n### CandidatesBinding 到底层 HTTP body 的映射说明\r\n\r\n- 兼容 schema 会由下游 SDK / 代理转换为底层请求体\r\n- 等价映射关系如下：\r\n  - `tableName <- table-name`\r\n  - `valueColumnBindingInfo <- id-column.guid`\r\n  - `displayColumnBindingInfo <- text-column.guid`\r\n  - `pageName <- page-name`\r\n- 以下字段由下游固定补齐，不需要在 ontology 文档中查找，也不要手工追加到兼容 schema：\r\n  - `itemQuery=null`\r\n  - `offset=null`\r\n  - `cacheSettingID=null`\r\n\r\n### DataSourceBinding 兼容 schema\r\n\r\n- `CalcBindingDataSource` 的 `jsonBody` 优先生成如下兼容结构：\r\n\r\n```json\r\n{\r\n  \"page-name\": \"出入库单填写\",\r\n  \"cell-location\": \"1,0\",\r\n  \"table-name\": \"出入库类型表\",\r\n  \"columns\": [\r\n    {\r\n      \"response-name\": \"value\",\r\n      \"table-name\": \"出入库类型表\",\r\n      \"column-name\": \"ID\"\r\n    },\r\n    {\r\n      \"response-name\": \"label\",\r\n      \"table-name\": \"出入库类型表\",\r\n      \"column-name\": \"名称\"\r\n    }\r\n  ],\r\n  \"query-params\": [\r\n    {\r\n      \"table-name\": \"出入库类型表\",\r\n      \"column-name\": \"出入库标记\"\r\n    }\r\n  ],\r\n  \"params\": {\r\n    \"出入库类型表.出入库标记\": \"入库\"\r\n  }\r\n}\r\n```\r\n\r\n- 生成规则：\r\n  - `page-name <- binding 文档 Information.page-name`\r\n  - `cell-location <- DataSourceBindings 段落中的 cell-location`\r\n  - `table-name <- DataSourceBindings 段落中的 table-name`\r\n  - `columns[].response-name <- Columns 表中的 display-name`\r\n  - `columns[].table-name <- Columns 表中的 table-name`\r\n  - `columns[].column-name <- Columns 表中的 column-name`\r\n  - `query-params[].table-name <- Query Params 表中的 table-name`\r\n  - `query-params[].column-name <- Query Params 表中的 column-name`\r\n  - `params` 只有在已知真实筛选值时生成，key 固定为 `query-params` 的 `table-name.column-name`\r\n- 如果 `Query Params` 非空但当前问题没有提供或无法推导真实参数值，不要调用，直接说明缺少哪个 `table-name.column-name`\r\n- 如果 `Query Params` 为“无”，不要生成 `params`\r\n\r\n### DataSourceBinding 到底层 HTTP body 的映射说明\r\n\r\n- 兼容 schema 会由下游 SDK / 代理转换为底层请求体\r\n- 下游会先通过 `GetMetadata2` 使用 `page-name + cell-location` 定位运行态数据源 GUID，再调用 `CalcBindingDataSource`\r\n- 等价映射关系如下：\r\n  - `CommandId <- GetMetadata2 运行态数据源 GUID`\r\n  - `Params <- query-params 顺序匹配运行态 Params，取值来自 jsonBody.params`\r\n  - 返回行中的 `response-name` 会被映射为对应 `column-name`\r\n- 不要直接调用 `GetMetadata2` 或手工拼接底层 `CommandId`\r\n\r\n## 额外规则\r\n\r\n- 如果 bindings 文档已经给出真实 `column-name`，必须保留真实列名，不要用 `guid` 顶替\r\n- 只有在文档没有列名、但调试链路必须先跑通时，才允许临时用 `guid` 兼作 `column-name`，并且必须明确说明这是降级方案\r\n- 生成 CLI 命令前，先在答案里或推理里完成这 4 个定值：`applicationName`、`commandName`、`provider`、`SessionId`\r\n- 任一值不能唯一确定时，不要继续拼命令\r\n- 需要底层 ID 时，先用本体定义的查询或绑定把展示文本解析成真实 ID，再发正式请求\r\n- JSON 字符串统一双引号；shell 转义按当前 shell 处理\r\n- 遇到 `invalid JSON param for body` 时，先检查 JSON 和引号\r\n- 本体标成行 ID 的字段默认按 `int` 处理\r\n- 不要只看字段名猜含义\n\nFile v1.0.0:skill-card.md\n\n## Description: <br>\nAios Call App Service helps agents read AIOS ontology and invoke AIOS, OpenClaw, or Forguncy business services with live results through a local CLI. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[kadbbz](https://clawhub.ai/user/kadbbz) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and business-system operators use this skill when an agent must query live AIOS, OpenClaw, or Forguncy data, call ontology-defined commands, or prepare state-changing business actions with user confirmation. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill can read from and change live business systems. <br>\nMitigation: Install only where AIOS app invocation is intended and authorized, and require explicit user confirmation before any write, approval, deletion, or other state-changing business action. <br>\nRisk: Session identifier instructions are inconsistent between sessionId and topic_id. <br>\nMitigation: Confirm the runtime session identifier before use and stop if the required identifier is missing or ambiguous. <br>\nRisk: Incorrect ontology, provider, or parameter selection could produce invalid business-system calls. <br>\nMitigation: Read the current ontology before each invocation, use only the supported provider path, and stop instead of guessing when required runtime parameters or ontology entries are incomplete. <br>\n\n\n## Reference(s): <br>\n- [AIOS application invocation rules](references/invoke-rules.md) <br>\n- [AIOS data processing rules](references/data-processing.md) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Markdown, Shell commands, Guidance, Analysis] <br>\n**Output Format:** [Markdown with inline shell commands and JSON request bodies] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May include parameter confirmation tables, ontology-source notes, assumptions, missing fields, skipped data, and uncertainty.] <br>\n\n## Skill Version(s): <br>\n1.0.0 (source: server release metadata) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v1.0.0:agents/openai.yaml\n\ninterface:\n  display_name: \"AIOS App Service\"\n  short_description: \"Read ontology first, then invoke AIOS app services\"\n  default_prompt: \"Use $aios-call-app-service to read /var/aios/data/ontology, invoke AIOS application interfaces, and continue from live results.\"\n\npolicy:\n  allow_implicit_invocation: true\n\nArchive v0.1.3: 7 files, 10057 bytes\n\nFiles: agents/openai.yaml (311b), readme.md (1127b), references/data-processing.md (875b), references/invoke-rules.md (11388b), skill-card.md (2604b), SKILL.md (4408b), _meta.json (140b)\n\nFile v0.1.3:SKILL.md\n\n---\r\nname: aios-call-app-service\r\ndescription: 当请求依赖 AIOS、OpenClaw、Forguncy 等业务系统的实时数据、接口调用或业务操作时，优先使用本技能。先读取 AIOS_ONTOLOGY_DIR 指向的本体目录，再确认应用、命令、参数结构和枚举映射，通过 aios-apps-invoke-cli 发起调用，并以实时返回结果作为后续分析和执行依据。遇到 aios-mqtt-channel 会话时，把当前会话的 SessionId 视为唯一合法会话标识；它来自当前会话上下文中的 `sessionId`。\r\n---\r\n\r\n# 系统调用技能\r\n\r\n当用户的问题不能只靠通用知识回答，而是必须查询、调用或操作业务系统时，应优先使用本技能。\r\n\r\n## 优先触发场景\r\n\r\n- 查询业务系统中的实时数据\r\n- 调用系统接口\r\n- 在系统内执行新增、修改、提交、审核、删除等动作\r\n- 需要基于真实系统返回结果继续分析或决策\r\n\r\n## 必须遵循的流程\r\n\r\n1. 在发起调用前，先读取环境变量 `AIOS_ONTOLOGY_DIR` 指向的本体目录。\r\n  - 禁止缓存、记忆或复用之前读取的本体内容。\r\n  - 每次调用都要重新读取，确保使用最新的本体信息。\r\n2. 以本体为以下信息的唯一事实来源：\r\n  - 应用名\r\n  - 命令名或绑定端点\r\n  - HTTP 方法\r\n  - 请求体结构\r\n  - 枚举值映射\r\n  - 返回字段含义\r\n3. 只允许通过 `aios-apps-invoke-cli` 调用业务系统接口。\r\n4. 实时调用结果的优先级高于记忆、缓存、历史对话和猜测。\r\n5. 只有在拿到 CLI 返回结果后，才能继续做后续分析、汇总和结论输出。\r\n\r\n## 最小执行清单\r\n\r\n每次调用前按这个顺序检查：\r\n\r\n1. 读取相关 ontology 文档。\r\n2. 根据文档，确认本次是 `servercommand` 还是 `binding`。\r\n3. 根据文档，确认 `applicationName`。\r\n4. 根据文档，确认 `commandName`。\r\n5. 根据文档，确认 `provider`。\r\n6. 通过会话上下文的 `topic_id` ，确认 `SessionId`。\r\n7. 生成 `jsonBody`，并检查确认合法性。\r\n8. 生成并执行唯一一条 CLI 命令。\r\n\r\n任一步缺失，都停止并说明缺口。\r\n\r\n## 会话标识读取规则\r\n\r\n- `aios-apps-invoke-cli -s` 只接受当前会话的 `SessionId`，你只能从当前会话上下文中的 `topic_id` 读取到该值。\r\n- `SessionId` 以 `s-` 开头，后面跟30个数字，不要忽略开头的 `s-`。\r\n- 如果当前上下文没有 `topic_id`，就视为运行时缺参，必须停止调用并明确说明缺口。\r\n\r\n## 约束要求\r\n\r\n- `AIOS_ONTOLOGY_DIR` 视为当前事实源。\r\n- 当前 CLI 只支持 `provider=hzg`，如果出现其他 provider，直接说明当前运行链路不支持，不要猜测替代方案。\r\n- 调用 CLI 时，`-s` 传入当前会话的 `SessionId` （上下文中的 `topic_id`）。\r\n  - 不能臆造，不能复用其他会话的 `SessionId` 。\r\n  - 不得使用提示词中的 `SessionId` 、 `chat_id` 、 `message_id` 或其他字段代替。\r\n- 不要臆造接口名、请求字段、枚举 ID 或 `provider`。\r\n- 不要绕过 CLI 自行编写 API 调用脚本。\r\n- 只有拿到 CLI 结果后，才允许用 Python 做二次分析和计算。\r\n- 如果本体不完整、`provider` 未知或运行时上下文缺失，应明确说明阻塞点，不要猜测。\r\n\r\n## 降歧义规则\r\n\r\n- `binding` 一律使用规范命令名，不用别名：\r\n  - `GetTableDataWithOffset`\r\n  - `GetComboBindingOptions`\r\n  - `CalcBindingDataSource`\r\n- `servercommand` 的 `jsonBody` 严格按 ontology 的 `Input Arguments` 生成。\r\n- `binding` 的 `jsonBody` 严格按 [references/invoke-rules.md](references/invoke-rules.md) 中的兼容 schema 生成。\r\n- 不要把底层 HTTP 原始 body 直接塞进 `binding` 的 `jsonBody`，除非规则文件明确允许。\r\n- 同一个问题里如果存在多个可疑 ontology 条目，先说明候选项并停止，不要自选一个继续调用。\r\n\r\n## 开始前必须阅读\r\n\r\n- 调用前需要阅读：[references/invoke-rules.md](references/invoke-rules.md)\r\n- 调用后，需要做筛选、聚合、比较、排序或时间分析时，再阅读： [references/data-processing.md](references/data-processing.md)\r\n\r\n## 输出要求\r\n\r\n- 说明本次调用依据了哪些本体文件或条目。\r\n- 说明使用的是 `servercommand` 还是 `binding`。\r\n- 说明任何假设、缺失字段、跳过的数据或不确定性。\n\nFile v0.1.3:readme.md\n\n# aios-call-app-service\r\n\r\n这是一个面向 AIOS / OpenClaw / Forguncy 场景的业务调用技能，用于处理依赖实时业务数据、系统接口、绑定配置或业务动作的请求。\r\n\r\n## 适用场景\r\n\r\n- 查询实时业务数据\r\n- 调用本体中定义的业务命令\r\n- 使用绑定接口读取系统数据\r\n- 需要基于真实系统返回结果继续分析\r\n- 用户要求直接在系统中执行操作\r\n\r\n## 调用原则\r\n\r\n- 先读取 `AIOS_ONTOLOGY_DIR`\r\n- 再确认应用、命令、参数结构和枚举映射\r\n- 统一通过 `aios-apps-invoke-cli` 发起调用\r\n- 当前 CLI 只支持 `provider=hzg`\r\n- 当前会话标识使用 `SessionId`\r\n- 调用 `aios-apps-invoke-cli` 时：\r\n  - `-p` 对应 `provider`\r\n  - `-s` 对应 `SessionId`\r\n- `binding` 参数优先从 `binding-*.md` 的 `CandidatesBindings`、`TableBindings`、`DataSourceBindings` 文档生成兼容 schema\r\n- `servercommand` 参数严格按 ontology 的 `Input Arguments` 生成\r\n\r\n## 相关文档\r\n\r\n- 主说明见 `SKILL.md`\r\n- 调用细则见 `references/invoke-rules.md`\r\n- 数据处理规则见 `references/data-processing.md`\n\nFile v0.1.3:_meta.json\n\n{\n  \"ownerId\": \"kn74st1pqb0wkrbhpw4yh0kb2982c201\",\n  \"slug\": \"aios-call-app-service\",\n  \"version\": \"0.1.3\",\n  \"publishedAt\": 1781781621973\n}\n\nFile v0.1.3:references/data-processing.md\n\n# AIOS 数据处理规则\n\n只用于 `aios-apps-invoke-cli` 的真实返回结果。\n\n## 何时用 Python\n\n出现以下任一需求就用 Python：\n\n- 统计、求和、计数、平均、中位数\n- 分组、聚合、排序、排名、去重\n- 跨多条记录筛选\n- 比率、百分比、环比、同比\n- 时间窗口分析\n- 任意派生计算\n\n仅在“读取单条记录的单个简单字段且不做计算/比较”时可直接读值。\n\n## 最低流程\n\n1. 读取 JSON。\n2. 校验结构和必需字段。\n3. 处理 `null`、空字符串、缺失值、异常值。\n4. 数值先校验类型再计算。\n5. 日期数值按 OADate 转换后再分析。\n\nOADate：\n\n- `datetime = 1899-12-30 + OADate`\n\n## 输出必须说明\n\n- 用了哪些字段\n- 做了哪些过滤、分组或计算\n- 实际处理了多少条记录\n- 是否跳过无效数据\n- 是否存在不确定性\n\nFile v0.1.3:references/invoke-rules.md\n\n# AIOS 应用调用细则\r\n\r\n## 命令\r\n\r\n```bash\r\naios-apps-invoke-cli servercommand <applicationName> <commandName> <method> [jsonBody] -p <provider> -s <SessionId>\r\naios-apps-invoke-cli binding <applicationName> <commandName> <method> <jsonBody> -p <provider> -s <SessionId>\r\naios-apps-invoke-cli status\r\n```\r\n\r\n全局命令不可用时，可使用 `npx aios-apps-invoke-cli ...`。\r\n\r\n## 必守规则\r\n\r\n- `-p/-s` 分别来自 `provider`、当前 `SessionId` （上下文中的 `topic_id` ）\r\n- 当前 CLI 只支持 `provider=hzg`\r\n- 如果 ontology、用户或上下文指向其他 provider，直接停止并说明当前运行链路不支持\r\n- 缺任意运行时参数都不要猜，直接停止并说明缺口\r\n- `applicationName` 取自当前使用的 ontology 所在应用目录名；如果存在多个候选应用目录，直接停止并说明冲突\r\n- 业务命令用 `servercommand`\r\n- 内置数据服务用 `binding`\r\n- 本体给了绑定端点时，优先按本体调用：\r\n- `GetTableDataWithOffset -> TableBinding`\r\n- `GetComboBindingOptions -> CandidatesBinding`\r\n- `CalcBindingDataSource -> DataSourceBindings`\r\n- `binding` 一律使用规范命令名，不使用 `TableBinding`、`CandidatesBinding` 等别名作为 CLI 入参\r\n- 带 `[HOB_EXCLUDE]` 的命令一律不调用\r\n\r\n## 请求体规则\r\n\r\n- `servercommand`：`commandName` 用本体命令名，`method` 用本体 `verb`，`jsonBody` 严格按 `ServerCommand 兼容 schema` 章节处理\r\n- `servercommand` 不新增字段，不遗漏字段，不修改字段类型\r\n- CLI 请求体只发送当前链路实际需要的 OpenClaw 会话字段：`SessionId`\r\n- `binding`：优先根据 ontology 中的 `*-bindings.md` 文档生成兼容 schema，不要手写或反推底层 HTTP 原始 body\r\n- `DataSourceBindings` 一律用 `binding` 命令，`commandName` 固定为 `CalcBindingDataSource`\r\n- 如果 `binding` 和 `servercommand` 都能勉强解释当前需求，优先按 ontology 明确标注的端点类型执行；ontology 没标明时停止，不要猜\r\n\r\n### Binding 文档取数规则\r\n\r\n- `TableBinding` 优先读取形如 `xxx-bindings.md` 的 `TableBindings` 段落\r\n- `CandidatesBinding` 优先读取形如 `xxx-bindings.md` 的 `CandidatesBindings` 段落\r\n- `TableBinding` 从文档中提取：\r\n  - `page-name`\r\n  - `view-name`\r\n  - `list-view-location`\r\n  - `table-name`\r\n  - 列表格中的每一行 `column-name + guid`\r\n- 如果 `TableBindings` 文档缺少上述任一必需字段，不要猜，直接停止并说明缺口\r\n- `CandidatesBinding` 从文档中提取：\r\n  - `page-name`\r\n  - `TableName`\r\n  - `column-type=ID` 对应的 `ColumnName`\r\n  - `column-type=ID` 对应的 `GUID`\r\n  - `column-type=text` 对应的 `ColumnName`\r\n  - `column-type=text` 对应的 `GUID`\r\n- 如果 `CandidatesBindings` 文档缺少 `ID` 列或 `text` 列，不要猜，直接停止并说明缺口\r\n- `TableBinding` 和 `CandidatesBinding` 各自只读取自己所属段落，不要跨段落拼字段\r\n- `DataSourceBindings` 优先读取形如 `binding-xxx.md` 的 `DataSourceBindings` 段落\r\n- `DataSourceBindings` 从文档中提取：\r\n  - `page-name`\r\n  - `cell-location`\r\n  - `table-name`\r\n  - `Columns` 表中的每一行 `display-name + table-name + column-name`\r\n  - `Query Params` 表中的每一行 `table-name + column-name`\r\n- 如果 `DataSourceBindings` 存在多组候选，且当前上下文无法唯一定位具体数据源，直接停止并说明冲突\r\n\r\n### ServerCommand 兼容 schema\r\n\r\n根据 `argument-type` 不同，参数的组织方法也不同。\r\n\r\n- `basic` ：基础类型，包含布尔值、字符串、时间日期、整数、小数等\r\n  - 布尔值： `true`、1 均被视为 true；`false`、0 则被视为 false\r\n  - 时间日期：OADate类型，计算方法： `datetime = 1899-12-30 + OADate`\r\n- `object` ：对象类型，需要根据 `argument-sharp` 逐层完成该参数对象的组装工作\r\n- `array` ：数组类型，直接组装数组，数组中的元素需要根据 `argument-sharp` 逐层完成该参数数组的组装工作\r\n- `changeset` ：变更集类型，需要组装一个包含有三个属性（`AddRows`、`EditRows` 和`DeleteRows`）的变更集对象。这种做法通常用于包含有从表的业务实体更新或创建操作中，如`包含有订单明细行的订单修改`操作。\r\n  - `AddRows` 属性：需要被添加的子表实体数组，需要根据 `argument-sharp` 逐层完成该属性数组的组装工作\r\n  - `EditRows` 属性：需要被修改的子表实体数组，需要根据 `argument-sharp` 逐层完成该属性数组的组装工作\r\n  - `DeleteRows` 属性：需要被删除的子表实体数组，需要根据 `argument-sharp` 逐层完成该属性数组的组装工作\r\n\r\n如某 ServerCommand 的参数中 `Details` 的 `argument-type` 是 `changeset` 。当需要为 `Details` 添加一个从表实体，该实体的 `SKU` 属性值为 `bn`、`Amount` 属性值为 10 时，就该如此组织请求参数：`{\"OrderName\":\"New-Name\",\"Details\":{\"AddRows\":[{\"SKU\":\"bn\",\"Amount\":10}],\"EditRows\":[],\"DeleteRows\":[]}}` 。\r\n\r\n> 兼容性：如果按 `object` 类型处理出错，可以换用 `array` 类型或 `changeset` 类型重试。\r\n\r\n### TableBinding 兼容 schema\r\n\r\n- `GetTableDataWithOffset` 的 `jsonBody` 优先生成如下兼容结构：\r\n\r\n```json\r\n{\r\n  \"columns\": [\r\n    {\r\n      \"column-name\": \"编号\",\r\n      \"guid\": \"3261feec-650a-421c-b05f-7ea8b1bed3e5\"\r\n    }\r\n  ],\r\n  \"table-name\": \"物品表\",\r\n  \"view-name\": \"物品_库存物品信息表格\",\r\n  \"list-view-location\": \"物品_库存|物品信息表格\",\r\n  \"page-name\": \"物品_库存\",\r\n  \"target-page\": 1,\r\n  \"page-limit-row-count\": 0\r\n}\r\n```\r\n\r\n- 生成规则：\r\n  - `columns <- bindings 文档表格中的 column-name + guid`\r\n  - `table-name <- table-name`\r\n  - `view-name <- view-name`\r\n  - `list-view-location <- list-view-location`\r\n  - `page-name <- page-name`\r\n  - `target-page <- 1`\r\n  - `page-limit-row-count <- 0`\r\n- 如果已经拿到真实分页参数，可覆盖：\r\n  - `target-page`\r\n  - `page-limit-row-count`\r\n- `columns` 保持 ontology 文档中的原顺序，不要重排\r\n\r\n### TableBinding 到底层 HTTP body 的映射说明\r\n\r\n- 兼容 schema 会由下游 SDK / 代理转换为底层请求体\r\n- 等价映射关系如下：\r\n  - `bindingInfos <- columns[].guid`\r\n  - `currentRowInfo.currentTable <- table-name`\r\n  - `currentRowInfo.viewname <- view-name`\r\n  - `currentRowInfo.listviewLocation <- list-view-location`\r\n  - `offsetConditionInfo.targetPage <- target-page`\r\n  - `offsetConditionInfo.pageLimitRowCount <- page-limit-row-count`\r\n  - `pageName <- page-name`\r\n- 以下字段由下游固定补齐，不需要在 ontology 文档中查找，也不要手工追加到兼容 schema：\r\n  - `demandRowCount=0`\r\n  - `currentDataLength=0`\r\n  - `needRowVersion=true`\r\n  - `editorDataInfos=null`\r\n  - `sortCommandID=null`\r\n  - `orderByInfo=null`\r\n  - `columnFilterQueries=null`\r\n  - `totalRowBindingInfos=[]`\r\n\r\n### CandidatesBinding 兼容 schema\r\n\r\n- `GetComboBindingOptions` 的 `jsonBody` 优先生成如下兼容结构：\r\n\r\n```json\r\n{\r\n  \"id-column\": {\r\n    \"column-name\": \"ID\",\r\n    \"guid\": \"9c641cb4-c3a3-44ea-ad5e-495c9a5d3544\"\r\n  },\r\n  \"text-column\": {\r\n    \"column-name\": \"编号\",\r\n    \"guid\": \"41baffe3-3982-4237-bf62-b8d95ba76218\"\r\n  },\r\n  \"table-name\": \"物品表\",\r\n  \"page-name\": \"采购单填写\"\r\n}\r\n```\r\n\r\n- 生成规则：\r\n  - `id-column.column-name <- column-type=ID` 对应的 `ColumnName`\r\n  - `id-column.guid <- column-type=ID` 对应的 `GUID`\r\n  - `text-column.column-name <- column-type=text` 对应的 `ColumnName`\r\n  - `text-column.guid <- column-type=text` 对应的 `GUID`\r\n  - `table-name <- TableName`\r\n  - `page-name <- page-name`\r\n- 如果 `CandidatesBindings` 里存在多组候选绑定，且当前上下文无法唯一定位具体组件，直接停止并说明冲突\r\n\r\n### CandidatesBinding 到底层 HTTP body 的映射说明\r\n\r\n- 兼容 schema 会由下游 SDK / 代理转换为底层请求体\r\n- 等价映射关系如下：\r\n  - `tableName <- table-name`\r\n  - `valueColumnBindingInfo <- id-column.guid`\r\n  - `displayColumnBindingInfo <- text-column.guid`\r\n  - `pageName <- page-name`\r\n- 以下字段由下游固定补齐，不需要在 ontology 文档中查找，也不要手工追加到兼容 schema：\r\n  - `itemQuery=null`\r\n  - `offset=null`\r\n  - `cacheSettingID=null`\r\n\r\n### DataSourceBinding 兼容 schema\r\n\r\n- `CalcBindingDataSource` 的 `jsonBody` 优先生成如下兼容结构：\r\n\r\n```json\r\n{\r\n  \"page-name\": \"出入库单填写\",\r\n  \"cell-location\": \"1,0\",\r\n  \"table-name\": \"出入库类型表\",\r\n  \"columns\": [\r\n    {\r\n      \"response-name\": \"value\",\r\n      \"table-name\": \"出入库类型表\",\r\n      \"column-name\": \"ID\"\r\n    },\r\n    {\r\n      \"response-name\": \"label\",\r\n      \"table-name\": \"出入库类型表\",\r\n      \"column-name\": \"名称\"\r\n    }\r\n  ],\r\n  \"query-params\": [\r\n    {\r\n      \"table-name\": \"出入库类型表\",\r\n      \"column-name\": \"出入库标记\"\r\n    }\r\n  ],\r\n  \"params\": {\r\n    \"出入库类型表.出入库标记\": \"入库\"\r\n  }\r\n}\r\n```\r\n\r\n- 生成规则：\r\n  - `page-name <- binding 文档 Information.page-name`\r\n  - `cell-location <- DataSourceBindings 段落中的 cell-location`\r\n  - `table-name <- DataSourceBindings 段落中的 table-name`\r\n  - `columns[].response-name <- Columns 表中的 display-name`\r\n  - `columns[].table-name <- Columns 表中的 table-name`\r\n  - `columns[].column-name <- Columns 表中的 column-name`\r\n  - `query-params[].table-name <- Query Params 表中的 table-name`\r\n  - `query-params[].column-name <- Query Params 表中的 column-name`\r\n  - `params` 只有在已知真实筛选值时生成，key 固定为 `query-params` 的 `table-name.column-name`\r\n- 如果 `Query Params` 非空但当前问题没有提供或无法推导真实参数值，不要调用，直接说明缺少哪个 `table-name.column-name`\r\n- 如果 `Query Params` 为“无”，不要生成 `params`\r\n\r\n### DataSourceBinding 到底层 HTTP body 的映射说明\r\n\r\n- 兼容 schema 会由下游 SDK / 代理转换为底层请求体\r\n- 下游会先通过 `GetMetadata2` 使用 `page-name + cell-location` 定位运行态数据源 GUID，再调用 `CalcBindingDataSource`\r\n- 等价映射关系如下：\r\n  - `CommandId <- GetMetadata2 运行态数据源 GUID`\r\n  - `Params <- query-params 顺序匹配运行态 Params，取值来自 jsonBody.params`\r\n  - 返回行中的 `response-name` 会被映射为对应 `column-name`\r\n- 不要直接调用 `GetMetadata2` 或手工拼接底层 `CommandId`\r\n\r\n## 额外规则\r\n\r\n- 如果 bindings 文档已经给出真实 `column-name`，必须保留真实列名，不要用 `guid` 顶替\r\n- 只有在文档没有列名、但调试链路必须先跑通时，才允许临时用 `guid` 兼作 `column-name`，并且必须明确说明这是降级方案\r\n- 生成 CLI 命令前，先在答案里或推理里完成这 4 个定值：`applicationName`、`commandName`、`provider`、`SessionId`\r\n- 任一值不能唯一确定时，不要继续拼命令\r\n- 需要底层 ID 时，先用本体定义的查询或绑定把展示文本解析成真实 ID，再发正式请求\r\n- JSON 字符串统一双引号；shell 转义按当前 shell 处理\r\n- 遇到 `invalid JSON param for body` 时，先检查 JSON 和引号\r\n- 本体标成行 ID 的字段默认按 `int` 处理\r\n- 不要只看字段名猜含义\n\nFile v0.1.3:skill-card.md\n\n## Description: <br>\nGuides agents to read AIOS, OpenClaw, and Forguncy ontology files, invoke business-system commands or bindings through the approved CLI, and analyze live returned results. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[kadbbz](https://clawhub.ai/user/kadbbz) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and operators use this skill when an agent must query live AIOS/OpenClaw/Forguncy business data, call ontology-defined commands or bindings, or perform system actions with results grounded in the current business system. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Live business-system access can execute write or destructive actions if routing, parameters, or user intent are wrong. <br>\nMitigation: Require explicit user confirmation for write or destructive actions, and verify the ontology-derived application, command, provider, SessionId, and jsonBody before running the CLI. <br>\nRisk: Session identifier handling is ambiguous and may target the wrong live session. <br>\nMitigation: Normalize to one canonical session identifier field before use, and stop when the current SessionId is missing or ambiguous. <br>\nRisk: Unsupported providers or incomplete ontology data can lead to incorrect business-system calls. <br>\nMitigation: Use the skill only in environments where the target AIOS/OpenClaw/Forguncy operations are understood, stop on unknown providers or incomplete ontology, and review generated commands before execution. <br>\n\n\n## Reference(s): <br>\n- [SKILL.md](SKILL.md) <br>\n- [readme.md](readme.md) <br>\n- [AIOS Application Invocation Rules](references/invoke-rules.md) <br>\n- [AIOS Data Processing Rules](references/data-processing.md) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, shell commands, guidance] <br>\n**Output Format:** [Markdown with inline shell commands and summarized live-result analysis] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Outputs should cite ontology files or entries used, identify servercommand versus binding calls, and state assumptions, missing fields, skipped data, and uncertainty.] <br>\n\n## Skill Version(s): <br>\n0.1.3 (source: server release metadata) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v0.1.3:agents/openai.yaml\n\ninterface:\n  display_name: \"AIOS App Service\"\n  short_description: \"Read ontology first, then invoke AIOS app services\"\n  default_prompt: \"Use $aios-call-app-service to read /var/aios/data/ontology, invoke AIOS application interfaces, and continue from live results.\"\n\npolicy:\n  allow_implicit_invocation: true\n\nArchive v0.1.2: 7 files, 9749 bytes\n\nFiles: agents/openai.yaml (311b), readme.md (1127b), references/data-processing.md (875b), references/invoke-rules.md (11272b), skill-card.md (1914b), SKILL.md (4408b), _meta.json (140b)\n\nFile v0.1.2:SKILL.md\n\n---\r\nname: aios-call-app-service\r\ndescription: 当请求依赖 AIOS、OpenClaw、Forguncy 等业务系统的实时数据、接口调用或业务操作时，优先使用本技能。先读取 AIOS_ONTOLOGY_DIR 指向的本体目录，再确认应用、命令、参数结构和枚举映射，通过 aios-apps-invoke-cli 发起调用，并以实时返回结果作为后续分析和执行依据。遇到 aios-mqtt-channel 会话时，把当前会话的 SessionId 视为唯一合法会话标识；它来自当前会话上下文中的 `sessionId`。\r\n---\r\n\r\n# 系统调用技能\r\n\r\n当用户的问题不能只靠通用知识回答，而是必须查询、调用或操作业务系统时，应优先使用本技能。\r\n\r\n## 优先触发场景\r\n\r\n- 查询业务系统中的实时数据\r\n- 调用系统接口\r\n- 在系统内执行新增、修改、提交、审核、删除等动作\r\n- 需要基于真实系统返回结果继续分析或决策\r\n\r\n## 必须遵循的流程\r\n\r\n1. 在发起调用前，先读取环境变量 `AIOS_ONTOLOGY_DIR` 指向的本体目录。\r\n  - 禁止缓存、记忆或复用之前读取的本体内容。\r\n  - 每次调用都要重新读取，确保使用最新的本体信息。\r\n2. 以本体为以下信息的唯一事实来源：\r\n  - 应用名\r\n  - 命令名或绑定端点\r\n  - HTTP 方法\r\n  - 请求体结构\r\n  - 枚举值映射\r\n  - 返回字段含义\r\n3. 只允许通过 `aios-apps-invoke-cli` 调用业务系统接口。\r\n4. 实时调用结果的优先级高于记忆、缓存、历史对话和猜测。\r\n5. 只有在拿到 CLI 返回结果后，才能继续做后续分析、汇总和结论输出。\r\n\r\n## 最小执行清单\r\n\r\n每次调用前按这个顺序检查：\r\n\r\n1. 读取相关 ontology 文档。\r\n2. 根据文档，确认本次是 `servercommand` 还是 `binding`。\r\n3. 根据文档，确认 `applicationName`。\r\n4. 根据文档，确认 `commandName`。\r\n5. 根据文档，确认 `provider`。\r\n6. 通过会话上下文的 `topic_id` ，确认 `SessionId`。\r\n7. 生成 `jsonBody`，并检查确认合法性。\r\n8. 生成并执行唯一一条 CLI 命令。\r\n\r\n任一步缺失，都停止并说明缺口。\r\n\r\n## 会话标识读取规则\r\n\r\n- `aios-apps-invoke-cli -s` 只接受当前会话的 `SessionId`，你只能从当前会话上下文中的 `topic_id` 读取到该值。\r\n- `SessionId` 以 `s-` 开头，后面跟30个数字，不要忽略开头的 `s-`。\r\n- 如果当前上下文没有 `topic_id`，就视为运行时缺参，必须停止调用并明确说明缺口。\r\n\r\n## 约束要求\r\n\r\n- `AIOS_ONTOLOGY_DIR` 视为当前事实源。\r\n- 当前 CLI 只支持 `provider=hzg`，如果出现其他 provider，直接说明当前运行链路不支持，不要猜测替代方案。\r\n- 调用 CLI 时，`-s` 传入当前会话的 `SessionId` （上下文中的 `topic_id`）。\r\n  - 不能臆造，不能复用其他会话的 `SessionId` 。\r\n  - 不得使用提示词中的 `SessionId` 、 `chat_id` 、 `message_id` 或其他字段代替。\r\n- 不要臆造接口名、请求字段、枚举 ID 或 `provider`。\r\n- 不要绕过 CLI 自行编写 API 调用脚本。\r\n- 只有拿到 CLI 结果后，才允许用 Python 做二次分析和计算。\r\n- 如果本体不完整、`provider` 未知或运行时上下文缺失，应明确说明阻塞点，不要猜测。\r\n\r\n## 降歧义规则\r\n\r\n- `binding` 一律使用规范命令名，不用别名：\r\n  - `GetTableDataWithOffset`\r\n  - `GetComboBindingOptions`\r\n  - `CalcBindingDataSource`\r\n- `servercommand` 的 `jsonBody` 严格按 ontology 的 `Input Arguments` 生成。\r\n- `binding` 的 `jsonBody` 严格按 [references/invoke-rules.md](references/invoke-rules.md) 中的兼容 schema 生成。\r\n- 不要把底层 HTTP 原始 body 直接塞进 `binding` 的 `jsonBody`，除非规则文件明确允许。\r\n- 同一个问题里如果存在多个可疑 ontology 条目，先说明候选项并停止，不要自选一个继续调用。\r\n\r\n## 开始前必须阅读\r\n\r\n- 调用前需要阅读：[references/invoke-rules.md](references/invoke-rules.md)\r\n- 调用后，需要做筛选、聚合、比较、排序或时间分析时，再阅读： [references/data-processing.md](references/data-processing.md)\r\n\r\n## 输出要求\r\n\r\n- 说明本次调用依据了哪些本体文件或条目。\r\n- 说明使用的是 `servercommand` 还是 `binding`。\r\n- 说明任何假设、缺失字段、跳过的数据或不确定性。\n\nFile v0.1.2:readme.md\n\n# aios-call-app-service\r\n\r\n这是一个面向 AIOS / OpenClaw / Forguncy 场景的业务调用技能，用于处理依赖实时业务数据、系统接口、绑定配置或业务动作的请求。\r\n\r\n## 适用场景\r\n\r\n- 查询实时业务数据\r\n- 调用本体中定义的业务命令\r\n- 使用绑定接口读取系统数据\r\n- 需要基于真实系统返回结果继续分析\r\n- 用户要求直接在系统中执行操作\r\n\r\n## 调用原则\r\n\r\n- 先读取 `AIOS_ONTOLOGY_DIR`\r\n- 再确认应用、命令、参数结构和枚举映射\r\n- 统一通过 `aios-apps-invoke-cli` 发起调用\r\n- 当前 CLI 只支持 `provider=hzg`\r\n- 当前会话标识使用 `SessionId`\r\n- 调用 `aios-apps-invoke-cli` 时：\r\n  - `-p` 对应 `provider`\r\n  - `-s` 对应 `SessionId`\r\n- `binding` 参数优先从 `binding-*.md` 的 `CandidatesBindings`、`TableBindings`、`DataSourceBindings` 文档生成兼容 schema\r\n- `servercommand` 参数严格按 ontology 的 `Input Arguments` 生成\r\n\r\n## 相关文档\r\n\r\n- 主说明见 `SKILL.md`\r\n- 调用细则见 `references/invoke-rules.md`\r\n- 数据处理规则见 `references/data-processing.md`\n\nFile v0.1.2:_meta.json\n\n{\n  \"ownerId\": \"kn74st1pqb0wkrbhpw4yh0kb2982c201\",\n  \"slug\": \"aios-call-app-service\",\n  \"version\": \"0.1.2\",\n  \"publishedAt\": 1781781073333\n}\n\nFile v0.1.2:references/data-processing.md\n\n# AIOS 数据处理规则\n\n只用于 `aios-apps-invoke-cli` 的真实返回结果。\n\n## 何时用 Python\n\n出现以下任一需求就用 Python：\n\n- 统计、求和、计数、平均、中位数\n- 分组、聚合、排序、排名、去重\n- 跨多条记录筛选\n- 比率、百分比、环比、同比\n- 时间窗口分析\n- 任意派生计算\n\n仅在“读取单条记录的单个简单字段且不做计算/比较”时可直接读值。\n\n## 最低流程\n\n1. 读取 JSON。\n2. 校验结构和必需字段。\n3. 处理 `null`、空字符串、缺失值、异常值。\n4. 数值先校验类型再计算。\n5. 日期数值按 OADate 转换后再分析。\n\nOADate：\n\n- `datetime = 1899-12-30 + OADate`\n\n## 输出必须说明\n\n- 用了哪些字段\n- 做了哪些过滤、分组或计算\n- 实际处理了多少条记录\n- 是否跳过无效数据\n- 是否存在不确定性\n\nFile v0.1.2:references/invoke-rules.md\n\n# AIOS 应用调用细则\r\n\r\n## 命令\r\n\r\n```bash\r\naios-apps-invoke-cli servercommand <applicationName> <commandName> <method> [jsonBody] -p <provider> -s <SessionId>\r\naios-apps-invoke-cli binding <applicationName> <commandName> <method> <jsonBody> -p <provider> -s <SessionId>\r\naios-apps-invoke-cli status\r\n```\r\n\r\n全局命令不可用时，可使用 `npx aios-apps-invoke-cli ...`。\r\n\r\n## 必守规则\r\n\r\n- `-p/-s` 分别来自 `provider`、当前 `SessionId` （上下文中的 `topic_id` ）\r\n- 当前 CLI 只支持 `provider=hzg`\r\n- 如果 ontology、用户或上下文指向其他 provider，直接停止并说明当前运行链路不支持\r\n- 缺任意运行时参数都不要猜，直接停止并说明缺口\r\n- `applicationName` 取自当前使用的 ontology 所在应用目录名；如果存在多个候选应用目录，直接停止并说明冲突\r\n- 业务命令用 `servercommand`\r\n- 内置数据服务用 `binding`\r\n- 本体给了绑定端点时，优先按本体调用：\r\n- `GetTableDataWithOffset -> TableBinding`\r\n- `GetComboBindingOptions -> CandidatesBinding`\r\n- `CalcBindingDataSource -> DataSourceBindings`\r\n- `binding` 一律使用规范命令名，不使用 `TableBinding`、`CandidatesBinding` 等别名作为 CLI 入参\r\n- 带 `[HOB_EXCLUDE]` 的命令一律不调用\r\n\r\n## 请求体规则\r\n\r\n- `servercommand`：`commandName` 用本体命令名，`method` 用本体 `verb`，`jsonBody` 严格按 `ServerCommand 兼容 schema` 章节处理\r\n- `servercommand` 不新增字段，不遗漏字段，不修改字段类型\r\n- CLI 请求体只发送当前链路实际需要的 OpenClaw 会话字段：`SessionId`\r\n- `binding`：优先根据 ontology 中的 `*-bindings.md` 文档生成兼容 schema，不要手写或反推底层 HTTP 原始 body\r\n- `DataSourceBindings` 一律用 `binding` 命令，`commandName` 固定为 `CalcBindingDataSource`\r\n- 如果 `binding` 和 `servercommand` 都能勉强解释当前需求，优先按 ontology 明确标注的端点类型执行；ontology 没标明时停止，不要猜\r\n\r\n### Binding 文档取数规则\r\n\r\n- `TableBinding` 优先读取形如 `xxx-bindings.md` 的 `TableBindings` 段落\r\n- `CandidatesBinding` 优先读取形如 `xxx-bindings.md` 的 `CandidatesBindings` 段落\r\n- `TableBinding` 从文档中提取：\r\n  - `page-name`\r\n  - `view-name`\r\n  - `list-view-location`\r\n  - `table-name`\r\n  - 列表格中的每一行 `column-name + guid`\r\n- 如果 `TableBindings` 文档缺少上述任一必需字段，不要猜，直接停止并说明缺口\r\n- `CandidatesBinding` 从文档中提取：\r\n  - `page-name`\r\n  - `TableName`\r\n  - `column-type=ID` 对应的 `ColumnName`\r\n  - `column-type=ID` 对应的 `GUID`\r\n  - `column-type=text` 对应的 `ColumnName`\r\n  - `column-type=text` 对应的 `GUID`\r\n- 如果 `CandidatesBindings` 文档缺少 `ID` 列或 `text` 列，不要猜，直接停止并说明缺口\r\n- `TableBinding` 和 `CandidatesBinding` 各自只读取自己所属段落，不要跨段落拼字段\r\n- `DataSourceBindings` 优先读取形如 `binding-xxx.md` 的 `DataSourceBindings` 段落\r\n- `DataSourceBindings` 从文档中提取：\r\n  - `page-name`\r\n  - `cell-location`\r\n  - `table-name`\r\n  - `Columns` 表中的每一行 `display-name + table-name + column-name`\r\n  - `Query Params` 表中的每一行 `table-name + column-name`\r\n- 如果 `DataSourceBindings` 存在多组候选，且当前上下文无法唯一定位具体数据源，直接停止并说明冲突\r\n\r\n### ServerCommand 兼容 schema\r\n\r\n根据 `argument-type` 不同，参数的组织方法也不同。\r\n\r\n- `basic` ：基础类型，包含布尔值、字符串、时间日期、整数、小数等\r\n  - 布尔值： `true`、1 均被视为 true；`false`、0 则被视为 false\r\n  - 时间日期：OADate类型，计算方法： `datetime = 1899-12-30 + OADate`\r\n- `object` ：对象类型，需要根据 `argument-sharp` 逐层完成该参数对象的组装工作\r\n- `array` ：数组类型，直接组装数组，数组中的元素需要根据 `argument-sharp` 逐层完成该参数数组的组装工作\r\n- `changeset` ：变更集类型，需要组装一个包含有三个属性（`AddRows`、`EditRows` 和`DeleteRows`）的变更集对象。这种做法通常用于包含有从表的业务实体更新或创建操作中，如`包含有订单明细行的订单修改`操作。\r\n  - `AddRows` 属性：需要被添加的子表实体数组，需要根据 `argument-sharp` 逐层完成该属性数组的组装工作\r\n  - `EditRows` 属性：需要被修改的子表实体数组，需要根据 `argument-sharp` 逐层完成该属性数组的组装工作\r\n  - `DeleteRows` 属性：需要被删除的子表实体数组，需要根据 `argument-sharp` 逐层完成该属性数组的组装工作\r\n\r\n如某 ServerCommand 的参数中 `Details` 的 `argument-type` 是 `changeset` 。当需要为 `Details` 添加一个从表实体，该实体的 `SKU` 属性值为 `bn`、`Amount` 属性值为 10 时，就该如此组织请求参数：`{\"OrderName\":\"New-Name\",\"Details\":{\"AddRows\":[{\"SKU\":\"bn\",\"Amount\":10}],\"EditRows\":[],\"DeleteRows\":[]}}` 。\r\n\r\n### TableBinding 兼容 schema\r\n\r\n- `GetTableDataWithOffset` 的 `jsonBody` 优先生成如下兼容结构：\r\n\r\n```json\r\n{\r\n  \"columns\": [\r\n    {\r\n      \"column-name\": \"编号\",\r\n      \"guid\": \"3261feec-650a-421c-b05f-7ea8b1bed3e5\"\r\n    }\r\n  ],\r\n  \"table-name\": \"物品表\",\r\n  \"view-name\": \"物品_库存物品信息表格\",\r\n  \"list-view-location\": \"物品_库存|物品信息表格\",\r\n  \"page-name\": \"物品_库存\",\r\n  \"target-page\": 1,\r\n  \"page-limit-row-count\": 0\r\n}\r\n```\r\n\r\n- 生成规则：\r\n  - `columns <- bindings 文档表格中的 column-name + guid`\r\n  - `table-name <- table-name`\r\n  - `view-name <- view-name`\r\n  - `list-view-location <- list-view-location`\r\n  - `page-name <- page-name`\r\n  - `target-page <- 1`\r\n  - `page-limit-row-count <- 0`\r\n- 如果已经拿到真实分页参数，可覆盖：\r\n  - `target-page`\r\n  - `page-limit-row-count`\r\n- `columns` 保持 ontology 文档中的原顺序，不要重排\r\n\r\n### TableBinding 到底层 HTTP body 的映射说明\r\n\r\n- 兼容 schema 会由下游 SDK / 代理转换为底层请求体\r\n- 等价映射关系如下：\r\n  - `bindingInfos <- columns[].guid`\r\n  - `currentRowInfo.currentTable <- table-name`\r\n  - `currentRowInfo.viewname <- view-name`\r\n  - `currentRowInfo.listviewLocation <- list-view-location`\r\n  - `offsetConditionInfo.targetPage <- target-page`\r\n  - `offsetConditionInfo.pageLimitRowCount <- page-limit-row-count`\r\n  - `pageName <- page-name`\r\n- 以下字段由下游固定补齐，不需要在 ontology 文档中查找，也不要手工追加到兼容 schema：\r\n  - `demandRowCount=0`\r\n  - `currentDataLength=0`\r\n  - `needRowVersion=true`\r\n  - `editorDataInfos=null`\r\n  - `sortCommandID=null`\r\n  - `orderByInfo=null`\r\n  - `columnFilterQueries=null`\r\n  - `totalRowBindingInfos=[]`\r\n\r\n### CandidatesBinding 兼容 schema\r\n\r\n- `GetComboBindingOptions` 的 `jsonBody` 优先生成如下兼容结构：\r\n\r\n```json\r\n{\r\n  \"id-column\": {\r\n    \"column-name\": \"ID\",\r\n    \"guid\": \"9c641cb4-c3a3-44ea-ad5e-495c9a5d3544\"\r\n  },\r\n  \"text-column\": {\r\n    \"column-name\": \"编号\",\r\n    \"guid\": \"41baffe3-3982-4237-bf62-b8d95ba76218\"\r\n  },\r\n  \"table-name\": \"物品表\",\r\n  \"page-name\": \"采购单填写\"\r\n}\r\n```\r\n\r\n- 生成规则：\r\n  - `id-column.column-name <- column-type=ID` 对应的 `ColumnName`\r\n  - `id-column.guid <- column-type=ID` 对应的 `GUID`\r\n  - `text-column.column-name <- column-type=text` 对应的 `ColumnName`\r\n  - `text-column.guid <- column-type=text` 对应的 `GUID`\r\n  - `table-name <- TableName`\r\n  - `page-name <- page-name`\r\n- 如果 `CandidatesBindings` 里存在多组候选绑定，且当前上下文无法唯一定位具体组件，直接停止并说明冲突\r\n\r\n### CandidatesBinding 到底层 HTTP body 的映射说明\r\n\r\n- 兼容 schema 会由下游 SDK / 代理转换为底层请求体\r\n- 等价映射关系如下：\r\n  - `tableName <- table-name`\r\n  - `valueColumnBindingInfo <- id-column.guid`\r\n  - `displayColumnBindingInfo <- text-column.guid`\r\n  - `pageName <- page-name`\r\n- 以下字段由下游固定补齐，不需要在 ontology 文档中查找，也不要手工追加到兼容 schema：\r\n  - `itemQuery=null`\r\n  - `offset=null`\r\n  - `cacheSettingID=null`\r\n\r\n### DataSourceBinding 兼容 schema\r\n\r\n- `CalcBindingDataSource` 的 `jsonBody` 优先生成如下兼容结构：\r\n\r\n```json\r\n{\r\n  \"page-name\": \"出入库单填写\",\r\n  \"cell-location\": \"1,0\",\r\n  \"table-name\": \"出入库类型表\",\r\n  \"columns\": [\r\n    {\r\n      \"response-name\": \"value\",\r\n      \"table-name\": \"出入库类型表\",\r\n      \"column-name\": \"ID\"\r\n    },\r\n    {\r\n      \"response-name\": \"label\",\r\n      \"table-name\": \"出入库类型表\",\r\n      \"column-name\": \"名称\"\r\n    }\r\n  ],\r\n  \"query-params\": [\r\n    {\r\n      \"table-name\": \"出入库类型表\",\r\n      \"column-name\": \"出入库标记\"\r\n    }\r\n  ],\r\n  \"params\": {\r\n    \"出入库类型表.出入库标记\": \"入库\"\r\n  }\r\n}\r\n```\r\n\r\n- 生成规则：\r\n  - `page-name <- binding 文档 Information.page-name`\r\n  - `cell-location <- DataSourceBindings 段落中的 cell-location`\r\n  - `table-name <- DataSourceBindings 段落中的 table-name`\r\n  - `columns[].response-name <- Columns 表中的 display-name`\r\n  - `columns[].table-name <- Columns 表中的 table-name`\r\n  - `columns[].column-name <- Columns 表中的 column-name`\r\n  - `query-params[].table-name <- Query Params 表中的 table-name`\r\n  - `query-params[].column-name <- Query Params 表中的 column-name`\r\n  - `params` 只有在已知真实筛选值时生成，key 固定为 `query-params` 的 `table-name.column-name`\r\n- 如果 `Query Params` 非空但当前问题没有提供或无法推导真实参数值，不要调用，直接说明缺少哪个 `table-name.column-name`\r\n- 如果 `Query Params` 为“无”，不要生成 `params`\r\n\r\n### DataSourceBinding 到底层 HTTP body 的映射说明\r\n\r\n- 兼容 schema 会由下游 SDK / 代理转换为底层请求体\r\n- 下游会先通过 `GetMetadata2` 使用 `page-name + cell-location` 定位运行态数据源 GUID，再调用 `CalcBindingDataSource`\r\n- 等价映射关系如下：\r\n  - `CommandId <- GetMetadata2 运行态数据源 GUID`\r\n  - `Params <- query-params 顺序匹配运行态 Params，取值来自 jsonBody.params`\r\n  - 返回行中的 `response-name` 会被映射为对应 `column-name`\r\n- 不要直接调用 `GetMetadata2` 或手工拼接底层 `CommandId`\r\n\r\n## 额外规则\r\n\r\n- 如果 bindings 文档已经给出真实 `column-name`，必须保留真实列名，不要用 `guid` 顶替\r\n- 只有在文档没有列名、但调试链路必须先跑通时，才允许临时用 `guid` 兼作 `column-name`，并且必须明确说明这是降级方案\r\n- 生成 CLI 命令前，先在答案里或推理里完成这 4 个定值：`applicationName`、`commandName`、`provider`、`SessionId`\r\n- 任一值不能唯一确定时，不要继续拼命令\r\n- 需要底层 ID 时，先用本体定义的查询或绑定把展示文本解析成真实 ID，再发正式请求\r\n- JSON 字符串统一双引号；shell 转义按当前 shell 处理\r\n- 遇到 `invalid JSON param for body` 时，先检查 JSON 和引号\r\n- 本体标成行 ID 的字段默认按 `int` 处理\r\n- 不要只看字段名猜含义\n\nFile v0.1.2:skill-card.md\n\n## Description: <br>\nInvokes AIOS, OpenClaw, and Forguncy business-system services after reading ontology definitions and uses live results for follow-up analysis or actions. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[kadbbz](https://clawhub.ai/user/kadbbz) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and operators use this skill to query live AIOS, OpenClaw, and Forguncy business data, invoke ontology-defined commands or bindings, and continue analysis from actual system responses. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill can query or change live business data through broad implicit AIOS business-system calls. <br>\nMitigation: Use it only in trusted AIOS environments with explicit user confirmation for writes or deletes, clear authorization checks, and a fixed SessionId source. <br>\n\n\n## Reference(s): <br>\n- [AIOS Application Invocation Rules](references/invoke-rules.md) <br>\n- [AIOS Data Processing Rules](references/data-processing.md) <br>\n- [ClawHub skill page](https://clawhub.ai/kadbbz/aios-call-app-service) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, shell commands, guidance] <br>\n**Output Format:** [Markdown with inline shell commands and structured summaries] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May include CLI invocation details, ontology sources used, assumptions, missing fields, skipped data, and uncertainty notes.] <br>\n\n## Skill Version(s): <br>\n0.1.2 (source: server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v0.1.2:agents/openai.yaml\n\ninterface:\n  display_name: \"AIOS App Service\"\n  short_description: \"Read ontology first, then invoke AIOS app services\"\n  default_prompt: \"Use $aios-call-app-service to read /var/aios/data/ontology, invoke AIOS application interfaces, and continue from live results.\"\n\npolicy:\n  allow_implicit_invocation: true\n\nArchive v0.1.1: 7 files, 9265 bytes\n\nFiles: agents/openai.yaml (311b), readme.md (1127b), references/data-processing.md (875b), references/invoke-rules.md (9604b), skill-card.md (2443b), SKILL.md (4408b), _meta.json (140b)\n\nFile v0.1.1:SKILL.md\n\n---\r\nname: aios-call-app-service\r\ndescription: 当请求依赖 AIOS、OpenClaw、Forguncy 等业务系统的实时数据、接口调用或业务操作时，优先使用本技能。先读取 AIOS_ONTOLOGY_DIR 指向的本体目录，再确认应用、命令、参数结构和枚举映射，通过 aios-apps-invoke-cli 发起调用，并以实时返回结果作为后续分析和执行依据。遇到 aios-mqtt-channel 会话时，把当前会话的 SessionId 视为唯一合法会话标识；它来自当前会话上下文中的 `sessionId`。\r\n---\r\n\r\n# 系统调用技能\r\n\r\n当用户的问题不能只靠通用知识回答，而是必须查询、调用或操作业务系统时，应优先使用本技能。\r\n\r\n## 优先触发场景\r\n\r\n- 查询业务系统中的实时数据\r\n- 调用系统接口\r\n- 在系统内执行新增、修改、提交、审核、删除等动作\r\n- 需要基于真实系统返回结果继续分析或决策\r\n\r\n## 必须遵循的流程\r\n\r\n1. 在发起调用前，先读取环境变量 `AIOS_ONTOLOGY_DIR` 指向的本体目录。\r\n  - 禁止缓存、记忆或复用之前读取的本体内容。\r\n  - 每次调用都要重新读取，确保使用最新的本体信息。\r\n2. 以本体为以下信息的唯一事实来源：\r\n  - 应用名\r\n  - 命令名或绑定端点\r\n  - HTTP 方法\r\n  - 请求体结构\r\n  - 枚举值映射\r\n  - 返回字段含义\r\n3. 只允许通过 `aios-apps-invoke-cli` 调用业务系统接口。\r\n4. 实时调用结果的优先级高于记忆、缓存、历史对话和猜测。\r\n5. 只有在拿到 CLI 返回结果后，才能继续做后续分析、汇总和结论输出。\r\n\r\n## 最小执行清单\r\n\r\n每次调用前按这个顺序检查：\r\n\r\n1. 读取相关 ontology 文档。\r\n2. 根据文档，确认本次是 `servercommand` 还是 `binding`。\r\n3. 根据文档，确认 `applicationName`。\r\n4. 根据文档，确认 `commandName`。\r\n5. 根据文档，确认 `provider`。\r\n6. 通过会话上下文的 `topic_id` ，确认 `SessionId`。\r\n7. 生成 `jsonBody`，并检查确认合法性。\r\n8. 生成并执行唯一一条 CLI 命令。\r\n\r\n任一步缺失，都停止并说明缺口。\r\n\r\n## 会话标识读取规则\r\n\r\n- `aios-apps-invoke-cli -s` 只接受当前会话的 `SessionId`，你只能从当前会话上下文中的 `topic_id` 读取到该值。\r\n- `SessionId` 以 `s-` 开头，后面跟30个数字，不要忽略开头的 `s-`。\r\n- 如果当前上下文没有 `topic_id`，就视为运行时缺参，必须停止调用并明确说明缺口。\r\n\r\n## 约束要求\r\n\r\n- `AIOS_ONTOLOGY_DIR` 视为当前事实源。\r\n- 当前 CLI 只支持 `provider=hzg`，如果出现其他 provider，直接说明当前运行链路不支持，不要猜测替代方案。\r\n- 调用 CLI 时，`-s` 传入当前会话的 `SessionId` （上下文中的 `topic_id`）。\r\n  - 不能臆造，不能复用其他会话的 `SessionId` 。\r\n  - 不得使用提示词中的 `SessionId` 、 `chat_id` 、 `message_id` 或其他字段代替。\r\n- 不要臆造接口名、请求字段、枚举 ID 或 `provider`。\r\n- 不要绕过 CLI 自行编写 API 调用脚本。\r\n- 只有拿到 CLI 结果后，才允许用 Python 做二次分析和计算。\r\n- 如果本体不完整、`provider` 未知或运行时上下文缺失，应明确说明阻塞点，不要猜测。\r\n\r\n## 降歧义规则\r\n\r\n- `binding` 一律使用规范命令名，不用别名：\r\n  - `GetTableDataWithOffset`\r\n  - `GetComboBindingOptions`\r\n  - `CalcBindingDataSource`\r\n- `servercommand` 的 `jsonBody` 严格按 ontology 的 `Input Arguments` 生成。\r\n- `binding` 的 `jsonBody` 严格按 [references/invoke-rules.md](references/invoke-rules.md) 中的兼容 schema 生成。\r\n- 不要把底层 HTTP 原始 body 直接塞进 `binding` 的 `jsonBody`，除非规则文件明确允许。\r\n- 同一个问题里如果存在多个可疑 ontology 条目，先说明候选项并停止，不要自选一个继续调用。\r\n\r\n## 开始前必须阅读\r\n\r\n- 调用前需要阅读：[references/invoke-rules.md](references/invoke-rules.md)\r\n- 调用后，需要做筛选、聚合、比较、排序或时间分析时，再阅读： [references/data-processing.md](references/data-processing.md)\r\n\r\n## 输出要求\r\n\r\n- 说明本次调用依据了哪些本体文件或条目。\r\n- 说明使用的是 `servercommand` 还是 `binding`。\r\n- 说明任何假设、缺失字段、跳过的数据或不确定性。\n\nFile v0.1.1:readme.md\n\n# aios-call-app-service\r\n\r\n这是一个面向 AIOS / OpenClaw / Forguncy 场景的业务调用技能，用于处理依赖实时业务数据、系统接口、绑定配置或业务动作的请求。\r\n\r\n## 适用场景\r\n\r\n- 查询实时业务数据\r\n- 调用本体中定义的业务命令\r\n- 使用绑定接口读取系统数据\r\n- 需要基于真实系统返回结果继续分析\r\n- 用户要求直接在系统中执行操作\r\n\r\n## 调用原则\r\n\r\n- 先读取 `AIOS_ONTOLOGY_DIR`\r\n- 再确认应用、命令、参数结构和枚举映射\r\n- 统一通过 `aios-apps-invoke-cli` 发起调用\r\n- 当前 CLI 只支持 `provider=hzg`\r\n- 当前会话标识使用 `SessionId`\r\n- 调用 `aios-apps-invoke-cli` 时：\r\n  - `-p` 对应 `provider`\r\n  - `-s` 对应 `SessionId`\r\n- `binding` 参数优先从 `binding-*.md` 的 `CandidatesBindings`、`TableBindings`、`DataSourceBindings` 文档生成兼容 schema\r\n- `servercommand` 参数严格按 ontology 的 `Input Arguments` 生成\r\n\r\n## 相关文档\r\n\r\n- 主说明见 `SKILL.md`\r\n- 调用细则见 `references/invoke-rules.md`\r\n- 数据处理规则见 `references/data-processing.md`\n\nFile v0.1.1:_meta.json\n\n{\n  \"ownerId\": \"kn74st1pqb0wkrbhpw4yh0kb2982c201\",\n  \"slug\": \"aios-call-app-service\",\n  \"version\": \"0.1.1\",\n  \"publishedAt\": 1781778530113\n}\n\nFile v0.1.1:references/data-processing.md\n\n# AIOS 数据处理规则\n\n只用于 `aios-apps-invoke-cli` 的真实返回结果。\n\n## 何时用 Python\n\n出现以下任一需求就用 Python：\n\n- 统计、求和、计数、平均、中位数\n- 分组、聚合、排序、排名、去重\n- 跨多条记录筛选\n- 比率、百分比、环比、同比\n- 时间窗口分析\n- 任意派生计算\n\n仅在“读取单条记录的单个简单字段且不做计算/比较”时可直接读值。\n\n## 最低流程\n\n1. 读取 JSON。\n2. 校验结构和必需字段。\n3. 处理 `null`、空字符串、缺失值、异常值。\n4. 数值先校验类型再计算。\n5. 日期数值按 OADate 转换后再分析。\n\nOADate：\n\n- `datetime = 1899-12-30 + OADate`\n\n## 输出必须说明\n\n- 用了哪些字段\n- 做了哪些过滤、分组或计算\n- 实际处理了多少条记录\n- 是否跳过无效数据\n- 是否存在不确定性\n\nFile v0.1.1:references/invoke-rules.md\n\n# AIOS 应用调用细则\r\n\r\n## 命令\r\n\r\n```bash\r\naios-apps-invoke-cli servercommand <applicationName> <commandName> <method> [jsonBody] -p <provider> -s <SessionId>\r\naios-apps-invoke-cli binding <applicationName> <commandName> <method> <jsonBody> -p <provider> -s <SessionId>\r\naios-apps-invoke-cli status\r\n```\r\n\r\n全局命令不可用时，可使用 `npx aios-apps-invoke-cli ...`。\r\n\r\n## 必守规则\r\n\r\n- `-p/-s` 分别来自 `provider`、当前 `SessionId` （上下文中的 `topic_id` ）\r\n- 当前 CLI 只支持 `provider=hzg`\r\n- 如果 ontology、用户或上下文指向其他 provider，直接停止并说明当前运行链路不支持\r\n- 缺任意运行时参数都不要猜，直接停止并说明缺口\r\n- `applicationName` 取自当前使用的 ontology 所在应用目录名；如果存在多个候选应用目录，直接停止并说明冲突\r\n- 业务命令用 `servercommand`\r\n- 内置数据服务用 `binding`\r\n- 本体给了绑定端点时，优先按本体调用：\r\n- `GetTableDataWithOffset -> TableBinding`\r\n- `GetComboBindingOptions -> CandidatesBinding`\r\n- `CalcBindingDataSource -> DataSourceBindings`\r\n- `binding` 一律使用规范命令名，不使用 `TableBinding`、`CandidatesBinding` 等别名作为 CLI 入参\r\n- 带 `[HOB_EXCLUDE]` 的命令一律不调用\r\n\r\n## 请求体规则\r\n\r\n- `servercommand`：`commandName` 用本体命令名，`method` 用本体 `verb`，`jsonBody` 严格按 `Input Arguments`\r\n- `servercommand` 不新增字段，不遗漏字段，不修改字段类型\r\n- CLI 请求体只发送当前链路实际需要的 OpenClaw 会话字段：`SessionId`\r\n- `binding`：优先根据 ontology 中的 `*-bindings.md` 文档生成兼容 schema，不要手写或反推底层 HTTP 原始 body\r\n- `DataSourceBindings` 一律用 `binding` 命令，`commandName` 固定为 `CalcBindingDataSource`\r\n- 如果 `binding` 和 `servercommand` 都能勉强解释当前需求，优先按 ontology 明确标注的端点类型执行；ontology 没标明时停止，不要猜\r\n\r\n### Binding 文档取数规则\r\n\r\n- `TableBinding` 优先读取形如 `xxx-bindings.md` 的 `TableBindings` 段落\r\n- `CandidatesBinding` 优先读取形如 `xxx-bindings.md` 的 `CandidatesBindings` 段落\r\n- `TableBinding` 从文档中提取：\r\n  - `page-name`\r\n  - `view-name`\r\n  - `list-view-location`\r\n  - `table-name`\r\n  - 列表格中的每一行 `column-name + guid`\r\n- 如果 `TableBindings` 文档缺少上述任一必需字段，不要猜，直接停止并说明缺口\r\n- `CandidatesBinding` 从文档中提取：\r\n  - `page-name`\r\n  - `TableName`\r\n  - `column-type=ID` 对应的 `ColumnName`\r\n  - `column-type=ID` 对应的 `GUID`\r\n  - `column-type=text` 对应的 `ColumnName`\r\n  - `column-type=text` 对应的 `GUID`\r\n- 如果 `CandidatesBindings` 文档缺少 `ID` 列或 `text` 列，不要猜，直接停止并说明缺口\r\n- `TableBinding` 和 `CandidatesBinding` 各自只读取自己所属段落，不要跨段落拼字段\r\n- `DataSourceBindings` 优先读取形如 `binding-xxx.md` 的 `DataSourceBindings` 段落\r\n- `DataSourceBindings` 从文档中提取：\r\n  - `page-name`\r\n  - `cell-location`\r\n  - `table-name`\r\n  - `Columns` 表中的每一行 `display-name + table-name + column-name`\r\n  - `Query Params` 表中的每一行 `table-name + column-name`\r\n- 如果 `DataSourceBindings` 存在多组候选，且当前上下文无法唯一定位具体数据源，直接停止并说明冲突\r\n\r\n### TableBinding 兼容 schema\r\n\r\n- `GetTableDataWithOffset` 的 `jsonBody` 优先生成如下兼容结构：\r\n\r\n```json\r\n{\r\n  \"columns\": [\r\n    {\r\n      \"column-name\": \"编号\",\r\n      \"guid\": \"3261feec-650a-421c-b05f-7ea8b1bed3e5\"\r\n    }\r\n  ],\r\n  \"table-name\": \"物品表\",\r\n  \"view-name\": \"物品_库存物品信息表格\",\r\n  \"list-view-location\": \"物品_库存|物品信息表格\",\r\n  \"page-name\": \"物品_库存\",\r\n  \"target-page\": 1,\r\n  \"page-limit-row-count\": 0\r\n}\r\n```\r\n\r\n- 生成规则：\r\n  - `columns <- bindings 文档表格中的 column-name + guid`\r\n  - `table-name <- table-name`\r\n  - `view-name <- view-name`\r\n  - `list-view-location <- list-view-location`\r\n  - `page-name <- page-name`\r\n  - `target-page <- 1`\r\n  - `page-limit-row-count <- 0`\r\n- 如果已经拿到真实分页参数，可覆盖：\r\n  - `target-page`\r\n  - `page-limit-row-count`\r\n- `columns` 保持 ontology 文档中的原顺序，不要重排\r\n\r\n### TableBinding 到底层 HTTP body 的映射说明\r\n\r\n- 兼容 schema 会由下游 SDK / 代理转换为底层请求体\r\n- 等价映射关系如下：\r\n  - `bindingInfos <- columns[].guid`\r\n  - `currentRowInfo.currentTable <- table-name`\r\n  - `currentRowInfo.viewname <- view-name`\r\n  - `currentRowInfo.listviewLocation <- list-view-location`\r\n  - `offsetConditionInfo.targetPage <- target-page`\r\n  - `offsetConditionInfo.pageLimitRowCount <- page-limit-row-count`\r\n  - `pageName <- page-name`\r\n- 以下字段由下游固定补齐，不需要在 ontology 文档中查找，也不要手工追加到兼容 schema：\r\n  - `demandRowCount=0`\r\n  - `currentDataLength=0`\r\n  - `needRowVersion=true`\r\n  - `editorDataInfos=null`\r\n  - `sortCommandID=null`\r\n  - `orderByInfo=null`\r\n  - `columnFilterQueries=null`\r\n  - `totalRowBindingInfos=[]`\r\n\r\n### CandidatesBinding 兼容 schema\r\n\r\n- `GetComboBindingOptions` 的 `jsonBody` 优先生成如下兼容结构：\r\n\r\n```json\r\n{\r\n  \"id-column\": {\r\n    \"column-name\": \"ID\",\r\n    \"guid\": \"9c641cb4-c3a3-44ea-ad5e-495c9a5d3544\"\r\n  },\r\n  \"text-column\": {\r\n    \"column-name\": \"编号\",\r\n    \"guid\": \"41baffe3-3982-4237-bf62-b8d95ba76218\"\r\n  },\r\n  \"table-name\": \"物品表\",\r\n  \"page-name\": \"采购单填写\"\r\n}\r\n```\r\n\r\n- 生成规则：\r\n  - `id-column.column-name <- column-type=ID` 对应的 `ColumnName`\r\n  - `id-column.guid <- column-type=ID` 对应的 `GUID`\r\n  - `text-column.column-name <- column-type=text` 对应的 `ColumnName`\r\n  - `text-column.guid <- column-type=text` 对应的 `GUID`\r\n  - `table-name <- TableName`\r\n  - `page-name <- page-name`\r\n- 如果 `CandidatesBindings` 里存在多组候选绑定，且当前上下文无法唯一定位具体组件，直接停止并说明冲突\r\n\r\n### CandidatesBinding 到底层 HTTP body 的映射说明\r\n\r\n- 兼容 schema 会由下游 SDK / 代理转换为底层请求体\r\n- 等价映射关系如下：\r\n  - `tableName <- table-name`\r\n  - `valueColumnBindingInfo <- id-column.guid`\r\n  - `displayColumnBindingInfo <- text-column.guid`\r\n  - `pageName <- page-name`\r\n- 以下字段由下游固定补齐，不需要在 ontology 文档中查找，也不要手工追加到兼容 schema：\r\n  - `itemQuery=null`\r\n  - `offset=null`\r\n  - `cacheSettingID=null`\r\n\r\n### DataSourceBinding 兼容 schema\r\n\r\n- `CalcBindingDataSource` 的 `jsonBody` 优先生成如下兼容结构：\r\n\r\n```json\r\n{\r\n  \"page-name\": \"出入库单填写\",\r\n  \"cell-location\": \"1,0\",\r\n  \"table-name\": \"出入库类型表\",\r\n  \"columns\": [\r\n    {\r\n      \"response-name\": \"value\",\r\n      \"table-name\": \"出入库类型表\",\r\n      \"column-name\": \"ID\"\r\n    },\r\n    {\r\n      \"response-name\": \"label\",\r\n      \"table-name\": \"出入库类型表\",\r\n      \"column-name\": \"名称\"\r\n    }\r\n  ],\r\n  \"query-params\": [\r\n    {\r\n      \"table-name\": \"出入库类型表\",\r\n      \"column-name\": \"出入库标记\"\r\n    }\r\n  ],\r\n  \"params\": {\r\n    \"出入库类型表.出入库标记\": \"入库\"\r\n  }\r\n}\r\n```\r\n\r\n- 生成规则：\r\n  - `page-name <- binding 文档 Information.page-name`\r\n  - `cell-location <- DataSourceBindings 段落中的 cell-location`\r\n  - `table-name <- DataSourceBindings 段落中的 table-name`\r\n  - `columns[].response-name <- Columns 表中的 display-name`\r\n  - `columns[].table-name <- Columns 表中的 table-name`\r\n  - `columns[].column-name <- Columns 表中的 column-name`\r\n  - `query-params[].table-name <- Query Params 表中的 table-name`\r\n  - `query-params[].column-name <- Query Params 表中的 column-name`\r\n  - `params` 只有在已知真实筛选值时生成，key 固定为 `query-params` 的 `table-name.column-name`\r\n- 如果 `Query Params` 非空但当前问题没有提供或无法推导真实参数值，不要调用，直接说明缺少哪个 `table-name.column-name`\r\n- 如果 `Query Params` 为“无”，不要生成 `params`\r\n\r\n### DataSourceBinding 到底层 HTTP body 的映射说明\r\n\r\n- 兼容 schema 会由下游 SDK / 代理转换为底层请求体\r\n- 下游会先通过 `GetMetadata2` 使用 `page-name + cell-location` 定位运行态数据源 GUID，再调用 `CalcBindingDataSource`\r\n- 等价映射关系如下：\r\n  - `CommandId <- GetMetadata2 运行态数据源 GUID`\r\n  - `Params <- query-params 顺序匹配运行态 Params，取值来自 jsonBody.params`\r\n  - 返回行中的 `response-name` 会被映射为对应 `column-name`\r\n- 不要直接调用 `GetMetadata2` 或手工拼接底层 `CommandId`\r\n\r\n## 额外规则\r\n\r\n- 如果 bindings 文档已经给出真实 `column-name`，必须保留真实列名，不要用 `guid` 顶替\r\n- 只有在文档没有列名、但调试链路必须先跑通时，才允许临时用 `guid` 兼作 `column-name`，并且必须明确说明这是降级方案\r\n- 生成 CLI 命令前，先在答案里或推理里完成这 4 个定值：`applicationName`、`commandName`、`provider`、`SessionId`\r\n- 任一值不能唯一确定时，不要继续拼命令\r\n- 需要底层 ID 时，先用本体定义的查询或绑定把展示文本解析成真实 ID，再发正式请求\r\n- JSON 字符串统一双引号；shell 转义按当前 shell 处理\r\n- 遇到 `invalid JSON param for body` 时，先检查 JSON 和引号\r\n- 本体标成行 ID 的字段默认按 `int` 处理\r\n- 不要只看字段名猜含义\n\nFile v0.1.1:skill-card.md\n\n## Description: <br>\nReads AIOS ontology, builds validated aios-apps-invoke-cli calls for AIOS, OpenClaw, and Forguncy business systems, and uses live results for follow-up analysis. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[kadbbz](https://clawhub.ai/user/kadbbz) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and operators use this skill to query live AIOS, OpenClaw, and Forguncy data, invoke ontology-defined commands, use binding interfaces, and continue analysis from real system responses. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill can perform live business-system changes such as write, delete, submit, or approval actions. <br>\nMitigation: Require user or host-agent confirmation before every write, delete, submit, or approval action. <br>\nRisk: Broad implicit invocation can call AIOS business systems when ontology access and CLI execution are available. <br>\nMitigation: Install only in environments where AIOS ontology access and aios-apps-invoke-cli calls are intended. <br>\nRisk: Session identifier guidance is inconsistent across the artifact and could route a live operation to the wrong session. <br>\nMitigation: Resolve whether sessionId or topic_id is the authoritative session source before enabling live operations, and reject missing or invalid session identifiers. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/kadbbz/aios-call-app-service) <br>\n- [AIOS application invocation rules](references/invoke-rules.md) <br>\n- [AIOS data processing rules](references/data-processing.md) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Shell commands, Markdown, Guidance] <br>\n**Output Format:** [Markdown with inline shell commands and JSON request bodies] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May include validated aios-apps-invoke-cli commands, live result summaries, assumptions, missing-field blockers, skipped-data notes, and post-processing details.] <br>\n\n## Skill Version(s): <br>\n0.1.1 (source: server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v0.1.1:agents/openai.yaml\n\ninterface:\n  display_name: \"AIOS App Service\"\n  short_description: \"Read ontology first, then invoke AIOS app services\"\n  default_prompt: \"Use $aios-call-app-service to read /var/aios/data/ontology, invoke AIOS application interfaces, and continue from live results.\"\n\npolicy:\n  allow_implicit_invocation: true\n\nArchive v0.1.0: 7 files, 9118 bytes\n\nFiles: agents/openai.yaml (311b), readme.md (1097b), references/data-processing.md (875b), references/invoke-rules.md (9375b), skill-card.md (2196b), SKILL.md (4237b), _meta.json (140b)\n\nFile v0.1.0:SKILL.md\n\n---\nname: aios-call-app-service\ndescription: 当请求依赖 AIOS、OpenClaw、Forguncy 等业务系统的实时数据、接口调用或业务操作时，优先使用本技能。先读取 AIOS_ONTOLOGY_DIR 指向的本体目录，再确认应用、命令、参数结构和枚举映射，通过 aios-apps-invoke-cli 发起调用，并以实时返回结果作为后续分析和执行依据。遇到 aios-mqtt-channel 会话时，把当前会话的 SessionId 视为唯一合法会话标识；它来自当前会话上下文中的 `sessionId`。\n---\n\n# 系统调用技能\n\n当用户的问题不能只靠通用知识回答，而是必须查询、调用或操作业务系统时，应优先使用本技能。\n\n## 优先触发场景\n\n- 查询业务系统中的实时数据\n- 调用系统接口\n- 在系统内执行新增、修改、提交、审核、删除等动作\n- 需要基于真实系统返回结果继续分析或决策\n\n## 必须遵循的流程\n\n1. 在发起调用前，先读取环境变量 `AIOS_ONTOLOGY_DIR` 指向的本体目录。\n  - 禁止缓存、记忆或复用之前读取的本体内容。\n  - 每次调用都要重新读取，确保使用最新的本体信息。\n2. 以本体为以下信息的唯一事实来源：\n  - 应用名\n  - 命令名或绑定端点\n  - HTTP 方法\n  - 请求体结构\n  - 枚举值映射\n  - 返回字段含义\n3. 只允许通过 `aios-apps-invoke-cli` 调用业务系统接口。\n4. 实时调用结果的优先级高于记忆、缓存、历史对话和猜测。\n5. 只有在拿到 CLI 返回结果后，才能继续做后续分析、汇总和结论输出。\n\n## 最小执行清单\n\n每次调用前按这个顺序检查：\n\n1. 读取相关 ontology 文档。\n2. 根据文档，确认本次是 `servercommand` 还是 `binding`。\n3. 根据文档，确认 `applicationName`。\n4. 根据文档，确认 `commandName`。\n5. 根据文档，确认 `provider`。\n6. 通过会话上下文的 `topic_id` ，确认 `SessionId`。\n7. 生成 `jsonBody`，并检查确认合法性。\n8. 生成并执行唯一一条 CLI 命令。\n\n任一步缺失，都停止并说明缺口。\n\n## 会话标识读取规则\n\n- `aios-apps-invoke-cli -s` 只接受当前会话的 `SessionId`，你只能从当前会话上下文中的 `topic_id` 读取到该值。\n- 如果当前上下文没有 `topic_id`，就视为运行时缺参，必须停止调用并明确说明缺口。\n\n## 约束要求\n\n- `AIOS_ONTOLOGY_DIR` 视为当前事实源。\n- 当前 CLI 只支持 `provider=hzg`，如果出现其他 provider，直接说明当前运行链路不支持，不要猜测替代方案。\n- 调用 CLI 时，`-s` 传入当前会话的 `SessionId` （上下文中的 `topic_id`）。\n  - 不能臆造，不能复用其他会话的 `SessionId` 。\n  - 不得使用提示词中的 `SessionId` 、 `chat_id` 、 `message_id` 或其他字段代替。\n- 不要臆造接口名、请求字段、枚举 ID 或 `provider`。\n- 不要绕过 CLI 自行编写 API 调用脚本。\n- 只有拿到 CLI 结果后，才允许用 Python 做二次分析和计算。\n- 如果本体不完整、`provider` 未知或运行时上下文缺失，应明确说明阻塞点，不要猜测。\n\n## 降歧义规则\n\n- `binding` 一律使用规范命令名，不用别名：\n  - `GetTableDataWithOffset`\n  - `GetComboBindingOptions`\n  - `CalcBindingDataSource`\n- `servercommand` 的 `jsonBody` 严格按 ontology 的 `Input Arguments` 生成。\n- `binding` 的 `jsonBody` 严格按 [references/invoke-rules.md](references/invoke-rules.md) 中的兼容 schema 生成。\n- 不要把底层 HTTP 原始 body 直接塞进 `binding` 的 `jsonBody`，除非规则文件明确允许。\n- 同一个问题里如果存在多个可疑 ontology 条目，先说明候选项并停止，不要自选一个继续调用。\n\n## 开始前必须阅读\n\n- 调用前需要阅读：[references/invoke-rules.md](references/invoke-rules.md)\n- 调用后，需要做筛选、聚合、比较、排序或时间分析时，再阅读： [references/data-processing.md](references/data-processing.md)\n\n## 输出要求\n\n- 说明本次调用依据了哪些本体文件或条目。\n- 说明使用的是 `servercommand` 还是 `binding`。\n- 说明任何假设、缺失字段、跳过的数据或不确定性。\n\nFile v0.1.0:readme.md\n\n# aios-call-app-service\n\n这是一个面向 AIOS / OpenClaw / Forguncy 场景的业务调用技能，用于处理依赖实时业务数据、系统接口、绑定配置或业务动作的请求。\n\n## 适用场景\n\n- 查询实时业务数据\n- 调用本体中定义的业务命令\n- 使用绑定接口读取系统数据\n- 需要基于真实系统返回结果继续分析\n- 用户要求直接在系统中执行操作\n\n## 调用原则\n\n- 先读取 `AIOS_ONTOLOGY_DIR`\n- 再确认应用、命令、参数结构和枚举映射\n- 统一通过 `aios-apps-invoke-cli` 发起调用\n- 当前 CLI 只支持 `provider=hzg`\n- 当前会话标识使用 `SessionId`\n- 调用 `aios-apps-invoke-cli` 时：\n  - `-p` 对应 `provider`\n  - `-s` 对应 `SessionId`\n- `binding` 参数优先从 `binding-*.md` 的 `CandidatesBindings`、`TableBindings`、`DataSourceBindings` 文档生成兼容 schema\n- `servercommand` 参数严格按 ontology 的 `Input Arguments` 生成\n\n## 相关文档\n\n- 主说明见 `SKILL.md`\n- 调用细则见 `references/invoke-rules.md`\n- 数据处理规则见 `references/data-processing.md`\n\nFile v0.1.0:_meta.json\n\n{\n  \"ownerId\": \"kn74st1pqb0wkrbhpw4yh0kb2982c201\",\n  \"slug\": \"aios-call-app-service\",\n  \"version\": \"0.1.0\",\n  \"publishedAt\": 1781100231136\n}\n\nFile v0.1.0:references/data-processing.md\n\n# AIOS 数据处理规则\n\n只用于 `aios-apps-invoke-cli` 的真实返回结果。\n\n## 何时用 Python\n\n出现以下任一需求就用 Python：\n\n- 统计、求和、计数、平均、中位数\n- 分组、聚合、排序、排名、去重\n- 跨多条记录筛选\n- 比率、百分比、环比、同比\n- 时间窗口分析\n- 任意派生计算\n\n仅在“读取单条记录的单个简单字段且不做计算/比较”时可直接读值。\n\n## 最低流程\n\n1. 读取 JSON。\n2. 校验结构和必需字段。\n3. 处理 `null`、空字符串、缺失值、异常值。\n4. 数值先校验类型再计算。\n5. 日期数值按 OADate 转换后再分析。\n\nOADate：\n\n- `datetime = 1899-12-30 + OADate`\n\n## 输出必须说明\n\n- 用了哪些字段\n- 做了哪些过滤、分组或计算\n- 实际处理了多少条记录\n- 是否跳过无效数据\n- 是否存在不确定性\n\nFile v0.1.0:references/invoke-rules.md\n\n# AIOS 应用调用细则\n\n## 命令\n\n```bash\naios-apps-invoke-cli servercommand <applicationName> <commandName> <method> [jsonBody] -p <provider> -s <SessionId>\naios-apps-invoke-cli binding <applicationName> <commandName> <method> <jsonBody> -p <provider> -s <SessionId>\naios-apps-invoke-cli status\n```\n\n全局命令不可用时，可使用 `npx aios-apps-invoke-cli ...`。\n\n## 必守规则\n\n- `-p/-s` 分别来自 `provider`、当前 `SessionId` （上下文中的 `topic_id` ）\n- 当前 CLI 只支持 `provider=hzg`\n- 如果 ontology、用户或上下文指向其他 provider，直接停止并说明当前运行链路不支持\n- 缺任意运行时参数都不要猜，直接停止并说明缺口\n- `applicationName` 取自当前使用的 ontology 所在应用目录名；如果存在多个候选应用目录，直接停止并说明冲突\n- 业务命令用 `servercommand`\n- 内置数据服务用 `binding`\n- 本体给了绑定端点时，优先按本体调用：\n- `GetTableDataWithOffset -> TableBinding`\n- `GetComboBindingOptions -> CandidatesBinding`\n- `CalcBindingDataSource -> DataSourceBindings`\n- `binding` 一律使用规范命令名，不使用 `TableBinding`、`CandidatesBinding` 等别名作为 CLI 入参\n- 带 `[HOB_EXCLUDE]` 的命令一律不调用\n\n## 请求体规则\n\n- `servercommand`：`commandName` 用本体命令名，`method` 用本体 `verb`，`jsonBody` 严格按 `Input Arguments`\n- `servercommand` 不新增字段，不遗漏字段，不修改字段类型\n- CLI 请求体只发送当前链路实际需要的 OpenClaw 会话字段：`SessionId`\n- `binding`：优先根据 ontology 中的 `*-bindings.md` 文档生成兼容 schema，不要手写或反推底层 HTTP 原始 body\n- `DataSourceBindings` 一律用 `binding` 命令，`commandName` 固定为 `CalcBindingDataSource`\n- 如果 `binding` 和 `servercommand` 都能勉强解释当前需求，优先按 ontology 明确标注的端点类型执行；ontology 没标明时停止，不要猜\n\n### Binding 文档取数规则\n\n- `TableBinding` 优先读取形如 `xxx-bindings.md` 的 `TableBindings` 段落\n- `CandidatesBinding` 优先读取形如 `xxx-bindings.md` 的 `CandidatesBindings` 段落\n- `TableBinding` 从文档中提取：\n  - `page-name`\n  - `view-name`\n  - `list-view-location`\n  - `table-name`\n  - 列表格中的每一行 `column-name + guid`\n- 如果 `TableBindings` 文档缺少上述任一必需字段，不要猜，直接停止并说明缺口\n- `CandidatesBinding` 从文档中提取：\n  - `page-name`\n  - `TableName`\n  - `column-type=ID` 对应的 `ColumnName`\n  - `column-type=ID` 对应的 `GUID`\n  - `column-type=text` 对应的 `ColumnName`\n  - `column-type=text` 对应的 `GUID`\n- 如果 `CandidatesBindings` 文档缺少 `ID` 列或 `text` 列，不要猜，直接停止并说明缺口\n- `TableBinding` 和 `CandidatesBinding` 各自只读取自己所属段落，不要跨段落拼字段\n- `DataSourceBindings` 优先读取形如 `binding-xxx.md` 的 `DataSourceBindings` 段落\n- `DataSourceBindings` 从文档中提取：\n  - `page-name`\n  - `cell-location`\n  - `table-name`\n  - `Columns` 表中的每一行 `display-name + table-name + column-name`\n  - `Query Params` 表中的每一行 `table-name + column-name`\n- 如果 `DataSourceBindings` 存在多组候选，且当前上下文无法唯一定位具体数据源，直接停止并说明冲突\n\n### TableBinding 兼容 schema\n\n- `GetTableDataWithOffset` 的 `jsonBody` 优先生成如下兼容结构：\n\n```json\n{\n  \"columns\": [\n    {\n      \"column-name\": \"编号\",\n      \"guid\": \"3261feec-650a-421c-b05f-7ea8b1bed3e5\"\n    }\n  ],\n  \"table-name\": \"物品表\",\n  \"view-name\": \"物品_库存物品信息表格\",\n  \"list-view-location\": \"物品_库存|物品信息表格\",\n  \"page-name\": \"物品_库存\",\n  \"target-page\": 1,\n  \"page-limit-row-count\": 0\n}\n```\n\n- 生成规则：\n  - `columns <- bindings 文档表格中的 column-name + guid`\n  - `table-name <- table-name`\n  - `view-name <- view-name`\n  - `list-view-location <- list-view-location`\n  - `page-name <- page-name`\n  - `target-page <- 1`\n  - `page-limit-row-count <- 0`\n- 如果已经拿到真实分页参数，可覆盖：\n  - `target-page`\n  - `page-limit-row-count`\n- `columns` 保持 ontology 文档中的原顺序，不要重排\n\n### TableBinding 到底层 HTTP body 的映射说明\n\n- 兼容 schema 会由下游 SDK / 代理转换为底层请求体\n- 等价映射关系如下：\n  - `bindingInfos <- columns[].guid`\n  - `currentRowInfo.currentTable <- table-name`\n  - `currentRowInfo.viewname <- view-name`\n  - `currentRowInfo.listviewLocation <- list-view-location`\n  - `offsetConditionInfo.targetPage <- target-page`\n  - `offsetConditionInfo.pageLimitRowCount <- page-limit-row-count`\n  - `pageName <- page-name`\n- 以下字段由下游固定补齐，不需要在 ontology 文档中查找，也不要手工追加到兼容 schema：\n  - `demandRowCount=0`\n  - `currentDataLength=0`\n  - `needRowVersion=true`\n  - `editorDataInfos=null`\n  - `sortCommandID=null`\n  - `orderByInfo=null`\n  - `columnFilterQueries=null`\n  - `totalRowBindingInfos=[]`\n\n### CandidatesBinding 兼容 schema\n\n- `GetComboBindingOptions` 的 `jsonBody` 优先生成如下兼容结构：\n\n```json\n{\n  \"id-column\": {\n    \"column-name\": \"ID\",\n    \"guid\": \"9c641cb4-c3a3-44ea-ad5e-495c9a5d3544\"\n  },\n  \"text-column\": {\n    \"column-name\": \"编号\",\n    \"guid\": \"41baffe3-3982-4237-bf62-b8d95ba76218\"\n  },\n  \"table-name\": \"物品表\",\n  \"page-name\": \"采购单填写\"\n}\n```\n\n- 生成规则：\n  - `id-column.column-name <- column-type=ID` 对应的 `ColumnName`\n  - `id-column.guid <- column-type=ID` 对应的 `GUID`\n  - `text-column.column-name <- column-type=text` 对应的 `ColumnName`\n  - `text-column.guid <- column-type=text` 对应的 `GUID`\n  - `table-name <- TableName`\n  - `page-name <- page-name`\n- 如果 `CandidatesBindings` 里存在多组候选绑定，且当前上下文无法唯一定位具体组件，直接停止并说明冲突\n\n### CandidatesBinding 到底层 HTTP body 的映射说明\n\n- 兼容 schema 会由下游 SDK / 代理转换为底层请求体\n- 等价映射关系如下：\n  - `tableName <- table-name`\n  - `valueColumnBindingInfo <- id-column.guid`\n  - `displayColumnBindingInfo <- text-column.guid`\n  - `pageName <- page-name`\n- 以下字段由下游固定补齐，不需要在 ontology 文档中查找，也不要手工追加到兼容 schema：\n  - `itemQuery=null`\n  - `offset=null`\n  - `cacheSettingID=null`\n\n### DataSourceBinding 兼容 schema\n\n- `CalcBindingDataSource` 的 `jsonBody` 优先生成如下兼容结构：\n\n```json\n{\n  \"page-name\": \"出入库单填写\",\n  \"cell-location\": \"1,0\",\n  \"table-name\": \"出入库类型表\",\n  \"columns\": [\n    {\n      \"response-name\": \"value\",\n      \"table-name\": \"出入库类型表\",\n      \"column-name\": \"ID\"\n    },\n    {\n      \"response-name\": \"label\",\n      \"table-name\": \"出入库类型表\",\n      \"column-name\": \"名称\"\n    }\n  ],\n  \"query-params\": [\n    {\n      \"table-name\": \"出入库类型表\",\n      \"column-name\": \"出入库标记\"\n    }\n  ],\n  \"params\": {\n    \"出入库类型表.出入库标记\": \"入库\"\n  }\n}\n```\n\n- 生成规则：\n  - `page-name <- binding 文档 Information.page-name`\n  - `cell-location <- DataSourceBindings 段落中的 cell-location`\n  - `table-name <- DataSourceBindings 段落中的 table-name`\n  - `columns[].response-name <- Columns 表中的 display-name`\n  - `columns[].table-name <- Columns 表中的 table-name`\n  - `columns[].column-name <- Columns 表中的 column-name`\n  - `query-params[].table-name <- Query Params 表中的 table-name`\n  - `query-params[].column-name <- Query Params 表中的 column-name`\n  - `params` 只有在已知真实筛选值时生成，key 固定为 `query-params` 的 `table-name.column-name`\n- 如果 `Query Params` 非空但当前问题没有提供或无法推导真实参数值，不要调用，直接说明缺少哪个 `table-name.column-name`\n- 如果 `Query Params` 为“无”，不要生成 `params`\n\n### DataSourceBinding 到底层 HTTP body 的映射说明\n\n- 兼容 schema 会由下游 SDK / 代理转换为底层请求体\n- 下游会先通过 `GetMetadata2` 使用 `page-name + cell-location` 定位运行态数据源 GUID，再调用 `CalcBindingDataSource`\n- 等价映射关系如下：\n  - `CommandId <- GetMetadata2 运行态数据源 GUID`\n  - `Params <- query-params 顺序匹配运行态 Params，取值来自 jsonBody.params`\n  - 返回行中的 `response-name` 会被映射为对应 `column-name`\n- 不要直接调用 `GetMetadata2` 或手工拼接底层 `CommandId`\n\n## 额外规则\n\n- 如果 bindings 文档已经给出真实 `column-name`，必须保留真实列名，不要用 `guid` 顶替\n- 只有在文档没有列名、但调试链路必须先跑通时，才允许临时用 `guid` 兼作 `column-name`，并且必须明确说明这是降级方案\n- 生成 CLI 命令前，先在答案里或推理里完成这 4 个定值：`applicationName`、`commandName`、`provider`、`SessionId`\n- 任一值不能唯一确定时，不要继续拼命令\n- 需要底层 ID 时，先用本体定义的查询或绑定把展示文本解析成真实 ID，再发正式请求\n- JSON 字符串统一双引号；shell 转义按当前 shell 处理\n- 遇到 `invalid JSON param for body` 时，先检查 JSON 和引号\n- 本体标成行 ID 的字段默认按 `int` 处理\n- 不要只看字段名猜含义\n\nFile v0.1.0:skill-card.md\n\n## Description: <br>\nInvokes AIOS, OpenClaw, and Forguncy business-system interfaces by reading ontology files, constructing CLI calls, and using live results for follow-up analysis. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[kadbbz](https://clawhub.ai/user/kadbbz) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and operators use this skill when an agent must query live business data, invoke ontology-defined commands, read binding data, or perform business actions through AIOS/OpenClaw/Forguncy systems. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill can operate live business systems and may create, modify, approve, submit, or delete records. <br>\nMitigation: Install only where AIOS/OpenClaw service calls are expected and require explicit user confirmation before any write, approval, submission, or deletion. <br>\nRisk: Implicit invocation or session identifier ambiguity could route a call through unintended runtime context. <br>\nMitigation: Resolve the SessionId versus topic_id expectation before deployment and consider limiting implicit invocation to read-only calls. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/kadbbz/aios-call-app-service) <br>\n- [Invocation rules](artifact/references/invoke-rules.md) <br>\n- [Data processing rules](artifact/references/data-processing.md) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance] <br>\n**Output Format:** [Markdown with inline shell commands and JSON snippets] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Reads ontology from AIOS_ONTOLOGY_DIR and may invoke aios-apps-invoke-cli when required runtime context is available.] <br>\n\n## Skill Version(s): <br>\n0.1.0 (source: server release metadata) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v0.1.0:agents/openai.yaml\n\ninterface:\n  display_name: \"AIOS App Service\"\n  short_description: \"Read ontology first, then invoke AIOS app services\"\n  default_prompt: \"Use $aios-call-app-service to read /var/aios/data/ontology, invoke AIOS application interfaces, and continue from live results.\"\n\npolicy:\n  allow_implicit_invocation: true\n\nArchive v0.0.8: 7 files, 9274 bytes\n\nFiles: agents/openai.yaml (311b), readme.md (1127b), references/data-processing.md (875b), references/invoke-rules.md (9570b), skill-card.md (2565b), SKILL.md (4235b), _meta.json (140b)\n\nFile v0.0.8:SKILL.md\n\n---\r\nname: aios-call-app-service\r\ndescription: 当请求依赖 AIOS、OpenClaw、Forguncy 等业务系统的实时数据、接口调用或业务操作时，优先使用本技能。先读取 AIOS_ONTOLOGY_DIR 指向的本体目录，再确认应用、命令、参数结构和枚举映射，通过 aios-apps-invoke-cli 发起调用，并以实时返回结果作为后续分析和执行依据。遇到 aios-mqtt-channel 会话时，把当前会话的 SessionId 视为唯一合法会话标识；它来自当前会话上下文中的 `sessionId`。\r\n---\r\n\r\n# 系统调用技能\r\n\r\n当用户的问题不能只靠通用知识回答，而是必须查询、调用或操作业务系统时，应优先使用本技能。\r\n\r\n## 优先触发场景\r\n\r\n- 查询业务系统中的实时数据\r\n- 调用系统接口\r\n- 在系统内执行新增、修改、提交、审核、删除等动作\r\n- 需要基于真实系统返回结果继续分析或决策\r\n\r\n## 必须遵循的流程\r\n\r\n1. 在发起调用前，先读取环境变量 `AIOS_ONTOLOGY_DIR` 指向的本体目录。\r\n  - 禁止缓存、记忆或复用之前读取的本体内容。\r\n  - 每次调用都要重新读取，确保使用最新的本体信息。\r\n2. 以本体为以下信息的唯一事实来源：\r\n  - 应用名\r\n  - 命令名或绑定端点\r\n  - HTTP 方法\r\n  - 请求体结构\r\n  - 枚举值映射\r\n  - 返回字段含义\r\n3. 只允许通过 `aios-apps-invoke-cli` 调用业务系统接口。\r\n4. 实时调用结果的优先级高于记忆、缓存、历史对话和猜测。\r\n5. 只有在拿到 CLI 返回结果后，才能继续做后续分析、汇总和结论输出。\r\n\r\n## 最小执行清单\r\n\r\n每次调用前按这个顺序检查：\r\n\r\n1. 读取相关 ontology 文档。\r\n2. 根据文档，确认本次是 `servercommand` 还是 `binding`。\r\n3. 根据文档，确认 `applicationName`。\r\n4. 根据文档，确认 `commandName`。\r\n5. 根据文档，确认 `provider`。\r\n6. 通过会话上下文，确认 `SessionId`。\r\n7. 生成 `jsonBody`，并检查确认合法性。\r\n8. 生成并执行唯一一条 CLI 命令。\r\n\r\n任一步缺失，都停止并说明缺口。\r\n\r\n## 会话标识读取规则\r\n\r\n- `aios-apps-invoke-cli -s` 只接受当前会话的 `SessionId`，你只能从当前会话上下文中的 `topic_id` 读取到该值。\r\n- 如果当前上下文没有 `topic_id`，就视为运行时缺参，必须停止调用并明确说明缺口。\r\n\r\n## 约束要求\r\n\r\n- `AIOS_ONTOLOGY_DIR` 视为当前事实源。\r\n- 当前 CLI 只支持 `provider=hzg`，如果出现其他 provider，直接说明当前运行链路不支持，不要猜测替代方案。\r\n- 调用 CLI 时，`-s` 传入当前会话的 `SessionId`。\r\n  - 不能臆造，不能复用其他会话的 `SessionId` 。\r\n  - 不得使用提示词中的 `SessionId` 、 `chat_id` 、 `message_id` 或其他字段代替。\r\n- 不要臆造接口名、请求字段、枚举 ID 或 `provider`。\r\n- 不要绕过 CLI 自行编写 API 调用脚本。\r\n- 只有拿到 CLI 结果后，才允许用 Python 做二次分析和计算。\r\n- 如果本体不完整、`provider` 未知或运行时上下文缺失，应明确说明阻塞点，不要猜测。\r\n\r\n## 降歧义规则\r\n\r\n- `binding` 一律使用规范命令名，不用别名：\r\n  - `GetTableDataWithOffset`\r\n  - `GetComboBindingOptions`\r\n  - `CalcBindingDataSource`\r\n- `servercommand` 的 `jsonBody` 严格按 ontology 的 `Input Arguments` 生成。\r\n- `binding` 的 `jsonBody` 严格按 [references/invoke-rules.md](references/invoke-rules.md) 中的兼容 schema 生成。\r\n- 不要把底层 HTTP 原始 body 直接塞进 `binding` 的 `jsonBody`，除非规则文件明确允许。\r\n- 同一个问题里如果存在多个可疑 ontology 条目，先说明候选项并停止，不要自选一个继续调用。\r\n\r\n## 开始前必须阅读\r\n\r\n- [references/invoke-rules.md](references/invoke-rules.md)\r\n- 需要做筛选、聚合、比较、排序或时间分析时，再阅读 [references/data-processing.md](references/data-processing.md)\r\n\r\n## 输出要求\r\n\r\n- 说明本次调用依据了哪些本体文件或条目。\r\n- 说明使用的是 `servercommand` 还是 `binding`。\r\n- 说明任何假设、缺失字段、跳过的数据或不确定性。\n\nFile v0.0.8:readme.md\n\n# aios-call-app-service\r\n\r\n这是一个面向 AIOS / OpenClaw / Forguncy 场景的业务调用技能，用于处理依赖实时业务数据、系统接口、绑定配置或业务动作的请求。\r\n\r\n## 适用场景\r\n\r\n- 查询实时业务数据\r\n- 调用本体中定义的业务命令\r\n- 使用绑定接口读取系统数据\r\n- 需要基于真实系统返回结果继续分析\r\n- 用户要求直接在系统中执行操作\r\n\r\n## 调用原则\r\n\r\n- 先读取 `AIOS_ONTOLOGY_DIR`\r\n- 再确认应用、命令、参数结构和枚举映射\r\n- 统一通过 `aios-apps-invoke-cli` 发起调用\r\n- 当前 CLI 只支持 `provider=hzg`\r\n- 当前会话标识使用 `SessionId`\r\n- 调用 `aios-apps-invoke-cli` 时：\r\n  - `-p` 对应 `provider`\r\n  - `-s` 对应 `SessionId`\r\n- `binding` 参数优先从 `binding-*.md` 的 `CandidatesBindings`、`TableBindings`、`DataSourceBindings` 文档生成兼容 schema\r\n- `servercommand` 参数严格按 ontology 的 `Input Arguments` 生成\r\n\r\n## 相关文档\r\n\r\n- 主说明见 `SKILL.md`\r\n- 调用细则见 `references/invoke-rules.md`\r\n- 数据处理规则见 `references/data-processing.md`\n\nFile v0.0.8:_meta.json\n\n{\n  \"ownerId\": \"kn74st1pqb0wkrbhpw4yh0kb2982c201\",\n  \"slug\": \"aios-call-app-service\",\n  \"version\": \"0.0.8\",\n  \"publishedAt\": 1780998540682\n}\n\nFile v0.0.8:references/data-processing.md\n\n# AIOS 数据处理规则\n\n只用于 `aios-apps-invoke-cli` 的真实返回结果。\n\n## 何时用 Python\n\n出现以下任一需求就用 Python：\n\n- 统计、求和、计数、平均、中位数\n- 分组、聚合、排序、排名、去重\n- 跨多条记录筛选\n- 比率、百分比、环比、同比\n- 时间窗口分析\n- 任意派生计算\n\n仅在“读取单条记录的单个简单字段且不做计算/比较”时可直接读值。\n\n## 最低流程\n\n1. 读取 JSON。\n2. 校验结构和必需字段。\n3. 处理 `null`、空字符串、缺失值、异常值。\n4. 数值先校验类型再计算。\n5. 日期数值按 OADate 转换后再分析。\n\nOADate：\n\n- `datetime = 1899-12-30 + OADate`\n\n## 输出必须说明\n\n- 用了哪些字段\n- 做了哪些过滤、分组或计算\n- 实际处理了多少条记录\n- 是否跳过无效数据\n- 是否存在不确定性\n\nFile v0.0.8:references/invoke-rules.md\n\n# AIOS 应用调用细则\r\n\r\n## 命令\r\n\r\n```bash\r\naios-apps-invoke-cli servercommand <applicationName> <commandName> <method> [jsonBody] -p <provider> -s <SessionId>\r\naios-apps-invoke-cli binding <applicationName> <commandName> <method> <jsonBody> -p <provider> -s <SessionId>\r\naios-apps-invoke-cli status\r\n```\r\n\r\n全局命令不可用时，可使用 `npx aios-apps-invoke-cli ...`。\r\n\r\n## 必守规则\r\n\r\n- `-p/-s` 分别来自 `provider`、当前 `SessionId`\r\n- 当前 CLI 只支持 `provider=hzg`\r\n- 如果 ontology、用户或上下文指向其他 provider，直接停止并说明当前运行链路不支持\r\n- 缺任意运行时参数都不要猜，直接停止并说明缺口\r\n- `applicationName` 取自当前使用的 ontology 所在应用目录名；如果存在多个候选应用目录，直接停止并说明冲突\r\n- 业务命令用 `servercommand`\r\n- 内置数据服务用 `binding`\r\n- 本体给了绑定端点时，优先按本体调用：\r\n- `GetTableDataWithOffset -> TableBinding`\r\n- `GetComboBindingOptions -> CandidatesBinding`\r\n- `CalcBindingDataSource -> DataSourceBindings`\r\n- `binding` 一律使用规范命令名，不使用 `TableBinding`、`CandidatesBinding` 等别名作为 CLI 入参\r\n- 带 `[HOB_EXCLUDE]` 的命令一律不调用\r\n\r\n## 请求体规则\r\n\r\n- `servercommand`：`commandName` 用本体命令名，`method` 用本体 `verb`，`jsonBody` 严格按 `Input Arguments`\r\n- `servercommand` 不新增字段，不遗漏字段，不修改字段类型\r\n- CLI 请求体只发送当前链路实际需要的 OpenClaw 会话字段：`SessionId`\r\n- `binding`：优先根据 ontology 中的 `*-bindings.md` 文档生成兼容 schema，不要手写或反推底层 HTTP 原始 body\r\n- `DataSourceBindings` 一律用 `binding` 命令，`commandName` 固定为 `CalcBindingDataSource`\r\n- 如果 `binding` 和 `servercommand` 都能勉强解释当前需求，优先按 ontology 明确标注的端点类型执行；ontology 没标明时停止，不要猜\r\n\r\n### Binding 文档取数规则\r\n\r\n- `TableBinding` 优先读取形如 `xxx-bindings.md` 的 `TableBindings` 段落\r\n- `CandidatesBinding` 优先读取形如 `xxx-bindings.md` 的 `CandidatesBindings` 段落\r\n- `TableBinding` 从文档中提取：\r\n  - `page-name`\r\n  - `view-name`\r\n  - `list-view-location`\r\n  - `table-name`\r\n  - 列表格中的每一行 `column-name + guid`\r\n- 如果 `TableBindings` 文档缺少上述任一必需字段，不要猜，直接停止并说明缺口\r\n- `CandidatesBinding` 从文档中提取：\r\n  - `page-name`\r\n  - `TableName`\r\n  - `column-type=ID` 对应的 `ColumnName`\r\n  - `column-type=ID` 对应的 `GUID`\r\n  - `column-type=text` 对应的 `ColumnName`\r\n  - `column-type=text` 对应的 `GUID`\r\n- 如果 `CandidatesBindings` 文档缺少 `ID` 列或 `text` 列，不要猜，直接停止并说明缺口\r\n- `TableBinding` 和 `CandidatesBinding` 各自只读取自己所属段落，不要跨段落拼字段\r\n- `DataSourceBindings` 优先读取形如 `binding-xxx.md` 的 `DataSourceBindings` 段落\r\n- `DataSourceBindings` 从文档中提取：\r\n  - `page-name`\r\n  - `cell-location`\r\n  - `table-name`\r\n  - `Columns` 表中的每一行 `display-name + table-name + column-name`\r\n  - `Query Params` 表中的每一行 `table-name + column-name`\r\n- 如果 `DataSourceBindings` 存在多组候选，且当前上下文无法唯一定位具体数据源，直接停止并说明冲突\r\n\r\n### TableBinding 兼容 schema\r\n\r\n- `GetTableDataWithOffset` 的 `jsonBody` 优先生成如下兼容结构：\r\n\r\n```json\r\n{\r\n  \"columns\": [\r\n    {\r\n      \"column-name\": \"编号\",\r\n      \"guid\": \"3261feec-650a-421c-b05f-7ea8b1bed3e5\"\r\n    }\r\n  ],\r\n  \"table-name\": \"物品表\",\r\n  \"view-name\": \"物品_库存物品信息表格\",\r\n  \"list-view-location\": \"物品_库存|物品信息表格\",\r\n  \"page-name\": \"物品_库存\",\r\n  \"target-page\": 1,\r\n  \"page-limit-row-count\": 0\r\n}\r\n```\r\n\r\n- 生成规则：\r\n  - `columns <- bindings 文档表格中的 column-name + guid`\r\n  - `table-name <- table-name`\r\n  - `view-name <- view-name`\r\n  - `list-view-location <- list-view-location`\r\n  - `page-name <- page-name`\r\n  - `target-page <- 1`\r\n  - `page-limit-row-count <- 0`\r\n- 如果已经拿到真实分页参数，可覆盖：\r\n  - `target-page`\r\n  - `page-limit-row-count`\r\n- `columns` 保持 ontology 文档中的原顺序，不要重排\r\n\r\n### TableBinding 到底层 HTTP body 的映射说明\r\n\r\n- 兼容 schema 会由下游 SDK / 代理转换为底层请求体\r\n- 等价映射关系如下：\r\n  - `bindingInfos <- columns[].guid`\r\n  - `currentRowInfo.currentTable <- table-name`\r\n  - `currentRowInfo.viewname <- view-name`\r\n  - `currentRowInfo.listviewLocation <- list-view-location`\r\n  - `offsetConditionInfo.targetPage <- target-page`\r\n  - `offsetConditionInfo.pageLimitRowCount <- page-limit-row-count`\r\n  - `pageName <- page-name`\r\n- 以下字段由下游固定补齐，不需要在 ontology 文档中查找，也不要手工追加到兼容 schema：\r\n  - `demandRowCount=0`\r\n  - `currentDataLength=0`\r\n  - `needRowVersion=true`\r\n  - `editorDataInfos=null`\r\n  - `sortCommandID=null`\r\n  - `orderByInfo=null`\r\n  - `columnFilterQueries=null`\r\n  - `totalRowBindingInfos=[]`\r\n\r\n### CandidatesBinding 兼容 schema\r\n\r\n- `GetComboBindingOptions` 的 `jsonBody` 优先生成如下兼容结构：\r\n\r\n```json\r\n{\r\n  \"id-column\": {\r\n    \"column-name\": \"ID\",\r\n    \"guid\": \"9c641cb4-c3a3-44ea-ad5e-495c9a5d3544\"\r\n  },\r\n  \"text-column\": {\r\n    \"column-name\": \"编号\",\r\n    \"guid\": \"41baffe3-3982-4237-bf62-b8d95ba76218\"\r\n  },\r\n  \"table-name\": \"物品表\",\r\n  \"page-name\": \"采购单填写\"\r\n}\r\n```\r\n\r\n- 生成规则：\r\n  - `id-column.column-name <- column-type=ID` 对应的 `ColumnName`\r\n  - `id-column.guid <- column-type=ID` 对应的 `GUID`\r\n  - `text-column.column-name <- column-type=text` 对应的 `ColumnName`\r\n  - `text-column.guid <- column-type=text` 对应的 `GUID`\r\n  - `table-name <- TableName`\r\n  - `page-name <- page-name`\r\n- 如果 `CandidatesBindings` 里存在多组候选绑定，且当前上下文无法唯一定位具体组件，直接停止并说明冲突\r\n\r\n### CandidatesBinding 到底层 HTTP body 的映射说明\r\n\r\n- 兼容 schema 会由下游 SDK / 代理转换为底层请求体\r\n- 等价映射关系如下：\r\n  - `tableName <- table-name`\r\n  - `valueColumnBindingInfo <- id-column.guid`\r\n  - `displayColumnBindingInfo <- text-column.guid`\r\n  - `pageName <- page-name`\r\n- 以下字段由下游固定补齐，不需要在 ontology 文档中查找，也不要手工追加到兼容 schema：\r\n  - `itemQuery=null`\r\n  - `offset=null`\r\n  - `cacheSettingID=null`\r\n\r\n### DataSourceBinding 兼容 schema\r\n\r\n- `CalcBindingDataSource` 的 `jsonBody` 优先生成如下兼容结构：\r\n\r\n```json\r\n{\r\n  \"page-name\": \"出入库单填写\",\r\n  \"cell-location\": \"1,0\",\r\n  \"table-name\": \"出入库类型表\",\r\n  \"columns\": [\r\n    {\r\n      \"response-name\": \"value\",\r\n      \"table-name\": \"出入库类型表\",\r\n      \"column-name\": \"ID\"\r\n    },\r\n    {\r\n      \"response-name\": \"label\",\r\n      \"table-name\": \"出入库类型表\",\r\n      \"column-name\": \"名称\"\r\n    }\r\n  ],\r\n  \"query-params\": [\r\n    {\r\n      \"table-name\": \"出入库类型表\",\r\n      \"column-name\": \"出入库标记\"\r\n    }\r\n  ],\r\n  \"params\": {\r\n    \"出入库类型表.出入库标记\": \"入库\"\r\n  }\r\n}\r\n```\r\n\r\n- 生成规则：\r\n  - `page-name <- binding 文档 Information.page-name`\r\n  - `cell-location <- DataSourceBindings 段落中的 cell-location`\r\n  - `table-name <- DataSourceBindings 段落中的 table-name`\r\n  - `columns[].response-name <- Columns 表中的 display-name`\r\n  - `columns[].table-name <- Columns 表中的 table-name`\r\n  - `columns[].column-name <- Columns 表中的 column-name`\r\n  - `query-params[].table-name <- Query Params 表中的 table-name`\r\n  - `query-params[].column-name <- Query Params 表中的 column-name`\r\n  - `params` 只有在已知真实筛选值时生成，key 固定为 `query-params` 的 `table-name.column-name`\r\n- 如果 `Query Params` 非空但当前问题没有提供或无法推导真实参数值，不要调用，直接说明缺少哪个 `table-name.column-name`\r\n- 如果 `Query Params` 为“无”，不要生成 `params`\r\n\r\n### DataSourceBinding 到底层 HTTP body 的映射说明\r\n\r\n- 兼容 schema 会由下游 SDK / 代理转换为底层请求体\r\n- 下游会先通过 `GetMetadata2` 使用 `page-name + cell-location` 定位运行态数据源 GUID，再调用 `CalcBindingDataSource`\r\n- 等价映射关系如下：\r\n  - `CommandId <- GetMetadata2 运行态数据源 GUID`\r\n  - `Params <- query-params 顺序匹配运行态 Params，取值来自 jsonBody.params`\r\n  - 返回行中的 `response-name` 会被映射为对应 `column-name`\r\n- 不要直接调用 `GetMetadata2` 或手工拼接底层 `CommandId`\r\n\r\n## 额外规则\r\n\r\n- 如果 bindings 文档已经给出真实 `column-name`，必须保留真实列名，不要用 `guid` 顶替\r\n- 只有在文档没有列名、但调试链路必须先跑通时，才允许临时用 `guid` 兼作 `column-name`，并且必须明确说明这是降级方案\r\n- 生成 CLI 命令前，先在答案里或推理里完成这 4 个定值：`applicationName`、`commandName`、`provider`、`SessionId`\r\n- 任一值不能唯一确定时，不要继续拼命令\r\n- 需要底层 ID 时，先用本体定义的查询或绑定把展示文本解析成真实 ID，再发正式请求\r\n- JSON 字符串统一双引号；shell 转义按当前 shell 处理\r\n- 遇到 `invalid JSON param for body` 时，先检查 JSON 和引号\r\n- 本体标成行 ID 的字段默认按 `int` 处理\r\n- 不要只看字段名猜含义\n\nFile v0.0.8:skill-card.md\n\n## Description: <br>\nInvokes AIOS, OpenClaw, and Forguncy business-system services by reading AIOS_ONTOLOGY_DIR, building validated aios-apps-invoke-cli calls, and using live results for follow-up analysis. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[kadbbz](https://clawhub.ai/user/kadbbz) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and operators use this skill when an agent must query or operate AIOS, OpenClaw, or Forguncy business systems through documented ontology entries and the approved CLI, then summarize or analyze the live response. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill can make live AIOS business-system calls, including write and delete actions, through broad implicit invocation. <br>\nMitigation: Install only where the agent is allowed to call AIOS business services, narrow trigger conditions, and require explicit user confirmation for create, update, submit, review, or delete actions. <br>\nRisk: Session identifier handling is inconsistent between sessionId and topic_id, which can block calls or risk using the wrong runtime value. <br>\nMitigation: Normalize the expected session identifier before deployment and stop any invocation when the current session value is missing or ambiguous. <br>\nRisk: The npx fallback can run an uncontrolled aios-apps-invoke-cli version. <br>\nMitigation: Pin or centrally control the aios-apps-invoke-cli runtime instead of relying on an unpinned fallback. <br>\n\n\n## Reference(s): <br>\n- [AIOS Application Invocation Rules](references/invoke-rules.md) <br>\n- [AIOS Data Processing Rules](references/data-processing.md) <br>\n- [ClawHub skill page](https://clawhub.ai/kadbbz/aios-call-app-service) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Text, Markdown, Shell commands, Guidance] <br>\n**Output Format:** [Markdown with CLI command snippets, live-result summaries, and blocking-condition notes] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May include ontology references, command type, assumptions, missing fields, skipped data, and uncertainty notes.] <br>\n\n## Skill Version(s): <br>\n0.0.8 (source: server evidence release.version) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v0.0.8:agents/openai.yaml\n\ninterface:\n  display_name: \"AIOS App Service\"\n  short_description: \"Read ontology first, then invoke AIOS app services\"\n  default_prompt: \"Use $aios-call-app-service to read /var/aios/data/ontology, invoke AIOS application interfaces, and continue from live results.\"\n\npolicy:\n  allow_implicit_invocation: true\n\nArchive v0.0.7: 7 files, 8652 bytes\n\nFiles: agents/openai.yaml (311b), readme.md (1032b), references/data-processing.md (875b), references/invoke-rules.md (6624b), skill-card.md (2847b), SKILL.md (4132b), _meta.json (140b)\n\nFile v0.0.7:SKILL.md\n\n---\nname: aios-call-app-service\ndescription: 当请求依赖 AIOS、OpenClaw、Forguncy 等业务系统的实时数据、接口调用或业务操作时，优先使用本技能。先读取 AIOS_ONTOLOGY_DIR 指向的本体目录，再确认应用、命令、参数结构和枚举映射，通过 aios-apps-invoke-cli 发起调用，并以实时返回结果作为后续分析和执行依据。遇到 aios-mqtt-channel 会话时，把当前会话的 SessionId 视为唯一合法会话标识；它来自当前会话上下文中的 `sessionId`。\n---\n\n# 系统调用技能\n\n当用户的问题不能只靠通用知识回答，而是必须查询、调用或操作业务系统时，应优先使用本技能。\n\n## 优先触发场景\n\n- 查询业务系统中的实时数据\n- 调用系统接口\n- 在系统内执行新增、修改、提交、审核、删除等动作\n- 需要基于真实系统返回结果继续分析或决策\n\n## 必须遵循的流程\n\n1. 在发起调用前，先读取环境变量 `AIOS_ONTOLOGY_DIR` 指向的本体目录。\n  - 禁止缓存、记忆或复用之前读取的本体内容。\n  - 每次调用都要重新读取，确保使用最新的本体信息。\n2. 以本体为以下信息的唯一事实来源：\n  - 应用名\n  - 命令名或绑定端点\n  - HTTP 方法\n  - 请求体结构\n  - 枚举值映射\n  - 返回字段含义\n3. 只允许通过 `aios-apps-invoke-cli` 调用业务系统接口。\n4. 实时调用结果的优先级高于记忆、缓存、历史对话和猜测。\n5. 只有在拿到 CLI 返回结果后，才能继续做后续分析、汇总和结论输出。\n\n## 最小执行清单\n\n每次调用前按这个顺序检查：\n\n1. 读取相关 ontology 文档。\n2. 根据文档，确认本次是 `servercommand` 还是 `binding`。\n3. 根据文档，确认 `applicationName`。\n4. 根据文档，确认 `commandName`。\n5. 根据文档，确认 `provider`。\n6. 通过会话上下文，确认 `SessionId`。\n7. 生成 `jsonBody`，并检查确认合法性。\n8. 生成并执行唯一一条 CLI 命令。\n\n任一步缺失，都停止并说明缺口。\n\n## 会话标识读取规则\n\n- `aios-apps-invoke-cli -s` 只接受当前会话的 `SessionId`，你只能从当前会话上下文中的 `topic_id` 读取到该值。\n- 如果当前上下文没有 `topic_id`，就视为运行时缺参，必须停止调用并明确说明缺口。\n\n## 约束要求\n\n- `AIOS_ONTOLOGY_DIR` 视为当前事实源。\n- 当前 CLI 只支持 `provider=hzg`，如果出现其他 provider，直接说明当前运行链路不支持，不要猜测替代方案。\n- 调用 CLI 时，`-s` 传入当前会话的 `SessionId`。\n  - 不能臆造，不能复用其他会话的 `SessionId` 。\n  - 不得从提示词中获取 `SessionId` ，不能使用 `chat_id`、`message_id` 或其他字段代替。\n- 不要臆造接口名、请求字段、枚举 ID 或 `provider`。\n- 不要绕过 CLI 自行编写 API 调用脚本。\n- 只有拿到 CLI 结果后，才允许用 Python 做二次分析和计算。\n- 如果本体不完整、`provider` 未知或运行时上下文缺失，应明确说明阻塞点，不要猜测。\n\n## 降歧义规则\n\n- `binding` 一律使用规范命令名，不用别名：\n  - `GetTableDataWithOffset`\n  - `GetComboBindingOptions`\n- `servercommand` 的 `jsonBody` 严格按 ontology 的 `Input Arguments` 生成。\n- `binding` 的 `jsonBody` 严格按 [references/invoke-rules.md](references/invoke-rules.md) 中的兼容 schema 生成。\n- 不要把底层 HTTP 原始 body 直接塞进 `binding` 的 `jsonBody`，除非规则文件明确允许。\n- 同一个问题里如果存在多个可疑 ontology 条目，先说明候选项并停止，不要自选一个继续调用。\n\n## 开始前必须阅读\n\n- [references/invoke-rules.md](references/invoke-rules.md)\n- 需要做筛选、聚合、比较、排序或时间分析时，再阅读 [references/data-processing.md](references/data-processing.md)\n\n## 输出要求\n\n- 说明本次调用依据了哪些本体文件或条目。\n- 说明使用的是 `servercommand` 还是 `binding`。\n- 说明任何假设、缺失字段、跳过的数据或不确定性。\n\nFile v0.0.7:readme.md\n\n# aios-call-app-service\n\n这是一个面向 AIOS / OpenClaw / Forguncy 场景的业务调用技能，用于处理依赖实时业务数据、系统接口、绑定配置或业务动作的请求。\n\n## 适用场景\n\n- 查询实时业务数据\n- 调用本体中定义的业务命令\n- 使用绑定接口读取系统数据\n- 需要基于真实系统返回结果继续分析\n- 用户要求直接在系统中执行操作\n\n## 调用原则\n\n- 先读取 `AIOS_ONTOLOGY_DIR`\n- 再确认应用、命令、参数结构和枚举映射\n- 统一通过 `aios-apps-invoke-cli` 发起调用\n- 当前 CLI 只支持 `provider=hzg`\n- 当前会话标识使用 `SessionId`\n- 调用 `aios-apps-invoke-cli` 时：\n  - `-p` 对应 `provider`\n  - `-s` 对应 `SessionId`\n- `binding` 参数优先从 `*-bindings.md` 文档生成兼容 schema\n- `servercommand` 参数严格按 ontology 的 `Input Arguments` 生成\n\n## 相关文档\n\n- 主说明见 `SKILL.md`\n- 调用细则见 `references/invoke-rules.md`\n- 数据处理规则见 `references/data-processing.md`\n\nFile v0.0.7:_meta.json\n\n{\n  \"ownerId\": \"kn74st1pqb0wkrbhpw4yh0kb2982c201\",\n  \"slug\": \"aios-call-app-service\",\n  \"version\": \"0.0.7\",\n  \"publishedAt\": 1780046959643\n}\n\nFile v0.0.7:references/data-processing.md\n\n# AIOS 数据处理规则\n\n只用于 `aios-apps-invoke-cli` 的真实返回结果。\n\n## 何时用 Python\n\n出现以下任一需求就用 Python：\n\n- 统计、求和、计数、平均、中位数\n- 分组、聚合、排序、排名、去重\n- 跨多条记录筛选\n- 比率、百分比、环比、同比\n- 时间窗口分析\n- 任意派生计算\n\n仅在“读取单条记录的单个简单字段且不做计算/比较”时可直接读值。\n\n## 最低流程\n\n1. 读取 JSON。\n2. 校验结构和必需字段。\n3. 处理 `null`、空字符串、缺失值、异常值。\n4. 数值先校验类型再计算。\n5. 日期数值按 OADate 转换后再分析。\n\nOADate：\n\n- `datetime = 1899-12-30 + OADate`\n\n## 输出必须说明\n\n- 用了哪些字段\n- 做了哪些过滤、分组或计算\n- 实际处理了多少条记录\n- 是否跳过无效数据\n- 是否存在不确定性\n\nFile v0.0.7:references/invoke-rules.md\n\n# AIOS 应用调用细则\n\n## 命令\n\n```bash\naios-apps-invoke-cli servercommand <applicationName> <commandName> <method> [jsonBody] -p <provider> -s <SessionId>\naios-apps-invoke-cli binding <applicationName> <commandName> <method> <jsonBody> -p <provider> -s <SessionId>\naios-apps-invoke-cli status\n```\n\n全局命令不可用时，可使用 `npx aios-apps-invoke-cli ...`。\n\n## 必守规则\n\n- `-p/-s` 分别来自 `provider`、当前 `SessionId`\n- 当前 CLI 只支持 `provider=hzg`\n- 如果 ontology、用户或上下文指向其他 provider，直接停止并说明当前运行链路不支持\n- 缺任意运行时参数都不要猜，直接停止并说明缺口\n- `applicationName` 取自当前使用的 ontology 所在应用目录名；如果存在多个候选应用目录，直接停止并说明冲突\n- 业务命令用 `servercommand`\n- 内置数据服务用 `binding`\n- 本体给了绑定端点时，优先按本体调用：\n- `GetTableDataWithOffset -> TableBinding`\n- `GetComboBindingOptions -> CandidatesBinding`\n- `binding` 一律使用规范命令名，不使用 `TableBinding`、`CandidatesBinding` 等别名作为 CLI 入参\n- 带 `[HOB_EXCLUDE]` 的命令一律不调用\n\n## 请求体规则\n\n- `servercommand`：`commandName` 用本体命令名，`method` 用本体 `verb`，`jsonBody` 严格按 `Input Arguments`\n- `servercommand` 不新增字段，不遗漏字段，不修改字段类型\n- CLI 请求体只发送当前链路实际需要的 OpenClaw 会话字段：`SessionId`\n- `binding`：优先根据 ontology 中的 `*-bindings.md` 文档生成兼容 schema，不要手写或反推底层 HTTP 原始 body\n- 如果 `binding` 和 `servercommand` 都能勉强解释当前需求，优先按 ontology 明确标注的端点类型执行；ontology 没标明时停止，不要猜\n\n### Binding 文档取数规则\n\n- `TableBinding` 优先读取形如 `xxx-bindings.md` 的 `TableBindings` 段落\n- `CandidatesBinding` 优先读取形如 `xxx-bindings.md` 的 `CandidatesBindings` 段落\n- `TableBinding` 从文档中提取：\n  - `page-name`\n  - `view-name`\n  - `list-view-location`\n  - `table-name`\n  - 列表格中的每一行 `column-name + guid`\n- 如果 `TableBindings` 文档缺少上述任一必需字段，不要猜，直接停止并说明缺口\n- `CandidatesBinding` 从文档中提取：\n  - `page-name`\n  - `TableName`\n  - `column-type=ID` 对应的 `ColumnName`\n  - `column-type=ID` 对应的 `GUID`\n  - `column-type=text` 对应的 `ColumnName`\n  - `column-type=text` 对应的 `GUID`\n- 如果 `CandidatesBindings` 文档缺少 `ID` 列或 `text` 列，不要猜，直接停止并说明缺口\n- `TableBinding` 和 `CandidatesBinding` 各自只读取自己所属段落，不要跨段落拼字段\n\n### TableBinding 兼容 schema\n\n- `GetTableDataWithOffset` 的 `jsonBody` 优先生成如下兼容结构：\n\n```json\n{\n  \"columns\": [\n    {\n      \"column-name\": \"编号\",\n      \"guid\": \"3261feec-650a-421c-b05f-7ea8b1bed3e5\"\n    }\n  ],\n  \"table-name\": \"物品表\",\n  \"view-name\": \"物品_库存物品信息表格\",\n  \"list-view-location\": \"物品_库存|物品信息表格\",\n  \"page-name\": \"物品_库存\",\n  \"target-page\": 1,\n  \"page-limit-row-count\": 0\n}\n```\n\n- 生成规则：\n  - `columns <- bindings 文档表格中的 column-name + guid`\n  - `table-name <- table-name`\n  - `view-name <- view-name`\n  - `list-view-location <- list-view-location`\n  - `page-name <- page-name`\n  - `target-page <- 1`\n  - `page-limit-row-count <- 0`\n- 如果已经拿到真实分页参数，可覆盖：\n  - `target-page`\n  - `page-limit-row-count`\n- `columns` 保持 ontology 文档中的原顺序，不要重排\n\n### TableBinding 到底层 HTTP body 的映射说明\n\n- 兼容 schema 会由下游 SDK / 代理转换为底层请求体\n- 等价映射关系如下：\n  - `bindingInfos <- columns[].guid`\n  - `currentRowInfo.currentTable <- table-name`\n  - `currentRowInfo.viewname <- view-name`\n  - `currentRowInfo.listviewLocation <- list-view-location`\n  - `offsetConditionInfo.targetPage <- target-page`\n  - `offsetConditionInfo.pageLimitRowCount <- page-limit-row-count`\n  - `pageName <- page-name`\n- 以下字段由下游固定补齐，不需要在 ontology 文档中查找，也不要手工追加到兼容 schema：\n  - `demandRowCount=0`\n  - `currentDataLength=0`\n  - `needRowVersion=true`\n  - `editorDataInfos=null`\n  - `sortCommandID=null`\n  - `orderByInfo=null`\n  - `columnFilterQueries=null`\n  - `totalRowBindingInfos=[]`\n\n### CandidatesBinding 兼容 schema\n\n- `GetComboBindingOptions` 的 `jsonBody` 优先生成如下兼容结构：\n\n```json\n{\n  \"id-column\": {\n    \"column-name\": \"ID\",\n    \"guid\": \"9c641cb4-c3a3-44ea-ad5e-495c9a5d3544\"\n  },\n  \"text-column\": {\n    \"column-name\": \"编号\",\n    \"guid\": \"41baffe3-3982-4237-bf62-b8d95ba76218\"\n  },\n  \"table-name\": \"物品表\",\n  \"page-name\": \"采购单填写\"\n}\n```\n\n- 生成规则：\n  - `id-column.column-name <- column-type=ID` 对应的 `ColumnName`\n  - `id-column.guid <- column-type=ID` 对应的 `GUID`\n  - `text-column.column-name <- column-type=text` 对应的 `ColumnName`\n  - `text-column.guid <- column-type=text` 对应的 `GUID`\n  - `table-name <- TableName`\n  - `page-name <- page-name`\n- 如果 `CandidatesBindings` 里存在多组候选绑定，且当前上下文无法唯一定位具体组件，直接停止并说明冲突\n\n### CandidatesBinding 到底层 HTTP body 的映射说明\n\n- 兼容 schema 会由下游 SDK / 代理转换为底层请求体\n- 等价映射关系如下：\n  - `tableName <- table-name`\n  - `valueColumnBindingInfo <- id-column.guid`\n  - `displayColumnBindingInfo <- text-column.guid`\n  - `pageName <- page-name`\n- 以下字段由下游固定补齐，不需要在 ontology 文档中查找，也不要手工追加到兼容 schema：\n  - `itemQuery=null`\n  - `offset=null`\n  - `cacheSettingID=null`\n\n## 额外规则\n\n- 如果 bindings 文档已经给出真实 `column-name`，必须保留真实列名，不要用 `guid` 顶替\n- 只有在文档没有列名、但调试链路必须先跑通时，才允许临时用 `guid` 兼作 `column-name`，并且必须明确说明这是降级方案\n- 生成 CLI 命令前，先在答案里或推理里完成这 4 个定值：`applicationName`、`commandName`、`provider`、`SessionId`\n- 任一值不能唯一确定时，不要继续拼命令\n- 需要底层 ID 时，先用本体定义的查询或绑定把展示文本解析成真实 ID，再发正式请求\n- JSON 字符串统一双引号；shell 转义按当前 shell 处理\n- 遇到 `invalid JSON param for body` 时，先检查 JSON 和引号\n- 本体标成行 ID 的字段默认按 `int` 处理\n- 不要只看字段名猜含义\n\nFile v0.0.7:skill-card.md\n\n## Description: <br>\nGuides an agent to read AIOS ontology files, choose the correct AIOS/OpenClaw/Forguncy application command or binding, invoke it through aios-apps-invoke-cli, and base follow-up analysis on live system results. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[kadbbz](https://clawhub.ai/user/kadbbz) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers, operators, and business-system agents use this skill when a request requires live AIOS, OpenClaw, or Forguncy data, service invocation, binding reads, or business actions. It is intended to make the agent verify ontology definitions, runtime session context, command parameters, and returned data before producing analysis or taking action. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill can trigger live business-system actions, including create, update, submit, approve, or delete operations. <br>\nMitigation: Require explicit user confirmation before state-changing actions and restrict CLI access to the least-privileged business scope needed. <br>\nRisk: Implicit invocation can expose AIOS/Forguncy operations to an agent in environments where those systems are reachable. <br>\nMitigation: Install only where AIOS/Forguncy operations are intentionally exposed to the agent and review the intended application, command, provider, parameters, and SessionId before execution. <br>\nRisk: Using the wrong runtime session identifier can direct a call to the wrong business context. <br>\nMitigation: Verify the true SessionId source at runtime and stop when the expected session context is absent or ambiguous. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/kadbbz/aios-call-app-service) <br>\n- [AIOS application invocation rules](references/invoke-rules.md) <br>\n- [AIOS data processing rules](references/data-processing.md) <br>\n- [OpenAI agent configuration](agents/openai.yaml) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Text, Markdown, Shell commands, Guidance] <br>\n**Output Format:** [Markdown text with CLI commands and structured notes about sources, assumptions, missing fields, and returned-data analysis] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May include JSON-derived summaries from live CLI results; execution should stop when ontology, provider, command, parameter, or SessionId requirements are missing.] <br>\n\n## Skill Version(s): <br>\n0.0.7 (source: ClawHub release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill","readmeExcerpt":"Skill: AIOS App Service Owner: kadbbz Summary: 当请求依赖 AIOS、OpenClaw、Forguncy 等业务系统的实时数据、接口调用或业务操作时，优先使用本技能。先读取 AIOS_ONTOLOGY_DIR 指向的本体目录，再确认应用、命令、参数结构和枚举映射，通过 aios-apps-invoke-cli 发起调用，并以实时返回结果作为后续分析和执行依据。... Tags: latest:1.0.3 Version history: v1.0.3 | 2026-07-06T08:41:57.722Z | auto - Add explicit separation of topic_id (for CLI) and senderId (for workspace file isolation) throughout usage instructions. - Require al","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"aios-apps-invoke-cli servercommand <applicationName> <commandName> POST --body-file <jsonFile> -s <SessionId>\naios-apps-invoke-cli servercommand <applicationName> <commandName> GET --query-file <jsonFile> -s <SessionId>\naios-apps-invoke-cli binding <applicationName> <commandName> <method> --body-file <jsonFile> -s <SessionId>\naios-apps-invoke-cli service-status\naios-apps-invoke-cli status"},{"language":"bash","snippet":"aios-apps-invoke-cli servercommand <applicationName> <commandName> POST --body-file <jsonFile> -s <SessionId>\naios-apps-invoke-cli servercommand <applicationName> <commandName> GET --query-file <jsonFile> -s <SessionId>\naios-apps-invoke-cli binding <applicationName> <commandName> <method> --body-file <jsonFile> -s <SessionId>\naios-apps-invoke-cli service-status\naios-apps-invoke-cli status"},{"language":"text","snippet":"全局命令不可用时，可使用 `npx aios-apps-invoke-cli ...`。\n\r\n## 必守规则\r\n\r\n- `-p/-s` 分别来自 `provider`、当前 `SessionId` （上下文中的 `topic_id` ）\r\n- 当前 CLI 只支持 `provider=hzg`\n- 如果 ontology、用户或上下文指向其他 provider，直接停止并说明当前运行链路不支持\n- `servercommand` 和 `binding` 是 CLI client 命令，会通过本地 app invoke socket service 执行真实业务系统调用\n- 不要手动启动 `serve` 或 `serve-mqtt`，也不要绕过 CLI 直接拼业务系统 HTTP 请求\n- `service-status` 用于检查 socket service 配置；`status` 会读取完整配置视图，可能要求兼容 MQTT 环境变量存在\n- 缺任意运行时参数都不要猜，直接停止并说明缺口\n- `applicationName` 取自当前使用的 ontology 所在应用目录名；如果存在多个候选应用目录，直接停止并说明冲突\r\n- 业务命令用 `servercommand`\r\n- 内置数据服务用 `binding`\r\n- 本体给了绑定端点时，优先按本体调用：\r\n- `GetTableDataWithOffset -> TableBinding`\r\n- `GetComboBindingOptions -> CandidatesBinding`\r\n- `CalcBindingDataSource -> DataSourceBindings`\r\n- `binding` 一律使用规范命令名，不使用 `TableBinding`、`CandidatesBinding` 等别名作为 CLI 入参\r\n- 带 `[HOB_EXCLUDE]` 的命令一律不调用\r\n\r\n## 请求体规则\r\n\r\n- `servercommand`：`commandName` 用本体命令名，`method` 用本体 `verb`，`jsonBody` 严格按 `ServerCommand 兼容 schema` 章节处理\r\n- `servercommand` 不新增字段，不遗漏字段，不修改字段类型\r\n- CLI 请求体只发送当前链路实际需要的 OpenClaw 会话字段：`SessionId`\r\n- `binding`：优先根据 ontology 中的 `*-bindings.md` 文档生成兼容 schema，不要手写或反推底层 HTTP 原始 body\r\n- `DataSourceBindings` 一律用 `binding` 命令，`commandName` 固定为 `CalcBindingDataSource`\r\n- 如果 `binding` 和 `servercommand` 都能勉强解释当前需求，优先按 ontology 明确标注的端点类型执行；ontology 没标明时停止，不要猜\r\n\r\n### Binding 文档取数规则\r\n\r\n- `TableBinding` 优先读取形如 `xxx-bindings.md` 的 `TableBindings` 段落\r\n- `CandidatesBinding` 优先读取形如 `xxx-bindings.md` 的 `CandidatesBindings` 段落\r\n- `TableBinding` 从文档中提取：\r\n  - `page-name`\r\n  - `view-name`\r\n  - `list-view-location`\r\n  - `table-name`\r\n  - 列表格中的每一行 `column-name + guid`\r\n- 如果 `TableBindings` 文档缺少上述任一必需字段，不要猜，直接停止并说明缺口\r\n- `CandidatesBinding` 从文档中提取：\r\n  - `page-name`\r\n  - `TableName`\r\n  - `column-type=ID` 对应的 `ColumnName`\r\n  - `column-type=ID` 对应的 `GUID`\r\n  - `column-type=text` 对应的 `ColumnName`\r\n  - `column-type=text` 对应的 `GUID`\r\n- 如果 `CandidatesBindings` 文档缺少 `ID` 列或 `text` 列，不要猜，直接停止并说明缺口\r\n- `TableBinding` 和 `CandidatesBinding` 各自只读取自己所属段落，不要跨段落拼字段\r\n- `DataSourceB"},{"language":"bash","snippet":"aios-apps-invoke-cli servercommand <applicationName> <commandName> <method> [jsonBody] -p <provider> -s <SessionId>\naios-apps-invoke-cli binding <applicationName> <commandName> <method> <jsonBody> -p <provider> -s <SessionId>\naios-apps-invoke-cli status"},{"language":"json","snippet":"{\n  \"columns\": [\n    {\n      \"column-name\": \"编号\",\n      \"guid\": \"3261feec-650a-421c-b05f-7ea8b1bed3e5\"\n    }\n  ],\n  \"table-name\": \"物品表\",\n  \"view-name\": \"物品_库存物品信息表格\",\n  \"list-view-location\": \"物品_库存|物品信息表格\",\n  \"page-name\": \"物品_库存\",\n  \"target-page\": 1,\n  \"page-limit-row-count\": 0\n}"},{"language":"json","snippet":"{\n  \"id-column\": {\n    \"column-name\": \"ID\",\n    \"guid\": \"9c641cb4-c3a3-44ea-ad5e-495c9a5d3544\"\n  },\n  \"text-column\": {\n    \"column-name\": \"编号\",\n    \"guid\": \"41baffe3-3982-4237-bf62-b8d95ba76218\"\n  },\n  \"table-name\": \"物品表\",\n  \"page-name\": \"采购单填写\"\n}"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\r\nname: aios-call-app-service\ndescription: 当请求依赖 AIOS、OpenClaw、Forguncy 等业务系统的实时数据、接口调用或业务操作时，优先使用本技能。先读取 AIOS_ONTOLOGY_DIR 指向的本体目录，再确认应用、命令、参数结构和枚举映射，通过 aios-apps-invoke-cli 发起调用，并以实时返回结果作为后续分析和执行依据。遇到 aios-mqtt-channel 会话时，把当前会话的 SessionId 视为唯一合法会话标识；它来自当前会话上下文中的 `topic_id`。如果调用过程需要在 workspace 保存请求体、下载结果或生成文件，文件隔离标识必须使用当前通道的 `senderId`。\n---\r\n\r\n# 系统调用技能\r\n\r\n当用户的问题不能只靠通用知识回答，而是必须查询、调用或操作业务系统时，应优先使用本技能。\r\n\r\n## 优先触发场景\r\n\r\n- 查询业务系统中的实时数据\r\n- 调用系统接口\r\n- 在系统内执行新增、修改、提交、审核、删除等动作\r\n- 需要基于真实系统返回结果继续分析或决策\r\n\r\n## 必须遵循的流程\r\n\r\n1. 在发起调用前，先读取环境变量 `AIOS_ONTOLOGY_DIR` 指向的本体目录。\r\n  - 禁止缓存、记忆或复用之前读取的本体内容。\r\n  - 每次调用都要重新读取，确保使用最新的本体信息。\r\n2. 以本体为以下信息的唯一事实来源：\r\n  - 应用名\r\n  - 命令名或绑定端点\r\n  - HTTP 方法\r\n  - 请求体结构\r\n  - 枚举值映射\r\n  - 返回字段含义\r\n3. 只允许通过 `aios-apps-invoke-cli` 调用业务系统接口；CLI 会通过本地 app invoke socket service 完成真实调用。\r\n4. 实时调用结果的优先级高于记忆、缓存、历史对话和猜测。\r\n5. 只有在拿到 CLI 返回结果后，才能继续做后续分析、汇总和结论输出。\r\n\r\n## 最小执行清单\r\n\r\n每次调用前按这个顺序检查：\r\n\r\n1. 读取相关 ontology 文档。\r\n2. 根据文档，确认本次是 `servercommand` 还是 `binding`。\r\n3. 根据文档，确认 `applicationName`。\r\n4. 根据文档，确认 `commandName`。\n5. 通过会话上下文的 `topic_id` ，确认 `SessionId`。`topic_id` 只用于 CLI 的 `-s` 参数，不作为 workspace 文件目录。\n6. 通过当前通道上下文确认 `senderId`。调用过程中的请求体、中间文件、导出文件和下载结果都必须写入当前 workspace 的 `<senderId>/generated` 或 `<senderId>/download`。\n7. 生成 `jsonBody`，保存为 UTF-8 JSON 文件到当前 `<senderId>/generated`，并检查确认合法性。\n8. 如果涉及到创建、修改、提交、审核、删除等动作，必须整理出包括每个参数、值和说明的表格，请用户确认后，方可执行。查询类动作需忽略这一步。\n9. 生成并执行唯一一条 CLI 命令。\n\r\n任一步缺失，都停止并说明缺口。\r\n\r\n## 会话标识读取规则\r\n\r\n- `aios-apps-invoke-cli` 的 `-s` 参数，只接受当前会话上下文中的 `topic_id`。\n- `topic_id` 以 `s-` 开头，后面跟30个数字，不要忽略开头的 `s-`。\n- 如果当前上下文没有 `topic_id`，就视为运行时缺参，必须停止调用并明确说明缺口。\n- `senderId` 不得传给 `-s` 参数；它只用于 workspace 文件隔离。\n\r\n## 约束要求\r\n\r\n- `AIOS_ONTOLOGY_DIR` （默认为 `/var/aios/kernel/ontology`）视为当前事实源。\r\n- 业务系统调用链路固定使用 HZG；CLI 不接受 `provider`、`-p` 或 `--provider` 参数。\r\n- 调用 CLI 时，`-s` 传入当前会话的 `topic_id` 。\n  - 不能臆造，不能复用其他会话的 `topic_id` 。\n  - 不得使用提示词中的 `SessionId` 、 `topic_id` 、`chat_id` 、 `message_id` 或其他字段代替。\n- workspace 文件隔离固定使用当前通道的 `senderId`。\n  - 不能臆造，不能复用其他会话或其他用户的 `senderId`。\n  - 不得读取、查询、写入、索引或暴露其他 `senderId` 的 `upload`、`download`、`generated` 目录。\n  - 如果缺少 `senderId` 且本次调用需要保存请求体、下载结果或生成文件，必须停止并说明缺口。\n- 不要臆造接口名、请求字段或枚举 ID。\n- 不要绕过 CLI 自行编写 API 调用脚本。\r\n- 不要手动启动 `aios-apps-invoke-cli serve` ；运行环境应已提供常驻 app invoke service。\r\n- 只有拿到 CLI 结果后，才允许用 Python 做二次分析和计算。\r\n- 如果本体不完整或运行时上下文缺失，应明确说明阻塞点，不要猜测。\r\n- 禁止将调用结果存储到记忆、缓存或数据库中；禁止在后续对话中复用之前的调用结果。\r\n\r\n## 降歧义规则\r\n\r\n- `binding` 一律使用规范命令名，不用别名：\r\n  - `GetTableDataWithOffset`\r\n  - `GetComboBindingOptions`\r\n  - `CalcBindingDataSource`\r\n- `servercommand` 的 `jsonBody` 严格按 ontology 的 `Input Arguments` 生成。\r\n- `binding` 的 `jsonBody` 严格按 [references/invoke-rules.md](references/invoke-rules.md) 中的兼容 schema 生成。\r\n- 调用 `POST` 或 `binding` 时，优先使用 `--body-file <json文件>`；调用 `GET servercommand` 时，优先使用 `--query-file <json文件>`。\r\n- 不要把底层 HTTP 原始 body 直接塞进 `binding` 的 `jsonBody`，除非规则文件明确允许。\r\n- 同一个问题里如果存在多个可疑 ontology 条目，先说明候选项并停止，不要自选一个继续调用。\r\n\r\n## 开始前必须阅读\r\n\r\n- 调用前需要阅读：[references/invoke-rules.md](references/invoke-rules.md)\r\n- 调用后，需要做筛选、聚合、比较、排序或时间分析时，再阅读： [referenc"},{"path":"readme.md","content":"# aios-call-app-service\r\n\r\n这是一个面向 AIOS / OpenClaw / Forguncy 场景的业务调用技能，用于处理依赖实时业务数据、系统接口、绑定配置或业务动作的请求。\r\n\r\n## 适用场景\r\n\r\n- 查询实时业务数据\r\n- 调用本体中定义的业务命令\r\n- 使用绑定接口读取系统数据\r\n- 需要基于真实系统返回结果继续分析\r\n- 用户要求直接在系统中执行操作\r\n\r\n## 调用原则\r\n\r\n- 先读取 `AIOS_ONTOLOGY_DIR`\n- 再确认应用、命令、参数结构和枚举映射\n- 统一通过 `aios-apps-invoke-cli` 发起调用；CLI 会把请求交给本地 app invoke socket service\n- 业务系统调用链路固定使用 HZG；CLI 不接受 provider 参数\n- 当前会话标识使用 `SessionId`\n- 调用 `aios-apps-invoke-cli` 时：\n  - `-s` 对应 `SessionId`\n  - `POST` 和 `binding` 优先使用 `--body-file`\n  - `GET servercommand` 优先使用 `--query-file`\n- 不要绕过 CLI 直接访问业务系统 HTTP 接口；局域网业务系统访问由 `aios-apps-invoke-cli serve` 进程完成\n- `binding` 参数优先从 `binding-*.md` 的 `CandidatesBindings`、`TableBindings`、`DataSourceBindings` 文档生成兼容 schema\n- `servercommand` 参数严格按 ontology 的 `Input Arguments` 生成\n\r\n## 相关文档\r\n\r\n- 主说明见 `SKILL.md`\r\n- 调用细则见 `references/invoke-rules.md`\r\n- 数据处理规则见 `references/data-processing.md`"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn74st1pqb0wkrbhpw4yh0kb2982c201\",\n  \"slug\": \"aios-call-app-service\",\n  \"version\": \"1.0.3\",\n  \"publishedAt\": 1783327317722\n}"},{"path":"references/data-processing.md","content":"# AIOS 数据处理规则\n\n只用于 `aios-apps-invoke-cli` 的真实返回结果。\n\n## 何时用 Python\n\n出现以下任一需求就用 Python：\n\n- 统计、求和、计数、平均、中位数\n- 分组、聚合、排序、排名、去重\n- 跨多条记录筛选\n- 比率、百分比、环比、同比\n- 时间窗口分析\n- 任意派生计算\n\n仅在“读取单条记录的单个简单字段且不做计算/比较”时可直接读值。\n\n## 最低流程\n\n1. 读取 JSON。\n2. 校验结构和必需字段。\n3. 处理 `null`、空字符串、缺失值、异常值。\n4. 数值先校验类型再计算。\n5. 日期数值按 OADate 转换后再分析。\n\nOADate：\n\n- `datetime = 1899-12-30 + OADate`\n\n## 输出必须说明\n\n- 用了哪些字段\n- 做了哪些过滤、分组或计算\n- 实际处理了多少条记录\n- 是否跳过无效数据\n- 是否存在不确定性"},{"path":"references/invoke-rules.md","content":"# AIOS 应用调用细则\r\n\r\n## 命令\r\n\r\n```bash\naios-apps-invoke-cli servercommand <applicationName> <commandName> POST --body-file <jsonFile> -s <SessionId>\naios-apps-invoke-cli servercommand <applicationName> <commandName> GET --query-file <jsonFile> -s <SessionId>\naios-apps-invoke-cli binding <applicationName> <commandName> <method> --body-file <jsonFile> -s <SessionId>\naios-apps-invoke-cli service-status\naios-apps-invoke-cli status\n```\n\r\n全局命令不可用时，可使用 `npx aios-apps-invoke-cli ...`。\r\n\r\n## 必守规则\n\n- `-s` 来自当前 `SessionId` （上下文中的 `topic_id` ），仅用于业务系统会话调用，不参与 workspace 文件隔离\n- 业务系统调用链路固定使用 HZG；CLI 不接受 `provider`、`-p` 或 `--provider` 参数\n- `servercommand` 和 `binding` 是 CLI client 命令，会通过本地 app invoke socket service 执行真实业务系统调用\n- 不要手动启动 `serve` 或 `serve-mqtt`，也不要绕过 CLI 直接拼业务系统 HTTP 请求\n- `service-status` 用于检查 socket service 配置；`status` 会读取完整配置视图，可能要求兼容 MQTT 环境变量存在\r\n- 缺任意运行时参数都不要猜，直接停止并说明缺口\r\n- `applicationName` 取自当前使用的 ontology 所在应用目录名；如果存在多个候选应用目录，直接停止并说明冲突\r\n- 业务命令用 `servercommand`\r\n- 内置数据服务用 `binding`\r\n- 本体给了绑定端点时，优先按本体调用：\r\n- `GetTableDataWithOffset -> TableBinding`\r\n- `GetComboBindingOptions -> CandidatesBinding`\r\n- `CalcBindingDataSource -> DataSourceBindings`\r\n- `binding` 一律使用规范命令名，不使用 `TableBinding`、`CandidatesBinding` 等别名作为 CLI 入参\r\n- 带 `[HOB_EXCLUDE]` 的命令一律不调用\r\n\r\n## 请求体规则\r\n\r\n- `servercommand`：`commandName` 用本体命令名，`method` 用本体 `verb`，`jsonBody` 严格按 `ServerCommand 兼容 schema` 章节处理\n- `servercommand` 不新增字段，不遗漏字段，不修改字段类型\n- CLI 请求体只发送当前链路实际需要的 OpenClaw 会话字段：`SessionId`\n- `POST servercommand` 和 `binding` 优先把 `jsonBody` 写入 UTF-8 JSON 文件，并用 `--body-file <jsonFile>` 传入\n- `GET servercommand` 优先把查询参数 JSON 写入 UTF-8 JSON 文件，并用 `--query-file <jsonFile>` 传入；该 JSON 必须是字符串值对象\n- `binding`：优先根据 ontology 中的 `*-bindings.md` 文档生成兼容 schema，不要手写或反推底层 HTTP 原始 body\n- `DataSourceBindings` 一律用 `binding` 命令，`commandName` 固定为 `CalcBindingDataSource`\r\n- 如果 `binding` 和 `servercommand` 都能勉强解释当前需求，优先按 ontology 明确标注的端点类型执行；ontology 没标明时停止，不要猜\r\n\r\n### Binding 文档取数规则\r\n\r\n- `TableBinding` 优先读取形如 `xxx-bindings.md` 的 `TableBindings` 段落\r\n- `CandidatesBinding` 优先读取形如 `xxx-bindings.md` 的 `CandidatesBindings` 段落\r\n- `TableBinding` 从文档中提取：\r\n  - `page-name`\r\n  - `view-name`\r\n  - `list-view-location`\r\n  - `table-name`\r\n  - 列表格中的每一行 `column-name + guid`\r\n- 如果 `TableBindings` 文档缺少上述任一必需字段，不要猜，直接停止并说明缺口\r\n- `CandidatesBinding` 从文档中提取：\r\n  - `page-name`\r\n  - `TableName`\r\n  - `column-type=ID` 对应的 `ColumnName`\r\n  - `column-type=ID` 对应的 `GUID`\r\n  - `column-type=text` 对应的 `ColumnName`\r\n  - `column-type=text` 对应的 `GUID`\r\n- 如果 `CandidatesBindings` 文档缺少 `ID` 列或 `text` 列，不要猜，直接停止并说明缺口\r\n- `TableBinding` 和 `CandidatesBinding` 各自只读取自己所属段落，不要跨段落拼字段\r\n- `DataSourceBindings` 优先读取形如 `binding-xxx.md` 的 `DataSourceBindings` 段落\r\n- `DataSourceBindings` 从文档中提取：\r\n  - `page-name`\r\n  - `cell-location`\r\n  - `table-name`\r\n  - `Columns` 表中的每一行 `display-name + table-name + column-name`\r\n  - `Query Params` 表中的每一行 `table-name + column-name`\r\n- 如果 `DataSourceBindings` 存在多组候选，且当前上下文无法唯一定位具体数据源，直接停止并说明冲突\r\n\r\n### ServerCommand 兼容 schema\r\n\r\n根据 `argument-typ"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":null,"editorialQuality":{"score":100,"threshold":65,"status":"thin","wordCount":1068,"uniquenessScore":42,"reasons":["uniqueness-below-45"]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-10T12:34:22.026Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-10T12:34:22.026Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T14:47:42.518Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}