{"record":{"id":"dc07fd268d812ac3","repo":"multica-ai/multica","slug":"get-private-plugin-status-w","errorCode":null,"errorMessage":"get Private Plugin status: %w","messagePattern":"get Private Plugin status: %w","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"server/cmd/multica/cmd_plugin.go","lineNumber":310,"sourceCode":"\treturn printPluginRows(cmd, plugins)\n}\n\nfunc runPluginStatus(cmd *cobra.Command, args []string) error {\n\tif len(args) == 1 {\n\t\tworkspaceID, err := pluginWorkspaceID(cmd)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tclient, err := newAPIClient(cmd)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tclient.WorkspaceID = workspaceID\n\t\tctx, cancel := cli.APIContext(context.Background())\n\t\tdefer cancel()\n\t\tvar plugin map[string]any\n\t\tif err := client.GetJSON(ctx, \"/api/workspaces/\"+workspaceID+\"/plugins/private/\"+url.PathEscape(args[0]), &plugin); err != nil {\n\t\t\treturn fmt.Errorf(\"get Private Plugin status: %w\", err)\n\t\t}\n\t\toutput, _ := cmd.Flags().GetString(\"output\")\n\t\tif output == \"json\" {\n\t\t\treturn cli.PrintJSON(cmd.OutOrStdout(), plugin)\n\t\t}\n\t\treturn printPluginRows(cmd, []map[string]any{plugin})\n\t}\n\tplugins, err := fetchPrivatePlugins(cmd)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"get Private Plugin status: %w\", err)\n\t}\n\toutput, _ := cmd.Flags().GetString(\"output\")\n\tif output == \"json\" {\n\t\treturn cli.PrintJSON(cmd.OutOrStdout(), plugins)\n\t}\n\treturn printPluginRows(cmd, plugins)\n}\n","sourceCodeStart":292,"sourceCodeEnd":328,"githubUrl":"https://github.com/multica-ai/multica/blob/2c0912b6ec764b373d44eeea1e80f0d9f11ab417/server/cmd/multica/cmd_plugin.go#L292-L328","documentation":"First of two identical-message wraps in runPluginStatus (cmd_plugin.go:310): the single-argument form `multica plugin status <key>` failed on its direct GET /api/workspaces/{id}/plugins/private/{url.PathEscape(key)} request. Distinct from the second occurrence (574) which covers the no-arg 'list all then filter' path — same message, different failing call.","triggerScenarios":"Requesting a plugin key that does not exist in the workspace (404); token without read permission (403); server unreachable; workspace ID resolved but deleted server-side.","commonSituations":"Checking status before install completed; typo in the plugin key; querying the wrong workspace via --workspace; agent hasn't reconciled the plugin yet.","solutions":["List what actually exists: `multica plugin list --workspace <id>` and copy the exact plugin_key.","Confirm you targeted the right workspace (the install and status commands must use the same --workspace).","Re-login/fix token if the wrapped error is 401/403; check server if it is a connection error."],"exampleFix":"// before\nmultica plugin status my-plugin   // get Private Plugin status: 404 not found (key uses full form)\n\n// after\nmultica plugin list --workspace main          # shows plugin_key com.example.my-plugin\nmultica plugin status com.example.my-plugin --workspace main","handlingStrategy":"validation","validationCode":"plugins, err := fetchPrivatePlugins(cmd)\nif err != nil { return err }\nkeys := map[string]bool{}\nfor _, p := range plugins { keys[strVal(p, \"plugin_key\")] = true }\nif !keys[wantKey] { return fmt.Errorf(\"plugin %q not installed\", wantKey) }","typeGuard":null,"tryCatchPattern":"if err := statusCmd.Run(); err != nil {\n    if strings.Contains(err.Error(), \"404\") { /* key typo or not yet installed */ }\n    if strings.Contains(err.Error(), \"403\") { /* token scope */ }\n}","preventionTips":["Copy plugin_key verbatim from `plugin list` output rather than typing it.","Use the same --workspace value for install and status.","Poll status only after install reports success."],"tags":["cli","plugin","workspace","http","go"],"backgroundTag":null,"analyzedSha":"2c0912b6ec764b373d44eeea1e80f0d9f11ab417","analyzedAt":"2026-08-15T13:25:18.241Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}