diff --git a/shortcuts/apps/plugin_instance_create.go b/shortcuts/apps/plugin_instance_create.go index 263aabe46..f40cdb8b5 100644 --- a/shortcuts/apps/plugin_instance_create.go +++ b/shortcuts/apps/plugin_instance_create.go @@ -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("/%s.json", id)) + Set("target", fmt.Sprintf("/%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")) == "" { diff --git a/shortcuts/apps/plugin_instance_delete.go b/shortcuts/apps/plugin_instance_delete.go index dce0a48dc..4bc428140 100644 --- a/shortcuts/apps/plugin_instance_delete.go +++ b/shortcuts/apps/plugin_instance_delete.go @@ -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("/%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")) == "" { diff --git a/shortcuts/apps/plugin_instance_get.go b/shortcuts/apps/plugin_instance_get.go index 4e0cb5a6c..64b0d3186 100644 --- a/shortcuts/apps/plugin_instance_get.go +++ b/shortcuts/apps/plugin_instance_get.go @@ -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("/%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")) diff --git a/shortcuts/apps/plugin_instance_list.go b/shortcuts/apps/plugin_instance_list.go index 5c54f51b0..c298a5209 100644 --- a/shortcuts/apps/plugin_instance_list.go +++ b/shortcuts/apps/plugin_instance_list.go @@ -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 { diff --git a/shortcuts/apps/plugin_instance_update.go b/shortcuts/apps/plugin_instance_update.go index 7769b2623..3b0723da0 100644 --- a/shortcuts/apps/plugin_instance_update.go +++ b/shortcuts/apps/plugin_instance_update.go @@ -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("/%s.json", id)) + Set("target", fmt.Sprintf("/%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"))