fix(plugin): resolve real paths in dry-run output for instance commands

Replace <capabilities_dir> placeholders with resolved paths so models
can see actual file locations before execution. Add version_source,
types_output, and scan_dir fields to describe implicit behaviors.
This commit is contained in:
zhangli
2026-06-25 16:20:58 +08:00
parent 41aefd63f0
commit 0ff2957c6e
5 changed files with 25 additions and 7 deletions

View File

@@ -44,12 +44,18 @@ var AppsPluginInstanceCreate = common.Shortcut{
if pluginVersion != "" {
pluginRef += "@" + pluginVersion
}
// Resolve output paths for preview (read-only, safe in dry-run)
projectPath, _ := pluginResolveProjectPath(rctx.Str("project-path"))
capDir, _ := pluginResolveCapDir(projectPath, rctx.Str("capabilities-dir"))
return common.NewDryRunAPI().
Desc("Create plugin instance (write capability JSON)").
Desc("Create plugin instance: validate formValue, write capability JSON, auto-generate TypeScript types").
Set("action", "create").
Set("id", id).
Set("plugin", pluginRef).
Set("target", fmt.Sprintf("<capabilities_dir>/%s.json", id))
Set("target", fmt.Sprintf("<capabilities_dir>/%s.json", id)).
Set("version_source", "resolved from package.json actionPlugins").
Set("output", filepath.Join(capDir, id+".json")).
Set("types_output", filepath.Join(projectPath, "shared", "plugin-types.ts"))
},
Validate: func(ctx context.Context, rctx *common.RuntimeContext) error {
if strings.TrimSpace(rctx.Str("plugin")) == "" {

View File

@@ -28,11 +28,13 @@ var AppsPluginInstanceDelete = common.Shortcut{
},
DryRun: func(ctx context.Context, rctx *common.RuntimeContext) *common.DryRunAPI {
id := strings.TrimSpace(rctx.Str("id"))
projectPath, _ := pluginResolveProjectPath(rctx.Str("project-path"))
capDir, _ := pluginResolveCapDir(projectPath, rctx.Str("capabilities-dir"))
return common.NewDryRunAPI().
Desc("Delete plugin instance (remove capability JSON)").
Desc("Delete plugin instance (remove capability JSON, idempotent)").
Set("action", "delete").
Set("id", id).
Set("target", fmt.Sprintf("<capabilities_dir>/%s.json", id))
Set("target", filepath.Join(capDir, id+".json"))
},
Validate: func(ctx context.Context, rctx *common.RuntimeContext) error {
if strings.TrimSpace(rctx.Str("id")) == "" {

View File

@@ -8,6 +8,7 @@ import (
"encoding/json"
"fmt"
"io"
"path/filepath"
"strings"
"github.com/larksuite/cli/shortcuts/common"
@@ -26,11 +27,13 @@ var AppsPluginInstanceGet = common.Shortcut{
},
DryRun: func(ctx context.Context, rctx *common.RuntimeContext) *common.DryRunAPI {
id := strings.TrimSpace(rctx.Str("id"))
projectPath, _ := pluginResolveProjectPath(rctx.Str("project-path"))
capDir, _ := pluginResolveCapDir(projectPath, rctx.Str("capabilities-dir"))
return common.NewDryRunAPI().
Desc("Get plugin instance (read capability JSON)").
Set("action", "get").
Set("id", id).
Set("source", fmt.Sprintf("<capabilities_dir>/%s.json", id))
Set("source", filepath.Join(capDir, id+".json"))
},
Validate: func(ctx context.Context, rctx *common.RuntimeContext) error {
id := strings.TrimSpace(rctx.Str("id"))

View File

@@ -25,9 +25,12 @@ var AppsPluginInstanceList = common.Shortcut{
{Name: "capabilities-dir", Desc: "explicit capabilities directory (relative to project or absolute)"},
},
DryRun: func(ctx context.Context, rctx *common.RuntimeContext) *common.DryRunAPI {
projectPath, _ := pluginResolveProjectPath(rctx.Str("project-path"))
capDir, _ := pluginResolveCapDir(projectPath, rctx.Str("capabilities-dir"))
return common.NewDryRunAPI().
Desc("List plugin instances (scan capabilities directory)").
Set("action", "list").
Set("scan_dir", capDir).
Set("summary", fmt.Sprintf("%v", rctx.Bool("summary")))
},
Validate: func(ctx context.Context, rctx *common.RuntimeContext) error {

View File

@@ -32,11 +32,15 @@ var AppsPluginInstanceUpdate = common.Shortcut{
},
DryRun: func(ctx context.Context, rctx *common.RuntimeContext) *common.DryRunAPI {
id := strings.TrimSpace(rctx.Str("id"))
projectPath, _ := pluginResolveProjectPath(rctx.Str("project-path"))
capDir, _ := pluginResolveCapDir(projectPath, rctx.Str("capabilities-dir"))
return common.NewDryRunAPI().
Desc("Update plugin instance (modify capability JSON)").
Desc("Update plugin instance: merge partial updates to existing capability, validate formValue, write back, auto-regenerate TypeScript types").
Set("action", "update").
Set("id", id).
Set("target", fmt.Sprintf("<capabilities_dir>/%s.json", id))
Set("target", fmt.Sprintf("<capabilities_dir>/%s.json", id)).
Set("output", filepath.Join(capDir, id+".json")).
Set("types_output", filepath.Join(projectPath, "shared", "plugin-types.ts"))
},
Validate: func(ctx context.Context, rctx *common.RuntimeContext) error {
id := strings.TrimSpace(rctx.Str("id"))