nocobase-plugin-manage
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseGoal
目标
Provide a deterministic V1 workflow for plugin operations that works for both local and remote NocoBase applications, using runtime APIs and existing CLI commands instead of documentation-only sources.
为本地和远程NocoBase应用提供确定性的V1插件操作工作流,使用运行时API和现有CLI命令,而非仅依赖文档数据源。
Scope
适用范围
- Inspect plugin catalog and plugin state (,
enabled, version, package metadata) from runtime-backed sources.installed - For local inspect/readback, prefer CLI output and parse JSON between
yarn nocobase pm listand--- BEGIN_PLUGIN_LIST_JSON ---.--- END_PLUGIN_LIST_JSON --- - Enable plugins using the existing capability.
pm enable - Disable plugins using the existing capability.
pm disable - Expose a stable invocation contract that other skills can call.
- Return machine-parseable execution and verification results.
- 从运行时数据源检查插件目录与插件状态(、
enabled、版本、包元数据)。installed - 对于本地检查/回读操作,优先使用CLI 的输出,并解析
yarn nocobase pm list与--- BEGIN_PLUGIN_LIST_JSON ---之间的JSON内容。--- END_PLUGIN_LIST_JSON --- - 使用现有功能启用插件。
pm enable - 使用现有功能禁用插件。
pm disable - 暴露稳定的调用契约,供其他技能调用。
- 返回可机器解析的执行与验证结果。
Non-Goals
非目标
- Do not modify NocoBase source code.
- Do not introduce new subcommands.
nocobase pm - Do not perform destructive removal () by default.
pm remove - Do not scaffold or develop plugin code.
- Do not persist secrets in any skill file.
- Do not use as execution path for plugin
nocobase-ctlactions.inspect/enable/disable
- 不修改NocoBase源代码。
- 不新增子命令。
nocobase pm - 默认不执行破坏性的移除操作()。
pm remove - 不搭建或开发插件代码。
- 不在任何技能文件中存储密钥。
- 不使用作为插件
nocobase-ctl操作的执行路径。inspect/enable/disable
Input Contract
输入契约
| Input | Required | Default | Validation | Clarification Question |
|---|---|---|---|---|
| yes | none | one of | "Which action should I run: inspect, enable, or disable?" |
| no | | one of | "Should I force local or remote target?" |
| no | auto-detected from workspace | existing directory with NocoBase app | "Which local NocoBase app path should I use?" |
| no | remote default | valid HTTP(S) URL | "What base URL should I query for plugin state?" |
| no | | non-empty docker compose service name | "Which compose service should be used for local Docker CLI?" |
| no | | env var exists and non-empty when required | "Which env var contains the access token?" |
| enable/disable: yes | none | non-empty array of plugin names/package names | "Which plugin(s) should be changed?" |
| no | | one of | "Should I force docker_cli, host_cli, or remote_api?" |
| no | | one of | "Use safe mode (recommended) or fast mode?" |
| no | | integer in | "What verification timeout should I use?" |
Rules:
- Support two invocation styles:
- compact:
Use $nocobase-plugin-manage <action> [plugin...] - structured: JSON payload (for cross-skill orchestration)
- Normalize by removing trailing
target.base_url./ - Accept both short plugin names and full package names where NocoBase parser supports them.
- In mode, require pre-check and post-check status readback.
safe - Resolve with this priority:
target.mode=auto - if explicit exists, choose
target.app_path(even whenlocalis also present)target.base_url - if explicit exists and
target.base_urlis absent, choosetarget.app_pathremote - if current workspace contains a NocoBase app (for example and app package metadata), choose
.envlocal - if or
NOCOBASE_BASE_URLenv is set, chooseAPP_BASE_URLremote - fallback to with current working directory
local - Resolve with this priority:
execution_backend=auto - if channel is , use
remoteremote_api - if channel is and action is
local, run fast docker eligibility check first:enable/disable - compare port with
target.base_urlmapping indocker compose port <service> 80target.app_path - if port mismatches (for example target while compose maps
19000), skip docker write path directly13000 - if channel is and action is
local, prefer local CLI (inspect, thendocker_cli); API inspect is fallback only when local marker extraction failshost_cli - if channel is and action is
local, use fallback chain:enable/disable - first
docker_cli - then when docker path is unavailable/failed and
remote_api+ token are readytarget.base_url - then manual fallback guidance when both paths are unavailable/failed
- If user says "you decide", use defaults in this table.
Invocation payload template:
json
{
"action": "inspect",
"target": {
"mode": "auto",
"app_path": null,
"base_url": null,
"compose_service": "app"
},
"auth": {
"token_env": "NOCOBASE_API_TOKEN"
},
"execution_backend": "auto",
"plugins": [],
"execution_mode": "safe",
"verify": {
"timeout_seconds": 90
}
}| 输入 | 是否必填 | 默认值 | 验证规则 | 澄清问题 |
|---|---|---|---|---|
| 是 | 无 | 必须为 | "我应该执行哪个操作:inspect、enable还是disable?" |
| 否 | | 必须为 | "是否强制使用本地或远程目标?" |
| 否 | 从工作区自动检测 | 存在NocoBase应用的现有目录 | "应使用哪个本地NocoBase应用路径?" |
| 否 | 选择远程时默认值为 | 有效的HTTP(S) URL | "查询插件状态应使用哪个基础URL?" |
| 否 | | 非空的Docker Compose服务名称 | "本地Docker CLI应使用哪个Compose服务?" |
| 否 | | 需要时环境变量存在且非空 | "哪个环境变量包含访问令牌?" |
| enable/disable操作:是 | 无 | 非空的插件名称/包名称数组 | "应修改哪些插件?" |
| 否 | | 必须为 | "是否强制使用docker_cli、host_cli或remote_api?" |
| 否 | | 必须为 | "使用安全模式(推荐)还是快速模式?" |
| 否 | | 10到600之间的整数 | "应使用多少秒的验证超时时间?" |
规则:
- 支持两种调用方式:
- 简洁式:
Use $nocobase-plugin-manage <action> [plugin...] - 结构化:JSON负载(用于跨技能编排)
- 标准化,移除末尾的
target.base_url。/ - 接受NocoBase解析器支持的短插件名称和完整包名称。
- 在模式下,要求进行操作前检查和操作后状态回读。
safe - 按照以下优先级解析:
target.mode=auto - 如果指定的存在,选择
target.app_path(即使同时存在local)target.base_url - 如果指定的存在且
target.base_url不存在,选择target.app_pathremote - 如果当前工作区包含NocoBase应用(例如存在和应用包元数据),选择
.envlocal - 如果设置了或
NOCOBASE_BASE_URL环境变量,选择APP_BASE_URLremote - 回退到,使用当前工作目录
local - 按照以下优先级解析:
execution_backend=auto - 如果通道为,使用
remoteremote_api - 如果通道为且操作为
local,先执行快速Docker适配性检查:enable/disable - 比较的端口与
target.base_url中target.app_path的映射docker compose port <service> 80 - 如果端口不匹配(例如目标端口为而Compose映射为
19000),直接跳过Docker写入路径13000 - 如果通道为且操作为
local,优先使用本地CLI(inspect,然后是docker_cli);仅当本地标记提取失败时,才回退到API检查host_cli - 如果通道为且操作为
local,使用回退链:enable/disable - 优先使用
docker_cli - 当Docker路径不可用/失败且+ 令牌已就绪时,回退到
target.base_urlremote_api - 当两种路径都不可用/失败时,提供手动回退指导
- 如果用户说“你决定”,使用本表中的默认值。
调用负载模板:
json
{
"action": "inspect",
"target": {
"mode": "auto",
"app_path": null,
"base_url": null,
"compose_service": "app"
},
"auth": {
"token_env": "NOCOBASE_API_TOKEN"
},
"execution_backend": "auto",
"plugins": [],
"execution_mode": "safe",
"verify": {
"timeout_seconds": 90
}
}Mandatory Clarification Gate
强制澄清环节
- Max clarification rounds:
2 - Max questions per round:
3 - Pre-mutation requirements:
- is resolved.
action - target channel is resolved (auto-resolution or explicit).
- For local mode: exists.
target.app_path - For remote mode: is reachable.
target.base_url - For enable/disable: is non-empty.
plugins - For remote writes in safe mode: auth token is available.
- For local : docker compose command is available and target service exists.
docker_cli - For local write fallback to :
remote_apiand token are available.target.base_url - If both local and remote candidates exist and confidence is low, ask one concise disambiguation question.
- If these are not met, stop mutation and report missing prerequisites.
- 最大澄清轮次:
2 - 每轮最多问题数:
3 - 变更前要求:
- 已确定。
action - 目标通道已确定(自动解析或显式指定)。
- 本地模式:存在。
target.app_path - 远程模式:可访问。
target.base_url - enable/disable操作:非空。
plugins - 安全模式下的远程写入:身份验证令牌可用。
- 本地:Docker Compose命令可用且目标服务存在。
docker_cli - 本地写入回退到:
remote_api和令牌可用。target.base_url - 如果同时存在本地和远程候选对象且置信度低,提出一个简洁的消歧问题。
- 如果未满足上述要求,停止变更并报告缺失的先决条件。
Workflow
工作流
- Parse input, support compact action form, and resolve execution channel/backend.
- If input is compact (), normalize into structured payload.
Use $nocobase-plugin-manage enable @nocobase/plugin-api-doc - Apply resolution rules.
target.mode=auto - Apply resolution rules.
execution_backend=auto - : inspect and mutate through runtime API actions.
remote_api - : inspect and mutate through
docker_cli(includingdocker compose exec -T <service> yarn nocobase pm ...).pm list - : inspect/readback fallback through host
host_cliwhen docker inspect path is unavailable.yarn nocobase pm list - In local channel, is the preferred inspect/readback source; API readback is fallback when CLI JSON extraction is unavailable.
pm list - In local channel for write actions, mutation path is deterministic fallback: .
docker_cli -> remote_api -> manual - Fast discriminator should avoid slow docker retry when target URL is clearly not served by current compose mapping.
- Resolve runtime evidence source (never docs as source of truth).
- For local catalog/status, use (or docker compose equivalent) and parse JSON marker block.
yarn nocobase pm list - For remote catalog/status, use and
pm:list.pm:get - For remote enabled plugin lanes, use and
pm:listEnabled.pm:listEnabledV2 - If local CLI output marker block is unavailable, fallback to API (/
pm:list) and record fallback reason in output.pm:get - Record pre-state snapshot before mutation when in mode.
safe
- Execute action.
- :
inspect - local : run
docker_cliindocker compose exec -T <service> yarn nocobase pm list, parse JSON marker block.target.app_path - local : run
host_cliinyarn nocobase pm list, parse JSON marker block.target.app_path - remote: query and optionally
pm:listlanes.pm:listEnabled - :
enable - local : run
docker_cliindocker compose exec -T <service> yarn nocobase pm enable <plugin>.target.app_path - if local docker write is unavailable/failed, fallback to remote when remote prerequisites are ready.
pm:enable - remote: call with
pm:enable(single plugin or plugin array).filterByTk - :
disable - local : run
docker_cliindocker compose exec -T <service> yarn nocobase pm disable <plugin>.target.app_path - if local docker write is unavailable/failed, fallback to remote when remote prerequisites are ready.
pm:disable - remote: call with
pm:disable.filterByTk
- Verify by readback polling.
- Poll every 2 seconds until timeout.
- For , verify
enablein localenabled=truesnapshot (or remotepm list).pm:get - For , verify
disablein localenabled=falsesnapshot (or remotepm list).pm:get - If timeout hits, return with last observed state.
pending_verification
- Return a structured result.
- Include ,
channel,commands_or_actions,pre_state,post_state, andverification.next_steps - Include and
execution_backendevidence (why local/remote and backend were chosen).target_resolution - If no backend is available, include with UI and command guidance.
fallback_hints
Execution channel matrix:
| Mode | Inspect | Enable | Disable |
|---|---|---|---|
| local CLI ( | | |
| remote API ( | remote API ( | remote API ( |
Execution backend matrix (local):
| Backend | Inspect | Enable | Disable | When to prefer |
|---|---|---|---|---|
| | | | local Docker app detected |
| | inspect/readback only | inspect/readback only | local non-docker inspect fallback |
Operational notes:
- CLI output is wrapped by marker lines (
pm list/--- BEGIN_PLUGIN_LIST_JSON ---); only the JSON block between markers is considered canonical plugin payload.--- END_PLUGIN_LIST_JSON --- - and
pm:enablein resource actions are asynchronous (pm:disable), so readback polling is mandatory.runAsCLI - Remote actions should prefer API-client style URLs (,
pm:list,pm:get,pm:enable) when available.pm:disable - For local Docker environments, prefer as primary write backend.
docker_cli - For local write actions, when docker path fails, attempt one remote API fallback () before manual fallback guidance.
pm:enable/pm:disable - Local inspect/readback still prefers CLI marker parsing; API inspect/readback remains fallback when marker parsing fails.
- If deterministic local command path is required, set and
target.mode=local.execution_backend=docker_cli
- 解析输入,支持简洁式操作格式,并解析执行通道/后端。
- 如果输入为简洁式(),将其标准化为结构化负载。
Use $nocobase-plugin-manage enable @nocobase/plugin-api-doc - 应用解析规则。
target.mode=auto - 应用解析规则。
execution_backend=auto - :通过运行时API操作进行检查和变更。
remote_api - :通过
docker_cli(包括docker compose exec -T <service> yarn nocobase pm ...)进行检查和变更。pm list - :当Docker检查路径不可用时,通过主机
host_cli进行检查/回读回退。yarn nocobase pm list - 在本地通道中,是首选的检查/回读数据源;当CLI JSON提取不可用时,才回退到API回读。
pm list - 在本地通道的写入操作中,变更路径为确定性回退:。
docker_cli -> remote_api -> manual - 快速判别器应在目标URL明显不由当前Compose映射提供服务时,避免缓慢的Docker重试。
- 解析运行时证据源(绝不以文档为事实来源)。
- 对于本地目录/状态,使用(或Docker Compose等效命令)并解析标记块中的JSON。
yarn nocobase pm list - 对于远程目录/状态,使用和
pm:list。pm:get - 对于远程已启用插件通道,使用和
pm:listEnabled。pm:listEnabledV2 - 如果本地CLI输出标记块不可用,回退到API(/
pm:list)并在输出中记录回退原因。pm:get - 在模式下,变更前记录状态快照。
safe
- 执行操作。
- :
inspect - 本地: 在
docker_cli中运行target.app_path,解析标记块中的JSON。docker compose exec -T <service> yarn nocobase pm list - 本地: 在
host_cli中运行target.app_path,解析标记块中的JSON。yarn nocobase pm list - 远程: 查询并可选查询
pm:list通道。pm:listEnabled - :
enable - 本地: 在
docker_cli中运行target.app_path。docker compose exec -T <service> yarn nocobase pm enable <plugin> - 如果本地Docker写入不可用/失败,当远程先决条件就绪时,回退到远程。
pm:enable - 远程: 使用调用
filterByTk(单个插件或插件数组)。pm:enable - :
disable - 本地: 在
docker_cli中运行target.app_path。docker compose exec -T <service> yarn nocobase pm disable <plugin> - 如果本地Docker写入不可用/失败,当远程先决条件就绪时,回退到远程。
pm:disable - 远程: 使用调用
filterByTk。pm:disable
- 通过回读轮询进行验证。
- 每2秒轮询一次,直到超时。
- 对于操作,验证本地
enable快照(或远程pm list)中pm:get。enabled=true - 对于操作,验证本地
disable快照(或远程pm list)中pm:get。enabled=false - 如果超时,返回并附上最后观测到的状态。
pending_verification
- 返回结构化结果。
- 包含、
channel、commands_or_actions、pre_state、post_state和verification。next_steps - 包含和
execution_backend证据(说明选择本地/远程和后端的原因)。target_resolution - 如果没有可用后端,包含带有UI和命令指导的。
fallback_hints
执行通道矩阵:
| 模式 | 检查 | 启用 | 禁用 |
|---|---|---|---|
| 本地CLI( | | |
| 远程API( | 远程API( | 远程API( |
执行后端矩阵(本地):
| 后端 | 检查 | 启用 | 禁用 | 优先使用场景 |
|---|---|---|---|---|
| | | | 检测到本地Docker应用 |
| | 仅用于检查/回读 | 仅用于检查/回读 | 本地非Docker检查回退 |
操作说明:
- CLI输出被标记行(
pm list/--- BEGIN_PLUGIN_LIST_JSON ---)包裹;仅标记之间的JSON块被视为规范插件负载。--- END_PLUGIN_LIST_JSON --- - 资源操作中的和
pm:enable是异步的(pm:disable),因此回读轮询是必需的。runAsCLI - 远程操作应优先使用API客户端风格的URL(、
pm:list、pm:get、pm:enable)(如果可用)。pm:disable - 对于本地Docker环境,优先使用作为主要写入后端。
docker_cli - 对于本地写入操作,当Docker路径失败时,在提供手动回退指导前,尝试一次远程API回退()。
pm:enable/pm:disable - 本地检查/回读仍优先使用CLI标记解析;当标记解析失败时,API检查/回读仍作为回退方案。
- 如果需要确定性本地命令路径,设置和
target.mode=local。execution_backend=docker_cli
Reference Loading Map
参考加载映射
| Reference | Use When | Notes |
|---|---|---|
| references/v1-runtime-contract.md | any action | endpoint and command templates for local/remote flows |
| references/test-playbook.md | running acceptance tests | prompt-driven test cases with expected outcomes |
| pm.ts | implementing local CLI inspect/enable/disable | confirms |
| resource.ts | implementing inspect or remote mutation | confirms |
| preset index.ts | proving plugin info source is runtime-backed | shows |
| client PluginManager.tsx | confirming front-end action routes | uses |
| app PluginManager.ts | confirming enabled-plugin lane route | uses |
| 参考 | 使用场景 | 说明 |
|---|---|---|
| references/v1-runtime-contract.md | 任何操作 | 本地/远程流程的端点和命令模板 |
| references/test-playbook.md | 运行验收测试 | 带有预期结果的提示驱动测试用例 |
| pm.ts | 实现本地CLI检查/启用/禁用 | 确认本技能使用的 |
| resource.ts | 实现检查或远程变更 | 确认本技能使用的 |
| preset index.ts | 证明插件信息源来自运行时 | 展示 |
| client PluginManager.tsx | 确认前端操作路由 | 使用 |
| app PluginManager.ts | 确认已启用插件通道路由 | 使用 |
Safety Gate
安全环节
- High-impact actions:
- disabling authentication, ACL, or system-critical plugins
- remote mutations in production-like environments
- multi-plugin batch operations
- Secondary confirmation template:
- "Confirm execution: for
{{action}}on{{plugins}}. Type{{target.base_url or target.app_path}}to continue."confirm - In mode:
safe - block mutation if pre-state cannot be read
- block mutation if plugin identity is ambiguous
- block mutation if remote token is missing for protected endpoints
- block mutation when all execution backends are unavailable
- Rollback guidance:
- failed disable: run (local CLI or remote
pm enable <plugin>)pm:enable - failed enable: run if rollback is required and explicitly requested
pm disable <plugin> - Backend unavailable rich guidance template:
- : verify
Local Docker path, verify service name (defaultdocker compose ps), then retry.app - : if local docker write failed, retry via
Remote API fallbackusingpm:enable/pm:disableand token env.target.base_url - : open
UI fallback, enable target plugin manually.{{base_url}}/admin/settings/plugin-manager - : enable
CLI runtime dependency special caseand@nocobase/plugin-api-doc, restart app, then hand off runtime refresh to@nocobase/plugin-api-keys/nocobase-env-bootstrap.nocobase-acl-manage - : if endpoint returns
Auth fallback, open401/403, create/regenerate token, set env var, retry.{{base_url}}/admin/settings/api-keys - If is unknown, use default
base_urlwhen generating fallback URLs.http://127.0.0.1:13000
- 高影响操作:
- 禁用身份验证、ACL或系统关键插件
- 类生产环境中的远程变更
- 多插件批量操作
- 二次确认模板:
- "确认执行:在上对
{{target.base_url or target.app_path}}执行{{plugins}}。输入{{action}}以继续。"confirm - 在模式下:
safe - 如果无法读取操作前状态,阻止变更
- 如果插件身份不明确,阻止变更
- 如果受保护端点缺少远程令牌,阻止变更
- 如果所有执行后端都不可用,阻止变更
- 回退指导:
- 禁用失败:运行(本地CLI或远程
pm enable <plugin>)pm:enable - 启用失败:如果需要回退且明确请求,运行
pm disable <plugin> - 后端不可用的详细指导模板:
- : 验证
本地Docker路径,验证服务名称(默认docker compose ps),然后重试。app - : 如果本地Docker写入失败,使用
远程API回退和令牌环境变量通过target.base_url重试。pm:enable/pm:disable - : 打开
UI回退,手动启用目标插件。{{base_url}}/admin/settings/plugin-manager - : 启用
CLI运行时依赖特殊情况和@nocobase/plugin-api-doc,重启应用,然后将运行时刷新交给@nocobase/plugin-api-keys/nocobase-env-bootstrap。nocobase-acl-manage - : 如果端点返回
身份验证回退,打开401/403,创建/重新生成令牌,设置环境变量,重试。{{base_url}}/admin/settings/api-keys - 如果未知,生成回退URL时使用默认值
base_url。http://127.0.0.1:13000
Verification Checklist
验证清单
- Input contract fields are resolved and validated.
- Execution channel (or
local) is explicit in output.remote - is explicit in output.
execution_backend - Auto-resolution decisions are recorded in output assumptions and target resolution evidence.
- When both and
target.app_pathare present undertarget.base_url, resolution must remaintarget.mode=auto.local - Pre-state is captured in mode.
safe - Mutation call(s) succeeded without shell/API errors.
- Post-state was fetched by readback polling.
- Expected condition is met (for enable,
enabled=truefor disable).enabled=false - Local inspect/readback parsing extracts JSON from marker block (...
BEGIN_PLUGIN_LIST_JSON) or explicitly records API fallback reason.END_PLUGIN_LIST_JSON - Timeouts are reported as , not hidden as success.
pending_verification - CLI/API commands used are included in output for reproducibility.
- Token values are redacted; only env var names are shown.
- For local write failures, output explicitly records fallback attempts in order: then
docker_cli.remote_api - Backend unavailable cases return and include rich
verification=failed.fallback_hints - Any unresolved risk is listed in .
next_steps
- 输入契约字段已解析并验证。
- 执行通道(或
local)在输出中明确说明。remote - 在输出中明确说明。
execution_backend - 自动解析决策记录在输出的假设和目标解析证据中。
- 当下同时存在
target.mode=auto和target.app_path时,解析结果必须为target.base_url。local - 在模式下已捕获操作前状态。
safe - 变更调用成功,无Shell/API错误。
- 通过回读轮询获取操作后状态。
- 满足预期条件(启用操作对应,禁用操作对应
enabled=true)。enabled=false - 本地检查/回读解析从标记块(...
BEGIN_PLUGIN_LIST_JSON)提取JSON,或明确记录API回退原因。END_PLUGIN_LIST_JSON - 超时报告为,而非隐藏为成功。
pending_verification - 输出中包含使用的CLI/API命令,以便重现。
- 令牌值已脱敏;仅显示环境变量名称。
- 对于本地写入失败,输出按顺序明确记录回退尝试:然后是
docker_cli。remote_api - 后端不可用的情况返回并包含详细的
verification=failed。fallback_hints - 任何未解决的风险都列在中。
next_steps
Minimal Test Scenarios
最小测试场景
- Local inspect: (or docker compose equivalent) succeeds and marker JSON is parsed into plugin states.
yarn nocobase pm list - Remote inspect: authenticated call returns plugin states and enabled lanes.
- Compact invocation happy path: auto-resolves target and succeeds.
Use $nocobase-plugin-manage enable <plugin> - Local Docker enable happy path: backend resolves to and command uses
docker_cli.docker compose exec -T app ... - Enable happy path: completes and plugin becomes
pm enable.enabled=true - Disable guarded case: attempt to disable critical plugin requires confirmation.
- Remote mutation failure: missing token blocks mutation with actionable error.
- Local write fallback path: docker failure triggers remote API fallback; if both fail, return rich manual guidance.
- Auto target with both and
app_pathresolves to local; write fallback may still usebase_urlafter docker failure.remote_api
- 本地检查:(或Docker Compose等效命令)成功,标记JSON被解析为插件状态。
yarn nocobase pm list - 远程检查:已认证调用返回插件状态和已启用通道。
- 简洁式调用成功路径:自动解析目标并成功执行。
Use $nocobase-plugin-manage enable <plugin> - 本地Docker启用成功路径:后端解析为,命令使用
docker_cli。docker compose exec -T app ... - 启用成功路径:完成,插件变为
pm enable。enabled=true - 禁用防护场景:尝试禁用关键插件需要确认。
- 远程变更失败:缺少令牌阻止变更并返回可操作错误。
- 本地写入回退路径:Docker失败触发远程API回退;如果两者都失败,返回详细的手动指导。
- 同时存在和
app_path的自动目标解析为本地;Docker失败后写入回退仍可使用base_url。remote_api
Output Contract
输出契约
Always return:
- : normalized action and target
request - : chosen execution channel
channel - : chosen backend (
execution_backend)docker_cli | host_cli | remote_api - : exact commands or action routes invoked
commands_or_actions - : plugin snapshot before mutation (if available)
pre_state - : plugin snapshot after mutation (or last observed snapshot on timeout)
post_state - :
verificationpassed | failed | pending_verification - : defaults applied
assumptions - : explicit reason and signals used to choose local/remote
target_resolution - : rich fallback guidance when backend resolution/execution fails
fallback_hints - : concrete follow-up actions
next_steps
始终返回:
- : 标准化的操作和目标
request - : 选择的执行通道
channel - : 选择的后端(
execution_backend)docker_cli | host_cli | remote_api - : 调用的确切命令或操作路由
commands_or_actions - : 变更前的插件快照(如果可用)
pre_state - : 变更后的插件快照(或超时后最后观测到的快照)
post_state - :
verificationpassed | failed | pending_verification - : 应用的默认值
assumptions - : 选择本地/远程的明确原因和信号
target_resolution - : 后端解析/执行失败时的详细回退指导
fallback_hints - : 具体的后续操作
next_steps
References
参考资料
- V1 Runtime Contract: runtime endpoint and CLI mapping for this skill.
- Test Playbook: copy-ready prompts and expected assertions for local/remote flows.
- NocoBase PM CLI Commands: confirms supported operations.
pm - NocoBase PM Resource Actions: confirms inspect and remote mutation actions.
- Preset Plugin Aggregation: confirms plugin inventory + DB status merge.
- Client Plugin Manager Actions: confirms action route usage from client.
- V1 Runtime Contract: 本技能的运行时端点和CLI映射。
- Test Playbook: 本地/远程流程的可直接使用的提示和预期断言。
- NocoBase PM CLI Commands: 确认支持的操作。
pm - NocoBase PM Resource Actions: 确认检查和远程变更操作。
- Preset Plugin Aggregation: 确认插件清单 + 数据库状态合并。
- Client Plugin Manager Actions: 确认客户端使用的操作路由。